Hi,
I saw that CI image builds for freebsd were failing, because 13.1, used until
now, is EOL. Update to 13.2, no problem, I thought. Ran a CI run against 13.2
- unfortunately that failed. In pltcl of all places.
https://api.cirrus-ci.com/v1/artifact/task/5275616266682368/testrun/build/testrun/pltcl/regress/regression.diffs
Notably both 13.1 and 13.2 are using tcl 8.6.13.
The code for the relevant function is this:
create function tcl_date_week(int4,int4,int4) returns text as $$
return [clock format [clock scan "$2/$3/$1"] -format "%U"]
$$ language pltcl immutable;
select tcl_date_week(2010,1,26);
It doesn't surprise me that there are problems with above clock scan, it uses
the MM/DD/YYYY format without making that explicit. But why that doesn't work
on freebsd 13.2, I can't explain. It looks like tcl specifies the MM/DD/YYYY
bit for "free format scans":
https://www.tcl.tk/man/tcl8.6/TclCmd/clock.html#M80
It sure looks like freebsd 13.2 tcl is just busted. Notably it can't even
parse what it generates:
echo 'puts [clock scan [clock format [clock seconds] -format "%Y/%m/%d"] -format "%Y/%m/%d"]'|tclsh8.6
Which works on 13.1 (and other operating systems), without a problem.
I used truss as a very basic way to see differences between 13.1 and 13.2 -
the big difference was .2 failing just after
access("/etc/localtime",F_OK) ERR#2 'No such file or directory'
open("/etc/localtime",O_RDONLY,077) ERR#2 'No such file or directory'
whereas 13.1 also saw that, but then continued to
issetugid() = 0 (0x0)
open("/usr/share/zoneinfo/UTC",O_RDONLY,00) = 3 (0x3)
fstat(3,{ mode=-r--r--r-- ,inode=351417,size=118,blksize=32768 }) = 0 (0x0)
...
which made me test specifying the timezone explicitly:
echo 'puts [clock scan [clock format [clock seconds] -format "%Y/%m/%d" -timezone "UTC"] -format "%Y/%m/%d" -timezone
"UTC"]'|tclsh8.6
Which, surprise, works.
So does specifying the timezone via the TZ='UTC' environment variable.
I guess there could be a libc behaviour change or such around timezones? I do
see
https://www.freebsd.org/releases/13.2R/relnotes/
"tzcode has been upgraded to version 2022g with improved timezone change detection and reliability fixes."
Greetings,
Andres Freund