diff -r cda8093116f2 -r 793af8666b3a libidav/session.c --- a/libidav/session.c Wed May 08 19:22:06 2019 +0200 +++ b/libidav/session.c Wed May 08 19:34:35 2019 +0200 @@ -387,6 +387,7 @@ ucx_buffer_write(elm.ptr, 1, elm.length, pbuf); if(child) { + // href is already URL encoded, so don't encode again ucx_buffer_puts(href, util_resource_name(child->href)); res = child; } else if(DAV_ENCRYPT_NAME(sn)) { @@ -394,7 +395,12 @@ ucx_buffer_puts(href, random_name); free(random_name); } else { - ucx_buffer_puts(href, util_resource_name(path)); + // path is not URL encoded, so we have to do this here + scstr_t resname = scstr(util_resource_name(path)); + char *esc = curl_easy_escape(sn->handle, + resname.ptr, resname.length); + ucx_buffer_write(esc, 1, strlen(esc), href); + curl_free(esc); } }