forked from Mirror/frr
zebra: don't try to read past EOF
`FILE *` objects are theoretically in an invalid state if you try to use them past their reporting EOF. Adjust the code to make it correct. Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
parent
e8006bc2cb
commit
1350f8d1c1
|
@ -17,10 +17,15 @@ extern struct zebra_privs_t zserv_privs;
|
||||||
|
|
||||||
static const char proc_net_snmp[] = "/proc/net/snmp";
|
static const char proc_net_snmp[] = "/proc/net/snmp";
|
||||||
|
|
||||||
static void dropline(FILE *fp)
|
static bool dropline(FILE *fp)
|
||||||
{
|
{
|
||||||
while (getc(fp) != '\n')
|
int ch;
|
||||||
;
|
|
||||||
|
do {
|
||||||
|
ch = getc(fp);
|
||||||
|
} while (ch != EOF && ch != '\n');
|
||||||
|
|
||||||
|
return ch != EOF;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ipforward(void)
|
int ipforward(void)
|
||||||
|
@ -36,7 +41,10 @@ int ipforward(void)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* We don't care about the first line. */
|
/* We don't care about the first line. */
|
||||||
dropline(fp);
|
if (!dropline(fp)) {
|
||||||
|
fclose(fp);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Get ip_statistics.IpForwarding :
|
/* Get ip_statistics.IpForwarding :
|
||||||
1 => ip forwarding enabled
|
1 => ip forwarding enabled
|
||||||
|
|
Loading…
Reference in a new issue