diff options
author | Martyn Russell <martyn@lanedo.com> | 2012-10-31 11:09:54 +0000 |
---|---|---|
committer | Martyn Russell <martyn@lanedo.com> | 2012-10-31 15:55:37 +0000 |
commit | 815ffd656d6f49dcb04f54c710def69d93631409 (patch) | |
tree | 60f7c0f5de28cb1ac1028402ef8081278544f20b | |
parent | ccd92636925a2a4e01e2991e7264a82290171703 (diff) | |
download | tracker-815ffd656d6f49dcb04f54c710def69d93631409.tar.gz |
libtracker-extract: Fixed g_data_input_stream_read_upto() return value mem leak
Fixes GB#687134
-rw-r--r-- | src/libtracker-extract/tracker-extract-client.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/libtracker-extract/tracker-extract-client.c b/src/libtracker-extract/tracker-extract-client.c index 21b614a1d..016361689 100644 --- a/src/libtracker-extract/tracker-extract-client.c +++ b/src/libtracker-extract/tracker-extract-client.c @@ -257,12 +257,12 @@ dbus_send_and_splice_async (GDBusConnection *connection, data); } -static inline const gchar * +static inline gchar * get_metadata_fast_read (GDataInputStream *data_input_stream, gsize *remaining, GError *error) { - const gchar *output; + gchar *output; gsize len_read; if (error) { @@ -275,12 +275,17 @@ get_metadata_fast_read (GDataInputStream *data_input_stream, output = g_data_input_stream_read_upto (data_input_stream, "\0", 1, &len_read, NULL, &error); if (error) { + g_free (output); return NULL; } *remaining -= len_read; - g_return_val_if_fail (*remaining > 0, NULL); + if (*remaining <= 0) { + g_warning ("Expected remaining bytes to be > 0 when it wasn't after g_data_input_stream_read_upto() call"); + g_free (output); + return NULL; + } /* Read NUL terminating byte. * @@ -292,6 +297,7 @@ get_metadata_fast_read (GDataInputStream *data_input_stream, g_data_input_stream_read_byte (data_input_stream, NULL, &error); if (error) { + g_free (output); return NULL; } @@ -315,7 +321,7 @@ get_metadata_fast_cb (void *buffer, } else { GInputStream *input_stream; GDataInputStream *data_input_stream; - const gchar *preupdate, *postupdate, *sparql, *where; + gchar *preupdate, *postupdate, *sparql, *where; TrackerSparqlBuilder *builder; gssize remaining; @@ -347,21 +353,25 @@ get_metadata_fast_cb (void *buffer, if (where) { tracker_extract_info_set_where_clause (data->info, where); + g_free (where); } if (preupdate) { builder = tracker_extract_info_get_preupdate_builder (data->info); tracker_sparql_builder_prepend (builder, preupdate); + g_free (preupdate); } if (postupdate) { builder = tracker_extract_info_get_postupdate_builder (data->info); tracker_sparql_builder_prepend (builder, postupdate); + g_free (postupdate); } if (sparql) { builder = tracker_extract_info_get_metadata_builder (data->info); tracker_sparql_builder_prepend (builder, sparql); + g_free (sparql); } g_simple_async_result_set_op_res_gpointer (data->res, |