diff options
author | Jozsef Kadlecsik <kadlec@blackhole.kfki.hu> | 2010-12-23 14:33:16 +0100 |
---|---|---|
committer | Jozsef Kadlecsik <kadlec@blackhole.kfki.hu> | 2010-12-23 14:33:16 +0100 |
commit | cce6edeef0e3829fb88185cebf13b21963afe032 (patch) | |
tree | dc32e18925a9eb358d5883ce4b51fc6962875021 /lib/print.c | |
parent | 6c4f5407eb7470a0a1522212667bb28119e52118 (diff) |
Listing/saving of large sets could produce broken listing, fixed.
The wrapper around getnameinfo was not snprintf-compatible and
that could cause broken listing/saving for large sets.
Diffstat (limited to 'lib/print.c')
-rw-r--r-- | lib/print.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/print.c b/lib/print.c index 767fd04..b6819e5 100644 --- a/lib/print.c +++ b/lib/print.c @@ -162,7 +162,9 @@ __getnameinfo##f(char *buf, unsigned int len, \ sizeof(saddr), \ buf, len, NULL, 0, \ flags | NI_NUMERICHOST); \ - return (err != 0 ? -1 : (int)strlen(buf)); \ + D("getnameinfo err: %i, errno %i", err, errno); \ + return (err == 0 ? (int)strlen(buf) : \ + (err == EAI_OVERFLOW || err == EAI_SYSTEM) ? (int)len : -1);\ } #define SNPRINTF_IP(mask, f) \ @@ -236,6 +238,7 @@ ipset_print_ip(char *buf, unsigned int len, size = snprintf_ipv6(buf, len, flags, ip, cidr); else return -1; + D("size %i, len %u", size, len); SNPRINTF_FAILURE(size, len, offset); D("len: %u, offset %u", len, offset); |