From b5be6cf9e6ac618c9ba413192486dedede9da3e1 Mon Sep 17 00:00:00 2001 From: Michał Górny Date: Thu, 25 Jul 2019 08:16:42 +0200 Subject: vcs-snapshot.eclass: Detect and report invalid directory structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Detect when the archive does not contain a single top-level directory, and abort in that case. Otherwise, --strip-components would result in unpredictable mess. Signed-off-by: Michał Górny --- eclass/vcs-snapshot.eclass | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'eclass') diff --git a/eclass/vcs-snapshot.eclass b/eclass/vcs-snapshot.eclass index 312e9a4611e1..d3f7025fbb35 100644 --- a/eclass/vcs-snapshot.eclass +++ b/eclass/vcs-snapshot.eclass @@ -68,8 +68,21 @@ vcs-snapshot_src_unpack() { debug-print "${FUNCNAME}: unpacking ${f} to ${destdir}" - # XXX: check whether the directory structure inside is - # fine? i.e. if the tarball has actually a parent dir. + local l topdirs=() + while read -r l; do + topdirs+=( "${l}" ) + done < <(tar -t -f "${DISTDIR}/${f}" | cut -d/ -f1 | sort -u) + if [[ ${#topdirs[@]} -gt 1 ]]; then + eerror "The archive ${f} contains multiple or no top directory." + eerror "It is impossible for vcs-snapshot to unpack this correctly." + eerror "Top directories found:" + local d + for d in "${topdirs[@]}"; do + eerror " ${d}" + done + die "${FUNCNAME}: Invalid directory structure in archive ${f}" + fi + mkdir "${destdir}" || die # -o (--no-same-owner) to avoid restoring original owner einfo "Unpacking ${f}" -- cgit v1.2.3-65-gdbad