[vlc-commits] DCP: fix heap-use-after-free on xml_ReaderNextNode error
Thomas Guillem
git at videolan.org
Thu Dec 21 10:59:24 CET 2017
vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Thu Dec 21 10:57:01 2017 +0100| [1b1de3b7f76dae70bba70c8491e68e128cdf06d2] | committer: Thomas Guillem
DCP: fix heap-use-after-free on xml_ReaderNextNode error
==9090==ERROR: AddressSanitizer: heap-use-after-free on address 0x602000173170 at pc 0x7f8a86e19063 bp 0x7f8a7bbf9230 sp 0x7f8a7bbf89e0
READ of size 2 at 0x602000173170 thread T10
[000061200002c080] dbus interface debug: Getting All properties
[000061200002c080] dbus interface debug: Getting All properties
#0 0x7f8a86e19062 (/usr/lib/x86_64-linux-gnu/libasan.so.3+0x3c062)
#1 0x7f8a84dda3b6 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (/usr/lib/x86_64-linux-gnu/libstdc++.so.6+0x1203b6)
#2 0x7f8a4d1bfef1 in XmlFile::ReadNextNode(demux_t*, xml_reader_t*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) ../../modules/access/dcp/dcpparser.cpp:750
#3 0x7f8a4d1c0d82 in PKL::Parse() ../../modules/access/dcp/dcpparser.cpp:864
#4 0x7f8a4d1bbe32 in AssetMap::Parse() ../../modules/access/dcp/dcpparser.cpp:291
#5 0x7f8a4d1b2f7c in parseXML(demux_t*) ../../modules/access/dcp/dcp.cpp:1011
#6 0x7f8a4d1b2b12 in dcpInit(demux_t*) ../../modules/access/dcp/dcp.cpp:942
#7 0x7f8a4d1ad3c2 in Open ../../modules/access/dcp/dcp.cpp:326
#8 0x7f8a8653b97d in generic_start ../../src/modules/modules.c:356
#9 0x7f8a8653acd4 in module_load ../../src/modules/modules.c:183
#10 0x7f8a8653b328 in vlc_module_load ../../src/modules/modules.c:279
#11 0x7f8a8653bace in module_need ../../src/modules/modules.c:371
#12 0x7f8a8658c8c5 in demux_NewAdvanced ../../src/input/demux.c:270
#13 0x7f8a865c84c7 in InputDemuxNew ../../src/input/input.c:2403
#14 0x7f8a865c8e89 in InputSourceNew ../../src/input/input.c:2555
#15 0x7f8a865c15bf in Init ../../src/input/input.c:1303
#16 0x7f8a865bc641 in Run ../../src/input/input.c:498
#17 0x7f8a857ee493 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x7493)
#18 0x7f8a8532cafe in __clone (/lib/x86_64-linux-gnu/libc.so.6+0xe8afe)
0x602000173170 is located 0 bytes inside of 12-byte region [0x602000173170,0x60200017317c)
freed by thread T10 here:
#0 0x7f8a86e9ea10 in free (/usr/lib/x86_64-linux-gnu/libasan.so.3+0xc1a10)
#1 0x7f8a78a29181 in ReaderNextNode ../../modules/misc/xml/libxml.c:217
#2 0x7f8a4d1ba838 in xml_ReaderNextNode ../../include/vlc_xml.h:87
#3 0x7f8a4d1bfec2 in XmlFile::ReadNextNode(demux_t*, xml_reader_t*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) ../../modules/access/dcp/dcpparser.cpp:744
#4 0x7f8a4d1c0d82 in PKL::Parse() ../../modules/access/dcp/dcpparser.cpp:864
#5 0x7f8a4d1bbe32 in AssetMap::Parse() ../../modules/access/dcp/dcpparser.cpp:291
#6 0x7f8a4d1b2f7c in parseXML(demux_t*) ../../modules/access/dcp/dcp.cpp:1011
#7 0x7f8a4d1b2b12 in dcpInit(demux_t*) ../../modules/access/dcp/dcp.cpp:942
#8 0x7f8a4d1ad3c2 in Open ../../modules/access/dcp/dcp.cpp:326
#9 0x7f8a8653b97d in generic_start ../../src/modules/modules.c:356
#10 0x7f8a8653acd4 in module_load ../../src/modules/modules.c:183
#11 0x7f8a8653b328 in vlc_module_load ../../src/modules/modules.c:279
#12 0x7f8a8653bace in module_need ../../src/modules/modules.c:371
#13 0x7f8a8658c8c5 in demux_NewAdvanced ../../src/input/demux.c:270
#14 0x7f8a865c84c7 in InputDemuxNew ../../src/input/input.c:2403
#15 0x7f8a865c8e89 in InputSourceNew ../../src/input/input.c:2555
#16 0x7f8a865c15bf in Init ../../src/input/input.c:1303
#17 0x7f8a865bc641 in Run ../../src/input/input.c:498
#18 0x7f8a857ee493 in start_thread (/lib/x86_64-linux-gnu/libpthread.so.0+0x7493)
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1b1de3b7f76dae70bba70c8491e68e128cdf06d2
---
modules/access/dcp/dcpparser.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/modules/access/dcp/dcpparser.cpp b/modules/access/dcp/dcpparser.cpp
index 92a26f1a72..7cb40fa3c8 100755
--- a/modules/access/dcp/dcpparser.cpp
+++ b/modules/access/dcp/dcpparser.cpp
@@ -743,6 +743,9 @@ int XmlFile::ReadNextNode( demux_t *p_demux, xml_reader_t *p_xmlReader, string&
const char * c_node;
int i = xml_ReaderNextNode( p_xmlReader, &c_node );
+ if( i <= XML_READER_NONE )
+ return i;
+
/* remove namespaces, if there are any */
string s_node = c_node;
size_t ui_pos = s_node.find( ":" );
More information about the vlc-commits
mailing list