diff --git a/render/html.c b/render/html.c
index cd02e21c3..047cd9114 100644
--- a/render/html.c
+++ b/render/html.c
@@ -197,8 +197,11 @@ encoding_change:
c->data.html.parser_binding,
&c->data.html.encoding_source);
- c->data.html.encoding = strdup(encoding);
- if (!c->data.html.encoding) {
+ if (c->data.html.encoding != NULL)
+ talloc_free(c->data.html.encoding);
+
+ c->data.html.encoding = talloc_strdup(c, encoding);
+ if (c->data.html.encoding == NULL) {
union content_msg_data msg_data;
msg_data.error = messages_get("NoMemory");
@@ -262,7 +265,7 @@ bool html_convert(struct content *c, int width, int height)
/* Also, any existing encoding information,
* as it's not guaranteed to match the error page.
*/
- free(c->data.html.encoding);
+ talloc_free(c->data.html.encoding);
c->data.html.encoding = NULL;
/* Create new binding, using default charset */