Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ASAN errors with ref-counted strings #3

Open
cebtenzzre opened this issue Oct 5, 2018 · 0 comments
Open

ASAN errors with ref-counted strings #3

cebtenzzre opened this issue Oct 5, 2018 · 0 comments

Comments

@cebtenzzre
Copy link

UJSON_REF_COUNTED_STRING was enabled for libstdc++ on Linux in the (outdated) BitBucket version.
With that enabled, the changes made by commit e343be1 (found by git bisect) cause ASAN errors while parsing, and thus segfaults and UB without ASAN.

The test file is canada.json from miloyip/nativejson-benchmark.

The changes to the constructor result in this ASAN log:

==21496==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7f1890cf2b88 at pc 0x00000043ffb2 bp 0x7ffc6ca69240 sp 0x7ffc6ca689f0
READ of size 6 at 0x7f1890cf2b88 thread T0
    #0 0x43ffb1 in __interceptor_memcpy.part.45 /build/llvm-svn/src/llvm/projects/compiler-rt/lib/asan/../sanitizer_common/sanitizer_common_interceptors.inc:792:5
    #1 0x7f1894507198 in std::char_traits<char>::copy(char*, char const*, unsigned long) /build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/char_traits.h:350:49
    #2 0x7f1894507198 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_copy(char*, char const*, unsigned long) /build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.h:340:21
    #3 0x7f1894507198 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_S_copy_chars(char*, char*, char*) /build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.h:382:16
    #4 0x7f1894507198 in void std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_construct<char*>(char*, char*, std::forward_iterator_tag) /build/gcc/src/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/basic_string.tcc:225:6
    #5 0x55e101 in ujson::value::string_impl_t::clone(char*) const ./ujson/ujson/ujson.hpp:1089:34
    #6 0x578d9a in ujson::value::operator=(ujson::value const&) ujson/ujson/ujson.hpp:675:17
    #7 0x578cde in ujson::value::operator=(ujson::value&&) ujson/ujson/ujson.hpp:680:11
    #8 0x578c93 in std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>::operator=(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_pair.h:392:9
    #9 0x578b40 in void std::__uninitialized_construct_buf_dispatch<false>::__ucr<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, __gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > > >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, __gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_tempbuf.h:201:16
    #10 0x578419 in void std::__uninitialized_construct_buf<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, __gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > > >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, __gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_tempbuf.h:237:7
    #11 0x576769 in std::_Temporary_buffer<__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> >::_Temporary_buffer(__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, __gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_tempbuf.h:255:6
    #12 0x575d8f in void std::__stable_sort<__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, __gnu_cxx::__ops::_Iter_less_iter>(__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, __gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, __gnu_cxx::__ops::_Iter_less_iter) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_algo.h:5001:15
    #13 0x5757a8 in void std::stable_sort<__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > > >(__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, __gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_algo.h:5039:7
    #14 0x574e66 in ujson::value::object_impl_t::object_impl_t(std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >, ujson::validate_utf8) ujson/ujson/ujson.hpp:1132:5
    #15 0x56d564 in ujson::value::value(std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >&&, ujson::validate_utf8) ujson/ujson/ujson.hpp:508:20
    #16 0x563c14 in parse_value((anonymous namespace)::parser&) ujson/ujson/ujson.cpp:3021:16
    #17 0x563af3 in parse_value((anonymous namespace)::parser&) ujson/ujson/ujson.cpp:3016:26
    #18 0x5638fb in parse_value((anonymous namespace)::parser&) ujson/ujson/ujson.cpp:2999:26
    #19 0x563af3 in parse_value((anonymous namespace)::parser&) ujson/ujson/ujson.cpp:3016:26
    #20 0x563276 in ujson::parse(char const*, unsigned long) ujson/ujson/ujson.cpp:3037:19
    #21 0x55d5c3 in testFile(char const*) main.cpp:26:9
    #22 0x55d80a in main main.cpp:41:12
    #23 0x7f189406b222 in __libc_start_main (/usr/lib/libc.so.6+0x24222)
    #24 0x41f3fd in _start (bin/test_ujson+0x41f3fd)

Address 0x7f1890cf2b88 is located in stack of thread T0 at offset 392 in frame
    #0 0x56354f in parse_value((anonymous namespace)::parser&) ujson/ujson/ujson.cpp:2973

  This frame has 6 object(s):
    [32, 64) 'string' (line 2989)
    [96, 120) 'array' (line 2994)
    [160, 200) 'value' (line 2999)
    [240, 264) 'object' (line 3008)
    [304, 336) 'key' (line 3014)
    [368, 408) 'value48' (line 3016) <== Memory access at offset 392 is inside this variable
HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
      (longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-use-after-scope /build/llvm-svn/src/llvm/projects/compiler-rt/lib/asan/../sanitizer_common/sanitizer_common_interceptors.inc:792:5 in __interceptor_memcpy.part.45
Shadow bytes around the buggy address:
  0x0fe392196520: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x0fe392196530: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x0fe392196540: f1 f1 f1 f1 f8 f8 f8 f8 f2 f2 f2 f2 f8 f8 f8 f2
  0x0fe392196550: f2 f2 f2 f2 f8 f8 f8 f8 f8 f2 f2 f2 f2 f2 00 00
  0x0fe392196560: 00 f2 f2 f2 f2 f2 f8 f8 f8 f8 f2 f2 f2 f2 f8 f8
=>0x0fe392196570: f8[f8]f8 f3 f3 f3 f3 f3 00 00 00 00 00 00 00 00
  0x0fe392196580: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x0fe392196590: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x0fe3921965a0: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x0fe3921965b0: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x0fe3921965c0: f1 f1 f1 f1 00 f2 f2 f2 00 f2 f2 f2 00 00 00 f2
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==21496==ABORTING

And the changes to the assignment operator result in this ASAN log:

==22283==ERROR: AddressSanitizer: attempting free on address which was not malloc()-ed: 0x60d000000260 in thread T0
    #0 0x5309e1 in operator delete(void*) /build/llvm-svn/src/llvm/projects/compiler-rt/lib/asan/asan_new_delete.cc:167:3
    #1 0x55dfcc in ujson::value::string_impl_t::~string_impl_t() ./ujson/ujson/ujson.hpp:274:12
    #2 0x55e56e in ujson::value::destroy() ./ujson/ujson/ujson.hpp:719:49
    #3 0x55dbc4 in ujson::value::~value() ./ujson/ujson/ujson.hpp:688:26
    #4 0x574972 in std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>::~pair() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_pair.h:198:12
    #5 0x574944 in void std::_Destroy<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:98:19
    #6 0x57490e in void std::_Destroy_aux<false>::__destroy<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*>(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:108:6
    #7 0x5747ec in void std::_Destroy<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*>(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:136:7
    #8 0x573aa0 in void std::_Destroy<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> >&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:206:7
    #9 0x56d6df in std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >::~vector() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_vector.h:567:2
    #10 0x586ea8 in void __gnu_cxx::new_allocator<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >::destroy<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >(std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/ext/new_allocator.h:140:28
    #11 0x586e47 in void std::allocator_traits<std::allocator<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > > >::destroy<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >(std::allocator<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >&, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/alloc_traits.h:487:8
    #12 0x586aeb in std::_Sp_counted_ptr_inplace<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >, std::allocator<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, (__gnu_cxx::_Lock_policy)2>::_M_dispose() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:552:2
    #13 0x55eac9 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:155:6
    #14 0x55ea28 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:706:11
    #15 0x55ffc8 in std::__shared_ptr<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:1145:31
    #16 0x55ffa4 in std::shared_ptr<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >::~shared_ptr() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr.h:103:11
    #17 0x55e3dc in ujson::value::object_impl_t::~object_impl_t() ./ujson/ujson/ujson.hpp:292:12
    #18 0x55e56e in ujson::value::destroy() ./ujson/ujson/ujson.hpp:719:49
    #19 0x55dbc4 in ujson::value::~value() ./ujson/ujson/ujson.hpp:688:26
    #20 0x574972 in std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>::~pair() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_pair.h:198:12
    #21 0x574944 in void std::_Destroy<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:98:19
    #22 0x57490e in void std::_Destroy_aux<false>::__destroy<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*>(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:108:6
    #23 0x5747ec in void std::_Destroy<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*>(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:136:7
    #24 0x573aa0 in void std::_Destroy<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> >&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:206:7
    #25 0x56d6df in std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >::~vector() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_vector.h:567:2
    #26 0x586ea8 in void __gnu_cxx::new_allocator<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >::destroy<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >(std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/ext/new_allocator.h:140:28
    #27 0x586e47 in void std::allocator_traits<std::allocator<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > > >::destroy<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >(std::allocator<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >&, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/alloc_traits.h:487:8
    #28 0x586aeb in std::_Sp_counted_ptr_inplace<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >, std::allocator<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, (__gnu_cxx::_Lock_policy)2>::_M_dispose() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:552:2
    #29 0x55eac9 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:155:6
    #30 0x55ea28 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:706:11
    #31 0x55ffc8 in std::__shared_ptr<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:1145:31
    #32 0x55ffa4 in std::shared_ptr<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >::~shared_ptr() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr.h:103:11
    #33 0x55e3dc in ujson::value::object_impl_t::~object_impl_t() ./ujson/ujson/ujson.hpp:292:12
    #34 0x55e56e in ujson::value::destroy() ./ujson/ujson/ujson.hpp:719:49
    #35 0x55dbc4 in ujson::value::~value() ./ujson/ujson/ujson.hpp:688:26
    #36 0x56ffa4 in void std::_Destroy<ujson::value>(ujson::value*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:98:19
    #37 0x56ff6e in void std::_Destroy_aux<false>::__destroy<ujson::value*>(ujson::value*, ujson::value*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:108:6
    #38 0x56feac in void std::_Destroy<ujson::value*>(ujson::value*, ujson::value*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:136:7
    #39 0x56f0c0 in void std::_Destroy<ujson::value*, ujson::value>(ujson::value*, ujson::value*, std::allocator<ujson::value>&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:206:7
    #40 0x56d05f in std::vector<ujson::value, std::allocator<ujson::value> >::~vector() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_vector.h:567:2
    #41 0x571e58 in void __gnu_cxx::new_allocator<std::vector<ujson::value, std::allocator<ujson::value> > >::destroy<std::vector<ujson::value, std::allocator<ujson::value> > >(std::vector<ujson::value, std::allocator<ujson::value> >*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/ext/new_allocator.h:140:28
    #42 0x571df7 in void std::allocator_traits<std::allocator<std::vector<ujson::value, std::allocator<ujson::value> > > >::destroy<std::vector<ujson::value, std::allocator<ujson::value> > >(std::allocator<std::vector<ujson::value, std::allocator<ujson::value> > >&, std::vector<ujson::value, std::allocator<ujson::value> >*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/alloc_traits.h:487:8
    #43 0x5719eb in std::_Sp_counted_ptr_inplace<std::vector<ujson::value, std::allocator<ujson::value> >, std::allocator<std::vector<ujson::value, std::allocator<ujson::value> > >, (__gnu_cxx::_Lock_policy)2>::_M_dispose() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:552:2
    #44 0x55eac9 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:155:6
    #45 0x55ea28 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:706:11
    #46 0x55e9b8 in std::__shared_ptr<std::vector<ujson::value, std::allocator<ujson::value> >, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:1145:31
    #47 0x55e994 in std::shared_ptr<std::vector<ujson::value, std::allocator<ujson::value> > >::~shared_ptr() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr.h:103:11
    #48 0x55e25c in ujson::value::array_impl_t::~array_impl_t() ./ujson/ujson/ujson.hpp:284:12
    #49 0x55e56e in ujson::value::destroy() ./ujson/ujson/ujson.hpp:719:49
    #50 0x55dbc4 in ujson::value::~value() ./ujson/ujson/ujson.hpp:688:26
    #51 0x574972 in std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>::~pair() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_pair.h:198:12
    #52 0x574944 in void std::_Destroy<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:98:19
    #53 0x57490e in void std::_Destroy_aux<false>::__destroy<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*>(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:108:6
    #54 0x5747ec in void std::_Destroy<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*>(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:136:7
    #55 0x573aa0 in void std::_Destroy<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> >&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_construct.h:206:7
    #56 0x56d6df in std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >::~vector() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_vector.h:567:2
    #57 0x586ea8 in void __gnu_cxx::new_allocator<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >::destroy<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >(std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/ext/new_allocator.h:140:28
    #58 0x586e47 in void std::allocator_traits<std::allocator<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > > >::destroy<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >(std::allocator<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >&, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/alloc_traits.h:487:8
    #59 0x586aeb in std::_Sp_counted_ptr_inplace<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >, std::allocator<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, (__gnu_cxx::_Lock_policy)2>::_M_dispose() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:552:2
    #60 0x55eac9 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:155:6
    #61 0x55ea28 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:706:11
    #62 0x55ffc8 in std::__shared_ptr<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr_base.h:1145:31
    #63 0x55ffa4 in std::shared_ptr<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >::~shared_ptr() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/shared_ptr.h:103:11
    #64 0x55e3dc in ujson::value::object_impl_t::~object_impl_t() ./ujson/ujson/ujson.hpp:292:12
    #65 0x55e56e in ujson::value::destroy() ./ujson/ujson/ujson.hpp:719:49
    #66 0x55dbc4 in ujson::value::~value() ./ujson/ujson/ujson.hpp:688:26
    #67 0x55d5d1 in testFile(char const*) main.cpp:26:9
    #68 0x55d80a in main main.cpp:41:12
    #69 0x7f60a0011222 in __libc_start_main (/usr/lib/libc.so.6+0x24222)
    #70 0x41f3fd in _start (bin/test_ujson+0x41f3fd)

0x60d000000260 is located 128 bytes inside of 144-byte region [0x60d0000001e0,0x60d000000270)
freed by thread T0 here:
    #0 0x530d41 in operator delete(void*, std::nothrow_t const&) /build/llvm-svn/src/llvm/projects/compiler-rt/lib/asan/asan_new_delete.cc:173:3
    #1 0x57859e in void std::return_temporary_buffer<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> >(std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_tempbuf.h:113:7
    #2 0x577c19 in std::_Temporary_buffer<__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> >::~_Temporary_buffer() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_tempbuf.h:168:2
    #3 0x576089 in void std::__stable_sort<__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, __gnu_cxx::__ops::_Iter_less_iter>(__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, __gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, __gnu_cxx::__ops::_Iter_less_iter) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_algo.h:5008:5
    #4 0x5758a8 in void std::stable_sort<__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > > >(__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, __gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_algo.h:5039:7
    #5 0x574f66 in ujson::value::object_impl_t::object_impl_t(std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >, ujson::validate_utf8) ujson/ujson/ujson.hpp:1132:5
    #6 0x56d564 in ujson::value::value(std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >&&, ujson::validate_utf8) ujson/ujson/ujson.hpp:508:20
    #7 0x563c14 in parse_value((anonymous namespace)::parser&) ujson/ujson/ujson.cpp:3021:16
    #8 0x563af3 in parse_value((anonymous namespace)::parser&) ujson/ujson/ujson.cpp:3016:26
    #9 0x5638fb in parse_value((anonymous namespace)::parser&) ujson/ujson/ujson.cpp:2999:26
    #10 0x563af3 in parse_value((anonymous namespace)::parser&) ujson/ujson/ujson.cpp:3016:26
    #11 0x563276 in ujson::parse(char const*, unsigned long) ujson/ujson/ujson.cpp:3037:19
    #12 0x55d5c3 in testFile(char const*) main.cpp:26:9
    #13 0x55d80a in main main.cpp:41:12
    #14 0x7f60a0011222 in __libc_start_main (/usr/lib/libc.so.6+0x24222)

previously allocated by thread T0 here:
    #0 0x52ff99 in operator new(unsigned long, std::nothrow_t const&) /build/llvm-svn/src/llvm/projects/compiler-rt/lib/asan/asan_new_delete.cc:112:3
    #1 0x57810d in std::pair<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, long> std::get_temporary_buffer<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> >(long) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_tempbuf.h:94:35
    #2 0x57658c in std::_Temporary_buffer<__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> >::_Temporary_buffer(__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, __gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_tempbuf.h:250:38
    #3 0x575e8f in void std::__stable_sort<__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, __gnu_cxx::__ops::_Iter_less_iter>(__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, __gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, __gnu_cxx::__ops::_Iter_less_iter) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_algo.h:5001:15
    #4 0x5758a8 in void std::stable_sort<__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > > >(__gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >, __gnu_cxx::__normal_iterator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>*, std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > > >) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/8.2.1/../../../../include/c++/8.2.1/bits/stl_algo.h:5039:7
    #5 0x574f66 in ujson::value::object_impl_t::object_impl_t(std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >, ujson::validate_utf8) ujson/ujson/ujson.hpp:1132:5
    #6 0x56d564 in ujson::value::value(std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, ujson::value> > >&&, ujson::validate_utf8) ujson/ujson/ujson.hpp:508:20
    #7 0x563c14 in parse_value((anonymous namespace)::parser&) ujson/ujson/ujson.cpp:3021:16
    #8 0x563af3 in parse_value((anonymous namespace)::parser&) ujson/ujson/ujson.cpp:3016:26
    #9 0x5638fb in parse_value((anonymous namespace)::parser&) ujson/ujson/ujson.cpp:2999:26
    #10 0x563af3 in parse_value((anonymous namespace)::parser&) ujson/ujson/ujson.cpp:3016:26
    #11 0x563276 in ujson::parse(char const*, unsigned long) ujson/ujson/ujson.cpp:3037:19
    #12 0x55d5c3 in testFile(char const*) main.cpp:26:9
    #13 0x55d80a in main main.cpp:41:12
    #14 0x7f60a0011222 in __libc_start_main (/usr/lib/libc.so.6+0x24222)

SUMMARY: AddressSanitizer: bad-free /build/llvm-svn/src/llvm/projects/compiler-rt/lib/asan/asan_new_delete.cc:167:3 in operator delete(void*)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant