NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: lib/48517 (snprintb(3) adds extra '>' to string-converted value when nothing matches)



The following reply was made to PR lib/48517; it has been noted by GNATS.

From: Ryo Shimizu <ryo%nerv.org@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: lib-bug-people%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost,
    gnats-admin%netbsd.org@localhost, shm%NetBSD.org@localhost, 
m4j0rd0m0%gmail.com@localhost
Subject: Re: lib/48517 (snprintb(3) adds extra '>' to string-converted value 
when nothing matches)
Date: Fri, 01 Aug 2014 18:10:45 +0900

 >Synopsis: snprintb(3) adds extra '>' to string-converted value when nothing 
 >matches
 >
 >State-Changed-From-To: open->closed
 >State-Changed-By: shm%NetBSD.org@localhost
 >State-Changed-When: Fri, 06 Jun 2014 07:16:34 +0000
 >State-Changed-Why:
 >the bug stops here
 
 there is bugs yet in below case.
 
 % cat x.c
 #include <stdio.h>
 #include <util.h>
 
 int
 main(int argc, char *argv[])
 {
        char tmp[1024];
 
        /* no match any bit, and value not zero */
        snprintb(tmp, sizeof(tmp), "\20\01ONE\02TWO\03TREE", 8);
        printf("%s\n", tmp);    /* result "0x8>" */
 
        snprintb(tmp, sizeof(tmp), "\177\020b\x1f" "MSB\0", 1);
        printf("%s\n", tmp);    /* result "0x1>" */
 
        /* value is zero in new format */
        snprintb(tmp, sizeof(tmp),
                "\177\020"
                "f\x10" "\4" "BURST\0"
                "=\0" "ZERO\0"
                "=\4" "FOUR\0"
                "=\xf" "SIXTEEN\0",
                0);
        printf("%s\n", tmp);    /* result "0x0<BURST=0x0=ZERO" */
 
        return 0;
 }
 
 % cc -Wall x.c -lutil
 % ./a.out 
 0x8>
 0x1>
 0x0<BURST=0x0=ZERO
 
 >Fix:
 cvs -q diff -aup
 Index: snprintb.c
 ===================================================================
 RCS file: /cvsroot/src/common/lib/libutil/snprintb.c,v
 retrieving revision 1.15
 diff -a -u -p -r1.15 snprintb.c
 --- snprintb.c 6 Jun 2014 07:08:37 -0000       1.15
 +++ snprintb.c 1 Aug 2014 08:41:03 -0000
 @@ -257,7 +257,7 @@ snprintb_m(char *buf, size_t buflen, con
                }
        }
        l_len++;
 -      if (val != 0 && (size_t)(++t_len) < buflen)
 +      if (sep != '<' && (size_t)(++t_len) < buflen)
                *bp++ = '>';
  terminate:
        *bp++ = '\0';
 
 
 % cc -Wall x.c -lutil
 % ./a.out 
 0x8
 0x1
 0x0<BURST=0x0=ZERO>
 
 
 --
 ryo shimizu
 


Home | Main Index | Thread Index | Old Index