YARN-2707. Potential null dereference in FSDownload. Contributed by Gera Shegalov

This commit is contained in:
Jason Lowe 2014-10-31 22:53:04 +00:00
parent 6ce32f593b
commit 7bc179f9f5
3 changed files with 9 additions and 10 deletions

View File

@ -826,6 +826,9 @@ Release 2.6.0 - UNRELEASED
modified in YARN-2698 so that tests in YARN frameworks don't break. (Wangda modified in YARN-2698 so that tests in YARN frameworks don't break. (Wangda
Tan via vinodkv) Tan via vinodkv)
YARN-2707. Potential null dereference in FSDownload (Gera Shegalov via
jlowe)
Release 2.5.1 - 2014-09-05 Release 2.5.1 - 2014-09-05
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -266,7 +266,7 @@ public class FSDownload implements Callable<Path> {
return dCopy; return dCopy;
} }
private long unpack(File localrsrc, File dst, Pattern pattern) throws IOException { private long unpack(File localrsrc, File dst) throws IOException {
switch (resource.getType()) { switch (resource.getType()) {
case ARCHIVE: { case ARCHIVE: {
String lowerDst = dst.getName().toLowerCase(); String lowerDst = dst.getName().toLowerCase();
@ -290,7 +290,9 @@ public class FSDownload implements Callable<Path> {
case PATTERN: { case PATTERN: {
String lowerDst = dst.getName().toLowerCase(); String lowerDst = dst.getName().toLowerCase();
if (lowerDst.endsWith(".jar")) { if (lowerDst.endsWith(".jar")) {
RunJar.unJar(localrsrc, dst, pattern); String p = resource.getPattern();
RunJar.unJar(localrsrc, dst,
p == null ? RunJar.MATCH_ANY : Pattern.compile(p));
File newDst = new File(dst, dst.getName()); File newDst = new File(dst, dst.getName());
if (!dst.exists() && !dst.mkdir()) { if (!dst.exists() && !dst.mkdir()) {
throw new IOException("Unable to create directory: [" + dst + "]"); throw new IOException("Unable to create directory: [" + dst + "]");
@ -356,12 +358,7 @@ public class FSDownload implements Callable<Path> {
return files.makeQualified(copy(sCopy, dst_work)); return files.makeQualified(copy(sCopy, dst_work));
}; };
}); });
Pattern pattern = null; unpack(new File(dTmp.toUri()), new File(dFinal.toUri()));
String p = resource.getPattern();
if (p != null) {
pattern = Pattern.compile(p);
}
unpack(new File(dTmp.toUri()), new File(dFinal.toUri()), pattern);
changePermissions(dFinal.getFileSystem(conf), dFinal); changePermissions(dFinal.getFileSystem(conf), dFinal);
files.rename(dst_work, destDirPath, Rename.OVERWRITE); files.rename(dst_work, destDirPath, Rename.OVERWRITE);
} catch (Exception e) { } catch (Exception e) {

View File

@ -500,9 +500,8 @@ public class TestFSDownload {
pending.put(rsrc, exec.submit(fsd)); pending.put(rsrc, exec.submit(fsd));
exec.shutdown(); exec.shutdown();
while (!exec.awaitTermination(1000, TimeUnit.MILLISECONDS)); while (!exec.awaitTermination(1000, TimeUnit.MILLISECONDS));
Assert.assertTrue(pending.get(rsrc).isDone());
try { try {
pending.get(rsrc).get(); // see if there was an Exception during download
FileStatus[] filesstatus = files.getDefaultFileSystem().listStatus( FileStatus[] filesstatus = files.getDefaultFileSystem().listStatus(
basedir); basedir);
for (FileStatus filestatus : filesstatus) { for (FileStatus filestatus : filesstatus) {