Use of uninitialized variable in pdfimages
This bug is found in git commit: d70f77ee
To reproduce the bug,compile poppler with MemorySanitizer.
I add following linens after project(poppler) in CMakeLists.txt: set(CMAKE_C_FLAGS "-fsanitize=memory") set(CMAKE_CXX_FLAGS "-fsanitize=memory")
then: mkdir build cd build cmake -G"Unix Makefiles" -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
To trigger the bug: ./pdfimages test-input output-dir/
The output information from MemorySanitizer:
==8276==WARNING: MemorySanitizer: use-of-uninitialized-value #0 0x7f05d6c6e146 in void std::__cxx11::basic_string<char, std::char_traits, std::allocator >::_M_construct<char>(char, char*, std::forward_iterator_tag) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/basic_string.tcc:211:42
#1 0x7f05d6c6e146 in void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct_aux<char*>(char*, char*, std::__false_type) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/basic_string.h:236
#2 0x7f05d6c6e146 in void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*, char*) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/basic_string.h:255
#3 0x7f05d6c6e146 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/basic_string.h:440
#4 0x7f05d6c6e146 in std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap>::pair<UnicodeMap, true>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, UnicodeMap&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/stl_pair.h:326
#5 0x7f05d6c6da03 in void __gnu_cxx::new_allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap>, true> >::construct<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, UnicodeMap>(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap>*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, UnicodeMap&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/ext/new_allocator.h:136:23
#6 0x7f05d6c6da03 in void std::allocator_traits<std::allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap>, true> > >::construct<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, UnicodeMap>(std::allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap>, true> >&, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap>*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, UnicodeMap&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/alloc_traits.h:475
#7 0x7f05d6c6da03 in std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap>, true>* std::__detail::_Hashtable_alloc<std::allocator<std::__detail::_Hash_node<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap>, true> > >::_M_allocate_node<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, UnicodeMap>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, UnicodeMap&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/hashtable_policy.h:2082
#8 0x7f05d6c6d523 in std::pair<std::__detail::_Node_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap>, false, true>, bool> std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap> >, std::__detail::_Select1st, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::_M_emplace<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, UnicodeMap>(std::integral_constant<bool, true>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, UnicodeMap&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/hashtable.h:1660:30
#9 0x7f05d6c61781 in std::pair<std::__detail::_Node_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap>, false, true>, bool> std::_Hashtable<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap> >, std::__detail::_Select1st, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::emplace<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, UnicodeMap>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, UnicodeMap&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/hashtable.h:748:11
#10 0x7f05d6c61781 in std::pair<std::__detail::_Node_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap>, false, true>, bool> std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, UnicodeMap, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, UnicodeMap> > >::emplace<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, UnicodeMap>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, UnicodeMap&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/unordered_map.h:388
#11 0x7f05d6c61781 in GlobalParams::GlobalParams(char const*) /home/user/poppler/poppler-msan-no-debug/poppler/GlobalParams.cc:439
#12 0x499fff in main /home/user/poppler/poppler-msan-no-debug/utils/pdfimages.cc:146:22
#13 0x7f05d640e09a in __libc_start_main /build/glibc-B9XfQf/glibc-2.28/csu/../csu/libc-start.c:308:16
#14 0x41f689 in _start (/home/user/poppler/poppler-msan-no-debug/build/utils/pdfimages+0x41f689)
SUMMARY: MemorySanitizer: use-of-uninitialized-value /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/basic_string.tcc:211:42 in void std::__cxx11::basic_string<char, std::char_traits, std::allocator >::_M_construct<char>(char, char*, std::forward_iterator_tag) Exiting