Skip to content

Commit 0167a18

Browse files
committed
[io] Protect out-of-bounds access in R__WriteDestructorBody:
Fixes assert in roottest/root/meta/MakeProject/runcms310.C ``` /builddir/build/BUILD/gcc-8.3.1-20190223/obj-x86_64-redhat-linux/x86_64-redhat-linux/libstdc++-v3/include/bits/basic_string.h:1067: std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator[](std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::reference = char&; std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::size_type = long unsigned int]: Assertion '__pos <= size()' failed. at /mnt/build/wsincrmaster/LABEL/ROOT-fedora29/SPEC/python3/root/io/io/src/TStreamerInfo.cxx:3531 subClasses=0x7fffffff8db0, top=true) at /mnt/build/wsincrmaster/LABEL/ROOT-fedora29/SPEC/python3/root/io/io/src/TStreamerInfo.cxx:3772 subClasses=0x7fffffff8db0, extrainfos=0x7fffffff9210) at /mnt/build/wsincrmaster/LABEL/ROOT-fedora29/SPEC/python3/root/io/io/src/TStreamerInfo.cxx:3976 at /mnt/build/wsincrmaster/LABEL/ROOT-fedora29/SPEC/python3/root/io/io/src/TFile.cxx:2843 ```
1 parent 83502c8 commit 0167a18

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

io/io/src/TStreamerInfo.cxx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3528,7 +3528,8 @@ static void R__WriteDestructorBody(FILE *file, TIter &next)
35283528
std::vector<std::string> inside;
35293529
int nestedLoc;
35303530
TClassEdit::GetSplit(enamebasic, inside, nestedLoc, TClassEdit::kLong64);
3531-
if (inside[1][inside[1].size()-1]=='*' || inside[2][inside[2].size()-1]=='*') {
3531+
if ((!inside[1].empty() && inside[1][inside[1].size()-1]=='*')
3532+
|| (!inside[2].empty() && inside[2][inside[2].size()-1]=='*')) {
35323533
fprintf(file," std::for_each( (%s %s).rbegin(), (%s %s).rend(), DeleteObjectFunctor() );\n",prefix,ename,prefix,ename);
35333534
}
35343535
}

0 commit comments

Comments
 (0)