From d1b9df80a1655e6e09c89735b96a6611ccfb9a67 Mon Sep 17 00:00:00 2001 From: Elara Musayelyan Date: Mon, 17 Jul 2023 07:11:35 -0700 Subject: [PATCH] Fix panic when no substrings are found --- pcre.go | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/pcre.go b/pcre.go index e3d465c..a229b13 100644 --- a/pcre.go +++ b/pcre.go @@ -592,12 +592,15 @@ func (r *Regexp) SetCallout(fn func(cb *CalloutBlock) int32) error { calloutStrBytes := unsafe.Slice((*byte)(unsafe.Pointer(ccb.Fcallout_string)), ccb.Fcallout_string_length) cb.CalloutString = string(calloutStrBytes) - ovecSlice := unsafe.Slice((*lib.Tsize_t)(unsafe.Pointer(ccb.Foffset_vector)), (ccb.Fcapture_top*2)-1)[2:] - for i := 0; i < len(ovecSlice); i += 2 { - if i+1 >= len(ovecSlice) { - cb.Substrings = append(cb.Substrings, cb.Subject[ovecSlice[i]:]) - } else { - cb.Substrings = append(cb.Substrings, cb.Subject[ovecSlice[i]:ovecSlice[i+1]]) + ovecSlice := unsafe.Slice((*lib.Tsize_t)(unsafe.Pointer(ccb.Foffset_vector)), (ccb.Fcapture_top*2)-1) + if len(ovecSlice) > 2 { + ovecSlice = ovecSlice[2:] + for i := 0; i < len(ovecSlice); i += 2 { + if i+1 >= len(ovecSlice) { + cb.Substrings = append(cb.Substrings, cb.Subject[ovecSlice[i]:]) + } else { + cb.Substrings = append(cb.Substrings, cb.Subject[ovecSlice[i]:ovecSlice[i+1]]) + } } }