]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
string-util: make make_cstring() take void* rather than char*
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 16 Apr 2026 23:41:50 +0000 (08:41 +0900)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 17 Apr 2026 17:24:53 +0000 (19:24 +0200)
It is typically used for making C string embedded in a binary data.
Hence, the input pointer may not be char*.

src/basic/string-util.c
src/basic/string-util.h
src/libsystemd-network/dhcp6-option.c
src/libsystemd-network/sd-dns-resolver.c
src/shared/dns-packet.c

index 9b63516ce0908f4dec958ce73541eeb84955a153..f7a0bb4474a3bd7873474cdfafedc04674d4c058 100644 (file)
@@ -1292,7 +1292,7 @@ char* string_replace_char(char *str, char old_char, char new_char) {
         return str;
 }
 
-int make_cstring(const char *s, size_t n, MakeCStringMode mode, char **ret) {
+int make_cstring(const void *s, size_t n, MakeCStringMode mode, char **ret) {
         char *b;
 
         assert(s || n == 0);
@@ -1311,11 +1311,11 @@ int make_cstring(const char *s, size_t n, MakeCStringMode mode, char **ret) {
 
                 b = new0(char, 1);
         } else {
-                const char *nul;
+                const uint8_t *nul;
 
                 nul = memchr(s, 0, n);
                 if (nul) {
-                        if (nul < s + n - 1 || /* embedded NUL? */
+                        if (nul < (const uint8_t*) s + n - 1 || /* embedded NUL? */
                             mode == MAKE_CSTRING_REFUSE_TRAILING_NUL)
                                 return -EINVAL;
 
index 5ab4dd9016dd2c43e54ecd9e9a9e7d7ecc731466..270b9d907a8085dbc0c543d469b03dcde0f20b93 100644 (file)
@@ -271,7 +271,7 @@ typedef enum MakeCStringMode {
         _MAKE_CSTRING_MODE_INVALID = -1,
 } MakeCStringMode;
 
-int make_cstring(const char *s, size_t n, MakeCStringMode mode, char **ret);
+int make_cstring(const void *s, size_t n, MakeCStringMode mode, char **ret);
 
 size_t strspn_from_end(const char *str, const char *accept) _pure_;
 
index 1508d8978135043de47b379ddc62f8cf07fead8f..d62fd70588923f8585b02872d3d3000a752370ad 100644 (file)
@@ -548,7 +548,7 @@ int dhcp6_option_parse_string(const uint8_t *data, size_t data_len, char **ret)
                 return 0;
         }
 
-        r = make_cstring((const char *) data, data_len, MAKE_CSTRING_REFUSE_TRAILING_NUL, &string);
+        r = make_cstring(data, data_len, MAKE_CSTRING_REFUSE_TRAILING_NUL, &string);
         if (r < 0)
                 return r;
 
index 605397cf97ed57b3bee2540d1143291717d182f5..8285c5cb57640c52f41b48ac20a8c6d7b89361c5 100644 (file)
@@ -252,8 +252,8 @@ int dnr_parse_svc_params(const uint8_t *option, size_t len, sd_dns_resolver *res
                         return -EBADMSG;
 
                 case DNS_SVC_PARAM_KEY_DOHPATH:
-                        r = make_cstring((const char*) &option[offset], plen,
-                                        MAKE_CSTRING_REFUSE_TRAILING_NUL, &dohpath);
+                        r = make_cstring(&option[offset], plen,
+                                         MAKE_CSTRING_REFUSE_TRAILING_NUL, &dohpath);
                         if (ERRNO_IS_NEG_RESOURCE(r))
                                 return r;
                         if (r < 0)
index f250f40edff9f10cf6fc3c0e0f6d888a9d2f209a..c8c54e7988afccf63dcd89eb9fc21011db3da511 100644 (file)
@@ -2861,7 +2861,7 @@ int dns_packet_ede_rcode(DnsPacket *p, int *ret_ede_rcode, char **ret_ede_msg) {
                                 return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
                                                        "EDNS0 truncated EDE info code.");
 
-                        r = make_cstring((char *) d + 6, length - 2U, MAKE_CSTRING_ALLOW_TRAILING_NUL, &msg);
+                        r = make_cstring(d + 6, length - 2U, MAKE_CSTRING_ALLOW_TRAILING_NUL, &msg);
                         if (r < 0)
                                 return log_debug_errno(r, "Invalid EDE text in opt.");