summaryrefslogtreecommitdiff
path: root/render/form.c
diff options
context:
space:
mode:
Diffstat (limited to 'render/form.c')
-rw-r--r--render/form.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/render/form.c b/render/form.c
index 40c761623..6e213cb7c 100644
--- a/render/form.c
+++ b/render/form.c
@@ -486,19 +486,28 @@ char *form_url_encode(struct form *form,
char *name, *value, *n_temp, *v_temp;
char *s = malloc(1), *s2;
unsigned int len = 0, len1;
+ utf8_convert_ret err;
if (!s)
return 0;
s[0] = 0;
for (; control; control = control->next) {
- n_temp = utf8_to_enc(control->name, form->charset, 0);
- if (!n_temp) {
+ /** \todo fallback to document encoding or 8859-1 as
+ * last resort.
+ * What would also be an improvement would be to choose
+ * an encoding acceptable by the server which covers as much
+ * of the input values as possible. Additionally, we need to
+ * handle the case where none of the acceptable encodings
+ * cover all the textual input values.
+ */
+ err = utf8_to_enc(control->name, form->charset, 0, &n_temp);
+ if (err != UTF8_CONVERT_OK) {
free(s);
return 0;
}
- v_temp = utf8_to_enc(control->value, form->charset, 0);
- if (!v_temp) {
+ err = utf8_to_enc(control->value, form->charset, 0, &v_temp);
+ if (err != UTF8_CONVERT_OK) {
free(n_temp);
free(s);
return 0;