From 3aa1b0008169cea3ed79a4a19b66f64479be4402 Mon Sep 17 00:00:00 2001 From: itchyny Date: Fri, 4 Jul 2025 22:59:25 +0000 Subject: [PATCH] regexp: fix compiling alternate patterns of different fold case literals Fixing Equal method in regexp/syntax package fixes compilation of some alternate patterns like "0A|0[aA]". Fixes #59007 Change-Id: Idd519c6841167f932899b0ada347fb90a38a765e GitHub-Last-Rev: 6f43cbca6361c0d084a12abeec65d7c659a4fe61 GitHub-Pull-Request: golang/go#66165 Reviewed-on: https://go-review.googlesource.com/c/go/+/569735 Reviewed-by: Keith Randall Reviewed-by: Keith Randall Reviewed-by: Mark Freeman Auto-Submit: Keith Randall LUCI-TryBot-Result: Go LUCI --- src/regexp/find_test.go | 2 ++ src/regexp/syntax/regexp.go | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/regexp/find_test.go b/src/regexp/find_test.go index 2edbe9b86e..49e9619cef 100644 --- a/src/regexp/find_test.go +++ b/src/regexp/find_test.go @@ -98,6 +98,8 @@ var findTests = []FindTest{ {`\B`, "x y", nil}, {`\B`, "xx yy", build(2, 1, 1, 4, 4)}, {`(|a)*`, "aa", build(3, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2)}, + {`0A|0[aA]`, "0a", build(1, 0, 2)}, + {`0[aA]|0A`, "0a", build(1, 0, 2)}, // RE2 tests {`[^\S\s]`, "abcd", nil}, diff --git a/src/regexp/syntax/regexp.go b/src/regexp/syntax/regexp.go index f15d205123..499492884e 100644 --- a/src/regexp/syntax/regexp.go +++ b/src/regexp/syntax/regexp.go @@ -76,7 +76,7 @@ func (x *Regexp) Equal(y *Regexp) bool { } case OpLiteral, OpCharClass: - return slices.Equal(x.Rune, y.Rune) + return x.Flags&FoldCase == y.Flags&FoldCase && slices.Equal(x.Rune, y.Rune) case OpAlternate, OpConcat: return slices.EqualFunc(x.Sub, y.Sub, (*Regexp).Equal) -- 2.51.0