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 ma...@apache.org on 2018/09/07 18:39:47 UTC

hadoop git commit: HDFS-13744. OIV tool should better handle control characters present in file or directory names. Contributed by Zsolt Venczel.

Repository: hadoop
Updated Branches:
  refs/heads/trunk 3dc2988a3 -> 410dd3faa


HDFS-13744. OIV tool should better handle control characters present in file or directory names. Contributed by Zsolt Venczel.


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/410dd3fa
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/410dd3fa
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/410dd3fa

Branch: refs/heads/trunk
Commit: 410dd3faa55660b60e1292e2816b135cb476751e
Parents: 3dc2988
Author: Sean Mackrory <ma...@apache.org>
Authored: Fri Sep 7 12:34:31 2018 -0600
Committer: Sean Mackrory <ma...@apache.org>
Committed: Fri Sep 7 12:39:33 2018 -0600

----------------------------------------------------------------------
 .../PBImageDelimitedTextWriter.java               | 18 +++++++++++++++---
 .../TestOfflineImageViewer.java                   | 17 +++++++++++++++++
 2 files changed, 32 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/410dd3fa/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/PBImageDelimitedTextWriter.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/PBImageDelimitedTextWriter.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/PBImageDelimitedTextWriter.java
index 8fab34c..20a8350 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/PBImageDelimitedTextWriter.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/PBImageDelimitedTextWriter.java
@@ -17,6 +17,8 @@
  */
 package org.apache.hadoop.hdfs.tools.offlineImageViewer;
 
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.text.StringEscapeUtils;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.permission.PermissionStatus;
 import org.apache.hadoop.hdfs.server.namenode.FsImageProto.INodeSection.INode;
@@ -71,9 +73,19 @@ public class PBImageDelimitedTextWriter extends PBImageTextWriter {
     buffer.append(field);
   }
 
+  static final String CRLF = StringUtils.CR + StringUtils.LF;
+
   private void append(StringBuffer buffer, String field) {
     buffer.append(delimiter);
-    buffer.append(field);
+
+    String escapedField = StringEscapeUtils.escapeCsv(field);
+    if (escapedField.contains(CRLF)) {
+      escapedField = escapedField.replace(CRLF, "%x0D%x0A");
+    } else if (escapedField.contains(StringUtils.LF)) {
+      escapedField = escapedField.replace(StringUtils.LF, "%x0A");
+    }
+
+    buffer.append(escapedField);
   }
 
   @Override
@@ -82,7 +94,7 @@ public class PBImageDelimitedTextWriter extends PBImageTextWriter {
     String inodeName = inode.getName().toStringUtf8();
     Path path = new Path(parent.isEmpty() ? "/" : parent,
       inodeName.isEmpty() ? "/" : inodeName);
-    buffer.append(path.toString());
+    append(buffer, path.toString());
     PermissionStatus p = null;
     boolean isDir = false;
     boolean hasAcl = false;
@@ -136,7 +148,7 @@ public class PBImageDelimitedTextWriter extends PBImageTextWriter {
     append(buffer, dirString + p.getPermission().toString() + aclString);
     append(buffer, p.getUserName());
     append(buffer, p.getGroupName());
-    return buffer.toString();
+    return buffer.substring(1);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hadoop/blob/410dd3fa/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/tools/offlineImageViewer/TestOfflineImageViewer.java
----------------------------------------------------------------------
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 d36be4f..16b35dc 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
@@ -27,6 +27,8 @@ import static org.apache.hadoop.fs.permission.AclEntryType.USER;
 import static org.apache.hadoop.fs.permission.FsAction.ALL;
 import static org.apache.hadoop.fs.permission.FsAction.EXECUTE;
 import static org.apache.hadoop.fs.permission.FsAction.READ_EXECUTE;
+
+import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.hdfs.protocol.AddErasureCodingPolicyResponse;
 import org.apache.hadoop.hdfs.protocol.ErasureCodingPolicyState;
 import static org.apache.hadoop.hdfs.server.namenode.AclTestHelpers.aclEntry;
@@ -209,6 +211,21 @@ public class TestOfflineImageViewer {
       writtenFiles.put(entityRefXMLDir.toString(),
           hdfs.getFileStatus(entityRefXMLDir));
 
+      //Create directories with new line characters
+      Path newLFDir = new Path("/dirContainingNewLineChar"
+          + StringUtils.LF + "here");
+      hdfs.mkdirs(newLFDir);
+      dirCount++;
+      writtenFiles.put("\"/dirContainingNewLineChar%x0Ahere\"",
+          hdfs.getFileStatus(newLFDir));
+
+      Path newCRLFDir = new Path("/dirContainingNewLineChar"
+          + PBImageDelimitedTextWriter.CRLF + "here");
+      hdfs.mkdirs(newCRLFDir);
+      dirCount++;
+      writtenFiles.put("\"/dirContainingNewLineChar%x0D%x0Ahere\"",
+          hdfs.getFileStatus(newCRLFDir));
+
       //Create a directory with sticky bits
       Path stickyBitDir = new Path("/stickyBit");
       hdfs.mkdirs(stickyBitDir);


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org