Torge Matthies : kernelbase: Break out of inner for-loop early in find_substring.
Module: wine Branch: master Commit: 01146582cc56e399a3313e4bad6f367c7d33c503 URL: https://gitlab.winehq.org/wine/wine/-/commit/01146582cc56e399a3313e4bad6f367... Author: Torge Matthies <tmatthies(a)codeweavers.com> Date: Mon Feb 6 05:51:33 2023 +0100 kernelbase: Break out of inner for-loop early in find_substring. 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(a)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 13ec1ebeb3a..edab78317da 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; }
participants (1)
-
Alexandre Julliard