]> granicus.if.org Git - multimarkdown/commitdiff
FIXED: Fix issue with metadata extraction
authorFletcher T. Penney <fletcher@fletcherpenney.net>
Sun, 20 Aug 2017 14:59:14 +0000 (10:59 -0400)
committerFletcher T. Penney <fletcher@fletcherpenney.net>
Sun, 20 Aug 2017 14:59:14 +0000 (10:59 -0400)
Sources/libMultiMarkdown/mmd.c
Sources/multimarkdown/main.c

index bc0c0cd40b860f282cdf9e1859f4e560e4b76249..3ad0892e72a3b53a3b57694388632cf3b65a44ef 100644 (file)
@@ -2346,7 +2346,11 @@ char * mmd_string_metavalue_for_key(char * source, const char * key) {
 
        mmd_engine * e = mmd_engine_create_with_string(source, 0);
        result = mmd_engine_metavalue_for_key(e, key);
-       result = my_strdup(result);
+
+       if (result) {
+               // We need to return a copy of the string
+               result = my_strdup(result);
+       }
 
        mmd_engine_free(e, true);
 
@@ -2363,6 +2367,7 @@ char * mmd_d_string_metavalue_for_key(DString * source, const char * key) {
        result = mmd_engine_metavalue_for_key(e, key);
 
        if (result) {
+               // We need to return a copy of the string
                result = my_strdup(result);
        }
 
index 16e836d723eff2a28d0805c08a4fe53c8bb4d714..db1d96121104020bdcecf18678e6d439f1392e8e 100644 (file)
@@ -416,19 +416,23 @@ int main(int argc, char** argv) {
                                // List metadata keys
                                char_result = mmd_string_metadata_keys(buffer->str);
 
-                               fputs(char_result, stdout);
+                               if (char_result) {
+                                       fputs(char_result, stdout);
 
-                               free(char_result);
+                                       free(char_result);
+                               }
                        } else if (a_extract->count > 0) {
                                // Extract metadata key
                                const char * query = a_extract->sval[0];
 
                                char_result = mmd_string_metavalue_for_key(buffer->str, query);
 
-                               fputs(char_result, stdout);
-                               fputc('\n', stdout);
+                               if (char_result) {
+                                       fputs(char_result, stdout);
+                                       fputc('\n', stdout);
 
-                               free(char_result);
+                                       free(char_result);
+                               }
                        } else {
                                // Regular processing
 
@@ -526,19 +530,23 @@ int main(int argc, char** argv) {
                        // List metadata keys
                        char_result = mmd_string_metadata_keys(buffer->str);
 
-                       fputs(char_result, stdout);
+                       if (char_result) {
+                               fputs(char_result, stdout);
 
-                       free(char_result);
+                               free(char_result);
+                       }
                } else if (a_extract->count > 0) {
                        // Extract metadata key
                        const char * query = a_extract->sval[0];
 
                        char_result = mmd_string_metavalue_for_key(buffer->str, query);
 
-                       fputs(char_result, stdout);
-                       fputc('\n', stdout);
+                       if (char_result) {
+                               fputs(char_result, stdout);
+                               fputc('\n', stdout);
 
-                       free(char_result);
+                               free(char_result);
+                       }
                } else {
                        // Regular processing