Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Parser incorrectly reading strong/emph in paragraphs that contain links. #424

Closed
eclbtownsend opened this issue Sep 24, 2021 · 2 comments · Fixed by #425
Closed

Parser incorrectly reading strong/emph in paragraphs that contain links. #424

eclbtownsend opened this issue Sep 24, 2021 · 2 comments · Fixed by #425
Labels

Comments

@eclbtownsend
Copy link

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
Copy link
Member

jgm commented Sep 24, 2021

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 jgm added the bug label Sep 24, 2021
@jgm
Copy link
Member

jgm commented Sep 24, 2021

Bisecting shows that this bug got introduced with commit ed0a4bf (fix for #389).
@nwellnhof can you take a look?

nwellnhof added a commit to nwellnhof/cmark that referenced this issue Sep 24, 2021
Fix a regression introduced with commit ed0a4bf. Also test the first
delimiter against stack_bottom in process_emphasis. This happened to
work with the old code and only led to a an unnecessary scan.

Fixes commonmark#424.
nwellnhof added a commit to nwellnhof/cmark that referenced this issue Sep 24, 2021
Fix a regression introduced with commit ed0a4bf. Also test the first
delimiter against stack_bottom in process_emphasis. This happened to
work with the old code and only resulted in an unnecessary scan.

Fixes commonmark#424.
nwellnhof added a commit to nwellnhof/cmark that referenced this issue Sep 24, 2021
Fix a regression introduced with commit ed0a4bf. Also test the first
delimiter against stack_bottom in process_emphasis. This happened to
work with the old code and only resulted in an unnecessary scan.

Fixes commonmark#424.
nwellnhof added a commit to nwellnhof/cmark that referenced this issue Sep 24, 2021
Fix a regression introduced with commit ed0a4bf. Also test the first
delimiter against stack_bottom in process_emphasis. This happened to
work with the old code and only resulted in an unnecessary scan.

Fixes commonmark#424.
@jgm jgm closed this as completed in #425 Sep 24, 2021
jgm pushed a commit that referenced this issue Sep 24, 2021
Fix a regression introduced with commit ed0a4bf. Also test the first
delimiter against stack_bottom in process_emphasis. This happened to
work with the old code and only resulted in an unnecessary scan.

Fixes #424.
anticomputer pushed a commit to github/cmark-gfm that referenced this issue Jan 23, 2023
Fix a regression introduced with commit ed0a4bf. Also test the first
delimiter against stack_bottom in process_emphasis. This happened to
work with the old code and only resulted in an unnecessary scan.

Fixes commonmark#424.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants