[Bug sanitizer/68100] New: runtime segfault ARM boost::regex_replace -fsanitize=undefined member access within misaligned address
yba at tkos dot co.il
gcc-bugzilla@gcc.gnu.org
Mon Oct 26 15:33:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68100
Bug ID: 68100
Summary: runtime segfault ARM boost::regex_replace
-fsanitize=undefined member access within misaligned
address
Product: gcc
Version: 5.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: sanitizer
Assignee: unassigned at gcc dot gnu.org
Reporter: yba at tkos dot co.il
CC: dodji at gcc dot gnu.org, dvyukov at gcc dot gnu.org,
jakub at gcc dot gnu.org, kcc at gcc dot gnu.org
Target Milestone: ---
Created attachment 36587
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=36587&action=edit
crosstool-ng .config file for arm-mxs-linux-gnueabihf
Command line:
arm-mxs-linux-gnueabihf-g++ \
-Wall -Wextra \
-fsanitize=undefined \
-O3 \
--sysroot=${STAGING} \
-L ${STAGING}/usr/lib \
-l boost_regex \
-o main main.cpp
Code:
#include <stdio.h>
#include <boost/regex.hpp>
#include <string>
int main(int argc, char* argv[]) {
boost::regex two_apost_to_quote;
two_apost_to_quote.assign("( |^)(''|' ')"); // change '' or ' ' to "
std::string two_apost_to_quote_fmt = "\\1\"";
std::string input = "hi there";
printf("before: %s\n", input.c_str());
std::string output = boost::regex_replace(input, two_apost_to_quote,
two_apost_to_quote_fmt, boost::match_default | boost::format_all);
printf("after: %s\n", output.c_str());
}
Runtime execution:
before: hi there
/env/dev/filesystem/rootfs_images/mxs/sysroot/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:188:27:
runtime error: member call on misaligned address 0x952b4cc2 for type 'struct
perl_matcher', which requires 4 byte alignment
0x952b4cc2: note: pointer points here
<memory cannot be printed>
/env/dev/filesystem/rootfs_images/mxs/sysroot/usr/include/boost/regex/v4/perl_matcher_non_recursive.hpp:349:54:
runtime error: member access within misaligned address 0x952b4cc2 for type
'struct perl_matcher', which requires 4 byte alignment
0x952b4cc2: note: pointer points here
<memory cannot be printed>
Segmentation fault
Comments:
1. The space in the string "input" is required
2. Boost version is boost-1.58.0, built with GCC 5.1.0 built with crosstool-ng
using attached .config
3. The problem does not happen with the same GCC 5.1.0 and boost version built
using crosstool-ng with a similar .config
4. The runtime platform is i.MX6
5. Removing the optimization from the command line prevents the segfault
More information about the Gcc-bugs
mailing list