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 caf8461b0b5d..463a97b55844 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 @@ -1157,9 +1157,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; }