Archived issue #0031008
Application Framework - memcpy-param-overlap reported by Clang address sanitizer in LDOM_XmlReader::ReadRecord()
Description
When running OCCT built on Linux with Clang with option -fsanitize=address, error memcpy-param-overlap is reported on test bugs caf bug27454:
Open /mnt/d/ABV/OCCT/occt_tests_data/private/customers/ASML/bug27454_test.xml D -stream
=================================================================
<table><tr><td bgcolor="ff8080">==5864==ERROR: AddressSanitizer: memcpy-param-overlap: memory ranges [0x62a000030238,0x62a00003023f) and [0x62a00003023e, 0x62a000030245) overlap</td></tr></table>
#0 0x4dd619 in __asan_memcpy ([user path removed]/tmp/occt-clang/lin64/clang/bini/DRAWEXE-7.4.0+0x4dd619)
#0000001 0x7f515bba9ea6 in LDOM_XmlReader::ReadRecord(std::istream&, LDOM_OSStream&) [user path removed]/occt/src/LDOM/LDOM_XmlReader.cxx:123:11
#0000002 0x7f515bbb0478 in ReadRecord(LDOM_XmlReader&, std::istream&, LDOM_OSStream&) [user path removed]/occt/src/LDOM/LDOMParser.cxx:64:52
#3 0x7f515bbafbe6 in LDOMParser::ParseElement(std::istream&) [user path removed]/occt/src/LDOM/LDOMParser.cxx:266:40
#4 0x7f515bbafd04 in LDOMParser::ParseElement(std::istream&) [user path removed]/occt/src/LDOM/LDOMParser.cxx:291:17
#5 0x7f515bbafd04 in LDOMParser::ParseElement(std::istream&) [user path removed]/occt/src/LDOM/LDOMParser.cxx:291:17
#6 0x7f515bbafd04 in LDOMParser::ParseElement(std::istream&) [user path removed]/occt/src/LDOM/LDOMParser.cxx:291:17
#0000007 0x7f515bbafd04 in LDOMParser::ParseElement(std::istream&) [user path removed]/occt/src/LDOM/LDOMParser.cxx:291:17
#0000008 0x7f515bbaf4ce in LDOMParser::ParseDocument(std::istream&, bool) [user path removed]/occt/src/LDOM/LDOMParser.cxx:225:19
#0000009 0x7f515bbaf248 in LDOMParser::parse(std::istream&, bool, bool) [user path removed]/occt/src/LDOM/LDOMParser.cxx:127:10
#10 0x7f515bb826ef in TryXmlDriverType(std::istream&) [user path removed]/occt/src/PCDM/PCDM_ReadWriter.cxx:234:17
#0000011 0x7f515bb82176 in PCDM_ReadWriter::FileFormat(std::istream&, opencascade::handle<Storage_Data>&) [user path removed]/occt/src/PCDM/PCDM_ReadWriter.cxx:171:12
#12 0x7f515bb906e4 in CDF_Application::Read(std::istream&) [user path removed]/occt/src/CDF/CDF_Application.cxx:334:15
#0000013 0x7f515bf0fadb in TDocStd_Application::Open(std::istream&, opencascade::handle<TDocStd_Document>&) [user path removed]/occt/src/TDocStd/TDocStd_Application.cxx:326:70
#0000014 0x7f515da407bf in DDocStd_Open(Draw_Interpretor&, int, char const**) [user path removed]/occt/src/DDocStd/DDocStd_ApplicationCommands.cxx:159:22
#0000015 0x7f5170405349 in Draw_Interpretor::CallBackDataFunc::Invoke(Draw_Interpretor&, int, char const**) [user path removed]/occt/src/Draw/Draw_Interpretor.hxx:81:31
#0000016 0x7f5170412b7d in CommandCmd(void*, Tcl_Interp*, int, char const**) [user path removed]/occt/src/Draw/Draw_Interpretor.cxx:154:40
#0000017 0x7f516a7a2b95 in TclInvokeStringCommand (/usr/lib/x86_64-linux-gnu/libtcl8.6.so+0x38b95)
#0000018 0x7f516a7a4fa6 in TclNRRunCallbacks (/usr/lib/x86_64-linux-gnu/libtcl8.6.so+0x3afa6)
#0000019 0x7f516a84387a in Tcl_RecordAndEvalObj (/usr/lib/x86_64-linux-gnu/libtcl8.6.so+0xd987a)
#0000020 0x7f516a843756 in Tcl_RecordAndEval (/usr/lib/x86_64-linux-gnu/libtcl8.6.so+0xd9756)
#0000021 0x7f51704140bf in Draw_Interpretor::RecordAndEval(char const*, int) [user path removed]/occt/src/Draw/Draw_Interpretor.cxx:496:10
#0000022 0x7f51703fadad in Draw_Interprete(char const*) [user path removed]/occt/src/Draw/Draw.cxx:608:19
#0000023 0x7f51703fbb90 in interpreteTclCommand(TCollection_AsciiString const&) [user path removed]/occt/src/Draw/Draw.cxx:110:5
#0000024 0x7f51703f937b in ReadInitFile(TCollection_AsciiString const&) [user path removed]/occt/src/Draw/Draw.cxx:121:3
#0000025 0x7f51703f8973 in Draw_Appli(int, char**, void (*)(Draw_Interpretor&)) [user path removed]/occt/src/Draw/Draw.cxx:497:5
#26 0x7f5170415328 in Draw_Main(int, char**, void (*)(Draw_Interpretor&)) [user path removed]/occt/src/Draw/Draw_Main.cxx:113:3
#27 0x51aaef in main [user path removed]/occt/src/DRAWEXE/DRAWEXE.cxx:33:1
#28 0x7f51691ce82f in __libc_start_main /build/glibc-Cl5G7W/glibc-2.23/csu/../csu/libc-start.c:291
#0000029 0x41aac8 in _start ([user path removed]/tmp/occt-clang/lin64/clang/bini/DRAWEXE-7.4.0+0x41aac8)
0x62a000030238 is located 56 bytes inside of 20544-byte region [0x62a000030200,0x62a000035240)
allocated by thread T0 here:
#0 0x516768 in operator new(unsigned long) ([user path removed]/tmp/occt-clang/lin64/clang/bini/DRAWEXE-7.4.0+0x516768)
#0000001 0x7f515bbaf214 in LDOMParser::parse(std::istream&, bool, bool) [user path removed]/occt/src/LDOM/LDOMParser.cxx:124:14
#0000002 0x7f515bb826ef in TryXmlDriverType(std::istream&) [user path removed]/occt/src/PCDM/PCDM_ReadWriter.cxx:234:17
#3 0x7f515bb82176 in PCDM_ReadWriter::FileFormat(std::istream&, opencascade::handle<Storage_Data>&) [user path removed]/occt/src/PCDM/PCDM_ReadWriter.cxx:171:12
#4 0x7f515bb906e4 in CDF_Application::Read(std::istream&) [user path removed]/occt/src/CDF/CDF_Application.cxx:334:15
#5 0x7f515bf0fadb in TDocStd_Application::Open(std::istream&, opencascade::handle<TDocStd_Document>&) [user path removed]/occt/src/TDocStd/TDocStd_Application.cxx:326:70
#6 0x7f515da407bf in DDocStd_Open(Draw_Interpretor&, int, char const**) [user path removed]/occt/src/DDocStd/DDocStd_ApplicationCommands.cxx:159:22
#0000007 0x7f5170405349 in Draw_Interpretor::CallBackDataFunc::Invoke(Draw_Interpretor&, int, char const**) [user path removed]/occt/src/Draw/Draw_Interpretor.hxx:81:31
#0000008 0x7f5170412b7d in CommandCmd(void*, Tcl_Interp*, int, char const**) [user path removed]/occt/src/Draw/Draw_Interpretor.cxx:154:40
#0000009 0x7f516a7a2b95 in TclInvokeStringCommand (/usr/lib/x86_64-linux-gnu/libtcl8.6.so+0x38b95)
0x62a00003023e is located 62 bytes inside of 20544-byte region [0x62a000030200,0x62a000035240)
allocated by thread T0 here:
#0 0x516768 in operator new(unsigned long) ([user path removed]/tmp/occt-clang/lin64/clang/bini/DRAWEXE-7.4.0+0x516768)
#0000001 0x7f515bbaf214 in LDOMParser::parse(std::istream&, bool, bool) [user path removed]/occt/src/LDOM/LDOMParser.cxx:124:14
#0000002 0x7f515bb826ef in TryXmlDriverType(std::istream&) [user path removed]/occt/src/PCDM/PCDM_ReadWriter.cxx:234:17
#3 0x7f515bb82176 in PCDM_ReadWriter::FileFormat(std::istream&, opencascade::handle<Storage_Data>&) [user path removed]/occt/src/PCDM/PCDM_ReadWriter.cxx:171:12
#4 0x7f515bb906e4 in CDF_Application::Read(std::istream&) [user path removed]/occt/src/CDF/CDF_Application.cxx:334:15
#5 0x7f515bf0fadb in TDocStd_Application::Open(std::istream&, opencascade::handle<TDocStd_Document>&) [user path removed]/occt/src/TDocStd/TDocStd_Application.cxx:326:70
#6 0x7f515da407bf in DDocStd_Open(Draw_Interpretor&, int, char const**) [user path removed]/occt/src/DDocStd/DDocStd_ApplicationCommands.cxx:159:22
#0000007 0x7f5170405349 in Draw_Interpretor::CallBackDataFunc::Invoke(Draw_Interpretor&, int, char const**) [user path removed]/occt/src/Draw/Draw_Interpretor.hxx:81:31
#0000008 0x7f5170412b7d in CommandCmd(void*, Tcl_Interp*, int, char const**) [user path removed]/occt/src/Draw/Draw_Interpretor.cxx:154:40
#0000009 0x7f516a7a2b95 in TclInvokeStringCommand (/usr/lib/x86_64-linux-gnu/libtcl8.6.so+0x38b95)
SUMMARY: AddressSanitizer: memcpy-param-overlap ([user path removed]/tmp/occt-clang/lin64/clang/bini/DRAWEXE-7.4.0+0x4dd619) in __asan_memcpy
==5864==ABORTING
Open /mnt/d/ABV/OCCT/occt_tests_data/private/customers/ASML/bug27454_test.xml D -stream
=================================================================
<table><tr><td bgcolor="ff8080">==5864==ERROR: AddressSanitizer: memcpy-param-overlap: memory ranges [0x62a000030238,0x62a00003023f) and [0x62a00003023e, 0x62a000030245) overlap</td></tr></table>
#0 0x4dd619 in __asan_memcpy ([user path removed]/tmp/occt-clang/lin64/clang/bini/DRAWEXE-7.4.0+0x4dd619)
#0000001 0x7f515bba9ea6 in LDOM_XmlReader::ReadRecord(std::istream&, LDOM_OSStream&) [user path removed]/occt/src/LDOM/LDOM_XmlReader.cxx:123:11
#0000002 0x7f515bbb0478 in ReadRecord(LDOM_XmlReader&, std::istream&, LDOM_OSStream&) [user path removed]/occt/src/LDOM/LDOMParser.cxx:64:52
#3 0x7f515bbafbe6 in LDOMParser::ParseElement(std::istream&) [user path removed]/occt/src/LDOM/LDOMParser.cxx:266:40
#4 0x7f515bbafd04 in LDOMParser::ParseElement(std::istream&) [user path removed]/occt/src/LDOM/LDOMParser.cxx:291:17
#5 0x7f515bbafd04 in LDOMParser::ParseElement(std::istream&) [user path removed]/occt/src/LDOM/LDOMParser.cxx:291:17
#6 0x7f515bbafd04 in LDOMParser::ParseElement(std::istream&) [user path removed]/occt/src/LDOM/LDOMParser.cxx:291:17
#0000007 0x7f515bbafd04 in LDOMParser::ParseElement(std::istream&) [user path removed]/occt/src/LDOM/LDOMParser.cxx:291:17
#0000008 0x7f515bbaf4ce in LDOMParser::ParseDocument(std::istream&, bool) [user path removed]/occt/src/LDOM/LDOMParser.cxx:225:19
#0000009 0x7f515bbaf248 in LDOMParser::parse(std::istream&, bool, bool) [user path removed]/occt/src/LDOM/LDOMParser.cxx:127:10
#10 0x7f515bb826ef in TryXmlDriverType(std::istream&) [user path removed]/occt/src/PCDM/PCDM_ReadWriter.cxx:234:17
#0000011 0x7f515bb82176 in PCDM_ReadWriter::FileFormat(std::istream&, opencascade::handle<Storage_Data>&) [user path removed]/occt/src/PCDM/PCDM_ReadWriter.cxx:171:12
#12 0x7f515bb906e4 in CDF_Application::Read(std::istream&) [user path removed]/occt/src/CDF/CDF_Application.cxx:334:15
#0000013 0x7f515bf0fadb in TDocStd_Application::Open(std::istream&, opencascade::handle<TDocStd_Document>&) [user path removed]/occt/src/TDocStd/TDocStd_Application.cxx:326:70
#0000014 0x7f515da407bf in DDocStd_Open(Draw_Interpretor&, int, char const**) [user path removed]/occt/src/DDocStd/DDocStd_ApplicationCommands.cxx:159:22
#0000015 0x7f5170405349 in Draw_Interpretor::CallBackDataFunc::Invoke(Draw_Interpretor&, int, char const**) [user path removed]/occt/src/Draw/Draw_Interpretor.hxx:81:31
#0000016 0x7f5170412b7d in CommandCmd(void*, Tcl_Interp*, int, char const**) [user path removed]/occt/src/Draw/Draw_Interpretor.cxx:154:40
#0000017 0x7f516a7a2b95 in TclInvokeStringCommand (/usr/lib/x86_64-linux-gnu/libtcl8.6.so+0x38b95)
#0000018 0x7f516a7a4fa6 in TclNRRunCallbacks (/usr/lib/x86_64-linux-gnu/libtcl8.6.so+0x3afa6)
#0000019 0x7f516a84387a in Tcl_RecordAndEvalObj (/usr/lib/x86_64-linux-gnu/libtcl8.6.so+0xd987a)
#0000020 0x7f516a843756 in Tcl_RecordAndEval (/usr/lib/x86_64-linux-gnu/libtcl8.6.so+0xd9756)
#0000021 0x7f51704140bf in Draw_Interpretor::RecordAndEval(char const*, int) [user path removed]/occt/src/Draw/Draw_Interpretor.cxx:496:10
#0000022 0x7f51703fadad in Draw_Interprete(char const*) [user path removed]/occt/src/Draw/Draw.cxx:608:19
#0000023 0x7f51703fbb90 in interpreteTclCommand(TCollection_AsciiString const&) [user path removed]/occt/src/Draw/Draw.cxx:110:5
#0000024 0x7f51703f937b in ReadInitFile(TCollection_AsciiString const&) [user path removed]/occt/src/Draw/Draw.cxx:121:3
#0000025 0x7f51703f8973 in Draw_Appli(int, char**, void (*)(Draw_Interpretor&)) [user path removed]/occt/src/Draw/Draw.cxx:497:5
#26 0x7f5170415328 in Draw_Main(int, char**, void (*)(Draw_Interpretor&)) [user path removed]/occt/src/Draw/Draw_Main.cxx:113:3
#27 0x51aaef in main [user path removed]/occt/src/DRAWEXE/DRAWEXE.cxx:33:1
#28 0x7f51691ce82f in __libc_start_main /build/glibc-Cl5G7W/glibc-2.23/csu/../csu/libc-start.c:291
#0000029 0x41aac8 in _start ([user path removed]/tmp/occt-clang/lin64/clang/bini/DRAWEXE-7.4.0+0x41aac8)
0x62a000030238 is located 56 bytes inside of 20544-byte region [0x62a000030200,0x62a000035240)
allocated by thread T0 here:
#0 0x516768 in operator new(unsigned long) ([user path removed]/tmp/occt-clang/lin64/clang/bini/DRAWEXE-7.4.0+0x516768)
#0000001 0x7f515bbaf214 in LDOMParser::parse(std::istream&, bool, bool) [user path removed]/occt/src/LDOM/LDOMParser.cxx:124:14
#0000002 0x7f515bb826ef in TryXmlDriverType(std::istream&) [user path removed]/occt/src/PCDM/PCDM_ReadWriter.cxx:234:17
#3 0x7f515bb82176 in PCDM_ReadWriter::FileFormat(std::istream&, opencascade::handle<Storage_Data>&) [user path removed]/occt/src/PCDM/PCDM_ReadWriter.cxx:171:12
#4 0x7f515bb906e4 in CDF_Application::Read(std::istream&) [user path removed]/occt/src/CDF/CDF_Application.cxx:334:15
#5 0x7f515bf0fadb in TDocStd_Application::Open(std::istream&, opencascade::handle<TDocStd_Document>&) [user path removed]/occt/src/TDocStd/TDocStd_Application.cxx:326:70
#6 0x7f515da407bf in DDocStd_Open(Draw_Interpretor&, int, char const**) [user path removed]/occt/src/DDocStd/DDocStd_ApplicationCommands.cxx:159:22
#0000007 0x7f5170405349 in Draw_Interpretor::CallBackDataFunc::Invoke(Draw_Interpretor&, int, char const**) [user path removed]/occt/src/Draw/Draw_Interpretor.hxx:81:31
#0000008 0x7f5170412b7d in CommandCmd(void*, Tcl_Interp*, int, char const**) [user path removed]/occt/src/Draw/Draw_Interpretor.cxx:154:40
#0000009 0x7f516a7a2b95 in TclInvokeStringCommand (/usr/lib/x86_64-linux-gnu/libtcl8.6.so+0x38b95)
0x62a00003023e is located 62 bytes inside of 20544-byte region [0x62a000030200,0x62a000035240)
allocated by thread T0 here:
#0 0x516768 in operator new(unsigned long) ([user path removed]/tmp/occt-clang/lin64/clang/bini/DRAWEXE-7.4.0+0x516768)
#0000001 0x7f515bbaf214 in LDOMParser::parse(std::istream&, bool, bool) [user path removed]/occt/src/LDOM/LDOMParser.cxx:124:14
#0000002 0x7f515bb826ef in TryXmlDriverType(std::istream&) [user path removed]/occt/src/PCDM/PCDM_ReadWriter.cxx:234:17
#3 0x7f515bb82176 in PCDM_ReadWriter::FileFormat(std::istream&, opencascade::handle<Storage_Data>&) [user path removed]/occt/src/PCDM/PCDM_ReadWriter.cxx:171:12
#4 0x7f515bb906e4 in CDF_Application::Read(std::istream&) [user path removed]/occt/src/CDF/CDF_Application.cxx:334:15
#5 0x7f515bf0fadb in TDocStd_Application::Open(std::istream&, opencascade::handle<TDocStd_Document>&) [user path removed]/occt/src/TDocStd/TDocStd_Application.cxx:326:70
#6 0x7f515da407bf in DDocStd_Open(Draw_Interpretor&, int, char const**) [user path removed]/occt/src/DDocStd/DDocStd_ApplicationCommands.cxx:159:22
#0000007 0x7f5170405349 in Draw_Interpretor::CallBackDataFunc::Invoke(Draw_Interpretor&, int, char const**) [user path removed]/occt/src/Draw/Draw_Interpretor.hxx:81:31
#0000008 0x7f5170412b7d in CommandCmd(void*, Tcl_Interp*, int, char const**) [user path removed]/occt/src/Draw/Draw_Interpretor.cxx:154:40
#0000009 0x7f516a7a2b95 in TclInvokeStringCommand (/usr/lib/x86_64-linux-gnu/libtcl8.6.so+0x38b95)
SUMMARY: AddressSanitizer: memcpy-param-overlap ([user path removed]/tmp/occt-clang/lin64/clang/bini/DRAWEXE-7.4.0+0x4dd619) in __asan_memcpy
==5864==ABORTING
Steps to reproduce
Not possible
Public activity
5 archived notes
Participants are labeled by their role within this record.
Branch [archived branch] has been created by Participant.
[revision removed]
Detailed log of new commits:
Author: mpv
Date: Mon Sep 30 14:12:35 2019 +0300
31008: Application Framework - memcpy-param-overlap reported by Clang address sanitizer in LDOM_XmlReader::ReadRecord()
Use memmove instead of memcpy because of copy of the possible overlapped source and destination parts of the buffer.
[revision removed]
Detailed log of new commits:
Author: mpv
Date: Mon Sep 30 14:12:35 2019 +0300
31008: Application Framework - memcpy-param-overlap reported by Clang address sanitizer in LDOM_XmlReader::ReadRecord()
Use memmove instead of memcpy because of copy of the possible overlapped source and destination parts of the buffer.
Branch [archived branch] has been updated forcibly by Author.
[revision removed]
[revision removed]
Reviewed with minor amendments (stylistic), please integrate
Branch [archived branch] has been deleted by Participant.
[revision removed]
[revision removed]
Related records