]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
efi-string: Fix strchr() null byte handling
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 30 Jan 2023 15:22:10 +0000 (16:22 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Wed, 22 Feb 2023 15:55:07 +0000 (16:55 +0100)
strchr() should be able to search for the terminating null byte,
our implementation doesn't, let's fix that.

src/boot/efi/efi-string.c
src/boot/efi/test-efi-string.c

index ee3dc1c4a9540e73286e0f9fd801bad63b77fd5e..dd71123e9f08d624de14bdd9846081de39ebc059 100644 (file)
@@ -112,7 +112,7 @@ DEFINE_STRCPY(char16_t, strcpy16);
                         s++;                       \
                 }                                  \
                                                    \
-                return NULL;                       \
+                return c ? NULL : (type *) s;      \
         }
 
 DEFINE_STRCHR(char, strchr8);
index c26973d8bd16e1a996e5f139534a1469b87c591c..c7e42c7b940439dbd5acef779ec4f4784a5eabfa 100644 (file)
@@ -229,6 +229,8 @@ TEST(strchr8) {
         assert_se(strchr8(str, 'a') == &str[0]);
         assert_se(strchr8(str, 'c') == &str[2]);
         assert_se(strchr8(str, 'B') == &str[4]);
+
+        assert_se(strchr8(str, 0) == str + strlen8(str));
 }
 
 TEST(strchr16) {
@@ -240,6 +242,8 @@ TEST(strchr16) {
         assert_se(strchr16(str, 'a') == &str[0]);
         assert_se(strchr16(str, 'c') == &str[2]);
         assert_se(strchr16(str, 'B') == &str[4]);
+
+        assert_se(strchr16(str, 0) == str + strlen16(str));
 }
 
 TEST(xstrndup8) {