tony2001                Mon Oct 10 16:03:01 2005 EDT

  Modified files:              (Branch: PHP_5_1)
    /php-src    NEWS 
    /php-src/ext/mysqli mysqli.c mysqli_warning.c 
  Log:
  fix #34818 (new mysqli_stmt() and several others crash if the first parameter 
is not a valid mysqli_link)
  
  
http://cvs.php.net/diff.php/php-src/NEWS?r1=1.2027.2.113&r2=1.2027.2.114&ty=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.113 php-src/NEWS:1.2027.2.114
--- php-src/NEWS:1.2027.2.113   Mon Oct 10 10:44:16 2005
+++ php-src/NEWS        Mon Oct 10 16:02:58 2005
@@ -43,6 +43,8 @@
 - Fixed "make test" to work for phpized extensions. (Hartmut, Jani)
 - Fixed failing queries (FALSE returned) with mysqli_query() on 64 bit systems.
   (Andrey)
+- Fixed bug #34818 (several functions crash when invalid mysqli_link object 
+  is passed). (Tony)
 - Fixed bug #34810 (mysqli::init() and others use wrong $this pointer
   without checks). (Tony)
 - Fixed bug #34809 (FETCH_INTO in PDO crashes without a destination object).
http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli.c?r1=1.72.2.2&r2=1.72.2.3&ty=u
Index: php-src/ext/mysqli/mysqli.c
diff -u php-src/ext/mysqli/mysqli.c:1.72.2.2 
php-src/ext/mysqli/mysqli.c:1.72.2.3
--- php-src/ext/mysqli/mysqli.c:1.72.2.2        Sat Oct  8 11:08:03 2005
+++ php-src/ext/mysqli/mysqli.c Mon Oct 10 16:02:59 2005
@@ -15,7 +15,7 @@
   | Author: Georg Richter <[EMAIL PROTECTED]>                                |
   +----------------------------------------------------------------------+
 
-  $Id: mysqli.c,v 1.72.2.2 2005/10/08 15:08:03 georg Exp $ 
+  $Id: mysqli.c,v 1.72.2.3 2005/10/10 20:02:59 tony2001 Exp $ 
 */
 
 #ifdef HAVE_CONFIG_H
@@ -652,33 +652,34 @@
 ZEND_FUNCTION(mysqli_stmt_construct)
 {
        MY_MYSQL                        *mysql;
-       zval                            **mysql_link, **statement;
+       zval                            *mysql_link;
        MY_STMT                         *stmt;
        MYSQLI_RESOURCE         *mysqli_resource;
+       char                            *statement;
+       int                                     stmt_len;
 
        switch (ZEND_NUM_ARGS())
        {
                case 1:  /* mysql_stmt_init */
-               if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
+               if (zend_parse_parameters(1, "O", &mysql_link, 
mysqli_link_class_entry)==FAILURE) {
                                return;
                        }
-                       MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, mysql_link, 
"mysqli_link");
+                       MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, 
"mysqli_link");
 
                        stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT));
 
                        stmt->stmt = mysql_stmt_init(mysql->mysql);
                break;
                case 2:
-               if (zend_get_parameters_ex(2, &mysql_link, 
&statement)==FAILURE) {
+               if (zend_parse_parameters(2, "Os", &mysql_link, 
mysqli_link_class_entry, &statement, &stmt_len)==FAILURE) {
                                return;
                        }
-                       MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, mysql_link, 
"mysqli_link");
-                       convert_to_string_ex(statement);
+                       MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, 
"mysqli_link");
 
                        stmt = (MY_STMT *)ecalloc(1,sizeof(MY_STMT));
        
                        if ((stmt->stmt = mysql_stmt_init(mysql->mysql))) {
-                               mysql_stmt_prepare(stmt->stmt, 
Z_STRVAL_PP(statement), strlen(Z_STRVAL_PP(statement)));
+                               mysql_stmt_prepare(stmt->stmt, statement, 
stmt_len);
                        }
                break;
                default:
@@ -708,27 +709,26 @@
 {
        MY_MYSQL                        *mysql;
        MYSQL_RES                       *result;
-       zval                            **mysql_link, **mode;
+       zval                            *mysql_link;
        MYSQLI_RESOURCE         *mysqli_resource;
-       int                                     resmode = MYSQLI_STORE_RESULT;
+       long                            resmode = MYSQLI_STORE_RESULT;
 
        switch (ZEND_NUM_ARGS()) {
                case 1:
-               if (zend_get_parameters_ex(1, &mysql_link)==FAILURE) {
+               if (zend_parse_parameters(1, "O", &mysql_link, 
mysqli_link_class_entry)==FAILURE) {
                                return;
                        }
                break;
                case 2:
-               if (zend_get_parameters_ex(2, &mysql_link, &mode)==FAILURE) {
+               if (zend_parse_parameters(2, "Ol", &mysql_link, 
mysqli_link_class_entry, &resmode)==FAILURE) {
                                return;
                        }
-                       resmode = Z_LVAL_PP(mode);
                break;
                default:
                        WRONG_PARAM_COUNT;
        }
 
-       MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, mysql_link, "mysqli_link");
+       MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &mysql_link, "mysqli_link");
 
        result = (resmode == MYSQLI_STORE_RESULT) ? 
mysql_store_result(mysql->mysql) :
                                                                                
                mysql_use_result(mysql->mysql);
http://cvs.php.net/diff.php/php-src/ext/mysqli/mysqli_warning.c?r1=1.5.2.1&r2=1.5.2.2&ty=u
Index: php-src/ext/mysqli/mysqli_warning.c
diff -u php-src/ext/mysqli/mysqli_warning.c:1.5.2.1 
php-src/ext/mysqli/mysqli_warning.c:1.5.2.2
--- php-src/ext/mysqli/mysqli_warning.c:1.5.2.1 Mon Oct 10 08:57:55 2005
+++ php-src/ext/mysqli/mysqli_warning.c Mon Oct 10 16:03:00 2005
@@ -166,7 +166,7 @@
 /* {{{ mysqli_warning_construct(object obj) */
 PHP_METHOD(mysqli_warning, __construct)
 {
-       zval                    **z;
+       zval                    *z;
        mysqli_object   *obj;
        MYSQL                   *hdl;
        MYSQLI_WARNING  *w;
@@ -175,18 +175,18 @@
        if (ZEND_NUM_ARGS() != 1) {
                WRONG_PARAM_COUNT;
        }
-       if (zend_get_parameters_ex(1, &z)==FAILURE) {
+       if (zend_parse_parameters(1, "o", &z)==FAILURE) {
                return;
        }
-       obj = (mysqli_object *)zend_object_store_get_object(*(z) TSRMLS_CC);\
+       obj = (mysqli_object *)zend_object_store_get_object(z TSRMLS_CC);\
 
        if (obj->zo.ce == mysqli_link_class_entry) {
                MY_MYSQL *mysql;
-               MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, z, "mysqli_link");
+               MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL *, &z, "mysqli_link");
                hdl = mysql->mysql;
        } else if (obj->zo.ce == mysqli_stmt_class_entry) {
                MY_STMT *stmt;
-               MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, z, "mysqli_stmt");
+               MYSQLI_FETCH_RESOURCE(stmt, MY_STMT *, &z, "mysqli_stmt");
                hdl = stmt->stmt->mysql;
        } else {
                RETURN_FALSE;



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to