diff --git a/src/main/java/org/codehaus/plexus/archiver/AbstractUnArchiver.java b/src/main/java/org/codehaus/plexus/archiver/AbstractUnArchiver.java index 58e121bbd..eb8d35ca9 100644 --- a/src/main/java/org/codehaus/plexus/archiver/AbstractUnArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/AbstractUnArchiver.java @@ -343,9 +343,17 @@ protected void extractFile( final File srcF, final File dir, final InputStream c try { - if ( !isOverwrite() && f.exists() && ( f.lastModified() >= entryDate.getTime() ) ) + if ( !isOverwrite() && f.exists() ) { - return; + final File entryFile = FileUtils.getFile( entryName ); + if ( !StringUtils.equals( canonicalDestPath, entryFile.getAbsolutePath() ) ) + { + throw new ArchiverException( "Duplicate files (" + canonicalDestPath + "," + entryFile.getAbsolutePath() + ")" ); + } + else if ( f.lastModified() >= entryDate.getTime() ) + { + return; + } } // create intermediary directories - sometimes zip don't add them