diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index 2d8b4d6d..3eea998b 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -510,6 +510,16 @@ static int curl_check_finished_download(CURLM *curlm, CURLMsg *msg, payload->remote_name, hostname, payload->error_buffer); server_soft_error(handle, payload->fileurl); } + + fflush(payload->localf); + if(fstat(fileno(payload->localf), &st) == 0 && st.st_size != payload->initial_size) { + /* an html error page was written to the file, reset it */ + if(ftruncate(fileno(payload->localf), payload->initial_size)) { + RET_ERR(handle, ALPM_ERR_SYSTEM, -1); + } + fseek(payload->localf, payload->initial_size, SEEK_SET); + } + if(curl_retry_next_server(curlm, curl, payload) == 0) { (*active_downloads_num)++; return 2;