diff --git a/regex/compile.go b/regex/compile.go index fa51e0d..03e9f54 100644 --- a/regex/compile.go +++ b/regex/compile.go @@ -1047,7 +1047,10 @@ func thompson(re []postfixNode) (Reg, error) { if err != nil { return Reg{}, fmt.Errorf("error applying question operator") } - s2 := question(s1) + s2, err := question(s1) + if err != nil { + return Reg{}, err + } nfa = append(nfa, s2) case pipeNode: // A pipe operator doesn't actually need either operand to be present. If an operand isn't present, @@ -1106,7 +1109,11 @@ func thompson(re []postfixNode) (Reg, error) { stateToAdd = concatenate(stateToAdd, s2) } else { // Case 2 for i := c.startReps; i < c.endReps; i++ { - stateToAdd = concatenate(stateToAdd, question(cloneState(poppedState))) + tmp, err := question(cloneState(poppedState)) + if err != nil { + return Reg{}, fmt.Errorf("error processing bounded repetition") + } + stateToAdd = concatenate(stateToAdd, tmp) } } nfa = append(nfa, stateToAdd)