Source-Changes-HG archive

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

[src/trunk]: src libcurses: demonstrate bug in addch that doubles tab indenta...



details:   https://anonhg.NetBSD.org/src/rev/4e9bb239b818
branches:  trunk
changeset: 959281:4e9bb239b818
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sun Feb 07 01:53:54 2021 +0000

description:
libcurses: demonstrate bug in addch that doubles tab indentation

When adding "\t" via addch, win.curx advances by twice the spaces as
intended.  This bug was introduced somewhere between NetBSD 8.0 and 9.0.

Adding "\t" via addstr does not have this bug.

This bug causes the installation menu of sysinst to be have its menu
items indented by 16 characters instead of only 8.  This in turn
produces an ugly line break in the German translation.

The test framework for libcurses is not well integrated into ATF.
Whenever the expected output is longer than the actual output, or vice
versa, the test passes nevertheless.  This makes it necessary to
constantly look into atf-run.log to see whether the actual output is
indeed equal to the expected output, which is crucial, especially for
telling the difference between addstr and addnstr.

Reusing the .chk files for several tests is not a good idea either.  For
example, addstr and waddstr are supposed to produce the same result for
ASCII-only text, so it was tempting to use the same file.  But waddstr
seems to have a bug (maybe undefined behavior), at least waddstr returns
ERR in one case where it shouldn't.  This means that currently the
expected output (acknowledging the bug) must be different.

The "expected" test output in waddstr.chk looks completely broken, but
that's exactly what the test produces right now.

diffstat:

 distrib/sets/lists/tests/mi                 |   4 +++-
 tests/lib/libcurses/check_files/Makefile    |   4 +++-
 tests/lib/libcurses/check_files/addch.chk   |   3 ++-
 tests/lib/libcurses/check_files/addnstr.chk |   1 +
 tests/lib/libcurses/check_files/addstr.chk  |   3 ++-
 tests/lib/libcurses/check_files/waddstr.chk |   1 +
 tests/lib/libcurses/tests/addch             |  18 +++++++++++++++++-
 tests/lib/libcurses/tests/addnstr           |   3 +--
 tests/lib/libcurses/tests/addstr            |   5 ++++-
 tests/lib/libcurses/tests/waddnstr          |   2 +-
 tests/lib/libcurses/tests/waddstr           |  11 ++++++++---
 11 files changed, 43 insertions(+), 12 deletions(-)

diffs (152 lines):

diff -r dc54fe5ec906 -r 4e9bb239b818 distrib/sets/lists/tests/mi
--- a/distrib/sets/lists/tests/mi       Sat Feb 06 22:00:59 2021 +0000
+++ b/distrib/sets/lists/tests/mi       Sun Feb 07 01:53:54 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1015 2021/02/01 20:31:41 rillig Exp $
+# $NetBSD: mi,v 1.1016 2021/02/07 01:53:54 rillig Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -3265,6 +3265,7 @@
 ./usr/tests/lib/libcurses/check_files/addchstr.chk             tests-lib-tests         compattestfile,atf
 ./usr/tests/lib/libcurses/check_files/addchstr2.chk            tests-lib-tests         compattestfile,atf
 ./usr/tests/lib/libcurses/check_files/addchstr3.chk            tests-lib-tests         compattestfile,atf
+./usr/tests/lib/libcurses/check_files/addnstr.chk              tests-lib-tests         compattestfile,atf
 ./usr/tests/lib/libcurses/check_files/addnwstr1.chk            tests-lib-tests         compattestfile,atf
 ./usr/tests/lib/libcurses/check_files/addnwstr2.chk            tests-lib-tests         compattestfile,atf
 ./usr/tests/lib/libcurses/check_files/addstr.chk               tests-lib-tests         compattestfile,atf
@@ -3475,6 +3476,7 @@
 ./usr/tests/lib/libcurses/check_files/waddchstr.chk            tests-lib-tests         compattestfile,atf
 ./usr/tests/lib/libcurses/check_files/waddnwstr1.chk           tests-lib-tests         compattestfile,atf
 ./usr/tests/lib/libcurses/check_files/waddnwstr2.chk           tests-lib-tests         compattestfile,atf
+./usr/tests/lib/libcurses/check_files/waddstr.chk              tests-lib-tests         compattestfile,atf
 ./usr/tests/lib/libcurses/check_files/waddwstr1.chk            tests-lib-tests         compattestfile,atf
 ./usr/tests/lib/libcurses/check_files/waddwstr2.chk            tests-lib-tests         compattestfile,atf
 ./usr/tests/lib/libcurses/check_files/waddwstr3.chk            tests-lib-tests         compattestfile,atf
diff -r dc54fe5ec906 -r 4e9bb239b818 tests/lib/libcurses/check_files/Makefile
--- a/tests/lib/libcurses/check_files/Makefile  Sat Feb 06 22:00:59 2021 +0000
+++ b/tests/lib/libcurses/check_files/Makefile  Sun Feb 07 01:53:54 2021 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.4 2020/10/24 14:21:25 martin Exp $
+# $NetBSD: Makefile,v 1.5 2021/02/07 01:53:54 rillig Exp $
 
 NOMAN=         # defined
 
@@ -17,6 +17,7 @@
 FILES+=                addchstr.chk
 FILES+=                addchstr2.chk
 FILES+=                addchstr3.chk
+FILES+=                addnstr.chk
 FILES+=                addnwstr1.chk
 FILES+=                addnwstr2.chk
 FILES+=                addstr.chk
@@ -226,6 +227,7 @@
 FILES+=                waddchstr.chk
 FILES+=                waddnwstr1.chk
 FILES+=                waddnwstr2.chk
+FILES+=                waddstr.chk
 FILES+=                waddwstr1.chk
 FILES+=                waddwstr2.chk
 FILES+=                waddwstr3.chk
diff -r dc54fe5ec906 -r 4e9bb239b818 tests/lib/libcurses/check_files/addch.chk
--- a/tests/lib/libcurses/check_files/addch.chk Sat Feb 06 22:00:59 2021 +0000
+++ b/tests/lib/libcurses/check_files/addch.chk Sun Feb 07 01:53:54 2021 +0000
@@ -1,1 +1,2 @@
-smsotrmsocup6;4Xsmsosmulermsormul
\ No newline at end of file
+smsotrmsocup6;4Xsmsosmulermsormulcup7;17X8
+0123456  8
diff -r dc54fe5ec906 -r 4e9bb239b818 tests/lib/libcurses/check_files/addnstr.chk
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/lib/libcurses/check_files/addnstr.chk       Sun Feb 07 01:53:54 2021 +0000
@@ -0,0 +1,1 @@
+abcde
\ No newline at end of file
diff -r dc54fe5ec906 -r 4e9bb239b818 tests/lib/libcurses/check_files/addstr.chk
--- a/tests/lib/libcurses/check_files/addstr.chk        Sat Feb 06 22:00:59 2021 +0000
+++ b/tests/lib/libcurses/check_files/addstr.chk        Sun Feb 07 01:53:54 2021 +0000
@@ -1,1 +1,2 @@
-abcde
\ No newline at end of file
+abcdecup3;9X8
+0123456 8
diff -r dc54fe5ec906 -r 4e9bb239b818 tests/lib/libcurses/check_files/waddstr.chk
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/lib/libcurses/check_files/waddstr.chk       Sun Feb 07 01:53:54 2021 +0000
@@ -0,0 +1,1 @@
+home
\ No newline at end of file
diff -r dc54fe5ec906 -r 4e9bb239b818 tests/lib/libcurses/tests/addch
--- a/tests/lib/libcurses/tests/addch   Sat Feb 06 22:00:59 2021 +0000
+++ b/tests/lib/libcurses/tests/addch   Sun Feb 07 01:53:54 2021 +0000
@@ -1,6 +1,22 @@
 include start
 call OK addch `\001t`
 call OK refresh
-call OK mvaddch 5 3`\003e`
+call OK mvaddch 5 3 `\003e`
+call OK refresh
+call OK addch "\n"
+
+# Somewhere between NetBSD 8.0 and 9.0, a bug was added to addch that
+# doubled the spaces for a tab.  Instead of 8 spaces, there are now 16.
+call OK addch "\t"
+call OK addch "8"
+call OK addch "\n"
+
+# Somewhere between NetBSD 8.0 and 9.0, a bug was added to addch that
+# doubled the spaces for a tab.  Instead of 1 space, there are now 2.
+call OK addstr "0123456"
+call OK addch "\t"
+call OK addch "8"
+call OK addch "\n"
+
 call OK refresh
 compare addch.chk
diff -r dc54fe5ec906 -r 4e9bb239b818 tests/lib/libcurses/tests/addnstr
--- a/tests/lib/libcurses/tests/addnstr Sat Feb 06 22:00:59 2021 +0000
+++ b/tests/lib/libcurses/tests/addnstr Sun Feb 07 01:53:54 2021 +0000
@@ -1,5 +1,4 @@
 include start
 call OK addnstr "abcdefg" 5
 call OK refresh
-# should be the same as addstr
-compare addstr.chk
+compare addnstr.chk
diff -r dc54fe5ec906 -r 4e9bb239b818 tests/lib/libcurses/tests/addstr
--- a/tests/lib/libcurses/tests/addstr  Sat Feb 06 22:00:59 2021 +0000
+++ b/tests/lib/libcurses/tests/addstr  Sun Feb 07 01:53:54 2021 +0000
@@ -1,4 +1,7 @@
 include start
-call OK addstr "abcde"
+call OK addstr "abcde\n"
+call OK addstr "\n"
+call OK addstr "\t8\n"
+call OK addstr "0123456\t8\n"
 call OK refresh
 compare addstr.chk
diff -r dc54fe5ec906 -r 4e9bb239b818 tests/lib/libcurses/tests/waddnstr
--- a/tests/lib/libcurses/tests/waddnstr        Sat Feb 06 22:00:59 2021 +0000
+++ b/tests/lib/libcurses/tests/waddnstr        Sun Feb 07 01:53:54 2021 +0000
@@ -1,4 +1,4 @@
 include window
 call OK waddnstr $win1 "abcdefg" 5
 call OK wrefresh $win1
-compare addstr.chk
+compare addnstr.chk
diff -r dc54fe5ec906 -r 4e9bb239b818 tests/lib/libcurses/tests/waddstr
--- a/tests/lib/libcurses/tests/waddstr Sat Feb 06 22:00:59 2021 +0000
+++ b/tests/lib/libcurses/tests/waddstr Sun Feb 07 01:53:54 2021 +0000
@@ -1,4 +1,9 @@
 include window
-call OK waddstr $win1 "abcde"
-call OK wrefresh $win1
-compare addstr.chk
+call OK waddstr $win1 "abcde\n"
+call OK waddstr $win1 "\n"
+call OK waddstr $win1 "\t8\n"
+# XXX: The following line causes an unexpected "ERR Resource temporarily
+# unavailable" on NetBSD/amd64 9.99.80.
+#call OK waddstr $win1 "0123456\t8\n"
+call OK refresh
+compare waddstr.chk



Home | Main Index | Thread Index | Old Index