iliaa           Tue Sep 24 12:34:55 2002 EDT

  Modified files:              
    /php4/ext/standard  reg.c 
  Log:
  Fixed bug #17957
  
  
Index: php4/ext/standard/reg.c
diff -u php4/ext/standard/reg.c:1.64 php4/ext/standard/reg.c:1.65
--- php4/ext/standard/reg.c:1.64        Mon Aug 19 16:47:42 2002
+++ php4/ext/standard/reg.c     Tue Sep 24 12:34:54 2002
@@ -17,9 +17,10 @@
    |          Jaakko Hyvätti <[EMAIL PROTECTED]>                      | 
    +----------------------------------------------------------------------+
  */
-/* $Id: reg.c,v 1.64 2002/08/19 20:47:42 zeev Exp $ */
+/* $Id: reg.c,v 1.65 2002/09/24 16:34:54 iliaa Exp $ */
 
 #include <stdio.h>
+#include <ctype.h>
 #include "php.h"
 #include "php_string.h"
 #include "reg.h"
@@ -340,13 +341,10 @@
                        new_l = strlen(buf) + subs[0].rm_so; /* part before the match 
*/
                        walk = replace;
                        while (*walk)
-                               if ('\\' == *walk
-                                       && '0' <= walk[1] && '9' >= walk[1]
-                                       && walk[1] - '0' <= ((char) re.re_nsub)
-                                       && subs[walk[1] - '0'].rm_so > -1
-                                       && subs[walk[1] - '0'].rm_eo > -1) {
-                                       new_l += subs[walk[1] - '0'].rm_eo
-                                               - subs[walk[1] - '0'].rm_so;
+                               if ('\\' == *walk && isdigit(walk[1]) && walk[1] - '0' 
+<= ((char) re.re_nsub)) {
+                                       if (subs[walk[1] - '0'].rm_so > -1 && 
+subs[walk[1] - '0'].rm_eo > -1) {
+                                               new_l += subs[walk[1] - '0'].rm_eo - 
+subs[walk[1] - '0'].rm_so;
+                                       }    
                                        walk += 2;
                                } else {
                                        new_l++;
@@ -368,22 +366,19 @@
                        walkbuf = &buf[tmp + subs[0].rm_so];
                        walk = replace;
                        while (*walk)
-                               if ('\\' == *walk
-                                       && '0' <= walk[1] && '9' >= walk[1]
-                                       && walk[1] - '0' <= re.re_nsub
-                                       && subs[walk[1] - '0'].rm_so > -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,
-                                                       &string[pos + subs[walk[1] - 
'0'].rm_so],
-                                                       tmp);
-                                       walkbuf += tmp;
+                               if ('\\' == *walk && isdigit(walk[1]) && walk[1] - '0' 
+<= re.re_nsub) {
+                                       if (subs[walk[1] - '0'].rm_so > -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, &string[pos + 
+subs[walk[1] - '0'].rm_so], tmp);
+                                               walkbuf += tmp;
+                                       }
                                        walk += 2;
-                               } else
+                               } else {
                                        *walkbuf++ = *walk++;
+                               }       
                        *walkbuf = '\0';
 
                        /* and get ready to keep looking for replacements */



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to