From 89f4cfdd19a1ad7fa17bd1149ddd49874f7dd115 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Mon, 8 Oct 2012 19:05:48 +1100 Subject: [PATCH] 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 --- ccan/bytestring/bytestring.h | 2 ++ ccan/bytestring/test/run.c | 9 +++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ccan/bytestring/bytestring.h b/ccan/bytestring/bytestring.h index ee4087d4..63472fe2 100644 --- a/ccan/bytestring/bytestring.h +++ b/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) { + if (!s) + return bytestring_NULL; return bytestring(s, strlen(s)); } diff --git a/ccan/bytestring/test/run.c b/ccan/bytestring/test/run.c index 49c16a6a..9423b9a0 100644 --- a/ccan/bytestring/test/run.c +++ b/ccan/bytestring/test/run.c @@ -9,10 +9,10 @@ const char *str2 = TEST_STRING; 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 */ - plan_tests(6); + plan_tests(9); bs = bytestring(str1, sizeof(str1) - 1); ok1(bs.ptr == str1); @@ -30,6 +30,11 @@ int main(void) bs4 = bytestring_from_string(TEST_STRING_2); 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 */ return exit_status(); } -- 2.39.2