|
1 | 1 | package org.codehaus.plexus.compiler.csharp;
|
2 | 2 |
|
3 | 3 | import java.io.File;
|
4 |
| -import java.io.FileOutputStream; |
5 | 4 | import java.io.IOException;
|
6 | 5 | import java.io.InputStream;
|
| 6 | +import java.io.OutputStream; |
| 7 | +import java.nio.file.Files; |
| 8 | +import java.nio.file.Path; |
7 | 9 | import java.util.Enumeration;
|
8 | 10 | import java.util.jar.JarEntry;
|
9 | 11 | import java.util.jar.JarFile;
|
10 | 12 |
|
11 | 13 | public class JarUtil {
|
12 |
| - public static void extract( File destDir, File jarFile ) throws IOException |
13 |
| - { |
14 |
| - JarFile jar = new JarFile( jarFile ); |
15 |
| - Enumeration enumEntries = jar.entries(); |
16 |
| - while ( enumEntries.hasMoreElements() ) { |
17 |
| - JarEntry file = ( JarEntry ) enumEntries.nextElement(); |
18 |
| - File f = new File( destDir + File.separator + file.getName() ); |
19 |
| - if ( file.isDirectory() ) |
20 |
| - { |
21 |
| - f.mkdir(); |
22 |
| - continue; |
23 |
| - } |
24 |
| - try ( InputStream is = jar.getInputStream( file ); FileOutputStream fos = new FileOutputStream( f ) ) |
25 |
| - { |
26 |
| - while ( is.available() > 0 ) |
27 |
| - { |
28 |
| - fos.write( is.read() ); |
| 14 | + public static void extract(Path destDir, File jarFile) throws IOException { |
| 15 | + Path toPath = destDir.normalize(); |
| 16 | + try (JarFile jar = new JarFile(jarFile)) { |
| 17 | + Enumeration<JarEntry> enumEntries = jar.entries(); |
| 18 | + while (enumEntries.hasMoreElements()) { |
| 19 | + JarEntry file = enumEntries.nextElement(); |
| 20 | + Path f = destDir.resolve(file.getName()); |
| 21 | + if (!f.startsWith(toPath)) { |
| 22 | + throw new IOException("Bad zip entry"); |
| 23 | + } |
| 24 | + if (file.isDirectory()) { |
| 25 | + Files.createDirectories(f); |
| 26 | + continue; |
| 27 | + } |
| 28 | + try (InputStream is = jar.getInputStream(file); |
| 29 | + OutputStream fos = Files.newOutputStream(f)) { |
| 30 | + while (is.available() > 0) { |
| 31 | + fos.write(is.read()); |
| 32 | + } |
29 | 33 | }
|
30 | 34 | }
|
31 | 35 | }
|
|
0 commit comments