From 5b6f06f5eb8628955262508d153627fe6f2d1c8b Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Mon, 9 Apr 2018 08:30:13 +0100 Subject: libarchive: failure to extract symlink isn't fatal Recent upstream changes made the failure of symlink(2) when extracting from an archive a fatal error. The busybox-w32 implementation of symlink(2) always fails. Just issue a warning and move on. --- archival/libarchive/unsafe_symlink_target.c | 10 +++++++++- include/bb_archive.h | 4 ++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/archival/libarchive/unsafe_symlink_target.c b/archival/libarchive/unsafe_symlink_target.c index 8dcafeaa1..0ad4c9392 100644 --- a/archival/libarchive/unsafe_symlink_target.c +++ b/archival/libarchive/unsafe_symlink_target.c @@ -5,10 +5,12 @@ #include "libbb.h" #include "bb_archive.h" -void FAST_FUNC create_or_remember_symlink(llist_t **symlink_placeholders, +void FAST_FUNC create_or_remember_symlink(llist_t **symlink_placeholders + IF_PLATFORM_MINGW32(UNUSED_PARAM), const char *target, const char *linkname) { +#if !ENABLE_PLATFORM_MINGW32 if (target[0] == '/' || strstr(target, "..")) { llist_add_to(symlink_placeholders, xasprintf("%s%c%s", linkname, '\0', target) @@ -21,8 +23,13 @@ void FAST_FUNC create_or_remember_symlink(llist_t **symlink_placeholders, "sym", linkname, target ); } +#else + /* symlink isn't implemented for WIN32, just issue a warning */ + bb_perror_msg("can't create %slink '%s' to '%s'", "sym", linkname, target); +#endif } +#if !ENABLE_PLATFORM_MINGW32 void FAST_FUNC create_symlinks_from_list(llist_t *list) { while (list) { @@ -39,3 +46,4 @@ void FAST_FUNC create_symlinks_from_list(llist_t *list) list = list->link; } } +#endif diff --git a/include/bb_archive.h b/include/bb_archive.h index 8028736b8..91d5561fc 100644 --- a/include/bb_archive.h +++ b/include/bb_archive.h @@ -212,7 +212,11 @@ const char *strip_unsafe_prefix(const char *str) FAST_FUNC; void create_or_remember_symlink(llist_t **symlink_placeholders, const char *target, const char *linkname) FAST_FUNC; +#if !ENABLE_PLATFORM_MINGW32 void create_symlinks_from_list(llist_t *list) FAST_FUNC; +#else +#define create_symlinks_from_list(l) (void)0 +#endif void data_align(archive_handle_t *archive_handle, unsigned boundary) FAST_FUNC; const llist_t *find_list_entry(const llist_t *list, const char *filename) FAST_FUNC; -- cgit v1.2.3-55-g6feb