1
0
mirror of https://github.com/rofl0r/proxychains-ng synced 2025-01-08 22:22:52 +08:00

hostsreader: use temporary vars for string manipulation

working directly with the passed variables could lead to bugs when
some lines in the hosts file aren't well-formed and the loop is taken
several times while the buf vars are already modified.
This commit is contained in:
rofl0r 2014-11-14 13:17:36 +01:00
parent 4fb7eb0532
commit 25ee4c318d

View File

@ -29,26 +29,28 @@ int hostsreader_get(struct hostsreader *ctx, char* buf, size_t bufsize) {
while(1) { while(1) {
if(!fgets(buf, bufsize, ctx->f)) return 0; if(!fgets(buf, bufsize, ctx->f)) return 0;
if(*buf == '#') continue; if(*buf == '#') continue;
ctx->ip = buf; char *p = buf;
while(*buf && !isspace(*buf) && bufsize) { size_t l = bufsize;
buf++; ctx->ip = p;
bufsize--; while(*p && !isspace(*p) && l) {
p++;
l--;
} }
if(!bufsize || !*buf || buf == ctx->ip) continue; if(!l || !*p || p == ctx->ip) continue;
*buf = 0; *p = 0;
buf++; p++;
while(*buf && isspace(*buf) && bufsize) { while(*p && isspace(*p) && l) {
buf++; p++;
bufsize--; l--;
} }
if(!bufsize || !*buf) continue; if(!l || !*p) continue;
ctx->name = buf; ctx->name = buf;
while(*buf && !isspace(*buf) && bufsize) { while(*p && !isspace(*p) && l) {
buf++; p++;
bufsize--; l--;
} }
if(!bufsize || !*buf) continue; if(!l || !*p) continue;
*buf = 0; *p = 0;
if(isnumericipv4(ctx->ip)) return 1; if(isnumericipv4(ctx->ip)) return 1;
} }
} }