Browse Source

an archive with an empty central directory is broken. PR 35000. Submitted by Thomas Aglassinger.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@677575 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 17 years ago
parent
commit
80e8b2977b
6 changed files with 51 additions and 0 deletions
  1. +1
    -0
      CONTRIBUTORS
  2. +3
    -0
      WHATSNEW
  3. +4
    -0
      contributors.xml
  4. +4
    -0
      src/main/org/apache/tools/zip/ZipFile.java
  5. BIN
      src/tests/antunit/taskdefs/broken_cd.zip
  6. +39
    -0
      src/tests/antunit/taskdefs/unzip-test.xml

+ 1
- 0
CONTRIBUTORS View File

@@ -267,6 +267,7 @@ Takashi Okamoto
Taoufik Romdhane
Tariq Master
Trejkaz Xaoza
Thomas Aglassinger
Thomas Butz
Thomas Christen
Thomas Christensen


+ 3
- 0
WHATSNEW View File

@@ -58,6 +58,9 @@ Changes that could break older environments:
passed in a null or empty InputStream to read from.
Bugzilla Report 32200

* <unzip> will now fail on archives with an empty central directory.
Bugzilla report 35000.

Fixed bugs:
-----------



+ 4
- 0
contributors.xml View File

@@ -1074,6 +1074,10 @@
<first>Tariq</first>
<last>Master</last>
</name>
<name>
<first>Thomas</first>
<last>Aglassinger</last>
</name>
<name>
<first>Thomas</first>
<last>Butz</last>


+ 4
- 0
src/main/org/apache/tools/zip/ZipFile.java View File

@@ -276,6 +276,10 @@ public class ZipFile {
archive.readFully(signatureBytes);
long sig = ZipLong.getValue(signatureBytes);
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) {
archive.readFully(cfh);
int off = 0;


BIN
src/tests/antunit/taskdefs/broken_cd.zip View File


+ 39
- 0
src/tests/antunit/taskdefs/unzip-test.xml View File

@@ -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>

Loading…
Cancel
Save