Avoid memory leaks in borderline cases. (#172612, Morten Welinder)

2005-04-05  Matthias Clasen  <mclasen@redhat.com>

	* glib/gfileutils.c (get_contents_stdio): Avoid memory
	leaks in borderline cases.  (#172612, Morten Welinder)
This commit is contained in:
Matthias Clasen 2005-04-05 04:09:49 +00:00 committed by Matthias Clasen
parent 112be25742
commit 4fe1315d5e
5 changed files with 26 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2005-04-05 Matthias Clasen <mclasen@redhat.com>
* glib/gfileutils.c (get_contents_stdio): Avoid memory
leaks in borderline cases. (#172612, Morten Welinder)
2005-04-04 Matthias Clasen <mclasen@redhat.com> 2005-04-04 Matthias Clasen <mclasen@redhat.com>
* glib/gconvert.c: Clarify docs in some places. (#172404, * glib/gconvert.c: Clarify docs in some places. (#172404,

View File

@ -1,3 +1,8 @@
2005-04-05 Matthias Clasen <mclasen@redhat.com>
* glib/gfileutils.c (get_contents_stdio): Avoid memory
leaks in borderline cases. (#172612, Morten Welinder)
2005-04-04 Matthias Clasen <mclasen@redhat.com> 2005-04-04 Matthias Clasen <mclasen@redhat.com>
* glib/gconvert.c: Clarify docs in some places. (#172404, * glib/gconvert.c: Clarify docs in some places. (#172404,

View File

@ -1,3 +1,8 @@
2005-04-05 Matthias Clasen <mclasen@redhat.com>
* glib/gfileutils.c (get_contents_stdio): Avoid memory
leaks in borderline cases. (#172612, Morten Welinder)
2005-04-04 Matthias Clasen <mclasen@redhat.com> 2005-04-04 Matthias Clasen <mclasen@redhat.com>
* glib/gconvert.c: Clarify docs in some places. (#172404, * glib/gconvert.c: Clarify docs in some places. (#172404,

View File

@ -1,3 +1,8 @@
2005-04-05 Matthias Clasen <mclasen@redhat.com>
* glib/gfileutils.c (get_contents_stdio): Avoid memory
leaks in borderline cases. (#172612, Morten Welinder)
2005-04-04 Matthias Clasen <mclasen@redhat.com> 2005-04-04 Matthias Clasen <mclasen@redhat.com>
* glib/gconvert.c: Clarify docs in some places. (#172404, * glib/gconvert.c: Clarify docs in some places. (#172404,

View File

@ -473,6 +473,7 @@ get_contents_stdio (const gchar *display_filename,
gchar *str = NULL; gchar *str = NULL;
size_t total_bytes = 0; size_t total_bytes = 0;
size_t total_allocated = 0; size_t total_allocated = 0;
gchar *tmp;
g_assert (f != NULL); g_assert (f != NULL);
@ -490,9 +491,9 @@ get_contents_stdio (const gchar *display_filename,
else else
total_allocated = MIN (bytes + 1, sizeof (buf)); total_allocated = MIN (bytes + 1, sizeof (buf));
str = g_try_realloc (str, total_allocated); tmp = g_try_realloc (str, total_allocated);
if (str == NULL) if (tmp == NULL)
{ {
g_set_error (error, g_set_error (error,
G_FILE_ERROR, G_FILE_ERROR,
@ -503,6 +504,8 @@ get_contents_stdio (const gchar *display_filename,
goto error; goto error;
} }
str = tmp;
} }
if (ferror (f)) if (ferror (f))
@ -523,7 +526,7 @@ get_contents_stdio (const gchar *display_filename,
fclose (f); fclose (f);
if (total_bytes == 0) if (total_allocated == 0)
str = g_new (gchar, 1); str = g_new (gchar, 1);
str[total_bytes] = '\0'; str[total_bytes] = '\0';