From 0d7514bfbb49566542ce7abc8150a9558b78b5ff Mon Sep 17 00:00:00 2001 From: Madelyn Olson Date: Fri, 25 Oct 2024 14:01:01 -0700 Subject: [PATCH] Fix bug related to /x00 Signed-off-by: Madelyn Olson --- src/sds.c | 6 +++--- src/unit/test_sds.c | 8 ++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/sds.c b/src/sds.c index 7c350029d9..cec09c0412 100644 --- a/src/sds.c +++ b/src/sds.c @@ -1045,7 +1045,7 @@ static int sdsparsearg(const char *arg, unsigned int *len, char *dst) { int done = 0; while (!done) { - char new_char = 0; + int new_char = -1; if (inq) { if (*p == '\\' && *(p + 1) == 'x' && is_hex_digit(*(p + 2)) && is_hex_digit(*(p + 3))) { new_char = (hex_digit_to_int(*(p + 2)) * 16) + hex_digit_to_int(*(p + 3)); @@ -1098,10 +1098,10 @@ static int sdsparsearg(const char *arg, unsigned int *len, char *dst) { default: new_char = *p; break; } } - if (new_char) { + if (new_char != -1) { if (len) (*len)++; if (dst) { - *dst = new_char; + *dst = (char) new_char; dst++; } } diff --git a/src/unit/test_sds.c b/src/unit/test_sds.c index 28944577f9..ed40e3995b 100644 --- a/src/unit/test_sds.c +++ b/src/unit/test_sds.c @@ -331,6 +331,9 @@ int test_sdsHeaderSizes(int argc, char **argv, int flags) { return 0; } + static sds *sdssplitargs_legacy(const char *line, int *argc); + + int test_sdssplitargs(int argc, char **argv, int flags) { UNUSED(argc); UNUSED(argv); @@ -363,6 +366,11 @@ int test_sdssplitargs(int argc, char **argv, int flags) { TEST_ASSERT(!strcmp("Hello", sargv[0])); sdsfreesplitres(sargv, len); + char *binary_string = "\"\\x73\\x75\\x70\\x65\\x72\\x20\\x00\\x73\\x65\\x63\\x72\\x65\\x74\\x20\\x70\\x61\\x73\\x73\\x77\\x6f\\x72\\x64\""; + sargv = sdssplitargs_legacy(binary_string, &len); + TEST_ASSERT(1 == len); + TEST_ASSERT(22 == sdslen(sargv[0])); + return 0; }