ss: fix crash with invalid command input file
If given an invalid input file with -F flag, ss would crash. Examples of invalid input are line to long, or null file. Found by fuzzing with ASAN. Reported-by:Bug Basher <iamliketohack@gmail.com> Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
This commit is contained in:
parent
ae8e1cb83b
commit
5073581835
|
|
@ -202,15 +202,23 @@ int yylex(void)
|
||||||
argc++;
|
argc++;
|
||||||
} else if (yy_fp) {
|
} else if (yy_fp) {
|
||||||
while (tokptr == NULL) {
|
while (tokptr == NULL) {
|
||||||
if (fgets(argbuf, sizeof(argbuf)-1, yy_fp) == NULL)
|
size_t len;
|
||||||
|
|
||||||
|
if (fgets(argbuf, sizeof(argbuf), yy_fp) == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
argbuf[sizeof(argbuf)-1] = 0;
|
|
||||||
if (strlen(argbuf) == sizeof(argbuf) - 1) {
|
len = strnlen(argbuf, sizeof(argbuf));
|
||||||
fprintf(stderr, "Too long line in filter");
|
if (len == 0) {
|
||||||
|
fprintf(stderr, "Invalid line\n");
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
if (argbuf[strlen(argbuf)-1] == '\n')
|
|
||||||
argbuf[strlen(argbuf)-1] = 0;
|
if (len >= sizeof(argbuf) - 1) {
|
||||||
|
fprintf(stderr, "Too long line in filter\n");
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
if (argbuf[len - 1] == '\n')
|
||||||
|
argbuf[len-1] = 0;
|
||||||
if (argbuf[0] == '#' || argbuf[0] == '0')
|
if (argbuf[0] == '#' || argbuf[0] == '0')
|
||||||
continue;
|
continue;
|
||||||
tokptr = argbuf;
|
tokptr = argbuf;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue