libsysprof-capture: free deduplicated array entries

This commit is contained in:
Christian Hergert
2023-05-12 14:09:43 -07:00
parent dc99b46254
commit 582986f5c9
2 changed files with 7 additions and 3 deletions

View File

@ -1343,7 +1343,7 @@ array_append (const char ***files,
*files = new_files; *files = new_files;
} }
(*files)[*n_files] = new_element ? strdup (new_element) : NULL; (*files)[*n_files] = new_element ? sysprof_strdup (new_element) : NULL;
*n_files = *n_files + 1; *n_files = *n_files + 1;
assert (*n_files <= *n_files_allocated); assert (*n_files <= *n_files_allocated);
@ -1362,7 +1362,10 @@ array_deduplicate (const char **files,
for (last_written = 0, next_to_read = 1; last_written <= next_to_read && next_to_read < *n_files;) for (last_written = 0, next_to_read = 1; last_written <= next_to_read && next_to_read < *n_files;)
{ {
if (strcmp (files[next_to_read], files[last_written]) == 0) if (strcmp (files[next_to_read], files[last_written]) == 0)
next_to_read++; {
free ((char *)files[next_to_read]);
next_to_read++;
}
else else
files[++last_written] = files[next_to_read++]; files[++last_written] = files[next_to_read++];
} }

View File

@ -732,7 +732,7 @@ test_reader_writer_file (void)
g_autofree gchar *data = NULL; g_autofree gchar *data = NULL;
g_autofree gchar *testfile = NULL; g_autofree gchar *testfile = NULL;
GByteArray *buf = g_byte_array_new (); GByteArray *buf = g_byte_array_new ();
g_autofree const gchar **files = NULL; const char **files;
SysprofCaptureWriter *writer; SysprofCaptureWriter *writer;
SysprofCaptureReader *reader; SysprofCaptureReader *reader;
SysprofCaptureFrameType type; SysprofCaptureFrameType type;
@ -799,6 +799,7 @@ test_reader_writer_file (void)
g_assert_nonnull (files); g_assert_nonnull (files);
g_assert_cmpstr (files[0], ==, testfile); g_assert_cmpstr (files[0], ==, testfile);
g_assert_null (files[1]); g_assert_null (files[1]);
free (files);
sysprof_capture_reader_reset (reader); sysprof_capture_reader_reset (reader);
new_fd = sysprof_memfd_create ("[sysprof-capture-file]"); new_fd = sysprof_memfd_create ("[sysprof-capture-file]");