summaryrefslogtreecommitdiff
path: root/usr.bin/hexdump
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2011-12-17 15:33:26 +0000
committerDimitry Andric <dim@FreeBSD.org>2011-12-17 15:33:26 +0000
commit7818f8df2e53e86d342ba896ee2d013a5ab3a5e5 (patch)
treed8ad7573aa3580990873b6751d202d6e44cfe2de /usr.bin/hexdump
parent17bbcc52d1c976685721d7c831c8be0ecc644e47 (diff)
downloadsrc-test2-7818f8df2e53e86d342ba896ee2d013a5ab3a5e5.tar.gz
src-test2-7818f8df2e53e86d342ba896ee2d013a5ab3a5e5.zip
Correct a logic error in usr.bin/hexdump/conv.c, found by clang.
Whenever the conv_c() function encounters an incomplete multibyte char, it peeks ahead. It also sets p to peekbuf, to indicate it is still processing the incomplete character. However, on the next retry, it compares buf against peekbuf, which always returns false, since both buf and peekbuf are local char arrays, whose addresses are never the same. Fix this by comparing against p instead, which was the intention. Also turn peekbuf into an array of u_char, to prevent conversion warnings. MFC after: 1 week
Notes
Notes: svn path=/head/; revision=228636
Diffstat (limited to 'usr.bin/hexdump')
-rw-r--r--usr.bin/hexdump/conv.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/usr.bin/hexdump/conv.c b/usr.bin/hexdump/conv.c
index 7dd2c7fc1f7c..2253dff5491c 100644
--- a/usr.bin/hexdump/conv.c
+++ b/usr.bin/hexdump/conv.c
@@ -53,7 +53,7 @@ conv_c(PR *pr, u_char *p, size_t bufsize)
wchar_t wc;
size_t clen, oclen;
int converr, pad, width;
- char peekbuf[MB_LEN_MAX];
+ u_char peekbuf[MB_LEN_MAX];
if (pr->mbleft > 0) {
str = "**";
@@ -103,7 +103,7 @@ retry:
if (clen == 0)
clen = 1;
else if (clen == (size_t)-1 || (clen == (size_t)-2 &&
- buf == peekbuf)) {
+ p == peekbuf)) {
memset(&pr->mbstate, 0, sizeof(pr->mbstate));
wc = *p;
clen = 1;