Skip to content

Commit e6811be

Browse files
frsyukikomamitsu
authored andcommitted
MessageBuffer is now always safe to get internal array, and exposing base and address become unnecessary
1 parent b662828 commit e6811be

8 files changed

Lines changed: 16 additions & 64 deletions

File tree

msgpack-core/src/main/java/org/msgpack/core/MessagePacker.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ else if (s.length() < (1 << 8)) {
505505
}
506506
// move 1 byte backward to expand 3-byte header region to 3 bytes
507507
buffer.putBytes(position + 3,
508-
buffer.getArray(), buffer.offset() + position + 2, written);
508+
buffer.array(), buffer.arrayOffset() + position + 2, written);
509509
// write 3-byte header header
510510
buffer.putByte(position++, STR16);
511511
buffer.putShort(position, (short) written);
@@ -534,7 +534,7 @@ else if (s.length() < (1 << 16)) {
534534
}
535535
// move 2 bytes backward to expand 3-byte header region to 5 bytes
536536
buffer.putBytes(position + 5,
537-
buffer.getArray(), buffer.offset() + position + 3, written);
537+
buffer.array(), buffer.arrayOffset() + position + 3, written);
538538
// write 3-byte header header
539539
buffer.putByte(position++, STR32);
540540
buffer.putInt(position, written);

msgpack-core/src/main/java/org/msgpack/core/MessageUnpacker.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -255,8 +255,8 @@ private MessageBuffer readCastBuffer(int length)
255255

256256
// TODO this doesn't work if MessageBuffer is allocated by newDirectBuffer.
257257
// add copy method to MessageBuffer to solve this issue.
258-
castBuffer.putBytes(0, buffer.getArray(), buffer.offset() + position, remaining);
259-
castBuffer.putBytes(remaining, next.getArray(), next.offset(), length - remaining);
258+
castBuffer.putBytes(0, buffer.array(), buffer.arrayOffset() + position, remaining);
259+
castBuffer.putBytes(remaining, next.array(), next.arrayOffset(), length - remaining);
260260

261261
totalReadBytes += buffer.size();
262262

@@ -1106,9 +1106,8 @@ private void handleCoderError(CoderResult cr)
11061106
private String decodeStringFastPath(int length)
11071107
{
11081108
if (actionOnMalformedString == CodingErrorAction.REPLACE &&
1109-
actionOnUnmappableString == CodingErrorAction.REPLACE &&
1110-
buffer.hasArray()) {
1111-
String s = new String(buffer.getArray(), buffer.offset() + position, length, MessagePack.UTF8);
1109+
actionOnUnmappableString == CodingErrorAction.REPLACE) {
1110+
String s = new String(buffer.array(), buffer.arrayOffset() + position, length, MessagePack.UTF8);
11121111
position += length;
11131112
return s;
11141113
}

msgpack-core/src/main/java/org/msgpack/core/annotations/Nullable.java renamed to msgpack-core/src/main/java/org/msgpack/core/Nullable.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@
1313
// See the License for the specific language governing permissions and
1414
// limitations under the License.
1515
//
16-
package org.msgpack.core.annotations;
16+
package org.msgpack.core;
1717

1818
/**
1919
* Annotates a field which can be null
2020
*/
21-
public @interface Nullable
21+
@interface Nullable
2222
{
2323
}

msgpack-core/src/main/java/org/msgpack/core/Preconditions.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
*/
3232
package org.msgpack.core;
3333

34-
import org.msgpack.core.annotations.Nullable;
3534
import org.msgpack.core.annotations.VisibleForTesting;
3635

3736
/**

msgpack-core/src/main/java/org/msgpack/core/annotations/Insecure.java

Lines changed: 0 additions & 23 deletions
This file was deleted.

msgpack-core/src/main/java/org/msgpack/core/buffer/MessageBuffer.java

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
//
1616
package org.msgpack.core.buffer;
1717

18-
import org.msgpack.core.annotations.Insecure;
1918
import sun.misc.Unsafe;
2019

2120
import java.lang.reflect.Constructor;
@@ -428,39 +427,14 @@ public byte[] toByteArray()
428427
return b;
429428
}
430429

431-
@Insecure
432-
public boolean hasArray()
433-
{
434-
return base instanceof byte[];
435-
}
436-
437-
@Insecure
438-
public byte[] getArray()
430+
public byte[] array()
439431
{
440432
return (byte[]) base;
441433
}
442434

443-
@Insecure
444-
public Object getBase()
445-
{
446-
return base;
447-
}
448-
449-
@Insecure
450-
public long getAddress()
435+
public int arrayOffset()
451436
{
452-
return address;
453-
}
454-
455-
@Insecure
456-
public int offset()
457-
{
458-
if (hasArray()) {
459-
return (int) address - ARRAY_BYTE_BASE_OFFSET;
460-
}
461-
else {
462-
return 0;
463-
}
437+
return (int) address - ARRAY_BYTE_BASE_OFFSET;
464438
}
465439

466440
/**

msgpack-core/src/main/java/org/msgpack/core/buffer/MessageBufferU.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ public class MessageBufferU
3333
MessageBufferU(byte[] arr, int offset, int length)
3434
{
3535
super(arr, offset, length);
36-
this.wrap = ByteBuffer.wrap(arr, offset, length);
36+
ByteBuffer bb = ByteBuffer.wrap(arr);
37+
bb.position(offset);
38+
bb.limit(offset + length);
39+
this.wrap = bb.slice();
3740
}
3841

3942
private MessageBufferU(Object base, long address, int length, ByteBuffer wrap)

msgpack-core/src/main/java/org/msgpack/core/buffer/OutputStreamBufferOutput.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public MessageBuffer next(int mimimumSize)
6868
public void writeBuffer(int length)
6969
throws IOException
7070
{
71-
write(buffer.getArray(), buffer.offset(), length);
71+
write(buffer.array(), buffer.arrayOffset(), length);
7272
}
7373

7474
@Override

0 commit comments

Comments
 (0)