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

Reply via email to