]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-journal: re-read entry array object
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 6 May 2023 15:16:30 +0000 (00:16 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 6 May 2023 15:26:49 +0000 (00:26 +0900)
`test_object()` may call `journal_file_move_to_object()` and thus
the `array` object may be invalidated.

src/libsystemd/sd-journal/journal-file.c

index fb4b67c138d8db3bc3c4fcfd47f303ab77e6c43d..f594b3eecb36faf3dd8245285389cec4a66b5635 100644 (file)
@@ -2975,8 +2975,16 @@ found:
         if (subtract_one && t == 0 && i == 0)
                 return 0;
 
+        r = journal_file_move_to_object(f, OBJECT_ENTRY_ARRAY, a, &array);
+        if (r < 0)
+                return r;
+
+        p = journal_file_entry_array_item(f, array, 0);
+        if (p <= 0)
+                return -EBADMSG;
+
         /* Let's cache this item for the next invocation */
-        chain_cache_put(f->chain_cache, ci, first, a, journal_file_entry_array_item(f, array, 0), t, subtract_one ? (i > 0 ? i-1 : UINT64_MAX) : i);
+        chain_cache_put(f->chain_cache, ci, first, a, p, t, subtract_one ? (i > 0 ? i-1 : UINT64_MAX) : i);
 
         if (subtract_one && i == 0)
                 p = last_p;