summaryrefslogtreecommitdiff
path: root/ext/ereg/ereg.c
diff options
context:
space:
mode:
authorjim winstead <jimw@php.net>2002-01-05 01:59:11 +0000
committerjim winstead <jimw@php.net>2002-01-05 01:59:11 +0000
commit9a171d03e84af05f135a2e2afe8a9008bc79e3a1 (patch)
treeafdebdc264ba692437bf98b01e866222690033e2 /ext/ereg/ereg.c
parent6823fb1fe789a433470fb4122c5d52cbe11b6185 (diff)
downloadphp-git-9a171d03e84af05f135a2e2afe8a9008bc79e3a1.tar.gz
Be more aggressive in making sure that substring matches are valid in
ereg_replace before trying to use them. # i could have sworn i fixed this in php3. ereg() has similar logic, i # guess i just missed ereg_replace. fixing this lets # ext/standard/tests/reg/012.phpt pass on my debian/unstable box
Diffstat (limited to 'ext/ereg/ereg.c')
-rw-r--r--ext/ereg/ereg.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/ext/ereg/ereg.c b/ext/ereg/ereg.c
index 98b09345e2..82a12a1d83 100644
--- a/ext/ereg/ereg.c
+++ b/ext/ereg/ereg.c
@@ -369,7 +369,9 @@ PHPAPI char *php_reg_replace(const char *pattern, const char *replace, const cha
if ('\\' == *walk
&& '0' <= walk[1] && '9' >= walk[1]
&& subs[walk[1] - '0'].rm_so > -1
- && subs[walk[1] - '0'].rm_eo > -1) {
+ && subs[walk[1] - '0'].rm_eo > -1
+ /* this next case shouldn't happen. it does. */
+ && subs[walk[1] - '0'].rm_so < subs[walk[1] - '0'].rm_eo) {
tmp = subs[walk[1] - '0'].rm_eo
- subs[walk[1] - '0'].rm_so;
memcpy (walkbuf,