| Summary: | 'od -c' show wrong char when it is a non-printable | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Product: | Base System | Reporter: | pru13allan | ||||||
| Component: | bin | Assignee: | Kyle Evans <kevans> | ||||||
| Status: | Closed FIXED | ||||||||
| Severity: | Affects Some People | CC: | kevans, yuripv | ||||||
| Priority: | --- | Flags: | kevans:
mfc-stable11?
|
||||||
| Version: | 11.1-RELEASE | ||||||||
| Hardware: | Any | ||||||||
| OS: | Any | ||||||||
| Attachments: |
|
||||||||
|
Description
pru13allan
2017-12-23 19:14:49 UTC
Created attachment 189747 [details]
Restore the original character if we peeked ahead, but still can't complete
The problem here is that we forget to restore the original character to print when we encounter what we think is incomplete multibyte sequence at the end of the line buffer or at EOF -- we peek ahead trying to complete the character, but if the conversion still fails, we have the character pointer set to the look-ahead buffer, not what it was originally. Created attachment 189748 [details]
Restore the original character if we peeked ahead, but still can't complete
Taking this; Yuri has opened a review as D13963 [1]. [1] https://reviews.freebsd.org/D13963 A commit references this bug: Author: kevans Date: Sat Jan 20 02:49:33 UTC 2018 New revision: 328188 URL: https://svnweb.freebsd.org/changeset/base/328188 Log: od(1): Fix wrong output for some 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. PR: 224552 Submitted by: Yuri Pankov MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D13963 Changes: head/usr.bin/hexdump/conv.c head/usr.bin/hexdump/tests/Makefile head/usr.bin/hexdump/tests/d_od_cflag_a.out head/usr.bin/hexdump/tests/d_od_cflag_b.out head/usr.bin/hexdump/tests/od_test.sh A commit references this bug: Author: kevans Date: Sat Jan 27 23:20:02 UTC 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 Changes: _U stable/11/ stable/11/usr.bin/hexdump/conv.c stable/11/usr.bin/hexdump/tests/Makefile stable/11/usr.bin/hexdump/tests/d_od_cflag_a.out stable/11/usr.bin/hexdump/tests/d_od_cflag_b.out stable/11/usr.bin/hexdump/tests/od_test.sh |