Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 1 Jan 2012 19:15:53 +0000 (UTC)
From:      Dimitry Andric <dim@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r229192 - stable/9/usr.bin/hexdump
Message-ID:  <201201011915.q01JFrl6026742@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dim
Date: Sun Jan  1 19:15:52 2012
New Revision: 229192
URL: http://svn.freebsd.org/changeset/base/229192

Log:
  MFC r228636:
  
  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.

Modified:
  stable/9/usr.bin/hexdump/conv.c
Directory Properties:
  stable/9/usr.bin/hexdump/   (props changed)

Modified: stable/9/usr.bin/hexdump/conv.c
==============================================================================
--- stable/9/usr.bin/hexdump/conv.c	Sun Jan  1 19:12:07 2012	(r229191)
+++ stable/9/usr.bin/hexdump/conv.c	Sun Jan  1 19:15:52 2012	(r229192)
@@ -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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201201011915.q01JFrl6026742>