summaryrefslogtreecommitdiff
path: root/oui.c
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 /oui.c
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>
Diffstat (limited to 'oui.c')
-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, ' ');