From 5486a7dcd17f8346b3c3d057f7c6887934adb1e8 Mon Sep 17 00:00:00 2001 From: itojun <> Date: Sun, 9 Jul 2000 04:48:35 +0000 Subject: reject empty scopeid/numeric portname. sync with kame. --- src/lib/libc/net/getaddrinfo.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/lib/libc/net/getaddrinfo.c b/src/lib/libc/net/getaddrinfo.c index c64e838acc..a443d8c9f2 100644 --- a/src/lib/libc/net/getaddrinfo.c +++ b/src/lib/libc/net/getaddrinfo.c @@ -1,5 +1,5 @@ -/* $OpenBSD: getaddrinfo.c,v 1.24 2000/07/05 03:00:55 itojun Exp $ */ -/* $KAME: getaddrinfo.c,v 1.25 2000/07/05 02:59:28 itojun Exp $ */ +/* $OpenBSD: getaddrinfo.c,v 1.25 2000/07/09 04:48:35 itojun Exp $ */ +/* $KAME: getaddrinfo.c,v 1.30 2000/07/09 04:37:25 itojun Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -288,13 +288,16 @@ static int str_isnumber(p) const char *p; { - const char *q = (const char *)p; - while (*q) { - if (!isdigit(*q)) - return NO; - q++; - } - return YES; + char *ep; + + if (*p == '\0') + return NO; + ep = NULL; + (void)strtoul(p, &ep, 10); + if (ep && *ep == '\0') + return YES; + else + return NO; } int @@ -973,6 +976,10 @@ ip6_str2scopeid(scope, sin6) struct in6_addr *a6 = &sin6->sin6_addr; char *ep; + /* empty scopeid portion is invalid */ + if (*scope == '\0') + return -1; + if (IN6_IS_ADDR_LINKLOCAL(a6) || IN6_IS_ADDR_MC_LINKLOCAL(a6)) { /* * We currently assume a one-to-one mapping between links -- cgit v1.2.3-55-g6feb