99#include <strings.h>
1010#endif
1111
12+ // for ssize_t
13+ #ifdef _MSC_VER
14+ #include <BaseTsd.h>
15+ typedef SSIZE_T ssize_t ;
16+ #else
17+ #include <unistd.h>
18+ #endif
19+
1220static int is_valid_hostchar (const uint8_t * link , size_t link_len ) {
1321 int32_t ch ;
1422 int r = cmark_utf8proc_iterate (link , (bufsize_t )link_len , & ch );
@@ -290,10 +298,10 @@ static cmark_node *match(cmark_syntax_extension *ext, cmark_parser *parser,
290298 // inline was finished in inlines.c.
291299}
292300
293- static bool validate_protocol (char protocol [], uint8_t * data , int rewind , int max_rewind ) {
301+ static bool validate_protocol (char protocol [], uint8_t * data , size_t rewind , size_t max_rewind ) {
294302 size_t len = strlen (protocol );
295303
296- if (len > (size_t )( max_rewind - rewind )) {
304+ if (len > (max_rewind - rewind )) {
297305 return false;
298306 }
299307
@@ -302,11 +310,11 @@ static bool validate_protocol(char protocol[], uint8_t *data, int rewind, int ma
302310 return false;
303311 }
304312
305- if (len == (size_t )( max_rewind - rewind )) {
313+ if (len == (max_rewind - rewind )) {
306314 return true;
307315 }
308316
309- char prev_char = data [- rewind - len - 1 ];
317+ char prev_char = data [- (( ssize_t ) rewind ) - len - 1 ];
310318
311319 // Make sure the character before the protocol is non-alphanumeric
312320 return !cmark_isalnum (prev_char );
@@ -421,7 +429,7 @@ static void postprocess_text(cmark_parser *parser, cmark_node *text) {
421429 cmark_node * link_text = cmark_node_new_with_mem (CMARK_NODE_TEXT , parser -> mem );
422430 cmark_chunk email = cmark_chunk_dup (
423431 & detached_chunk ,
424- start + offset + max_rewind - rewind ,
432+ ( bufsize_t )( start + offset + max_rewind - rewind ) ,
425433 (bufsize_t )(link_end + rewind ));
426434 cmark_chunk_to_cstr (parser -> mem , & email );
427435 link_text -> as .literal = email ;
@@ -436,7 +444,7 @@ static void postprocess_text(cmark_parser *parser, cmark_node *text) {
436444
437445 cmark_node_insert_after (link_node , post );
438446
439- text -> as .literal = cmark_chunk_dup (& detached_chunk , start , offset + max_rewind - rewind );
447+ text -> as .literal = cmark_chunk_dup (& detached_chunk , ( bufsize_t ) start , ( bufsize_t )( offset + max_rewind - rewind ) );
440448 cmark_chunk_to_cstr (parser -> mem , & text -> as .literal );
441449
442450 text = post ;
0 commit comments