Skip to content

Commit a2a8dda

Browse files
dop251dlclark
authored andcommitted
Only fail on invalid \k back references, allowing things like '\'' and '\<' to pass.
1 parent 9ff549b commit a2a8dda

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

regexp_test.go

+12
Original file line numberDiff line numberDiff line change
@@ -808,6 +808,18 @@ func TestECMANamedGroup(t *testing.T) {
808808
if err == nil {
809809
t.Fatal("Expected error")
810810
}
811+
812+
re = MustCompile(`\'|\<?`, 0)
813+
if m, err := re.MatchString("'"); err != nil {
814+
t.Fatal(err)
815+
} else if !m {
816+
t.Fatal("Expected match")
817+
}
818+
if m, err := re.MatchString("<"); err != nil {
819+
t.Fatal(err)
820+
} else if !m {
821+
t.Fatal("Expected match")
822+
}
811823
}
812824

813825
func TestECMAInvalidEscapeCharClass(t *testing.T) {

syntax/parser.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -1186,6 +1186,7 @@ func (p *parser) scanBasicBackslash(scanOnly bool) (*regexNode, error) {
11861186
return nil, p.getErr(ErrIllegalEndEscape)
11871187
}
11881188
angled := false
1189+
k := false
11891190
close := '\x00'
11901191

11911192
backpos := p.textpos()
@@ -1217,6 +1218,7 @@ func (p *parser) scanBasicBackslash(scanOnly bool) (*regexNode, error) {
12171218
}
12181219

12191220
ch = p.rightChar(0)
1221+
k = true
12201222

12211223
} else if !p.useOptionE() && (ch == '<' || ch == '\'') && p.charsRight() > 1 { // Note angle without \g
12221224
angled = true
@@ -1275,7 +1277,9 @@ func (p *parser) scanBasicBackslash(scanOnly bool) (*regexNode, error) {
12751277
}
12761278
return nil, p.getErr(ErrUndefinedNameRef, capname)
12771279
} else {
1278-
return nil, p.getErr(ErrMalformedNameRef)
1280+
if k {
1281+
return nil, p.getErr(ErrMalformedNameRef)
1282+
}
12791283
}
12801284
}
12811285

0 commit comments

Comments
 (0)