Check the TZ env variable before defaulting to /etc/localtime.

John Ralls jralls at ceridwen.us
Mon Sep 26 11:59:31 EDT 2016


> On Sep 26, 2016, at 1:12 PM, Robert Fewell <14ubobit at gmail.com> wrote:
> 
> Hi,
> 
> There is a problem with this commit if the TZ variable does not exist,
> Gnucash fails to start with the following backtrace...
> 
> Starting program: /usr/bin/gnucash --g-fatal-warnings
> [Thread debugging using libthread_db enabled]
> Using host libthread_db library "/lib64/libthread_db.so.1".
> terminate called after throwing an instance of 'std::logic_error'
>  what():  basic_string::_S_construct null not valid
> 
> Program received signal SIGABRT, Aborted.
> 0x00007ffff59f82e7 in __GI_raise (sig=sig at entry=6) at
> ../sysdeps/unix/sysv/linux/raise.c:55
> 55    ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
> (gdb) bt
> #0  0x00007ffff59f82e7 in __GI_raise (sig=sig at entry=6) at
> ../sysdeps/unix/sysv/linux/raise.c:55
> #1  0x00007ffff59f976a in __GI_abort () at abort.c:89
> #2  0x00007ffff239f2c5 in __gnu_cxx::__verbose_terminate_handler() () from
> /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/libstdc++.so.6
> #3  0x00007ffff239d036 in ?? () from
> /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/libstdc++.so.6
> #4  0x00007ffff239d081 in std::terminate() () from
> /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/libstdc++.so.6
> #5  0x00007ffff239d287 in __cxa_throw () from
> /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/libstdc++.so.6
> #6  0x00007ffff23feb36 in std::__throw_logic_error(char const*) () from
> /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/libstdc++.so.6
> #7  0x00007ffff240c078 in char* std::string::_S_construct<char const*>(char
> const*, char const*, std::allocator<char> const&,
> std::forward_iterator_tag) () from
> /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/libstdc++.so.6
> #8  0x00007ffff240c502 in std::basic_string<char, std::char_traits<char>,
> std::allocator<char> >::basic_string(char const*, std::allocator<char>
> const&) () from /usr/lib/gcc/x86_64-pc-linux-gnu/4.9.3/libstdc++.so.6
> #9  0x00007ffff6c35e76 in IANAParser::find_tz_file (name=...) at
> gnc-timezone.cpp:356
> #10 IANAParser::IANAParser::IANAParser (name=..., this=0x7fffffffe4b0) at
> gnc-timezone.cpp:397
> #11 TimeZoneProvider::TimeZoneProvider (this=0x7ffff6e99750 <tzp>,
> tzname=...) at gnc-timezone.cpp:607
> #12 0x00007ffff6c28efb in TimeZoneProvider::TimeZoneProvider
> (this=0x7ffff6e99750 <tzp>) at gnc-timezone.hpp:51
> #13 __static_initialization_and_destruction_0 (__initialize_p=1,
> __priority=65535) at gnc-datetime.cpp:48
> #14 _GLOBAL__sub_I_gnc_datetime.cpp(void) () at gnc-datetime.cpp:339
> #15 0x00007ffff7dea36a in call_init (l=<optimized out>, argc=argc at entry=2,
> argv=argv at entry=0x7fffffffe858, env=env at entry=0x7fffffffe870)
>    at dl-init.c:72
> #16 0x00007ffff7dea47b in call_init (env=0x7fffffffe870,
> argv=0x7fffffffe858, argc=2, l=<optimized out>) at dl-init.c:30
> #17 _dl_init (main_map=0x7ffff7ffe148, argc=2, argv=0x7fffffffe858,
> env=0x7fffffffe870) at dl-init.c:120
> #18 0x00007ffff7ddbc7a in _dl_start_user () from /lib64/ld-linux-x86-64.so.2
> #19 0x0000000000000002 in ?? ()
> 

Bob,

Thanks for the report. Indeed, it doesn't even build for me if TZ isn't set, building the guile modules crash.

I've just pushed a fix for that, but it will still fail if TZ is set in a way that the routine doesn't expect (which is a timezone file name, e.g. "America/Los_Angeles"), so I've a bit more massaging to do there.

Regards,
John Ralls




More information about the gnucash-devel mailing list