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 2011/02/05 20:38:36 UTC
svn commit: r1067490 - in /cassandra/branches/cassandra-0.7:
src/java/org/apache/cassandra/cli/ src/java/org/apache/cassandra/db/
src/java/org/apache/cassandra/db/marshal/
src/java/org/apache/cassandra/dht/ src/java/org/apache/cassandra/utils/
test/uni...
Author: jbellis
Date: Sat Feb 5 19:38:35 2011
New Revision: 1067490
URL: http://svn.apache.org/viewvc?rev=1067490&view=rev
Log:
Make BBU.string validate input for the desired Charset
patch by jbellis; reviewed by slebresne for CASSANDRA-2091
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/HintedHandOffManager.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/AsciiType.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/UTF8Type.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/dht/CollatingOrderPreservingPartitioner.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/dht/RandomPartitioner.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/ByteBufferUtil.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/FBUtilities.java
cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/TableTest.java
cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java?rev=1067490&r1=1067489&r2=1067490&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java Sat Feb 5 19:38:35 2011
@@ -19,6 +19,7 @@ package org.apache.cassandra.cli;
import java.io.IOException;
import java.nio.ByteBuffer;
+import java.nio.charset.CharacterCodingException;
import java.util.*;
import com.google.common.base.Charsets;
@@ -936,7 +937,7 @@ public class CliClient extends CliUserHe
}
private void executeList(Tree statement)
- throws TException, InvalidRequestException, NotFoundException, IllegalAccessException, InstantiationException, NoSuchFieldException, UnavailableException, TimedOutException
+ throws TException, InvalidRequestException, NotFoundException, IllegalAccessException, InstantiationException, NoSuchFieldException, UnavailableException, TimedOutException, CharacterCodingException
{
if (!CliMain.isConnected() || !hasKeySpace())
return;
@@ -1896,7 +1897,7 @@ public class CliClient extends CliUserHe
* @throws NoSuchFieldException - column not found
*/
private void printSliceList(CfDef columnFamilyDef, List<KeySlice> slices)
- throws NotFoundException, TException, IllegalAccessException, InstantiationException, NoSuchFieldException
+ throws NotFoundException, TException, IllegalAccessException, InstantiationException, NoSuchFieldException, CharacterCodingException
{
AbstractType validator;
String columnFamilyName = columnFamilyDef.getName();
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/HintedHandOffManager.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/HintedHandOffManager.java?rev=1067490&r1=1067489&r2=1067490&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/HintedHandOffManager.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/HintedHandOffManager.java Sat Feb 5 19:38:35 2011
@@ -23,6 +23,7 @@ import java.lang.management.ManagementFa
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
+import java.nio.charset.CharacterCodingException;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeoutException;
@@ -229,12 +230,17 @@ public class HintedHandOffManager implem
int index = ByteBufferUtil.lastIndexOf(joined, SEPARATOR.getBytes()[0], joined.limit());
if (index == -1 || index < (joined.position() + 1))
- throw new RuntimeException("Corrupted hint name " + ByteBufferUtil.string(joined));
+ throw new RuntimeException("Corrupted hint name " + ByteBufferUtil.bytesToHex(joined));
- return new String[] {
- ByteBufferUtil.string(joined, joined.position(), index - joined.position()),
- ByteBufferUtil.string(joined, index + 1, joined.limit() - (index + 1))
- };
+ try
+ {
+ return new String[] { ByteBufferUtil.string(joined, joined.position(), index - joined.position()),
+ ByteBufferUtil.string(joined, index + 1, joined.limit() - (index + 1)) };
+ }
+ catch (CharacterCodingException e)
+ {
+ throw new RuntimeException(e);
+ }
}
private int waitForSchemaAgreement(InetAddress endpoint) throws InterruptedException
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/AsciiType.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/AsciiType.java?rev=1067490&r1=1067489&r2=1067490&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/AsciiType.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/AsciiType.java Sat Feb 5 19:38:35 2011
@@ -22,6 +22,7 @@ package org.apache.cassandra.db.marshal;
import java.nio.ByteBuffer;
+import java.nio.charset.CharacterCodingException;
import com.google.common.base.Charsets;
@@ -36,7 +37,14 @@ public class AsciiType extends BytesType
@Override
public String getString(ByteBuffer bytes)
{
- return ByteBufferUtil.string(bytes, Charsets.US_ASCII);
+ try
+ {
+ return ByteBufferUtil.string(bytes, Charsets.US_ASCII);
+ }
+ catch (CharacterCodingException e)
+ {
+ throw new MarshalException("Invalid ascii bytes " + ByteBufferUtil.bytesToHex(bytes));
+ }
}
public ByteBuffer fromString(String source)
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/UTF8Type.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/UTF8Type.java?rev=1067490&r1=1067489&r2=1067490&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/UTF8Type.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/marshal/UTF8Type.java Sat Feb 5 19:38:35 2011
@@ -22,12 +22,10 @@ package org.apache.cassandra.db.marshal;
import java.nio.ByteBuffer;
import java.nio.charset.CharacterCodingException;
-import java.util.Arrays;
import com.google.common.base.Charsets;
import org.apache.cassandra.utils.ByteBufferUtil;
-import org.apache.cassandra.utils.FBUtilities;
public class UTF8Type extends BytesType
{
@@ -39,11 +37,11 @@ public class UTF8Type extends BytesType
{
try
{
- return FBUtilities.decodeToUTF8(bytes);
+ return ByteBufferUtil.string(bytes, Charsets.UTF_8);
}
catch (CharacterCodingException e)
{
- throw new MarshalException("invalid UTF8 bytes " + ByteBufferUtil.string(bytes));
+ throw new MarshalException("invalid UTF8 bytes " + ByteBufferUtil.bytesToHex(bytes));
}
}
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/dht/CollatingOrderPreservingPartitioner.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/dht/CollatingOrderPreservingPartitioner.java?rev=1067490&r1=1067489&r2=1067490&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/dht/CollatingOrderPreservingPartitioner.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/dht/CollatingOrderPreservingPartitioner.java Sat Feb 5 19:38:35 2011
@@ -25,7 +25,9 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
-import org.apache.cassandra.utils.FBUtilities;
+import com.google.common.base.Charsets;
+
+import org.apache.cassandra.utils.ByteBufferUtil;
public class CollatingOrderPreservingPartitioner extends AbstractByteOrderedPartitioner
{
@@ -39,7 +41,7 @@ public class CollatingOrderPreservingPar
String skey;
try
{
- skey = FBUtilities.decodeToUTF8(key);
+ skey = ByteBufferUtil.string(key, Charsets.UTF_8);
}
catch (CharacterCodingException e)
{
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java?rev=1067490&r1=1067489&r2=1067490&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java Sat Feb 5 19:38:35 2011
@@ -123,7 +123,14 @@ public class OrderPreservingPartitioner
public Token<String> fromByteArray(ByteBuffer bytes)
{
- return new StringToken(ByteBufferUtil.string(bytes, Charsets.UTF_8));
+ try
+ {
+ return new StringToken(ByteBufferUtil.string(bytes, Charsets.UTF_8));
+ }
+ catch (CharacterCodingException e)
+ {
+ throw new RuntimeException(e);
+ }
}
public String toString(Token<String> stringToken)
@@ -152,7 +159,7 @@ public class OrderPreservingPartitioner
String skey;
try
{
- skey = FBUtilities.decodeToUTF8(key);
+ skey = ByteBufferUtil.string(key, Charsets.UTF_8);
}
catch (CharacterCodingException e)
{
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/dht/RandomPartitioner.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/dht/RandomPartitioner.java?rev=1067490&r1=1067489&r2=1067490&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/dht/RandomPartitioner.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/dht/RandomPartitioner.java Sat Feb 5 19:38:35 2011
@@ -21,6 +21,7 @@ package org.apache.cassandra.dht;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.nio.ByteBuffer;
+import java.nio.charset.CharacterCodingException;
import java.util.*;
import org.apache.cassandra.db.DecoratedKey;
@@ -61,7 +62,15 @@ public class RandomPartitioner implement
assert splitPoint != -1;
// and decode the token and key
- String token = ByteBufferUtil.string(fromdisk, fromdisk.position(), splitPoint - fromdisk.position(), UTF_8);
+ String token = null;
+ try
+ {
+ token = ByteBufferUtil.string(fromdisk, fromdisk.position(), splitPoint - fromdisk.position(), UTF_8);
+ }
+ catch (CharacterCodingException e)
+ {
+ throw new RuntimeException(e);
+ }
ByteBuffer key = fromdisk.duplicate();
key.position(splitPoint + 1);
return new DecoratedKey<BigIntegerToken>(new BigIntegerToken(token), key);
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/ByteBufferUtil.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/ByteBufferUtil.java?rev=1067490&r1=1067489&r2=1067490&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/ByteBufferUtil.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/ByteBufferUtil.java Sat Feb 5 19:38:35 2011
@@ -25,6 +25,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
+import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.util.Arrays;
@@ -100,28 +101,27 @@ public class ByteBufferUtil
return compareUnsigned(o1, ByteBuffer.wrap(o2));
}
- public static String string(ByteBuffer buffer)
+ public static String string(ByteBuffer buffer) throws CharacterCodingException
{
return string(buffer, Charset.defaultCharset());
}
- public static String string(ByteBuffer buffer, Charset charset)
+ public static String string(ByteBuffer buffer, int offset, int length) throws CharacterCodingException
{
- return string(buffer, buffer.position(), buffer.remaining(), charset);
+ return string(buffer, offset, length, Charset.defaultCharset());
}
- public static String string(ByteBuffer buffer, int offset, int length)
+ public static String string(ByteBuffer buffer, int offset, int length, Charset charset) throws CharacterCodingException
{
- return string(buffer, offset, length, Charset.defaultCharset());
+ ByteBuffer copy = buffer.duplicate();
+ copy.position(buffer.position() + offset);
+ copy.limit(copy.position() + length);
+ return string(buffer, charset);
}
- public static String string(ByteBuffer buffer, int offset, int length, Charset charset)
+ public static String string(ByteBuffer buffer, Charset charset) throws CharacterCodingException
{
- if (buffer.hasArray())
- return new String(buffer.array(), buffer.arrayOffset() + offset, length, charset);
-
- byte[] buff = getArray(buffer, offset, length);
- return new String(buff, charset);
+ return charset.newDecoder().decode(buffer.duplicate()).toString();
}
/**
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/FBUtilities.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/FBUtilities.java?rev=1067490&r1=1067489&r2=1067490&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/FBUtilities.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/FBUtilities.java Sat Feb 5 19:38:35 2011
@@ -398,11 +398,6 @@ public class FBUtilities
return utflen;
}
- public static String decodeToUTF8(ByteBuffer bytes) throws CharacterCodingException
- {
- return Charsets.UTF_8.newDecoder().decode(bytes.duplicate()).toString();
- }
-
public static ByteBuffer toByteBuffer(long n)
{
byte[] bytes = new byte[8];
Modified: cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/TableTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/TableTest.java?rev=1067490&r1=1067489&r2=1067490&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/TableTest.java (original)
+++ cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/TableTest.java Sat Feb 5 19:38:35 2011
@@ -19,6 +19,7 @@
package org.apache.cassandra.db;
import java.nio.ByteBuffer;
+import java.nio.charset.CharacterCodingException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.*;
@@ -511,7 +512,14 @@ public class TableTest extends CleanupHe
List<String> L = new ArrayList<String>();
for (IColumn column : columns)
{
- L.add(ByteBufferUtil.string(column.name()));
+ try
+ {
+ L.add(ByteBufferUtil.string(column.name()));
+ }
+ catch (CharacterCodingException e)
+ {
+ throw new AssertionError(e);
+ }
}
List<String> names = new ArrayList<String>(columnNames.length);
Modified: cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java?rev=1067490&r1=1067489&r2=1067490&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java (original)
+++ cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/utils/FBUtilitiesTest.java Sat Feb 5 19:38:35 2011
@@ -26,6 +26,7 @@ import java.nio.ByteBuffer;
import java.nio.charset.CharacterCodingException;
import java.util.Arrays;
+import com.google.common.base.Charsets;
import org.junit.Test;
public class FBUtilitiesTest
@@ -89,6 +90,6 @@ public class FBUtilitiesTest
public void testDecode() throws IOException
{
ByteBuffer bytes = ByteBuffer.wrap(new byte[]{(byte)0xff, (byte)0xfe});
- FBUtilities.decodeToUTF8(bytes);
+ ByteBufferUtil.string(bytes, Charsets.UTF_8);
}
}