summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2013-06-10 23:53:28 +0200
committerTobias Klauser <tklauser@distanz.ch>2013-06-11 00:02:40 +0200
commitbdb9efef8991396b6c77e669a140965c91bb8558 (patch)
treed1344b5af39d65846d074dd82185893cddaff030
parent3990796bbb2a122f7f25ca1a399928c9197e5174 (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.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/oui.c b/oui.c
index 3354ed4..2f6ec72 100644
--- a/oui.c
+++ b/oui.c
@@ -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, ' ');