changeset 669:83493acbd279

int: str2XX should fail with -EINVAL if the input isn't nul-terminated Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Thu, 21 Feb 2019 18:33:10 -0500
parents 81b0f68b1185
children e114cae635b0
files include/jeffpc/int.h tests/test_str2uint.c
diffstat 2 files changed, 17 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/include/jeffpc/int.h	Thu Feb 21 18:25:21 2019 -0500
+++ b/include/jeffpc/int.h	Thu Feb 21 18:33:10 2019 -0500
@@ -51,9 +51,14 @@
 	if (errno)							\
 		return -errno;						\
 									\
+	/* parsed nothing or input is empty */				\
 	if (endptr == s)						\
 		return -EINVAL;						\
 									\
+	/* nul-terminated? */						\
+	if (*endptr != '\0')						\
+		return -EINVAL;						\
+									\
 	if (tmp > imax)							\
 		return -ERANGE;						\
 									\
--- a/tests/test_str2uint.c	Thu Feb 21 18:25:21 2019 -0500
+++ b/tests/test_str2uint.c	Thu Feb 21 18:33:10 2019 -0500
@@ -84,9 +84,8 @@
 	},
 	{
 		.in	  = "0x0",
-		/* FIXME: base 8 & 10 should return -EINVAL */
-		.out[B8]  = ENT(0, 0, 0, 0, 0, 0),
-		.out[B10] = ENT(0, 0, 0, 0, 0, 0),
+		.out[B8]  = ENT(0, 0, 0, -EINVAL, -EINVAL, -EINVAL),
+		.out[B10] = ENT(0, 0, 0, -EINVAL, -EINVAL, -EINVAL),
 		.out[B16] = ENT(0, 0, 0, 0, 0, 0),
 	},
 	{
@@ -103,9 +102,8 @@
 	},
 	{
 		.in	  = "0x8",
-		/* FIXME: base 8 & 10 should return -EINVAL */
-		.out[B8]  = ENT(0, 0, 0, 0, 0, 0),
-		.out[B10] = ENT(0, 0, 0, 0, 0, 0),
+		.out[B8]  = ENT(0, 0, 0, -EINVAL, -EINVAL, -EINVAL),
+		.out[B10] = ENT(0, 0, 0, -EINVAL, -EINVAL, -EINVAL),
 		.out[B16] = ENT(8, 8, 8, 0, 0, 0),
 	},
 	{
@@ -122,30 +120,26 @@
 	},
 	{
 		.in	  = "0XA",
-		/* FIXME: base 8 & 10 should return -EINVAL */
-		.out[B8]  = ENT(0, 0, 0, 0, 0, 0),
-		.out[B10] = ENT(0, 0, 0, 0, 0, 0),
+		.out[B8]  = ENT(0, 0, 0, -EINVAL, -EINVAL, -EINVAL),
+		.out[B10] = ENT(0, 0, 0, -EINVAL, -EINVAL, -EINVAL),
 		.out[B16] = ENT(0xa, 0xa, 0xa, 0, 0, 0),
 	},
 	{
 		.in	  = "0Xa",
-		/* FIXME: base 8 & 10 should return -EINVAL */
-		.out[B8]  = ENT(0, 0, 0, 0, 0, 0),
-		.out[B10] = ENT(0, 0, 0, 0, 0, 0),
+		.out[B8]  = ENT(0, 0, 0, -EINVAL, -EINVAL, -EINVAL),
+		.out[B10] = ENT(0, 0, 0, -EINVAL, -EINVAL, -EINVAL),
 		.out[B16] = ENT(0xa, 0xa, 0xa, 0, 0, 0),
 	},
 	{
 		.in	  = "0xA",
-		/* FIXME: base 8 & 10 should return -EINVAL */
-		.out[B8]  = ENT(0, 0, 0, 0, 0, 0),
-		.out[B10] = ENT(0, 0, 0, 0, 0, 0),
+		.out[B8]  = ENT(0, 0, 0, -EINVAL, -EINVAL, -EINVAL),
+		.out[B10] = ENT(0, 0, 0, -EINVAL, -EINVAL, -EINVAL),
 		.out[B16] = ENT(0xa, 0xa, 0xa, 0, 0, 0),
 	},
 	{
 		.in	  = "0xa",
-		/* FIXME: base 8 & 10 should return -EINVAL */
-		.out[B8]  = ENT(0, 0, 0, 0, 0, 0),
-		.out[B10] = ENT(0, 0, 0, 0, 0, 0),
+		.out[B8]  = ENT(0, 0, 0, -EINVAL, -EINVAL, -EINVAL),
+		.out[B10] = ENT(0, 0, 0, -EINVAL, -EINVAL, -EINVAL),
 		.out[B16] = ENT(0xa, 0xa, 0xa, 0, 0, 0),
 	},
 	/*