Tim van der Molen (2021-10-29 23:46 +0200): > Christian Weisgerber (2021-10-28 00:16 +0200): > > databases/sqlcipher > > I can't reproduce this on jsg's llvm13 snapshot. Can anyone else? > > The errors seem strange, too. It looks as if sqlite3.c somehow was > generated incorrectly.
I've been able to reproduce this. It seems the problem is with tcl. When compiled with llvm 13, tclsh8.6 doesn't properly read files larger than 4097 bytes. Here's an illustration of the problem, simplified as much as I could. Create the following tcl script, simplified from SQLCipher's mksqlite3c.tcl: $ cat test.tcl set out [open out w] while {![eof stdin]} { puts $out [gets stdin] } This script should copy stdin to the file "out", and append a newline. Now create three files of different sizes: $ (echo abc; for i in $(jot 1022); do echo ddd; done; echo eeee) > good $ (echo abc; for i in $(jot 1022); do echo ddd; done; echo eeeee) > bad $ (echo abc; for i in $(jot 1022); do echo ddd; done; echo eeeeeee) > worse $ wc -c good bad worse 4097 good 4098 bad 4100 worse 12295 total With an llvm13-compiled tclsh8.6, first run this: $ /usr/local/bin/tclsh8.6 test.tcl < good $ diff -u good out --- good Sun Oct 31 18:53:08 2021 +++ out Sun Oct 31 18:57:13 2021 @@ -1022,3 +1022,4 @@ ddd ddd eeee + All is well. The only difference is the extra newline at the end. But now try this: $ /usr/local/bin/tclsh8.6 test.tcl < bad $ diff -u bad out --- bad Sun Oct 31 18:53:08 2021 +++ out Sun Oct 31 18:57:13 2021 @@ -1021,4 +1021,5 @@ ddd ddd ddd -eeeee +eeeea + The last line hasn't been copied correctly. The "a" is from the first line. It seems that after the 4097th input byte, something wrapped around and reading continued from the start of the input. This becomes more obvious with the "worse" file: $ /usr/local/bin/tclsh8.6 test.tcl < worse $ diff -u worse out --- worse Sun Oct 31 18:53:08 2021 +++ out Sun Oct 31 18:57:14 2021 @@ -1021,4 +1021,5 @@ ddd ddd ddd -eeeeeee +eeeeabc + xxx The "abc" on the last line must have come from the first line. If you repeat these tests on a regular snapshot, you'll see that in each case the only difference is the extra newline, as would be expected. There seem to be more problems with tcl and llvm 13. On a regular snapshot, running "make test" in /usr/ports/lang/tcl/8.6 gives: all.tcl: Total 31340 Passed 30023 Skipped 1317 Failed 0 With llvm 13, however: all.tcl: Total 31340 Passed 29902 Skipped 1317 Failed 121 Files with failing tests: chanio.test encoding.test event.test exec.test http.test http11.test httpold.test io.test iogt.test socket.test timer.test zlib.test