*replace_value,
empty_replace;
zend_string *result;
- zend_string *subject_str = zval_get_string(subject);
uint32_t replace_idx;
+ zend_string *subject_str = zval_get_string(subject);
/* FIXME: This might need to be changed to STR_EMPTY_ALLOC(). Check if this zval could be dtor()'ed somehow */
ZVAL_EMPTY_STRING(&empty_replace);
ZEND_PARSE_PARAMETERS_END();
#endif
+ ZVAL_UNDEF(&zv);
ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(pattern), num_idx, str_idx, replace) {
if (str_idx) {
ZVAL_STR_COPY(®ex, str_idx);
zval_ptr_dtor(return_value);
}
- ZVAL_COPY_VALUE(return_value, &zv);
zval_ptr_dtor(®ex);
+
+ if (Z_ISUNDEF(zv)) {
+ RETURN_NULL();
+ }
+
+ ZVAL_COPY_VALUE(return_value, &zv);
+
+ if (UNEXPECTED(EG(exception))) {
+ zval_dtor(return_value);
+ RETURN_NULL();
+ }
} ZEND_HASH_FOREACH_END();
if (zcount) {
<?php
function f() {
- throw new Exception();
+ throw new Exception('f');
+}
+
+function a() {
+ return __FUNCTION__;
}
try {
-var_dump(preg_replace_callback_array(array('/\w/' => 'f'), 'z'));
-} catch(Exception $e) {}
+ var_dump($c = preg_replace_callback_array(array('/\w*/' => 'f', '/\w/' => 'a'), 'z'));
+} catch(Exception $e) {
+ var_dump($e->getMessage());
+}
+var_dump($c);
function g($x) {
return "'$x[0]'";
var_dump(preg_replace_callback_array(array('~\A.~' => create_function('$m', 'return strtolower($m[0]);')), 'ABC'));
?>
--EXPECTF--
+string(1) "f"
+
+Notice: Undefined variable: c in %spreg_replace_callback_array.php on line %d
+NULL
array(3) {
[0]=>
string(12) "'a' 'b3' bcd"
$b = "";
var_dump(preg_replace_callback_array(array("xx" => "s"), $a, -1, $b));
var_dump($b);
+function f() {
+}
+var_dump(preg_replace_callback_array(array('/\w' => 'f'), 'z'));
echo "Done\n";
?>
--EXPECTF--
NULL
string(0) ""
-Warning: preg_replace_callback_array(): 's' is not a valid callback in %s on line %d
+Warning: preg_replace_callback_array(): 's' is not a valid callback in %spreg_replace_callback_array2.php on line %d
array(0) {
}
string(0) ""
+
+Warning: preg_replace_callback_array(): No ending delimiter '/' found in %spreg_replace_callback_array2.php on line %d
+NULL
Done