]> granicus.if.org Git - multimarkdown/commitdiff
FIXED: Fix bug with setting tail in token prune/graft
authorFletcher T. Penney <fletcher@fletcherpenney.net>
Wed, 6 Dec 2017 02:22:00 +0000 (21:22 -0500)
committerFletcher T. Penney <fletcher@fletcherpenney.net>
Wed, 6 Dec 2017 02:22:00 +0000 (21:22 -0500)
Sources/libMultiMarkdown/critic_markup.c
Sources/libMultiMarkdown/token.c

index 604fef8348307a9e03a52cee6ece6316bc2cd630..0ad27c587be13dc4bcd8920783ab468f5f297287 100644 (file)
@@ -406,10 +406,20 @@ void Test_critic(CuTest* tc) {
        mmd_critic_markup_accept(test);
        CuAssertStrEquals(tc, "", test->str);
 
+       d_string_erase(test, 0, -1);
+       d_string_append(test, "{++foo++}{>>bar<<}");
+       mmd_critic_markup_accept(test);
+       CuAssertStrEquals(tc, "foo", test->str);
+
+       d_string_erase(test, 0, -1);
+       d_string_append(test, "{++foo++}{>>bar<<}");
+       mmd_critic_markup_reject(test);
+       CuAssertStrEquals(tc, "", test->str);
+
+       #ifdef kUseObjectPool
        // Decrement counter and clean up token pool
        token_pool_drain();
 
-       #ifdef kUseObjectPool
        token_pool_free();
        #endif
 }
index a088d5e8383c4b4ab30332addc0305735537b05c..9b79ccd3d32dd99f86327b237f7cdab12b972806 100644 (file)
@@ -369,9 +369,16 @@ token * token_prune_graft(token * first, token * last, unsigned short container_
                next->prev = first;
        }
 
-       // Fix tail
+       // Fix tail (prior tail is now a child)
        if (first->next == NULL) {
+               token * walker = first;
+
+               while (walker->prev) {
+                       walker = walker->prev;
+               }
+
                first->tail = first;
+               walker->tail = first;
        }
 
        return first;