diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2013-06-10 23:53:28 +0200 |
---|---|---|
committer | Tobias Klauser <tklauser@distanz.ch> | 2013-06-11 00:02:40 +0200 |
commit | bdb9efef8991396b6c77e669a140965c91bb8558 (patch) | |
tree | d1344b5af39d65846d074dd82185893cddaff030 | |
parent | 3990796bbb2a122f7f25ca1a399928c9197e5174 (diff) |
oui: Make parsing of oui.conf more robust
In the unlikely case of the oui.conf file not conforming to the required
format (e.g. by the user supplying one by himself), we would end up -
in the worst case dereferencing a null pointer, if the condiition
(ptr = strstr(buff, ", ")) is false. Thus make the entire parsing a bit
more robust and just ignore lines not following the required format.
The null pointer dereference was found by the Coverity scanner.
Signed-off-by: Tobias Klauser <tklauser@distanz.ch>
-rw-r--r-- | oui.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -36,7 +36,7 @@ const char *lookup_vendor(unsigned int id) void dissector_init_oui(void) { FILE *fp; - char buff[128], *ptr; + char buff[128], *ptr, *end; struct vendor_id *v; void **pos; @@ -54,10 +54,16 @@ void dissector_init_oui(void) ptr = buff; v = xmalloc(sizeof(*v)); - v->id = strtol(ptr, &ptr, 0); + v->id = strtol(ptr, &end, 0); + /* No valid line, skip */ + if (v->id == 0 && end == ptr) + continue; - if ((ptr = strstr(buff, ", "))) - ptr += strlen(", "); + ptr = strstr(buff, ", "); + if (!ptr) + continue; + + ptr += strlen(", "); ptr = strtrim_right(ptr, '\n'); ptr = strtrim_right(ptr, ' '); |