summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYour Name <you@example.com>2021-03-12 23:20:51 +0000
committerYour Name <you@example.com>2021-03-12 23:20:51 +0000
commitaa61faccdba3f6389d153610a6c7c8abce484693 (patch)
treec64512e302debf4b385336cdec970252acddf7dc /src
parent6fd504ef38ad783f1247eaf398a4178a70028eea (diff)
downloadcracklib-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.c35
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));