From a9cab7a9db009b368d39aa607a881df639547e70 Mon Sep 17 00:00:00 2001 From: "Fletcher T. Penney" Date: Sun, 11 Mar 2018 13:16:51 -0400 Subject: [PATCH] FIXED: Checking for metadata was partially erasing token tree and leaving engine in invalid state --- Sources/libMultiMarkdown/mmd.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) 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; } -- 2.40.0