diff --git a/CHANGELOG.md b/CHANGELOG.md index dbb6317c..faabbf23 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,10 @@ Fixes: Fix handling tab when removing trailing whitespace, especially in connection with ATX headers. + - [#251](https://github.com/mity/md4c/issues/251): + Fix handling of allowed non-alphanumeric characters in URL detection and + allow '+' in 'path' component. + ## Version 0.5.2 diff --git a/src/md4c.c b/src/md4c.c index e3f5cf9d..7a46841b 100644 --- a/src/md4c.c +++ b/src/md4c.c @@ -3906,7 +3906,7 @@ md_analyze_permissive_autolink(MD_CTX* ctx, int mark_index) const MD_CHAR optional_end_char; } URL_MAP[] = { { _T('\0'), _T('.'), _T(".-_"), 2, _T('\0') }, /* host, mandatory */ - { _T('/'), _T('/'), _T("/.-_"), 0, _T('/') }, /* path */ + { _T('/'), _T('/'), _T("/.-+_"), 0, _T('/') }, /* path */ { _T('?'), _T('&'), _T("&.-+_=()"), 1, _T('\0') }, /* query */ { _T('#'), _T('\0'), _T(".-+_") , 1, _T('\0') } /* fragment */ }; @@ -3978,8 +3978,10 @@ md_analyze_permissive_autolink(MD_CTX* ctx, int mark_index) } else if(end < line_end && ISANYOF(end, URL_MAP[i].allowed_nonalnum_chars) && md_scan_right_for_resolved_mark(ctx, right_cursor, end, &right_cursor) == NULL && - ((end > line_beg && (ISALNUM(end-1) || CH(end-1) == _T(')'))) || CH(end) == _T('(')) && - ((end+1 < line_end && (ISALNUM(end+1) || CH(end+1) == _T('('))) || CH(end) == _T(')'))) + ((end > line_beg && (ISALNUM(end-1) || ISANYOF(end-1, URL_MAP[i].allowed_nonalnum_chars) + || CH(end-1) == _T(')'))) || CH(end) == _T('(')) && + ((end+1 < line_end && (ISALNUM(end+1) || ISANYOF(end+1, URL_MAP[i].allowed_nonalnum_chars) + || CH(end+1) == _T('('))) || CH(end) == _T(')'))) { if(CH(end) == URL_MAP[i].delim_char) n_components++;