Browse Source

inet_aton doesn't overwrite the IP address unless it is valid.

tags/v0.9.3
Michael Brown 19 years ago
parent
commit
903ddd9878
1 changed files with 7 additions and 5 deletions
  1. 7
    5
      src/core/misc.c

+ 7
- 5
src/core/misc.c View File

146
 /**************************************************************************
146
 /**************************************************************************
147
 INET_ATON - Convert an ascii x.x.x.x to binary form
147
 INET_ATON - Convert an ascii x.x.x.x to binary form
148
 **************************************************************************/
148
 **************************************************************************/
149
-int inet_aton(const char *start, in_addr *i)
150
-{
151
-	const char *p = start;
149
+int inet_aton ( const char *cp, struct in_addr *inp ) {
150
+	const char *p = cp;
152
 	const char *digits_start;
151
 	const char *digits_start;
153
 	unsigned long ip = 0;
152
 	unsigned long ip = 0;
154
 	unsigned long val;
153
 	unsigned long val;
160
 		if ( ( j < 3 ) && ( *(p++) != '.' ) ) return 0;
159
 		if ( ( j < 3 ) && ( *(p++) != '.' ) ) return 0;
161
 		ip = (ip << 8) | val;
160
 		ip = (ip << 8) | val;
162
 	}
161
 	}
163
-	i->s_addr = htonl(ip);
164
-	return p - start;
162
+	if ( *p == '\0' ) {
163
+		inp->s_addr = htonl(ip);
164
+		return 1;
165
+	}
166
+	return 0;
165
 }
167
 }
166
 
168
 
167
 unsigned long strtoul(const char *p, const char **endp, int base)
169
 unsigned long strtoul(const char *p, const char **endp, int base)

Loading…
Cancel
Save