[PHP-CVS] Re: cvs: php-src /ext/pdo_sqlite sqlite_statement.c

2009-04-01 Thread Scott MacVicar
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-04-01 Thread Alexey Zakhlestin
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