Parser (still) seg-faults when presented with not-well-formed/invalid HTML
Parsing following string causes a segfault:
`"# Radiated 1G-6G\nMeasured in GTEM using 12 Faces Method.\n<foo>\n## Results\n\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 条评论