Index: lucene/core/src/java/org/apache/lucene/store/BufferedIndexInput.java =================================================================== --- lucene/core/src/java/org/apache/lucene/store/BufferedIndexInput.java (revision 1307763) +++ lucene/core/src/java/org/apache/lucene/store/BufferedIndexInput.java (working copy) @@ -199,17 +199,17 @@ public final int readVInt() throws IOException { if (5 <= (bufferLength-bufferPosition)) { byte b = buffer[bufferPosition++]; + if (b >= 0) return b; int i = b & 0x7F; - if ((b & 0x80) == 0) return i; b = buffer[bufferPosition++]; i |= (b & 0x7F) << 7; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = buffer[bufferPosition++]; i |= (b & 0x7F) << 14; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = buffer[bufferPosition++]; i |= (b & 0x7F) << 21; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = buffer[bufferPosition++]; // Warning: the next ands use 0x0F / 0xF0 - beware copy/paste errors: i |= (b & 0x0F) << 28; @@ -224,32 +224,32 @@ public final long readVLong() throws IOException { if (9 <= bufferLength-bufferPosition) { byte b = buffer[bufferPosition++]; + if (b >= 0) return b; long i = b & 0x7FL; - if ((b & 0x80) == 0) return i; b = buffer[bufferPosition++]; i |= (b & 0x7FL) << 7; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = buffer[bufferPosition++]; i |= (b & 0x7FL) << 14; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = buffer[bufferPosition++]; i |= (b & 0x7FL) << 21; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = buffer[bufferPosition++]; i |= (b & 0x7FL) << 28; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = buffer[bufferPosition++]; i |= (b & 0x7FL) << 35; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = buffer[bufferPosition++]; i |= (b & 0x7FL) << 42; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = buffer[bufferPosition++]; i |= (b & 0x7FL) << 49; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = buffer[bufferPosition++]; i |= (b & 0x7FL) << 56; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; throw new IOException("Invalid vLong detected (negative values disallowed)"); } else { return super.readVLong(); Index: lucene/core/src/java/org/apache/lucene/store/ByteArrayDataInput.java =================================================================== --- lucene/core/src/java/org/apache/lucene/store/ByteArrayDataInput.java (revision 1307763) +++ lucene/core/src/java/org/apache/lucene/store/ByteArrayDataInput.java (working copy) @@ -102,17 +102,17 @@ @Override public int readVInt() { byte b = bytes[pos++]; + if (b >= 0) return b; int i = b & 0x7F; - if ((b & 0x80) == 0) return i; b = bytes[pos++]; i |= (b & 0x7F) << 7; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = bytes[pos++]; i |= (b & 0x7F) << 14; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = bytes[pos++]; i |= (b & 0x7F) << 21; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = bytes[pos++]; // Warning: the next ands use 0x0F / 0xF0 - beware copy/paste errors: i |= (b & 0x0F) << 28; @@ -123,32 +123,32 @@ @Override public long readVLong() { byte b = bytes[pos++]; + if (b >= 0) return b; long i = b & 0x7FL; - if ((b & 0x80) == 0) return i; b = bytes[pos++]; i |= (b & 0x7FL) << 7; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = bytes[pos++]; i |= (b & 0x7FL) << 14; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = bytes[pos++]; i |= (b & 0x7FL) << 21; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = bytes[pos++]; i |= (b & 0x7FL) << 28; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = bytes[pos++]; i |= (b & 0x7FL) << 35; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = bytes[pos++]; i |= (b & 0x7FL) << 42; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = bytes[pos++]; i |= (b & 0x7FL) << 49; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = bytes[pos++]; i |= (b & 0x7FL) << 56; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; throw new RuntimeException("Invalid vLong detected (negative values disallowed)"); } Index: lucene/core/src/java/org/apache/lucene/store/DataInput.java =================================================================== --- lucene/core/src/java/org/apache/lucene/store/DataInput.java (revision 1307763) +++ lucene/core/src/java/org/apache/lucene/store/DataInput.java (working copy) @@ -94,17 +94,17 @@ return i; */ byte b = readByte(); + if (b >= 0) return b; int i = b & 0x7F; - if ((b & 0x80) == 0) return i; b = readByte(); i |= (b & 0x7F) << 7; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = readByte(); i |= (b & 0x7F) << 14; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = readByte(); i |= (b & 0x7F) << 21; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = readByte(); // Warning: the next ands use 0x0F / 0xF0 - beware copy/paste errors: i |= (b & 0x0F) << 28; @@ -135,32 +135,32 @@ return i; */ byte b = readByte(); + if (b >= 0) return b; long i = b & 0x7FL; - if ((b & 0x80) == 0) return i; b = readByte(); i |= (b & 0x7FL) << 7; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = readByte(); i |= (b & 0x7FL) << 14; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = readByte(); i |= (b & 0x7FL) << 21; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = readByte(); i |= (b & 0x7FL) << 28; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = readByte(); i |= (b & 0x7FL) << 35; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = readByte(); i |= (b & 0x7FL) << 42; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = readByte(); i |= (b & 0x7FL) << 49; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; b = readByte(); i |= (b & 0x7FL) << 56; - if ((b & 0x80) == 0) return i; + if (b >= 0) return i; throw new IOException("Invalid vLong detected (negative values disallowed)"); }