igormironchik / md4qt

Markdown parser for Qt6 or ICU
16 stars 1 forks source link

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

Closed WilheJo closed 1 year ago

WilheJo commented 1 year ago

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:

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 );

Locals:

    Lokale Variablen        
        it  @0x7fffffffb048 QList::const_iterator
        l   -1  long long
        last    @0x7fffffffb040 QList::const_iterator
        ok  false   bool
        onLine  false   bool
        p   -1  long long
        po  @0x7fffffffb210 MD::TextParsingOpts &
        start   @0x7fffffffb058 QList::const_iterator

Callstack:

                                                                                                                                                                                                                                                                                                             
1   MD::finishRule7HtmlTag                                                                                                                                                                                                                                   parser.hpp                  4240 0x55555584a49b 
2   MD::finishRawHtmlTag                                                                                                                                                                                                                                     parser.hpp                  4092 0x55555583bae7 
3   MD::parseFormattedText                                                                                                                                                                                                                                   parser.hpp                  6435 0x555555831df2 
4   MD::Parser::parseFormattedTextLinksImages                                                                                                                                                                                                                parser.hpp                  6478 0x555555823463 
5   MD::Parser::parseParagraph                                                                                                                                                                                                                               parser.hpp                  2532 0x555555820849 
6   MD::Parser::parseText                                                                                                                                                                                                                                    parser.hpp                  1958 0x555555812754 
7   MD::Parser::parseFragment                                                                                                                                                                                                                                parser.hpp                  1844 0x555555807333 
8   MD::Parser::parse(MD::StringListStream&, std::shared_ptr>, std::shared_ptr>, QList&, QString const&, QString const&, bool, bool)::{lambda()#1}::operator()() const parser.hpp                  1118 0x5555557fd05f 
9   MD::Parser::parse                                                                                                                                                                                                                                        parser.hpp                  1356 0x5555557fee5a 
10  MD::Parser::parseStream                                                                                                                                                                                                                                  parser.hpp                  1650 0x5555557f85e1 
11  MD::Parser::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 
...                                                                                                                                                                                                                                                                                                                      

igormironchik commented 1 year ago

Big thanks for the issue. You've made a valuable effort for me.

igormironchik commented 1 year ago

Well, done.