summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodrigo Moya <rodrigo@ximian.com>2004-02-18 15:00:34 +0000
committerRodrigo Moya <rodrigo@src.gnome.org>2004-02-18 15:00:34 +0000
commit8a809ff796a25ed8cbbeeb01f41b799684166f43 (patch)
tree9c1ce6cadda21f66c78d0cc27cdb58accaa9e162
parenta927fd0741f056b6d0df35ce5602e0d1d247afbd (diff)
downloadlibsoup-8a809ff796a25ed8cbbeeb01f41b799684166f43.tar.gz
Fixes #54512
2004-02-18 Rodrigo Moya <rodrigo@ximian.com> Fixes #54512 * libsoup/soup-soap-response.c (soup_soap_parameter_get_int_value): don't leak the value returned from xmlNodeGetContent(). (soup_soap_parameter_get_string_value, soup_soap_parameter_get_property): return a g_strdup'ed string, not the value returned by xmlNodeGetContent, so that callers can use g_free, and not xmlFree. * libsoup/soup-soap-response.h: made soup_parameter_get_property not return const.
-rw-r--r--ChangeLog14
-rw-r--r--libsoup/soup-soap-response.c32
-rw-r--r--libsoup/soup-soap-response.h2
3 files changed, 43 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index df4c1a6d..18f58b6b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2004-02-18 Rodrigo Moya <rodrigo@ximian.com>
+
+ Fixes #54512
+
+ * libsoup/soup-soap-response.c (soup_soap_parameter_get_int_value):
+ don't leak the value returned from xmlNodeGetContent().
+ (soup_soap_parameter_get_string_value,
+ soup_soap_parameter_get_property): return a g_strdup'ed
+ string, not the value returned by xmlNodeGetContent, so that
+ callers can use g_free, and not xmlFree.
+
+ * libsoup/soup-soap-response.h: made soup_parameter_get_property
+ not return const.
+
2004-02-17 Dan Winship <danw@ximian.com>
* libsoup/soup-soap-message.h (SOUP_IS_SOAP_MESSAGE_CLASS): Fix a
diff --git a/libsoup/soup-soap-response.c b/libsoup/soup-soap-response.c
index 35920e05..b0746d13 100644
--- a/libsoup/soup-soap-response.c
+++ b/libsoup/soup-soap-response.c
@@ -249,9 +249,19 @@ soup_soap_parameter_get_name (SoupSoapParameter *param)
int
soup_soap_parameter_get_int_value (SoupSoapParameter *param)
{
+ int i;
+ char *s;
g_return_val_if_fail (param != NULL, -1);
- return atoi (xmlNodeGetContent (param));
+ s = xmlNodeGetContent (param);
+ if (s) {
+ i = atoi (s);
+ xmlFree (s);
+
+ return i;
+ }
+
+ return -1;
}
/**
@@ -260,9 +270,14 @@ soup_soap_parameter_get_int_value (SoupSoapParameter *param)
char *
soup_soap_parameter_get_string_value (SoupSoapParameter *param)
{
+ char *xml_s, *s;
g_return_val_if_fail (param != NULL, NULL);
- return xmlNodeGetContent (param);
+ xml_s = xmlNodeGetContent (param);
+ s = g_strdup (xml_s);
+ xmlFree (xml_s);
+
+ return s;
}
/**
@@ -351,10 +366,19 @@ soup_soap_parameter_get_next_child_by_name (SoupSoapParameter *param,
* @param:
* @prop_name: Name of the property to retrieve.
*/
-const char *
+char *
soup_soap_parameter_get_property (SoupSoapParameter *param, const char *prop_name)
{
- return xmlGetProp (param, prop_name);
+ char *xml_s, *s;
+
+ g_return_val_if_fail (param != NULL, NULL);
+ g_return_val_if_fail (prop_name != NULL, NULL);
+
+ xml_s = xmlGetProp (param, prop_name);
+ s = g_strdup (xml_s);
+ xmlFree (xml_s);
+
+ return s;
}
/**
diff --git a/libsoup/soup-soap-response.h b/libsoup/soup-soap-response.h
index d544f736..9b3e2111 100644
--- a/libsoup/soup-soap-response.h
+++ b/libsoup/soup-soap-response.h
@@ -52,7 +52,7 @@ SoupSoapParameter *soup_soap_parameter_get_first_child_by_name (SoupSoapParamete
SoupSoapParameter *soup_soap_parameter_get_next_child (SoupSoapParameter *param);
SoupSoapParameter *soup_soap_parameter_get_next_child_by_name (SoupSoapParameter *param,
const char *name);
-const char *soup_soap_parameter_get_property (SoupSoapParameter *param, const char *prop_name);
+char *soup_soap_parameter_get_property (SoupSoapParameter *param, const char *prop_name);
const GList *soup_soap_response_get_parameters (SoupSoapResponse *response);
SoupSoapParameter *soup_soap_response_get_first_parameter (SoupSoapResponse *response);