]> Cypherpunks repositories - gostls13.git/commitdiff
regexp: fix TestOnePassCutoff
authorRuss Cox <rsc@golang.org>
Mon, 20 Oct 2014 16:16:46 +0000 (12:16 -0400)
committerRuss Cox <rsc@golang.org>
Mon, 20 Oct 2014 16:16:46 +0000 (12:16 -0400)
The stack blowout can no longer happen,
but we can still test that too-complex regexps
are rejected.

Replacement for CL 162770043.

LGTM=iant, r
R=r, iant
CC=bradfitz, golang-codereviews
https://golang.org/cl/162860043

src/regexp/all_test.go

index 5fadb67c0980502345180cd89ccae6cf08933987..01ea3742a8b47bf0f09ed77cf17e27160651d262 100644 (file)
@@ -6,6 +6,7 @@ package regexp
 
 import (
        "reflect"
+       "regexp/syntax"
        "strings"
        "testing"
 )
@@ -473,12 +474,19 @@ func TestSplit(t *testing.T) {
        }
 }
 
-// This ran out of stack before issue 7608 was fixed.
+// Check that one-pass cutoff does trigger.
 func TestOnePassCutoff(t *testing.T) {
-       if testing.Short() {
-               t.Skip("Skipping in short mode")
+       re, err := syntax.Parse(`^x{1,1000}y{1,1000}$`, syntax.Perl)
+       if err != nil {
+               t.Fatalf("parse: %v", err)
+       }
+       p, err := syntax.Compile(re.Simplify())
+       if err != nil {
+               t.Fatalf("compile: %v", err)
+       }
+       if compileOnePass(p) != notOnePass {
+               t.Fatalf("makeOnePass succeeded; wanted notOnePass")
        }
-       MustCompile(`^(?:x{1,1000}){1,1000}$`)
 }
 
 func BenchmarkLiteral(b *testing.B) {