From 1ca2c5b6fbfe9125baa371870015f444e75baf58 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Tue, 17 Feb 2015 18:09:27 +0530 Subject: [PATCH] HBASE-13050:Empty Namespace validation --- .../src/main/java/org/apache/hadoop/hbase/TableName.java | 16 ++++++++-------- .../java/org/apache/hadoop/hbase/util/TestTableName.java | 13 ++++++++++--- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/TableName.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/TableName.java index 5167157..245bef5 100644 --- a/hbase-common/src/main/java/org/apache/hadoop/hbase/TableName.java +++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/TableName.java @@ -208,21 +208,21 @@ public final class TableName implements Comparable { /** * Valid namespace characters are [a-zA-Z_0-9] */ - public static void isLegalNamespaceName(byte[] namespaceName, int offset, int length) { - for (int i = offset; i < length; i++) { + public static void isLegalNamespaceName(final byte[] namespaceName, + final int start, + final int end) { + if(end - start < 1) { + throw new IllegalArgumentException("Namespace name must not be empty"); + } + for (int i = start; i < end; i++) { if (Character.isLetterOrDigit(namespaceName[i])|| namespaceName[i] == '_') { continue; } throw new IllegalArgumentException("Illegal character <" + namespaceName[i] + "> at " + i + ". Namespaces can only contain " + "'alphanumeric characters': i.e. [a-zA-Z_0-9]: " + Bytes.toString(namespaceName, - offset, length)); + start, end)); } - if(offset == length) - throw new IllegalArgumentException("Illegal character <" + namespaceName[offset] + - "> at " + offset + ". Namespaces can only contain " + - "'alphanumeric characters': i.e. [a-zA-Z_0-9]: " + Bytes.toString(namespaceName, - offset, length)); } public byte[] getName() { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestTableName.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestTableName.java index 94070f3..7dbff26 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestTableName.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestTableName.java @@ -23,7 +23,6 @@ import java.util.Map; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertSame; import static org.junit.Assert.fail; @@ -54,7 +53,7 @@ public class TestTableName extends TestWatcher { return tableName; } - String emptyTableNames[] ={"", " "}; + String emptyNames[] ={"", " "}; String invalidNamespace[] = {":a", "%:a"}; String legalTableNames[] = { "foo", "with-dash_under.dot", "_under_start_ok", "with-dash.with_underscore", "02-01-2012.my_table_01-02", "xyz._mytable_", "9_9_0.table_02" @@ -74,8 +73,16 @@ public class TestTableName extends TestWatcher { } @Test(expected = IllegalArgumentException.class) + public void testEmptyNamespaceName() { + for (String nn : emptyNames) { + TableName.isLegalNamespaceName(Bytes.toBytes(nn)); + fail("invalid Namespace name " + nn + " should have failed with IllegalArgumentException"); + } + } + + @Test(expected = IllegalArgumentException.class) public void testEmptyTableName() { - for (String tn : emptyTableNames) { + for (String tn : emptyNames) { TableName.isLegalFullyQualifiedTableName(Bytes.toBytes(tn)); fail("invalid tablename " + tn + " should have failed with IllegalArgumentException"); } -- 1.8.4.msysgit.0