[evolution-patches] [gtkhtml] Memory leaks
- From: Chris Heath <chris heathens co nz>
- To: evolution-patches gnome org
- Subject: [evolution-patches] [gtkhtml] Memory leaks
- Date: Mon, 27 Mar 2006 08:24:16 -0500
Here is a patch for memory leaks I found in gtkhtml. Please review and
apply.
Index: src/ChangeLog
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/ChangeLog,v
retrieving revision 1.2173
diff -u -p -r1.2173 ChangeLog
--- src/ChangeLog 25 Mar 2006 17:47:41 -0000 1.2173
+++ src/ChangeLog 27 Mar 2006 12:48:36 -0000
@@ -1,3 +1,12 @@
+2006-03-26 Chris Heath <chris heathens co nz>
+
+ * htmlengine.c (element_parse_object), (element_parse_cell),
+ (set_object_data): Fix memory leaks
+ * htmlcursor.c (html_cursor_beginning_of_paragraph),
+ (html_cursor_end_of_paragraph): ditto
+ * gtkhtml.c (button_press_event): ditto
+ * htmlstyle.c (html_style_free): ditto
+
2006-03-25 Andreas Köhler <andi5 py gmx net>
* htmlprinter.c: fix typo to enable printing of embedded objects
Index: src/gtkhtml.c
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/gtkhtml.c,v
retrieving revision 1.617
diff -u -p -r1.617 gtkhtml.c
--- src/gtkhtml.c 1 Mar 2006 06:04:01 -0000 1.617
+++ src/gtkhtml.c 27 Mar 2006 12:48:38 -0000
@@ -1743,13 +1743,15 @@ button_press_event (GtkWidget *widget,
HTMLObject *obj;
HTMLEngine *orig_e;
gint offset;
+ gchar *url = NULL;
orig_e = GTK_HTML (orig_widget)->engine;
obj = html_engine_get_object_at (engine, x, y, &offset, FALSE);
if (obj && ((HTML_IS_IMAGE (obj) && HTML_IMAGE (obj)->url && *HTML_IMAGE (obj)->url)
- || (HTML_IS_TEXT (obj) && html_object_get_complete_url (obj, offset))))
+ || (HTML_IS_TEXT (obj) && (url = html_object_get_complete_url (obj, offset))))) {
+ g_free (url);
html_engine_set_focus_object (orig_e, obj, offset);
- else {
+ } else {
html_engine_set_focus_object (orig_e, NULL, 0);
if (orig_e->caret_mode || engine->caret_mode)
html_engine_jump_at (engine, x, y);
Index: src/htmlcursor.c
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/htmlcursor.c,v
retrieving revision 1.77
diff -u -p -r1.77 htmlcursor.c
--- src/htmlcursor.c 28 Feb 2006 20:51:54 -0000 1.77
+++ src/htmlcursor.c 27 Mar 2006 12:48:39 -0000
@@ -733,7 +733,7 @@ html_cursor_get_prev_char (const HTMLCur
gboolean
html_cursor_beginning_of_paragraph (HTMLCursor *cursor, HTMLEngine *engine)
{
- HTMLCursor *copy;
+ HTMLCursor copy;
HTMLObject *flow;
gboolean rv = FALSE;
gint level, new_level;
@@ -748,15 +748,14 @@ html_cursor_beginning_of_paragraph (HTML
while (1) {
if (!cursor->offset) {
- copy = html_cursor_dup (cursor);
+ html_cursor_copy (©, cursor);
if (backward (cursor)) {
new_level = html_object_get_parent_level (cursor->object);
if (new_level < level
|| (new_level == level && flow != cursor->object->parent)) {
- html_cursor_copy (cursor, copy);
+ html_cursor_copy (cursor, ©);
break;
}
- html_cursor_destroy (copy);
} else
break;
}
@@ -772,7 +771,7 @@ html_cursor_beginning_of_paragraph (HTML
gboolean
html_cursor_end_of_paragraph (HTMLCursor *cursor, HTMLEngine *engine)
{
- HTMLCursor *copy;
+ HTMLCursor copy;
HTMLObject *flow;
gboolean rv = FALSE;
gint level, new_level;
@@ -787,15 +786,14 @@ html_cursor_end_of_paragraph (HTMLCursor
while (1) {
if (cursor->offset == html_object_get_length (cursor->object)) {
- copy = html_cursor_dup (cursor);
+ html_cursor_copy (©, cursor);
if (forward (cursor)) {
new_level = html_object_get_parent_level (cursor->object);
if (new_level < level
|| (new_level == level && flow != cursor->object->parent)) {
- html_cursor_copy (cursor, copy);
+ html_cursor_copy (cursor, ©);
break;
}
- html_cursor_destroy (copy);
} else
break;
}
Index: src/htmlengine.c
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/htmlengine.c,v
retrieving revision 1.645
diff -u -p -r1.645 htmlengine.c
--- src/htmlengine.c 22 Mar 2006 02:10:35 -0000 1.645
+++ src/htmlengine.c 27 Mar 2006 12:48:41 -0000
@@ -1521,6 +1521,7 @@ element_parse_object (HTMLEngine *e, HTM
if (element->style->height)
height = element->style->height->val;
+ html_element_free (element);
eb = (GtkHTMLEmbedded *) gtk_html_embedded_new (classid, name, type, data,
width, height);
@@ -3364,8 +3365,10 @@ element_parse_cell (HTMLEngine *e, HTMLO
html_element_parse_coreattrs (element);
- if (!table)
+ if (!table) {
+ html_element_free (element);
return;
+ }
cell = HTML_TABLE_CELL (html_table_cell_new (rowSpan, colSpan, table->padding));
@@ -6076,7 +6079,7 @@ static void
set_object_data (gpointer key, gpointer value, gpointer data)
{
/* printf ("set %s\n", (const gchar *) key); */
- html_object_set_data (HTML_OBJECT (data), g_strdup ((const gchar *) key), g_strdup ((const gchar *) value));
+ html_object_set_data (HTML_OBJECT (data), (const gchar *) key, (const gchar *) value);
}
static void
Index: src/htmlstyle.c
===================================================================
RCS file: /cvs/gnome/gtkhtml/src/htmlstyle.c,v
retrieving revision 1.24
diff -u -p -r1.24 htmlstyle.c
--- src/htmlstyle.c 11 Sep 2005 04:05:25 -0000 1.24
+++ src/htmlstyle.c 27 Mar 2006 12:48:41 -0000
@@ -129,6 +129,9 @@ html_style_free (HTMLStyle *style)
if (style->bg_color)
html_color_unref (style->bg_color);
+ if (style->border_color)
+ html_color_unref (style->border_color);
+
g_free (style);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]