HADOOP-8751. NPE in Token.toString() when Token is constructed using null identifier. Contributed by kanaka kumar avvaru.

(cherry picked from commit 56996a685e)
This commit is contained in:
Akira Ajisaka 2015-05-26 16:16:21 +09:00
parent 84245ff3b2
commit 70615947bd
3 changed files with 22 additions and 4 deletions

View File

@ -287,6 +287,9 @@ Release 2.8.0 - UNRELEASED
HADOOP-11927. Fix "undefined reference to dlopen" error when compiling HADOOP-11927. Fix "undefined reference to dlopen" error when compiling
libhadooppipes (Xianyin Xin via Colin P. McCabe) libhadooppipes (Xianyin Xin via Colin P. McCabe)
HADOOP-8751. NPE in Token.toString() when Token is constructed using null
identifier. (kanaka kumar avvaru via aajisaka)
Release 2.7.1 - UNRELEASED Release 2.7.1 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -70,10 +70,10 @@ public class Token<T extends TokenIdentifier> implements Writable {
* @param service the service for this token * @param service the service for this token
*/ */
public Token(byte[] identifier, byte[] password, Text kind, Text service) { public Token(byte[] identifier, byte[] password, Text kind, Text service) {
this.identifier = identifier; this.identifier = (identifier == null)? new byte[0] : identifier;
this.password = password; this.password = (password == null)? new byte[0] : password;
this.kind = kind; this.kind = (kind == null)? new Text() : kind;
this.service = service; this.service = (service == null)? new Text() : service;
} }
/** /**

View File

@ -44,6 +44,7 @@ import org.apache.hadoop.security.UserGroupInformation.AuthenticationMethod;
import org.apache.hadoop.security.token.SecretManager; import org.apache.hadoop.security.token.SecretManager;
import org.apache.hadoop.security.token.Token; import org.apache.hadoop.security.token.Token;
import org.apache.hadoop.security.token.SecretManager.InvalidToken; import org.apache.hadoop.security.token.SecretManager.InvalidToken;
import org.apache.hadoop.security.token.TokenIdentifier;
import org.apache.hadoop.security.token.delegation.AbstractDelegationTokenSecretManager.DelegationTokenInformation; import org.apache.hadoop.security.token.delegation.AbstractDelegationTokenSecretManager.DelegationTokenInformation;
import org.apache.hadoop.util.Daemon; import org.apache.hadoop.util.Daemon;
import org.apache.hadoop.util.Time; import org.apache.hadoop.util.Time;
@ -539,4 +540,18 @@ public class TestDelegationToken {
Assert.assertEquals(key1, key2); Assert.assertEquals(key1, key2);
Assert.assertFalse(key2.equals(key3)); Assert.assertFalse(key2.equals(key3));
} }
@Test
public void testEmptyToken() throws IOException {
Token<?> token1 = new Token<TokenIdentifier>();
Token<?> token2 = new Token<TokenIdentifier>(new byte[0], new byte[0],
new Text(), new Text());
assertEquals(token1, token2);
assertEquals(token1.encodeToUrlString(), token2.encodeToUrlString());
token2 = new Token<TokenIdentifier>(null, null, null, null);
assertEquals(token1, token2);
assertEquals(token1.encodeToUrlString(), token2.encodeToUrlString());
}
} }