diff options
-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); |