diff --git a/hyperlinks.c b/hyperlinks.c index 4850b4b8d..1ea55f3b1 100644 --- a/hyperlinks.c +++ b/hyperlinks.c @@ -41,6 +41,7 @@ */ #define MAX_HYPERLINKS 5000 +#define MAX_HYPERLINK_URI 1024 static long long hyperlinks_next_external_id = 1; static u_int global_hyperlinks_count; @@ -145,9 +146,13 @@ hyperlinks_put(struct hyperlinks *hl, const char *uri_in, internal_id_in = ""; utf8_stravis(&uri, uri_in, VIS_OCTAL|VIS_CSTYLE); - utf8_stravis(&internal_id, internal_id_in, VIS_OCTAL|VIS_CSTYLE); + if (strlen(uri) > MAX_HYPERLINK_URI) { + free(uri); + return (0); + } - if (*internal_id_in != '\0') { + utf8_stravis(&internal_id, internal_id_in, VIS_OCTAL|VIS_CSTYLE); + if (*internal_id != '\0') { find.uri = uri; find.internal_id = internal_id;