]> granicus.if.org Git - multimarkdown/commitdiff
FIXED: Fix potential bug when reading OPML/ITMZ
authorFletcher T. Penney <fletcher@fletcherpenney.net>
Mon, 12 Nov 2018 23:00:27 +0000 (18:00 -0500)
committerFletcher T. Penney <fletcher@fletcherpenney.net>
Mon, 12 Nov 2018 23:00:27 +0000 (18:00 -0500)
Sources/libMultiMarkdown/itmz-reader.c
Sources/libMultiMarkdown/opml-reader.c

index d6cc8f3e1144b251a388cdcc586f64c163de6d68..69561ba784f98b7cd71e8cdf1801f335853d7258 100644 (file)
@@ -244,51 +244,54 @@ void parse_itmz_token_chain(mmd_engine * e, token * chain) {
                                        start = walker->start + 6;
 
                                        char * text = xml_extract_named_attribute(e->dstr->str, start, "text");
-                                       len = strlen(text);
-
-                                       if (strcmp("&gt;&gt;Preamble&lt;&lt;", text) != 0) {
-                                               if (out == metadata) {
-                                                       print_xml_as_text(out, text, 0, len);
-                                                       print_const(":\t");
-                                               } else {
-                                                       // Print header
-
-                                                       if (xml_scan_encoded_newline(text, len) == -1) {
-                                                               // ATX header
-                                                               for (int i = 0; i < header_level; ++i) {
-                                                                       print_char('#');
-                                                               }
 
-                                                               print_char(' ');
-                                                       }
+                                       if (text) {
+                                               len = strlen(text);
 
-                                                       print_xml_as_text(out, text, 0, len);
+                                               if (strcmp("&gt;&gt;Preamble&lt;&lt;", text) != 0) {
+                                                       if (out == metadata) {
+                                                               print_xml_as_text(out, text, 0, len);
+                                                               print_const(":\t");
+                                                       } else {
+                                                               // Print header
 
-                                                       if (xml_scan_encoded_newline(text, len) == -1) {
-                                                               // ATX header
-                                                               print_char(' ');
+                                                               if (xml_scan_encoded_newline(text, len) == -1) {
+                                                                       // ATX header
+                                                                       for (int i = 0; i < header_level; ++i) {
+                                                                               print_char('#');
+                                                                       }
 
-                                                               for (int i = 0; i < header_level; ++i) {
-                                                                       print_char('#');
+                                                                       print_char(' ');
                                                                }
-                                                       } else {
-                                                               // Setext Header
-                                                               switch (header_level) {
-                                                                       case 1:
-                                                                               print_const("\n======");
-                                                                               break;
-
-                                                                       default:
-                                                                               print_const("\n------");
-                                                                               break;
+
+                                                               print_xml_as_text(out, text, 0, len);
+
+                                                               if (xml_scan_encoded_newline(text, len) == -1) {
+                                                                       // ATX header
+                                                                       print_char(' ');
+
+                                                                       for (int i = 0; i < header_level; ++i) {
+                                                                               print_char('#');
+                                                                       }
+                                                               } else {
+                                                                       // Setext Header
+                                                                       switch (header_level) {
+                                                                               case 1:
+                                                                                       print_const("\n======");
+                                                                                       break;
+
+                                                                               default:
+                                                                                       print_const("\n------");
+                                                                                       break;
+                                                                       }
                                                                }
-                                                       }
 
-                                                       print_const("\n");
+                                                               print_const("\n");
+                                                       }
                                                }
-                                       }
 
-                                       free(text);
+                                               free(text);
+                                       }
 
                                        // Print contents of topic
                                        text = xml_extract_named_attribute(e->dstr->str, start, "note");
index dec368ec18e7cca1de7ec6199fe11cb1b87cf782..602892af4c7051ef9352069bf4a63fb2f891aeef 100644 (file)
@@ -237,51 +237,54 @@ void parse_opml_token_chain(mmd_engine * e, token * chain) {
                                        start = walker->start + 8;
 
                                        char * text = xml_extract_named_attribute(e->dstr->str, start, "text");
-                                       len = strlen(text);
-
-                                       if (strcmp("&gt;&gt;Preamble&lt;&lt;", text) != 0) {
-                                               if (out == metadata) {
-                                                       print_xml_as_text(out, text, 0, len);
-                                                       print_const(":\t");
-                                               } else {
-                                                       // Print header
-
-                                                       if (xml_scan_encoded_newline(text, len) == -1) {
-                                                               // ATX header
-                                                               for (int i = 0; i < header_level; ++i) {
-                                                                       print_char('#');
-                                                               }
 
-                                                               print_char(' ');
-                                                       }
+                                       if (text) {
+                                               len = strlen(text);
 
-                                                       print_xml_as_text(out, text, 0, len);
+                                               if (strcmp("&gt;&gt;Preamble&lt;&lt;", text) != 0) {
+                                                       if (out == metadata) {
+                                                               print_xml_as_text(out, text, 0, len);
+                                                               print_const(":\t");
+                                                       } else {
+                                                               // Print header
 
-                                                       if (xml_scan_encoded_newline(text, len) == -1) {
-                                                               // ATX header
-                                                               print_char(' ');
+                                                               if (xml_scan_encoded_newline(text, len) == -1) {
+                                                                       // ATX header
+                                                                       for (int i = 0; i < header_level; ++i) {
+                                                                               print_char('#');
+                                                                       }
 
-                                                               for (int i = 0; i < header_level; ++i) {
-                                                                       print_char('#');
+                                                                       print_char(' ');
                                                                }
-                                                       } else {
-                                                               // Print Setext Header
-                                                               switch (header_level) {
-                                                                       case 1:
-                                                                               print_const("\n======");
-                                                                               break;
-
-                                                                       default:
-                                                                               print_const("\n------");
-                                                                               break;
+
+                                                               print_xml_as_text(out, text, 0, len);
+
+                                                               if (xml_scan_encoded_newline(text, len) == -1) {
+                                                                       // ATX header
+                                                                       print_char(' ');
+
+                                                                       for (int i = 0; i < header_level; ++i) {
+                                                                               print_char('#');
+                                                                       }
+                                                               } else {
+                                                                       // Print Setext Header
+                                                                       switch (header_level) {
+                                                                               case 1:
+                                                                                       print_const("\n======");
+                                                                                       break;
+
+                                                                               default:
+                                                                                       print_const("\n------");
+                                                                                       break;
+                                                                       }
                                                                }
-                                                       }
 
-                                                       print_const("\n");
+                                                               print_const("\n");
+                                                       }
                                                }
-                                       }
 
-                                       free(text);
+                                               free(text);
+                                       }
 
                                        // Print contents
                                        text = xml_extract_named_attribute(e->dstr->str, start, "_note");