From: Andrey Hristov Date: Tue, 14 Sep 2010 16:09:42 +0000 (+0000) Subject: unify magic quotes handling. Also fix a problem which X-Git-Tag: php-5.3.4RC1~233 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fc2143b993437cae1f5b9e20c4a7535d54f9d749;p=php unify magic quotes handling. Also fix a problem which resulted in a longjmp in debug PHP,because of usage of zval that is NULL in a hash context. --- diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 6cdee91a7a..f1c16a722f 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -1092,6 +1092,7 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags MYSQL_FIELD *fields; MYSQL_ROW row; unsigned long *field_len; + zend_bool magic_quotes_warning_sent = FALSE; #endif if (into_object) { @@ -1175,7 +1176,10 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags /* 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"); + if (magic_quotes_warning_sent == FALSE) { + magic_quotes_warning_sent = TRUE; + 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 { @@ -1209,37 +1213,39 @@ void php_mysqli_fetch_into_hash(INTERNAL_FUNCTION_PARAMETERS, int override_flags 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; + if (Z_TYPE(new_return_value) == IS_ARRAY) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "magic_quotes_runtime are deprecated since PHP 5.3"); + array_init(return_value); + 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); } - zend_hash_move_forward_ex(Z_ARRVAL(new_return_value), &pos_values); + } else { + RETVAL_NULL(); } zval_dtor(&new_return_value); } else { diff --git a/ext/mysqli/tests/mysqli_magic_quotes.phpt b/ext/mysqli/tests/mysqli_magic_quotes.phpt index 76bbda9d1f..72a6e2b7f8 100644 --- a/ext/mysqli/tests/mysqli_magic_quotes.phpt +++ b/ext/mysqli/tests/mysqli_magic_quotes.phpt @@ -41,25 +41,24 @@ magic_quotes_runtime=1 "\\0" => "\\\\0", "\\" => "\\\\", ); + $expectedBoth = array( + 0 => "\\'", + "'" => "\\'", + 1 => "\\\"", + '"' => "\\\"", + 2 => "\\\\0", + "\\0" => "\\\\0", + 3 => "\\\\", + "\\" => "\\\\", + ); if (!$res = mysqli_query($link, $query)) { printf("[003] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); } $row = mysqli_fetch_row($res); - $idx = 0; - foreach ($expected as $key => $value) { - if (!isset($row[$idx])) - printf("[004] Index %d missing\n", $idx); - - if ($row[$idx] !== $value) - printf("[005] Expecting %d => %s got %d => %s\n", $idx, $value, $idx, $row[$idx]); - - unset($row[$idx]); - $idx++; - } - if (count($row) != 0) { - printf("[006] Unexpected results, dumping\n"); - var_dump($row); + echo "Equal:";var_dump($row === array_values($expected)); + if ($row !== array_values($expected)) { + var_dump($row, array_values($expected)); } $res->free(); @@ -67,28 +66,9 @@ magic_quotes_runtime=1 printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link)); } $row = mysqli_fetch_array($res, MYSQLI_BOTH); - $idx = 0; - foreach ($expected as $key => $value) { - if (!isset($row[$idx])) - printf("[008] Index %d missing\n", $idx); - - if ($row[$idx] !== $value) - printf("[009] Expecting %d => %s got %d => %s\n", $idx, $value, $idx, $row[$idx]); - - unset($row[$idx]); - $idx++; - - if (!isset($row[$key])) - printf("[010] Index %s missing\n", $key); - - if ($row[$key] !== $value) - printf("[011] Expecting %s => %s got %s => %s\n", $key, $value, $key, $row[$key]); - - unset($row[$key]); - } - if (count($row) != 0) { - printf("[012] Unexpected results, dumping\n"); - var_dump($row); + echo "Equal:";var_dump($row === $expectedBoth); + if ($row !== $expectedBoth) { + var_dump($row, $expectedBoth); } $res->free(); @@ -120,13 +100,7 @@ magic_quotes_runtime=1 print "done!"; ?> --EXPECTF-- -Deprecated: Directive 'magic_quotes_runtime' is deprecated in PHP 5.3 and greater in %s on line %d - -Warning: mysqli_result::fetch_assoc(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d - -Warning: mysqli_result::fetch_assoc(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d - -Warning: mysqli_result::fetch_assoc(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d +Deprecated: Directive 'magic_quotes_runtime' is deprecated in PHP 5.3 and greater in Unknown on line %d Warning: mysqli_result::fetch_assoc(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d array(4) { @@ -141,28 +115,12 @@ array(4) { } Warning: mysqli_fetch_row(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d - -Warning: mysqli_fetch_row(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d - -Warning: mysqli_fetch_row(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d - -Warning: mysqli_fetch_row(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d +Equal:bool(true) Warning: mysqli_fetch_array(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d +Equal:bool(true) -Warning: mysqli_fetch_array(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d - -Warning: mysqli_fetch_array(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d - -Warning: mysqli_fetch_array(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d - -Warning: mysqli_fetch_object(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d - -Warning: mysqli_fetch_object(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d - -Warning: mysqli_fetch_object(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d - -Warning: mysqli_fetch_object(): magic_quotes_runtime are deprecated since PHP 5.3 in %s on line %d +Warning: mysqli_fetch_object(): magic_quotes_runtime are deprecated since PHP 5.3 in /work/vanilla/php/php-src/branches/PHP_5_3/ext/mysqli/tests/mysqli_magic_quotes.php on line 69 >'< => >\'< >"< => >\"< >\0< => >\\0<