summaryrefslogtreecommitdiffstats
path: root/lib/libalpm
diff options
context:
space:
mode:
authorDave Reisner <dreisner@archlinux.org>2019-10-07 02:06:43 +0200
committerAllan McRae <allan@archlinux.org>2019-10-07 02:55:49 +0200
commit0c4a8ae24b8395b0dd4f8046615336e394a8e3f8 (patch)
treed92ee46c76bc4f32a69db6cd4bdd72388ef57543 /lib/libalpm
parent5dd2b3776dedd85c196be737ea9c177216448756 (diff)
downloadpacman-0c4a8ae24b8395b0dd4f8046615336e394a8e3f8.tar.gz
pacman-0c4a8ae24b8395b0dd4f8046615336e394a8e3f8.tar.xz
dload: never return NULL from get_filename
Downloads with a Content-Disposition header will typically not include slashes. When they do, we should most certainly only take the basename, but when they don't, we should treat the header value as the filename. Crash introduced in d197d8ab82cf when we started using get_filename in order to rightfully avoid an arbitrary file overwrite vulnerability. Signed-off-by: Allan McRae <allan@archlinux.org>
Diffstat (limited to 'lib/libalpm')
-rw-r--r--lib/libalpm/dload.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c
index e5696bb0..506dcb8e 100644
--- a/lib/libalpm/dload.c
+++ b/lib/libalpm/dload.c
@@ -53,9 +53,11 @@ static const char *get_filename(const char *url)
{
char *filename = strrchr(url, '/');
if(filename != NULL) {
- filename++;
+ return filename + 1;
}
- return filename;
+
+ /* no slash found, it's a filename */
+ return url;
}
static char *get_fullpath(const char *path, const char *filename,