andrey Thu, 26 Aug 2010 14:51:58 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=302804
Log:
Add proper magic_quotes_runtime support for mysqlnd, but
in mysqli, so we don't need to tamper myslqnd.
magic_quotes_runtime are deprecated and not existant in 5.4, thus
only fixing in the branch.
Changed paths:
U php/php-src/branches/PHP_5_3/ext/mysqli/mysqli.c
U php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_result.c
Modified: php/php-src/branches/PHP_5_3/ext/mysqli/mysqli.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqli/mysqli.c 2010-08-26 14:41:34 UTC
(rev 302803)
+++ php/php-src/branches/PHP_5_3/ext/mysqli/mysqli.c 2010-08-26 14:51:58 UTC
(rev 302804)
@@ -1172,6 +1172,7 @@
/* check if we need magic quotes */
if (PG(magic_quotes_runtime)) {
+ php_error_docref(NULL TSRMLS_CC,
E_WARNING, "magic_quotes_runtime are deprecated since PHP 5.3");
Z_TYPE_P(res) = IS_STRING;
Z_STRVAL_P(res) =
php_addslashes(row[i], field_len[i], &Z_STRLEN_P(res), 0 TSRMLS_CC);
} else {
@@ -1198,7 +1199,50 @@
}
}
#else
- mysqlnd_fetch_into(result, ((fetchtype & MYSQLI_NUM)?
MYSQLND_FETCH_NUM:0) | ((fetchtype & MYSQLI_ASSOC)? MYSQLND_FETCH_ASSOC:0),
return_value, MYSQLND_MYSQLI);
+ if (PG(magic_quotes_runtime)) {
+ HashPosition pos_values;
+ zval **entry_values;
+ zval new_return_value;
+ char * string_key;
+ uint string_key_len;
+ ulong num_key;
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
"magic_quotes_runtime are deprecated since PHP 5.3");
+
+ array_init(return_value);
+
+ mysqlnd_fetch_into(result, ((fetchtype & MYSQLI_NUM)?
MYSQLND_FETCH_NUM:0) | ((fetchtype & MYSQLI_ASSOC)? MYSQLND_FETCH_ASSOC:0),
&new_return_value, MYSQLND_MYSQLI);
+
+ zend_hash_internal_pointer_reset_ex(Z_ARRVAL(new_return_value),
&pos_values);
+ while
(zend_hash_get_current_data_ex(Z_ARRVAL(new_return_value), (void
**)&entry_values, &pos_values) == SUCCESS) {
+ if (Z_TYPE_PP(entry_values) == IS_STRING) {
+ int new_str_len;
+ char * new_str =
php_addslashes(Z_STRVAL_PP(entry_values), Z_STRLEN_PP(entry_values),
&new_str_len, 0 TSRMLS_CC);
+ switch
(zend_hash_get_current_key_ex(Z_ARRVAL(new_return_value), &string_key,
&string_key_len, &num_key, 0, &pos_values)) {
+ case HASH_KEY_IS_LONG:
+ add_index_stringl(return_value,
num_key, new_str, new_str_len, 0);
+ break;
+ case HASH_KEY_IS_STRING:
+
add_assoc_stringl_ex(return_value, string_key, string_key_len, new_str,
new_str_len, 0);
+ break;
+ }
+ } else {
+ zval_add_ref(entry_values);
+ switch
(zend_hash_get_current_key_ex(Z_ARRVAL(new_return_value), &string_key,
&string_key_len, &num_key, 0, &pos_values)) {
+ case HASH_KEY_IS_LONG:
+ add_index_zval(return_value,
num_key, *entry_values);
+ break;
+ case HASH_KEY_IS_STRING:
+ add_assoc_zval_ex(return_value,
string_key, string_key_len, *entry_values);
+ break;
+ }
+ }
+ zend_hash_move_forward_ex(Z_ARRVAL(new_return_value),
&pos_values);
+ }
+ zval_dtor(&new_return_value);
+ } else {
+ mysqlnd_fetch_into(result, ((fetchtype & MYSQLI_NUM)?
MYSQLND_FETCH_NUM:0) | ((fetchtype & MYSQLI_ASSOC)? MYSQLND_FETCH_ASSOC:0),
return_value, MYSQLND_MYSQLI);
+ }
+
#endif
if (into_object && Z_TYPE_P(return_value) != IS_NULL) {
Modified: php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_result.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_result.c 2010-08-26
14:41:34 UTC (rev 302803)
+++ php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_result.c 2010-08-26
14:51:58 UTC (rev 302804)
@@ -1506,6 +1506,9 @@
/* }}} */
+/* for php_addslashes */
+#include "ext/standard/php_string.h"
+
/* {{{ mysqlnd_res::fetch_into */
static void
MYSQLND_METHOD(mysqlnd_res, fetch_into)(MYSQLND_RES * result, unsigned int
flags,
@@ -1540,9 +1543,7 @@
break;
default:exit(0);
}
- } else if (extension == MYSQLND_MYSQLI && PG(magic_quotes_runtime)) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "magic_quotes_runtime
are not supported by mysqlnd. They were deprecated in PHP 5.3 ");
- }
+ }
/*
return_value is IS_NULL for no more data and an array for data. Thus
it's ok
to return here.
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php