fix handling of odd lengths in swab function
authorRich Felker <dalias@aerifal.cx>
Sat, 4 Oct 2014 15:14:01 +0000 (11:14 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 30 Mar 2015 05:15:45 +0000 (01:15 -0400)
this function is specified to leave the last byte with "unspecified
disposition" when the length is odd, so for the most part correct
programs should not be calling swab with odd lengths. however, doing
so is permitted, and should not write past the end of the destination
buffer.

(cherry picked from commit dccbf4c809efc311aa37da71de70d04dfd8b0db3)

src/string/swab.c

index 9ed6fcda9dee6ec83a33e4f0e1566ca80e2c7c2a..ace0f4666dd613d58bcf2c93cfd70b37d3f3ae28 100644 (file)
@@ -4,7 +4,7 @@ void swab(const void *restrict _src, void *restrict _dest, ssize_t n)
 {
        const char *src = _src;
        char *dest = _dest;
-       for (; n>0; n-=2) {
+       for (; n>1; n-=2) {
                dest[0] = src[1];
                dest[1] = src[0];
                dest += 2;