errordesc.cc: Correctly append a single character to a std::string · Dadaky/stepcode@1d01b83 · GitHub
Skip to content

Commit 1d01b83

Browse files
committed
errordesc.cc: Correctly append a single character to a std::string
The idiom char c = ...; _userMsg.append( &c ); is not correct C++, because it treats the address of 'c' as a NUL- terminated C string. However, this is not guaranteed. When building and testing on Debian Stretch with AddressSanitizer: ASAN_OPTIONS="detect_leaks=false" CXX="clang++" CC=clang CXXFLAGS="-fsanitize=address" LDFLAGS="-fsanitize=address" cmake .. -DSC_ENABLE_TESTING=ON -DSC_BUILD_SCHEMAS="ifc2x3;ap214e3;ap209" ASAN_OPTIONS="detect_leaks=false" make ASAN_OPTIONS="detect_leaks=false" ctest . --output-on-failure an error like the following is encountered: ==15739==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffeb2ca7621 at pc 0x00000043c943 bp 0x7ffeb2ca75d0 sp 0x7ffeb2ca6d80 READ of size 33 at 0x7ffeb2ca7621 thread T0 #0 0x43c942 in __interceptor_strlen.part.45 (/home/jepler/src/stepcode/build/bin/lazy_sdai_ap214e3+0x43c942) stepcode#1 0x7fb9056e6143 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::append(char const*) (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0x11f143) stepcode#2 0x7fb905b677c3 in ErrorDescriptor::AppendToDetailMsg(char) /home/jepler/src/stepcode/src/clutils/errordesc.cc:150:5 Address 0x7ffeb2ca7621 is located in stack of thread T0 at offset 33 in frame #0 0x7fb905b676af in ErrorDescriptor::AppendToDetailMsg(char) /home/jepler/src/stepcode/src/clutils/errordesc.cc:149 This frame has 1 object(s): [32, 33) '' <== Memory access at offset 33 overflows this variable A similar problem with AppendToUserMsg is found by inspection. After this change, all 200 tests pass under the AddressSanitizer configuration
1 parent 0d2e791 commit 1d01b83

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

src/clutils/errordesc.cc

Lines changed: 2 additions & 2 deletions

0 commit comments

Comments
 (0)