authorgravatar for matthew.h.borkowski@gmail.comMatthew Borkowski <matthew.h.borkowski@gmail.com> 2021-05-22 04:55:28-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2021-05-22 10:55:28+02:00
logf4101c1153980b887e9aa8850ac0a9dd88192140
tree0cd4c7586b1c1949f92e471525718fb4ae67c4db
parent4b69bd61e41f1a49bb0b00ac00a7e499ab7974a7
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

fix accidental quadratic dependence on haystack length in replace and replacementSize (#8859)


1 files changed, 2 insertions(+), 2 deletions(-)

lib/std/mem.zig+2-2
......@@ -2074,7 +2074,7 @@ pub fn replace(comptime T: type, input: []const T, needle: []const T, replacemen
20742074 var slide: usize = 0;
20752075 var replacements: usize = 0;
20762076 while (slide < input.len) {
2077 if (mem.indexOf(T, input[slide..], needle) == @as(usize, 0)) {
2077 if (mem.startsWith(T, input[slide..], needle)) {
20782078 mem.copy(T, output[i .. i + replacement.len], replacement);
20792079 i += replacement.len;
20802080 slide += needle.len;
......@@ -2129,7 +2129,7 @@ pub fn replacementSize(comptime T: type, input: []const T, needle: []const T, re
21292129 var i: usize = 0;
21302130 var size: usize = input.len;
21312131 while (i < input.len) {
2132 if (mem.indexOf(T, input[i..], needle) == @as(usize, 0)) {
2132 if (mem.startsWith(T, input[i..], needle)) {
21332133 size = size - needle.len + replacement.len;
21342134 i += needle.len;
21352135 } else {