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 zh...@apache.org on 2015/09/02 07:58:31 UTC

[19/50] [abbrv] hadoop git commit: HDFS-8963. Fix incorrect sign extension of xattr length in HDFS-8900. (Colin Patrick McCabe via yliu)

HDFS-8963. Fix incorrect sign extension of xattr length in HDFS-8900. (Colin Patrick McCabe via yliu)


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

Branch: refs/heads/HDFS-7285
Commit: e166c038c0aaa57b245f985a1c0fadd5fe33c384
Parents: 035ed26
Author: yliu <yl...@apache.org>
Authored: Fri Aug 28 10:54:55 2015 +0800
Committer: yliu <yl...@apache.org>
Committed: Fri Aug 28 10:54:55 2015 +0800

----------------------------------------------------------------------
 hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt           |  3 +++
 .../hadoop/hdfs/server/namenode/XAttrFormat.java      | 14 ++++++++++----
 .../hadoop/hdfs/server/namenode/TestXAttrFeature.java | 12 ++++++++++++
 3 files changed, 25 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/e166c038/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
index 9cc3326..b699fceb 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -1243,6 +1243,9 @@ Release 2.8.0 - UNRELEASED
     HDFS-8969. Clean up findbugs warnings for HDFS-8823 and HDFS-8932.
     (Anu Engineer via wheat9)
 
+    HDFS-8963. Fix incorrect sign extension of xattr length in HDFS-8900.
+    (Colin Patrick McCabe via yliu)
+
 Release 2.7.2 - UNRELEASED
 
   INCOMPATIBLE CHANGES

http://git-wip-us.apache.org/repos/asf/hadoop/blob/e166c038/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/XAttrFormat.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/XAttrFormat.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/XAttrFormat.java
index 6167dac..7e704d0 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/XAttrFormat.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/XAttrFormat.java
@@ -61,12 +61,15 @@ class XAttrFormat {
     for (int i = 0; i < attrs.length;) {
       XAttr.Builder builder = new XAttr.Builder();
       // big-endian
-      int v = Ints.fromBytes(attrs[i++], attrs[i++], attrs[i++], attrs[i++]);
+      int v = Ints.fromBytes(attrs[i], attrs[i + 1],
+          attrs[i + 2], attrs[i + 3]);
+      i += 4;
       int ns = (v >> XATTR_NAMESPACE_OFFSET) & XATTR_NAMESPACE_MASK;
       int nid = v & XATTR_NAME_MASK;
       builder.setNameSpace(XATTR_NAMESPACE_VALUES[ns]);
       builder.setName(XAttrStorage.getName(nid));
-      int vlen = (attrs[i++] << 8) | attrs[i++];
+      int vlen = ((0xff & attrs[i]) << 8) | (0xff & attrs[i + 1]);
+      i += 2;
       if (vlen > 0) {
         byte[] value = new byte[vlen];
         System.arraycopy(attrs, i, value, 0, vlen);
@@ -94,12 +97,15 @@ class XAttrFormat {
     XAttr xAttr = XAttrHelper.buildXAttr(prefixedName);
     for (int i = 0; i < attrs.length;) {
       // big-endian
-      int v = Ints.fromBytes(attrs[i++], attrs[i++], attrs[i++], attrs[i++]);
+      int v = Ints.fromBytes(attrs[i], attrs[i + 1],
+          attrs[i + 2], attrs[i + 3]);
+      i += 4;
       int ns = (v >> XATTR_NAMESPACE_OFFSET) & XATTR_NAMESPACE_MASK;
       int nid = v & XATTR_NAME_MASK;
       XAttr.NameSpace namespace = XATTR_NAMESPACE_VALUES[ns];
       String name = XAttrStorage.getName(nid);
-      int vlen = (attrs[i++] << 8) | attrs[i++];
+      int vlen = ((0xff & attrs[i]) << 8) | (0xff & attrs[i + 1]);
+      i += 2;
       if (xAttr.getNameSpace() == namespace &&
           xAttr.getName().equals(name)) {
         if (vlen > 0) {

http://git-wip-us.apache.org/repos/asf/hadoop/blob/e166c038/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestXAttrFeature.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestXAttrFeature.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestXAttrFeature.java
index fcb157e..5b0922d 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestXAttrFeature.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestXAttrFeature.java
@@ -43,6 +43,14 @@ public class TestXAttrFeature {
   static final String name7 = "raw.a7";
   static final byte[] value7 = {0x011, 0x012, 0x013};
   static final String name8 = "user.a8";
+  static final String bigXattrKey = "user.big.xattr.key";
+  static final byte[] bigXattrValue = new byte[128];
+
+  static {
+    for (int i = 0; i < bigXattrValue.length; i++) {
+      bigXattrValue[i] = (byte) (i & 0xff);
+    }
+  }
 
   static byte[] randomBytes(int len) {
     Random rand = new Random();
@@ -74,12 +82,14 @@ public class TestXAttrFeature {
     XAttr a5 = XAttrHelper.buildXAttr(name5, value5);
     XAttr a6 = XAttrHelper.buildXAttr(name6, value6);
     XAttr a7 = XAttrHelper.buildXAttr(name7, value7);
+    XAttr bigXattr = XAttrHelper.buildXAttr(bigXattrKey, bigXattrValue);
     xAttrs.add(a2);
     xAttrs.add(a3);
     xAttrs.add(a4);
     xAttrs.add(a5);
     xAttrs.add(a6);
     xAttrs.add(a7);
+    xAttrs.add(bigXattr);
     feature = new XAttrFeature(xAttrs);
 
     XAttr r2 = feature.getXAttr(name2);
@@ -94,6 +104,8 @@ public class TestXAttrFeature {
     assertTrue(a6.equals(r6));
     XAttr r7 = feature.getXAttr(name7);
     assertTrue(a7.equals(r7));
+    XAttr rBigXattr = feature.getXAttr(bigXattrKey);
+    assertTrue(bigXattr.equals(rBigXattr));
     List<XAttr> rs = feature.getXAttrs();
     assertEquals(rs.size(), xAttrs.size());
     for (int i = 0; i < rs.size(); i++) {