From b45f85f5514cb48f23d172c2c52e2fb39f1ff3f3 Mon Sep 17 00:00:00 2001 From: b-guild <148972828+b-guild@users.noreply.github.com> Date: Sat, 12 Apr 2025 16:06:05 -0700 Subject: [PATCH] Fixing potential panic in `patch_error_message` --- fyrox-graphics/src/gl/program.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/fyrox-graphics/src/gl/program.rs b/fyrox-graphics/src/gl/program.rs index d319e00f5..71583767f 100644 --- a/fyrox-graphics/src/gl/program.rs +++ b/fyrox-graphics/src/gl/program.rs @@ -101,11 +101,20 @@ impl Vendor { } } +/// A version of Regex::find_at that does not panic. +fn find_at<'a>(re: ®ex::Regex, src: &'a str, offset: usize) -> Option> { + if offset > src.len() { + None + } else { + re.find_at(src, offset) + } +} + fn patch_error_message(vendor: Vendor, src: &mut String, line_offset: isize) { let re = vendor.regex(); let mut offset = 0; - while let Some(result) = re.find_at(src, offset) { - offset += result.end(); + while let Some(result) = find_at(&re, src, offset) { + offset = result.end().max(offset + 1); let range = vendor.line_number_range(result); let substr = &src[range]; if let Ok(line_number) = substr.parse::() {