Ver Fonte

PROTBUF-3394 Potential SIGBUS with UnsafeUtil.getLong

alanbur há 8 anos atrás
pai
commit
a68a8004b5
1 ficheiros alterados com 1 adições e 1 exclusões
  1. 1 1
      java/core/src/main/java/com/google/protobuf/Utf8.java

+ 1 - 1
java/core/src/main/java/com/google/protobuf/Utf8.java

@@ -1362,7 +1362,7 @@ final class Utf8 {
       // Read bytes until 8-byte aligned so that we can read longs in the loop below.
       // Read bytes until 8-byte aligned so that we can read longs in the loop below.
       // We do this by ANDing the address with 7 to determine the number of bytes that need to
       // We do this by ANDing the address with 7 to determine the number of bytes that need to
       // be read before we're 8-byte aligned.
       // be read before we're 8-byte aligned.
-      final int unaligned = (int) address & 7;
+      final int unaligned = 8 - ((int) address & 7);
       for (int j = unaligned; j > 0; j--) {
       for (int j = unaligned; j > 0; j--) {
         if (UnsafeUtil.getByte(address++) < 0) {
         if (UnsafeUtil.getByte(address++) < 0) {
           return unaligned - j;
           return unaligned - j;