fix potential read past end of buffer in getnameinfo service name lookup
authorRich Felker <dalias@aerifal.cx>
Fri, 5 Sep 2014 17:52:20 +0000 (13:52 -0400)
committerRich Felker <dalias@aerifal.cx>
Fri, 5 Sep 2014 17:52:20 +0000 (13:52 -0400)
if the loop stopped due to reaching the end of the string, the
subsequent increment could possibly move the position one past the end
of the buffer. no further writes happen, the reads cannot fault anyway
unless the stack completely lacks any zero bytes, and reading junk
should not yield an incorrect result from the function either.
nonetheless the code was wrong and needs to be fixed.

src/network/getnameinfo.c

index 2ba66e33d75c7d5ef91610b10fff794de58fcf0e..3484fc697f9fa93e9a7d02295457b00a3a137e6c 100644 (file)
@@ -96,7 +96,7 @@ static void reverse_services(char *buf, int port, int dgram)
                if ((p=strchr(line, '#'))) *p++='\n', *p=0;
 
                for (p=line; *p && !isspace(*p); p++);
-               if (!p) continue;
+               if (!*p) continue;
                *p++ = 0;
                svport = strtoul(p, &z, 10);