| <?xml version="1.0"?> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| https://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <project name="unzip-test" default="antunit" |
| xmlns:au="antlib:org.apache.ant.antunit"> |
| <import file="../antunit-base.xml" /> |
| |
| <target name="setUp"> |
| <mkdir dir="${output}" /> |
| </target> |
| |
| <target name="tearDown" depends="antunit-base.tearDown"> |
| <delete dir="/tmp/testdir"/> |
| </target> |
| |
| <target name="testFailureOnBrokenCentralDirectoryStructure"> |
| <au:expectfailure |
| expectedmessage="central directory is empty, can't expand corrupt archive."> |
| <unzip src="broken_cd.zip" dest="${output}"/> |
| </au:expectfailure> |
| </target> |
| |
| <!-- Issue 28911 --> |
| <target name="testStrippingOfPathsep"> |
| <mkdir dir="${input}"/> |
| <mkdir dir="${output}"/> |
| <touch file="${input}/file"/> |
| <zip destfile="${output}/a.zip"> |
| <zipfileset dir="${input}" prefix="/foo"/> |
| </zip> |
| <unzip src="${output}/a.zip" stripAbsolutePathSpec="true" |
| dest="${output}"/> |
| <au:assertFileExists file="${output}/foo/file"/> |
| </target> |
| |
| <target name="testTwoByteExtraFieldInLFH" |
| description="https://issues.apache.org/bugzilla/show_bug.cgi?id=42940" |
| > |
| <mkdir dir="${input}"/> |
| <mkdir dir="${output}"/> |
| <copy file="zip/Bugzilla-42940.zip" tofile="${input}/test.zip"/> |
| <unzip src="${input}/test.zip" dest="${output}"/> |
| <au:assertFileExists file="${output}/META-INF/MANIFEST.MF"/> |
| </target> |
| |
| <target name="testArchiveIsClosedForInvalidZips" |
| description="https://issues.apache.org/bugzilla/show_bug.cgi?id=46559" |
| > |
| <mkdir dir="${input}"/> |
| <mkdir dir="${output}"/> |
| <copy file="broken_cd.zip" tofile="${input}/test.zip"/> |
| <au:expectfailure> |
| <unzip src="${input}/test.zip" dest="${output}"/> |
| </au:expectfailure> |
| <delete file="${input}/test.zip" quiet="true"/> |
| <!-- failed on Windows and other OSes with implicit file locking --> |
| <au:assertFileDoesntExist file="${input}/test.zip"/> |
| </target> |
| |
| <target name="testEntriesDontEscapeDestByDefault"> |
| <mkdir dir="${input}/"/> |
| <mkdir dir="${output}/"/> |
| <unzip src="zip/direscape.zip" dest="${output}"/> |
| <au:assertFileDoesntExist file="${input}/a"/> |
| </target> |
| |
| <target name="testEntriesCanEscapeDestIfRequested"> |
| <mkdir dir="${input}/"/> |
| <mkdir dir="${output}/"/> |
| <unzip src="zip/direscape.zip" dest="${output}" allowFilesToEscapeDest="true"/> |
| <au:assertFileExists file="${input}/a"/> |
| </target> |
| |
| <target name="-can-write-to-tmp?"> |
| <mkdir dir="${input}"/> |
| <echo file="${input}/A.java"><![CDATA[ |
| public class A { |
| public static void main(String[] args) { |
| new java.io.File("/tmp/testdir/").mkdirs(); |
| } |
| } |
| ]]></echo> |
| <mkdir dir="${output}"/> |
| <javac srcdir="${input}" destdir="${output}"/> |
| <java classname="A" classpath="${output}"/> |
| <available property="can-write-to-tmp!" file="/tmp/testdir/"/> |
| </target> |
| |
| <target name="testEntriesCanEscapeDestViaAbsolutePathIfPermitted" |
| depends="-can-write-to-tmp?" if="can-write-to-tmp!"> |
| <unzip src="zip/direscape-absolute.zip" dest="${output}" |
| stripAbsolutePathSpec="false"/> |
| <au:assertFileExists file="/tmp/testdir/a"/> |
| </target> |
| |
| <target name="testEntriesDontEscapeDestViaAbsolutePathByDefault" |
| depends="-can-write-to-tmp?" if="can-write-to-tmp!"> |
| <unzip src="zip/direscape-absolute.zip" dest="${output}"/> |
| <au:assertFileDoesntExist file="/tmp/testdir/a"/> |
| </target> |
| </project> |