Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 16 May 2019 11:44:25 +0200
From:      Joan Picanyol i Puig <pica@biaix.org>
To:        Jan Beich <jbeich@FreeBSD.org>
Cc:        office@freebsd.org, Greg Veldman <freebsd@gregv.net>, Li-Wen Hsu <lwhsu@freebsd.org>
Subject:   Re: reproducible crash after libreoffice update
Message-ID:  <20190516094425.GA43894@grummit.biaix.org>
In-Reply-To: <sgtg-apuq-wny@FreeBSD.org>
References:  <20190514115233.GA9791@grummit.biaix.org> <CAKBkRUzCx=h20Jv%2BkocguNByhzPyPA6L8phvrmJgCUvfoqbntQ@mail.gmail.com> <20190514150206.GB11862@grummit.biaix.org> <sgth-m3hq-wny@FreeBSD.org> <20190514175041.GA14247@grummit.biaix.org> <r290-kem8-wny@FreeBSD.org> <20190515075117.GA23790@grummit.biaix.org> <sgtg-apuq-wny@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
* Jan Beich <jbeich@FreeBSD.org> [20190515 13:49]:
> Joan Picanyol i Puig <pica@biaix.org> writes:
> 
> > * Jan Beich <jbeich@FreeBSD.org> [20190514 21:30]:
> >> Joan Picanyol i Puig <pica@biaix.org> writes:
> > [...]
> >
> > Find attached a problematic spreadsheet. I get the gdb trace with
> >
> > libreoffice --backtrace ~/_wd/assets_rename.ods
> >
> > as soon as I try to enter some text in the selected cell.
> 
> Doesn't crash here. Which cell did you select? I've tried randomly
> editing both empty and non-empty cells.
> 
> > However, I've found that setting $LANG to en_US.UTF-8 instead of
> > ca_US.UTF-8 avoids the issue.
> 
> ca_US.UTF-8 doesn't exist unlike ca_ES.UTF-8 or en_CA.UTF-8.
> I've tried C (default), ca_ES.UTF-8, en_US.UTF-8 locales.

Sorry, meant ca_ES.UTF-8. Might be specific to it, since I can't reproducte
with i.e.: fr_FR.UTF-8.
 
> Other than "pkg upgrade -f" or bisecting environment? If you need help
> with debugging pilot errors questions@ maillist maybe a better place.
> 
> I'm interested in whether there's an ICU bug, not getting your system
> back to a working state.

Fair enough. Given that I have a workaround (change LANG), I've installed icu
from ports with debugging symbols to further explore.

Backtrace:

    Thread 1 received signal SIGSEGV, Segmentation fault.
    icu::CollationSettings::isNumeric (this=0x0) at ./collationsettings.h:211
    211             return (options & NUMERIC) != 0;
    #0  0x0000000800b3068c in icu::CollationSettings::isNumeric() const (this=0x0) at ./collationsettings.h:211
    #1  0x0000000800b5a241 in icu::RuleBasedCollator::doCompare(char16_t const*, int, char16_t const*, int, UErrorCode&) const (this=0x81710ef40, left=0x7fffffffcda2 u"pre.conf\xffff", leftLength=8, right=0x7fffffffcd62 u"parent.conf", rightLength=11, errorCode=@0x7fffffffcd34: U_ZERO_ERROR) at rulebasedcollator.cpp:1003
    #2  0x0000000800b5a02b in icu::RuleBasedCollator::compare(icu::UnicodeString const&, icu::UnicodeString const&, UErrorCode&) const (this=0x81710ef40, left=..., right=..., errorCode=@0x7fffffffcd34: U_ZERO_ERROR) at rulebasedcollator.cpp:703
    #3  0x0000000800b31b39 in icu::Collator::compare(icu::UnicodeString const&, icu::UnicodeString const&) const (this=0x81710ef40, source=..., target=...) at coll.cpp:495
    #4  0x000000080cebd0d2 in  () at /usr/local/lib/libreoffice/program/../program/libi18npoollo.so
    #5  0x0000000803ae5f96 in CollatorWrapper::compareString(rtl::OUString const&, rtl::OUString const&) const () at /usr/local/lib/libreoffice/program/libutllo.so


It does seem that somehow the collator's settings get lost, some more details:


(gdb) up 1
#1  0x0000000800b5a241 in icu::RuleBasedCollator::doCompare (this=0x8173c41c0, left=0x7fffffffce02 u"pre.conf\xffff", leftLength=8, right=0x7fffffffcdc2 u"parent.conf", 
    rightLength=11, errorCode=@0x7fffffffcd94: U_ZERO_ERROR) at rulebasedcollator.cpp:1003
1003        UBool numeric = settings->isNumeric();

(gdb) print *settings
Cannot access memory at address 0x0

(gdb) up 1
#2  0x0000000800b5a02b in icu::RuleBasedCollator::compare (this=0x81734e7c0, left=..., right=..., errorCode=@0x7fffffffcd64: U_ZERO_ERROR) at rulebasedcollator.cpp:703
703     return doCompare(left.getBuffer(), left.length(),
(gdb) print this
$1 = (const icu::RuleBasedCollator *) 0x81734e7c0
(gdb) print *this
$2 = {<icu::Collator> = {<icu::UObject> = {<icu::UMemory> = {<No data fields>}, _vptr$UObject = 0x800ce7930 <vtable for icu::RuleBasedCollator+16>}, <No data fields>}, data = 0x0, 
  settings = 0x0, tailoring = 0x0, cacheEntry = 0x0, validLocale = {<icu::UObject> = {<icu::UMemory> = {<No data fields>}, _vptr$UObject = 0x800f6cb40 <vtable for icu::Locale+16>}, 
    language = "\000\000\000\000\000\000\000\000\340y\235\017", script = "\000\000\000\000", <incomplete sequence \322>, country = "\000\f\b", variantBegin = 0, 
    fullName = 0x81734e818 "", 
    fullNameBuffer = '\000' <repeats 88 times>, "\377\377\377\377\377\377\377", '\000' <repeats 25 times>, "B\342\237\001\b", '\000' <repeats 19 times>, "\200\242\322\f\b\000\000\000\000\000\000\000", baseName = 0x81734e818 "", fIsBogus = 0 '\000'}, explicitlySetAttributes = 0, actualLocaleIsSameAsValid = 0 '\000'}

(gdb) up 1
#3  0x0000000800b31b39 in icu::Collator::compare (this=0x8173c41c0, source=..., target=...) at coll.cpp:495
495     return (EComparisonResult)compare(source, target, ec);
(gdb) print *this
$1 = {<icu::UObject> = {<icu::UMemory> = {<No data fields>}, _vptr$UObject = 0x800ce7930 <vtable for icu::RuleBasedCollator+16>}, <No data fields>}
(gdb) 


Don't know how to further nail this down, open to handholding if you are interested.

keep up the good work
--
joan



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20190516094425.GA43894>