aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/inet_net_pton.c
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1998-10-12 15:56:34 +0000
committerBruce Momjian <bruce@momjian.us>1998-10-12 15:56:34 +0000
commita643d97f2941a4c0e8825233311ac92289874889 (patch)
tree5cc9d620393e4eeab61731d68fea900ad51dfee3 /src/backend/utils/adt/inet_net_pton.c
parent5d79f26e5b810f963ba4fb5abb0f4c45320bdb39 (diff)
downloadpostgresql-a643d97f2941a4c0e8825233311ac92289874889.tar.gz
postgresql-a643d97f2941a4c0e8825233311ac92289874889.zip
Fix for inet from Tom H.
Diffstat (limited to 'src/backend/utils/adt/inet_net_pton.c')
-rw-r--r--src/backend/utils/adt/inet_net_pton.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/backend/utils/adt/inet_net_pton.c b/src/backend/utils/adt/inet_net_pton.c
index 5944327402e..92a3de8885c 100644
--- a/src/backend/utils/adt/inet_net_pton.c
+++ b/src/backend/utils/adt/inet_net_pton.c
@@ -16,7 +16,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static const char rcsid[] = "$Id: inet_net_pton.c,v 1.3 1998/10/12 01:30:26 momjian Exp $";
+static const char rcsid[] = "$Id: inet_net_pton.c,v 1.4 1998/10/12 15:56:34 momjian Exp $";
#endif
@@ -105,7 +105,8 @@ inet_net_pton_ipv4(const char *src, u_char *dst, size_t size)
/* Hexadecimal: Eat nybble string. */
if (size <= 0)
goto emsgsize;
- *dst = 0, dirty = 0;
+ tmp = 0;
+ dirty = 0;
src++; /* skip x or X. */
while ((ch = *src++) != '\0' &&
isascii(ch) && isxdigit(ch))
@@ -114,16 +115,20 @@ inet_net_pton_ipv4(const char *src, u_char *dst, size_t size)
ch = tolower(ch);
n = strchr(xdigits, ch) - xdigits;
assert(n >= 0 && n <= 15);
- *dst |= n;
- if (!dirty++)
- *dst <<= 4;
- else if (--size > 0)
- *++dst = 0, dirty = 0;
- else
+ tmp = (tmp << 4) | n;
+ if (++dirty == 2) {
+ if (size-- <= 0)
+ goto emsgsize;
+ *dst++ = (u_char) tmp;
+ tmp = 0, dirty = 0;
+ }
+ }
+ if (dirty) {
+ if (size-- <= 0)
goto emsgsize;
+ tmp <<= 4;
+ *dst++ = (u_char) tmp;
}
- if (dirty)
- size--;
}
else if (isascii(ch) && isdigit(ch))
{