diff --git a/libavformat/os_support.c b/libavformat/os_support.c index e28a7bc748a3517be8b811b1746e13660e0a2671..5342a02ed067e45c49895994d6ff2d54457c527d 100644 --- a/libavformat/os_support.c +++ b/libavformat/os_support.c @@ -46,16 +46,17 @@ int inet_aton (const char * str, struct in_addr * add) add1 = atoi(pch); pch = strpbrk(pch,"."); - if (pch == 0 || ++pch == 0) goto done; + if (pch == 0 || ++pch == 0) return 0; add2 = atoi(pch); pch = strpbrk(pch,"."); - if (pch == 0 || ++pch == 0) goto done; + if (pch == 0 || ++pch == 0) return 0; add3 = atoi(pch); pch = strpbrk(pch,"."); - if (pch == 0 || ++pch == 0) goto done; + if (pch == 0 || ++pch == 0) return 0; add4 = atoi(pch); -done: + if (!add1 || (add1|add2|add3|add4) > 255) return 0; + add->s_addr=(add4<<24)+(add3<<16)+(add2<<8)+add1; return 1;