[prev in list] [next in list] [prev in thread] [next in thread] 

List:       asterisk-dev
Subject:    Re: [asterisk-dev] cdr_odbc.c is broken in trunk
From:       Nick Gorham <nick () lurcher ! org>
Date:       2008-01-11 11:34:44
Message-ID: 47875454.6020207 () lurcher ! org
[Download RAW message or body]

Kevin P. Fleming wrote:

>Tilghman Lesher wrote:
>
>  
>
>>Uh, no, the stack doesn't work that way.  The entire contents of timestr[]
>>remain valid and unchanged until the stack frame is popped.  Which will not
>>happen until odbc_log() exits.  The only reason this location would be
>>overwritten is if there's a stack overflow error (not impossible, but we've
>>been fairly diligent in finding those issues).
>>    
>>
>
>This is incorrect. The variable being referred to here ('timestr' in
>prepare_cb) is allocated on the stack when prepare_cb() is entered and
>then that stack frame is released when prepare_cb() exits. Since
>ast_odbc_prepare_and_execute() calls prepare_cb() and then later calls
>SQLExecute(), the memory for this bound parameter will now be used for
>something else (probably the stack frame for SQLExecute() itself).
>
>  
>
Given the hassle about me posting the patch, and given the licence is 
still pending, I guess that no one looked at my patch yet?

The reason I ask, is getting the current trunk I see the code creates 
the query using

            "VALUES ('%s',?,?,?,?,?,?,?,?,?,?,?,?,?)", table, timestr);

My version used the ODBC timestamp escape syntax, which I think you will 
find is a better choice than assuming the ODBC driver in use will 
understand the format from ast_strftime, using the ODBC escape means 
that the driver will understand {ts 'YYYY-MM-DD HH:MM:SS' }if it doesn't 
then at least the spec says it should. I used

            "VALUES ({ts '%s'},?,?,?,?,?,?,?,?,?,?,?,?,?)", table, timestr);

Not a big deal, but I don't think it hurts to use the standard when 
there is one avalable.

-- 
Nick Gorham

            

_______________________________________________
--Bandwidth and Colocation Provided by http://www.api-digital.com--

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic