git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@677575 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -267,6 +267,7 @@ Takashi Okamoto | |||||
| Taoufik Romdhane | Taoufik Romdhane | ||||
| Tariq Master | Tariq Master | ||||
| Trejkaz Xaoza | Trejkaz Xaoza | ||||
| Thomas Aglassinger | |||||
| Thomas Butz | Thomas Butz | ||||
| Thomas Christen | Thomas Christen | ||||
| Thomas Christensen | Thomas Christensen | ||||
| @@ -58,6 +58,9 @@ Changes that could break older environments: | |||||
| passed in a null or empty InputStream to read from. | passed in a null or empty InputStream to read from. | ||||
| Bugzilla Report 32200 | Bugzilla Report 32200 | ||||
| * <unzip> will now fail on archives with an empty central directory. | |||||
| Bugzilla report 35000. | |||||
| Fixed bugs: | Fixed bugs: | ||||
| ----------- | ----------- | ||||
| @@ -1074,6 +1074,10 @@ | |||||
| <first>Tariq</first> | <first>Tariq</first> | ||||
| <last>Master</last> | <last>Master</last> | ||||
| </name> | </name> | ||||
| <name> | |||||
| <first>Thomas</first> | |||||
| <last>Aglassinger</last> | |||||
| </name> | |||||
| <name> | <name> | ||||
| <first>Thomas</first> | <first>Thomas</first> | ||||
| <last>Butz</last> | <last>Butz</last> | ||||
| @@ -276,6 +276,10 @@ public class ZipFile { | |||||
| archive.readFully(signatureBytes); | archive.readFully(signatureBytes); | ||||
| long sig = ZipLong.getValue(signatureBytes); | long sig = ZipLong.getValue(signatureBytes); | ||||
| final long cfhSig = ZipLong.getValue(ZipOutputStream.CFH_SIG); | final long cfhSig = ZipLong.getValue(ZipOutputStream.CFH_SIG); | ||||
| if (sig != cfhSig) { | |||||
| throw new IOException("central directory is empty, can't expand" | |||||
| + " archive."); | |||||
| } | |||||
| while (sig == cfhSig) { | while (sig == cfhSig) { | ||||
| archive.readFully(cfh); | archive.readFully(cfh); | ||||
| int off = 0; | int off = 0; | ||||
| @@ -0,0 +1,39 @@ | |||||
| <?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 | |||||
| http://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" /> | |||||
| <property name="dest.dir" location="unzip.dest"/> | |||||
| <target name="setUp"> | |||||
| <mkdir dir="${dest.dir}" /> | |||||
| </target> | |||||
| <target name="tearDown"> | |||||
| <delete dir="${dest.dir}"/> | |||||
| </target> | |||||
| <target name="testFailureOnBrokenCentralDirectoryStructure"> | |||||
| <au:expectfailure | |||||
| expectedmessage="central directory is empty, can't expand archive."> | |||||
| <unzip src="broken_cd.zip" dest="${dest.dir}"/> | |||||
| </au:expectfailure> | |||||
| </target> | |||||
| </project> | |||||