From: Torge Matthies tmatthies@codeweavers.com
If I'm interpreting this code correctly, once either of these two if-conditions are true once, they will also be true at some point during all of the remaining iterations of the for-loop. Thus, we can just stop the for-loop here.
Signed-off-by: Torge Matthies tmatthies@codeweavers.com --- dlls/kernelbase/locale.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/dlls/kernelbase/locale.c b/dlls/kernelbase/locale.c index 1e96e49622e..8a72c851890 100644 --- a/dlls/kernelbase/locale.c +++ b/dlls/kernelbase/locale.c @@ -3924,8 +3924,12 @@ static int find_substring( const struct sortguid *sortid, DWORD flags, const WCH pos += append_weights( sortid, flags, src, srclen, pos, case_mask, except, compr_tables, &s, TRUE );
- if (s.primary_pos + s.key_primary.len > val.key_primary.len) goto next; - if (memcmp( primary, val.key_primary.buf + s.primary_pos, s.key_primary.len )) goto next; + if (s.primary_pos + s.key_primary.len > val.key_primary.len || + memcmp( primary, val.key_primary.buf + s.primary_pos, s.key_primary.len )) + { + len = srclen + 1; + goto next; + } s.primary_pos += s.key_primary.len; s.key_primary.len = 0; }