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

(cherry picked from commit 7bc179f9f5)
This commit is contained in:
Jason Lowe 2014-10-31 22:53:04 +00:00
parent f71d940e42
commit 239c4cc572
3 changed files with 9 additions and 10 deletions

View File

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

View File

@ -266,7 +266,7 @@ public class FSDownload implements Callable<Path> {
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()) {
case ARCHIVE: {
String lowerDst = dst.getName().toLowerCase();
@ -290,7 +290,9 @@ public class FSDownload implements Callable<Path> {
case PATTERN: {
String lowerDst = dst.getName().toLowerCase();
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());
if (!dst.exists() && !dst.mkdir()) {
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));
};
});
Pattern pattern = null;
String p = resource.getPattern();
if (p != null) {
pattern = Pattern.compile(p);
}
unpack(new File(dTmp.toUri()), new File(dFinal.toUri()), pattern);
unpack(new File(dTmp.toUri()), new File(dFinal.toUri()));
changePermissions(dFinal.getFileSystem(conf), dFinal);
files.rename(dst_work, destDirPath, Rename.OVERWRITE);
} catch (Exception e) {

View File

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