SIGABRT when finalizing a poppler document
Poppler 22.06.0 on Arch Linux
Not reproducible, I don't think the problem comes from the calling code: https://gitlab.xfce.org/xfce/tumbler/-/blob/1e9e40da3da216f838a1c188edbdf02eae38334e/plugins/poppler-thumbnailer/poppler-thumbnailer.c#L337
Console output:
corrupted double-linked list
Backtrace:
Program terminated with signal SIGABRT, Aborted.
#0 0x00007f6a6988e36c in () at /usr/lib/libc.so.6
#1 0x00007f6a6983e838 in raise () at /usr/lib/libc.so.6
#2 0x00007f6a69828535 in abort () at /usr/lib/libc.so.6
#3 0x00007f6a6988245e in () at /usr/lib/libc.so.6
#4 0x00007f6a698980cc in () at /usr/lib/libc.so.6
#5 0x00007f6a69898bf4 in () at /usr/lib/libc.so.6
#6 0x00007f6a69899ca3 in () at /usr/lib/libc.so.6
#7 0x00007f6a6989c8f3 in free () at /usr/lib/libc.so.6
#8 0x00007f6a618a45da in operator delete(void*) (ptr=<optimized out>) at /usr/src/debug/gcc/libstdc++-v3/libsupc++/del_op.cc:49
#9 0x00007f6a618a45ea in operator delete(void*, unsigned long) (ptr=<optimized out>) at /usr/src/debug/gcc/libstdc++-v3/libsupc++/del_ops.cc:33
#10 0x00007f6a47bc13d7 in std::__new_allocator<PageLabelInfo::Interval>::deallocate(PageLabelInfo::Interval*, unsigned long) (__n=<optimized out>, __p=<optimized out>, this=<optimized out>) at /usr/include/c++/12.1.0/bits/new_allocator.h:158
#11 std::allocator_traits<std::allocator<PageLabelInfo::Interval> >::deallocate(std::allocator<PageLabelInfo::Interval>&, PageLabelInfo::Interval*, unsigned long) (__n=<optimized out>, __p=<optimized out>, __a=<optimized out>) at /usr/include/c++/12.1.0/bits/alloc_traits.h:496
#12 std::_Vector_base<PageLabelInfo::Interval, std::allocator<PageLabelInfo::Interval> >::_M_deallocate(PageLabelInfo::Interval*, unsigned long) (this=<optimized out>, __n=<optimized out>, __p=<optimized out>) at /usr/include/c++/12.1.0/bits/stl_vector.h:387
#13 std::_Vector_base<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Object>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Object> > >::_M_deallocate(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Object>*, unsigned long) (__n=<optimized out>, __p=<optimized out>, this=0x7f6a41fea098) at /usr/include/c++/12.1.0/bits/stl_vector.h:383
#14 std::_Vector_base<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Object>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Object> > >::~_Vector_base() (this=0x7f6a41fea098, this=<optimized out>) at /usr/include/c++/12.1.0/bits/stl_vector.h:366
#15 std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Object>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Object> > >::~vector() (this=0x7f6a41fea098, this=<optimized out>) at /usr/include/c++/12.1.0/bits/stl_vector.h:733
#16 Dict::~Dict() (this=0x7f6a41fea090, this=<optimized out>) at /usr/src/debug/poppler-22.06.0/poppler/Dict.h:47
#17 Object::free() (this=0x7f6a402fa0b8) at /usr/src/debug/poppler-22.06.0/poppler/Object.cc:132
#18 0x00007f6a47bfd248 in Object::~Object() (this=0x7f6a402fa0b8, this=<optimized out>) at /usr/src/debug/poppler-22.06.0/poppler/Object.h:171
#19 ObjectStream::~ObjectStream() (this=0x7f6a40049ee0, this=<optimized out>) at /usr/src/debug/poppler-22.06.0/poppler/XRef.cc:221
#20 0x00007f6a47bfd4b1 in std::default_delete<ObjectStream>::operator()(ObjectStream*) const (this=<optimized out>, __ptr=0x7f6a40049ee0) at /usr/include/c++/12.1.0/bits/unique_ptr.h:89
#21 std::default_delete<ObjectStream>::operator()(ObjectStream*) const (__ptr=0x7f6a40049ee0, this=<optimized out>) at /usr/include/c++/12.1.0/bits/unique_ptr.h:89
#22 std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> >::~unique_ptr() (this=0x7f6a40312d08, this=<optimized out>) at /usr/include/c++/12.1.0/bits/unique_ptr.h:396
#23 std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > >::~pair() (this=0x7f6a40312d00, this=<optimized out>) at /usr/include/c++/12.1.0/bits/stl_pair.h:185
#24 std::_Destroy<std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > > >(std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > >*) (__pointer=0x7f6a40312d00) at /usr/include/c++/12.1.0/bits/stl_construct.h:151
#25 std::_Destroy_aux<false>::__destroy<std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > >*>(std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > >*, std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > >*) (__last=0x7f6a40312d20, __first=0x7f6a40312d00) at /usr/include/c++/12.1.0/bits/stl_construct.h:163
#26 std::_Destroy<std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > >*>(std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > >*, std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > >*) (__last=0x7f6a40312d20, __first=<optimized out>) at /usr/include/c++/12.1.0/bits/stl_construct.h:196
#27 std::_Destroy<std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > >*, std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > > >(std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > >*, std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > >*, std::allocator<std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > > >&) (__last=0x7f6a40312d20, __first=<optimized out>) at /usr/include/c++/12.1.0/bits/alloc_traits.h:850
#28 std::vector<std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > >, std::allocator<std::pair<long long, std::unique_ptr<ObjectStream, std::default_delete<ObjectStream> > > > >::~vector() (this=0x7f6a4002f190, this=<optimized out>) at /usr/include/c++/12.1.0/bits/stl_vector.h:730
#29 PopplerCache<long long, ObjectStream>::~PopplerCache() (this=0x7f6a4002f190, this=<optimized out>) at /usr/src/debug/poppler-22.06.0/poppler/PopplerCache.h:23
#30 XRef::~XRef() (this=0x7f6a4002f130, this=<optimized out>) at /usr/src/debug/poppler-22.06.0/poppler/XRef.cc:357
#31 0x00007f6a47bd0da8 in PDFDoc::~PDFDoc() (this=0x7f6a402d6940, this=<optimized out>) at /usr/src/debug/poppler-22.06.0/poppler/PDFDoc.cc:301
#32 0x00007f6a481756c0 in poppler_document_finalize(GObject*) (object=0x7f6a40004540) at /usr/src/debug/poppler-22.06.0/glib/poppler-document.cc:677
#33 0x00007f6a69b939ef in g_object_unref () at /usr/lib/libgobject-2.0.so.0
#34 0x00007f6a481f1c73 in poppler_thumbnailer_create (thumbnailer=0x55f6b0739b40, cancellable=<optimized out>, info=0x55f6b0b42040) at poppler-thumbnailer.c:337
#35 0x000055f6aeb1e602 in tumbler_lifo_scheduler_thread (data=0x55f6b0758010, user_data=0x7f6a5c005f00) at tumbler-lifo-scheduler.c:501
#36 0x00007f6a69aa95e3 in () at /usr/lib/libglib-2.0.so.0
#37 0x00007f6a69aa6405 in () at /usr/lib/libglib-2.0.so.0
#38 0x00007f6a6988c54d in () at /usr/lib/libc.so.6
#39 0x00007f6a69911874 in clone () at /usr/lib/libc.so.6