diff options
author | Your Name <you@example.com> | 2021-03-12 23:20:51 +0000 |
---|---|---|
committer | Your Name <you@example.com> | 2021-03-12 23:20:51 +0000 |
commit | aa61faccdba3f6389d153610a6c7c8abce484693 (patch) | |
tree | c64512e302debf4b385336cdec970252acddf7dc /src | |
parent | 6fd504ef38ad783f1247eaf398a4178a70028eea (diff) | |
download | cracklib-aa61faccdba3f6389d153610a6c7c8abce484693.tar.gz |
Fix regression in dictionary creation and lookup
This is patch from Fedora
https://src.fedoraproject.org/rpms/cracklib/c/bc61ed011962c8422848c13cf4ae19725499e218?branch=rawhide
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/packlib.c | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/src/lib/packlib.c b/src/lib/packlib.c index 8acb7be..3505109 100644 --- a/src/lib/packlib.c +++ b/src/lib/packlib.c @@ -579,12 +579,11 @@ fprintf(stderr, "look for (%s)\n", string); fprintf(stderr, "---- %lu, %lu ----\n", lwm, hwm); #endif - middle = lwm + ((hwm - lwm + 1) / 2); - for (;;) { int cmp; + middle = lwm + ((hwm - lwm + 1) / 2); #if DEBUG fprintf(stderr, "lwm = %lu, middle = %lu, hwm = %lu\n", lwm, middle, hwm); @@ -611,24 +610,28 @@ fprintf(stderr, "look for (%s)\n", string); return(middle); } - if (middle == hwm) - { -#if DEBUG - fprintf(stderr, "at terminal subdivision, stopping search\n"); -#endif - break; - } - if (cmp < 0) { - hwm = middle; - middle = lwm + ((hwm - lwm ) / 2); - } + if (middle == lwm) + { +#if DEBUG + fprintf(stderr, "at terminal subdivision from right, stopping search\n"); +#endif + break; + } + hwm = middle - 1; + } else if (cmp > 0) { - lwm = middle; - middle = lwm + ((hwm - lwm + 1) / 2); - } + if (middle == hwm) + { +#if DEBUG + fprintf(stderr, "at terminal subdivision from left, stopping search\n"); +#endif + break; + } + lwm = middle + 1; + } } return (PW_WORDS(pwp)); |