[PHP-CVS] Re: cvs: php-src /ext/pdo_sqlite sqlite_statement.c
It's valid to discard the const qualifier, add_assoc_string runs estrndup to take a copy of the return value anyway. You've also made the code less readable and introduced a memory leak for str. So unless I've missed something can you revert this please. Scott Alexey Zakhlestin wrote: indeyets Wed Apr 1 11:31:54 2009 UTC Modified files: /php-src/ext/pdo_sqlite sqlite_statement.c Log: const pointer was used in non-const context http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_sqlite/sqlite_statement.c?r1=1.29r2=1.30diff_format=u Index: php-src/ext/pdo_sqlite/sqlite_statement.c diff -u php-src/ext/pdo_sqlite/sqlite_statement.c:1.29 php-src/ext/pdo_sqlite/sqlite_statement.c:1.30 --- php-src/ext/pdo_sqlite/sqlite_statement.c:1.29Tue Mar 10 23:39:31 2009 +++ php-src/ext/pdo_sqlite/sqlite_statement.c Wed Apr 1 11:31:54 2009 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: sqlite_statement.c,v 1.29 2009/03/10 23:39:31 helly Exp $ */ +/* $Id: sqlite_statement.c,v 1.30 2009/04/01 11:31:54 indeyets Exp $ */ #ifdef HAVE_CONFIG_H #include config.h @@ -282,6 +282,8 @@ static int pdo_sqlite_stmt_col_meta(pdo_stmt_t *stmt, long colno, zval *return_value TSRMLS_DC) { pdo_sqlite_stmt *S = (pdo_sqlite_stmt*)stmt-driver_data; + const char *_str; + size_t _str_len; char *str; zval *flags; @@ -318,14 +320,20 @@ break; } - str = (char*)sqlite3_column_decltype(S-stmt, colno); - if (str) { + _str = sqlite3_column_decltype(S-stmt, colno); + _str_len = strlen(_str); + if (_str) { + str = emalloc(_str_len); + strcpy(str, _str); add_assoc_string(return_value, sqlite:decl_type, str, 1); } #ifdef SQLITE_ENABLE_COLUMN_METADATA - str = sqlite3_column_table_name(S-stmt, colno); - if (str) { + _str = sqlite3_column_table_name(S-stmt, colno); + _str_len = strlen(_str); + if (_str) { + str = emalloc(_str_len); + strcpy(str, _str); add_assoc_string(return_value, table, str, 1); } #endif -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] Re: cvs: php-src /ext/pdo_sqlite sqlite_statement.c
2009/4/1 Scott MacVicar scott...@php.net: It's valid to discard the const qualifier, add_assoc_string runs estrndup to take a copy of the return value anyway. You've also made the code less readable and introduced a memory leak for str. So unless I've missed something can you revert this please. done. Used explicit cast to (char *) instead. Scott Alexey Zakhlestin wrote: indeyets Wed Apr 1 11:31:54 2009 UTC Modified files: /php-src/ext/pdo_sqlite sqlite_statement.c Log: const pointer was used in non-const context http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_sqlite/sqlite_statement.c?r1=1.29r2=1.30diff_format=u Index: php-src/ext/pdo_sqlite/sqlite_statement.c diff -u php-src/ext/pdo_sqlite/sqlite_statement.c:1.29 php-src/ext/pdo_sqlite/sqlite_statement.c:1.30 --- php-src/ext/pdo_sqlite/sqlite_statement.c:1.29 Tue Mar 10 23:39:31 2009 +++ php-src/ext/pdo_sqlite/sqlite_statement.c Wed Apr 1 11:31:54 2009 @@ -16,7 +16,7 @@ +--+ */ -/* $Id: sqlite_statement.c,v 1.29 2009/03/10 23:39:31 helly Exp $ */ +/* $Id: sqlite_statement.c,v 1.30 2009/04/01 11:31:54 indeyets Exp $ */ #ifdef HAVE_CONFIG_H #include config.h @@ -282,6 +282,8 @@ static int pdo_sqlite_stmt_col_meta(pdo_stmt_t *stmt, long colno, zval *return_value TSRMLS_DC) { pdo_sqlite_stmt *S = (pdo_sqlite_stmt*)stmt-driver_data; + const char *_str; + size_t _str_len; char *str; zval *flags; @@ -318,14 +320,20 @@ break; } - str = (char*)sqlite3_column_decltype(S-stmt, colno); - if (str) { + _str = sqlite3_column_decltype(S-stmt, colno); + _str_len = strlen(_str); + if (_str) { + str = emalloc(_str_len); + strcpy(str, _str); add_assoc_string(return_value, sqlite:decl_type, str, 1); } #ifdef SQLITE_ENABLE_COLUMN_METADATA - str = sqlite3_column_table_name(S-stmt, colno); - if (str) { + _str = sqlite3_column_table_name(S-stmt, colno); + _str_len = strlen(_str); + if (_str) { + str = emalloc(_str_len); + strcpy(str, _str); add_assoc_string(return_value, table, str, 1); } #endif -- Alexey Zakhlestin http://www.milkfarmsoft.com/ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php