]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
coredump: when parsing json, optionally copy the string first
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 19 Sep 2022 09:29:56 +0000 (11:29 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 28 Sep 2022 07:38:13 +0000 (09:38 +0200)
src/shared/elf-util.c

index 3ba06c5290e75ce5c49adf6e0576ad70fc4a1ec6..ae4193cacfb28fc51d5cae444c76bf847199205a 100644 (file)
@@ -326,6 +326,19 @@ static int parse_package_metadata(const char *name, JsonVariant *id_json, Elf *e
                         if (note_header.n_type != ELF_PACKAGE_METADATA_ID)
                                 continue;
 
+                        _cleanup_free_ char *payload_0suffixed = NULL;
+                        assert(note_offset > desc_offset);
+                        size_t payload_len = note_offset - desc_offset;
+
+                        /* If we are lucky and the payload is NUL-padded, we don't need to copy the string.
+                         * But if happens to go all the way until the end of the buffer, make a copy. */
+                        if (payload[payload_len-1] != '\0') {
+                                payload_0suffixed = memdup_suffix0(payload, payload_len);
+                                if (!payload_0suffixed)
+                                        return log_oom();
+                                payload = payload_0suffixed;
+                        }
+
                         r = json_parse(payload, 0, &v, NULL, NULL);
                         if (r < 0)
                                 return log_error_errno(r, "json_parse on %s failed: %m", payload);