diff --git a/common/unsafe/src/main/java/org/apache/spark/unsafe/types/UTF8String.java b/common/unsafe/src/main/java/org/apache/spark/unsafe/types/UTF8String.java index 1d96f8126e23..b9a34e9c8577 100644 --- a/common/unsafe/src/main/java/org/apache/spark/unsafe/types/UTF8String.java +++ b/common/unsafe/src/main/java/org/apache/spark/unsafe/types/UTF8String.java @@ -717,9 +717,10 @@ public UTF8String reverse() { int i = 0; // position in byte while (i < numBytes) { - int len = numBytesForFirstByte(getByte(i)); + int len = Math.min(numBytesForFirstByte(getByte(i)), numBytes); + int targetOffset = Math.max(result.length - i - len, 0); copyMemory(this.base, this.offset + i, result, - BYTE_ARRAY_OFFSET + result.length - i - len, len); + BYTE_ARRAY_OFFSET + targetOffset, len); i += len; }