@@ -317,7 +317,6 @@ static void postprocess_text(cmark_parser *parser, cmark_node *text) {
317
317
bool is_xmpp = false;
318
318
size_t rewind ;
319
319
size_t max_rewind ;
320
- size_t nb = 0 ;
321
320
size_t np = 0 ;
322
321
323
322
if (offset >= remaining )
@@ -329,6 +328,7 @@ static void postprocess_text(cmark_parser *parser, cmark_node *text) {
329
328
330
329
max_rewind = at - (data + start + offset );
331
330
331
+ found_at :
332
332
for (rewind = 0 ; rewind < max_rewind ; ++ rewind ) {
333
333
uint8_t c = data [start + offset + max_rewind - rewind - 1 ];
334
334
@@ -360,15 +360,19 @@ static void postprocess_text(cmark_parser *parser, cmark_node *text) {
360
360
continue ;
361
361
}
362
362
363
- for (link_end = 0 ; link_end < remaining - offset - max_rewind ; ++ link_end ) {
363
+ assert (data [start + offset + max_rewind ] == '@' );
364
+ for (link_end = 1 ; link_end < remaining - offset - max_rewind ; ++ link_end ) {
364
365
uint8_t c = data [start + offset + max_rewind + link_end ];
365
366
366
367
if (cmark_isalnum (c ))
367
368
continue ;
368
369
369
- if (c == '@' )
370
- nb ++ ;
371
- else if (c == '.' && link_end < remaining - offset - max_rewind - 1 &&
370
+ if (c == '@' ) {
371
+ // Found another '@', so go back and try again with an updated offset and max_rewind.
372
+ offset += max_rewind + 1 ;
373
+ max_rewind = link_end - 1 ;
374
+ goto found_at ;
375
+ } else if (c == '.' && link_end < remaining - offset - max_rewind - 1 &&
372
376
cmark_isalnum (data [start + offset + max_rewind + link_end + 1 ]))
373
377
np ++ ;
374
378
else if (c == '/' && is_xmpp )
@@ -377,10 +381,10 @@ static void postprocess_text(cmark_parser *parser, cmark_node *text) {
377
381
break ;
378
382
}
379
383
380
- if (link_end < 2 || nb != 1 || np == 0 ||
384
+ if (link_end < 2 || np == 0 ||
381
385
(!cmark_isalpha (data [start + offset + max_rewind + link_end - 1 ]) &&
382
386
data [start + offset + max_rewind + link_end - 1 ] != '.' )) {
383
- offset += max_rewind + 1 ;
387
+ offset += max_rewind + link_end ;
384
388
depth ++ ;
385
389
continue ;
386
390
}
0 commit comments