On Fri, 08 Dec 2017 08:58:17 -0700, "Todd C. Miller" wrote:

> This adds some missing length checks and fixes the crash.
> It may just be hiding the source of the actual bug, however.

Updated diff that adds another missing length check.

 - todd

Index: usr.bin/locate/locate/fastfind.c
===================================================================
RCS file: /cvs/src/usr.bin/locate/locate/fastfind.c,v
retrieving revision 1.13
diff -u -p -u -r1.13 fastfind.c
--- usr.bin/locate/locate/fastfind.c    23 Oct 2015 07:57:03 -0000      1.13
+++ usr.bin/locate/locate/fastfind.c    8 Dec 2017 16:16:37 -0000
@@ -173,6 +173,8 @@ fastfind_mmap
 
                /* go forward or backward */
                if (c == SWITCH) { /* big step, an integer */
+                       if (len < INTSIZE)
+                               break;
                        count += getwm(paddr) - OFFSET;
                        len -= INTSIZE; paddr += INTSIZE;
                } else {           /* slow step, =< 14 chars */
@@ -184,7 +186,7 @@ fastfind_mmap
                p = path + count;
                foundchar = p - 1;
 
-               for (;;) {
+               for (; len > 0; ) {
                        c = (u_char)*paddr++;
                        len--;
                        /*
@@ -197,7 +199,7 @@ fastfind_mmap
                         */
                        if (c < PARITY) {
                                if (c <= UMLAUT) {
-                                       if (c == UMLAUT) {
+                                       if (c == UMLAUT && len > 0) {
                                                c = (u_char)*paddr++;
                                                len--;
 

Reply via email to