Crash while running a headless libreoffice spreadsheet conversion
When Libreoffice is used in the headless mode to convert office documents (texts, spreadsheets, presentations, etc.) inside an Alpine-based Docker container via UNO interface, it crashes with a SIGSEGV while converting some documents (see the attached files).
Steps to reproduce:
- Run a docker container:
docker run -it —rm alpine:3.8
- Install libreoffice, python and unoconv in the container:
apk add —update wget libreoffice python3
pip3 install unoconv
- Get the test documents and try to convert them:
unoconv f html test.ods \# has formulas, libreoffice crash
SIGSEGV
unoconv -f html test2.ods \# no formulas, no crash
A typical stack trace from debug build shows more details:
Thread 7 "cppu_threadpool" received signal SIGSEGV, Segmentation fault.
[Switching to LWP 113]
0x00007fdb8b425d70 in formula::FormulaCompiler::GetToken() ()
from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
(gdb) bt
#0 0x00007fdb8b425d70 in formula::FormulaCompiler::GetToken() ()
from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#1 0x00007fdb8b4277b4 in formula::FormulaCompiler::NextToken() ()
from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#2 0x00007fdb8b426540 in formula::FormulaCompiler::Factor() ()
from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#3 0x00007fdb8b427fef in formula::FormulaCompiler::RangeLine() ()
from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#4 0x00007fdb8b428214 in formula::FormulaCompiler::IntersectionLine() ()
from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#5 0x00007fdb8b4284bd in formula::FormulaCompiler::UnionLine() ()
from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#6 0x00007fdb8b4285f2 in formula::FormulaCompiler::UnaryLine() ()
from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#7 0x00007fdb8b4286af in formula::FormulaCompiler::PowLine() ()
from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#8 0x00007fdb8b4287ed in formula::FormulaCompiler::MulDivLine() ()
from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#9 0x00007fdb8b4288dd in formula::FormulaCompiler::AddSubLine() ()
from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#10 0x00007fdb8b4289cd in formula::FormulaCompiler::ConcatLine() ()
from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#11 0x00007fdb8b428a9d in formula::FormulaCompiler::CompareLine() ()
from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#12 0x00007fdb8b427ed8 in formula::FormulaCompiler::Expression() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#13 0x00007fdb8b426cb7 in formula::FormulaCompiler::Factor() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#14 0x00007fdb8b427fef in formula::FormulaCompiler::RangeLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#15 0x00007fdb8b428214 in formula::FormulaCompiler::IntersectionLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#16 0x00007fdb8b4284bd in formula::FormulaCompiler::UnionLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#17 0x00007fdb8b4285f2 in formula::FormulaCompiler::UnaryLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#18 0x00007fdb8b4286af in formula::FormulaCompiler::PowLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#19 0x00007fdb8b4287ed in formula::FormulaCompiler::MulDivLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#20 0x00007fdb8b4288dd in formula::FormulaCompiler::AddSubLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#21 0x00007fdb8b4289cd in formula::FormulaCompiler::ConcatLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#22 0x00007fdb8b428a9d in formula::FormulaCompiler::CompareLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#23 0x00007fdb8b427ed8 in formula::FormulaCompiler::Expression() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#24 0x00007fdb8b42741b in formula::FormulaCompiler::Factor() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#25 0x00007fdb8b427fef in formula::FormulaCompiler::RangeLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#26 0x00007fdb8b428214 in formula::FormulaCompiler::IntersectionLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#27 0x00007fdb8b4284bd in formula::FormulaCompiler::UnionLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#28 0x00007fdb8b4285f2 in formula::FormulaCompiler::UnaryLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#29 0x00007fdb8b4286af in formula::FormulaCompiler::PowLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#30 0x00007fdb8b4287ed in formula::FormulaCompiler::MulDivLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#31 0x00007fdb8b4288dd in formula::FormulaCompiler::AddSubLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#32 0x00007fdb8b4289cd in formula::FormulaCompiler::ConcatLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#33 0x00007fdb8b428a9d in formula::FormulaCompiler::CompareLine() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#34 0x00007fdb8b427ed8 in formula::FormulaCompiler::Expression() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#35 0x00007fdb8b428c62 in formula::FormulaCompiler::CompileTokenArray() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libforlo.so
#36 0x00007fdb8bcab136 in ScFormulaCell::CompileXML(sc::CompileFormulaContext&, ScProgress&) () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libsclo.so
#37 0x00007fdb8bb788d4 in ScColumn::CompileXML(sc::CompileFormulaContext&, ScProgress&) () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libsclo.so
#38 0x00007fdb8bcf0453 in ScTable::CompileXML(sc::CompileFormulaContext&, ScProgress&) () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libsclo.so
#39 0x00007fdb8bc1ee04 in ScDocument::CompileXML() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libsclo.so
#40 0x00007fdb8bfabdb8 in ScXMLImport::endDocument() () from /opt/libreoffice6.1/lib/libreoffice/program/../program/libsclo.so
(from redmine: issue id 9488, created on 2018-09-27, closed on 2018-12-20)
- Changesets:
- Revision 18821e8e by Natanael Copa on 2018-09-28T16:55:07Z:
community/libreoffice: upgrade to 6.1.0.3
and fix tread stack size issue
ref #9488
- Revision 96e1e57f by Natanael Copa on 2018-10-01T12:00:55Z:
community/libreoffice: fix tread stack size issue
fixes #9488