diff options
author | Rodrigo Moya <rodrigo@ximian.com> | 2004-02-18 15:00:34 +0000 |
---|---|---|
committer | Rodrigo Moya <rodrigo@src.gnome.org> | 2004-02-18 15:00:34 +0000 |
commit | 8a809ff796a25ed8cbbeeb01f41b799684166f43 (patch) | |
tree | 9c1ce6cadda21f66c78d0cc27cdb58accaa9e162 | |
parent | a927fd0741f056b6d0df35ce5602e0d1d247afbd (diff) | |
download | libsoup-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-- | ChangeLog | 14 | ||||
-rw-r--r-- | libsoup/soup-soap-response.c | 32 | ||||
-rw-r--r-- | libsoup/soup-soap-response.h | 2 |
3 files changed, 43 insertions, 5 deletions
@@ -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); |