Date: Sat, 27 Jan 2018 23:20:01 +0000 (UTC) From: Kyle Evans <kevans@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r328500 - in stable/11/usr.bin/hexdump: . tests Message-ID: <201801272320.w0RNK1PL087298@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kevans Date: Sat Jan 27 23:20:01 2018 New Revision: 328500 URL: https://svnweb.freebsd.org/changeset/base/328500 Log: MFC r328188,r328189,r328200: Fix wrong output for multibyte corner cases MFC r328188: od(1): Fix wrong output for corner cases in multibyte locales. Restore the original character to print if we used the look-ahead buffer, but that didn't help -- we either got an illegal sequence or still can't complete. MFC r328189: od(1): Fix mis-patch from r328188 od_test.sh got duplicated erroneously when it was added in r328188. Dedup. MFC r328200: Silence the gcc warning: 'op' may be used uninitialized in this function PR: 224552 Added: stable/11/usr.bin/hexdump/tests/d_od_cflag_a.out - copied unchanged from r328188, head/usr.bin/hexdump/tests/d_od_cflag_a.out stable/11/usr.bin/hexdump/tests/d_od_cflag_b.out - copied unchanged from r328188, head/usr.bin/hexdump/tests/d_od_cflag_b.out stable/11/usr.bin/hexdump/tests/od_test.sh - copied, changed from r328188, head/usr.bin/hexdump/tests/od_test.sh Modified: stable/11/usr.bin/hexdump/conv.c stable/11/usr.bin/hexdump/tests/Makefile Directory Properties: stable/11/ (props changed) Modified: stable/11/usr.bin/hexdump/conv.c ============================================================================== --- stable/11/usr.bin/hexdump/conv.c Sat Jan 27 23:13:34 2018 (r328499) +++ stable/11/usr.bin/hexdump/conv.c Sat Jan 27 23:20:01 2018 (r328500) @@ -54,7 +54,10 @@ conv_c(PR *pr, u_char *p, size_t bufsize) size_t clen, oclen; int converr, pad, width; u_char peekbuf[MB_LEN_MAX]; + u_char *op; + op = NULL; + if (pr->mbleft > 0) { str = "**"; pr->mbleft--; @@ -105,6 +108,15 @@ retry: else if (clen == (size_t)-1 || (clen == (size_t)-2 && p == peekbuf)) { memset(&pr->mbstate, 0, sizeof(pr->mbstate)); + if (p == peekbuf) { + /* + * We peeked ahead, but that didn't help -- + * we either got an illegal sequence or still + * can't complete; restore original character. + */ + oclen = 0; + p = op; + } wc = *p; clen = 1; converr = 1; @@ -114,6 +126,7 @@ retry: * can complete it. */ oclen = bufsize; + op = p; bufsize = peek(p = peekbuf, MB_CUR_MAX); goto retry; } @@ -126,7 +139,7 @@ retry: if (!odmode) { *pr->cchar = 'c'; (void)printf(pr->fmt, (int)wc); - } else { + } else { *pr->cchar = 'C'; assert(strcmp(pr->fmt, "%3C") == 0); width = wcwidth(wc); Modified: stable/11/usr.bin/hexdump/tests/Makefile ============================================================================== --- stable/11/usr.bin/hexdump/tests/Makefile Sat Jan 27 23:13:34 2018 (r328499) +++ stable/11/usr.bin/hexdump/tests/Makefile Sat Jan 27 23:20:01 2018 (r328500) @@ -2,7 +2,7 @@ PACKAGE= tests -ATF_TESTS_SH= hexdump_test +ATF_TESTS_SH= hexdump_test od_test ${PACKAGE}FILES+= d_hexdump_a.in ${PACKAGE}FILES+= d_hexdump_b.in @@ -27,5 +27,7 @@ ${PACKAGE}FILES+= d_hexdump_UCflag_c.out ${PACKAGE}FILES+= d_hexdump_xflag_a.out ${PACKAGE}FILES+= d_hexdump_xflag_b.out ${PACKAGE}FILES+= d_hexdump_xflag_c.out +${PACKAGE}FILES+= d_od_cflag_a.out +${PACKAGE}FILES+= d_od_cflag_b.out .include <bsd.test.mk> Copied: stable/11/usr.bin/hexdump/tests/d_od_cflag_a.out (from r328188, head/usr.bin/hexdump/tests/d_od_cflag_a.out) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/11/usr.bin/hexdump/tests/d_od_cflag_a.out Sat Jan 27 23:20:01 2018 (r328500, copy of r328188, head/usr.bin/hexdump/tests/d_od_cflag_a.out) @@ -0,0 +1,3 @@ +0000000 T e s t T e s t T e s t T e s 345 +0000020 T e s t 345 +0000025 Copied: stable/11/usr.bin/hexdump/tests/d_od_cflag_b.out (from r328188, head/usr.bin/hexdump/tests/d_od_cflag_b.out) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/11/usr.bin/hexdump/tests/d_od_cflag_b.out Sat Jan 27 23:20:01 2018 (r328500, copy of r328188, head/usr.bin/hexdump/tests/d_od_cflag_b.out) @@ -0,0 +1,3 @@ +0000000 T e s t T e s t T e s t T e s т +0000020 ** Т ** е ** с ** т ** +0000031 Copied and modified: stable/11/usr.bin/hexdump/tests/od_test.sh (from r328188, head/usr.bin/hexdump/tests/od_test.sh) ============================================================================== --- head/usr.bin/hexdump/tests/od_test.sh Sat Jan 20 02:49:32 2018 (r328188, copy source) +++ stable/11/usr.bin/hexdump/tests/od_test.sh Sat Jan 27 23:20:01 2018 (r328500) @@ -47,48 +47,3 @@ atf_init_test_cases() { atf_add_test_case c_flag } -# -# Copyright 2018 The FreeBSD Project -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -# SUCH DAMAGE. -# -# $FreeBSD$ - -atf_test_case c_flag -c_flag_head() -{ - atf_set "descr" "Verify -c output" -} -c_flag_body() -{ - printf 'TestTestTestTes\345Test\345' > d_od_cflag.in - atf_check -o file:"$(atf_get_srcdir)/d_od_cflag_a.out" \ - env LC_CTYPE="en_US.UTF-8" od -c "d_od_cflag.in" - printf 'TestTestTestTesтТест' > d_od_cflag.in - atf_check -o file:"$(atf_get_srcdir)/d_od_cflag_b.out" \ - env LC_CTYPE="en_US.UTF-8" od -c "d_od_cflag.in" -} - -atf_init_test_cases() -{ - atf_add_test_case c_flag -}
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201801272320.w0RNK1PL087298>