DiscussionsIssue archiveOCCT:Application Framework

Archived issue #0031008

Application Framework - memcpy-param-overlap reported by Clang address sanitizer in LDOM_XmlReader::ReadRecord()

Open CASCADEOCCT:Application Frameworkclosed5 public notes

Search issues

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

Steps to reproduce

Not possible

Public activity

5 archived notes

Participants are labeled by their role within this record.

01Commenter 2
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.
02Commenter 2
03Commenter 2
Branch [archived branch] has been updated forcibly by Author.

[revision removed]
04Commenter 4
Reviewed with minor amendments (stylistic), please integrate
05Commenter 2
Branch [archived branch] has been deleted by Participant.

[revision removed]

Related records