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