cvs: php4 /ext/pcre php_pcre.c
| From: | Andrei Zmievski | Date: | Thu, 20 Jul 2000 15:27:16 +0000 |
| Subject: | cvs: php4 /ext/pcre php_pcre.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-820@lists.php.net to get a copy of this message | ||
andrei Thu Jul 20 08:27:16 2000 EDT
Modified files:
/php4/ext/pcre php_pcre.c
Log:
# There you go, Wico.
Fix bug $5676.
@- Fixed preg_replace() to automatically escape quotes in matched
@ strings when using /e modifier. (Andrei)
Index: php4/ext/pcre/php_pcre.c
diff -u php4/ext/pcre/php_pcre.c:1.62 php4/ext/pcre/php_pcre.c:1.63
--- php4/ext/pcre/php_pcre.c:1.62 Fri Jun 30 12:40:42 2000
+++ php4/ext/pcre/php_pcre.c Thu Jul 20 08:27:16 2000
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_pcre.c,v 1.62 2000/06/30 19:40:42 andrei Exp $ */
+/* $Id: php_pcre.c,v 1.63 2000/07/20 15:27:16 andrei Exp $ */
/*
TODO:
@@ -536,10 +536,12 @@
*code, /* PHP code string */
*new_code, /* Code as result of substitution */
*match, /* Current match for a backref */
+ *esc_match, /* Quote-escaped match */
*walk; /* Used to walk the code string */
int code_len; /* Length of the code string */
int new_code_len; /* Length of the substituted code string */
int match_len; /* Length of the match */
+ int esc_match_len; /* Length of the quote-escaped match */
int result_len; /* Length of the result of the evaluation */
int backref; /* Current backref */
CLS_FETCH();
@@ -557,15 +559,17 @@
in instead of the backref */
match = subject + offsets[backref<<1];
match_len = offsets[(backref<<1)+1] - offsets[backref<<1];
+ esc_match = php_addslashes(match, match_len, &esc_match_len, 0);
sprintf(backref_buf, "\\%d", backref);
new_code = php_str_to_str(code, code_len,
backref_buf, (backref > 9) ? 3 : 2,
- match, match_len, &new_code_len);
+ esc_match, esc_match_len, &new_code_len);
/* Adjust the walk pointer */
walk = new_code + (walk - code) + match_len;
/* Clean up and reassign */
+ efree(esc_match);
efree(code);
code = new_code;
code_len = new_code_len;