From: Fletcher T. Penney Date: Sun, 20 Aug 2017 14:59:14 +0000 (-0400) Subject: FIXED: Fix issue with metadata extraction X-Git-Tag: 6.2.1^2~13 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b4c02d7115a6fb79df5ad3f6d6384e2c58c40954;p=multimarkdown FIXED: Fix issue with metadata extraction --- diff --git a/Sources/libMultiMarkdown/mmd.c b/Sources/libMultiMarkdown/mmd.c index bc0c0cd..3ad0892 100644 --- a/Sources/libMultiMarkdown/mmd.c +++ b/Sources/libMultiMarkdown/mmd.c @@ -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); } diff --git a/Sources/multimarkdown/main.c b/Sources/multimarkdown/main.c index 16e836d..db1d961 100644 --- a/Sources/multimarkdown/main.c +++ b/Sources/multimarkdown/main.c @@ -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