From cd2d01faa53a48640e97d55aa0bf2fee99a7c8cb Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 15 Mar 2009 20:35:02 +0000 Subject: [BZ #9880] * inet/inet6_rth.c (inet6_rth_reverse): Compute number of segments correctly. Set segleft member in output as required. Patch partly by Yang Hongyang . * inet/tst-inet6_rth.c (do_test): Add tests for inet6_rth_reverse. --- inet/inet6_rth.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'inet/inet6_rth.c') diff --git a/inet/inet6_rth.c b/inet/inet6_rth.c index e0fad339a9..36269fc6a4 100644 --- a/inet/inet6_rth.c +++ b/inet/inet6_rth.c @@ -130,7 +130,7 @@ inet6_rth_reverse (const void *in, void *out) /* Copy header, not the addresses. The memory regions can overlap. */ memmove (out_rthdr0, in_rthdr0, sizeof (struct ip6_rthdr0)); - int total = in_rthdr0->ip6r0_segleft * 8 / sizeof (struct in6_addr); + int total = in_rthdr0->ip6r0_len * 8 / sizeof (struct in6_addr); for (int i = 0; i < total / 2; ++i) { /* Remember, IN_RTHDR0 and OUT_RTHDR0 might overlap. */ @@ -141,6 +141,8 @@ inet6_rth_reverse (const void *in, void *out) if (total % 2 != 0 && in != out) out_rthdr0->ip6r0_addr[total / 2] = in_rthdr0->ip6r0_addr[total / 2]; + out_rthdr0->ip6r0_segleft = total; + return 0; } -- cgit v1.2.3