Control: tags -1 + patch

The buffer overflow results from strings that are too short for a strcpy to 
always succeed.

Patch from 
<https://build.opensuse.org/package/view_file/Base:System/cracklib/0004-overflow-processing-long-words.patch>
 attached.

The input word is guaranteed to be at most STRINGSIZE-1 in length. One of the
mangle operations involves duplicating the input word, resulting in a string
twice the length to be accommodated by both area variables.

Howard Guo <h...@suse.com> 2016-08-17

diff -rupN 3/lib/rules.c 3-patched/lib/rules.c
--- 3/lib/rules.c	2016-08-16 14:16:24.033261876 +0200
+++ 3-patched/lib/rules.c	2016-08-17 13:57:14.485782894 +0200
@@ -434,9 +434,8 @@ Mangle(input, control)		/* returns a poi
 {
     int limit;
     register char *ptr;
-    static char area[STRINGSIZE];
-    char area2[STRINGSIZE];
-    area[0] = '\0';
+    static char area[STRINGSIZE * 2] = {0};
+    char area2[STRINGSIZE * 2] = {0};
     strcpy(area, input);
 
     for (ptr = control; *ptr; ptr++)

Reply via email to