[perl #53746] bug with index() matching beyond end of string
Dave Mitchell [Fri, 30 May 2008 21:41:05 +0000 (21:41 +0000)]
An off-by-one error meant that index($str,...)
was effectively being executed as index("$str\0", ...).
Probably introduced by change #26511.
p4raw-link: @26511 on //depot/perl: 4c8626beeba549aaf3f327729c56a599716ee8b7

p4raw-id: //depot/perl@33952

t/op/index.t
util.c

index 896cd12..834814e 100755 (executable)
@@ -181,7 +181,6 @@ SKIP: {
             my $res = $$test [$l];
 
             {
-                local $::TODO = ($l == 3 && $i == 7 ? "Bug #53746" : "");
                 is (index ($str, $q), $res, "Find NUL character(s)");
             }
 
diff --git a/util.c b/util.c
index a6b5c1c..b59959c 100644 (file)
--- a/util.c
+++ b/util.c
@@ -440,9 +440,9 @@ Perl_ninstr(pTHX_ const char *big, const char *bigend, const char *little, const
     if (little >= lend)
         return (char*)big;
     {
-        const char first = *little++;
+        const char first = *little;
         const char *s, *x;
-        bigend -= lend - little;
+        bigend -= lend - little++;
     OUTER:
         while (big <= bigend) {
             if (*big++ == first) {