fmt_ip6 was violating rfc5952 section 4.2.2
This commit is contained in:
parent
928da70f1d
commit
a4a2aed3de
@ -11,8 +11,10 @@ size_t fmt_ip6(char *s,const char ip[16])
|
||||
for (k=0; k<16; k+=2) {
|
||||
if (ip[k]==0 && ip[k+1]==0) {
|
||||
if (!compr) {
|
||||
compr=1;
|
||||
pos1=k;
|
||||
if (k==14 || (ip[k+2]==0 && ip[k+3]==0)) {
|
||||
compr=1;
|
||||
pos1=k;
|
||||
}
|
||||
}
|
||||
if (k==14) { k=16; goto last; }
|
||||
} else if (compr) {
|
||||
|
@ -1,14 +1,19 @@
|
||||
#include "ip6.h"
|
||||
#include <assert.h>
|
||||
#include <string.h>
|
||||
|
||||
int main() {
|
||||
char buf[100];
|
||||
int i;
|
||||
buf[i=fmt_ip6(buf,"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")]=0; assert(i==2 && !strcmp(buf,"::"));
|
||||
buf[i=fmt_ip6(buf,"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01")]=0; assert(i==3 && !strcmp(buf,"::1"));
|
||||
buf[i=fmt_ip6(buf,"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")]=0;
|
||||
assert(i==2 && !strcmp(buf,"::"));
|
||||
buf[i=fmt_ip6(buf,"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01")]=0;
|
||||
assert(i==3 && !strcmp(buf,"::1"));
|
||||
buf[i=fmt_ip6(buf,"\xfe\xc0\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x01")]=0;
|
||||
assert(i==16 && !strcmp(buf,"fec0:0:0:ffff::1"));
|
||||
buf[i=fmt_ip6(buf,"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x7f\x00\x00\x01")]=0;
|
||||
assert(i==16 && !strcmp(buf,"::ffff:127.0.0.1"));
|
||||
buf[i=fmt_ip6(buf,"\x20\x01\x0d\xb8\x00\x00\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01")]=0;
|
||||
assert(i==20 && !strcmp(buf,"2001:db8:0:1:1:1:1:1"));
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user