summaryrefslogtreecommitdiff
path: root/content
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2020-05-16 23:23:40 +0100
committerVincent Sanders <vince@kyllikki.org>2020-05-16 23:23:40 +0100
commit297448cfffff809782ec704ae03ab64e9addeb76 (patch)
tree78b05018d3dcfc4b169dda342ce5de739b8eb5d9 /content
parent7d59f09bea1e7ad02eeb2449f3437b2387859d39 (diff)
downloadnetsurf-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.c26
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;
}