diff options
Diffstat (limited to '')
| -rw-r--r-- | src/lib/libc/net/getservent.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/lib/libc/net/getservent.c b/src/lib/libc/net/getservent.c index 7d8cb6d8ca..ff6bf1e57f 100644 --- a/src/lib/libc/net/getservent.c +++ b/src/lib/libc/net/getservent.c | |||
| @@ -32,7 +32,7 @@ | |||
| 32 | */ | 32 | */ |
| 33 | 33 | ||
| 34 | #if defined(LIBC_SCCS) && !defined(lint) | 34 | #if defined(LIBC_SCCS) && !defined(lint) |
| 35 | static char rcsid[] = "$OpenBSD: getservent.c,v 1.4 1998/03/16 05:07:00 millert Exp $"; | 35 | static char rcsid[] = "$OpenBSD: getservent.c,v 1.5 1999/09/03 16:23:19 millert Exp $"; |
| 36 | #endif /* LIBC_SCCS and not lint */ | 36 | #endif /* LIBC_SCCS and not lint */ |
| 37 | 37 | ||
| 38 | #include <sys/types.h> | 38 | #include <sys/types.h> |
| @@ -74,7 +74,8 @@ endservent() | |||
| 74 | struct servent * | 74 | struct servent * |
| 75 | getservent() | 75 | getservent() |
| 76 | { | 76 | { |
| 77 | char *p, *cp, **q; | 77 | char *p, *cp, **q, *endp; |
| 78 | long l; | ||
| 78 | size_t len; | 79 | size_t len; |
| 79 | 80 | ||
| 80 | if (servf == NULL && (servf = fopen(_PATH_SERVICES, "r" )) == NULL) | 81 | if (servf == NULL && (servf = fopen(_PATH_SERVICES, "r" )) == NULL) |
| @@ -103,7 +104,10 @@ again: | |||
| 103 | if (cp == NULL) | 104 | if (cp == NULL) |
| 104 | goto again; | 105 | goto again; |
| 105 | *cp++ = '\0'; | 106 | *cp++ = '\0'; |
| 106 | serv.s_port = htons((in_port_t)atoi(p)); | 107 | l = strtol(p, &endp, 10); |
| 108 | if (endp == p || *endp != '\0' || l < 0 || l > USHRT_MAX) | ||
| 109 | goto again; | ||
| 110 | serv.s_port = htons((in_port_t)l); | ||
| 107 | serv.s_proto = cp; | 111 | serv.s_proto = cp; |
| 108 | q = serv.s_aliases = serv_aliases; | 112 | q = serv.s_aliases = serv_aliases; |
| 109 | cp = strpbrk(cp, " \t"); | 113 | cp = strpbrk(cp, " \t"); |
