Browse Source

bytestring: Allow bytestring_from_string to be called on NULL

Currently, calling bytestring_from_string(NULL) will result in a SEGV
within strlen().  This patch makes this construct safe, returning
bytestring_NULL, which seems a less surprising result.

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
David Gibson 13 years ago
parent
commit
89f4cfdd19
2 changed files with 9 additions and 2 deletions
  1. 2 0
      ccan/bytestring/bytestring.h
  2. 7 2
      ccan/bytestring/test/run.c

+ 2 - 0
ccan/bytestring/bytestring.h

@@ -62,6 +62,8 @@ static inline struct bytestring bytestring(const char *p, size_t l)
  */
  */
 static inline struct bytestring bytestring_from_string(const char *s)
 static inline struct bytestring bytestring_from_string(const char *s)
 {
 {
+	if (!s)
+		return bytestring_NULL;
 	return bytestring(s, strlen(s));
 	return bytestring(s, strlen(s));
 }
 }
 
 

+ 7 - 2
ccan/bytestring/test/run.c

@@ -9,10 +9,10 @@ const char *str2 = TEST_STRING;
 
 
 int main(void)
 int main(void)
 {
 {
-	struct bytestring bs, bs1, bs2, bs3, bs4;
+	struct bytestring bs, bs1, bs2, bs3, bs4, bs5;
 
 
 	/* This is how many tests you plan to run */
 	/* This is how many tests you plan to run */
-	plan_tests(6);
+	plan_tests(9);
 
 
 	bs = bytestring(str1, sizeof(str1) - 1);
 	bs = bytestring(str1, sizeof(str1) - 1);
 	ok1(bs.ptr == str1);
 	ok1(bs.ptr == str1);
@@ -30,6 +30,11 @@ int main(void)
 	bs4 = bytestring_from_string(TEST_STRING_2);
 	bs4 = bytestring_from_string(TEST_STRING_2);
 	ok1(bs4.len == 3);
 	ok1(bs4.len == 3);
 
 
+	bs5 = bytestring_from_string(NULL);
+	ok1(bs5.len == 0);
+	ok1(bs5.ptr == NULL);
+	ok1(bytestring_eq(bs5, bytestring_NULL));
+
 	/* This exits depending on whether all tests passed */
 	/* This exits depending on whether all tests passed */
 	return exit_status();
 	return exit_status();
 }
 }