comparison src/protocols/zephyr/zephyr.c @ 11176:6932df31225f

[gaim-migrate @ 13283] Fix a buglet in auto linkifying mailto: things, which was causing the MSN prpl to have kittens trying to parse what was being sent. Also fixup the MSN parsing code to be more accomodating in what it accepts from the core - as this code was originally borrowed from the Zephyr prpl, robustify Zephyr in a similar way. Unfortunately I have no way of testing the Zephyr fixes. committer: Tailor Script <tailor@pidgin.im>
author Stu Tomlinson <stu@nosnilmot.com>
date Sun, 31 Jul 2005 15:21:31 +0000
parents 35eb95016472
children bb0d7b719af2
comparison
equal deleted inserted replaced
11175:57af14280b5f 11176:6932df31225f
381 strncpy(ret + retcount, "\n", 1); 381 strncpy(ret + retcount, "\n", 1);
382 cnt += 4; 382 cnt += 4;
383 retcount += 1; 383 retcount += 1;
384 } else if (!g_ascii_strncasecmp(message + cnt + 1, "a href=\"mailto:", 15)) { 384 } else if (!g_ascii_strncasecmp(message + cnt + 1, "a href=\"mailto:", 15)) {
385 cnt += 16; 385 cnt += 16;
386 while (g_ascii_strncasecmp(message + cnt, "\">", 2) != 0) { 386 while ((message[cnt] != '\0') && g_ascii_strncasecmp(message + cnt, "\">", 2) != 0) {
387 ret[retcount] = message[cnt]; 387 ret[retcount] = message[cnt];
388 retcount++; 388 retcount++;
389 cnt++; 389 cnt++;
390 } 390 }
391 cnt += 2; 391 if (message[cnt] != '\0')
392 cnt += 2;
392 /* ignore descriptive string */ 393 /* ignore descriptive string */
393 while (g_ascii_strncasecmp(message + cnt, "</a>", 4) != 0) { 394 while ((message[cnt] != '\0') && g_ascii_strncasecmp(message + cnt, "</a>", 4) != 0) {
394 cnt++; 395 cnt++;
395 } 396 }
396 cnt += 4; 397 if (message[cnt] != '\0')
398 cnt += 4;
397 } else if (!g_ascii_strncasecmp(message + cnt + 1, "a href=\"", 8)) { 399 } else if (!g_ascii_strncasecmp(message + cnt + 1, "a href=\"", 8)) {
398 cnt += 9; 400 cnt += 9;
399 while (g_ascii_strncasecmp(message + cnt, "\">", 2) != 0) { 401 while ((message[cnt] != '\0') && g_ascii_strncasecmp(message + cnt, "\">", 2) != 0) {
400 ret[retcount] = message[cnt]; 402 ret[retcount] = message[cnt];
401 retcount++; 403 retcount++;
402 cnt++; 404 cnt++;
403 } 405 }
404 cnt += 2; 406 if (message[cnt] != '\0')
407 cnt += 2;
405 /* ignore descriptive string */ 408 /* ignore descriptive string */
406 while (g_ascii_strncasecmp(message + cnt, "</a>", 4) != 0) { 409 while ((message[cnt] != '\0') && g_ascii_strncasecmp(message + cnt, "</a>", 4) != 0) {
407 cnt++; 410 cnt++;
408 } 411 }
409 cnt += 4; 412 if (message[cnt] != '\0')
413 cnt += 4;
410 } else if (!g_ascii_strncasecmp(message + cnt + 1, "font", 4)) { 414 } else if (!g_ascii_strncasecmp(message + cnt + 1, "font", 4)) {
411 cnt += 5; 415 cnt += 5;
412 while (!g_ascii_strncasecmp(message + cnt, " ", 1)) 416 while ((message[cnt] != '\0') && (message[cnt] != ' '))
413 cnt++; 417 cnt++;
414 if (!g_ascii_strncasecmp(message + cnt, "color=\"", 7)) { 418 if ((message[cnt] != '\0') && !g_ascii_strncasecmp(message + cnt, "color=\"", 7)) {
415 cnt += 7; 419 cnt += 7;
416 strncpy(ret + retcount, "@color(", 7); 420 strncpy(ret + retcount, "@color(", 7);
417 retcount += 7; 421 retcount += 7;
418 while (g_ascii_strncasecmp(message + cnt, "\">", 2) != 0) { 422 while ((message[cnt] != '\0') && g_ascii_strncasecmp(message + cnt, "\">", 2) != 0) {
419 ret[retcount] = message[cnt]; 423 ret[retcount] = message[cnt];
420 retcount++; 424 retcount++;
421 cnt++; 425 cnt++;
422 } 426 }
423 ret[retcount] = ')'; 427 ret[retcount] = ')';
424 retcount++; 428 retcount++;
425 cnt += 2; 429 if (message[cnt] != '\0')
430 cnt += 2;
426 } else if (!g_ascii_strncasecmp(message + cnt, "face=\"", 6)) { 431 } else if (!g_ascii_strncasecmp(message + cnt, "face=\"", 6)) {
427 cnt += 6; 432 cnt += 6;
428 strncpy(ret + retcount, "@font(", 6); 433 strncpy(ret + retcount, "@font(", 6);
429 retcount += 6; 434 retcount += 6;
430 while (g_ascii_strncasecmp(message + cnt, "\">", 2) != 0) { 435 while ((message[cnt] != '\0') && g_ascii_strncasecmp(message + cnt, "\">", 2) != 0) {
431 ret[retcount] = message[cnt]; 436 ret[retcount] = message[cnt];
432 retcount++; 437 retcount++;
433 cnt++; 438 cnt++;
434 } 439 }
435 ret[retcount] = ')'; 440 ret[retcount] = ')';
436 retcount++; 441 retcount++;
437 cnt += 2; 442 if (message[cnt] != '\0')
443 cnt += 2;
438 } else if (!g_ascii_strncasecmp(message + cnt, "size=\"", 6)) { 444 } else if (!g_ascii_strncasecmp(message + cnt, "size=\"", 6)) {
439 cnt += 6; 445 cnt += 6;
440 if ((message[cnt] == '1') || (message[cnt] == '2')) { 446 if ((message[cnt] == '1') || (message[cnt] == '2')) {
441 strncpy(ret + retcount, "@small(", 7); 447 strncpy(ret + retcount, "@small(", 7);
442 retcount += 7; 448 retcount += 7;
451 retcount += 7; 457 retcount += 7;
452 } 458 }
453 cnt += 3; 459 cnt += 3;
454 } else { 460 } else {
455 /* Drop all unrecognized/misparsed font tags */ 461 /* Drop all unrecognized/misparsed font tags */
456 while (g_ascii_strncasecmp(message + cnt, "\">", 2) != 0) { 462 while ((message[cnt] != '\0') && g_ascii_strncasecmp(message + cnt, "\">", 2) != 0) {
457 cnt++; 463 cnt++;
458 } 464 }
459 cnt += 2; 465 if (message[cnt] != '\0')
466 cnt += 2;
460 } 467 }
461 } else if (!g_ascii_strncasecmp(message + cnt + 1, "/i>", 3) 468 } else if (!g_ascii_strncasecmp(message + cnt + 1, "/i>", 3)
462 || !g_ascii_strncasecmp(message + cnt + 1, "/b>", 3)) { 469 || !g_ascii_strncasecmp(message + cnt + 1, "/b>", 3)) {
463 cnt += 4; 470 cnt += 4;
464 ret[retcount] = ')'; 471 ret[retcount] = ')';
467 cnt += 7; 474 cnt += 7;
468 strncpy(ret + retcount, "@font(fixed)", 12); 475 strncpy(ret + retcount, "@font(fixed)", 12);
469 retcount += 12; 476 retcount += 12;
470 } else { 477 } else {
471 /* Catch all for all unrecognized/misparsed <foo> tage */ 478 /* Catch all for all unrecognized/misparsed <foo> tage */
472 while (g_ascii_strncasecmp(message + cnt, ">", 1) != 0) { 479 while ((message[cnt] != '\0') && (message[cnt] != '>')) {
473 ret[retcount] = message[cnt]; 480 ret[retcount] = message[cnt];
474 retcount++; 481 retcount++;
475 cnt++; 482 cnt++;
476 } 483 }
477 } 484 }