Hi,

An odd, but valid Markdown document:

echo '` `' > oops.md

- John Gruber's Markdown:

        markdown < oops.md
        <p><code></code></p>

- MMD:

        multimarkdown < oops.md
        <p><code></code></p> (no trailing newline)

- CommonMark:

        cmark < oops.md
        <p><code></code></p>

Fossil, anyhow, segfaults:

printf "%s\n\n" "GET /doc/ckout/oops.md HTTP/1.0" | fossil http
Segmentation fault (core dumped)

The patch passes a zero-initialized text Blob instead of a NULL text
object to html_code_span() in case the trimmed string between the
backticks is empty.

Best Regards,
Johan
Index: src/markdown.c
==================================================================
--- src/markdown.c
+++ src/markdown.c
@@ -745,17 +745,15 @@
   }
   f_end = end-nb;
   while( f_end>nb && (data[f_end-1]==' ' || data[f_end-1]=='\t') ){ f_end--; }
 
   /* real code span */
+  struct Blob work = BLOB_INITIALIZER;
   if( f_begin<f_end ){
-    struct Blob work = BLOB_INITIALIZER;
     blob_init(&work, data+f_begin, f_end-f_begin);
-    if( !rndr->make.codespan(ob, &work, rndr->make.opaque) ) end = 0;
-  }else{
-    if( !rndr->make.codespan(ob, 0, rndr->make.opaque) ) end = 0;
   }
+  if( !rndr->make.codespan(ob, &work, rndr->make.opaque) ) end = 0;
   return end;
 }
 
 
 /* char_escape -- '\\' backslash escape */

_______________________________________________
fossil-users mailing list
fossil-users@lists.fossil-scm.org
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

Reply via email to