Skip to content

fix debian packaging - #2

Merged
peak3d merged 1 commit into
xbmc:masterfrom
wsnipex:master
Nov 28, 2016
Merged

peak3d merged 1 commit into
xbmc:masterfrom
wsnipex:master

Conversation

@wsnipex

@wsnipex wsnipex commented Nov 28, 2016

Copy link
Copy Markdown
Member

see title

@peak3d
peak3d merged commit 7f57246 into xbmc:master Nov 28, 2016
Maven85 pushed a commit to Maven85/inputstream.adaptive that referenced this pull request Aug 20, 2020
Maven85 pushed a commit to Maven85/inputstream.adaptive that referenced this pull request Aug 27, 2020
Maven85 pushed a commit to Maven85/inputstream.adaptive that referenced this pull request Aug 28, 2020
Maven85 pushed a commit to Maven85/inputstream.adaptive that referenced this pull request Sep 1, 2020
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Feb 7, 2023
Sometimes I'm encountering a crash when starting a live dash stream with a following backtrace:

#0  0x910819d4 in adaptive::AdaptiveStream::start_stream() (this=<optimized out>) at /usr/src/debug/kodi-addon-inputstream-adaptive/inputstream.adaptive-20.3.2-Nexus/src/common/AdaptiveStream.cpp:606
#1  0x91069d0c in CInputStreamAdaptive::OpenStream(int) (this=0xaf51fa68, streamid=1006) at /usr/src/debug/kodi-addon-inputstream-adaptive/inputstream.adaptive-20.3.2-Nexus/src/main.cpp:309
xbmc#2  0x00e2f5d4 in CDVDDemuxClient::OpenStream(int) ()
xbmc#3  0x00e97ad4 in CVideoPlayer::OpenStream(CCurrentStream&, long long, int, int, bool) ()
xbmc#4  0x00e9e3c8 in CVideoPlayer::OpenDefaultStreams(bool) ()
xbmc#5  0x00ea3b18 in CVideoPlayer::Prepare() ()
xbmc#6  0x00ea5dc0 in CVideoPlayer::Process() ()
xbmc#7  0x011dcc6c in CThread::Action() ()

AdaptiveStream.cpp:606 points to a following line:
```
  currentPTSOffset_ = (next_segment->startPTS_ * current_rep_->timescale_ext_) /
    current_rep_->timescale_int_;
```

After taking a look on the assembly listing:
(gdb) disas /m _ZN8adaptive14AdaptiveStream12start_streamEv
...
   0x910819c8 <+1592>:  ldrne   r3, [sp, xbmc#28]
   0x910819d0 <+1600>:  ldr     r4, [r3, xbmc#324]  ; 0x144
=> 0x910819d4 <+1604>:  ldr     r0, [r8, xbmc#40]   ; 0x28
   0x910819d8 <+1608>:  ldr     r12, [r8, xbmc#44]  ; 0x2c
   0x910819dc <+1612>:  mov     r8, #0
   0x910819e4 <+1620>:  mov     r3, r8
   0x910819e8 <+1624>:  umull   r0, r1, r0, r4
   0x910819ec <+1628>:  mov     r2, r9
   0x910819f0 <+1632>:  mla     r1, r4, r12, r1
   0x910819f4 <+1636>:  bl      0x9105a6b4 <__aeabi_uldivmod@plt>
...

it appears that $r3 contains a valid representation:
(gdb) p *((AdaptiveTree::Representation*) $r3)
$1 = {url_ = "http://lb2-e2-18.pluscdn.pl/ch/1456330/123/dash/294f032c/1080p/p_3f26ad64-5258-452e-9bdc-209c361003e9_1667995241000/init.mp4", id = "1080p", codecs_ = "avc1.640028",
  codec_private_data_ = "", source_url_ = "", base_url_ = "http://lb2-e2-18.pluscdn.pl/ch/1456330/123/dash/294f032c/", bandwidth_ = 5000000, samplingRate_ = 0, width_ = 1920, height_ = 1080,
  fpsRate_ = 25, fpsScale_ = 1, aspect_ = 0, assured_buffer_duration_ = 20, max_buffer_duration_ = 40, static BYTERANGE = 0, static INDEXRANGEEXACT = 1, static TEMPLATE = 2, static TIMELINE = 4,
  static INITIALIZATION = 8, static SEGMENTBASE = 16, static SUBTITLESTREAM = 32, static INCLUDEDSTREAM = 64, static URLSEGMENTS = 128, static ENABLED = 256, static WAITFORSEGMENT = 512,
  static INITIALIZATION_PREFIXED = 1024, static DOWNLOADED = 2048, static INITIALIZED = 4096, flags_ = 14, hdcpVersion_ = 0, indexRangeMin_ = 0, indexRangeMax_ = 0, channelCount_ = 0 '\000',
  nalLengthSize_ = 0 '\000', pssh_set_ = 2, expired_segments_ = 0, containerType_ = adaptive::AdaptiveTree::CONTAINERTYPE_MP4, segtpl_ = {
    initialization = "http://lb2-e2-18.pluscdn.pl/ch/1456330/123/dash/294f032c/1080p/p_3f26ad64-5258-452e-9bdc-209c361003e9_1667995241000/init.mp4",
    media = "http://lb2-e2-18.pluscdn.pl/ch/1456330/123/dash/294f032c/$RepresentationID$/p_3f26ad64-5258-452e-9bdc-209c361003e9_1667995241000/t$Time$.mp4",
    media_url = "http://lb2-e2-18.pluscdn.pl/ch/1456330/123/dash/294f032c/1080p/p_3f26ad64-5258-452e-9bdc-209c361003e9_1667995241000/t$Time$.mp4", timescale = 90000, duration = 230395},
  startNumber_ = 4, nextPts_ = 20170141682400, ptsOffset_ = 0, duration_ = 972288000, timescale_ = 90000, timescale_ext_ = 100, timescale_int_ = 9, initialization_ = {range_begin_ = 0,
    range_end_ = 18446744073709551615, url = "", startPTS_ = 0, m_duration = 0, pssh_set_ = 0}, segments_ = {basePos = 0, data = std::vector of length 4220, capacity 4220 = {{
        range_begin_ = 20169170085600, range_end_ = 1, url = "", startPTS_ = 20169170085600, m_duration = 0, pssh_set_ = 0}, {range_begin_ = 20169170316000, range_end_ = 2, url = "",
        startPTS_ = 20169170316000, m_duration = 0, pssh_set_ = 0}, {range_begin_ = 20169170546400, range_end_ = 3, url = "", startPTS_ = 20169170546400, m_duration = 0, pssh_set_ = 0}, {
        range_begin_ = 20169170776800, range_end_ = 4, url = "", startPTS_ = 20169170776800, m_duration = 0, pssh_set_ = 0}, {range_begin_ = 20169171007200, range_end_ = 5, url = "",
        startPTS_ = 20169171007200, m_duration = 0, pssh_set_ = 0}, {range_begin_ = 20169171237600, range_end_ = 6, url = "", startPTS_ = 20169171237600, m_duration = 0, pssh_set_ = 0}, {
        range_begin_ = 20169171468000, range_end_ = 7, url = "", startPTS_ = 20169171468000, m_duration = 0, pssh_set_ = 0}, {range_begin_ = 20169171698400, range_end_ = 8, url = "",
...

$r8 should point to a valid next segment but doesn't:
(gdb) p *((adaptive::AdaptiveTree::Segment*) $r8)
Cannot access memory at address 0xa1a7dd88

After manually calculating next segment position in gdb it should point to:
(gdb) p ((AdaptiveTree::Representation*) $r3)->current_segment_ - &((AdaptiveTree::Representation*) $r3)->segments_.data[0] + 1
$2 = 4211
(gdb) p &((AdaptiveTree::Representation*) $r3)->segments_.data[4211]
$3 = (adaptive::AdaptiveTree::Segment *) 0x97ae9f10
(gdb) p ((AdaptiveTree::Representation*) $r3)->segments_.data[4211]
$4 = {range_begin_ = 20170140300000, range_end_ = 4212, url = "", startPTS_ = 20170140300000, m_duration = 0, pssh_set_ = 0}

My conclusion is that we are properly calculating next segment position
but for some reason the memory got deallocated. My assumption is
that updater thread has managed to parse the dash xml and update the segments.
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Feb 8, 2023
* Add sleep inside AdaptiveTree.cpp to trigger the issue

From Kodi logs:

2023-02-08 18:02:11.679 T:22020    info <general>: Creating InputStream
2023-02-08 18:02:11.691 T:22020    info <general>: AddOnLog: inputstream.adaptive: [Repr. chooser] Resolution set: 4096x2304, max allowed: 8152x4436, Adjust refresh rate: 0
2023-02-08 18:02:11.989 T:22020    info <general>: AddOnLog: inputstream.adaptive: Successfully parsed manifest file (Periods: 1, Streams in first period: 2, Type: live)
2023-02-08 18:02:12.989 T:22024   error <general>: AddOnLog: inputstream.adaptive: SegmentUpdateWorker: DEBUG before RefreshLiveSegments()
2023-02-08 18:02:13.028 T:22020    info <general>: Creating Demuxer
2023-02-08 18:02:13.029 T:22020    info <general>: Opening stream: 1006 source: 256
2023-02-08 18:02:13.114 T:22024   error <general>: AddOnLog: inputstream.adaptive: SegmentUpdateWorker: DEBUG after RefreshLiveSegments()
2023-02-08 18:02:13.160 T:22020   error <general>: AddOnLog: inputstream.adaptive: DEBUG before sleep()
2023-02-08 18:02:14.114 T:22024   error <general>: AddOnLog: inputstream.adaptive: SegmentUpdateWorker: DEBUG before RefreshLiveSegments()
2023-02-08 18:02:14.135 T:22024   error <general>: AddOnLog: inputstream.adaptive: SegmentUpdateWorker: DEBUG after RefreshLiveSegments()
2023-02-08 18:02:15.135 T:22024   error <general>: AddOnLog: inputstream.adaptive: SegmentUpdateWorker: DEBUG before RefreshLiveSegments()
2023-02-08 18:02:15.155 T:22024   error <general>: AddOnLog: inputstream.adaptive: SegmentUpdateWorker: DEBUG after RefreshLiveSegments()
2023-02-08 18:02:16.155 T:22024   error <general>: AddOnLog: inputstream.adaptive: SegmentUpdateWorker: DEBUG before RefreshLiveSegments()
2023-02-08 18:02:16.161 T:22020   error <general>: AddOnLog: inputstream.adaptive: DEBUG after sleep()

Address sanitizer report:

==21945==ERROR: AddressSanitizer: heap-use-after-free on address 0x7f402596e960 at pc 0x7f40131c4944 bp 0x7f402616de50 sp 0x7f402616de40
READ of size 8 at 0x7f402596e960 thread T53
    #0 0x7f40131c4943 in adaptive::AdaptiveStream::start_stream() /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:610
    #1 0x7f4013178317 in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:309
    xbmc#2 0x7f4013187f07 in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.20.3.2+0x387f07)
    xbmc#3 0x55abad48474b in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xb7c74b)
    xbmc#4 0x55abad508385 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xc00385)
    xbmc#5 0x55abad508bba in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xc00bba)
    xbmc#6 0x55abad50a857 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc02857)
    xbmc#7 0x55abad510d45 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc08d45)
    xbmc#8 0x55abad758396 in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe50396)
    xbmc#9 0x55abae0f0e24  (/usr/lib/kodi/kodi.bin+0x17e8e24)
    xbmc#10 0x55abad755dba  (/usr/lib/kodi/kodi.bin+0xe4ddba)
    xbmc#11 0x7f403d4d72c2 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:82
    xbmc#12 0x7f403dd8cbb4  (/usr/lib/libc.so.6+0x85bb4)
    xbmc#13 0x7f403de0ed8f  (/usr/lib/libc.so.6+0x107d8f)

0x7f402596e960 is located 303456 bytes inside of 303840-byte region [0x7f4025924800,0x7f402596eae0)
freed by thread T57 here:
    #0 0x7f403fac178a in operator delete(void*, unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:164
    #1 0x7f40131de17d in std::__new_allocator<adaptive::AdaptiveTree::Segment>::deallocate(adaptive::AdaptiveTree::Segment*, unsigned long) /usr/include/c++/12.2.1/bits/new_allocator.h:158
    xbmc#2 0x7f40131d974a in std::allocator_traits<std::allocator<adaptive::AdaptiveTree::Segment> >::deallocate(std::allocator<adaptive::AdaptiveTree::Segment>&, adaptive::AdaptiveTree::Segment*, unsigned long) /usr/include/c++/12.2.1/bits/alloc_traits.h:496
    xbmc#3 0x7f40131d33cb in std::_Vector_base<adaptive::AdaptiveTree::Segment, std::allocator<adaptive::AdaptiveTree::Segment> >::_M_deallocate(adaptive::AdaptiveTree::Segment*, unsigned long) /usr/include/c++/12.2.1/bits/stl_vector.h:387
    xbmc#4 0x7f40131edabd in std::_Vector_base<adaptive::AdaptiveTree::Segment, std::allocator<adaptive::AdaptiveTree::Segment> >::~_Vector_base() /usr/include/c++/12.2.1/bits/stl_vector.h:366
    xbmc#5 0x7f40131edb57 in std::vector<adaptive::AdaptiveTree::Segment, std::allocator<adaptive::AdaptiveTree::Segment> >::~vector() /usr/include/c++/12.2.1/bits/stl_vector.h:733
    xbmc#6 0x7f40131ea67f in adaptive::SPINCACHE<adaptive::AdaptiveTree::Segment>::~SPINCACHE() /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveTree.h:44
    xbmc#7 0x7f40131eae13 in adaptive::AdaptiveTree::Representation::~Representation() /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveTree.h:208
    xbmc#8 0x7f40131eb5c2 in adaptive::AdaptiveTree::AdaptationSet::~AdaptationSet() /home/dobo/kodi/inputstream.adaptive/src/parser/../common/AdaptiveTree.h:326
    xbmc#9 0x7f40131ecef6 in adaptive::AdaptiveTree::Period::~Period() /home/dobo/kodi/inputstream.adaptive/src/parser/../common/AdaptiveTree.h:462
    xbmc#10 0x7f40131e19ef in adaptive::AdaptiveTree::~AdaptiveTree() /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveTree.cpp:92
    xbmc#11 0x7f401323f6a4 in adaptive::DASHTree::~DASHTree() /home/dobo/kodi/inputstream.adaptive/src/parser/DASHTree.h:16
    xbmc#12 0x7f401323f6bf in adaptive::DASHTree::~DASHTree() /home/dobo/kodi/inputstream.adaptive/src/parser/DASHTree.h:16
    xbmc#13 0x7f401323f73c in std::default_delete<adaptive::DASHTree>::operator()(adaptive::DASHTree*) const /usr/include/c++/12.2.1/bits/unique_ptr.h:95
    xbmc#14 0x7f401323c926 in std::unique_ptr<adaptive::DASHTree, std::default_delete<adaptive::DASHTree> >::~unique_ptr() /usr/include/c++/12.2.1/bits/unique_ptr.h:396
    xbmc#15 0x7f4013237aa8 in adaptive::DASHTree::RefreshLiveSegments() /home/dobo/kodi/inputstream.adaptive/src/parser/DASHTree.cpp:1962
    xbmc#16 0x7f40131e7842 in adaptive::AdaptiveTree::SegmentUpdateWorker() /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveTree.cpp:431
    xbmc#17 0x7f4013208eea in void std::__invoke_impl<void, void (adaptive::AdaptiveTree::*)(), adaptive::AdaptiveTree*>(std::__invoke_memfun_deref, void (adaptive::AdaptiveTree::*&&)(), adaptive::AdaptiveTree*&&) /usr/include/c++/12.2.1/bits/invoke.h:74
    xbmc#18 0x7f4013208d56 in std::__invoke_result<void (adaptive::AdaptiveTree::*)(), adaptive::AdaptiveTree*>::type std::__invoke<void (adaptive::AdaptiveTree::*)(), adaptive::AdaptiveTree*>(void (adaptive::AdaptiveTree::*&&)(), adaptive::AdaptiveTree*&&) /usr/include/c++/12.2.1/bits/invoke.h:96
    xbmc#19 0x7f4013208cc6 in void std::thread::_Invoker<std::tuple<void (adaptive::AdaptiveTree::*)(), adaptive::AdaptiveTree*> >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/include/c++/12.2.1/bits/std_thread.h:258
    xbmc#20 0x7f4013208c7f in std::thread::_Invoker<std::tuple<void (adaptive::AdaptiveTree::*)(), adaptive::AdaptiveTree*> >::operator()() /usr/include/c++/12.2.1/bits/std_thread.h:265
    xbmc#21 0x7f4013208c63 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (adaptive::AdaptiveTree::*)(), adaptive::AdaptiveTree*> > >::_M_run() /usr/include/c++/12.2.1/bits/std_thread.h:210
    xbmc#22 0x7f403d4d72c2 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:82

previously allocated by thread T53 here:
    #0 0x7f403fac0672 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f40131deab1 in std::__new_allocator<adaptive::AdaptiveTree::Segment>::allocate(unsigned long, void const*) /usr/include/c++/12.2.1/bits/new_allocator.h:137
    xbmc#2 0x7f40131db727 in std::allocator_traits<std::allocator<adaptive::AdaptiveTree::Segment> >::allocate(std::allocator<adaptive::AdaptiveTree::Segment>&, unsigned long) /usr/include/c++/12.2.1/bits/alloc_traits.h:464
    xbmc#3 0x7f40131d5b81 in std::_Vector_base<adaptive::AdaptiveTree::Segment, std::allocator<adaptive::AdaptiveTree::Segment> >::_M_allocate(unsigned long) /usr/include/c++/12.2.1/bits/stl_vector.h:378
    xbmc#4 0x7f40131d1308 in std::vector<adaptive::AdaptiveTree::Segment, std::allocator<adaptive::AdaptiveTree::Segment> >::reserve(unsigned long) /usr/include/c++/12.2.1/bits/vector.tcc:79
    xbmc#5 0x7f401322dd61 in end /home/dobo/kodi/inputstream.adaptive/src/parser/DASHTree.cpp:1253
    xbmc#6 0x7f403c4d8263  (/usr/lib/libexpat.so.1+0xd263)

Thread T53 created by T0 here:
    #0 0x7f403fa64207 in __interceptor_pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:207
    #1 0x7f403d4d73a9 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:663
    xbmc#2 0x7f403d4d73a9 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:147

Thread T57 created by T53 here:
    #0 0x7f403fa64207 in __interceptor_pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:207
    #1 0x7f403d4d73a9 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:663
    xbmc#2 0x7f403d4d73a9 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:147
    xbmc#3 0x7f40131e751e in adaptive::AdaptiveTree::StartUpdateThread() /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveTree.cpp:418
    xbmc#4 0x7f401323398d in adaptive::DASHTree::open(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<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, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >) /home/dobo/kodi/inputstream.adaptive/src/parser/DASHTree.cpp:1639
    xbmc#5 0x7f401328c8ed in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:248
    xbmc#6 0x7f4013175f30 in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:86
    xbmc#7 0x7f40131871d5 in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.20.3.2+0x3871d5)
    xbmc#8 0x55abad46eddc in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb66ddc)

SUMMARY: AddressSanitizer: heap-use-after-free /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:610 in adaptive::AdaptiveStream::start_stream()
Shadow bytes around the buggy address:
  0x0fe884b25cd0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0fe884b25ce0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0fe884b25cf0: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0fe884b25d00: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0fe884b25d10: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
=>0x0fe884b25d20: fd fd fd fd fd fd fd fd fd fd fd fd[fd]fd fd fd
  0x0fe884b25d30: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0fe884b25d40: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0fe884b25d50: fd fd fd fd fd fd fd fd fd fd fd fd fa fa fa fa
  0x0fe884b25d60: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0fe884b25d70: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
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
==21945==ABORTING
dobo90 pushed a commit to dobo90/inputstream.adaptive that referenced this pull request Feb 14, 2023
…hile CloseSession is active to avoid endless loop.

Sometimes when stopping a playback Kodi crashes with a following backtrace:

    (__m=<optimized out>, this=<optimized out>)
    at /usr/include/c++/12.1.0/bits/atomic_base.h:486
        __b = <optimized out>
    at /usr/include/c++/12.1.0/atomic:87
    (adp=std::shared_ptr<media::CdmAdapter> (use count 1, weak count 1) = {...}, delay=<optimized out>, context=<optimized out>)
    at /usr/src/debug/kodi-addon-inputstream-adaptive/inputstream.adaptive-20.3.3-Nexus/wvdecrypter/cdm/media/cdm/cdm_adapter.cc:81
    at /usr/include/c++/12.1.0/bits/invoke.h:96, unsigned long long, void*), std::shared_ptr<media::CdmAdapter>, long long, void*> >::_M_invoke<0u, 1u, 2u, 3u>(std::_Index_tuple<0u, 1u, 2u, 3u>)
    (this=<optimized out>) at /usr/include/c++/12.1.0/bits/std_thread.h:252
    at /usr/include/c++/12.1.0/bits/std_thread.h:259
    at /usr/include/c++/12.1.0/bits/std_thread.h:210
    at /usr/src/debug/gcc/libstdc++-v3/src/c++11/thread.cc:82
        ret = <optimized out>
        pd = 0x85cf9080
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {857629366, 66004830, -2049994624, -2008033272, -2008033282, 338, -2008033281, 8387456, -2058383360, -2049995908, 1920, 1080, 3840, 2160, 0, 10000000, -1431355392, 1107558643, 0 <repeats 46 times>}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = <optimized out>
        robust = <optimized out>

After searching in the github history it came out that there was a
similar issue adressed in xbmc#728.

For some reason that piece of code got removed in
xbmc@8889fe9
(in pull request xbmc#883).

The stack trace is from the Raspberry Pi 4 machine. But I can also reproduce the issue
on my x86_64 Linux machine by adding a 1s sleep in the beginning of CdmAdapter::SetTimer.

In order to reproduce it is necessary to quickly play/stop streams.
Script attached at the end of the commit message can be used to ease the reproduction.
In my environment running the script for 1-3 minutes makes Kodi crash.
Although the root cause described in xbmc#729
was a busy loop. Right now address sanitizer reports:
```
AddressSanitizer:DEADLYSIGNAL
=================================================================
==108079==ERROR: AddressSanitizer: SEGV on unknown address 0x7f6e314f7d4a (pc 0x7f6e314f7d4a bp 0x7f6e263fd830 sp 0x7f6e263fd720 T464)
==108079==The signal is caused by a READ memory access.
==108079==Hint: PC is at a non-executable region. Maybe a wild jump?
    #0 0x7f6e314f7d4a  (<unknown module>)
    #1 0x7f6e3151c066  (<unknown module>)
    xbmc#2 0x7f6e31526947  (<unknown module>)
    xbmc#3 0x7f6e31526729  (<unknown module>)
    xbmc#4 0x7f6e31526620  (<unknown module>)
    xbmc#5 0x7f6e315265a1  (<unknown module>)
    xbmc#6 0x7f6e31526585  (<unknown module>)
    xbmc#7 0x7f6e46ed72c2 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:82

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV (<unknown module>)
Thread T464 created by T51 here:
    #0 0x7f6e49464207 in __interceptor_pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:207
    #1 0x7f6e46ed73a9 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:663
    xbmc#2 0x7f6e46ed73a9 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:147
    xbmc#3 0x7f6e31522028  (<unknown module>)
    xbmc#4 0x7f6e27569d40  (/home/dobo/.kodi/cdm/libwidevinecdm.so+0x969d40)
    xbmc#5 0x7f6e2757e7fc  (/home/dobo/.kodi/cdm/libwidevinecdm.so+0x97e7fc)
    xbmc#6 0x7f6e27569c36  (/home/dobo/.kodi/cdm/libwidevinecdm.so+0x969c36)
    xbmc#7 0x7f6e3151fb28  (<unknown module>)
    xbmc#8 0x7f6e3151c0b1  (<unknown module>)
    xbmc#9 0x7f6e31526947  (<unknown module>)
    xbmc#10 0x7f6e31526729  (<unknown module>)
    xbmc#11 0x7f6e31526620  (<unknown module>)
    xbmc#12 0x7f6e315265a1  (<unknown module>)
    xbmc#13 0x7f6e31526585  (<unknown module>)
    xbmc#14 0x7f6e46ed72c2 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:82

Thread T51 created by T45 here:
    #0 0x7f6e49464207 in __interceptor_pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:207
    #1 0x7f6e46ed73a9 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:663
    xbmc#2 0x7f6e46ed73a9 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:147
    xbmc#3 0x7f6e31522028  (<unknown module>)
    xbmc#4 0x7f6e27569d40  (/home/dobo/.kodi/cdm/libwidevinecdm.so+0x969d40)
    xbmc#5 0x7f6e2757e7fc  (/home/dobo/.kodi/cdm/libwidevinecdm.so+0x97e7fc)
    xbmc#6 0x7f6e2757e70e  (/home/dobo/.kodi/cdm/libwidevinecdm.so+0x97e70e)
    xbmc#7 0x7f6e274e4ecc  (/home/dobo/.kodi/cdm/libwidevinecdm.so+0x8e4ecc)
    xbmc#8 0x7f6e3151f280  (<unknown module>)
    xbmc#9 0x7f6e314e9ea1  (<unknown module>)
    xbmc#10 0x7f6e314e49bb  (<unknown module>)
    xbmc#11 0x7f6e314f45ce  (<unknown module>)
    xbmc#12 0x7f6e2889228f in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:643
    xbmc#13 0x7f6e28893279 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:723
    xbmc#14 0x7f6e2888e36d in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:266
    xbmc#15 0x7f6e28775f4c in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:101
    xbmc#16 0x7f6e287871a1 in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.20.3.2+0x3871a1)
    xbmc#17 0x55c2811f4ddc in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb66ddc)

Thread T45 created by T0 here:
    #0 0x7f6e49464207 in __interceptor_pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:207
    #1 0x7f6e46ed73a9 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:663
    xbmc#2 0x7f6e46ed73a9 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:147
```

The root cause of the crash is unknown as it comes directly from
libwidevine library. But it crashes when we call cdm->TimerExpired when
the session is closed. After applying mentioned commit I'm not able
to reproduce the crash anymore.

Script to reproduce the issue:
```
set -x

URI='Change it to some uri to play'

while true; do
  curl -s "http://kodi:kodi@127.0.0.1:8080/jsonrpc" -H 'Content-Type: application/json' --data "{\"jsonrpc\":\"2.0\",\"method\":\"Player.Open\",\"params\":{\"item\":{\"file\":\"$URI\"}}}"
  sleep $[ ($RANDOM % 70 + 30) / 10.0 ]

  curl -s "http://kodi:kodi@127.0.0.1:8080/jsonrpc" -H 'Content-Type: application/json' --data '{"jsonrpc":"2.0","method":"Player.Stop","params":{"playerid":1}}'
  sleep 1
done
```
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Jan 26, 2025
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Apr 14, 2025
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Apr 27, 2025
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Apr 27, 2025
Fixes:
Direct leak of 24 byte(s) in 1 object(s) allocated from:
    #0 0x70f7d04fe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x70f788d60403 in AP4_CencSingleSampleDecrypter::Create(unsigned int, unsigned char const*, unsigned int, unsigned char, unsigned char, AP4_BlockCipherFactory*, bool, AP4_CencSingleSampleDecrypt
er*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4CommonEncryption.cpp:1848
    xbmc#2 0x70f788bfd299 in CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter(std::vector<unsigned char, std::allocator<unsigned char> > const&, std::vector<unsigned char, std::alloca
tor<unsigned char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, s
td::less<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> > cons
t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&, CClearKeyDecrypter*) /home/dobo/kodi/inputstream.adaptive/src/decrypters/clearkey/ClearKeyCencSingleSamp
leDecrypter.cpp:138
    xbmc#3 0x70f788c0ebed in CClearKeyDecrypter::CreateSingleSampleDecrypter(std::vector<unsigned char, std::allocator<unsigned char> >&, std::basic_string_view<char, std::char_traits<char> >, std::vector<
unsigned char, std::allocator<unsigned char> > const&, std::basic_string_view<char, std::char_traits<char> >, bool, CryptoMode) /home/dobo/kodi/inputstream.adaptive/src/decrypters/clearkey/ClearKeyDecr
ypter.cpp:59
    xbmc#4 0x70f788b0e3df in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:545
    xbmc#5 0x70f788b0f2d3 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#6 0x70f788b0ad2c in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#7 0x70f788addbb1 in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:53
    xbmc#8 0x70f788aea2d0 in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xaea2d0) (BuildId: daa25619784267a25db3814481696e5747900b65)
    xbmc#9 0x5b494fcdb7fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb807fd) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x5b494fd75b03 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc1ab03) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x5b494fd76572 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b572) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x5b494fd791d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x5b494ffdb85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x5b494ffe41d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x70f7cdee1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x70f7d045cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x70f7cdca3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request May 4, 2025
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request May 4, 2025
Fixes:
Direct leak of 24 byte(s) in 1 object(s) allocated from:
    #0 0x70f7d04fe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x70f788d60403 in AP4_CencSingleSampleDecrypter::Create(unsigned int, unsigned char const*, unsigned int, unsigned char, unsigned char, AP4_BlockCipherFactory*, bool, AP4_CencSingleSampleDecrypt
er*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4CommonEncryption.cpp:1848
    xbmc#2 0x70f788bfd299 in CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter(std::vector<unsigned char, std::allocator<unsigned char> > const&, std::vector<unsigned char, std::alloca
tor<unsigned char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, s
td::less<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> > cons
t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&, CClearKeyDecrypter*) /home/dobo/kodi/inputstream.adaptive/src/decrypters/clearkey/ClearKeyCencSingleSamp
leDecrypter.cpp:138
    xbmc#3 0x70f788c0ebed in CClearKeyDecrypter::CreateSingleSampleDecrypter(std::vector<unsigned char, std::allocator<unsigned char> >&, std::basic_string_view<char, std::char_traits<char> >, std::vector<
unsigned char, std::allocator<unsigned char> > const&, std::basic_string_view<char, std::char_traits<char> >, bool, CryptoMode) /home/dobo/kodi/inputstream.adaptive/src/decrypters/clearkey/ClearKeyDecr
ypter.cpp:59
    xbmc#4 0x70f788b0e3df in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:545
    xbmc#5 0x70f788b0f2d3 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#6 0x70f788b0ad2c in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#7 0x70f788addbb1 in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:53
    xbmc#8 0x70f788aea2d0 in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xaea2d0) (BuildId: daa25619784267a25db3814481696e5747900b65)
    xbmc#9 0x5b494fcdb7fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb807fd) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x5b494fd75b03 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc1ab03) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x5b494fd76572 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b572) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x5b494fd791d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x5b494ffdb85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x5b494ffe41d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x70f7cdee1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x70f7d045cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x70f7cdca3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request May 4, 2025
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request May 4, 2025
Fixes:
Direct leak of 24 byte(s) in 1 object(s) allocated from:
    #0 0x70f7d04fe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x70f788d60403 in AP4_CencSingleSampleDecrypter::Create(unsigned int, unsigned char const*, unsigned int, unsigned char, unsigned char, AP4_BlockCipherFactory*, bool, AP4_CencSingleSampleDecrypt
er*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4CommonEncryption.cpp:1848
    xbmc#2 0x70f788bfd299 in CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter(std::vector<unsigned char, std::allocator<unsigned char> > const&, std::vector<unsigned char, std::alloca
tor<unsigned char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, s
td::less<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> > cons
t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&, CClearKeyDecrypter*) /home/dobo/kodi/inputstream.adaptive/src/decrypters/clearkey/ClearKeyCencSingleSamp
leDecrypter.cpp:138
    xbmc#3 0x70f788c0ebed in CClearKeyDecrypter::CreateSingleSampleDecrypter(std::vector<unsigned char, std::allocator<unsigned char> >&, std::basic_string_view<char, std::char_traits<char> >, std::vector<
unsigned char, std::allocator<unsigned char> > const&, std::basic_string_view<char, std::char_traits<char> >, bool, CryptoMode) /home/dobo/kodi/inputstream.adaptive/src/decrypters/clearkey/ClearKeyDecr
ypter.cpp:59
    xbmc#4 0x70f788b0e3df in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:545
    xbmc#5 0x70f788b0f2d3 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#6 0x70f788b0ad2c in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#7 0x70f788addbb1 in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:53
    xbmc#8 0x70f788aea2d0 in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xaea2d0) (BuildId: daa25619784267a25db3814481696e5747900b65)
    xbmc#9 0x5b494fcdb7fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb807fd) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x5b494fd75b03 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc1ab03) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x5b494fd76572 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b572) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x5b494fd791d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x5b494ffdb85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x5b494ffe41d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x70f7cdee1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x70f7d045cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x70f7cdca3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request May 19, 2025
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request May 19, 2025
Fixes:
Direct leak of 24 byte(s) in 1 object(s) allocated from:
    #0 0x70f7d04fe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x70f788d60403 in AP4_CencSingleSampleDecrypter::Create(unsigned int, unsigned char const*, unsigned int, unsigned char, unsigned char, AP4_BlockCipherFactory*, bool, AP4_CencSingleSampleDecrypt
er*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4CommonEncryption.cpp:1848
    xbmc#2 0x70f788bfd299 in CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter(std::vector<unsigned char, std::allocator<unsigned char> > const&, std::vector<unsigned char, std::alloca
tor<unsigned char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, s
td::less<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> > cons
t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&, CClearKeyDecrypter*) /home/dobo/kodi/inputstream.adaptive/src/decrypters/clearkey/ClearKeyCencSingleSamp
leDecrypter.cpp:138
    xbmc#3 0x70f788c0ebed in CClearKeyDecrypter::CreateSingleSampleDecrypter(std::vector<unsigned char, std::allocator<unsigned char> >&, std::basic_string_view<char, std::char_traits<char> >, std::vector<
unsigned char, std::allocator<unsigned char> > const&, std::basic_string_view<char, std::char_traits<char> >, bool, CryptoMode) /home/dobo/kodi/inputstream.adaptive/src/decrypters/clearkey/ClearKeyDecr
ypter.cpp:59
    xbmc#4 0x70f788b0e3df in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:545
    xbmc#5 0x70f788b0f2d3 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#6 0x70f788b0ad2c in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#7 0x70f788addbb1 in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:53
    xbmc#8 0x70f788aea2d0 in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xaea2d0) (BuildId: daa25619784267a25db3814481696e5747900b65)
    xbmc#9 0x5b494fcdb7fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb807fd) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x5b494fd75b03 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc1ab03) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x5b494fd76572 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b572) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x5b494fd791d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x5b494ffdb85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x5b494ffe41d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x70f7cdee1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x70f7d045cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x70f7cdca3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request May 19, 2025
* Leak can be reproduced by playing 'Google tears [default_KID on common CP]'
  from plugin.video.isasamples.

Direct leak of 88 byte(s) in 1 object(s) allocated from:
    #0 0x78b3c6efe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x78b37a774b7e in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, unsigned long long&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cp
p:242
    xbmc#2 0x78b37a77487d in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cpp:154
    xbmc#3 0x78b37a5b55ce in adaptive::AdaptiveStream::parseIndexRange(PLAYLIST::CRepresentation*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/dobo/kodi/inputstream.adaptive/sr
c/common/AdaptiveStream.cpp:508
    xbmc#4 0x78b37a5bd0c5 in adaptive::AdaptiveStream::GenerateSidxSegments(PLAYLIST::CRepresentation*) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:1343
    xbmc#5 0x78b37a5b620d in adaptive::AdaptiveStream::start_stream(unsigned long) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:650
    xbmc#6 0x78b37a502434 in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:254
    xbmc#7 0x78b37a50e1fd in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xb0e1fd) (
BuildId: f190da3ba02e0d5058c85a1816f30382ce0a2e08)
    xbmc#8 0x63de0ca162b5 in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xb972b5) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#9 0x63de0ca94129 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xc15129) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x63de0ca948c2 in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xc158c2) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x63de0ca9a93f in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b93f) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x63de0ca9d1d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x63de0ccff85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x63de0cd081d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x78b3c46e1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x78b3c6e5cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x78b3c44a3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Jul 11, 2025
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Jul 11, 2025
Fixes:
Direct leak of 24 byte(s) in 1 object(s) allocated from:
    #0 0x70f7d04fe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x70f788d60403 in AP4_CencSingleSampleDecrypter::Create(unsigned int, unsigned char const*, unsigned int, unsigned char, unsigned char, AP4_BlockCipherFactory*, bool, AP4_CencSingleSampleDecrypt
er*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4CommonEncryption.cpp:1848
    xbmc#2 0x70f788bfd299 in CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter(std::vector<unsigned char, std::allocator<unsigned char> > const&, std::vector<unsigned char, std::alloca
tor<unsigned char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, s
td::less<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> > cons
t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&, CClearKeyDecrypter*) /home/dobo/kodi/inputstream.adaptive/src/decrypters/clearkey/ClearKeyCencSingleSamp
leDecrypter.cpp:138
    xbmc#3 0x70f788c0ebed in CClearKeyDecrypter::CreateSingleSampleDecrypter(std::vector<unsigned char, std::allocator<unsigned char> >&, std::basic_string_view<char, std::char_traits<char> >, std::vector<
unsigned char, std::allocator<unsigned char> > const&, std::basic_string_view<char, std::char_traits<char> >, bool, CryptoMode) /home/dobo/kodi/inputstream.adaptive/src/decrypters/clearkey/ClearKeyDecr
ypter.cpp:59
    xbmc#4 0x70f788b0e3df in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:545
    xbmc#5 0x70f788b0f2d3 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#6 0x70f788b0ad2c in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#7 0x70f788addbb1 in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:53
    xbmc#8 0x70f788aea2d0 in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xaea2d0) (BuildId: daa25619784267a25db3814481696e5747900b65)
    xbmc#9 0x5b494fcdb7fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb807fd) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x5b494fd75b03 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc1ab03) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x5b494fd76572 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b572) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x5b494fd791d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x5b494ffdb85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x5b494ffe41d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x70f7cdee1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x70f7d045cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x70f7cdca3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Jul 11, 2025
* Leak can be reproduced by playing 'Google tears [default_KID on common CP]'
  from plugin.video.isasamples.

Direct leak of 88 byte(s) in 1 object(s) allocated from:
    #0 0x78b3c6efe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x78b37a774b7e in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, unsigned long long&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cp
p:242
    xbmc#2 0x78b37a77487d in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cpp:154
    xbmc#3 0x78b37a5b55ce in adaptive::AdaptiveStream::parseIndexRange(PLAYLIST::CRepresentation*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/dobo/kodi/inputstream.adaptive/sr
c/common/AdaptiveStream.cpp:508
    xbmc#4 0x78b37a5bd0c5 in adaptive::AdaptiveStream::GenerateSidxSegments(PLAYLIST::CRepresentation*) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:1343
    xbmc#5 0x78b37a5b620d in adaptive::AdaptiveStream::start_stream(unsigned long) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:650
    xbmc#6 0x78b37a502434 in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:254
    xbmc#7 0x78b37a50e1fd in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xb0e1fd) (
BuildId: f190da3ba02e0d5058c85a1816f30382ce0a2e08)
    xbmc#8 0x63de0ca162b5 in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xb972b5) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#9 0x63de0ca94129 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xc15129) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x63de0ca948c2 in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xc158c2) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x63de0ca9a93f in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b93f) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x63de0ca9d1d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x63de0ccff85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x63de0cd081d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x78b3c46e1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x78b3c6e5cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x78b3c44a3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Jul 17, 2025
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Jul 17, 2025
* Leak can be reproduced by playing 'Google tears [default_KID on common CP]'
  from plugin.video.isasamples.

Direct leak of 88 byte(s) in 1 object(s) allocated from:
    #0 0x78b3c6efe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x78b37a774b7e in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, unsigned long long&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cp
p:242
    xbmc#2 0x78b37a77487d in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cpp:154
    xbmc#3 0x78b37a5b55ce in adaptive::AdaptiveStream::parseIndexRange(PLAYLIST::CRepresentation*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/dobo/kodi/inputstream.adaptive/sr
c/common/AdaptiveStream.cpp:508
    xbmc#4 0x78b37a5bd0c5 in adaptive::AdaptiveStream::GenerateSidxSegments(PLAYLIST::CRepresentation*) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:1343
    xbmc#5 0x78b37a5b620d in adaptive::AdaptiveStream::start_stream(unsigned long) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:650
    xbmc#6 0x78b37a502434 in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:254
    xbmc#7 0x78b37a50e1fd in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xb0e1fd) (
BuildId: f190da3ba02e0d5058c85a1816f30382ce0a2e08)
    xbmc#8 0x63de0ca162b5 in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xb972b5) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#9 0x63de0ca94129 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xc15129) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x63de0ca948c2 in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xc158c2) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x63de0ca9a93f in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b93f) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x63de0ca9d1d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x63de0ccff85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x63de0cd081d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x78b3c46e1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x78b3c6e5cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x78b3c44a3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Aug 1, 2025
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Dec 6, 2025
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Dec 6, 2025
* Leak can be reproduced by playing 'Google tears [default_KID on common CP]'
  from plugin.video.isasamples.

Direct leak of 88 byte(s) in 1 object(s) allocated from:
    #0 0x78b3c6efe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x78b37a774b7e in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, unsigned long long&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cp
p:242
    xbmc#2 0x78b37a77487d in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cpp:154
    xbmc#3 0x78b37a5b55ce in adaptive::AdaptiveStream::parseIndexRange(PLAYLIST::CRepresentation*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/dobo/kodi/inputstream.adaptive/sr
c/common/AdaptiveStream.cpp:508
    xbmc#4 0x78b37a5bd0c5 in adaptive::AdaptiveStream::GenerateSidxSegments(PLAYLIST::CRepresentation*) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:1343
    xbmc#5 0x78b37a5b620d in adaptive::AdaptiveStream::start_stream(unsigned long) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:650
    xbmc#6 0x78b37a502434 in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:254
    xbmc#7 0x78b37a50e1fd in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xb0e1fd) (
BuildId: f190da3ba02e0d5058c85a1816f30382ce0a2e08)
    xbmc#8 0x63de0ca162b5 in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xb972b5) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#9 0x63de0ca94129 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xc15129) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x63de0ca948c2 in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xc158c2) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x63de0ca9a93f in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b93f) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x63de0ca9d1d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x63de0ccff85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x63de0cd081d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x78b3c46e1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x78b3c6e5cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x78b3c44a3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Dec 6, 2025
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Dec 6, 2025
Fixes:
Direct leak of 24 byte(s) in 1 object(s) allocated from:
    #0 0x70f7d04fe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x70f788d60403 in AP4_CencSingleSampleDecrypter::Create(unsigned int, unsigned char const*, unsigned int, unsigned char, unsigned char, AP4_BlockCipherFactory*, bool, AP4_CencSingleSampleDecrypt
er*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4CommonEncryption.cpp:1848
    xbmc#2 0x70f788bfd299 in CClearKeyCencSingleSampleDecrypter::CClearKeyCencSingleSampleDecrypter(std::vector<unsigned char, std::allocator<unsigned char> > const&, std::vector<unsigned char, std::alloca
tor<unsigned char> > const&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, s
td::less<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> > cons
t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&, CClearKeyDecrypter*) /home/dobo/kodi/inputstream.adaptive/src/decrypters/clearkey/ClearKeyCencSingleSamp
leDecrypter.cpp:138
    xbmc#3 0x70f788c0ebed in CClearKeyDecrypter::CreateSingleSampleDecrypter(std::vector<unsigned char, std::allocator<unsigned char> >&, std::basic_string_view<char, std::char_traits<char> >, std::vector<
unsigned char, std::allocator<unsigned char> > const&, std::basic_string_view<char, std::char_traits<char> >, bool, CryptoMode) /home/dobo/kodi/inputstream.adaptive/src/decrypters/clearkey/ClearKeyDecr
ypter.cpp:59
    xbmc#4 0x70f788b0e3df in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:545
    xbmc#5 0x70f788b0f2d3 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#6 0x70f788b0ad2c in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#7 0x70f788addbb1 in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:53
    xbmc#8 0x70f788aea2d0 in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xaea2d0) (BuildId: daa25619784267a25db3814481696e5747900b65)
    xbmc#9 0x5b494fcdb7fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb807fd) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x5b494fd75b03 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc1ab03) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x5b494fd76572 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b572) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x5b494fd791d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x5b494ffdb85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x5b494ffe41d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x70f7cdee1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x70f7d045cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x70f7cdca3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Dec 6, 2025
* Leak can be reproduced by playing 'Google tears [default_KID on common CP]'
  from plugin.video.isasamples.

Direct leak of 88 byte(s) in 1 object(s) allocated from:
    #0 0x78b3c6efe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x78b37a774b7e in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, unsigned long long&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cp
p:242
    xbmc#2 0x78b37a77487d in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cpp:154
    xbmc#3 0x78b37a5b55ce in adaptive::AdaptiveStream::parseIndexRange(PLAYLIST::CRepresentation*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/dobo/kodi/inputstream.adaptive/sr
c/common/AdaptiveStream.cpp:508
    xbmc#4 0x78b37a5bd0c5 in adaptive::AdaptiveStream::GenerateSidxSegments(PLAYLIST::CRepresentation*) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:1343
    xbmc#5 0x78b37a5b620d in adaptive::AdaptiveStream::start_stream(unsigned long) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:650
    xbmc#6 0x78b37a502434 in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:254
    xbmc#7 0x78b37a50e1fd in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xb0e1fd) (
BuildId: f190da3ba02e0d5058c85a1816f30382ce0a2e08)
    xbmc#8 0x63de0ca162b5 in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xb972b5) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#9 0x63de0ca94129 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xc15129) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x63de0ca948c2 in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xc158c2) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x63de0ca9a93f in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b93f) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x63de0ca9d1d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x63de0ccff85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x63de0cd081d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x78b3c46e1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x78b3c6e5cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x78b3c44a3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
@claude claude Bot mentioned this pull request Dec 23, 2025
1 of 11 tasks
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Dec 29, 2025
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Dec 29, 2025
* Leak can be reproduced by playing 'Google tears [default_KID on common CP]'
  from plugin.video.isasamples.

Direct leak of 88 byte(s) in 1 object(s) allocated from:
    #0 0x78b3c6efe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x78b37a774b7e in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, unsigned long long&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cp
p:242
    xbmc#2 0x78b37a77487d in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cpp:154
    xbmc#3 0x78b37a5b55ce in adaptive::AdaptiveStream::parseIndexRange(PLAYLIST::CRepresentation*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/dobo/kodi/inputstream.adaptive/sr
c/common/AdaptiveStream.cpp:508
    xbmc#4 0x78b37a5bd0c5 in adaptive::AdaptiveStream::GenerateSidxSegments(PLAYLIST::CRepresentation*) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:1343
    xbmc#5 0x78b37a5b620d in adaptive::AdaptiveStream::start_stream(unsigned long) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:650
    xbmc#6 0x78b37a502434 in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:254
    xbmc#7 0x78b37a50e1fd in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xb0e1fd) (
BuildId: f190da3ba02e0d5058c85a1816f30382ce0a2e08)
    xbmc#8 0x63de0ca162b5 in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xb972b5) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#9 0x63de0ca94129 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xc15129) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x63de0ca948c2 in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xc158c2) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x63de0ca9a93f in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b93f) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x63de0ca9d1d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x63de0ccff85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x63de0cd081d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x78b3c46e1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x78b3c6e5cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x78b3c44a3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Feb 1, 2026
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Feb 1, 2026
* Leak can be reproduced by playing 'Google tears [default_KID on common CP]'
  from plugin.video.isasamples.

Direct leak of 88 byte(s) in 1 object(s) allocated from:
    #0 0x78b3c6efe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x78b37a774b7e in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, unsigned long long&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cp
p:242
    xbmc#2 0x78b37a77487d in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cpp:154
    xbmc#3 0x78b37a5b55ce in adaptive::AdaptiveStream::parseIndexRange(PLAYLIST::CRepresentation*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/dobo/kodi/inputstream.adaptive/sr
c/common/AdaptiveStream.cpp:508
    xbmc#4 0x78b37a5bd0c5 in adaptive::AdaptiveStream::GenerateSidxSegments(PLAYLIST::CRepresentation*) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:1343
    xbmc#5 0x78b37a5b620d in adaptive::AdaptiveStream::start_stream(unsigned long) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:650
    xbmc#6 0x78b37a502434 in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:254
    xbmc#7 0x78b37a50e1fd in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xb0e1fd) (
BuildId: f190da3ba02e0d5058c85a1816f30382ce0a2e08)
    xbmc#8 0x63de0ca162b5 in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xb972b5) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#9 0x63de0ca94129 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xc15129) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x63de0ca948c2 in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xc158c2) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x63de0ca9a93f in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b93f) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x63de0ca9d1d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x63de0ccff85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x63de0cd081d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x78b3c46e1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x78b3c6e5cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x78b3c44a3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Feb 16, 2026
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Feb 16, 2026
* Leak can be reproduced by playing 'Google tears [default_KID on common CP]'
  from plugin.video.isasamples.

Direct leak of 88 byte(s) in 1 object(s) allocated from:
    #0 0x78b3c6efe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x78b37a774b7e in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, unsigned long long&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cp
p:242
    xbmc#2 0x78b37a77487d in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cpp:154
    xbmc#3 0x78b37a5b55ce in adaptive::AdaptiveStream::parseIndexRange(PLAYLIST::CRepresentation*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/dobo/kodi/inputstream.adaptive/sr
c/common/AdaptiveStream.cpp:508
    xbmc#4 0x78b37a5bd0c5 in adaptive::AdaptiveStream::GenerateSidxSegments(PLAYLIST::CRepresentation*) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:1343
    xbmc#5 0x78b37a5b620d in adaptive::AdaptiveStream::start_stream(unsigned long) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:650
    xbmc#6 0x78b37a502434 in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:254
    xbmc#7 0x78b37a50e1fd in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xb0e1fd) (
BuildId: f190da3ba02e0d5058c85a1816f30382ce0a2e08)
    xbmc#8 0x63de0ca162b5 in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xb972b5) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#9 0x63de0ca94129 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xc15129) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x63de0ca948c2 in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xc158c2) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x63de0ca9a93f in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b93f) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x63de0ca9d1d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x63de0ccff85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x63de0cd081d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x78b3c46e1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x78b3c6e5cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x78b3c44a3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Feb 28, 2026
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Feb 28, 2026
* Leak can be reproduced by playing 'Google tears [default_KID on common CP]'
  from plugin.video.isasamples.

Direct leak of 88 byte(s) in 1 object(s) allocated from:
    #0 0x78b3c6efe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x78b37a774b7e in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, unsigned long long&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cp
p:242
    xbmc#2 0x78b37a77487d in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cpp:154
    xbmc#3 0x78b37a5b55ce in adaptive::AdaptiveStream::parseIndexRange(PLAYLIST::CRepresentation*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/dobo/kodi/inputstream.adaptive/sr
c/common/AdaptiveStream.cpp:508
    xbmc#4 0x78b37a5bd0c5 in adaptive::AdaptiveStream::GenerateSidxSegments(PLAYLIST::CRepresentation*) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:1343
    xbmc#5 0x78b37a5b620d in adaptive::AdaptiveStream::start_stream(unsigned long) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:650
    xbmc#6 0x78b37a502434 in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:254
    xbmc#7 0x78b37a50e1fd in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xb0e1fd) (
BuildId: f190da3ba02e0d5058c85a1816f30382ce0a2e08)
    xbmc#8 0x63de0ca162b5 in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xb972b5) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#9 0x63de0ca94129 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xc15129) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x63de0ca948c2 in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xc158c2) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x63de0ca9a93f in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b93f) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x63de0ca9d1d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x63de0ccff85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x63de0cd081d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x78b3c46e1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x78b3c6e5cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x78b3c44a3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Mar 11, 2026
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Mar 11, 2026
* Leak can be reproduced by playing 'Google tears [default_KID on common CP]'
  from plugin.video.isasamples.

Direct leak of 88 byte(s) in 1 object(s) allocated from:
    #0 0x78b3c6efe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x78b37a774b7e in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, unsigned long long&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cp
p:242
    xbmc#2 0x78b37a77487d in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cpp:154
    xbmc#3 0x78b37a5b55ce in adaptive::AdaptiveStream::parseIndexRange(PLAYLIST::CRepresentation*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/dobo/kodi/inputstream.adaptive/sr
c/common/AdaptiveStream.cpp:508
    xbmc#4 0x78b37a5bd0c5 in adaptive::AdaptiveStream::GenerateSidxSegments(PLAYLIST::CRepresentation*) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:1343
    xbmc#5 0x78b37a5b620d in adaptive::AdaptiveStream::start_stream(unsigned long) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:650
    xbmc#6 0x78b37a502434 in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:254
    xbmc#7 0x78b37a50e1fd in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xb0e1fd) (
BuildId: f190da3ba02e0d5058c85a1816f30382ce0a2e08)
    xbmc#8 0x63de0ca162b5 in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xb972b5) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#9 0x63de0ca94129 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xc15129) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x63de0ca948c2 in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xc158c2) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x63de0ca9a93f in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b93f) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x63de0ca9d1d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x63de0ccff85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x63de0cd081d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x78b3c46e1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x78b3c6e5cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x78b3c44a3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request May 15, 2026
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request May 15, 2026
* Leak can be reproduced by playing 'Google tears [default_KID on common CP]'
  from plugin.video.isasamples.

Direct leak of 88 byte(s) in 1 object(s) allocated from:
    #0 0x78b3c6efe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x78b37a774b7e in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, unsigned long long&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cp
p:242
    xbmc#2 0x78b37a77487d in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cpp:154
    xbmc#3 0x78b37a5b55ce in adaptive::AdaptiveStream::parseIndexRange(PLAYLIST::CRepresentation*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/dobo/kodi/inputstream.adaptive/sr
c/common/AdaptiveStream.cpp:508
    xbmc#4 0x78b37a5bd0c5 in adaptive::AdaptiveStream::GenerateSidxSegments(PLAYLIST::CRepresentation*) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:1343
    xbmc#5 0x78b37a5b620d in adaptive::AdaptiveStream::start_stream(unsigned long) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:650
    xbmc#6 0x78b37a502434 in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:254
    xbmc#7 0x78b37a50e1fd in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xb0e1fd) (
BuildId: f190da3ba02e0d5058c85a1816f30382ce0a2e08)
    xbmc#8 0x63de0ca162b5 in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xb972b5) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#9 0x63de0ca94129 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xc15129) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x63de0ca948c2 in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xc158c2) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x63de0ca9a93f in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b93f) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x63de0ca9d1d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x63de0ccff85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x63de0cd081d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x78b3c46e1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x78b3c6e5cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x78b3c44a3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request May 19, 2026
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request May 19, 2026
* Leak can be reproduced by playing 'Google tears [default_KID on common CP]'
  from plugin.video.isasamples.

Direct leak of 88 byte(s) in 1 object(s) allocated from:
    #0 0x78b3c6efe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x78b37a774b7e in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, unsigned long long&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cp
p:242
    xbmc#2 0x78b37a77487d in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cpp:154
    xbmc#3 0x78b37a5b55ce in adaptive::AdaptiveStream::parseIndexRange(PLAYLIST::CRepresentation*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/dobo/kodi/inputstream.adaptive/sr
c/common/AdaptiveStream.cpp:508
    xbmc#4 0x78b37a5bd0c5 in adaptive::AdaptiveStream::GenerateSidxSegments(PLAYLIST::CRepresentation*) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:1343
    xbmc#5 0x78b37a5b620d in adaptive::AdaptiveStream::start_stream(unsigned long) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:650
    xbmc#6 0x78b37a502434 in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:254
    xbmc#7 0x78b37a50e1fd in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xb0e1fd) (
BuildId: f190da3ba02e0d5058c85a1816f30382ce0a2e08)
    xbmc#8 0x63de0ca162b5 in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xb972b5) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#9 0x63de0ca94129 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xc15129) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x63de0ca948c2 in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xc158c2) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x63de0ca9a93f in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b93f) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x63de0ca9d1d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x63de0ccff85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x63de0cd081d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x78b3c46e1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x78b3c6e5cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x78b3c44a3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request May 21, 2026
…deo) streams

* First patch is grabbed from upstream Bento4.
* Second and third are written by me.

Test stream: https://storage.videos.solomon.tech/streaming-playlists/hls/edfcff7a-a8e1-4326-a2e7-424411aa189f/eaaa4f76-eef4-443e-821c-a34c36c15351-master.m3u8

Address sanitizer reports:

1)
```
Direct leak of 2480 byte(s) in 62 object(s) allocated from:
    #0 0x7f61f712d341 in operator new(unsigned long) (/usr/lib/libasan.so+0x12d341) (BuildId: ee5fbab73143ab257a66a33afe0f038a4af7a74e)
    #1 0x7b61a2b33313 in AP4_LinearReader::Advance(bool) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4LinearReader.cpp:461
    xbmc#2 0x7b61a2b33709 in AP4_LinearReader::ReadNextSample(unsigned int, AP4_Sample&, AP4_DataBuffer&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4LinearReader.cpp:540
    xbmc#3 0x7b61a2a41871 in CLinearReader::ExecReadNextSample(CLinearReaderCB*, unsigned int, AP4_Sample&, AP4_DataBuffer&) /home/dobo/kodi/inputstream.adaptive/src/samplereader/FragmentedSampleReader.cpp:680
    xbmc#4 0x7b61a2a3beb2 in CFragmentedSampleReader::ReadSample() /home/dobo/kodi/inputstream.adaptive/src/samplereader/FragmentedSampleReader.cpp:158
    xbmc#5 0x7b61a2819586 in int std::__invoke_impl<int, int (ISampleReader::*&)(), ISampleReader*&>(std::__invoke_memfun_deref, int (ISampleReader::*&)(), ISampleReader*&) /usr/include/c++/16.1.1/bits/invoke.h:76
    xbmc#6 0x7b61a2818c4c in std::__invoke_result<int (ISampleReader::*&)(), ISampleReader*&>::type std::__invoke<int (ISampleReader::*&)(), ISampleReader*&>(int (ISampleReader::*&)(), ISampleReader*&) /usr/include/c++/16.1.1/bits/invoke.h:98
    xbmc#7 0x7b61a2818872 in int std::_Bind<int (ISampleReader::*(ISampleReader*))()>::__call<int, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) /usr/include/c++/16.1.1/functional:541
    xbmc#8 0x7b61a2818011 in int std::_Bind<int (ISampleReader::*(ISampleReader*))()>::operator()<, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&, std::_Bind<int (ISampleReader::*(ISampleReader*))()>, 0, int>(this std::_Bind<int (ISampleReader::*(ISampleReader*))()>&) /usr/include/c++/16.1.1/functional:645
    xbmc#9 0x7b61a2817c50 in int std::__invoke_impl<int, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&>(std::__invoke_other, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&) /usr/include/c++/16.1.1/bits/invoke.h:63
    xbmc#10 0x7b61a2817889 in std::enable_if<is_invocable_r_v<int, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&>, int>::type std::__invoke_r<int, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&>(std::_Bind<int (ISampleReader::*(ISampleReader*))()>&) /usr/include/c++/16.1.1/bits/invoke.h:116
    xbmc#11 0x7b61a28169c9 in std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}::operator()() const /usr/include/c++/16.1.1/future:1517
    xbmc#12 0x7b61a2818d6b in std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>::operator()() const /usr/include/c++/16.1.1/future:1419
    xbmc#13 0x7b61a281891f in std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter> std::__invoke_impl<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&>(std::__invoke_other, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&) /usr/include/c++/16.1.1/bits/invoke.h:63
    xbmc#14 0x7b61a28181f4 in std::enable_if<is_invocable_r_v<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&>, std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> >::type std::__invoke_r<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&>(std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&) /usr/include/c++/16.1.1/bits/invoke.h:116
    xbmc#15 0x7b61a2817ccc in std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int> >::_M_invoke(std::_Any_data const&) /usr/include/c++/16.1.1/bits/std_function.h:296
    xbmc#16 0x55873e2f7655 in std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (/usr/lib/kodi/kodi.bin+0x1105655) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#17 0x7f61f409d8fb  (/usr/lib/libc.so.6+0x9d8fb) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)
    xbmc#18 0x7f61f409d978 in pthread_once (/usr/lib/libc.so.6+0x9d978) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)
    xbmc#19 0x7b61a27ff278 in __gthread_once(int*, void (*)()) /usr/include/c++/16.1.1/x86_64-pc-linux-gnu/bits/gthr-default.h:746
    xbmc#20 0x7b61a27ff278 in void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) /usr/include/c++/16.1.1/mutex:923
    xbmc#21 0x7b61a27f5d0f in std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) /usr/include/c++/16.1.1/future:438
    xbmc#22 0x7b61a2816b22 in std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run() /usr/include/c++/16.1.1/future:1520
    xbmc#23 0x7b61a2802d63 in std::packaged_task<int ()>::operator()() /usr/include/c++/16.1.1/future:1643
    xbmc#24 0x7b61a27fba73 in UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}::operator()() const (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.22.3.10+0x9fba73) (BuildId: 10f583c374d6f7aa219a9f7ab1bbc26a66df313c)
    xbmc#25 0x7b61a2813811 in void std::__invoke_impl<void, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&>(std::__invoke_other, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&) /usr/include/c++/16.1.1/bits/invoke.h:63
    xbmc#26 0x7b61a2812f53 in std::enable_if<is_invocable_r_v<void, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&>, void>::type std::__invoke_r<void, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&>(UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.22.3.10+0xa12f53) (BuildId: 10f583c374d6f7aa219a9f7ab1bbc26a66df313c)
    xbmc#27 0x7b61a2811bae in std::_Function_handler<void (), UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}>::_M_invoke(std::_Any_data const&) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.22.3.10+0xa11bae) (BuildId: 10f583c374d6f7aa219a9f7ab1bbc26a66df313c)
    xbmc#28 0x7b61a2a8d1c1 in std::function<void ()>::operator()() const /usr/include/c++/16.1.1/bits/std_function.h:581
    xbmc#29 0x7b61a2a8c4bb in UTILS::THREAD::ThreadPool::Executor::Run() /home/dobo/kodi/inputstream.adaptive/src/utils/ThreadPool.cpp:70
    xbmc#30 0x7b61a2a8f5ca in void std::__invoke_impl<void, void (UTILS::THREAD::ThreadPool::Executor::*)(), UTILS::THREAD::ThreadPool::Executor*>(std::__invoke_memfun_deref, void (UTILS::THREAD::ThreadPool::Executor::*&&)(), UTILS::THREAD::ThreadPool::Executor*&&) /usr/include/c++/16.1.1/bits/invoke.h:76
```

2)
```
Indirect leak of 1631788 byte(s) in 62 object(s) allocated from:
    #0 0x7f61f712d4d1 in operator new[](unsigned long) (/usr/lib/libasan.so+0x12d4d1) (BuildId: ee5fbab73143ab257a66a33afe0f038a4af7a74e)
    #1 0x7b61a2b28288 in AP4_DataBuffer::ReallocateBuffer(unsigned int) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4DataBuffer.cpp:210
    xbmc#2 0x7b61a2b2813d in AP4_DataBuffer::SetDataSize(unsigned int) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4DataBuffer.cpp:151
    xbmc#3 0x7b61a2b4f537 in AP4_Sample::ReadData(AP4_DataBuffer&, unsigned int, unsigned int) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4Sample.cpp:156
    xbmc#4 0x7b61a2b4f469 in AP4_Sample::ReadData(AP4_DataBuffer&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4Sample.cpp:127
    xbmc#5 0x7b61a2b333b1 in AP4_LinearReader::Advance(bool) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4LinearReader.cpp:467
    xbmc#6 0x7b61a2b33709 in AP4_LinearReader::ReadNextSample(unsigned int, AP4_Sample&, AP4_DataBuffer&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4LinearReader.cpp:540
    xbmc#7 0x7b61a2a41871 in CLinearReader::ExecReadNextSample(CLinearReaderCB*, unsigned int, AP4_Sample&, AP4_DataBuffer&) /home/dobo/kodi/inputstream.adaptive/src/samplereader/FragmentedSampleReader.cpp:680
    xbmc#8 0x7b61a2a3beb2 in CFragmentedSampleReader::ReadSample() /home/dobo/kodi/inputstream.adaptive/src/samplereader/FragmentedSampleReader.cpp:158
    xbmc#9 0x7b61a2819586 in int std::__invoke_impl<int, int (ISampleReader::*&)(), ISampleReader*&>(std::__invoke_memfun_deref, int (ISampleReader::*&)(), ISampleReader*&) /usr/include/c++/16.1.1/bits/invoke.h:76
    xbmc#10 0x7b61a2818c4c in std::__invoke_result<int (ISampleReader::*&)(), ISampleReader*&>::type std::__invoke<int (ISampleReader::*&)(), ISampleReader*&>(int (ISampleReader::*&)(), ISampleReader*&) /usr/include/c++/16.1.1/bits/invoke.h:98
    xbmc#11 0x7b61a2818872 in int std::_Bind<int (ISampleReader::*(ISampleReader*))()>::__call<int, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) /usr/include/c++/16.1.1/functional:541
    xbmc#12 0x7b61a2818011 in int std::_Bind<int (ISampleReader::*(ISampleReader*))()>::operator()<, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&, std::_Bind<int (ISampleReader::*(ISampleReader*))()>, 0, int>(this std::_Bind<int (ISampleReader::*(ISampleReader*))()>&) /usr/include/c++/16.1.1/functional:645
    xbmc#13 0x7b61a2817c50 in int std::__invoke_impl<int, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&>(std::__invoke_other, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&) /usr/include/c++/16.1.1/bits/invoke.h:63
    xbmc#14 0x7b61a2817889 in std::enable_if<is_invocable_r_v<int, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&>, int>::type std::__invoke_r<int, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&>(std::_Bind<int (ISampleReader::*(ISampleReader*))()>&) /usr/include/c++/16.1.1/bits/invoke.h:116
    xbmc#15 0x7b61a28169c9 in std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}::operator()() const /usr/include/c++/16.1.1/future:1517
    xbmc#16 0x7b61a2818d6b in std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>::operator()() const /usr/include/c++/16.1.1/future:1419
    xbmc#17 0x7b61a281891f in std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter> std::__invoke_impl<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&>(std::__invoke_other, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&) /usr/include/c++/16.1.1/bits/invoke.h:63
    xbmc#18 0x7b61a28181f4 in std::enable_if<is_invocable_r_v<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&>, std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> >::type std::__invoke_r<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&>(std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&) /usr/include/c++/16.1.1/bits/invoke.h:116
    xbmc#19 0x7b61a2817ccc in std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int> >::_M_invoke(std::_Any_data const&) /usr/include/c++/16.1.1/bits/std_function.h:296
    xbmc#20 0x55873e2f7655 in std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (/usr/lib/kodi/kodi.bin+0x1105655) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#21 0x7f61f409d8fb  (/usr/lib/libc.so.6+0x9d8fb) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)
    xbmc#22 0x7f61f409d978 in pthread_once (/usr/lib/libc.so.6+0x9d978) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)
    xbmc#23 0x7b61a27ff278 in __gthread_once(int*, void (*)()) /usr/include/c++/16.1.1/x86_64-pc-linux-gnu/bits/gthr-default.h:746
    xbmc#24 0x7b61a27ff278 in void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) /usr/include/c++/16.1.1/mutex:923
    xbmc#25 0x7b61a27f5d0f in std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) /usr/include/c++/16.1.1/future:438
    xbmc#26 0x7b61a2816b22 in std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run() /usr/include/c++/16.1.1/future:1520
    xbmc#27 0x7b61a2802d63 in std::packaged_task<int ()>::operator()() /usr/include/c++/16.1.1/future:1643
    xbmc#28 0x7b61a27fba73 in UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}::operator()() const (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.22.3.10+0x9fba73) (BuildId: 10f583c374d6f7aa219a9f7ab1bbc26a66df313c)
    xbmc#29 0x7b61a2813811 in void std::__invoke_impl<void, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&>(std::__invoke_other, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&) /usr/include/c++/16.1.1/bits/invoke.h:63
    xbmc#30 0x7b61a2812f53 in std::enable_if<is_invocable_r_v<void, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&>, void>::type std::__invoke_r<void, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&>(UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.22.3.10+0xa12f53) (BuildId: 10f583c374d6f7aa219a9f7ab1bbc26a66df313c)
```
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Jun 8, 2026
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Jun 8, 2026
* Leak can be reproduced by playing 'Google tears [default_KID on common CP]'
  from plugin.video.isasamples.

Direct leak of 88 byte(s) in 1 object(s) allocated from:
    #0 0x78b3c6efe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x78b37a774b7e in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, unsigned long long&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cp
p:242
    xbmc#2 0x78b37a77487d in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cpp:154
    xbmc#3 0x78b37a5b55ce in adaptive::AdaptiveStream::parseIndexRange(PLAYLIST::CRepresentation*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/dobo/kodi/inputstream.adaptive/sr
c/common/AdaptiveStream.cpp:508
    xbmc#4 0x78b37a5bd0c5 in adaptive::AdaptiveStream::GenerateSidxSegments(PLAYLIST::CRepresentation*) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:1343
    xbmc#5 0x78b37a5b620d in adaptive::AdaptiveStream::start_stream(unsigned long) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:650
    xbmc#6 0x78b37a502434 in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:254
    xbmc#7 0x78b37a50e1fd in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xb0e1fd) (
BuildId: f190da3ba02e0d5058c85a1816f30382ce0a2e08)
    xbmc#8 0x63de0ca162b5 in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xb972b5) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#9 0x63de0ca94129 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xc15129) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x63de0ca948c2 in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xc158c2) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x63de0ca9a93f in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b93f) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x63de0ca9d1d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x63de0ccff85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x63de0cd081d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x78b3c46e1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x78b3c6e5cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x78b3c44a3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Jun 8, 2026
Fixes following sanitizer report:
=================================================================
==219283==ERROR: AddressSanitizer: heap-use-after-free on address 0x7d0453ac2330 at pc 0x7be408843f2d bp 0x7be40277dbf0 sp 0x7be40277dbe0
READ of size 8 at 0x7d0453ac2330 thread T64
    #0 0x7be408843f2c in std::__shared_ptr<AP4_CencSampleDecrypter, (__gnu_cxx::_Lock_policy)2>::operator bool() const /usr/include/c++/16.1.1/bits/shared_ptr_base.h:1756
    #1 0x7be40883c045 in CFragmentedSampleReader::ReadSample() /home/dobo/kodi/inputstream.adaptive/src/samplereader/FragmentedSampleReader.cpp:182
    xbmc#2 0x7be408619596 in int std::__invoke_impl<int, int (ISampleReader::*&)(), ISampleReader*&>(std::__invoke_memfun_deref, int (ISampleReader::*&)(), ISampleReader*&) /usr/include/c++/16.1.1/bits/invoke.h:76
    xbmc#3 0x7be408618c5c in std::__invoke_result<int (ISampleReader::*&)(), ISampleReader*&>::type std::__invoke<int (ISampleReader::*&)(), ISampleReader*&>(int (ISampleReader::*&)(), ISampleReader*&) /usr/include/c++/16.1.1/bits/invoke.h:98
    xbmc#4 0x7be408618882 in int std::_Bind<int (ISampleReader::*(ISampleReader*))()>::__call<int, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) /usr/include/c++/16.1.1/functional:541
    xbmc#5 0x7be408618021 in int std::_Bind<int (ISampleReader::*(ISampleReader*))()>::operator()<, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&, std::_Bind<int (ISampleReader::*(ISampleReader*))()>, 0, int>(this std::_Bind<int (ISampleReader::*(ISampleReader*))()>&) /usr/include/c++/16.1.1/functional:645
    xbmc#6 0x7be408617c60 in int std::__invoke_impl<int, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&>(std::__invoke_other, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&) /usr/include/c++/16.1.1/bits/invoke.h:63
    xbmc#7 0x7be408617899 in std::enable_if<is_invocable_r_v<int, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&>, int>::type std::__invoke_r<int, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&>(std::_Bind<int (ISampleReader::*(ISampleReader*))()>&) /usr/include/c++/16.1.1/bits/invoke.h:116
    xbmc#8 0x7be4086169d9 in std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}::operator()() const /usr/include/c++/16.1.1/future:1517
    xbmc#9 0x7be408618d7b in std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>::operator()() const /usr/include/c++/16.1.1/future:1419
    xbmc#10 0x7be40861892f in std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter> std::__invoke_impl<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&>(std::__invoke_other, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&) /usr/include/c++/16.1.1/bits/invoke.h:63
    xbmc#11 0x7be408618204 in std::enable_if<is_invocable_r_v<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&>, std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> >::type std::__invoke_r<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&>(std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&) /usr/include/c++/16.1.1/bits/invoke.h:116
    xbmc#12 0x7be408617cdc in std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int> >::_M_invoke(std::_Any_data const&) /usr/include/c++/16.1.1/bits/std_function.h:296
    xbmc#13 0x55fb298d6655 in std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (/usr/lib/kodi/kodi.bin+0x1105655) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#14 0x7fe45929d8fb  (/usr/lib/libc.so.6+0x9d8fb) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)
    xbmc#15 0x7fe45929d978 in pthread_once (/usr/lib/libc.so.6+0x9d978) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)
    xbmc#16 0x7be4085ff288 in __gthread_once(int*, void (*)()) /usr/include/c++/16.1.1/x86_64-pc-linux-gnu/bits/gthr-default.h:746
    xbmc#17 0x7be4085ff288 in void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) /usr/include/c++/16.1.1/mutex:923
    xbmc#18 0x7be4085f5d1f in std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) /usr/include/c++/16.1.1/future:438
    xbmc#19 0x7be408616b32 in std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run() /usr/include/c++/16.1.1/future:1520
    xbmc#20 0x7be408602d73 in std::packaged_task<int ()>::operator()() /usr/include/c++/16.1.1/future:1643
    xbmc#21 0x7be4085fba83 in UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}::operator()() const (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.22.3.10+0x9fba83) (BuildId: ce7c73d104d6d4f3d02b9148a58dfce1b1399311)
    xbmc#22 0x7be408613821 in void std::__invoke_impl<void, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&>(std::__invoke_other, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&) /usr/include/c++/16.1.1/bits/invoke.h:63
    xbmc#23 0x7be408612f63 in std::enable_if<is_invocable_r_v<void, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&>, void>::type std::__invoke_r<void, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&>(UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.22.3.10+0xa12f63) (BuildId: ce7c73d104d6d4f3d02b9148a58dfce1b1399311)
    xbmc#24 0x7be408611bbe in std::_Function_handler<void (), UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}>::_M_invoke(std::_Any_data const&) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.22.3.10+0xa11bbe) (BuildId: ce7c73d104d6d4f3d02b9148a58dfce1b1399311)
    xbmc#25 0x7be40888d1d1 in std::function<void ()>::operator()() const /usr/include/c++/16.1.1/bits/std_function.h:581
    xbmc#26 0x7be40888c4cb in UTILS::THREAD::ThreadPool::Executor::Run() /home/dobo/kodi/inputstream.adaptive/src/utils/ThreadPool.cpp:70
    xbmc#27 0x7be40888f5da in void std::__invoke_impl<void, void (UTILS::THREAD::ThreadPool::Executor::*)(), UTILS::THREAD::ThreadPool::Executor*>(std::__invoke_memfun_deref, void (UTILS::THREAD::ThreadPool::Executor::*&&)(), UTILS::THREAD::ThreadPool::Executor*&&) /usr/include/c++/16.1.1/bits/invoke.h:76
    xbmc#28 0x7be40888f4c8 in std::__invoke_result<void (UTILS::THREAD::ThreadPool::Executor::*)(), UTILS::THREAD::ThreadPool::Executor*>::type std::__invoke<void (UTILS::THREAD::ThreadPool::Executor::*)(), UTILS::THREAD::ThreadPool::Executor*>(void (UTILS::THREAD::ThreadPool::Executor::*&&)(), UTILS::THREAD::ThreadPool::Executor*&&) /usr/include/c++/16.1.1/bits/invoke.h:98
    xbmc#29 0x7be40888f44a in void std::thread::_Invoker<std::tuple<void (UTILS::THREAD::ThreadPool::Executor::*)(), UTILS::THREAD::ThreadPool::Executor*> >::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/include/c++/16.1.1/bits/std_thread.h:303
    xbmc#30 0x7be40888f403 in std::thread::_Invoker<std::tuple<void (UTILS::THREAD::ThreadPool::Executor::*)(), UTILS::THREAD::ThreadPool::Executor*> >::operator()() /usr/include/c++/16.1.1/bits/std_thread.h:310
    xbmc#31 0x7be40888f3e7 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (UTILS::THREAD::ThreadPool::Executor::*)(), UTILS::THREAD::ThreadPool::Executor*> > >::_M_run() /usr/include/c++/16.1.1/bits/std_thread.h:255
    xbmc#32 0x7fe4596eb918  (/usr/lib/libstdc++.so.6+0xeb918) (BuildId: 4749d5ce79ac21b5e837c001c58e342b35197e4b)
    xbmc#33 0x7fe45c0618d8  (/usr/lib/libasan.so+0x618d8) (BuildId: ee5fbab73143ab257a66a33afe0f038a4af7a74e)
    xbmc#34 0x7fe4592981b8  (/usr/lib/libc.so.6+0x981b8) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)
    xbmc#35 0x7fe45931d21b  (/usr/lib/libc.so.6+0x11d21b) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)

0x7d0453ac2330 is located 240 bytes inside of 288-byte region [0x7d0453ac2240,0x7d0453ac2360)
freed by thread T57 here:
    #0 0x7fe45c12e4c1 in operator delete(void*, unsigned long) (/usr/lib/libasan.so+0x12e4c1) (BuildId: ee5fbab73143ab257a66a33afe0f038a4af7a74e)
    #1 0x7be40883b3be in CFragmentedSampleReader::~CFragmentedSampleReader() /home/dobo/kodi/inputstream.adaptive/src/samplereader/FragmentedSampleReader.cpp:62
    xbmc#2 0x7be40863ad02 in std::default_delete<ISampleReader>::operator()(ISampleReader*) const /usr/include/c++/16.1.1/bits/unique_ptr.h:92
    xbmc#3 0x7be4086be093 in std::__uniq_ptr_impl<ISampleReader, std::default_delete<ISampleReader> >::reset(ISampleReader*) /usr/include/c++/16.1.1/bits/unique_ptr.h:204
    xbmc#4 0x7be4086bd915 in std::unique_ptr<ISampleReader, std::default_delete<ISampleReader> >::reset(ISampleReader*) /usr/include/c++/16.1.1/bits/unique_ptr.h:511
    xbmc#5 0x7be4086bd1ec in SESSION::CStream::UnlinkStream() /home/dobo/kodi/inputstream.adaptive/src/Stream.cpp:114
    xbmc#6 0x7be4085ed98b in CInputStreamAdaptive::EnableStream(int, bool) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:157
    xbmc#7 0x7be4085f9f3f in kodi::addon::CInstanceInputStream::ADDON_EnableStream(AddonInstance_InputStream const*, int, bool) /usr/include/kodi/addon-instance/Inputstream.h:2006
    xbmc#8 0x55fb2953d0bd  (/usr/lib/kodi/kodi.bin+0xd6c0bd) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#9 0x55fb294ecf1f in CVideoPlayer::OnExit() (/usr/lib/kodi/kodi.bin+0xd1bf1f) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#10 0x55fb298da2f7 in CThread::Action() (/usr/lib/kodi/kodi.bin+0x11092f7) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#11 0x55fb298df618  (/usr/lib/kodi/kodi.bin+0x110e618) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#12 0x7fe4596eb918  (/usr/lib/libstdc++.so.6+0xeb918) (BuildId: 4749d5ce79ac21b5e837c001c58e342b35197e4b)
    xbmc#13 0x7fe45c0618d8  (/usr/lib/libasan.so+0x618d8) (BuildId: ee5fbab73143ab257a66a33afe0f038a4af7a74e)
    xbmc#14 0x7fe4592981b8  (/usr/lib/libc.so.6+0x981b8) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)

previously allocated by thread T57 here:
    #0 0x7fe45c12d341 in operator new(unsigned long) (/usr/lib/libasan.so+0x12d341) (BuildId: ee5fbab73143ab257a66a33afe0f038a4af7a74e)
    #1 0x7be4088442da in std::__detail::_MakeUniq<CFragmentedSampleReader>::__single_object std::make_unique<CFragmentedSampleReader, std::shared_ptr<CLinearReader>&, AP4_Track*&>(std::shared_ptr<CLinearReader>&, AP4_Track*&) /usr/include/c++/16.1.1/bits/unique_ptr.h:1086
    xbmc#2 0x7be40883d940 in CFragmentedSampleReader::CreateReaderByTrack() /home/dobo/kodi/inputstream.adaptive/src/samplereader/FragmentedSampleReader.cpp:319
    xbmc#3 0x7be4086bcc85 in SESSION::CStream::LinkStream(std::shared_ptr<SESSION::CStream>, int) /home/dobo/kodi/inputstream.adaptive/src/Stream.cpp:78
    xbmc#4 0x7be4085edebf in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:285
    xbmc#5 0x7be4085fa046 in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) /usr/include/kodi/addon-instance/Inputstream.h:2012
    xbmc#6 0x55fb29468dac in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xc97dac) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#7 0x55fb294f5589 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xd24589) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#8 0x55fb294e7b0a in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xd16b0a) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#9 0x55fb294e91f4 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xd181f4) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#10 0x55fb294eab6c in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xd19b6c) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#11 0x55fb298da2ee in CThread::Action() (/usr/lib/kodi/kodi.bin+0x11092ee) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#12 0x55fb298df618  (/usr/lib/kodi/kodi.bin+0x110e618) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#13 0x7fe4596eb918  (/usr/lib/libstdc++.so.6+0xeb918) (BuildId: 4749d5ce79ac21b5e837c001c58e342b35197e4b)
    xbmc#14 0x7fe45c0618d8  (/usr/lib/libasan.so+0x618d8) (BuildId: ee5fbab73143ab257a66a33afe0f038a4af7a74e)
    xbmc#15 0x7fe4592981b8  (/usr/lib/libc.so.6+0x981b8) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)

Thread T64 created by T57 here:
    #0 0x7fe45c122774 in pthread_create (/usr/lib/libasan.so+0x122774) (BuildId: ee5fbab73143ab257a66a33afe0f038a4af7a74e)
    #1 0x7fe4596eba21 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (/usr/lib/libstdc++.so.6+0xeba21) (BuildId: 4749d5ce79ac21b5e837c001c58e342b35197e4b)
    xbmc#2 0x7be40888d038 in std::thread::thread<void (UTILS::THREAD::ThreadPool::Executor::*)(), UTILS::THREAD::ThreadPool::Executor*, void>(void (UTILS::THREAD::ThreadPool::Executor::*&&)(), UTILS::THREAD::ThreadPool::Executor*&&) /usr/include/c++/16.1.1/bits/std_thread.h:175
    xbmc#3 0x7be40888c27e in UTILS::THREAD::ThreadPool::Executor::Executor(UTILS::THREAD::ThreadPool&) /home/dobo/kodi/inputstream.adaptive/src/utils/ThreadPool.cpp:55
    xbmc#4 0x7be408602f94 in std::__detail::_MakeUniq<UTILS::THREAD::ThreadPool::Executor>::__single_object std::make_unique<UTILS::THREAD::ThreadPool::Executor, UTILS::THREAD::ThreadPool&>(UTILS::THREAD::ThreadPool&) /usr/include/c++/16.1.1/bits/unique_ptr.h:1086
    xbmc#5 0x7be4085fbf72 in auto UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.22.3.10+0x9fbf72) (BuildId: ce7c73d104d6d4f3d02b9148a58dfce1b1399311)
    xbmc#6 0x7be4085fc3dc in ISampleReader::ReadSampleAsync() (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.22.3.10+0x9fc3dc) (BuildId: ce7c73d104d6d4f3d02b9148a58dfce1b1399311)
    xbmc#7 0x7be4085ef0b8 in CInputStreamAdaptive::DemuxRead() /home/dobo/kodi/inputstream.adaptive/src/main.cpp:381
    xbmc#8 0x7be4085fa449 in kodi::addon::CInstanceInputStream::ADDON_DemuxRead(AddonInstance_InputStream const*) /usr/include/kodi/addon-instance/Inputstream.h:2032
    xbmc#9 0x55fb294688a4 in CDVDDemuxClient::Read() (/usr/lib/kodi/kodi.bin+0xc978a4) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#10 0x55fb294e869d in CVideoPlayer::ReadPacket(DemuxPacket*&, CDemuxStream*&) (/usr/lib/kodi/kodi.bin+0xd1769d) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#11 0x55fb294eae22 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xd19e22) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#12 0x55fb298da2ee in CThread::Action() (/usr/lib/kodi/kodi.bin+0x11092ee) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#13 0x55fb298df618  (/usr/lib/kodi/kodi.bin+0x110e618) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#14 0x7fe4596eb918  (/usr/lib/libstdc++.so.6+0xeb918) (BuildId: 4749d5ce79ac21b5e837c001c58e342b35197e4b)
    xbmc#15 0x7fe45c0618d8  (/usr/lib/libasan.so+0x618d8) (BuildId: ee5fbab73143ab257a66a33afe0f038a4af7a74e)
    xbmc#16 0x7fe4592981b8  (/usr/lib/libc.so.6+0x981b8) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)

Thread T57 created by T0 here:
    #0 0x7fe45c122774 in pthread_create (/usr/lib/libasan.so+0x122774) (BuildId: ee5fbab73143ab257a66a33afe0f038a4af7a74e)
    #1 0x7fe4596eba21 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) (/usr/lib/libstdc++.so.6+0xeba21) (BuildId: 4749d5ce79ac21b5e837c001c58e342b35197e4b)
    xbmc#2 0x55fb298da1a2  (/usr/lib/kodi/kodi.bin+0x11091a2) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#3 0x55fb294e3181 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xd12181) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#4 0x55fb29b5310d in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x138210d) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#5 0x55fb29b347ca in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x13637ca) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#6 0x55fb29d7ecd8 in KODI::PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x15adcd8) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#7 0x55fb29d7f9ef in KODI::PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x15ae9ef) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#8 0x55fb29d8ae07 in KODI::PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x15b9e07) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#9 0x55fb2994f9b5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x117e9b5) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#10 0x55fb2994fb85 in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0x117eb85) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#11 0x55fb29b387dc in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x13677dc) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#12 0x55fb29b340cb in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x13630cb) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#13 0x55fb291ef38f in main (/usr/lib/kodi/kodi.bin+0xa1e38f) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#14 0x7fe459227740  (/usr/lib/libc.so.6+0x27740) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)
    xbmc#15 0x7fe459227878 in __libc_start_main (/usr/lib/libc.so.6+0x27878) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)
    xbmc#16 0x55fb29250154 in _start (/usr/lib/kodi/kodi.bin+0xa7f154) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)

SUMMARY: AddressSanitizer: heap-use-after-free /home/dobo/kodi/inputstream.adaptive/src/samplereader/FragmentedSampleReader.cpp:182 in CFragmentedSampleReader::ReadSample()
Shadow bytes around the buggy address:
  0x7d0453ac2080: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
  0x7d0453ac2100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x7d0453ac2180: 00 00 00 00 00 00 00 00 00 00 00 00 fa fa fa fa
  0x7d0453ac2200: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
  0x7d0453ac2280: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
=>0x7d0453ac2300: fd fd fd fd fd fd[fd]fd fd fd fd fd fa fa fa fa
  0x7d0453ac2380: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
  0x7d0453ac2400: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x7d0453ac2480: fd fd fd fd fd fd fd fd fd fa fa fa fa fa fa fa
  0x7d0453ac2500: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd
  0x7d0453ac2580: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
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
==219283==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Jun 8, 2026
…deo) streams

* First patch reverts faulty commit from Kodi fork which introduces
  leaks.
* Second patch is grabbed from upstream Bento4 (and correctly fixes
  issue that faulty commit was trying to fix).
* Third comes from axiomatic-systems/Bento4#1069.

Test stream: https://storage.videos.solomon.tech/streaming-playlists/hls/edfcff7a-a8e1-4326-a2e7-424411aa189f/eaaa4f76-eef4-443e-821c-a34c36c15351-master.m3u8

Address sanitizer reports:

1)
```
Direct leak of 2480 byte(s) in 62 object(s) allocated from:
    #0 0x7f61f712d341 in operator new(unsigned long) (/usr/lib/libasan.so+0x12d341) (BuildId: ee5fbab73143ab257a66a33afe0f038a4af7a74e)
    #1 0x7b61a2b33313 in AP4_LinearReader::Advance(bool) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4LinearReader.cpp:461
    xbmc#2 0x7b61a2b33709 in AP4_LinearReader::ReadNextSample(unsigned int, AP4_Sample&, AP4_DataBuffer&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4LinearReader.cpp:540
    xbmc#3 0x7b61a2a41871 in CLinearReader::ExecReadNextSample(CLinearReaderCB*, unsigned int, AP4_Sample&, AP4_DataBuffer&) /home/dobo/kodi/inputstream.adaptive/src/samplereader/FragmentedSampleReader.cpp:680
    xbmc#4 0x7b61a2a3beb2 in CFragmentedSampleReader::ReadSample() /home/dobo/kodi/inputstream.adaptive/src/samplereader/FragmentedSampleReader.cpp:158
    xbmc#5 0x7b61a2819586 in int std::__invoke_impl<int, int (ISampleReader::*&)(), ISampleReader*&>(std::__invoke_memfun_deref, int (ISampleReader::*&)(), ISampleReader*&) /usr/include/c++/16.1.1/bits/invoke.h:76
    xbmc#6 0x7b61a2818c4c in std::__invoke_result<int (ISampleReader::*&)(), ISampleReader*&>::type std::__invoke<int (ISampleReader::*&)(), ISampleReader*&>(int (ISampleReader::*&)(), ISampleReader*&) /usr/include/c++/16.1.1/bits/invoke.h:98
    xbmc#7 0x7b61a2818872 in int std::_Bind<int (ISampleReader::*(ISampleReader*))()>::__call<int, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) /usr/include/c++/16.1.1/functional:541
    xbmc#8 0x7b61a2818011 in int std::_Bind<int (ISampleReader::*(ISampleReader*))()>::operator()<, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&, std::_Bind<int (ISampleReader::*(ISampleReader*))()>, 0, int>(this std::_Bind<int (ISampleReader::*(ISampleReader*))()>&) /usr/include/c++/16.1.1/functional:645
    xbmc#9 0x7b61a2817c50 in int std::__invoke_impl<int, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&>(std::__invoke_other, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&) /usr/include/c++/16.1.1/bits/invoke.h:63
    xbmc#10 0x7b61a2817889 in std::enable_if<is_invocable_r_v<int, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&>, int>::type std::__invoke_r<int, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&>(std::_Bind<int (ISampleReader::*(ISampleReader*))()>&) /usr/include/c++/16.1.1/bits/invoke.h:116
    xbmc#11 0x7b61a28169c9 in std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}::operator()() const /usr/include/c++/16.1.1/future:1517
    xbmc#12 0x7b61a2818d6b in std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>::operator()() const /usr/include/c++/16.1.1/future:1419
    xbmc#13 0x7b61a281891f in std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter> std::__invoke_impl<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&>(std::__invoke_other, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&) /usr/include/c++/16.1.1/bits/invoke.h:63
    xbmc#14 0x7b61a28181f4 in std::enable_if<is_invocable_r_v<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&>, std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> >::type std::__invoke_r<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&>(std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&) /usr/include/c++/16.1.1/bits/invoke.h:116
    xbmc#15 0x7b61a2817ccc in std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int> >::_M_invoke(std::_Any_data const&) /usr/include/c++/16.1.1/bits/std_function.h:296
    xbmc#16 0x55873e2f7655 in std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (/usr/lib/kodi/kodi.bin+0x1105655) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#17 0x7f61f409d8fb  (/usr/lib/libc.so.6+0x9d8fb) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)
    xbmc#18 0x7f61f409d978 in pthread_once (/usr/lib/libc.so.6+0x9d978) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)
    xbmc#19 0x7b61a27ff278 in __gthread_once(int*, void (*)()) /usr/include/c++/16.1.1/x86_64-pc-linux-gnu/bits/gthr-default.h:746
    xbmc#20 0x7b61a27ff278 in void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) /usr/include/c++/16.1.1/mutex:923
    xbmc#21 0x7b61a27f5d0f in std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) /usr/include/c++/16.1.1/future:438
    xbmc#22 0x7b61a2816b22 in std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run() /usr/include/c++/16.1.1/future:1520
    xbmc#23 0x7b61a2802d63 in std::packaged_task<int ()>::operator()() /usr/include/c++/16.1.1/future:1643
    xbmc#24 0x7b61a27fba73 in UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}::operator()() const (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.22.3.10+0x9fba73) (BuildId: 10f583c374d6f7aa219a9f7ab1bbc26a66df313c)
    xbmc#25 0x7b61a2813811 in void std::__invoke_impl<void, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&>(std::__invoke_other, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&) /usr/include/c++/16.1.1/bits/invoke.h:63
    xbmc#26 0x7b61a2812f53 in std::enable_if<is_invocable_r_v<void, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&>, void>::type std::__invoke_r<void, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&>(UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.22.3.10+0xa12f53) (BuildId: 10f583c374d6f7aa219a9f7ab1bbc26a66df313c)
    xbmc#27 0x7b61a2811bae in std::_Function_handler<void (), UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}>::_M_invoke(std::_Any_data const&) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.22.3.10+0xa11bae) (BuildId: 10f583c374d6f7aa219a9f7ab1bbc26a66df313c)
    xbmc#28 0x7b61a2a8d1c1 in std::function<void ()>::operator()() const /usr/include/c++/16.1.1/bits/std_function.h:581
    xbmc#29 0x7b61a2a8c4bb in UTILS::THREAD::ThreadPool::Executor::Run() /home/dobo/kodi/inputstream.adaptive/src/utils/ThreadPool.cpp:70
    xbmc#30 0x7b61a2a8f5ca in void std::__invoke_impl<void, void (UTILS::THREAD::ThreadPool::Executor::*)(), UTILS::THREAD::ThreadPool::Executor*>(std::__invoke_memfun_deref, void (UTILS::THREAD::ThreadPool::Executor::*&&)(), UTILS::THREAD::ThreadPool::Executor*&&) /usr/include/c++/16.1.1/bits/invoke.h:76
```

2)
```
Indirect leak of 1631788 byte(s) in 62 object(s) allocated from:
    #0 0x7f61f712d4d1 in operator new[](unsigned long) (/usr/lib/libasan.so+0x12d4d1) (BuildId: ee5fbab73143ab257a66a33afe0f038a4af7a74e)
    #1 0x7b61a2b28288 in AP4_DataBuffer::ReallocateBuffer(unsigned int) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4DataBuffer.cpp:210
    xbmc#2 0x7b61a2b2813d in AP4_DataBuffer::SetDataSize(unsigned int) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4DataBuffer.cpp:151
    xbmc#3 0x7b61a2b4f537 in AP4_Sample::ReadData(AP4_DataBuffer&, unsigned int, unsigned int) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4Sample.cpp:156
    xbmc#4 0x7b61a2b4f469 in AP4_Sample::ReadData(AP4_DataBuffer&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4Sample.cpp:127
    xbmc#5 0x7b61a2b333b1 in AP4_LinearReader::Advance(bool) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4LinearReader.cpp:467
    xbmc#6 0x7b61a2b33709 in AP4_LinearReader::ReadNextSample(unsigned int, AP4_Sample&, AP4_DataBuffer&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4LinearReader.cpp:540
    xbmc#7 0x7b61a2a41871 in CLinearReader::ExecReadNextSample(CLinearReaderCB*, unsigned int, AP4_Sample&, AP4_DataBuffer&) /home/dobo/kodi/inputstream.adaptive/src/samplereader/FragmentedSampleReader.cpp:680
    xbmc#8 0x7b61a2a3beb2 in CFragmentedSampleReader::ReadSample() /home/dobo/kodi/inputstream.adaptive/src/samplereader/FragmentedSampleReader.cpp:158
    xbmc#9 0x7b61a2819586 in int std::__invoke_impl<int, int (ISampleReader::*&)(), ISampleReader*&>(std::__invoke_memfun_deref, int (ISampleReader::*&)(), ISampleReader*&) /usr/include/c++/16.1.1/bits/invoke.h:76
    xbmc#10 0x7b61a2818c4c in std::__invoke_result<int (ISampleReader::*&)(), ISampleReader*&>::type std::__invoke<int (ISampleReader::*&)(), ISampleReader*&>(int (ISampleReader::*&)(), ISampleReader*&) /usr/include/c++/16.1.1/bits/invoke.h:98
    xbmc#11 0x7b61a2818872 in int std::_Bind<int (ISampleReader::*(ISampleReader*))()>::__call<int, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) /usr/include/c++/16.1.1/functional:541
    xbmc#12 0x7b61a2818011 in int std::_Bind<int (ISampleReader::*(ISampleReader*))()>::operator()<, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&, std::_Bind<int (ISampleReader::*(ISampleReader*))()>, 0, int>(this std::_Bind<int (ISampleReader::*(ISampleReader*))()>&) /usr/include/c++/16.1.1/functional:645
    xbmc#13 0x7b61a2817c50 in int std::__invoke_impl<int, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&>(std::__invoke_other, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&) /usr/include/c++/16.1.1/bits/invoke.h:63
    xbmc#14 0x7b61a2817889 in std::enable_if<is_invocable_r_v<int, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&>, int>::type std::__invoke_r<int, std::_Bind<int (ISampleReader::*(ISampleReader*))()>&>(std::_Bind<int (ISampleReader::*(ISampleReader*))()>&) /usr/include/c++/16.1.1/bits/invoke.h:116
    xbmc#15 0x7b61a28169c9 in std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}::operator()() const /usr/include/c++/16.1.1/future:1517
    xbmc#16 0x7b61a2818d6b in std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>::operator()() const /usr/include/c++/16.1.1/future:1419
    xbmc#17 0x7b61a281891f in std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter> std::__invoke_impl<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&>(std::__invoke_other, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&) /usr/include/c++/16.1.1/bits/invoke.h:63
    xbmc#18 0x7b61a28181f4 in std::enable_if<is_invocable_r_v<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&>, std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> >::type std::__invoke_r<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&>(std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int>&) /usr/include/c++/16.1.1/bits/invoke.h:116
    xbmc#19 0x7b61a2817ccc in std::_Function_handler<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> (), std::__future_base::_Task_setter<std::unique_ptr<std::__future_base::_Result<int>, std::__future_base::_Result_base::_Deleter>, std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run()::{lambda()#1}, int> >::_M_invoke(std::_Any_data const&) /usr/include/c++/16.1.1/bits/std_function.h:296
    xbmc#20 0x55873e2f7655 in std::__future_base::_State_baseV2::_M_do_set(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*) (/usr/lib/kodi/kodi.bin+0x1105655) (BuildId: 71f55ec6f5d4c4b2e18830e9d6568f84c558efc1)
    xbmc#21 0x7f61f409d8fb  (/usr/lib/libc.so.6+0x9d8fb) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)
    xbmc#22 0x7f61f409d978 in pthread_once (/usr/lib/libc.so.6+0x9d978) (BuildId: 020d6f7c33b2413f4fe10814c4729dce1387f049)
    xbmc#23 0x7b61a27ff278 in __gthread_once(int*, void (*)()) /usr/include/c++/16.1.1/x86_64-pc-linux-gnu/bits/gthr-default.h:746
    xbmc#24 0x7b61a27ff278 in void std::call_once<void (std::__future_base::_State_baseV2::*)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*>(std::once_flag&, void (std::__future_base::_State_baseV2::*&&)(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*, bool*), std::__future_base::_State_baseV2*&&, std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>*&&, bool*&&) /usr/include/c++/16.1.1/mutex:923
    xbmc#25 0x7b61a27f5d0f in std::__future_base::_State_baseV2::_M_set_result(std::function<std::unique_ptr<std::__future_base::_Result_base, std::__future_base::_Result_base::_Deleter> ()>, bool) /usr/include/c++/16.1.1/future:438
    xbmc#26 0x7b61a2816b22 in std::__future_base::_Task_state<std::_Bind<int (ISampleReader::*(ISampleReader*))()>, std::allocator<int>, int ()>::_M_run() /usr/include/c++/16.1.1/future:1520
    xbmc#27 0x7b61a2802d63 in std::packaged_task<int ()>::operator()() /usr/include/c++/16.1.1/future:1643
    xbmc#28 0x7b61a27fba73 in UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}::operator()() const (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.22.3.10+0x9fba73) (BuildId: 10f583c374d6f7aa219a9f7ab1bbc26a66df313c)
    xbmc#29 0x7b61a2813811 in void std::__invoke_impl<void, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&>(std::__invoke_other, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&) /usr/include/c++/16.1.1/bits/invoke.h:63
    xbmc#30 0x7b61a2812f53 in std::enable_if<is_invocable_r_v<void, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&>, void>::type std::__invoke_r<void, UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&>(UTILS::THREAD::ThreadPool::Execute<int (ISampleReader::*)(), ISampleReader*>(int (ISampleReader::*&&)(), ISampleReader*&&)::{lambda()#1}&) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.22.3.10+0xa12f53) (BuildId: 10f583c374d6f7aa219a9f7ab1bbc26a66df313c)
```
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Jun 8, 2026
Temporary string is destroyed just after invoking substr function.
Make a temporary value to make it live longer.

Fixes following address sanitizer bug:
=================================================================
==53568==ERROR: AddressSanitizer: stack-use-after-scope on address 0x754451bfa872 at pc 0x75444c11cb38 bp 0x754453e263e0 sp 0x754453e263d0
READ of size 1 at 0x754451bfa872 thread T51
    #0 0x75444c11cb37 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283
    #1 0x75444bf61144 in SESSION::CSession::ExtractStreamProtectionData(PLAYLIST::CPeriod::PSSHSet&, std::vector<unsigned char, std::allocator<unsigned char> >&, std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > >) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:1566
    xbmc#2 0x75444bf55252 in SESSION::CSession::InitializeDRM(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:495
    xbmc#3 0x75444bf56965 in SESSION::CSession::InitializePeriod(bool) /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:640
    xbmc#4 0x75444bf523be in SESSION::CSession::Initialize() /home/dobo/kodi/inputstream.adaptive/src/Session.cpp:237
    xbmc#5 0x75444bf251ef in CInputStreamAdaptive::Open(kodi::addon::InputstreamProperty const&) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:48
    xbmc#6 0x75444bf3183a in kodi::addon::CInstanceInputStream::ADDON_Open(AddonInstance_InputStream const*, INPUTSTREAM_PROPERTY*) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.7+0xb3183a) (BuildId: 1e293c714edf852eb04547965bf0899f0d082db2)
    xbmc#7 0x5c8d9dd6f1fd in CInputStreamAddon::Open() (/usr/lib/kodi/kodi.bin+0xb7b1fd) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9ddf79c3 in CVideoPlayer::OpenInputStream() (/usr/lib/kodi/kodi.bin+0xc039c3) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9de043f2 in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc103f2) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9de08c03 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc14c03) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e06cd8e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe78d8e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e07d704  (/usr/lib/kodi/kodi.bin+0xe89704) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x7544936e1c33 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#14 0x754495a5d109 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#15 0x7544934a339c  (/usr/lib/libc.so.6+0x9439c) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x75449352849b  (/usr/lib/libc.so.6+0x11949b) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)

Address 0x754451bfa872 is located in stack of thread T51 at offset 114 in frame
    #0 0x75444c11c950 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&) /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:278

  This frame has 3 object(s):
    [48, 49) 'byte' (line 282)
    [64, 72) 'end' (line 281)
    [96, 128) '<unknown>' <== Memory access at offset 114 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)
Thread T51 created by T0 here:
    #0 0x754495af468b in pthread_create /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:245
    #1 0x7544936e1d31 in __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:676
    xbmc#2 0x7544936e1d31 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172
    xbmc#3 0x5c8d9e06c750 in CThread::Create(bool) (/usr/lib/kodi/kodi.bin+0xe78750) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#4 0x5c8d9ddfc252 in CVideoPlayer::OpenFile(CFileItem const&, CPlayerOptions const&) (/usr/lib/kodi/kodi.bin+0xc08252) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#5 0x5c8d9e2346d8 in CApplicationPlayer::OpenFile(CFileItem const&, CPlayerOptions const&, CPlayerCoreFactory const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, IPlayerCallback&) (/usr/lib/kodi/kodi.bin+0x10406d8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#6 0x5c8d9e23bc80 in CApplication::PlayFile(CFileItem, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (/usr/lib/kodi/kodi.bin+0x1047c80) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#7 0x5c8d9e3c433f in PLAYLIST::CPlayListPlayer::Play(int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool) (/usr/lib/kodi/kodi.bin+0x11d033f) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#8 0x5c8d9e3c506e in PLAYLIST::CPlayListPlayer::Play() (/usr/lib/kodi/kodi.bin+0x11d106e) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#9 0x5c8d9e3d7e28 in PLAYLIST::CPlayListPlayer::OnApplicationMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0x11e3e28) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#10 0x5c8d9e0d0dd5 in KODI::MESSAGING::CApplicationMessenger::ProcessMessage(KODI::MESSAGING::ThreadMessage*) (/usr/lib/kodi/kodi.bin+0xedcdd5) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#11 0x5c8d9e0d106a in KODI::MESSAGING::CApplicationMessenger::ProcessMessages() (/usr/lib/kodi/kodi.bin+0xedd06a) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#12 0x5c8d9e24160d in CApplication::Process() (/usr/lib/kodi/kodi.bin+0x104d60d) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#13 0x5c8d9e2359c8 in CApplication::Run() (/usr/lib/kodi/kodi.bin+0x10419c8) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#14 0x5c8d9da97aa6 in main (/usr/lib/kodi/kodi.bin+0x8a3aa6) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)
    xbmc#15 0x754493434e07  (/usr/lib/libc.so.6+0x25e07) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#16 0x754493434ecb in __libc_start_main (/usr/lib/libc.so.6+0x25ecb) (BuildId: 98b3d8e0b8c534c769cb871c438b4f8f3a8e4bf3)
    xbmc#17 0x5c8d9daf7a34 in _start (/usr/lib/kodi/kodi.bin+0x903a34) (BuildId: f1ebb663e69a97fd2fbf23874f59fc825294575d)

SUMMARY: AddressSanitizer: stack-use-after-scope /home/dobo/kodi/inputstream.adaptive/src/utils/StringUtils.cpp:283 in UTILS::STRING::ToHexBytes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<unsigned char, std::allocator<unsigned char> >&)
Shadow bytes around the buggy address:
  0x754451bfa580: f5 f5 f5 f5 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa600: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa680: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00
  0x754451bfa700: f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5 f5
  0x754451bfa780: f5 f5 f5 f5 f5 f5 f5 f5 00 00 00 00 00 00 00 00
=>0x754451bfa800: f1 f1 f1 f1 f1 f1 01 f2 00 f2 f2 f2 f8 f8[f8]f8
  0x754451bfa880: f3 f3 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa900: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfa980: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x754451bfaa80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
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
==53568==ABORTING
dobo90 added a commit to dobo90/inputstream.adaptive that referenced this pull request Jun 8, 2026
* Leak can be reproduced by playing 'Google tears [default_KID on common CP]'
  from plugin.video.isasamples.

Direct leak of 88 byte(s) in 1 object(s) allocated from:
    #0 0x78b3c6efe392 in operator new(unsigned long) /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x78b37a774b7e in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, unsigned long long&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cp
p:242
    xbmc#2 0x78b37a77487d in AP4_AtomFactory::CreateAtomFromStream(AP4_ByteStream&, AP4_Atom*&) /home/dobo/kodi/inputstream.adaptive/bento4/src/bento4/Source/C++/Core/Ap4AtomFactory.cpp:154
    xbmc#3 0x78b37a5b55ce in adaptive::AdaptiveStream::parseIndexRange(PLAYLIST::CRepresentation*, std::vector<unsigned char, std::allocator<unsigned char> > const&) /home/dobo/kodi/inputstream.adaptive/sr
c/common/AdaptiveStream.cpp:508
    xbmc#4 0x78b37a5bd0c5 in adaptive::AdaptiveStream::GenerateSidxSegments(PLAYLIST::CRepresentation*) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:1343
    xbmc#5 0x78b37a5b620d in adaptive::AdaptiveStream::start_stream(unsigned long) /home/dobo/kodi/inputstream.adaptive/src/common/AdaptiveStream.cpp:650
    xbmc#6 0x78b37a502434 in CInputStreamAdaptive::OpenStream(int) /home/dobo/kodi/inputstream.adaptive/src/main.cpp:254
    xbmc#7 0x78b37a50e1fd in kodi::addon::CInstanceInputStream::ADDON_OpenStream(AddonInstance_InputStream const*, int) (/usr/lib/kodi/addons/inputstream.adaptive/inputstream.adaptive.so.21.5.9+0xb0e1fd) (
BuildId: f190da3ba02e0d5058c85a1816f30382ce0a2e08)
    xbmc#8 0x63de0ca162b5 in CDVDDemuxClient::OpenStream(int) (/usr/lib/kodi/kodi.bin+0xb972b5) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#9 0x63de0ca94129 in CVideoPlayer::OpenStream(CCurrentStream&, long, int, int, bool) (/usr/lib/kodi/kodi.bin+0xc15129) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#10 0x63de0ca948c2 in CVideoPlayer::OpenDefaultStreams(bool) (/usr/lib/kodi/kodi.bin+0xc158c2) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#11 0x63de0ca9a93f in CVideoPlayer::Prepare() (/usr/lib/kodi/kodi.bin+0xc1b93f) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#12 0x63de0ca9d1d3 in CVideoPlayer::Process() (/usr/lib/kodi/kodi.bin+0xc1e1d3) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#13 0x63de0ccff85e in CThread::Action() (/usr/lib/kodi/kodi.bin+0xe8085e) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#14 0x63de0cd081d4  (/usr/lib/kodi/kodi.bin+0xe891d4) (BuildId: 23d1103e1367c2f49a1740c7881fb1656fe68f51)
    xbmc#15 0x78b3c46e1f73 in execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
    xbmc#16 0x78b3c6e5cec9 in asan_thread_start /usr/src/debug/gcc/gcc/libsanitizer/asan/asan_interceptors.cpp:234
    xbmc#17 0x78b3c44a3707  (/usr/lib/libc.so.6+0x95707) (BuildId: d056ce83eebe65ce7e52ecfa5af5363e4863d283)
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

Successfully merging this pull request may close these issues.

2 participants