[asterisk-dev] cdr_odbc.c is broken in trunk

Kevin P. Fleming kpfleming at digium.com
Thu Jan 10 10:31:13 CST 2008


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

-- 
Kevin P. Fleming
Director of Software Technologies
Digium, Inc. - "The Genuine Asterisk Experience" (TM)



More information about the asterisk-dev mailing list