The only thing which broke my old code regarding switching to vsnprintf 
is that old Ns_DStringPrintf handled empty string differently, vsnprintf 
now puts (null), before that empty string did not put anything.

I still need to review si the damage is critical enough or never upgrade 
until all code updated. That sucks

Vlad Seryakov wrote:
> Yes, works fine now, Thanks
> 
> Stephen Deasey wrote:
>> On 10/13/07, Vlad Seryakov <[EMAIL PROTECTED]> wrote:
>>> I was able to find the location which causes the crash but i am not sure
>>> how to fix it
>>>
>>> In function Ns_VALog i call vsnprintf directly, it works, when it is
>>> called via Ns_DStringVPintf it crashes. using va_copy does not help
>>>
>>
>> diff -r 22a912b584eb nsd/dstring.c
>> --- a/nsd/dstring.c  Fri Oct 12 20:35:13 2007 +0100
>> +++ b/nsd/dstring.c  Sat Oct 13 19:46:22 2007 +0100
>> @@ -176,10 +176,11 @@ Ns_DStringPrintf(Ns_DString *dsPtr, CONS
>>   */
>>
>>  char *
>> -Ns_DStringVPrintf(Ns_DString *dsPtr, CONST char *fmt, va_list ap)
>> -{
>> -    char *buf;
>> -    int   origLength, newLength, bufLength, result;
>> +Ns_DStringVPrintf(Ns_DString *dsPtr, CONST char *fmt, va_list apSrc)
>> +{
>> +    char    *buf;
>> +    int      origLength, newLength, bufLength, result;
>> +    va_list  ap;
>>
>>      origLength = dsPtr->length;
>>
>> @@ -205,11 +206,13 @@ Ns_DStringVPrintf(Ns_DString *dsPtr, CON
>>      buf = dsPtr->string + origLength;
>>      bufLength = newLength - origLength;
>>
>> +    va_copy(ap, apSrc);
>>  #ifdef __WIN32
>>      result = _vsnprintf_s(buf, bufLength, fmt, ap);
>>  #else
>>      result = vsnprintf(buf, bufLength, fmt, ap);
>>  #endif
>> +    va_end(ap);
>>
>>      /*
>>       * Check for overflow and retry. For win32 just double the buffer size
>> @@ -229,11 +232,13 @@ Ns_DStringVPrintf(Ns_DString *dsPtr, CON
>>          buf = dsPtr->string + origLength;
>>          bufLength = newLength - origLength;
>>
>> +    va_copy(ap, apSrc);
>>  #ifdef __WIN32
>>          result = _vsnprintf_s(buf, bufLength, fmt, ap);
>>  #else
>>          result = vsnprintf(buf, bufLength, fmt, ap);
>>  #endif
>> +        va_end(ap);
>>      }
>>
>> -------------------------------------------------------------------------
>> This SF.net email is sponsored by: Splunk Inc.
>> Still grepping through log files to find problems?  Stop.
>> Now Search log events and configuration files using AJAX and a browser.
>> Download your FREE copy of Splunk now >> http://get.splunk.com/
>> _______________________________________________
>> naviserver-devel mailing list
>> naviserver-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/naviserver-devel
>>
> 


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
naviserver-devel mailing list
naviserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/naviserver-devel

Reply via email to