]> granicus.if.org Git - multimarkdown/commitdiff
FIXED: Work on memory leaks
authorFletcher T. Penney <fletcher@fletcherpenney.net>
Thu, 16 Feb 2017 23:27:58 +0000 (18:27 -0500)
committerFletcher T. Penney <fletcher@fletcherpenney.net>
Thu, 16 Feb 2017 23:27:58 +0000 (18:27 -0500)
src/main.c
src/mmd.c

index 1a9723d98844b8eccf7349c20dc44a55695102e1..c342c19f5e9e640ce02a78ecdb2b5914ffec0dcb 100644 (file)
@@ -359,7 +359,7 @@ int main(int argc, char** argv) {
 
                                transclude_source(buffer, folder, format, NULL, NULL);
        
-                               //free(folder);
+                               // Don't free folder -- owned by dirname
                        }
        
                        result = mmd_process(buffer, extensions, format, language);
@@ -408,7 +408,7 @@ int main(int argc, char** argv) {
 
                        transclude_source(buffer, folder, format, NULL, NULL);
 
-                       free(folder);
+                       // Don't free folder -- owned by dirname
                }
 
                result = mmd_process(buffer, extensions, format, language);
index 933d44c8da54f960fb8b3c79c252a52a3717b13e..5137ac1e68733dd6ffdcd9e89d6c038f9091c5af 100644 (file)
--- a/src/mmd.c
+++ b/src/mmd.c
@@ -211,8 +211,7 @@ void mmd_engine_free(mmd_engine * e, bool freeDString) {
        if (freeDString)
                d_string_free(e->dstr, true);
 
-       if (e->extensions & EXT_CRITIC)
-               token_pair_engine_free(e->pairings1);
+       token_pair_engine_free(e->pairings1);
        
        token_pair_engine_free(e->pairings2);
        token_pair_engine_free(e->pairings3);
@@ -223,6 +222,12 @@ void mmd_engine_free(mmd_engine * e, bool freeDString) {
        stack_free(e->definition_stack);
        stack_free(e->header_stack);
 
+       // Citations need to be freed
+       while (e->citation_stack->size) {
+               footnote_free(stack_pop(e->citation_stack));
+       }
+       stack_free(e->citation_stack);
+
        // Links need to be freed
        while (e->link_stack->size) {
                link_free(stack_pop(e->link_stack));
@@ -1815,10 +1820,12 @@ char * metavalue_for_key(mmd_engine * e, const char * key) {
 
                if (strcmp(clean, m->key) == 0) {
                        // We have a match
+                       free(clean);
                        return m->value;
                }
        }
 
+       free(clean);
        return result;
 }