From f4101c1153980b887e9aa8850ac0a9dd88192140 Mon Sep 17 00:00:00 2001 From: Matthew Borkowski Date: Sat, 22 May 2021 04:55:28 -0400 Subject: [PATCH] fix accidental quadratic dependence on haystack length in replace and replacementSize (#8859) --- lib/std/mem.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/std/mem.zig b/lib/std/mem.zig index 044d73413a..a9ab56a177 100644 --- a/lib/std/mem.zig +++ b/lib/std/mem.zig @@ -2074,7 +2074,7 @@ pub fn replace(comptime T: type, input: []const T, needle: []const T, replacemen var slide: usize = 0; var replacements: usize = 0; while (slide < input.len) { - if (mem.indexOf(T, input[slide..], needle) == @as(usize, 0)) { + if (mem.startsWith(T, input[slide..], needle)) { mem.copy(T, output[i .. i + replacement.len], replacement); i += replacement.len; slide += needle.len; @@ -2129,7 +2129,7 @@ pub fn replacementSize(comptime T: type, input: []const T, needle: []const T, re var i: usize = 0; var size: usize = input.len; while (i < input.len) { - if (mem.indexOf(T, input[i..], needle) == @as(usize, 0)) { + if (mem.startsWith(T, input[i..], needle)) { size = size - needle.len + replacement.len; i += needle.len; } else {