| 453 | */ |
| 454 | |
| 455 | xmlChar * |
| 456 | xmlStrncat(xmlChar *cur, const xmlChar *add, int len) { |
| 457 | int size; |
| 458 | xmlChar *ret; |
| 459 | |
| 460 | if ((add == NULL) || (len == 0)) |
| 461 | return(cur); |
| 462 | if (len < 0) |
| 463 | return(NULL); |
| 464 | if (cur == NULL) |
| 465 | return(xmlStrndup(add, len)); |
| 466 | |
| 467 | size = xmlStrlen(cur); |
| 468 | if ((size < 0) || (size > INT_MAX - len)) |
| 469 | return(NULL); |
| 470 | ret = (xmlChar *) xmlRealloc(cur, (size_t) size + len + 1); |
| 471 | if (ret == NULL) { |
| 472 | xmlFree(cur); |
| 473 | return(NULL); |
| 474 | } |
| 475 | memcpy(&ret[size], add, len); |
| 476 | ret[size + len] = 0; |
| 477 | return(ret); |
| 478 | } |
| 479 | |
| 480 | /** |
| 481 | * xmlStrncatNew: |
no test coverage detected