You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by jl...@apache.org on 2014/12/18 22:30:20 UTC
hadoop git commit: HADOOP-11409. FileContext.getFileContext can stack
overflow if default fs misconfigured. Contributed by Gera Shegalov (cherry
picked from commit b9d49761f72078a0a83137ba8197d08b71f385e0)
Repository: hadoop
Updated Branches:
refs/heads/branch-2 a508001dd -> 84ea92879
HADOOP-11409. FileContext.getFileContext can stack overflow if default fs misconfigured. Contributed by Gera Shegalov
(cherry picked from commit b9d49761f72078a0a83137ba8197d08b71f385e0)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/84ea9287
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/84ea9287
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/84ea9287
Branch: refs/heads/branch-2
Commit: 84ea92879cc554c24d5535a2fadd76d70fc076b3
Parents: a508001
Author: Jason Lowe <jl...@apache.org>
Authored: Thu Dec 18 21:27:28 2014 +0000
Committer: Jason Lowe <jl...@apache.org>
Committed: Thu Dec 18 21:28:57 2014 +0000
----------------------------------------------------------------------
hadoop-common-project/hadoop-common/CHANGES.txt | 3 ++
.../apache/hadoop/fs/AbstractFileSystem.java | 11 ++++--
.../java/org/apache/hadoop/fs/FileContext.java | 12 ++++--
.../org/apache/hadoop/fs/TestFileContext.java | 41 ++++++++++++++++++++
4 files changed, 60 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/84ea9287/hadoop-common-project/hadoop-common/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt
index 83e1497..309142b 100644
--- a/hadoop-common-project/hadoop-common/CHANGES.txt
+++ b/hadoop-common-project/hadoop-common/CHANGES.txt
@@ -269,6 +269,9 @@ Release 2.7.0 - UNRELEASED
HADOOP-11385. Prevent cross site scripting attack on JMXJSONServlet.
(wheat9)
+ HADOOP-11409. FileContext.getFileContext can stack overflow if default fs
+ misconfigured (Gera Shegalov via jlowe)
+
Release 2.6.0 - 2014-11-18
INCOMPATIBLE CHANGES
http://git-wip-us.apache.org/repos/asf/hadoop/blob/84ea9287/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/AbstractFileSystem.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/AbstractFileSystem.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/AbstractFileSystem.java
index a9a19cd..f8ae27b 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/AbstractFileSystem.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/AbstractFileSystem.java
@@ -148,11 +148,14 @@ public abstract class AbstractFileSystem {
*/
public static AbstractFileSystem createFileSystem(URI uri, Configuration conf)
throws UnsupportedFileSystemException {
- Class<?> clazz = conf.getClass("fs.AbstractFileSystem." +
- uri.getScheme() + ".impl", null);
+ final String fsImplConf = String.format("fs.AbstractFileSystem.%s.impl",
+ uri.getScheme());
+
+ Class<?> clazz = conf.getClass(fsImplConf, null);
if (clazz == null) {
- throw new UnsupportedFileSystemException(
- "No AbstractFileSystem for scheme: " + uri.getScheme());
+ throw new UnsupportedFileSystemException(String.format(
+ "%s=null: No AbstractFileSystem configured for scheme: %s",
+ fsImplConf, uri.getScheme()));
}
return (AbstractFileSystem) newInstance(clazz, uri, conf);
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/84ea9287/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileContext.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileContext.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileContext.java
index 40d271d..3c5e9ab 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileContext.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileContext.java
@@ -467,9 +467,15 @@ public class FileContext {
*/
public static FileContext getFileContext(final Configuration aConf)
throws UnsupportedFileSystemException {
- return getFileContext(
- URI.create(aConf.get(FS_DEFAULT_NAME_KEY, FS_DEFAULT_NAME_DEFAULT)),
- aConf);
+ final URI defaultFsUri = URI.create(aConf.get(FS_DEFAULT_NAME_KEY,
+ FS_DEFAULT_NAME_DEFAULT));
+ if ( defaultFsUri.getScheme() != null
+ && !defaultFsUri.getScheme().trim().isEmpty()) {
+ return getFileContext(defaultFsUri, aConf);
+ }
+ throw new UnsupportedFileSystemException(String.format(
+ "%s: URI configured via %s carries no scheme",
+ defaultFsUri, FS_DEFAULT_NAME_KEY));
}
/**
http://git-wip-us.apache.org/repos/asf/hadoop/blob/84ea9287/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileContext.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileContext.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileContext.java
new file mode 100644
index 0000000..584ca40
--- /dev/null
+++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFileContext.java
@@ -0,0 +1,41 @@
+/**
+ * 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.
+ */
+package org.apache.hadoop.fs;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.junit.Test;
+
+import static org.junit.Assert.fail;
+
+public class TestFileContext {
+ private static final Log LOG = LogFactory.getLog(TestFileContext.class);
+
+ @Test
+ public void testDefaultURIWithoutScheme() throws Exception {
+ final Configuration conf = new Configuration();
+ conf.set(FileSystem.FS_DEFAULT_NAME_KEY, "/");
+ try {
+ FileContext.getFileContext(conf);
+ fail(UnsupportedFileSystemException.class + " not thrown!");
+ } catch (UnsupportedFileSystemException ufse) {
+ LOG.info("Expected exception: ", ufse);
+ }
+ }
+}