page.c: URL-encode href
Otherwise, files with special characters, such as '%', could not be downloaded or previewed.
This commit is contained in:
parent
55008f2f64
commit
78c8c4dabb
28
page.c
28
page.c
|
@ -108,6 +108,7 @@ static int prepare_name(struct html_node *const n, struct stat *const sb,
|
|||
struct html_node *a;
|
||||
struct dynstr d, dname;
|
||||
const char *const sep = S_ISDIR(sb->st_mode) ? "/" : "";
|
||||
char *encurl = NULL;
|
||||
|
||||
dynstr_init(&d);
|
||||
dynstr_init(&dname);
|
||||
|
@ -122,7 +123,12 @@ static int prepare_name(struct html_node *const n, struct stat *const sb,
|
|||
fprintf(stderr, "%s: html_node_add_child failed\n", __func__);
|
||||
goto end;
|
||||
}
|
||||
else if (html_node_add_attr(a, "href", d.str))
|
||||
else if (!(encurl = http_encode_url(d.str)))
|
||||
{
|
||||
fprintf(stderr, "%s: http_encode_url failed\n", __func__);
|
||||
goto end;
|
||||
}
|
||||
else if (html_node_add_attr(a, "href", encurl))
|
||||
{
|
||||
fprintf(stderr, "%s: html_node_add_attr href failed\n", __func__);
|
||||
goto end;
|
||||
|
@ -143,6 +149,7 @@ static int prepare_name(struct html_node *const n, struct stat *const sb,
|
|||
end:
|
||||
dynstr_free(&d);
|
||||
dynstr_free(&dname);
|
||||
free(encurl);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -303,6 +310,7 @@ static int prepare_preview(struct html_node *const n,
|
|||
const struct stat *const sb, const char *const dir, const char *const name)
|
||||
{
|
||||
int ret = -1;
|
||||
char *encurl = NULL;
|
||||
struct html_node *a;
|
||||
struct dynstr d;
|
||||
|
||||
|
@ -315,9 +323,22 @@ static int prepare_preview(struct html_node *const n,
|
|||
fprintf(stderr, "%s: html_node_add_child form failed\n", __func__);
|
||||
goto end;
|
||||
}
|
||||
else if (dynstr_append(&d, "%s%s?preview=1", dir, name))
|
||||
else if (dynstr_append(&d, "%s%s", dir, name))
|
||||
{
|
||||
fprintf(stderr, "%s: dynstr_append failed\n", __func__);
|
||||
fprintf(stderr, "%s: dynstr_append d failed\n", __func__);
|
||||
goto end;
|
||||
}
|
||||
else if (!(encurl = http_encode_url(d.str)))
|
||||
{
|
||||
fprintf(stderr, "%s: http_encode_url failed\n", __func__);
|
||||
goto end;
|
||||
}
|
||||
|
||||
dynstr_free(&d);
|
||||
|
||||
if (dynstr_append(&d, "%s?preview=1", encurl))
|
||||
{
|
||||
fprintf(stderr, "%s: dynstr_append encd failed\n", __func__);
|
||||
goto end;
|
||||
}
|
||||
else if (html_node_add_attr(a, "href", d.str))
|
||||
|
@ -335,6 +356,7 @@ static int prepare_preview(struct html_node *const n,
|
|||
|
||||
end:
|
||||
dynstr_free(&d);
|
||||
free(encurl);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue