Parser incorrectly reading strong/emph in paragraphs that contain links.
eclbtownsend opened this issue · 2 comments
eclbtownsend commented
The following input produces an incorrect syntax tree:
const char* sampleInput = "*text* [link](google.com)";
cmark_node* cmark_root = cmark_parse_document(sampleInput, strlen(sampleInput), CMARK_OPT_DEFAULT);
const char* html = cmark_render_html(cmark_root, 0);
This produces a tree:
<p>*text* <a href="google.com">link</a></p>
I would expect text to have emphasis tags. It seems to only miss the last set of emphasis before the link. try "*text* *text2* [link](google.com)"
Version: "0.30.1"
Platform: Windows, Visual Studio 2017 v15.9.33
config.h:
#ifndef CMARK_CONFIG_H
#define CMARK_CONFIG_H
#ifdef __cplusplus
extern "C" {
#endif
#define HAVE_STDBOOL_H
#ifdef HAVE_STDBOOL_H
#include <stdbool.h>
#elif !defined(__cplusplus)
typedef char bool;
#endif
/* #undef HAVE___BUILTIN_EXPECT */
/* #undef HAVE___ATTRIBUTE__ */
#ifdef HAVE___ATTRIBUTE__
#define CMARK_ATTRIBUTE(list) __attribute__ (list)
#else
#define CMARK_ATTRIBUTE(list)
#endif
#ifndef CMARK_INLINE
#if defined(_MSC_VER) && !defined(__cplusplus)
#define CMARK_INLINE __inline
#else
#define CMARK_INLINE inline
#endif
#endif
/* snprintf and vsnprintf fallbacks for MSVC before 2015,
due to Valentin Milea http://stackoverflow.com/questions/2915672/
*/
#if defined(_MSC_VER) && _MSC_VER < 1900
#include <stdio.h>
#include <stdarg.h>
#define snprintf c99_snprintf
#define vsnprintf c99_vsnprintf
CMARK_INLINE int c99_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap)
{
int count = -1;
if (size != 0)
count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap);
if (count == -1)
count = _vscprintf(format, ap);
return count;
}
CMARK_INLINE int c99_snprintf(char *outBuf, size_t size, const char *format, ...)
{
int count;
va_list ap;
va_start(ap, format);
count = c99_vsnprintf(outBuf, size, format, ap);
va_end(ap);
return count;
}
#endif
#ifdef __cplusplus
}
#endif
#endif
jgm commented
Curious. I can reproduce with the cmark command line tool:
% build/src/cmark
*text* [link](google.com)
^D
<p>*text* <a href="google.com">link</a></p>
And this is a regression -- I tried with an older version and didn't see this.
jgm commented
Bisecting shows that this bug got introduced with commit ed0a4bf (fix for #389).
@nwellnhof can you take a look?