[tracker/tracker-0.14] libtracker-extract: Fixed g_data_input_stream_read_upto() return value mem leak
- From: Martyn James Russell <mr src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/tracker-0.14] libtracker-extract: Fixed g_data_input_stream_read_upto() return value mem leak
- Date: Thu, 1 Nov 2012 17:49:34 +0000 (UTC)
commit 815ffd656d6f49dcb04f54c710def69d93631409
Author: Martyn Russell <martyn lanedo com>
Date: Wed Oct 31 11:09:54 2012 +0000
libtracker-extract: Fixed g_data_input_stream_read_upto() return value mem leak
Fixes GB#687134
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 21b614a..0163616 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,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]