From 6aa63452b358cf0ba8687ec89b5d6c3a99649bc5 Mon Sep 17 00:00:00 2001 From: Siyao Meng Date: Wed, 6 Feb 2019 12:18:35 -0800 Subject: [PATCH] HDFS-14242. OIV WebImageViewer: NPE when param op is not specified. Contributed by Siyao Meng. Signed-off-by: Wei-Chiu Chuang --- .../offlineImageViewer/FSImageHandler.java | 7 ++++++- .../TestOfflineImageViewer.java | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/FSImageHandler.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/FSImageHandler.java index ad51b72259a..9b0031a3a2e 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/FSImageHandler.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/FSImageHandler.java @@ -85,10 +85,15 @@ public void channelRead0(ChannelHandlerContext ctx, HttpRequest request) } QueryStringDecoder decoder = new QueryStringDecoder(request.getUri()); + // check path. throw exception if path doesn't start with WEBHDFS_PREFIX + String path = getPath(decoder); final String op = getOp(decoder); + // check null op + if (op == null) { + throw new IllegalArgumentException("Param op must be specified."); + } final String content; - String path = getPath(decoder); switch (op) { case "GETFILESTATUS": content = image.getFileStatus(path); diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/TestOfflineImageViewer.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/TestOfflineImageViewer.java index a01de74aec7..1895ada79d1 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/TestOfflineImageViewer.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/TestOfflineImageViewer.java @@ -624,6 +624,25 @@ public void testWebImageViewer() throws Exception { } } + @Test + public void testWebImageViewerNullOp() throws Exception { + WebImageViewer viewer = new WebImageViewer( + NetUtils.createSocketAddr("localhost:0")); + try { + viewer.initServer(originalFsimage.getAbsolutePath()); + int port = viewer.getPort(); + + // null op + URL url = new URL("http://localhost:" + port + + "/webhdfs/v1/"); + // should get HTTP_BAD_REQUEST. NPE gets HTTP_INTERNAL_ERROR + verifyHttpResponseCode(HttpURLConnection.HTTP_BAD_REQUEST, url); + } finally { + // shutdown the viewer + viewer.close(); + } + } + @Test public void testWebImageViewerSecureMode() throws Exception { Configuration conf = new Configuration();