[OpenSIPS-Users] Bug in XCAP_Client
Romanov Vladimir
VRomanov at yota.ru
Thu Mar 5 14:36:01 CET 2009
Hi All!
I found bug in \modules\ xcap_client\ xcap_functions.c
Function write_function not work with large content. If you download large content this callback function will call several times. On every call this ficnction create NEW buffer in memory and lost old.
As result you have
1) Memory leaks
2) Corrupted content in buffer.
This is my variant of this function
int str_append(str* buff, char* s, int len)
{
/* reallocate memory and copy */
char* newData;
if (-1==len) {
len=strlen(s);
}
if (0==len) {
return buff->len;
}
newData= (char*)pkg_realloc(buff->s, buff->len + len + 1);
if(newData== NULL) {
ERR_MEM(PKG_MEM_STR);
}
memcpy(newData+buff->len, s , len);
buff->s = newData;
buff->len += len;
buff->s[buff->len] = 0;
return buff->len;
error:
return -1;
}
size_t write_function( void *ptr, size_t size, size_t nmemb, str *buff)
{
if (str_append(buff,(char*)ptr,(int)(size*nmemb))>=0) {
return size* nmemb;
} else {
LM_ERR("Can't append to string");
return CURLE_WRITE_ERROR;
}
}
int send_http_get(char* uri, str* buff)
{
CURLcode ret_code;
CURL* curl_handle= NULL;
int http_ret_code=-1;
LM_INFO("Send request %s",uri);
curl_handle = curl_easy_init();
curl_easy_setopt(curl_handle, CURLOPT_URL, uri);
curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl_handle, CURLOPT_STDERR, stdout);
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_function);
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, buff);
/* non-2xx => error */
curl_easy_setopt(curl_handle, CURLOPT_FAILONERROR, 0);
ret_code= curl_easy_perform(curl_handle );
if( ret_code!=0) {
LM_ERR("Error [%i] while performing curl operation", ret_code);
} else {
curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &http_ret_code);
}
curl_easy_cleanup(curl_handle);
LM_INFO("send_http_get return %i. Content length=%i", http_ret_code, buff->len);
return http_ret_code;
}
-----------------
Vladimir Romanov
Scartel Star Lab
CTO
+7 (960) 239-0853
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.opensips.org/pipermail/users/attachments/20090305/fcb72ea6/attachment-0001.htm
More information about the Users
mailing list