with included old dsprintf.c it works fine

Vlad Seryakov 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
> 
> 
>      {
>            char buf[4096];
>            vsnprintf(buf, sizeof(buf), fmt, *vaPtr);
>            Ns_DStringAppend(&cachePtr->buffer, buf);
>      }
>      //Ns_DStringVPrintf(&cachePtr->buffer, fmt, *vaPtr);
> 
> 
> Gustaf Neumann wrote:
>> there is nothing wrong on using *va_list in general.
>> the problem is rather in vsnprintf, which does most probably
>> a loop like in Ns_DStringVarAppend
>>
>> char *
>> Ns_DStringVarAppend(Ns_DString *dsPtr, ...)
>> {
>>     register char   *s;
>>     va_list         ap;
>>
>>     va_start(ap, dsPtr);
>>     while ((s = va_arg(ap, char *)) != NULL) {
>>         Ns_DStringAppend(dsPtr, s);
>>     }
>>     va_end(ap);
>>
>>     return dsPtr->string;
>> }
>>
>> which fails, when the va_list is terminated by 0 and not (char*)NULL.
>> however, this should not account for the problem with vsnprintf(),
>> which should not read more arguments as indicated by the fmt string.
>> You are the, the number of %-codes corresponds to the arguments?
>> Is the error produced via Ns_TclLogErrorInfo() ?
>>
>> What happens, if you add at the end of the vararglist in the call
>> causing the problem a (char*)NULL)?
>>
>> -gustaf neumann
>>
>>
>>  
>> Vlad Seryakov schrieb:
>>> I use ns_log or Ns_Log, so it should take care about it, it ends up in 
>>> Ns_DStringPrintf which calls vsnprintf.
>>>
>>>
>>> Is it correct in x64 to pass *va_list?
>>>
>>> Ns_VALog(Ns_LogSeverity severity, CONST char *fmt, va_list *vaPtr)
>>>
>>> Gustaf Neumann wrote:
>>>   
>>>> be sure to terminate va_* argument lists with NULL (or to be on the safe 
>>>> side
>>>> with  (char*)NULL) and not with 0. when you have sizeof(int) != 
>>>> sizeof(char *),
>>>> the compiler will put a 32bit  for 0, a comparison with a 64bit null 
>>>> pointer
>>>> will fail. I am pretty sure, the vsnprintf()  tries to write an error 
>>>> message....
>>>> and misses the end of the var arg list....
>>>>
>>>> -gustaf neumann
>>>>
>>>> PS: fixed a similar issue in xotcl more than a year ago.
>>>>
>>>> Vlad Seryakov schrieb:
>>>>     
>>>>> Hi,
>>>>>
>>>>> This is an example when it crashes inside vsnprintf, experimenting i 
>>>>> found  that issuing long unknown command crashes as well. In my case i 
>>>>> noticed that trying to log long lines does not work as well. In x32 
>>>>> everything works fine
>>>>>
>>>>> db:vlad[18:01:19]#uname -a
>>>>> Linux db 2.6.22-ARCH #1 SMP PREEMPT Thu Oct 4 11:47:51 EDT 2007 x86_64 
>>>>> Intel(R) Xeon(R) CPU           X5355  @ 2.66GHz GenuineIntel GNU/Linux
>>>>>
>>>>>
>>>>> ossweb:nscp 1>
>>>>> ossweb:nscp 1> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
>>>>>
>>>>>       
>>
>> -------------------------------------------------------------------------
>> 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
>>
> 

-- 
Vlad Seryakov
[EMAIL PROTECTED]
http://www.crystalballinc.com/vlad/

-------------------------------------------------------------------------
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