ITADN

Parser (still) seg-faults when presented with not-well-formed/invalid HTML

#3ClosedWilheJo 创建于 2023-08-22
W
WilheJocommented
Parsing following string causes a segfault: `"# Radiated 1G-6G\nMeasured in GTEM using 12 Faces Method.\n<foo>\n## Results\n![Measurement Result](MeasurementResult)\n\n<Peaklist>\n<bar>\n\n## Observation\nNo relevant emissions other than radio transmissions.\n\n## Images\n"` `<foo>` does not harm (for some reason). `<Peaklist>` gets replaced with some table. If this fails, it seg-faults. To verify this, I added `<bar>`. This also seg-faults. Closing the tag removes the seg-fault. Just for reference, I opted to use "<...>" for my custom tags... those get (mostly) replaced by some MD data. seg-fault happens here: <pre> template< class Trait > inline typename Delims< Trait >::const_iterator finishRule7HtmlTag( typename Delims< Trait >::const_iterator it, typename Delims< Trait >::const_iterator last, TextParsingOpts< Trait > & po ) { const auto start = it; long long int l = -1, p = -1; bool onLine = false; bool ok = false; std::tie( ok, l, p, onLine, std::ignore ) = isHtmlTag( it->m_line, it->m_pos, po, 7 ); </pre> Locals: <pre> Lokale Variablen it @0x7fffffffb048 QList<MD::Delimiter>::const_iterator l -1 long long last @0x7fffffffb040 QList<MD::Delimiter>::const_iterator ok false bool onLine false bool p -1 long long po @0x7fffffffb210 MD::TextParsingOpts<MD::QStringTrait> & start @0x7fffffffb058 QList<MD::Delimiter>::const_iterator </pre> Callstack: <pre> 1 MD::finishRule7HtmlTag<MD::QStringTrait> parser.hpp 4240 0x55555584a49b 2 MD::finishRawHtmlTag<MD::QStringTrait> parser.hpp 4092 0x55555583bae7 3 MD::parseFormattedText<MD::QStringTrait> parser.hpp 6435 0x555555831df2 4 MD::Parser<MD::QStringTrait>::parseFormattedTextLinksImages parser.hpp 6478 0x555555823463 5 MD::Parser<MD::QStringTrait>::parseParagraph parser.hpp 2532 0x555555820849 6 MD::Parser<MD::QStringTrait>::parseText parser.hpp 1958 0x555555812754 7 MD::Parser<MD::QStringTrait>::parseFragment parser.hpp 1844 0x555555807333 8 MD::Parser<MD::QStringTrait>::parse(MD::StringListStream<MD::QStringTrait>&, std::shared_ptr<MD::Block<MD::QStringTrait>>, std::shared_ptr<MD::Document<MD::QStringTrait>>, QList<QString>&, QString const&, QString const&, bool, bool)::{lambda()#1}::operator()() const parser.hpp 1118 0x5555557fd05f 9 MD::Parser<MD::QStringTrait>::parse parser.hpp 1356 0x5555557fee5a 10 MD::Parser<MD::QStringTrait>::parseStream parser.hpp 1650 0x5555557f85e1 11 MD::Parser<MD::QStringTrait>::parse parser.hpp 834 0x5555557facc8 12 MeasurementResultViewer::updateDoc measurementresultviewer.cpp 430 0x5555557bdcd4 13 MeasurementResultViewer::MeasurementResultViewer measurementresultviewer.cpp 194 0x5555557bb973 14 WorkflowResults::showResults workflowresults.cpp 255 0x5555559ccff0 15 WorkspaceExplorer::mouseDoubleClickEvent workspaceexplorer.cpp 76 0x555555895e72 16 QWidget::event(QEvent *) 0x7ffff77bd28b 17 QFrame::event(QEvent *) 0x7ffff784f8f6 18 QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject *, QEvent *) 0x7ffff653a168 19 QApplicationPrivate::notify_helper(QObject *, QEvent *) 0x7ffff777135b 20 QApplication::notify(QObject *, QEvent *) 0x7ffff7773c79 ... <Mehr> </pre>
关闭于 2023-08-22 2 条评论