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