[asterisk-dev] [Code Review] 3557: odbc: Remove fixed size buffers.
wdoekes
reviewboard at asterisk.org
Thu May 22 16:37:35 CDT 2014
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/3557/#review11964
-----------------------------------------------------------
Thanks for picking this up.
/branches/1.8/res/res_config_odbc.c
<https://reviewboard.asterisk.org/r/3557/#comment21872>
Why did you remove the comment about replacing the empty string with a single space?
/branches/1.8/res/res_config_odbc.c
<https://reviewboard.asterisk.org/r/3557/#comment21873>
So, when I'm fetching "abcdefg" (7), and my buffer is sized 4, I would first fetch "abc\0" and then make_space for 7.
The documentation I look at doesn't specify that indicator includes the terminating NUL, but we do need it. (8 bytes needed.)
ast_str_make_space(&rowdata, indicator + 1); // the ast_str does not take the NUL into account on its own afaics
/branches/1.8/res/res_config_odbc.c
<https://reviewboard.asterisk.org/r/3557/#comment21875>
When dealing with continue/break, I prefer this:
if (x) {
continue;
}
if (y) {
...
That extra brace+LF increase visibility of the jump.
/branches/1.8/res/res_config_odbc.c
<https://reviewboard.asterisk.org/r/3557/#comment21874>
Same remark about indicator+1.
/branches/1.8/res/res_config_odbc.c
<https://reviewboard.asterisk.org/r/3557/#comment21876>
SQL_C_ULONG is an "unsigned long int" according to http://msdn.microsoft.com/en-us/library/ms714556(v=vs.85).aspx
Not sure if that's necessarily the same as a size_t.
/branches/1.8/res/res_config_odbc.c
<https://reviewboard.asterisk.org/r/3557/#comment21877>
(A) I don't like calloc. We can just malloc it. If you feel like it, set the first character to 0. After a couple of iterations, it will be filled with garbage anyway. Why initialize it to blanks?
(B) I believe you just fetched MAX(LENGTH(var_val)). Shouldn't we increase that by one to fit in the terminating NUL? q.var_val_size += 1
(And for a second there, I was worried that MAX(LENGTH(var_val)) would return the amount of characters, instead of bytes. But they're bytes. That's a relief.)
- wdoekes
On May 22, 2014, 5:48 p.m., Joshua Colp wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/3557/
> -----------------------------------------------------------
>
> (Updated May 22, 2014, 5:48 p.m.)
>
>
> Review request for Asterisk Developers and wdoekes.
>
>
> Bugs: ASTERISK-23582
> https://issues.asterisk.org/jira/browse/ASTERISK-23582
>
>
> Repository: Asterisk
>
>
> Description
> -------
>
> This change removes fixed size buffers in ODBC related code for reading in row data and func_odbc configuration. For func_odbc the configured queries are duplicated instead of being stored in a fixed size buffer. For dynamic realtime a thread local strings is enlarged as needed as row data is read in. For static realtime the maximum size of a configuration value is read in and buffer created accordingly.
>
>
> Diffs
> -----
>
> /branches/1.8/res/res_config_odbc.c 414399
> /branches/1.8/funcs/func_odbc.c 414399
>
> Diff: https://reviewboard.asterisk.org/r/3557/diff/
>
>
> Testing
> -------
>
> Configured func_odbc within MySQL (via ODBC) using extconfig with a 3000 length query and configured it was read in completely. This used static realtime and func_odbc.
> Configured chan_sip to use peers stored in MySQL (via ODBC) and stored very long values. Confirmed read in completely.
>
> Also ran these scenarios under valgrind to confirm no memory insanity.
>
>
> Thanks,
>
> Joshua Colp
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20140522/a620d659/attachment-0001.html>
More information about the asterisk-dev
mailing list