OSDN Git Service

ether_aton: reject invalid input
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Mon, 2 May 2011 08:10:47 +0000 (10:10 +0200)
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Mon, 2 May 2011 08:10:47 +0000 (10:10 +0200)
fixes PR2227

Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
libc/inet/ether_addr.c

index 621c629..9071d71 100644 (file)
@@ -38,10 +38,12 @@ struct ether_addr *ether_aton_r(const char *asc, struct ether_addr *addr)
 
        for (cnt = 0; cnt < 6; ++cnt) {
                unsigned char number;
-               char ch;
+               char ch = *asc++;
 
+               if (ch < 0x20)
+                       return NULL;
                /* | 0x20 is cheap tolower(), valid for letters/numbers only */
-               ch = (*asc++) | 0x20;
+               ch |= 0x20;
                if ((ch < '0' || ch > '9') && (ch < 'a' || ch > 'f'))
                        return NULL;
                number = !(ch > '9') ? (ch - '0') : (ch - 'a' + 10);