diff options
author | Vincent Sanders <vince@kyllikki.org> | 2020-05-16 23:23:40 +0100 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2020-05-16 23:23:40 +0100 |
commit | 297448cfffff809782ec704ae03ab64e9addeb76 (patch) | |
tree | 78b05018d3dcfc4b169dda342ce5de739b8eb5d9 /content | |
parent | 7d59f09bea1e7ad02eeb2449f3437b2387859d39 (diff) | |
download | netsurf-297448cfffff809782ec704ae03ab64e9addeb76.tar.gz netsurf-297448cfffff809782ec704ae03ab64e9addeb76.tar.bz2 |
make about handler ssenddataf cope with longer data
Diffstat (limited to 'content')
-rw-r--r-- | content/fetchers/about.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/content/fetchers/about.c b/content/fetchers/about.c index 2534d070d..71249e85e 100644 --- a/content/fetchers/about.c +++ b/content/fetchers/about.c @@ -132,6 +132,7 @@ fetch_about_send_header(struct fetch_about_context *ctx, const char *fmt, ...) static nserror ssenddataf(struct fetch_about_context *ctx, const char *fmt, ...) { char buffer[1024]; + char *dbuff; fetch_msg msg; va_list ap; int slen; @@ -142,18 +143,39 @@ static nserror ssenddataf(struct fetch_about_context *ctx, const char *fmt, ...) va_end(ap); - if (slen >= (int)sizeof(buffer)) { + if (slen < (int)sizeof(buffer)) { + msg.type = FETCH_DATA; + msg.data.header_or_data.buf = (const uint8_t *) buffer; + msg.data.header_or_data.len = slen; + + if (fetch_about_send_callback(&msg, ctx)) { + return NSERROR_INVALID; + } + + return NSERROR_OK; + } + + dbuff = malloc(slen + 1); + if (dbuff == NULL) { return NSERROR_NOSPACE; } + va_start(ap, fmt); + + slen = vsnprintf(dbuff, slen + 1, fmt, ap); + + va_end(ap); + msg.type = FETCH_DATA; - msg.data.header_or_data.buf = (const uint8_t *) buffer; + msg.data.header_or_data.buf = (const uint8_t *)dbuff; msg.data.header_or_data.len = slen; if (fetch_about_send_callback(&msg, ctx)) { + free(dbuff); return NSERROR_INVALID; } + free(dbuff); return NSERROR_OK; } |