From: Fletcher T. Penney Date: Sun, 11 Mar 2018 17:16:51 +0000 (-0400) Subject: FIXED: Checking for metadata was partially erasing token tree and leaving engine... X-Git-Tag: 6.3.1^2~9 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a9cab7a9db009b368d39aa607a881df639547e70;p=multimarkdown FIXED: Checking for metadata was partially erasing token tree and leaving engine in invalid state --- diff --git a/Sources/libMultiMarkdown/mmd.c b/Sources/libMultiMarkdown/mmd.c index cf28f6b..9df8278 100644 --- a/Sources/libMultiMarkdown/mmd.c +++ b/Sources/libMultiMarkdown/mmd.c @@ -2258,6 +2258,7 @@ bool mmd_d_string_has_metadata(DString * source, size_t * end) { /// Does the text have metadata? bool mmd_engine_has_metadata(mmd_engine * e, size_t * end) { bool result = false; + token * old_root; if (!e) { return false; @@ -2274,10 +2275,8 @@ bool mmd_engine_has_metadata(mmd_engine * e, size_t * end) { return false; } - // Free existing parse tree - if (e->root) { - token_tree_free(e->root); - } + // Preserve existing parse tree (if any) + old_root = e->root; // Tokenize the string (up until first empty line) token * doc = mmd_tokenize_string(e, 0, e->dstr->currentStringLength, true); @@ -2297,6 +2296,9 @@ bool mmd_engine_has_metadata(mmd_engine * e, size_t * end) { token_tree_free(doc); } + // Restore previous parse tree + e->root = old_root; + return result; }