[gdome] Fixes for libxml strings
- From: Gustavo Sverzut Barbieri <Gustavo Barbieri indt org br>
- To: gdome gnome org
- Cc: "Chencarek Renato \(EXT-INdT/Recife\)" <renato chencarek indt org br>, "Lima Eduardo \(EXT-INdT/Recife\)" <eduardo lima indt org br>, "Rocha Eduardo \(EXT-INdT/Recife\)" <eduardo rocha indt org br>, "Borges Rosfran \(EXT-INdT/Recife\)" <Rosfran Borges indt org br>
- Subject: [gdome] Fixes for libxml strings
- Date: Tue, 28 Mar 2006 13:49:35 -0300
Hello,
While debugging my code using glib, libxml and gdome, both compiled with
memory pools disabled and in a garbage collector friendly way, I found that
some Gdome functions misuse g_free() instead of xmlFree().
Main problem is using gdome_str_mkref_own() with libxml returned values. Since
libxml have its own memory stuff it fails when using glib g_free(). I just
replaced them with gdome_str_mkref_xml(), which will use xmlFree() instead of
g_free().
Attached is the patch to fix issues I have encountered so far.
Both 0.8.1 and CVS have the same problem.
--
Gustavo Sverzut Barbieri
------------------------
Instituto Nokia de Tecnologia - INdT
Jabber: barbieri gmail com
MSN: barbieri gmail com
ICQ#: 17249123
Skype: gsbarbieri
Mobile: +55 (81) 9927 0010
Phone: +1 (347) 624 6296; 08122692 sip stanaphone com
GPG: 0xB640E1A2 @ wwwkeys.pgp.net
diff -ur gdome2/libgdome/gdomecore/gdome-xml-attribute.c gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-attribute.c
--- gdome2/libgdome/gdomecore/gdome-xml-attribute.c 2003-07-18 08:51:20.000000000 -0300
+++ gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-attribute.c 2006-03-28 12:29:43.000000000 -0300
@@ -249,7 +249,7 @@
value = xmlNodeGetContent ((xmlNode *)priv->n);
if (value != NULL)
- return gdome_xml_str_mkref_own (value);
+ return gdome_xml_str_mkref_xml (value);
else
return gdome_xml_str_mkref_dup("");
}
diff -ur gdome2/libgdome/gdomecore/gdome-xml-cdata.c gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-cdata.c
--- gdome2/libgdome/gdomecore/gdome-xml-cdata.c 2003-07-18 08:51:20.000000000 -0300
+++ gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-cdata.c 2006-03-28 12:57:46.000000000 -0300
@@ -185,7 +185,7 @@
g_return_val_if_fail (GDOME_XML_IS_CD (priv), NULL);
g_return_val_if_fail (exc != NULL, NULL);
- return gdome_xml_str_mkref_own (xmlNodeGetContent (priv->n));
+ return gdome_xml_str_mkref_xml (xmlNodeGetContent (priv->n));
}
/**
@@ -268,7 +268,7 @@
content = xmlNodeGetContent (priv->n);
length = gdome_utf16Length (content);
- g_free (content);
+ xmlFree (content);
return length;
}
@@ -360,8 +360,8 @@
if (gdome_xml_n_eventEnabledByCode((GdomeNode *) self, DOM_CHARACTER_DATA_MODIFIED_EVENT_TYPE)) {
/* Fire DOMCharacterDataModified */
mev = gdome_evt_mevnt_mkref ();
- prevValue = gdome_xml_str_mkref (old_str);
- newValue = gdome_xml_str_mkref (new_str);
+ prevValue = gdome_xml_str_mkref_xml (old_str);
+ newValue = gdome_xml_str_mkref_xml (new_str);
gdome_evt_mevnt_initMutationEventByCode (mev, DOM_CHARACTER_DATA_MODIFIED_EVENT_TYPE,
TRUE, FALSE, NULL,
prevValue, newValue, NULL, 0, exc);
@@ -370,7 +370,7 @@
gdome_xml_str_unref (prevValue);
gdome_evt_mevnt_unref ((GdomeEvent *)mev, exc);
}
- g_free (new_str);
+ xmlFree (new_str);
if (old_str != NULL)
xmlFree (old_str);
diff -ur gdome2/libgdome/gdomecore/gdome-xml-element.c gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-element.c
--- gdome2/libgdome/gdomecore/gdome-xml-element.c 2003-10-03 12:53:32.000000000 -0300
+++ gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-element.c 2006-03-28 12:50:17.000000000 -0300
@@ -196,7 +196,7 @@
value = xmlGetProp (priv->n, name->str);
if (value != NULL)
- return gdome_xml_str_mkref_own (value);
+ return gdome_xml_str_mkref_xml (value);
else {
strs = g_strsplit((gchar *)name->str, ":", 0);
if (xmlStrEqual(strs[0], "xmlns"))
diff -ur gdome2/libgdome/gdomecore/gdome-xml-str.c gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-str.c
--- gdome2/libgdome/gdomecore/gdome-xml-str.c 2002-04-01 14:08:24.000000000 -0300
+++ gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-str.c 2006-03-28 12:59:10.000000000 -0300
@@ -42,7 +42,7 @@
void
gdome_xml_str_unref_own (GdomeDOMString *self) {
- g_free (self->str);
+ g_free (self->str);
#ifdef DEBUG_REFCNT
gdome_refdbg_delRef ((void *)self, GDOME_REFDBG_STR);
#endif
diff -ur gdome2/libgdome/gdomecore/gdome-xml-xmlutil.c gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-xmlutil.c
--- gdome2/libgdome/gdomecore/gdome-xml-xmlutil.c 2003-10-03 12:53:32.000000000 -0300
+++ gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-xmlutil.c 2006-03-28 12:45:42.000000000 -0300
@@ -975,9 +975,9 @@
cur->doc = doc;
}
if (prefix == NULL) {
- cur->name = g_strdup("xmlns");
+ cur->name = xmlStrdup ("xmlns");
} else {
- cur->name = g_strdup(prefix);
+ cur->name = xmlStrdup (prefix);
cur->ns = gdome_xmlNewNs (doc, GDOME_XMLNS_NAMESPACE, "xmlns");
}
if (value != NULL) {
diff -ur gdome2-0.8.1/libgdome/gdomecore/gdome-xml-attribute.c gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-attribute.c
--- gdome2-0.8.1/libgdome/gdomecore/gdome-xml-attribute.c 2003-07-18 08:51:21.000000000 -0300
+++ gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-attribute.c 2006-03-28 12:29:43.000000000 -0300
@@ -249,7 +249,7 @@
value = xmlNodeGetContent ((xmlNode *)priv->n);
if (value != NULL)
- return gdome_xml_str_mkref_own (value);
+ return gdome_xml_str_mkref_xml (value);
else
return gdome_xml_str_mkref_dup("");
}
diff -ur gdome2-0.8.1/libgdome/gdomecore/gdome-xml-cdata.c gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-cdata.c
--- gdome2-0.8.1/libgdome/gdomecore/gdome-xml-cdata.c 2003-07-18 08:51:21.000000000 -0300
+++ gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-cdata.c 2006-03-28 12:57:46.000000000 -0300
@@ -185,7 +185,7 @@
g_return_val_if_fail (GDOME_XML_IS_CD (priv), NULL);
g_return_val_if_fail (exc != NULL, NULL);
- return gdome_xml_str_mkref_own (xmlNodeGetContent (priv->n));
+ return gdome_xml_str_mkref_xml (xmlNodeGetContent (priv->n));
}
/**
@@ -268,7 +268,7 @@
content = xmlNodeGetContent (priv->n);
length = gdome_utf16Length (content);
- g_free (content);
+ xmlFree (content);
return length;
}
@@ -360,8 +360,8 @@
if (gdome_xml_n_eventEnabledByCode((GdomeNode *) self, DOM_CHARACTER_DATA_MODIFIED_EVENT_TYPE)) {
/* Fire DOMCharacterDataModified */
mev = gdome_evt_mevnt_mkref ();
- prevValue = gdome_xml_str_mkref (old_str);
- newValue = gdome_xml_str_mkref (new_str);
+ prevValue = gdome_xml_str_mkref_xml (old_str);
+ newValue = gdome_xml_str_mkref_xml (new_str);
gdome_evt_mevnt_initMutationEventByCode (mev, DOM_CHARACTER_DATA_MODIFIED_EVENT_TYPE,
TRUE, FALSE, NULL,
prevValue, newValue, NULL, 0, exc);
@@ -370,7 +370,7 @@
gdome_xml_str_unref (prevValue);
gdome_evt_mevnt_unref ((GdomeEvent *)mev, exc);
}
- g_free (new_str);
+ xmlFree (new_str);
if (old_str != NULL)
xmlFree (old_str);
diff -ur gdome2-0.8.1/libgdome/gdomecore/gdome-xml-element.c gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-element.c
--- gdome2-0.8.1/libgdome/gdomecore/gdome-xml-element.c 2003-10-03 12:53:33.000000000 -0300
+++ gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-element.c 2006-03-28 12:50:17.000000000 -0300
@@ -196,7 +196,7 @@
value = xmlGetProp (priv->n, name->str);
if (value != NULL)
- return gdome_xml_str_mkref_own (value);
+ return gdome_xml_str_mkref_xml (value);
else {
strs = g_strsplit((gchar *)name->str, ":", 0);
if (xmlStrEqual(strs[0], "xmlns"))
diff -ur gdome2-0.8.1/libgdome/gdomecore/gdome-xml-str.c gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-str.c
--- gdome2-0.8.1/libgdome/gdomecore/gdome-xml-str.c 2002-04-01 14:08:24.000000000 -0300
+++ gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-str.c 2006-03-28 12:59:10.000000000 -0300
@@ -42,7 +42,7 @@
void
gdome_xml_str_unref_own (GdomeDOMString *self) {
- g_free (self->str);
+ g_free (self->str);
#ifdef DEBUG_REFCNT
gdome_refdbg_delRef ((void *)self, GDOME_REFDBG_STR);
#endif
diff -ur gdome2-0.8.1/libgdome/gdomecore/gdome-xml-xmlutil.c gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-xmlutil.c
--- gdome2-0.8.1/libgdome/gdomecore/gdome-xml-xmlutil.c 2003-10-03 12:53:33.000000000 -0300
+++ gdome2-0.8.1-fix/libgdome/gdomecore/gdome-xml-xmlutil.c 2006-03-28 12:45:42.000000000 -0300
@@ -975,9 +975,9 @@
cur->doc = doc;
}
if (prefix == NULL) {
- cur->name = g_strdup("xmlns");
+ cur->name = xmlStrdup ("xmlns");
} else {
- cur->name = g_strdup(prefix);
+ cur->name = xmlStrdup (prefix);
cur->ns = gdome_xmlNewNs (doc, GDOME_XMLNS_NAMESPACE, "xmlns");
}
if (value != NULL) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]