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:
parent
4fb7eb0532
commit
25ee4c318d
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user