You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2010/01/21 16:46:41 UTC
svn commit: r901748 - in /incubator/cassandra/trunk:
src/java/org/apache/cassandra/service/ThriftValidation.java
test/system/test_server.py
Author: jbellis
Date: Thu Jan 21 15:46:41 2010
New Revision: 901748
URL: http://svn.apache.org/viewvc?rev=901748&view=rev
Log:
enforce already-present requirement that encoded key length not exceed 64K at the thrift level. patch by jbellis
Modified:
incubator/cassandra/trunk/src/java/org/apache/cassandra/service/ThriftValidation.java
incubator/cassandra/trunk/test/system/test_server.py
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/ThriftValidation.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/ThriftValidation.java?rev=901748&r1=901747&r2=901748&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/ThriftValidation.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/ThriftValidation.java Thu Jan 21 15:46:41 2010
@@ -42,6 +42,21 @@
{
throw new InvalidRequestException("Key may not be empty");
}
+ // check that writeUTF will be able to handle it -- encoded length must fit in 2 bytes
+ int strlen = key.length();
+ int utflen = 0;
+ for (int i = 0; i < strlen; i++)
+ {
+ int c = key.charAt(i);
+ if ((c >= 0x0001) && (c <= 0x007F))
+ utflen++;
+ else if (c > 0x07FF)
+ utflen += 3;
+ else
+ utflen += 2;
+ }
+ if (utflen > 65535)
+ throw new InvalidRequestException("Encoded key length of " + utflen + " is longer than maximum of 65535");
}
private static void validateTable(String tablename) throws KeyspaceNotDefinedException
Modified: incubator/cassandra/trunk/test/system/test_server.py
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/test/system/test_server.py?rev=901748&r1=901747&r2=901748&view=diff
==============================================================================
--- incubator/cassandra/trunk/test/system/test_server.py (original)
+++ incubator/cassandra/trunk/test/system/test_server.py Thu Jan 21 15:46:41 2010
@@ -493,6 +493,8 @@
def test_bad_calls(self):
# supercolumn in a non-super CF
_expect_exception(lambda: client.insert('Keyspace1', 'key1', ColumnPath('Standard1', 'x', 'y'), 'value', 0, ConsistencyLevel.ONE), InvalidRequestException)
+ # key too long
+ _expect_exception(lambda: client.get('Keyspace1', 'x' * 2**16, ColumnPath('Standard1', column='c1'), ConsistencyLevel.ONE), InvalidRequestException)
# empty key
_expect_exception(lambda: client.get('Keyspace1', '', ColumnPath('Standard1', column='c1'), ConsistencyLevel.ONE), InvalidRequestException)
cfmap = {'Super1': [ColumnOrSuperColumn(super_column=c) for c in _SUPER_COLUMNS],