File tomcat-9.0.31-java8compat.patch of Package tomcat.29138
Index: apache-tomcat-9.0.35-src/java/org/apache/catalina/connector/InputBuffer.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/catalina/connector/InputBuffer.java
+++ apache-tomcat-9.0.35-src/java/org/apache/catalina/connector/InputBuffer.java
@@ -389,10 +389,10 @@ public class InputBuffer extends Reader
}
int n = Math.min(to.remaining(), bb.remaining());
int orgLimit = bb.limit();
- bb.limit(bb.position() + n);
+ ((Buffer)bb).limit(bb.position() + n);
to.put(bb);
- bb.limit(orgLimit);
- to.limit(to.position()).position(to.position() - n);
+ ((Buffer)bb).limit(orgLimit);
+ ((Buffer)to).limit(to.position()).position(to.position() - n);
return n;
}
@@ -488,11 +488,11 @@ public class InputBuffer extends Reader
long nRead = 0;
while (nRead < n) {
if (cb.remaining() >= n) {
- cb.position(cb.position() + (int) n);
+ ((Buffer)cb).position(cb.position() + (int) n);
nRead = n;
} else {
nRead += cb.remaining();
- cb.position(cb.limit());
+ ((Buffer)cb).position(cb.limit());
int nb = realReadChars();
if (nb < 0) {
break;
@@ -533,7 +533,7 @@ public class InputBuffer extends Reader
} else {
if ((cb.capacity() > (2 * size)) && (cb.remaining()) < (cb.position())) {
cb.compact();
- cb.flip();
+ ((Buffer)cb).flip();
}
}
readLimit = cb.position() + readAheadLimit + size;
@@ -554,7 +554,7 @@ public class InputBuffer extends Reader
markPos = -1;
throw new IOException();
} else {
- cb.position(markPos);
+ ((Buffer)cb).position(markPos);
}
} else {
clear(bb);
@@ -672,10 +672,10 @@ public class InputBuffer extends Reader
CharBuffer tmp = CharBuffer.allocate(newSize);
int oldPosition = cb.position();
- cb.position(0);
+ ((Buffer)cb).position(0);
tmp.put(cb);
- tmp.flip();
- tmp.position(oldPosition);
+ ((Buffer)tmp).flip();
+ ((Buffer)tmp).position(oldPosition);
cb = tmp;
tmp = null;
}
Index: apache-tomcat-9.0.35-src/java/org/apache/catalina/connector/OutputBuffer.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/catalina/connector/OutputBuffer.java
+++ apache-tomcat-9.0.35-src/java/org/apache/catalina/connector/OutputBuffer.java
@@ -761,10 +761,10 @@ public class OutputBuffer extends Writer
int limit = bb.capacity();
int fromLimit = from.limit();
while (from.remaining() >= limit) {
- from.limit(from.position() + limit);
+ ((Buffer)from).limit(from.position() + limit);
realWriteBytes(from.slice());
- from.position(from.limit());
- from.limit(fromLimit);
+ ((Buffer)from).position(from.limit());
+ ((Buffer)from).limit(fromLimit);
}
if (from.remaining() > 0) {
Index: apache-tomcat-9.0.35-src/java/org/apache/catalina/tribes/transport/nio/NioReplicationTask.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/catalina/tribes/transport/nio/NioReplicationTask.java
+++ apache-tomcat-9.0.35-src/java/org/apache/catalina/tribes/transport/nio/NioReplicationTask.java
@@ -18,6 +18,7 @@
package org.apache.catalina.tribes.transport.nio;
import java.io.IOException;
import java.net.SocketAddress;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.CancelledKeyException;
import java.nio.channels.DatagramChannel;
@@ -80,7 +81,7 @@ public class NioReplicationTask extends
buffer = ByteBuffer.allocate(size);
}
} else {
- buffer.clear();
+ ((Buffer)buffer).clear();
}
if (key == null) {
return; // just in case
@@ -156,30 +157,30 @@ public class NioReplicationTask extends
reader.access();
ReadableByteChannel channel = (ReadableByteChannel) key.channel();
int count=-1;
- buffer.clear(); // make buffer empty
+ ((Buffer)buffer).clear(); // make buffer empty
SocketAddress saddr = null;
if (channel instanceof SocketChannel) {
// loop while data available, channel is non-blocking
while ((count = channel.read (buffer)) > 0) {
- buffer.flip(); // make buffer readable
+ ((Buffer)buffer).flip(); // make buffer readable
if ( buffer.hasArray() )
reader.append(buffer.array(),0,count,false);
else
reader.append(buffer,count,false);
- buffer.clear(); // make buffer empty
+ ((Buffer)buffer).clear(); // make buffer empty
//do we have at least one package?
if ( reader.hasPackage() ) break;
}
} else if (channel instanceof DatagramChannel) {
DatagramChannel dchannel = (DatagramChannel)channel;
saddr = dchannel.receive(buffer);
- buffer.flip(); // make buffer readable
+ ((Buffer)buffer).flip(); // make buffer readable
if ( buffer.hasArray() )
reader.append(buffer.array(),0,buffer.limit()-buffer.position(),false);
else
reader.append(buffer,buffer.limit()-buffer.position(),false);
- buffer.clear(); // make buffer empty
+ ((Buffer)buffer).clear(); // make buffer empty
//did we get a package
count = reader.hasPackage()?1:-1;
}
Index: apache-tomcat-9.0.35-src/java/org/apache/catalina/tribes/transport/nio/NioSender.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/catalina/tribes/transport/nio/NioSender.java
+++ apache-tomcat-9.0.35-src/java/org/apache/catalina/tribes/transport/nio/NioSender.java
@@ -20,6 +20,7 @@ package org.apache.catalina.tribes.trans
import java.io.EOFException;
import java.io.IOException;
import java.net.InetSocketAddress;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
import java.nio.channels.SelectionKey;
@@ -173,9 +174,9 @@ public class NioSender extends AbstractS
if ( read == -1 ) throw new IOException(sm.getString("nioSender.unable.receive.ack"));
//no data read
else if ( read == 0 ) return false;
- readbuf.flip();
+ ((Buffer)readbuf).flip();
ackbuf.append(readbuf,read);
- readbuf.clear();
+ ((Buffer)readbuf).clear();
if (ackbuf.doesPackageExist() ) {
byte[] ackcmd = ackbuf.extractDataPackage(true).getBytes();
boolean ack = Arrays.equals(ackcmd,org.apache.catalina.tribes.transport.Constants.ACK_DATA);
@@ -225,12 +226,12 @@ public class NioSender extends AbstractS
if ( readbuf == null ) {
readbuf = getReadBuffer();
} else {
- readbuf.clear();
+ ((Buffer)readbuf).clear();
}
if ( writebuf == null ) {
writebuf = getWriteBuffer();
} else {
- writebuf.clear();
+ ((Buffer)writebuf).clear();
}
if (isUdpBased()) {
@@ -317,8 +318,8 @@ public class NioSender extends AbstractS
if ( isConnected() && readbuf == null) {
readbuf = getReadBuffer();
}
- if ( readbuf != null ) readbuf.clear();
- if ( writebuf != null ) writebuf.clear();
+ if ( readbuf != null ) ((Buffer)readbuf).clear();
+ if ( writebuf != null ) ((Buffer)writebuf).clear();
current = null;
ackbuf.clear();
remaining = 0;
@@ -357,7 +358,7 @@ public class NioSender extends AbstractS
remaining = length;
ackbuf.clear();
if (writebuf != null) {
- writebuf.clear();
+ ((Buffer)writebuf).clear();
} else {
writebuf = getBuffer(length);
}
@@ -367,7 +368,7 @@ public class NioSender extends AbstractS
// TODO use ByteBuffer.wrap to avoid copying the data.
writebuf.put(data,offset,length);
- writebuf.flip();
+ ((Buffer)writebuf).flip();
if (isConnected()) {
if (isUdpBased())
dataChannel.register(getSelector(), SelectionKey.OP_WRITE, this);
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/ajp/AjpProcessor.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/ajp/AjpProcessor.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/ajp/AjpProcessor.java
@@ -21,6 +21,7 @@ import java.io.EOFException;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.InetAddress;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.security.NoSuchProviderException;
import java.security.cert.CertificateFactory;
@@ -1258,7 +1259,7 @@ public class AjpProcessor extends Abstra
responseMessage.reset();
responseMessage.appendByte(Constants.JK_AJP13_SEND_BODY_CHUNK);
- chunk.limit(chunk.position() + thisTime);
+ ((Buffer)chunk).limit(chunk.position() + thisTime);
responseMessage.appendBytes(chunk);
responseMessage.end();
socketWrapper.write(blocking, responseMessage.getBuffer(), 0, responseMessage.getLen());
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/filters/BufferedInputFilter.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http11/filters/BufferedInputFilter.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/filters/BufferedInputFilter.java
@@ -18,6 +18,7 @@
package org.apache.coyote.http11.filters;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.BufferOverflowException;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
@@ -68,7 +69,7 @@ public class BufferedInputFilter impleme
public void setLimit(int limit) {
if (buffered == null) {
buffered = ByteBuffer.allocate(limit);
- buffered.flip();
+ ((Buffer)buffered).flip();
}
}
@@ -84,9 +85,9 @@ public class BufferedInputFilter impleme
// save off the Request body
try {
while (buffer.doRead(this) >= 0) {
- buffered.mark().position(buffered.limit()).limit(buffered.capacity());
+ ((Buffer)buffered).mark().position(buffered.limit()).limit(buffered.capacity());
buffered.put(tempRead);
- buffered.limit(buffered.position()).reset();
+ ((Buffer)buffered).limit(buffered.position()).reset();
tempRead = null;
}
} catch(IOException | BufferOverflowException ioe) {
@@ -121,7 +122,7 @@ public class BufferedInputFilter impleme
if (buffered.capacity() > 65536) {
buffered = null;
} else {
- buffered.position(0).limit(0);
+ ((Buffer)buffered).position(0).limit(0);
}
}
hasRead = false;
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java
@@ -18,6 +18,7 @@ package org.apache.coyote.http11.filters
import java.io.EOFException;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.Locale;
@@ -184,14 +185,14 @@ public class ChunkedInputFilter implemen
if (readChunk != handler.getByteBuffer()) {
handler.setByteBuffer(readChunk.duplicate());
}
- readChunk.position(readChunk.limit());
+ ((Buffer)readChunk).position(readChunk.limit());
} else {
result = remaining;
if (readChunk != handler.getByteBuffer()) {
handler.setByteBuffer(readChunk.duplicate());
handler.getByteBuffer().limit(readChunk.position() + remaining);
}
- readChunk.position(readChunk.position() + remaining);
+ ((Buffer)readChunk).position(readChunk.position() + remaining);
remaining = 0;
//we need a CRLF
if ((readChunk.position() + 1) >= readChunk.limit()) {
@@ -263,7 +264,7 @@ public class ChunkedInputFilter implemen
public void recycle() {
remaining = 0;
if (readChunk != null) {
- readChunk.position(0).limit(0);
+ ((Buffer)readChunk).position(0).limit(0);
}
endChunk = false;
needCRLFParse = false;
@@ -363,7 +364,7 @@ public class ChunkedInputFilter implemen
// Parsing the CRLF increments pos
if (!eol) {
- readChunk.position(readChunk.position() + 1);
+ ((Buffer)readChunk).position(readChunk.position() + 1);
}
}
@@ -415,7 +416,7 @@ public class ChunkedInputFilter implemen
throwIOException(sm.getString("chunkedInputFilter.invalidCrlf"));
}
- readChunk.position(readChunk.position() + 1);
+ ((Buffer)readChunk).position(readChunk.position() + 1);
}
}
@@ -484,7 +485,7 @@ public class ChunkedInputFilter implemen
trailingHeaders.append(chr);
}
- readChunk.position(readChunk.position() + 1);
+ ((Buffer)readChunk).position(readChunk.position() + 1);
}
int colonPos = trailingHeaders.getEnd();
@@ -513,7 +514,7 @@ public class ChunkedInputFilter implemen
chr = readChunk.get(readChunk.position());
if ((chr == Constants.SP) || (chr == Constants.HT)) {
- readChunk.position(readChunk.position() + 1);
+ ((Buffer)readChunk).position(readChunk.position() + 1);
// If we swallow whitespace, make sure it counts towards the
// limit placed on trailing header size
int newlimit = trailingHeaders.getLimit() -1;
@@ -549,7 +550,7 @@ public class ChunkedInputFilter implemen
}
if (!eol) {
- readChunk.position(readChunk.position() + 1);
+ ((Buffer)readChunk).position(readChunk.position() + 1);
}
}
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/filters/ChunkedOutputFilter.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http11/filters/ChunkedOutputFilter.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/filters/ChunkedOutputFilter.java
@@ -18,6 +18,7 @@ package org.apache.coyote.http11.filters
import java.io.IOException;
import java.io.OutputStreamWriter;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.HashSet;
@@ -106,12 +107,12 @@ public class ChunkedOutputFilter impleme
int pos = calculateChunkHeader(result);
- chunkHeader.position(pos).limit(10);
+ ((Buffer)chunkHeader).position(pos).limit(10);
buffer.doWrite(chunkHeader);
buffer.doWrite(chunk);
- chunkHeader.position(8).limit(10);
+ ((Buffer)chunkHeader).position(8).limit(10);
buffer.doWrite(chunkHeader);
return result;
@@ -171,10 +172,10 @@ public class ChunkedOutputFilter impleme
if (trailerFields == null) {
// Write end chunk
buffer.doWrite(endChunk);
- endChunk.position(0).limit(endChunk.capacity());
+ ((Buffer)endChunk).position(0).limit(endChunk.capacity());
} else {
buffer.doWrite(lastChunk);
- lastChunk.position(0).limit(lastChunk.capacity());
+ ((Buffer)lastChunk).position(0).limit(lastChunk.capacity());
ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
OutputStreamWriter osw = new OutputStreamWriter(baos, StandardCharsets.ISO_8859_1);
@@ -194,7 +195,7 @@ public class ChunkedOutputFilter impleme
buffer.doWrite(ByteBuffer.wrap(baos.toByteArray()));
buffer.doWrite(crlfChunk);
- crlfChunk.position(0).limit(crlfChunk.capacity());
+ ((Buffer)crlfChunk).position(0).limit(crlfChunk.capacity());
}
buffer.end();
}
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/filters/IdentityInputFilter.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http11/filters/IdentityInputFilter.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/filters/IdentityInputFilter.java
@@ -18,6 +18,7 @@
package org.apache.coyote.http11.filters;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
@@ -104,7 +105,7 @@ public class IdentityInputFilter impleme
// The chunk is longer than the number of bytes remaining
// in the body; changing the chunk length to the number
// of bytes remaining
- handler.getByteBuffer().limit(handler.getByteBuffer().position() + (int) remaining);
+ ((Buffer)(handler.getByteBuffer())).limit(handler.getByteBuffer().position() + (int) remaining);
result = (int) remaining;
} else {
result = nRead;
@@ -116,7 +117,7 @@ public class IdentityInputFilter impleme
// No more bytes left to be read : return -1 and clear the
// buffer
if (handler.getByteBuffer() != null) {
- handler.getByteBuffer().position(0).limit(0);
+ ((Buffer)(handler.getByteBuffer())).position(0).limit(0);
}
result = -1;
}
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/filters/IdentityOutputFilter.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http11/filters/IdentityOutputFilter.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/filters/IdentityOutputFilter.java
@@ -17,6 +17,7 @@
package org.apache.coyote.http11.filters;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import org.apache.coyote.Response;
@@ -64,7 +65,7 @@ public class IdentityOutputFilter implem
// The chunk is longer than the number of bytes remaining
// in the body; changing the chunk length to the number
// of bytes remaining
- chunk.limit(chunk.position() + (int) remaining);
+ ((Buffer)chunk).limit(chunk.position() + (int) remaining);
result = (int) remaining;
remaining = 0;
} else {
@@ -74,8 +75,8 @@ public class IdentityOutputFilter implem
} else {
// No more bytes left to be written : return -1 and clear the
// buffer
- chunk.position(0);
- chunk.limit(0);
+ ((Buffer)chunk).position(0);
+ ((Buffer)chunk).limit(0);
result = -1;
}
} else {
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/filters/SavedRequestInputFilter.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http11/filters/SavedRequestInputFilter.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/filters/SavedRequestInputFilter.java
@@ -18,6 +18,7 @@
package org.apache.coyote.http11.filters;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import org.apache.coyote.InputBuffer;
@@ -51,7 +52,7 @@ public class SavedRequestInputFilter imp
return -1;
ByteBuffer byteBuffer = handler.getByteBuffer();
- byteBuffer.position(byteBuffer.limit()).limit(byteBuffer.capacity());
+ ((Buffer)byteBuffer).position(byteBuffer.limit()).limit(byteBuffer.capacity());
input.subtract(byteBuffer);
return byteBuffer.remaining();
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/Http11InputBuffer.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http11/Http11InputBuffer.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/Http11InputBuffer.java
@@ -18,6 +18,7 @@ package org.apache.coyote.http11;
import java.io.EOFException;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
@@ -265,7 +266,7 @@ public class Http11InputBuffer implement
activeFilters[i].recycle();
}
- byteBuffer.limit(0).position(0);
+ ((Buffer)byteBuffer).limit(0).position(0);
lastActiveFilter = -1;
parsingHeader = true;
swallowInput = true;
@@ -295,10 +296,10 @@ public class Http11InputBuffer implement
if (byteBuffer.remaining() > 0) {
// Copy leftover bytes to the beginning of the buffer
byteBuffer.compact();
- byteBuffer.flip();
+ ((Buffer)byteBuffer).flip();
} else {
// Reset position and limit to 0
- byteBuffer.position(0).limit(0);
+ ((Buffer)byteBuffer).position(0).limit(0);
}
}
@@ -382,7 +383,7 @@ public class Http11InputBuffer implement
}
chr = byteBuffer.get();
} while ((chr == Constants.CR) || (chr == Constants.LF));
- byteBuffer.position(byteBuffer.position() - 1);
+ ((Buffer)byteBuffer).position(byteBuffer.position() - 1);
parsingRequestLineStart = byteBuffer.position();
parsingRequestLinePhase = 2;
@@ -432,7 +433,7 @@ public class Http11InputBuffer implement
chr = byteBuffer.get();
if (!(chr == Constants.SP || chr == Constants.HT)) {
space = false;
- byteBuffer.position(byteBuffer.position() - 1);
+ ((Buffer)byteBuffer).position(byteBuffer.position() - 1);
}
}
parsingRequestLineStart = byteBuffer.position();
@@ -526,7 +527,7 @@ public class Http11InputBuffer implement
byte chr = byteBuffer.get();
if (!(chr == Constants.SP || chr == Constants.HT)) {
space = false;
- byteBuffer.position(byteBuffer.position() - 1);
+ ((Buffer)byteBuffer).position(byteBuffer.position() - 1);
}
}
parsingRequestLineStart = byteBuffer.position();
@@ -643,7 +644,7 @@ public class Http11InputBuffer implement
if (swallowInput && (lastActiveFilter != -1)) {
int extraBytes = (int) activeFilters[lastActiveFilter].end();
- byteBuffer.position(byteBuffer.position() - extraBytes);
+ ((Buffer)byteBuffer).position(byteBuffer.position() - extraBytes);
}
}
@@ -741,7 +742,7 @@ public class Http11InputBuffer implement
wrapper.getSocketBufferHandler().getReadBuffer().capacity();
if (byteBuffer == null || byteBuffer.capacity() < bufLength) {
byteBuffer = ByteBuffer.allocate(bufLength);
- byteBuffer.position(0).limit(0);
+ ((Buffer)byteBuffer).position(0).limit(0);
}
}
@@ -766,14 +767,14 @@ public class Http11InputBuffer implement
throw new IllegalArgumentException(sm.getString("iib.requestheadertoolarge.error"));
}
} else {
- byteBuffer.limit(end).position(end);
+ ((Buffer)byteBuffer).limit(end).position(end);
}
- byteBuffer.mark();
+ ((Buffer)byteBuffer).mark();
if (byteBuffer.position() < byteBuffer.limit()) {
- byteBuffer.position(byteBuffer.limit());
+ ((Buffer)byteBuffer).position(byteBuffer.limit());
}
- byteBuffer.limit(byteBuffer.capacity());
+ ((Buffer)byteBuffer).limit(byteBuffer.capacity());
SocketWrapperBase<?> socketWrapper = this.wrapper;
int nRead = -1;
if (socketWrapper != null) {
@@ -781,7 +782,7 @@ public class Http11InputBuffer implement
} else {
throw new CloseNowException(sm.getString("iib.eof.error"));
}
- byteBuffer.limit(byteBuffer.position()).reset();
+ ((Buffer)byteBuffer).limit(byteBuffer.position()).reset();
if (nRead > 0) {
return true;
} else if (nRead == -1) {
@@ -821,10 +822,10 @@ public class Http11InputBuffer implement
} else {
if (prevChr == Constants.CR) {
// Must have read two bytes (first was CR, second was not LF)
- byteBuffer.position(byteBuffer.position() - 2);
+ ((Buffer)byteBuffer).position(byteBuffer.position() - 2);
} else {
// Must have only read one byte
- byteBuffer.position(byteBuffer.position() - 1);
+ ((Buffer)byteBuffer).position(byteBuffer.position() - 1);
}
break;
}
@@ -867,7 +868,7 @@ public class Http11InputBuffer implement
// Non-token characters are illegal in header names
// Parsing continues so the error can be reported in context
headerData.lastSignificantChar = pos;
- byteBuffer.position(byteBuffer.position() - 1);
+ ((Buffer)byteBuffer).position(byteBuffer.position() - 1);
// skipLine() will handle the error
return skipLine();
}
@@ -905,7 +906,7 @@ public class Http11InputBuffer implement
chr = byteBuffer.get();
if (!(chr == Constants.SP || chr == Constants.HT)) {
headerParsePos = HeaderParsePosition.HEADER_VALUE;
- byteBuffer.position(byteBuffer.position() - 1);
+ ((Buffer)byteBuffer).position(byteBuffer.position() - 1);
break;
}
}
@@ -1136,7 +1137,7 @@ public class Http11InputBuffer implement
int length = byteBuffer.remaining();
handler.setByteBuffer(byteBuffer.duplicate());
- byteBuffer.position(byteBuffer.limit());
+ ((Buffer)byteBuffer).position(byteBuffer.limit());
return length;
}
@@ -1158,12 +1159,12 @@ public class Http11InputBuffer implement
@Override
public void expand(int size) {
if (byteBuffer.capacity() >= size) {
- byteBuffer.limit(size);
+ ((Buffer)byteBuffer).limit(size);
}
ByteBuffer temp = ByteBuffer.allocate(size);
temp.put(byteBuffer);
byteBuffer = temp;
- byteBuffer.mark();
+ ((Buffer)byteBuffer).mark();
temp = null;
}
}
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/Http11OutputBuffer.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http11/Http11OutputBuffer.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http11/Http11OutputBuffer.java
@@ -17,6 +17,7 @@
package org.apache.coyote.http11;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.util.Arrays;
@@ -242,7 +243,7 @@ public class Http11OutputBuffer implemen
* headers so the error response can be written.
*/
void resetHeaderBuffer() {
- headerBuffer.position(0).limit(headerBuffer.capacity());
+ ((Buffer)headerBuffer).position(0).limit(headerBuffer.capacity());
}
@@ -270,7 +271,7 @@ public class Http11OutputBuffer implemen
// Recycle response object
response.recycle();
// Reset pointers
- headerBuffer.position(0).limit(headerBuffer.capacity());
+ ((Buffer)headerBuffer).position(0).limit(headerBuffer.capacity());
lastActiveFilter = -1;
responseFinished = false;
byteCount = 0;
@@ -302,7 +303,7 @@ public class Http11OutputBuffer implemen
if (headerBuffer.position() > 0) {
// Sending the response header buffer
- headerBuffer.flip();
+ ((Buffer)headerBuffer).flip();
try {
SocketWrapperBase<?> socketWrapper = this.socketWrapper;
if (socketWrapper != null) {
@@ -311,7 +312,7 @@ public class Http11OutputBuffer implemen
throw new CloseNowException(sm.getString("iob.failedwrite"));
}
} finally {
- headerBuffer.position(0).limit(headerBuffer.capacity());
+ ((Buffer)headerBuffer).position(0).limit(headerBuffer.capacity());
}
}
}
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/HpackDecoder.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http2/HpackDecoder.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/HpackDecoder.java
@@ -16,6 +16,7 @@
*/
package org.apache.coyote.http2;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import org.apache.tomcat.util.res.StringManager;
@@ -99,10 +100,10 @@ public class HpackDecoder {
byte b = buffer.get();
if ((b & 0b10000000) != 0) {
//if the first bit is set it is an indexed header field
- buffer.position(buffer.position() - 1); //unget the byte
+ ((Buffer)buffer).position(buffer.position() - 1); //unget the byte
int index = Hpack.decodeInteger(buffer, 7); //prefix is 7
if (index == -1) {
- buffer.position(originalPos);
+ ((Buffer)buffer).position(originalPos);
return;
} else if(index == 0) {
throw new HpackException(
@@ -113,12 +114,12 @@ public class HpackDecoder {
//Literal Header Field with Incremental Indexing
String headerName = readHeaderName(buffer, 6);
if (headerName == null) {
- buffer.position(originalPos);
+ ((Buffer)buffer).position(originalPos);
return;
}
String headerValue = readHpackString(buffer);
if (headerValue == null) {
- buffer.position(originalPos);
+ ((Buffer)buffer).position(originalPos);
return;
}
emitHeader(headerName, headerValue);
@@ -127,12 +128,12 @@ public class HpackDecoder {
//Literal Header Field without Indexing
String headerName = readHeaderName(buffer, 4);
if (headerName == null) {
- buffer.position(originalPos);
+ ((Buffer)buffer).position(originalPos);
return;
}
String headerValue = readHpackString(buffer);
if (headerValue == null) {
- buffer.position(originalPos);
+ ((Buffer)buffer).position(originalPos);
return;
}
emitHeader(headerName, headerValue);
@@ -140,12 +141,12 @@ public class HpackDecoder {
//Literal Header Field never indexed
String headerName = readHeaderName(buffer, 4);
if (headerName == null) {
- buffer.position(originalPos);
+ ((Buffer)buffer).position(originalPos);
return;
}
String headerValue = readHpackString(buffer);
if (headerValue == null) {
- buffer.position(originalPos);
+ ((Buffer)buffer).position(originalPos);
return;
}
emitHeader(headerName, headerValue);
@@ -164,10 +165,10 @@ public class HpackDecoder {
if (headerCount != 0) {
throw new HpackException(sm.getString("hpackdecoder.tableSizeUpdateNotAtStart"));
}
- buffer.position(buffer.position() - 1); //unget the byte
+ ((Buffer)buffer).position(buffer.position() - 1); //unget the byte
int size = Hpack.decodeInteger(buffer, 5);
if (size == -1) {
- buffer.position(originalPos);
+ ((Buffer)buffer).position(originalPos);
return false;
}
if (size > maxMemorySizeHard) {
@@ -197,7 +198,7 @@ public class HpackDecoder {
}
private String readHeaderName(ByteBuffer buffer, int prefixLength) throws HpackException {
- buffer.position(buffer.position() - 1); //unget the byte
+ ((Buffer)buffer).position(buffer.position() - 1); //unget the byte
int index = Hpack.decodeInteger(buffer, prefixLength);
if (index == -1) {
return null;
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/HPackHuffman.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http2/HPackHuffman.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/HPackHuffman.java
@@ -16,6 +16,7 @@
*/
package org.apache.coyote.http2;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.HashSet;
@@ -482,7 +483,7 @@ public class HPackHuffman {
int rem = code.length;
while (rem > 0) {
if (!buffer.hasRemaining()) {
- buffer.position(start);
+ ((Buffer)buffer).position(start);
return false;
}
int remainingInByte = 8 - bytePos;
@@ -503,7 +504,7 @@ public class HPackHuffman {
}
if (bytePos == 8) {
if (!buffer.hasRemaining()) {
- buffer.position(start);
+ ((Buffer)buffer).position(start);
return false;
}
buffer.put(currentBufferByte);
@@ -513,14 +514,14 @@ public class HPackHuffman {
if (buffer.position() - start > toEncode.length()) {
//the encoded version is longer than the original
//just return false
- buffer.position(start);
+ ((Buffer)buffer).position(start);
return false;
}
}
if (bytePos > 0) {
//add the EOS bytes if we have not finished on a single byte
if (!buffer.hasRemaining()) {
- buffer.position(start);
+ ((Buffer)buffer).position(start);
return false;
}
buffer.put((byte) (currentBufferByte | ((0xFF) >> bytePos)));
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/Hpack.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http2/Hpack.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/Hpack.java
@@ -16,6 +16,7 @@
*/
package org.apache.coyote.http2;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import org.apache.tomcat.util.res.StringManager;
@@ -165,7 +166,7 @@ final class Hpack {
if (source.remaining() == 0) {
//we have run out of data
//reset
- source.position(sp);
+ ((Buffer)source).position(sp);
return -1;
}
b = source.get();
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/Http2AsyncParser.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http2/Http2AsyncParser.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/Http2AsyncParser.java
@@ -17,6 +17,7 @@
package org.apache.coyote.http2;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.CompletionHandler;
import java.util.concurrent.TimeUnit;
@@ -103,7 +104,7 @@ class Http2AsyncParser extends Http2Pars
public void completed(Long result, Void attachment) {
if (streamException || error == null) {
ByteBuffer payload = buffers[2];
- payload.flip();
+ ((Buffer)payload).flip();
try {
if (streamException) {
swallow(streamId, payloadSize, false, payload);
@@ -232,7 +233,7 @@ class Http2AsyncParser extends Http2Pars
public void completed(Long result, Void attachment) {
if (streamException || error == null) {
ByteBuffer payload = buffers[1];
- payload.flip();
+ ((Buffer)payload).flip();
try {
boolean continueParsing;
do {
@@ -286,7 +287,7 @@ class Http2AsyncParser extends Http2Pars
if (payload.remaining() - 9 >= payloadSize) {
continueParsing = true;
// Now go over frame header
- payload.position(payload.position() + 9);
+ ((Buffer)payload).position(payload.position() + 9);
try {
validateFrame(null, frameType, streamId, flags, payloadSize);
} catch (StreamException e) {
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
@@ -17,6 +17,7 @@
package org.apache.coyote.http2;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.CompletionHandler;
import java.nio.channels.FileChannel;
@@ -216,11 +217,11 @@ public class Http2AsyncUpgradeHandler ex
if (writeable) {
ByteUtil.set31Bits(header, 5, stream.getIdAsInt());
int orgLimit = data.limit();
- data.limit(data.position() + len);
+ ((Buffer)data).limit(data.position() + len);
socketWrapper.write(BlockingMode.BLOCK, protocol.getWriteTimeout(),
TimeUnit.MILLISECONDS, null, SocketWrapperBase.COMPLETE_WRITE,
applicationErrorCompletion, ByteBuffer.wrap(header), data);
- data.limit(orgLimit);
+ ((Buffer)data).limit(orgLimit);
handleAsyncException();
}
}
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/Http2Parser.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http2/Http2Parser.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/Http2Parser.java
@@ -17,6 +17,7 @@
package org.apache.coyote.http2;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
@@ -192,9 +193,9 @@ class Http2Parser {
input.fill(true, dest, dataLength);
} else {
int oldLimit = buffer.limit();
- buffer.limit(buffer.position() + dataLength);
+ ((Buffer)buffer).limit(buffer.position() + dataLength);
dest.put(buffer);
- buffer.limit(oldLimit);
+ ((Buffer)buffer).limit(oldLimit);
}
// Process padding before sending any notifications in case
// padding is invalid.
@@ -475,12 +476,12 @@ class Http2Parser {
input.fill(true, headerReadBuffer, toRead);
} else {
int oldLimit = buffer.limit();
- buffer.limit(buffer.position() + toRead);
+ ((Buffer)buffer).limit(buffer.position() + toRead);
headerReadBuffer.put(buffer);
- buffer.limit(oldLimit);
+ ((Buffer)buffer).limit(oldLimit);
}
// switch to read mode
- headerReadBuffer.flip();
+ ((Buffer)headerReadBuffer).flip();
try {
hpackDecoder.decode(headerReadBuffer);
} catch (HpackException hpe) {
@@ -550,7 +551,7 @@ class Http2Parser {
return;
}
if (!mustBeZero && byteBuffer != null) {
- byteBuffer.position(byteBuffer.position() + len);
+ ((Buffer)byteBuffer).position(byteBuffer.position() + len);
} else {
int read = 0;
byte[] buffer = new byte[1024];
@@ -710,7 +711,7 @@ class Http2Parser {
default boolean fill(boolean block, ByteBuffer data, int len) throws IOException {
boolean result = fill(block, data.array(), data.arrayOffset() + data.position(), len);
if (result) {
- data.position(data.position() + len);
+ ((Buffer)data).position(data.position() + len);
}
return result;
}
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/Http2UpgradeHandler.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http2/Http2UpgradeHandler.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/Http2UpgradeHandler.java
@@ -18,6 +18,7 @@ package org.apache.coyote.http2;
import java.io.EOFException;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.HashSet;
@@ -762,9 +763,9 @@ class Http2UpgradeHandler extends Abstra
try {
socketWrapper.write(true, header, 0, header.length);
int orgLimit = data.limit();
- data.limit(data.position() + len);
+ ((Buffer)data).limit(data.position() + len);
socketWrapper.write(true, data);
- data.limit(orgLimit);
+ ((Buffer)data).limit(orgLimit);
socketWrapper.flush(true);
} catch (IOException ioe) {
handleAppInitiatedIOException(ioe);
@@ -1829,7 +1830,7 @@ class Http2UpgradeHandler extends Abstra
} catch (IOException ioe) {
handleAppInitiatedIOException(ioe);
}
- payload.clear();
+ ((Buffer)payload).clear();
}
@Override
Index: apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/Stream.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/coyote/http2/Stream.java
+++ apache-tomcat-9.0.35-src/java/org/apache/coyote/http2/Stream.java
@@ -17,6 +17,7 @@
package org.apache.coyote.http2;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.security.AccessController;
@@ -850,9 +851,9 @@ class Stream extends AbstractStream impl
int chunkLimit = chunk.limit();
while (chunk.remaining() > 0) {
int thisTime = Math.min(buffer.remaining(), chunk.remaining());
- chunk.limit(chunk.position() + thisTime);
+ ((Buffer)chunk).limit(chunk.position() + thisTime);
buffer.put(chunk);
- chunk.limit(chunkLimit);
+ ((Buffer)chunk).limit(chunkLimit);
if (chunk.remaining() > 0 && !buffer.hasRemaining()) {
// Only flush if we have more data to write and the buffer
// is full
@@ -922,7 +923,7 @@ class Stream extends AbstractStream impl
// Buffer is empty. Nothing to do.
return false;
}
- buffer.flip();
+ ((Buffer)buffer).flip();
int left = buffer.remaining();
while (left > 0) {
if (streamReservation == 0) {
@@ -953,7 +954,7 @@ class Stream extends AbstractStream impl
left -= connectionReservation;
}
}
- buffer.clear();
+ ((Buffer)buffer).clear();
return false;
}
@@ -1014,9 +1015,9 @@ class Stream extends AbstractStream impl
int chunkLimit = src.limit();
while (src.remaining() > 0) {
int thisTime = Math.min(buffer.remaining(), src.remaining());
- src.limit(src.position() + thisTime);
+ ((Buffer)src).limit(src.position() + thisTime);
buffer.put(src);
- src.limit(chunkLimit);
+ ((Buffer)src).limit(chunkLimit);
if (flush(false, blocking)) {
return true;
}
@@ -1104,14 +1105,14 @@ class Stream extends AbstractStream impl
if (inBuffer.position() > 0) {
// Data is available in the inBuffer. Copy it to the
// outBuffer.
- inBuffer.flip();
+ ((Buffer)inBuffer).flip();
written = inBuffer.remaining();
if (log.isDebugEnabled()) {
log.debug(sm.getString("stream.inputBuffer.copy",
Integer.toString(written)));
}
inBuffer.get(outBuffer, 0, written);
- inBuffer.clear();
+ ((Buffer)inBuffer).clear();
} else if (!canRead) {
return -1;
} else {
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/buf/B2CConverter.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/buf/B2CConverter.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/buf/B2CConverter.java
@@ -18,6 +18,7 @@ package org.apache.tomcat.util.buf;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
@@ -107,7 +108,7 @@ public class B2CConverter {
*/
public void recycle() {
decoder.reset();
- leftovers.position(0);
+ ((Buffer)leftovers).position(0);
}
/**
@@ -126,8 +127,8 @@ public class B2CConverter {
bb = ByteBuffer.wrap(bc.getBuffer(), bc.getStart(), bc.getLength());
} else {
// Initialize the byte buffer
- bb.limit(bc.getEnd());
- bb.position(bc.getStart());
+ ((Buffer)bb).limit(bc.getEnd());
+ ((Buffer)bb).position(bc.getStart());
}
if ((cb == null) || (cb.array() != cc.getBuffer())) {
// Create a new char buffer if anything changed
@@ -135,8 +136,8 @@ public class B2CConverter {
cc.getBuffer().length - cc.getEnd());
} else {
// Initialize the char buffer
- cb.limit(cc.getBuffer().length);
- cb.position(cc.getEnd());
+ ((Buffer)cb).limit(cc.getBuffer().length);
+ ((Buffer)cb).position(cc.getEnd());
}
CoderResult result = null;
// Parse leftover if any are present
@@ -145,16 +146,16 @@ public class B2CConverter {
// Loop until one char is decoded or there is a decoder error
do {
leftovers.put(bc.subtractB());
- leftovers.flip();
+ ((Buffer)leftovers).flip();
result = decoder.decode(leftovers, cb, endOfInput);
- leftovers.position(leftovers.limit());
- leftovers.limit(leftovers.array().length);
+ ((Buffer)leftovers).position(leftovers.limit());
+ ((Buffer)leftovers).limit(leftovers.array().length);
} while (result.isUnderflow() && (cb.position() == pos));
if (result.isError() || result.isMalformed()) {
result.throwException();
}
- bb.position(bc.getStart());
- leftovers.position(0);
+ ((Buffer)bb).position(bc.getStart());
+ ((Buffer)leftovers).position(0);
}
// Do the decoding and get the results into the byte chunk and the char
// chunk
@@ -172,8 +173,8 @@ public class B2CConverter {
cc.setEnd(cb.position());
// Put leftovers in the leftovers byte buffer
if (bc.getLength() > 0) {
- leftovers.limit(leftovers.array().length);
- leftovers.position(bc.getLength());
+ ((Buffer)leftovers).limit(leftovers.array().length);
+ ((Buffer)leftovers).position(bc.getLength());
bc.subtract(leftovers.array(), 0, bc.getLength());
}
}
@@ -196,16 +197,16 @@ public class B2CConverter {
bb = ByteBuffer.wrap(bc.array(), bc.arrayOffset() + bc.position(), bc.remaining());
} else {
// Initialize the byte buffer
- bb.limit(bc.limit());
- bb.position(bc.position());
+ ((Buffer)bb).limit(bc.limit());
+ ((Buffer)bb).position(bc.position());
}
if ((cb == null) || (cb.array() != cc.array())) {
// Create a new char buffer if anything changed
cb = CharBuffer.wrap(cc.array(), cc.limit(), cc.capacity() - cc.limit());
} else {
// Initialize the char buffer
- cb.limit(cc.capacity());
- cb.position(cc.limit());
+ ((Buffer)cb).limit(cc.capacity());
+ ((Buffer)cb).position(cc.limit());
}
CoderResult result = null;
// Parse leftover if any are present
@@ -221,16 +222,16 @@ public class B2CConverter {
chr = bc.get();
}
leftovers.put(chr);
- leftovers.flip();
+ ((Buffer)leftovers).flip();
result = decoder.decode(leftovers, cb, endOfInput);
- leftovers.position(leftovers.limit());
- leftovers.limit(leftovers.array().length);
+ ((Buffer)leftovers).position(leftovers.limit());
+ ((Buffer)leftovers).limit(leftovers.array().length);
} while (result.isUnderflow() && (cb.position() == pos));
if (result.isError() || result.isMalformed()) {
result.throwException();
}
- bb.position(bc.position());
- leftovers.position(0);
+ ((Buffer)bb).position(bc.position());
+ ((Buffer)leftovers).position(0);
}
// Do the decoding and get the results into the byte chunk and the char
// chunk
@@ -240,16 +241,16 @@ public class B2CConverter {
} else if (result.isOverflow()) {
// Propagate current positions to the byte chunk and char chunk, if
// this continues the char buffer will get resized
- bc.position(bb.position());
- cc.limit(cb.position());
+ ((Buffer)bc).position(bb.position());
+ ((Buffer)cc).limit(cb.position());
} else if (result.isUnderflow()) {
// Propagate current positions to the byte chunk and char chunk
- bc.position(bb.position());
- cc.limit(cb.position());
+ ((Buffer)bc).position(bb.position());
+ ((Buffer)cc).limit(cb.position());
// Put leftovers in the leftovers byte buffer
if (bc.remaining() > 0) {
- leftovers.limit(leftovers.array().length);
- leftovers.position(bc.remaining());
+ ((Buffer)leftovers).limit(leftovers.array().length);
+ ((Buffer)leftovers).position(bc.remaining());
bc.get(leftovers.array(), 0, bc.remaining());
}
}
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/buf/ByteBufferHolder.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/buf/ByteBufferHolder.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/buf/ByteBufferHolder.java
@@ -16,6 +16,7 @@
*/
package org.apache.tomcat.util.buf;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -46,7 +47,7 @@ public class ByteBufferHolder {
public boolean flip() {
if (flipped.compareAndSet(false, true)) {
- buf.flip();
+ ((Buffer)buf).flip();
return true;
} else {
return false;
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/buf/ByteBufferUtils.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/buf/ByteBufferUtils.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/buf/ByteBufferUtils.java
@@ -19,6 +19,7 @@ package org.apache.tomcat.util.buf;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import org.apache.juli.logging.Log;
@@ -108,7 +109,7 @@ public class ByteBufferUtils {
}
// Copy data
- in.flip();
+ ((Buffer)in).flip();
out.put(in);
if (direct) {
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/buf/ByteChunk.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/buf/ByteChunk.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/buf/ByteChunk.java
@@ -19,6 +19,7 @@ package org.apache.tomcat.util.buf;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
@@ -345,7 +346,7 @@ public final class ByteChunk extends Abs
// and avoid an extra copy
if (len == limit && end == start && out != null) {
out.realWriteBytes(from);
- from.position(from.limit());
+ ((Buffer)from).position(from.limit());
return;
}
// if we have limit and we're below
@@ -375,13 +376,13 @@ public final class ByteChunk extends Abs
int remain = len - avail;
avail = limit - end;
while (remain >= avail) {
- from.limit(from.position() + avail);
+ ((Buffer)from).limit(from.position() + avail);
out.realWriteBytes(from);
- from.position(from.limit());
+ ((Buffer)from).position(from.limit());
remain = remain - avail;
}
- from.limit(fromLimit);
+ ((Buffer)from).limit(fromLimit);
from.get(buff, end, remain);
end += remain;
}
@@ -482,8 +483,8 @@ public final class ByteChunk extends Abs
}
int n = Math.min(to.remaining(), getLength());
to.put(buff, start, n);
- to.limit(to.position());
- to.position(to.position() - n);
+ ((Buffer)to).limit(to.position());
+ ((Buffer)to).position(to.position() - n);
start += n;
return n;
}
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/buf/C2BConverter.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/buf/C2BConverter.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/buf/C2BConverter.java
@@ -17,6 +17,7 @@
package org.apache.tomcat.util.buf;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
@@ -51,7 +52,7 @@ public final class C2BConverter {
*/
public void recycle() {
encoder.reset();
- leftovers.position(0);
+ ((Buffer)leftovers).position(0);
}
public boolean isUndeflow() {
@@ -71,16 +72,16 @@ public final class C2BConverter {
bb = ByteBuffer.wrap(bc.getBuffer(), bc.getEnd(), bc.getBuffer().length - bc.getEnd());
} else {
// Initialize the byte buffer
- bb.limit(bc.getBuffer().length);
- bb.position(bc.getEnd());
+ ((Buffer)bb).limit(bc.getBuffer().length);
+ ((Buffer)bb).position(bc.getEnd());
}
if ((cb == null) || (cb.array() != cc.getBuffer())) {
// Create a new char buffer if anything changed
cb = CharBuffer.wrap(cc.getBuffer(), cc.getStart(), cc.getLength());
} else {
// Initialize the char buffer
- cb.limit(cc.getEnd());
- cb.position(cc.getStart());
+ ((Buffer)cb).limit(cc.getEnd());
+ ((Buffer)cb).position(cc.getStart());
}
CoderResult result = null;
// Parse leftover if any are present
@@ -89,16 +90,16 @@ public final class C2BConverter {
// Loop until one char is encoded or there is a encoder error
do {
leftovers.put((char) cc.subtract());
- leftovers.flip();
+ ((Buffer)leftovers).flip();
result = encoder.encode(leftovers, bb, false);
- leftovers.position(leftovers.limit());
- leftovers.limit(leftovers.array().length);
+ ((Buffer)leftovers).position(leftovers.limit());
+ ((Buffer)leftovers).limit(leftovers.array().length);
} while (result.isUnderflow() && (bb.position() == pos));
if (result.isError() || result.isMalformed()) {
result.throwException();
}
- cb.position(cc.getStart());
- leftovers.position(0);
+ ((Buffer)cb).position(cc.getStart());
+ ((Buffer)leftovers).position(0);
}
// Do the decoding and get the results into the byte chunk and the char
// chunk
@@ -115,8 +116,8 @@ public final class C2BConverter {
cc.setOffset(cb.position());
// Put leftovers in the leftovers char buffer
if (cc.getLength() > 0) {
- leftovers.limit(leftovers.array().length);
- leftovers.position(cc.getLength());
+ ((Buffer)leftovers).limit(leftovers.array().length);
+ ((Buffer)leftovers).position(cc.getLength());
cc.subtract(leftovers.array(), 0, cc.getLength());
}
}
@@ -135,16 +136,16 @@ public final class C2BConverter {
bb = ByteBuffer.wrap(bc.array(), bc.limit(), bc.capacity() - bc.limit());
} else {
// Initialize the byte buffer
- bb.limit(bc.capacity());
- bb.position(bc.limit());
+ ((Buffer)bb).limit(bc.capacity());
+ ((Buffer)bb).position(bc.limit());
}
if ((cb == null) || (cb.array() != cc.array())) {
// Create a new char buffer if anything changed
cb = CharBuffer.wrap(cc.array(), cc.arrayOffset() + cc.position(), cc.remaining());
} else {
// Initialize the char buffer
- cb.limit(cc.limit());
- cb.position(cc.position());
+ ((Buffer)cb).limit(cc.limit());
+ ((Buffer)cb).position(cc.position());
}
CoderResult result = null;
// Parse leftover if any are present
@@ -153,16 +154,16 @@ public final class C2BConverter {
// Loop until one char is encoded or there is a encoder error
do {
leftovers.put(cc.get());
- leftovers.flip();
+ ((Buffer)leftovers).flip();
result = encoder.encode(leftovers, bb, false);
- leftovers.position(leftovers.limit());
- leftovers.limit(leftovers.array().length);
+ ((Buffer)leftovers).position(leftovers.limit());
+ ((Buffer)leftovers).limit(leftovers.array().length);
} while (result.isUnderflow() && (bb.position() == pos));
if (result.isError() || result.isMalformed()) {
result.throwException();
}
- cb.position(cc.position());
- leftovers.position(0);
+ ((Buffer)cb).position(cc.position());
+ ((Buffer)leftovers).position(0);
}
// Do the decoding and get the results into the byte chunk and the char
// chunk
@@ -171,16 +172,16 @@ public final class C2BConverter {
result.throwException();
} else if (result.isOverflow()) {
// Propagate current positions to the byte chunk and char chunk
- bc.limit(bb.position());
- cc.position(cb.position());
+ ((Buffer)bc).limit(bb.position());
+ ((Buffer)cc).position(cb.position());
} else if (result.isUnderflow()) {
// Propagate current positions to the byte chunk and char chunk
- bc.limit(bb.position());
- cc.position(cb.position());
+ ((Buffer)bc).limit(bb.position());
+ ((Buffer)cc).position(cb.position());
// Put leftovers in the leftovers char buffer
if (cc.remaining() > 0) {
- leftovers.limit(leftovers.array().length);
- leftovers.position(cc.remaining());
+ ((Buffer)leftovers).limit(leftovers.array().length);
+ ((Buffer)leftovers).position(cc.remaining());
cc.get(leftovers.array(), 0, cc.remaining());
}
}
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/buf/Utf8Decoder.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/buf/Utf8Decoder.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/buf/Utf8Decoder.java
@@ -16,6 +16,7 @@
*/
package org.apache.tomcat.util.buf;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharsetDecoder;
@@ -140,7 +141,7 @@ public class Utf8Decoder extends Charset
}
return CoderResult.UNDERFLOW;
} finally {
- in.position(pos);
+ ((Buffer)in).position(pos);
}
}
@@ -163,8 +164,8 @@ public class Utf8Decoder extends Charset
// If first byte is invalid, tail will be set to -1
int tail = remainingBytes[jchar];
if (tail == -1) {
- in.position(inIndex - in.arrayOffset());
- out.position(outIndex - out.arrayOffset());
+ ((Buffer)in).position(inIndex - in.arrayOffset());
+ ((Buffer)out).position(outIndex - out.arrayOffset());
return CoderResult.malformedForLength(1);
}
// Additional checks to detect invalid sequences ASAP
@@ -175,72 +176,72 @@ public class Utf8Decoder extends Charset
// First byte C2..DF, second byte 80..BF
if (jchar > 0x41 && jchar < 0x60 &&
(bArr[inIndex + 1] & 0xC0) != 0x80) {
- in.position(inIndex - in.arrayOffset());
- out.position(outIndex - out.arrayOffset());
+ ((Buffer)in).position(inIndex - in.arrayOffset());
+ ((Buffer)out).position(outIndex - out.arrayOffset());
return CoderResult.malformedForLength(1);
}
// First byte E0, second byte A0..BF
if (jchar == 0x60 && (bArr[inIndex + 1] & 0xE0) != 0xA0) {
- in.position(inIndex - in.arrayOffset());
- out.position(outIndex - out.arrayOffset());
+ ((Buffer)in).position(inIndex - in.arrayOffset());
+ ((Buffer)out).position(outIndex - out.arrayOffset());
return CoderResult.malformedForLength(1);
}
// First byte E1..EC, second byte 80..BF
if (jchar > 0x60 && jchar < 0x6D &&
(bArr[inIndex + 1] & 0xC0) != 0x80) {
- in.position(inIndex - in.arrayOffset());
- out.position(outIndex - out.arrayOffset());
+ ((Buffer)in).position(inIndex - in.arrayOffset());
+ ((Buffer)out).position(outIndex - out.arrayOffset());
return CoderResult.malformedForLength(1);
}
// First byte ED, second byte 80..9F
if (jchar == 0x6D && (bArr[inIndex + 1] & 0xE0) != 0x80) {
- in.position(inIndex - in.arrayOffset());
- out.position(outIndex - out.arrayOffset());
+ ((Buffer)in).position(inIndex - in.arrayOffset());
+ ((Buffer)out).position(outIndex - out.arrayOffset());
return CoderResult.malformedForLength(1);
}
// First byte EE..EF, second byte 80..BF
if (jchar > 0x6D && jchar < 0x70 &&
(bArr[inIndex + 1] & 0xC0) != 0x80) {
- in.position(inIndex - in.arrayOffset());
- out.position(outIndex - out.arrayOffset());
+ ((Buffer)in).position(inIndex - in.arrayOffset());
+ ((Buffer)out).position(outIndex - out.arrayOffset());
return CoderResult.malformedForLength(1);
}
// First byte F0, second byte 90..BF
if (jchar == 0x70 &&
((bArr[inIndex + 1] & 0xFF) < 0x90 ||
(bArr[inIndex + 1] & 0xFF) > 0xBF)) {
- in.position(inIndex - in.arrayOffset());
- out.position(outIndex - out.arrayOffset());
+ ((Buffer)in).position(inIndex - in.arrayOffset());
+ ((Buffer)out).position(outIndex - out.arrayOffset());
return CoderResult.malformedForLength(1);
}
// First byte F1..F3, second byte 80..BF
if (jchar > 0x70 && jchar < 0x74 &&
(bArr[inIndex + 1] & 0xC0) != 0x80) {
- in.position(inIndex - in.arrayOffset());
- out.position(outIndex - out.arrayOffset());
+ ((Buffer)in).position(inIndex - in.arrayOffset());
+ ((Buffer)out).position(outIndex - out.arrayOffset());
return CoderResult.malformedForLength(1);
}
// First byte F4, second byte 80..8F
if (jchar == 0x74 &&
(bArr[inIndex + 1] & 0xF0) != 0x80) {
- in.position(inIndex - in.arrayOffset());
- out.position(outIndex - out.arrayOffset());
+ ((Buffer)in).position(inIndex - in.arrayOffset());
+ ((Buffer)out).position(outIndex - out.arrayOffset());
return CoderResult.malformedForLength(1);
}
}
// Check third byte if present and expected
if (tailAvailable > 1 && tail > 1) {
if ((bArr[inIndex + 2] & 0xC0) != 0x80) {
- in.position(inIndex - in.arrayOffset());
- out.position(outIndex - out.arrayOffset());
+ ((Buffer)in).position(inIndex - in.arrayOffset());
+ ((Buffer)out).position(outIndex - out.arrayOffset());
return CoderResult.malformedForLength(2);
}
}
// Check fourth byte if present and expected
if (tailAvailable > 2 && tail > 2) {
if ((bArr[inIndex + 3] & 0xC0) != 0x80) {
- in.position(inIndex - in.arrayOffset());
- out.position(outIndex - out.arrayOffset());
+ ((Buffer)in).position(inIndex - in.arrayOffset());
+ ((Buffer)out).position(outIndex - out.arrayOffset());
return CoderResult.malformedForLength(3);
}
}
@@ -250,8 +251,8 @@ public class Utf8Decoder extends Charset
for (int i = 0; i < tail; i++) {
int nextByte = bArr[inIndex + i + 1] & 0xFF;
if ((nextByte & 0xC0) != 0x80) {
- in.position(inIndex - in.arrayOffset());
- out.position(outIndex - out.arrayOffset());
+ ((Buffer)in).position(inIndex - in.arrayOffset());
+ ((Buffer)out).position(outIndex - out.arrayOffset());
return CoderResult.malformedForLength(1 + i);
}
jchar = (jchar << 6) + nextByte;
@@ -259,8 +260,8 @@ public class Utf8Decoder extends Charset
jchar -= remainingNumbers[tail];
if (jchar < lowerEncodingLimit[tail]) {
// Should have been encoded in fewer octets
- in.position(inIndex - in.arrayOffset());
- out.position(outIndex - out.arrayOffset());
+ ((Buffer)in).position(inIndex - in.arrayOffset());
+ ((Buffer)out).position(outIndex - out.arrayOffset());
return CoderResult.malformedForLength(1);
}
inIndex += tail;
@@ -281,8 +282,8 @@ public class Utf8Decoder extends Charset
// Encoded with 4 bytes. inIndex currently points
// to the final byte. Move it back to first byte.
inIndex -= 3;
- in.position(inIndex - in.arrayOffset());
- out.position(outIndex - out.arrayOffset());
+ ((Buffer)in).position(inIndex - in.arrayOffset());
+ ((Buffer)out).position(outIndex - out.arrayOffset());
return CoderResult.OVERFLOW;
}
cArr[outIndex++] = (char) ((jchar >> 0xA) + 0xD7C0);
@@ -290,8 +291,8 @@ public class Utf8Decoder extends Charset
outRemaining -= 2;
}
}
- in.position(inIndex - in.arrayOffset());
- out.position(outIndex - out.arrayOffset());
+ ((Buffer)in).position(inIndex - in.arrayOffset());
+ ((Buffer)out).position(outIndex - out.arrayOffset());
return (outRemaining == 0 && inIndex < inIndexLimit) ?
CoderResult.OVERFLOW :
CoderResult.UNDERFLOW;
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/buf/Utf8Encoder.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/buf/Utf8Encoder.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/buf/Utf8Encoder.java
@@ -16,6 +16,7 @@
*/
package org.apache.tomcat.util.buf;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharsetEncoder;
@@ -56,8 +57,8 @@ public class Utf8Encoder extends Charset
if (jchar <= 0x7F) {
if (outRemaining < 1) {
- in.position(x);
- out.position(outPos);
+ ((Buffer)in).position(x);
+ ((Buffer)out).position(outPos);
return CoderResult.OVERFLOW;
}
bArr[outPos++] = (byte) (jchar & 0xFF);
@@ -65,8 +66,8 @@ public class Utf8Encoder extends Charset
} else if (jchar <= 0x7FF) {
if (outRemaining < 2) {
- in.position(x);
- out.position(outPos);
+ ((Buffer)in).position(x);
+ ((Buffer)out).position(outPos);
return CoderResult.OVERFLOW;
}
bArr[outPos++] = (byte) (0xC0 + ((jchar >> 6) & 0x1F));
@@ -77,21 +78,21 @@ public class Utf8Encoder extends Charset
// in has to have one byte more.
if (limit <= x + 1) {
- in.position(x);
- out.position(outPos);
+ ((Buffer)in).position(x);
+ ((Buffer)out).position(outPos);
return CoderResult.UNDERFLOW;
}
if (outRemaining < 4) {
- in.position(x);
- out.position(outPos);
+ ((Buffer)in).position(x);
+ ((Buffer)out).position(outPos);
return CoderResult.OVERFLOW;
}
// The surrogate pair starts with a low-surrogate.
if (jchar >= 0xDC00) {
- in.position(x);
- out.position(outPos);
+ ((Buffer)in).position(x);
+ ((Buffer)out).position(outPos);
return CoderResult.malformedForLength(1);
}
@@ -99,8 +100,8 @@ public class Utf8Encoder extends Charset
// The surrogate pair ends with a high-surrogate.
if (jchar2 < 0xDC00) {
- in.position(x);
- out.position(outPos);
+ ((Buffer)in).position(x);
+ ((Buffer)out).position(outPos);
return CoderResult.malformedForLength(1);
}
@@ -121,8 +122,8 @@ public class Utf8Encoder extends Charset
} else {
if (outRemaining < 3) {
- in.position(x);
- out.position(outPos);
+ ((Buffer)in).position(x);
+ ((Buffer)out).position(outPos);
return CoderResult.OVERFLOW;
}
bArr[outPos++] = (byte) (0xE0 + ((jchar >> 12) & 0x0F));
@@ -131,8 +132,8 @@ public class Utf8Encoder extends Charset
outRemaining -= 3;
}
if (outRemaining == 0) {
- in.position(x + 1);
- out.position(outPos);
+ ((Buffer)in).position(x + 1);
+ ((Buffer)out).position(outPos);
// If both input and output are exhausted, return UNDERFLOW
if (x + 1 == limit) {
return CoderResult.UNDERFLOW;
@@ -143,8 +144,8 @@ public class Utf8Encoder extends Charset
}
if (rem != 0) {
- in.position(x);
- out.position(outPos);
+ ((Buffer)in).position(x);
+ ((Buffer)out).position(outPos);
}
return CoderResult.UNDERFLOW;
}
@@ -228,7 +229,7 @@ public class Utf8Encoder extends Charset
pos++;
}
} finally {
- in.position(pos);
+ ((Buffer)in).position(pos);
}
return CoderResult.UNDERFLOW;
}
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/AprEndpoint.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/net/AprEndpoint.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/AprEndpoint.java
@@ -20,6 +20,7 @@ import java.io.EOFException;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketTimeoutException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.CompletionHandler;
import java.nio.charset.StandardCharsets;
@@ -2040,7 +2041,7 @@ public class AprEndpoint extends Abstrac
// SSL and app buffer size settings with NIO & NIO2.
if (endpoint.isSSLEnabled()) {
sslOutputBuffer = ByteBuffer.allocateDirect(SSL_OUTPUT_BUFFER_SIZE);
- sslOutputBuffer.position(SSL_OUTPUT_BUFFER_SIZE);
+ ((Buffer)sslOutputBuffer).position(SSL_OUTPUT_BUFFER_SIZE);
} else {
sslOutputBuffer = null;
}
@@ -2102,7 +2103,7 @@ public class AprEndpoint extends Abstrac
// The socket read buffer capacity is socket.appReadBufSize
int limit = socketBufferHandler.getReadBuffer().capacity();
if (to.isDirect() && to.remaining() >= limit) {
- to.limit(to.position() + limit);
+ ((Buffer)to).limit(to.position() + limit);
nRead = fillReadBuffer(block, to);
if (log.isDebugEnabled()) {
log.debug("Socket: [" + this + "], Read direct from socket: [" + nRead + "]");
@@ -2181,7 +2182,7 @@ public class AprEndpoint extends Abstrac
}
if (result > 0) {
- to.position(to.position() + result);
+ ((Buffer)to).position(to.position() + result);
return result;
} else if (result == 0 || -result == Status.EAGAIN) {
return 0;
@@ -2303,9 +2304,9 @@ public class AprEndpoint extends Abstrac
if (getEndpoint().isSSLEnabled()) {
if (sslOutputBuffer.remaining() == 0) {
// Buffer was fully written last time around
- sslOutputBuffer.clear();
+ ((Buffer)sslOutputBuffer).clear();
transfer(from, sslOutputBuffer);
- sslOutputBuffer.flip();
+ ((Buffer)sslOutputBuffer).flip();
} else {
// Buffer still has data from previous attempt to write
// APR + SSL requires that exactly the same parameters are
@@ -2314,13 +2315,13 @@ public class AprEndpoint extends Abstrac
thisTime = Socket.sendb(getSocket().longValue(), sslOutputBuffer,
sslOutputBuffer.position(), sslOutputBuffer.limit());
if (thisTime > 0) {
- sslOutputBuffer.position(sslOutputBuffer.position() + thisTime);
+ ((Buffer)sslOutputBuffer).position(sslOutputBuffer.position() + thisTime);
}
} else {
thisTime = Socket.sendb(getSocket().longValue(), from, from.position(),
from.remaining());
if (thisTime > 0) {
- from.position(from.position() + thisTime);
+ ((Buffer)from).position(from.position() + thisTime);
}
}
if (Status.APR_STATUS_IS_EAGAIN(-thisTime)) {
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/Nio2Endpoint.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/net/Nio2Endpoint.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/Nio2Endpoint.java
@@ -22,6 +22,7 @@ import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.net.SocketTimeoutException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousChannelGroup;
import java.nio.channels.AsynchronousCloseException;
@@ -541,7 +542,7 @@ public class Nio2Endpoint extends Abstra
if (nRead > 0) {
getSocket().getBufHandler().configureWriteBufferForRead();
if (attachment.length < buffer.remaining()) {
- buffer.limit(buffer.limit() - buffer.remaining() + (int) attachment.length);
+ ((Buffer)buffer).limit(buffer.limit() - buffer.remaining() + (int) attachment.length);
}
attachment.length -= nRead;
} else {
@@ -886,7 +887,7 @@ public class Nio2Endpoint extends Abstra
// The socket read buffer capacity is socket.appReadBufSize
int limit = socketBufferHandler.getReadBuffer().capacity();
if (block && to.remaining() >= limit) {
- to.limit(to.position() + limit);
+ ((Buffer)to).limit(to.position() + limit);
nRead = fillReadBuffer(block, to);
if (log.isDebugEnabled()) {
log.debug("Socket: [" + this + "], Read direct from socket: [" + nRead + "]");
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/NioEndpoint.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/net/NioEndpoint.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/NioEndpoint.java
@@ -23,6 +23,7 @@ import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketTimeoutException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.CancelledKeyException;
import java.nio.channels.Channel;
@@ -1137,7 +1138,7 @@ public class NioEndpoint extends Abstrac
// The socket read buffer capacity is socket.appReadBufSize
int limit = socketBufferHandler.getReadBuffer().capacity();
if (to.remaining() >= limit) {
- to.limit(to.position() + limit);
+ ((Buffer)to).limit(to.position() + limit);
nRead = fillReadBuffer(block, to);
if (log.isDebugEnabled()) {
log.debug("Socket: [" + this + "], Read direct from socket: [" + nRead + "]");
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java
@@ -16,6 +16,7 @@
*/
package org.apache.tomcat.util.net.openssl;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.ReadOnlyBufferException;
import java.security.Principal;
@@ -40,7 +41,7 @@ import javax.net.ssl.SSLSessionContext;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
-import org.apache.tomcat.jni.Buffer;
+// import org.apache.tomcat.jni.Buffer;
import org.apache.tomcat.jni.Pool;
import org.apache.tomcat.jni.SSL;
import org.apache.tomcat.jni.SSLContext;
@@ -130,7 +131,7 @@ public final class OpenSSLEngine extends
private static final String INVALID_CIPHER = "SSL_NULL_WITH_NULL_NULL";
- private static final long EMPTY_ADDR = Buffer.address(ByteBuffer.allocate(0));
+ private static final long EMPTY_ADDR = org.apache.tomcat.jni.Buffer.address(ByteBuffer.allocate(0));
// OpenSSL state
private final long ssl;
@@ -242,10 +243,10 @@ public final class OpenSSLEngine extends
final int sslWrote;
if (src.isDirect()) {
- final long addr = Buffer.address(src) + pos;
+ final long addr = org.apache.tomcat.jni.Buffer.address(src) + pos;
sslWrote = SSL.writeToSSL(ssl, addr, len);
if (sslWrote >= 0) {
- src.position(pos + sslWrote);
+ ((Buffer)src).position(pos + sslWrote);
return sslWrote;
}
} else {
@@ -253,17 +254,17 @@ public final class OpenSSLEngine extends
try {
final long addr = memoryAddress(buf);
- src.limit(pos + len);
+ ((Buffer)src).limit(pos + len);
buf.put(src);
- src.limit(limit);
+ ((Buffer)src).limit(limit);
sslWrote = SSL.writeToSSL(ssl, addr, len);
if (sslWrote >= 0) {
- src.position(pos + sslWrote);
+ ((Buffer)src).position(pos + sslWrote);
return sslWrote;
} else {
- src.position(pos);
+ ((Buffer)src).position(pos);
}
} finally {
buf.clear();
@@ -282,10 +283,10 @@ public final class OpenSSLEngine extends
final int pos = src.position();
final int len = src.remaining();
if (src.isDirect()) {
- final long addr = Buffer.address(src) + pos;
+ final long addr = org.apache.tomcat.jni.Buffer.address(src) + pos;
final int netWrote = SSL.writeToBIO(networkBIO, addr, len);
if (netWrote >= 0) {
- src.position(pos + netWrote);
+ ((Buffer)src).position(pos + netWrote);
return netWrote;
}
} else {
@@ -297,10 +298,10 @@ public final class OpenSSLEngine extends
final int netWrote = SSL.writeToBIO(networkBIO, addr, len);
if (netWrote >= 0) {
- src.position(pos + netWrote);
+ ((Buffer)src).position(pos + netWrote);
return netWrote;
} else {
- src.position(pos);
+ ((Buffer)src).position(pos);
}
} finally {
buf.clear();
@@ -317,11 +318,11 @@ public final class OpenSSLEngine extends
private static int readPlaintextData(final long ssl, final ByteBuffer dst) {
if (dst.isDirect()) {
final int pos = dst.position();
- final long addr = Buffer.address(dst) + pos;
+ final long addr = org.apache.tomcat.jni.Buffer.address(dst) + pos;
final int len = dst.limit() - pos;
final int sslRead = SSL.readFromSSL(ssl, addr, len);
if (sslRead > 0) {
- dst.position(pos + sslRead);
+ ((Buffer)dst).position(pos + sslRead);
return sslRead;
}
} else {
@@ -335,9 +336,9 @@ public final class OpenSSLEngine extends
final int sslRead = SSL.readFromSSL(ssl, addr, len);
if (sslRead > 0) {
buf.limit(sslRead);
- dst.limit(pos + sslRead);
+ ((Buffer)dst).limit(pos + sslRead);
dst.put(buf);
- dst.limit(limit);
+ ((Buffer)dst).limit(limit);
return sslRead;
}
} finally {
@@ -355,10 +356,10 @@ public final class OpenSSLEngine extends
private static int readEncryptedData(final long networkBIO, final ByteBuffer dst, final int pending) {
if (dst.isDirect() && dst.remaining() >= pending) {
final int pos = dst.position();
- final long addr = Buffer.address(dst) + pos;
+ final long addr = org.apache.tomcat.jni.Buffer.address(dst) + pos;
final int bioRead = SSL.readFromBIO(networkBIO, addr, pending);
if (bioRead > 0) {
- dst.position(pos + bioRead);
+ ((Buffer)dst).position(pos + bioRead);
return bioRead;
}
} else {
@@ -370,9 +371,9 @@ public final class OpenSSLEngine extends
if (bioRead > 0) {
buf.limit(bioRead);
int oldLimit = dst.limit();
- dst.limit(dst.position() + bioRead);
+ ((Buffer)dst).limit(dst.position() + bioRead);
dst.put(buf);
- dst.limit(oldLimit);
+ ((Buffer)dst).limit(oldLimit);
return bioRead;
}
} finally {
@@ -963,7 +964,7 @@ public final class OpenSSLEngine extends
private static long memoryAddress(ByteBuffer buf) {
- return Buffer.address(buf);
+ return org.apache.tomcat.jni.Buffer.address(buf);
}
private SSLEngineResult.Status getEngineStatus() {
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/SecureNio2Channel.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/net/SecureNio2Channel.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/SecureNio2Channel.java
@@ -18,6 +18,7 @@ package org.apache.tomcat.util.net;
import java.io.EOFException;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousSocketChannel;
import java.nio.channels.CompletionHandler;
@@ -133,7 +134,7 @@ public class SecureNio2Channel extends N
unwrapBeforeRead = true;
closed = false;
closing = false;
- netInBuffer.clear();
+ ((Buffer)netInBuffer).clear();
}
@Override
@@ -323,7 +324,7 @@ public class SecureNio2Channel extends N
} else if (handshake.getStatus() == Status.BUFFER_UNDERFLOW) {
if (netInBuffer.position() == netInBuffer.limit()) {
//clear the buffer if we have emptied it out on data
- netInBuffer.clear();
+ ((Buffer)netInBuffer).clear();
}
//read more data
if (async) {
@@ -418,9 +419,9 @@ public class SecureNio2Channel extends N
clientRequestedCiphers = Collections.emptyList();
break;
case NON_SECURE:
- netOutBuffer.clear();
+ ((Buffer)netOutBuffer).clear();
netOutBuffer.put(TLSClientHelloExtractor.USE_TLS_RESPONSE);
- netOutBuffer.flip();
+ ((Buffer)netOutBuffer).flip();
flush();
throw new IOException(sm.getString("channel.nio.ssl.foundHttp"));
}
@@ -444,8 +445,8 @@ public class SecureNio2Channel extends N
netOutBuffer = ByteBufferUtils.expand(netOutBuffer, sslEngine.getSession().getPacketBufferSize());
// Set limit and position to expected values
- netOutBuffer.position(0);
- netOutBuffer.limit(0);
+ ((Buffer)netOutBuffer).position(0);
+ ((Buffer)netOutBuffer).limit(0);
// Initiate handshake
sslEngine.beginHandshake();
@@ -469,10 +470,10 @@ public class SecureNio2Channel extends N
if (!getBufHandler().isReadBufferEmpty()) throw new IOException(sm.getString("channel.nio.ssl.appInputNotEmpty"));
if (!getBufHandler().isWriteBufferEmpty()) throw new IOException(sm.getString("channel.nio.ssl.appOutputNotEmpty"));
- netOutBuffer.position(0);
- netOutBuffer.limit(0);
- netInBuffer.position(0);
- netInBuffer.limit(0);
+ ((Buffer)netOutBuffer).position(0);
+ ((Buffer)netOutBuffer).limit(0);
+ ((Buffer)netInBuffer).position(0);
+ ((Buffer)netInBuffer).limit(0);
getBufHandler().reset();
handshakeComplete = false;
@@ -521,12 +522,12 @@ public class SecureNio2Channel extends N
protected SSLEngineResult handshakeWrap() throws IOException {
//this should never be called with a network buffer that contains data
//so we can clear it here.
- netOutBuffer.clear();
+ ((Buffer)netOutBuffer).clear();
//perform the wrap
getBufHandler().configureWriteBufferForRead();
SSLEngineResult result = sslEngine.wrap(getBufHandler().getWriteBuffer(), netOutBuffer);
//prepare the results to be written
- netOutBuffer.flip();
+ ((Buffer)netOutBuffer).flip();
//set the status
handshakeStatus = result.getHandshakeStatus();
return result;
@@ -543,7 +544,7 @@ public class SecureNio2Channel extends N
//loop while we can perform pure SSLEngine data
do {
//prepare the buffer with the incoming data
- netInBuffer.flip();
+ ((Buffer)netInBuffer).flip();
//call unwrap
getBufHandler().configureReadBufferForWrite();
result = sslEngine.unwrap(netInBuffer, getBufHandler().getReadBuffer());
@@ -601,7 +602,7 @@ public class SecureNio2Channel extends N
throw new IOException(sm.getString("channel.nio.ssl.pendingWriteDuringClose"), e);
}
//prep the buffer for the close message
- netOutBuffer.clear();
+ ((Buffer)netOutBuffer).clear();
//perform the close, since we called sslEngine.closeOutbound
SSLEngineResult handshake = sslEngine.wrap(getEmptyBuf(), netOutBuffer);
//we should be in a close state
@@ -609,7 +610,7 @@ public class SecureNio2Channel extends N
throw new IOException(sm.getString("channel.nio.ssl.invalidCloseState"));
}
//prepare the buffer for writing
- netOutBuffer.flip();
+ ((Buffer)netOutBuffer).flip();
//if there is data to be written
try {
if (timeout > 0) {
@@ -711,7 +712,7 @@ public class SecureNio2Channel extends N
SSLEngineResult unwrap;
do {
//prepare the buffer
- netInBuffer.flip();
+ ((Buffer)netInBuffer).flip();
//unwrap the data
try {
unwrap = sslEngine.unwrap(netInBuffer, dst);
@@ -854,10 +855,10 @@ public class SecureNio2Channel extends N
protected void wrap() {
try {
if (!netOutBuffer.hasRemaining()) {
- netOutBuffer.clear();
+ ((Buffer)netOutBuffer).clear();
SSLEngineResult result = sslEngine.wrap(src, netOutBuffer);
written = result.bytesConsumed();
- netOutBuffer.flip();
+ ((Buffer)netOutBuffer).flip();
if (result.getStatus() == Status.OK) {
if (result.getHandshakeStatus() == HandshakeStatus.NEED_TASK)
tasks();
@@ -909,7 +910,7 @@ public class SecureNio2Channel extends N
SSLEngineResult unwrap;
do {
//prepare the buffer
- netInBuffer.flip();
+ ((Buffer)netInBuffer).flip();
//unwrap the data
unwrap = sslEngine.unwrap(netInBuffer, dst2);
//compact the buffer
@@ -1017,7 +1018,7 @@ public class SecureNio2Channel extends N
overflowState = OverflowState.DONE;
}
//prepare the buffer
- netInBuffer.flip();
+ ((Buffer)netInBuffer).flip();
//unwrap the data
unwrap = sslEngine.unwrap(netInBuffer, dsts2, offset, length2);
//compact the buffer
@@ -1137,11 +1138,11 @@ public class SecureNio2Channel extends N
}
try {
// Prepare the output buffer
- netOutBuffer.clear();
+ ((Buffer)netOutBuffer).clear();
// Wrap the source data into the internal buffer
SSLEngineResult result = sslEngine.wrap(src, netOutBuffer);
final int written = result.bytesConsumed();
- netOutBuffer.flip();
+ ((Buffer)netOutBuffer).flip();
if (result.getStatus() == Status.OK) {
if (result.getHandshakeStatus() == HandshakeStatus.NEED_TASK) {
tasks();
@@ -1191,11 +1192,11 @@ public class SecureNio2Channel extends N
}
try {
// Prepare the output buffer
- netOutBuffer.clear();
+ ((Buffer)netOutBuffer).clear();
// Wrap the source data into the internal buffer
SSLEngineResult result = sslEngine.wrap(srcs, offset, length, netOutBuffer);
final int written = result.bytesConsumed();
- netOutBuffer.flip();
+ ((Buffer)netOutBuffer).flip();
if (result.getStatus() == Status.OK) {
if (result.getHandshakeStatus() == HandshakeStatus.NEED_TASK) {
tasks();
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/SecureNioChannel.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/net/SecureNioChannel.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/SecureNioChannel.java
@@ -19,6 +19,7 @@ package org.apache.tomcat.util.net;
import java.io.EOFException;
import java.io.IOException;
import java.net.SocketTimeoutException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
@@ -95,7 +96,7 @@ public class SecureNioChannel extends Ni
handshakeComplete = false;
closed = false;
closing = false;
- netInBuffer.clear();
+ ((Buffer)netInBuffer).clear();
}
@Override
@@ -315,9 +316,9 @@ public class SecureNioChannel extends Ni
clientRequestedCiphers = Collections.emptyList();
break;
case NON_SECURE:
- netOutBuffer.clear();
+ ((Buffer)netOutBuffer).clear();
netOutBuffer.put(TLSClientHelloExtractor.USE_TLS_RESPONSE);
- netOutBuffer.flip();
+ ((Buffer)netOutBuffer).flip();
flushOutbound();
throw new IOException(sm.getString("channel.nio.ssl.foundHttp"));
}
@@ -341,8 +342,8 @@ public class SecureNioChannel extends Ni
netOutBuffer = ByteBufferUtils.expand(netOutBuffer, sslEngine.getSession().getPacketBufferSize());
// Set limit and position to expected values
- netOutBuffer.position(0);
- netOutBuffer.limit(0);
+ ((Buffer)netOutBuffer).position(0);
+ ((Buffer)netOutBuffer).limit(0);
// Initiate handshake
sslEngine.beginHandshake();
@@ -454,12 +455,12 @@ public class SecureNioChannel extends Ni
protected SSLEngineResult handshakeWrap(boolean doWrite) throws IOException {
//this should never be called with a network buffer that contains data
//so we can clear it here.
- netOutBuffer.clear();
+ ((Buffer)netOutBuffer).clear();
//perform the wrap
getBufHandler().configureWriteBufferForRead();
SSLEngineResult result = sslEngine.wrap(getBufHandler().getWriteBuffer(), netOutBuffer);
//prepare the results to be written
- netOutBuffer.flip();
+ ((Buffer)netOutBuffer).flip();
//set the status
handshakeStatus = result.getHandshakeStatus();
//optimization, if we do have a writable channel, write it now
@@ -479,7 +480,7 @@ public class SecureNioChannel extends Ni
if (netInBuffer.position() == netInBuffer.limit()) {
//clear the buffer if we have emptied it out on data
- netInBuffer.clear();
+ ((Buffer)netInBuffer).clear();
}
if (doread) {
//if we have data to read, read it
@@ -493,7 +494,7 @@ public class SecureNioChannel extends Ni
//loop while we can perform pure SSLEngine data
do {
//prepare the buffer with the incoming data
- netInBuffer.flip();
+ ((Buffer)netInBuffer).flip();
//call unwrap
getBufHandler().configureReadBufferForWrite();
result = sslEngine.unwrap(netInBuffer, getBufHandler().getReadBuffer());
@@ -537,7 +538,7 @@ public class SecureNioChannel extends Ni
throw new IOException(sm.getString("channel.nio.ssl.remainingDataDuringClose"));
}
//prep the buffer for the close message
- netOutBuffer.clear();
+ ((Buffer)netOutBuffer).clear();
//perform the close, since we called sslEngine.closeOutbound
SSLEngineResult handshake = sslEngine.wrap(getEmptyBuf(), netOutBuffer);
//we should be in a close state
@@ -545,7 +546,7 @@ public class SecureNioChannel extends Ni
throw new IOException(sm.getString("channel.nio.ssl.invalidCloseState"));
}
//prepare the buffer for writing
- netOutBuffer.flip();
+ ((Buffer)netOutBuffer).flip();
//if there is data to be written
flush(netOutBuffer);
@@ -612,7 +613,7 @@ public class SecureNioChannel extends Ni
SSLEngineResult unwrap;
do {
//prepare the buffer
- netInBuffer.flip();
+ ((Buffer)netInBuffer).flip();
//unwrap the data
unwrap = sslEngine.unwrap(netInBuffer, dst);
//compact the buffer
@@ -689,7 +690,7 @@ public class SecureNioChannel extends Ni
overflowState = OverflowState.DONE;
}
//prepare the buffer
- netInBuffer.flip();
+ ((Buffer)netInBuffer).flip();
//unwrap the data
unwrap = sslEngine.unwrap(netInBuffer, dsts, offset, length);
//compact the buffer
@@ -797,12 +798,12 @@ public class SecureNioChannel extends Ni
}
// The data buffer is empty, we can reuse the entire buffer.
- netOutBuffer.clear();
+ ((Buffer)netOutBuffer).clear();
SSLEngineResult result = sslEngine.wrap(src, netOutBuffer);
// The number of bytes written
int written = result.bytesConsumed();
- netOutBuffer.flip();
+ ((Buffer)netOutBuffer).flip();
if (result.getStatus() == Status.OK) {
if (result.getHandshakeStatus() == HandshakeStatus.NEED_TASK) {
@@ -834,12 +835,12 @@ public class SecureNioChannel extends Ni
}
// The data buffer is empty, we can reuse the entire buffer.
- netOutBuffer.clear();
+ ((Buffer)netOutBuffer).clear();
SSLEngineResult result = sslEngine.wrap(srcs, offset, length, netOutBuffer);
// The number of bytes written
int written = result.bytesConsumed();
- netOutBuffer.flip();
+ ((Buffer)netOutBuffer).flip();
if (result.getStatus() == Status.OK) {
if (result.getHandshakeStatus() == HandshakeStatus.NEED_TASK) tasks();
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/SocketBufferHandler.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/net/SocketBufferHandler.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/SocketBufferHandler.java
@@ -17,6 +17,7 @@
package org.apache.tomcat.util.net;
import java.nio.BufferOverflowException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import org.apache.tomcat.util.buf.ByteBufferUtils;
@@ -67,13 +68,13 @@ public class SocketBufferHandler {
// Switching to write
int remaining = readBuffer.remaining();
if (remaining == 0) {
- readBuffer.clear();
+ ((Buffer)readBuffer).clear();
} else {
readBuffer.compact();
}
} else {
// Switching to read
- readBuffer.flip();
+ ((Buffer)readBuffer).flip();
}
this.readBufferConfiguredForWrite = readBufferConFiguredForWrite;
}
@@ -160,15 +161,15 @@ public class SocketBufferHandler {
// Switching to write
int remaining = writeBuffer.remaining();
if (remaining == 0) {
- writeBuffer.clear();
+ ((Buffer)writeBuffer).clear();
} else {
writeBuffer.compact();
- writeBuffer.position(remaining);
- writeBuffer.limit(writeBuffer.capacity());
+ ((Buffer)writeBuffer).position(remaining);
+ ((Buffer)writeBuffer).limit(writeBuffer.capacity());
}
} else {
// Switching to read
- writeBuffer.flip();
+ ((Buffer)writeBuffer).flip();
}
this.writeBufferConfiguredForWrite = writeBufferConfiguredForWrite;
}
@@ -199,9 +200,9 @@ public class SocketBufferHandler {
public void reset() {
- readBuffer.clear();
+ ((Buffer)readBuffer).clear();
readBufferConfiguredForWrite = true;
- writeBuffer.clear();
+ ((Buffer)writeBuffer).clear();
writeBufferConfiguredForWrite = true;
}
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/SocketWrapperBase.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/net/SocketWrapperBase.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/SocketWrapperBase.java
@@ -19,6 +19,7 @@ package org.apache.tomcat.util.net;
import java.io.EOFException;
import java.io.IOException;
import java.net.SocketTimeoutException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.CompletionHandler;
import java.nio.channels.InterruptedByTimeoutException;
@@ -1467,9 +1468,9 @@ public abstract class SocketWrapperBase<
int max = Math.min(from.remaining(), to.remaining());
if (max > 0) {
int fromLimit = from.limit();
- from.limit(from.position() + max);
+ ((Buffer)from).limit(from.position() + max);
to.put(from);
- from.limit(fromLimit);
+ ((Buffer)from).limit(fromLimit);
}
return max;
}
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/TLSClientHelloExtractor.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/net/TLSClientHelloExtractor.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/TLSClientHelloExtractor.java
@@ -17,6 +17,7 @@
package org.apache.tomcat.util.net;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.BufferUnderflowException;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
@@ -76,7 +77,7 @@ public class TLSClientHelloExtractor {
String sniValue = null;
try {
// Switch to read mode.
- netInBuffer.flip();
+ ((Buffer)netInBuffer).flip();
// A complete TLS record header is required before we can figure out
// how many bytes there are in the record.
@@ -164,8 +165,8 @@ public class TLSClientHelloExtractor {
this.clientRequestedApplicationProtocols = clientRequestedApplicationProtocols;
this.sniValue = sniValue;
// Whatever happens, return the buffer to its original state
- netInBuffer.limit(limit);
- netInBuffer.position(pos);
+ ((Buffer)netInBuffer).limit(limit);
+ ((Buffer)netInBuffer).position(pos);
}
}
@@ -215,7 +216,7 @@ public class TLSClientHelloExtractor {
private static boolean isAvailable(ByteBuffer bb, int size) {
if (bb.remaining() < size) {
- bb.position(bb.limit());
+ ((Buffer)bb).position(bb.limit());
return false;
}
return true;
@@ -243,7 +244,7 @@ public class TLSClientHelloExtractor {
// the buffer contains a correctly formatted HTTP request line.
// The method, target and protocol are not validated.
byte chr = 0;
- bb.position(0);
+ ((Buffer)bb).position(0);
// Skip blank lines
do {
@@ -324,7 +325,7 @@ public class TLSClientHelloExtractor {
private static void skipBytes(ByteBuffer bb, int size) {
- bb.position(bb.position() + size);
+ ((Buffer)bb).position(bb.position() + size);
}
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/WriteBuffer.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/util/net/WriteBuffer.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/util/net/WriteBuffer.java
@@ -17,6 +17,7 @@
package org.apache.tomcat.util.net;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Iterator;
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java
@@ -18,6 +18,7 @@ package org.apache.tomcat.websocket;
import java.io.EOFException;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousSocketChannel;
import java.nio.channels.CompletionHandler;
@@ -189,7 +190,7 @@ public class AsyncChannelWrapperSecure i
for (int i = offset; i < offset + length; i++) {
ByteBuffer src = srcs[i];
while (src.hasRemaining()) {
- socketWriteBuffer.clear();
+ ((Buffer)socketWriteBuffer).clear();
// Encrypt the data
SSLEngineResult r = sslEngine.wrap(src, socketWriteBuffer);
@@ -215,7 +216,7 @@ public class AsyncChannelWrapperSecure i
}
}
- socketWriteBuffer.flip();
+ ((Buffer)socketWriteBuffer).flip();
// Do the write
int toWrite = r.bytesProduced();
@@ -272,7 +273,7 @@ public class AsyncChannelWrapperSecure i
}
}
- socketReadBuffer.flip();
+ ((Buffer)socketReadBuffer).flip();
if (socketReadBuffer.hasRemaining()) {
// Decrypt the data in the buffer
@@ -358,7 +359,7 @@ public class AsyncChannelWrapperSecure i
try {
sslEngine.beginHandshake();
// So the first compact does the right thing
- socketReadBuffer.position(socketReadBuffer.limit());
+ ((Buffer)socketReadBuffer).position(socketReadBuffer.limit());
handshakeStatus = sslEngine.getHandshakeStatus();
resultStatus = Status.OK;
@@ -368,11 +369,11 @@ public class AsyncChannelWrapperSecure i
while(handshaking) {
switch (handshakeStatus) {
case NEED_WRAP: {
- socketWriteBuffer.clear();
+ ((Buffer)socketWriteBuffer).clear();
SSLEngineResult r =
sslEngine.wrap(DUMMY, socketWriteBuffer);
checkResult(r, true);
- socketWriteBuffer.flip();
+ ((Buffer)socketWriteBuffer).flip();
Future<Integer> fWrite =
socketChannel.write(socketWriteBuffer);
fWrite.get();
@@ -386,7 +387,7 @@ public class AsyncChannelWrapperSecure i
socketChannel.read(socketReadBuffer);
fRead.get();
}
- socketReadBuffer.flip();
+ ((Buffer)socketReadBuffer).flip();
SSLEngineResult r =
sslEngine.unwrap(socketReadBuffer, DUMMY);
checkResult(r, false);
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/PerMessageDeflate.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/websocket/PerMessageDeflate.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/PerMessageDeflate.java
@@ -17,6 +17,7 @@
package org.apache.tomcat.websocket;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
@@ -207,11 +208,11 @@ public class PerMessageDeflate implement
} catch (NullPointerException e) {
throw new IOException(sm.getString("perMessageDeflate.alreadyClosed"), e);
}
- dest.position(dest.position() + written);
+ ((Buffer)dest).position(dest.position() + written);
if (inflater.needsInput() && !usedEomBytes ) {
if (dest.hasRemaining()) {
- readBuffer.clear();
+ ((Buffer)readBuffer).clear();
TransformationResult nextResult =
next.getMoreData(opCode, fin, (rsv ^ RSV_BITMASK), readBuffer);
inflater.setInput(
@@ -355,7 +356,7 @@ public class PerMessageDeflate implement
int written = deflater.deflate(compressedPayload.array(),
compressedPayload.arrayOffset() + compressedPayload.position(),
compressedPayload.remaining(), flush);
- compressedPayload.position(compressedPayload.position() + written);
+ ((Buffer)compressedPayload).position(compressedPayload.position() + written);
} catch (NullPointerException e) {
throw new IOException(sm.getString("perMessageDeflate.alreadyClosed"), e);
}
@@ -375,7 +376,7 @@ public class PerMessageDeflate implement
writeBuffer = ByteBuffer.allocate(Constants.DEFAULT_BUFFER_SIZE);
// Flip the compressed payload ready for writing
- compressedPayload.flip();
+ ((Buffer)compressedPayload).flip();
boolean fin = uncompressedPart.isFin();
boolean full = compressedPayload.limit() == compressedPayload.capacity();
@@ -384,7 +385,7 @@ public class PerMessageDeflate implement
if (fin && !full && needsInput) {
// End of compressed message. Drop EOM bytes and output.
- compressedPayload.limit(compressedPayload.limit() - EOM_BYTES.length);
+ ((Buffer)compressedPayload).limit(compressedPayload.limit() - EOM_BYTES.length);
compressedPart = new MessagePart(true, getRsv(uncompressedPart),
opCode, compressedPayload, uncompressedIntermediateHandler,
uncompressedIntermediateHandler, blockingWriteTimeoutExpiry);
@@ -419,7 +420,7 @@ public class PerMessageDeflate implement
}
if (eomBufferWritten < EOM_BUFFER.length) {
// EOM has just been completed
- compressedPayload.limit(compressedPayload.limit() - EOM_BYTES.length + eomBufferWritten);
+ ((Buffer)compressedPayload).limit(compressedPayload.limit() - EOM_BYTES.length + eomBufferWritten);
compressedPart = new MessagePart(true,
getRsv(uncompressedPart), opCode, compressedPayload,
uncompressedIntermediateHandler, uncompressedIntermediateHandler,
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/server/WsFrameServer.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/websocket/server/WsFrameServer.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/server/WsFrameServer.java
@@ -19,6 +19,7 @@ package org.apache.tomcat.websocket.serv
import java.io.EOFException;
import java.io.IOException;
import java.nio.ByteBuffer;
+import java.nio.Buffer;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
@@ -67,10 +68,10 @@ public class WsFrameServer extends WsFra
while (isOpen() && !isSuspended()) {
// Fill up the input buffer with as much data as we can
- inputBuffer.mark();
- inputBuffer.position(inputBuffer.limit()).limit(inputBuffer.capacity());
+ ((Buffer)inputBuffer).mark();
+ ((Buffer)inputBuffer).position(inputBuffer.limit()).limit(inputBuffer.capacity());
int read = socketWrapper.read(false, inputBuffer);
- inputBuffer.limit(inputBuffer.position()).reset();
+ ((Buffer)inputBuffer).limit(inputBuffer.position()).reset();
if (read < 0) {
throw new EOFException();
} else if (read == 0) {
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/WsFrameBase.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/websocket/WsFrameBase.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/WsFrameBase.java
@@ -17,6 +17,7 @@
package org.apache.tomcat.websocket;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharsetDecoder;
@@ -91,7 +92,7 @@ public abstract class WsFrameBase {
public WsFrameBase(WsSession wsSession, Transformation transformation) {
inputBuffer = ByteBuffer.allocate(Constants.DEFAULT_BUFFER_SIZE);
- inputBuffer.position(0).limit(0);
+ ((Buffer)inputBuffer).position(0).limit(0);
messageBufferBinary = ByteBuffer.allocate(wsSession.getMaxBinaryMessageBufferSize());
messageBufferText = CharBuffer.allocate(wsSession.getMaxTextMessageBufferSize());
wsSession.setWsFrame(this);
@@ -257,11 +258,11 @@ public abstract class WsFrameBase {
if (payloadLength == 126) {
payloadLength = byteArrayToLong(inputBuffer.array(),
inputBuffer.arrayOffset() + inputBuffer.position(), 2);
- inputBuffer.position(inputBuffer.position() + 2);
+ ((Buffer)inputBuffer).position(inputBuffer.position() + 2);
} else if (payloadLength == 127) {
payloadLength = byteArrayToLong(inputBuffer.array(),
inputBuffer.arrayOffset() + inputBuffer.position(), 8);
- inputBuffer.position(inputBuffer.position() + 8);
+ ((Buffer)inputBuffer).position(inputBuffer.position() + 8);
}
if (Util.isControl(opCode)) {
if (payloadLength > 125) {
@@ -313,13 +314,13 @@ public abstract class WsFrameBase {
// Control messages have fixed message size so
// TransformationResult.OVERFLOW is not possible here
- controlBufferBinary.flip();
+ ((Buffer)controlBufferBinary).flip();
if (opCode == Constants.OPCODE_CLOSE) {
open = false;
String reason = null;
int code = CloseCodes.NORMAL_CLOSURE.getCode();
if (controlBufferBinary.remaining() == 1) {
- controlBufferBinary.clear();
+ ((Buffer)controlBufferBinary).clear();
// Payload must be zero or 2+ bytes long
throw new WsIOException(new CloseReason(
CloseCodes.PROTOCOL_ERROR,
@@ -331,8 +332,8 @@ public abstract class WsFrameBase {
CoderResult cr = utf8DecoderControl.decode(controlBufferBinary,
controlBufferText, true);
if (cr.isError()) {
- controlBufferBinary.clear();
- controlBufferText.clear();
+ ((Buffer)controlBufferBinary).clear();
+ ((Buffer)controlBufferText).clear();
throw new WsIOException(new CloseReason(
CloseCodes.PROTOCOL_ERROR,
sm.getString("wsFrame.invalidUtf8Close")));
@@ -340,7 +341,7 @@ public abstract class WsFrameBase {
// There will be no overflow as the output buffer is big
// enough. There will be no underflow as all the data is
// passed to the decoder in a single call.
- controlBufferText.flip();
+ ((Buffer)controlBufferText).flip();
reason = controlBufferText.toString();
}
}
@@ -357,17 +358,17 @@ public abstract class WsFrameBase {
} catch (Throwable t) {
handleThrowableOnSend(t);
} finally {
- controlBufferBinary.clear();
+ ((Buffer)controlBufferBinary).clear();
}
}
} else {
// Should have caught this earlier but just in case...
- controlBufferBinary.clear();
+ ((Buffer)controlBufferBinary).clear();
throw new WsIOException(new CloseReason(
CloseCodes.PROTOCOL_ERROR,
sm.getString("wsFrame.invalidOpCode", Integer.valueOf(opCode))));
}
- controlBufferBinary.clear();
+ ((Buffer)controlBufferBinary).clear();
newFrame();
return true;
}
@@ -397,7 +398,7 @@ public abstract class WsFrameBase {
} catch (Throwable t) {
handleThrowableOnSend(t);
} finally {
- messageBufferText.clear();
+ ((Buffer)messageBufferText).clear();
}
}
@@ -408,7 +409,7 @@ public abstract class WsFrameBase {
while (!TransformationResult.END_OF_FRAME.equals(tr)) {
// Frame not complete - we ran out of something
// Convert bytes to UTF-8
- messageBufferBinary.flip();
+ ((Buffer)messageBufferBinary).flip();
while (true) {
CoderResult cr = utf8DecoderMessage.decode(messageBufferBinary, messageBufferText,
false);
@@ -419,9 +420,9 @@ public abstract class WsFrameBase {
} else if (cr.isOverflow()) {
// Ran out of space in text buffer - flush it
if (usePartial()) {
- messageBufferText.flip();
+ ((Buffer)messageBufferText).flip();
sendMessageText(false);
- messageBufferText.clear();
+ ((Buffer)messageBufferText).clear();
} else {
throw new WsIOException(new CloseReason(
CloseCodes.TOO_BIG,
@@ -448,7 +449,7 @@ public abstract class WsFrameBase {
tr = transformation.getMoreData(opCode, fin, rsv, messageBufferBinary);
}
- messageBufferBinary.flip();
+ ((Buffer)messageBufferBinary).flip();
boolean last = false;
// Frame is fully received
// Convert bytes to UTF-8
@@ -462,9 +463,9 @@ public abstract class WsFrameBase {
} else if (cr.isOverflow()) {
// Ran out of space in text buffer - flush it
if (usePartial()) {
- messageBufferText.flip();
+ ((Buffer)messageBufferText).flip();
sendMessageText(false);
- messageBufferText.clear();
+ ((Buffer)messageBufferText).clear();
} else {
throw new WsIOException(new CloseReason(
CloseCodes.TOO_BIG,
@@ -477,9 +478,9 @@ public abstract class WsFrameBase {
// If partial messages are supported, send what we have
// managed to decode
if (usePartial()) {
- messageBufferText.flip();
+ ((Buffer)messageBufferText).flip();
sendMessageText(false);
- messageBufferText.clear();
+ ((Buffer)messageBufferText).clear();
}
messageBufferBinary.compact();
newFrame();
@@ -491,7 +492,7 @@ public abstract class WsFrameBase {
}
} else {
// End of message
- messageBufferText.flip();
+ ((Buffer)messageBufferText).flip();
sendMessageText(true);
newMessage();
@@ -519,12 +520,12 @@ public abstract class WsFrameBase {
Long.valueOf(payloadLength)));
throw new WsIOException(cr);
}
- messageBufferBinary.flip();
+ ((Buffer)messageBufferBinary).flip();
ByteBuffer copy = ByteBuffer.allocate(messageBufferBinary.limit());
copy.put(messageBufferBinary);
- copy.flip();
+ ((Buffer)copy).flip();
sendMessageBinary(copy, false);
- messageBufferBinary.clear();
+ ((Buffer)messageBufferBinary).clear();
// Read more data
tr = transformation.getMoreData(opCode, fin, rsv, messageBufferBinary);
}
@@ -534,12 +535,12 @@ public abstract class WsFrameBase {
// - partial messages are supported
// - the message is complete
if (usePartial() || !continuationExpected) {
- messageBufferBinary.flip();
+ ((Buffer)messageBufferBinary).flip();
ByteBuffer copy = ByteBuffer.allocate(messageBufferBinary.limit());
copy.put(messageBufferBinary);
- copy.flip();
+ ((Buffer)copy).flip();
sendMessageBinary(copy, !continuationExpected);
- messageBufferBinary.clear();
+ ((Buffer)messageBufferBinary).clear();
}
if (continuationExpected) {
@@ -588,8 +589,8 @@ public abstract class WsFrameBase {
private void newMessage() {
- messageBufferBinary.clear();
- messageBufferText.clear();
+ ((Buffer)messageBufferBinary).clear();
+ ((Buffer)messageBufferText).clear();
utf8DecoderMessage.reset();
continuationExpected = false;
newFrame();
@@ -598,7 +599,7 @@ public abstract class WsFrameBase {
private void newFrame() {
if (inputBuffer.remaining() == 0) {
- inputBuffer.position(0).limit(0);
+ ((Buffer)inputBuffer).position(0).limit(0);
}
maskIndex = 0;
@@ -631,7 +632,7 @@ public abstract class WsFrameBase {
private void makeRoom() {
inputBuffer.compact();
- inputBuffer.flip();
+ ((Buffer)inputBuffer).flip();
}
@@ -649,7 +650,7 @@ public abstract class WsFrameBase {
private boolean swallowInput() {
long toSkip = Math.min(payloadLength - payloadWritten, inputBuffer.remaining());
- inputBuffer.position(inputBuffer.position() + (int) toSkip);
+ ((Buffer)inputBuffer).position(inputBuffer.position() + (int) toSkip);
payloadWritten += toSkip;
if (payloadWritten == payloadLength) {
if (continuationExpected) {
@@ -945,9 +946,9 @@ public abstract class WsFrameBase {
toWrite = Math.min(toWrite, dest.remaining());
int orgLimit = inputBuffer.limit();
- inputBuffer.limit(inputBuffer.position() + (int) toWrite);
+ ((Buffer)inputBuffer).limit(inputBuffer.position() + (int) toWrite);
dest.put(inputBuffer);
- inputBuffer.limit(orgLimit);
+ ((Buffer)inputBuffer).limit(orgLimit);
payloadWritten += toWrite;
if (payloadWritten == payloadLength) {
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/WsFrameClient.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/websocket/WsFrameClient.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/WsFrameClient.java
@@ -18,6 +18,7 @@ package org.apache.tomcat.websocket;
import java.io.EOFException;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.CompletionHandler;
@@ -76,8 +77,8 @@ public class WsFrameClient extends WsFra
// and then a new socket read will be performed
return;
}
- inputBuffer.mark();
- inputBuffer.position(inputBuffer.limit()).limit(inputBuffer.capacity());
+ ((Buffer)inputBuffer).mark();
+ ((Buffer)inputBuffer).position(inputBuffer.limit()).limit(inputBuffer.capacity());
int toCopy = Math.min(response.remaining(), inputBuffer.remaining());
@@ -85,16 +86,16 @@ public class WsFrameClient extends WsFra
// frame processing
int orgLimit = response.limit();
- response.limit(response.position() + toCopy);
+ ((Buffer)response).limit(response.position() + toCopy);
inputBuffer.put(response);
- response.limit(orgLimit);
+ ((Buffer)response).limit(orgLimit);
- inputBuffer.limit(inputBuffer.position()).reset();
+ ((Buffer)inputBuffer).limit(inputBuffer.position()).reset();
// Process the data we have
processInputBuffer();
}
- response.clear();
+ ((Buffer)response).clear();
// Get some more data
if (isOpen()) {
@@ -159,7 +160,7 @@ public class WsFrameClient extends WsFra
// No data to process
return;
}
- response.flip();
+ ((Buffer)response).flip();
doResumeProcessing(true);
}
@@ -169,7 +170,7 @@ public class WsFrameClient extends WsFra
// response will be empty if this exception is thrown
response = ByteBuffer
.allocate(((ReadBufferOverflowException) exc).getMinBufferSize());
- response.flip();
+ ((Buffer)response).flip();
doResumeProcessing(false);
} else {
close(exc);
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java
@@ -20,6 +20,7 @@ import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
import java.net.SocketTimeoutException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharsetEncoder;
@@ -240,13 +241,13 @@ public abstract class WsRemoteEndpointIm
long timeoutExpiry = getTimeoutExpiry();
boolean isDone = false;
while (!isDone) {
- encoderBuffer.clear();
+ ((Buffer)encoderBuffer).clear();
CoderResult cr = encoder.encode(part, encoderBuffer, true);
if (cr.isError()) {
throw new IllegalArgumentException(cr.toString());
}
isDone = !cr.isOverflow();
- encoderBuffer.flip();
+ ((Buffer)encoderBuffer).flip();
sendMessageBlock(Constants.OPCODE_TEXT, encoderBuffer, last && isDone, timeoutExpiry);
}
stateMachine.complete(last);
@@ -321,7 +322,7 @@ public abstract class WsRemoteEndpointIm
}
if (payload != null) {
- payload.clear();
+ ((Buffer)payload).clear();
}
endMessage(null, null);
@@ -433,7 +434,7 @@ public abstract class WsRemoteEndpointIm
if (Constants.INTERNAL_OPCODE_FLUSH == mp.getOpCode()) {
nextFragmented = fragmented;
nextText = text;
- outputBuffer.flip();
+ ((Buffer)outputBuffer).flip();
SendHandler flushHandler = new OutputBufferFlushSendHandler(
outputBuffer, mp.getEndHandler());
doWrite(flushHandler, mp.getBlockingWriteTimeoutExpiry(), outputBuffer);
@@ -482,10 +483,10 @@ public abstract class WsRemoteEndpointIm
mask = null;
}
- headerBuffer.clear();
+ ((Buffer)headerBuffer).clear();
writeHeader(headerBuffer, mp.isFin(), mp.getRsv(), mp.getOpCode(),
isMasked(), mp.getPayload(), mask, first);
- headerBuffer.flip();
+ ((Buffer)headerBuffer).flip();
if (getBatchingAllowed() || isMasked()) {
// Need to write via output buffer
@@ -798,13 +799,13 @@ public abstract class WsRemoteEndpointIm
}
public void write() {
- buffer.clear();
+ ((Buffer)buffer).clear();
CoderResult cr = encoder.encode(message, buffer, true);
if (cr.isError()) {
throw new IllegalArgumentException(cr.toString());
}
isDone = !cr.isOverflow();
- buffer.flip();
+ ((Buffer)buffer).flip();
endpoint.startMessage(Constants.OPCODE_TEXT, buffer,
isDone && isLast, this);
}
@@ -865,7 +866,7 @@ public abstract class WsRemoteEndpointIm
}
if (headerBuffer.hasRemaining()) {
// Still more headers to write, need to flush
- outputBuffer.flip();
+ ((Buffer)outputBuffer).flip();
endpoint.doWrite(this, blockingWriteTimeoutExpiry, outputBuffer);
return;
}
@@ -879,7 +880,7 @@ public abstract class WsRemoteEndpointIm
if (payloadLeft > outputSpace) {
toWrite = outputSpace;
// Temporarily reduce the limit
- payload.limit(payload.position() + toWrite);
+ ((Buffer)payload).limit(payload.position() + toWrite);
}
if (mask == null) {
@@ -897,15 +898,15 @@ public abstract class WsRemoteEndpointIm
if (payloadLeft > outputSpace) {
// Restore the original limit
- payload.limit(payloadLimit);
+ ((Buffer)payload).limit(payloadLimit);
// Still more data to write, need to flush
- outputBuffer.flip();
+ ((Buffer)outputBuffer).flip();
endpoint.doWrite(this, blockingWriteTimeoutExpiry, outputBuffer);
return;
}
if (flushRequired) {
- outputBuffer.flip();
+ ((Buffer)outputBuffer).flip();
if (outputBuffer.remaining() == 0) {
handler.onResult(SENDRESULT_OK);
} else {
@@ -923,7 +924,7 @@ public abstract class WsRemoteEndpointIm
if (outputBuffer.hasRemaining()) {
endpoint.doWrite(this, blockingWriteTimeoutExpiry, outputBuffer);
} else {
- outputBuffer.clear();
+ ((Buffer)outputBuffer).clear();
write();
}
} else {
@@ -949,7 +950,7 @@ public abstract class WsRemoteEndpointIm
@Override
public void onResult(SendResult result) {
if (result.isOK()) {
- outputBuffer.clear();
+ ((Buffer)outputBuffer).clear();
}
handler.onResult(result);
}
@@ -1042,11 +1043,11 @@ public abstract class WsRemoteEndpointIm
private void doWrite(boolean last) throws IOException {
if (used) {
- buffer.flip();
+ ((Buffer)buffer).flip();
endpoint.sendMessageBlock(Constants.OPCODE_BINARY, buffer, last);
}
endpoint.stateMachine.complete(last);
- buffer.clear();
+ ((Buffer)buffer).clear();
}
}
@@ -1121,9 +1122,9 @@ public abstract class WsRemoteEndpointIm
private void doWrite(boolean last) throws IOException {
if (used) {
- buffer.flip();
+ ((Buffer)buffer).flip();
endpoint.sendMessageBlock(buffer, last);
- buffer.clear();
+ ((Buffer)buffer).clear();
} else {
endpoint.stateMachine.complete(last);
}
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/WsSession.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/websocket/WsSession.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/WsSession.java
@@ -18,6 +18,7 @@ package org.apache.tomcat.websocket;
import java.io.IOException;
import java.net.URI;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.WritePendingException;
import java.nio.charset.StandardCharsets;
@@ -607,7 +608,7 @@ public class WsSession implements Sessio
if (reason != null && reason.length() > 0) {
appendCloseReasonWithTruncation(msg, reason);
}
- msg.flip();
+ ((Buffer)msg).flip();
try {
wsRemoteEndpoint.sendMessageBlock(Constants.OPCODE_CLOSE, msg, true);
} catch (IOException | WritePendingException e) {
Index: apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
+++ apache-tomcat-9.0.35-src/java/org/apache/tomcat/websocket/WsWebSocketContainer.java
@@ -27,6 +27,7 @@ import java.net.ProxySelector;
import java.net.SocketAddress;
import java.net.URI;
import java.net.URISyntaxException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.AsynchronousChannelGroup;
import java.nio.channels.AsynchronousSocketChannel;
@@ -740,7 +741,7 @@ public class WsWebSocketContainer implem
// Terminating CRLF
result.put(CRLF);
- result.flip();
+ ((Buffer)result).flip();
return result;
}
@@ -769,7 +770,7 @@ public class WsWebSocketContainer implem
newSize = input.capacity() * 2;
}
ByteBuffer expanded = ByteBuffer.allocate(newSize);
- input.flip();
+ ((Buffer)input).flip();
expanded.put(input);
input = expanded;
}
@@ -798,14 +799,14 @@ public class WsWebSocketContainer implem
while (!readHeaders) {
// On entering loop buffer will be empty and at the start of a new
// loop the buffer will have been fully read.
- response.clear();
+ ((Buffer)response).clear();
// Blocking read
Future<Integer> read = channel.read(response);
Integer bytesRead = read.get(timeout, TimeUnit.MILLISECONDS);
if (bytesRead.intValue() == -1) {
throw new EOFException();
}
- response.flip();
+ ((Buffer)response).flip();
while (response.hasRemaining() && !readHeaders) {
if (line == null) {
line = readLine(response);
Index: apache-tomcat-9.0.35-src/test/org/apache/coyote/http11/upgrade/TestUpgradeInternalHandler.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/test/org/apache/coyote/http11/upgrade/TestUpgradeInternalHandler.java
+++ apache-tomcat-9.0.35-src/test/org/apache/coyote/http11/upgrade/TestUpgradeInternalHandler.java
@@ -25,6 +25,7 @@ import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.net.Socket;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.channels.CompletionHandler;
import java.nio.charset.StandardCharsets;
@@ -210,7 +211,7 @@ public class TestUpgradeInternalHandler
}
private void write(ByteBuffer buffer) {
- buffer.flip();
+ ((Buffer)buffer).flip();
CompletionState state = wrapper.write(BlockingMode.BLOCK, 10, TimeUnit.SECONDS, null, SocketWrapperBase.COMPLETE_WRITE, new CompletionHandler<Long, Void>() {
@Override
public void completed(Long result, Void attachment) {
Index: apache-tomcat-9.0.35-src/test/org/apache/coyote/http2/Http2TestBase.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/test/org/apache/coyote/http2/Http2TestBase.java
+++ apache-tomcat-9.0.35-src/test/org/apache/coyote/http2/Http2TestBase.java
@@ -23,6 +23,7 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.SocketException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
@@ -222,7 +223,7 @@ public abstract class Http2TestBase exte
if (padding != null) {
headersPayload.put(padding);
}
- headersPayload.flip();
+ ((Buffer)headersPayload).flip();
ByteUtil.setThreeBytes(frameHeader, 0, headersPayload.limit());
frameHeader[3] = FrameType.HEADERS.getIdByte();
@@ -255,7 +256,7 @@ public abstract class Http2TestBase exte
}
hpackEncoder.encode(mimeHeaders, headersPayload);
- headersPayload.flip();
+ ((Buffer)headersPayload).flip();
ByteUtil.setThreeBytes(frameHeader, 0, headersPayload.limit());
frameHeader[3] = FrameType.HEADERS.getIdByte();
@@ -283,7 +284,7 @@ public abstract class Http2TestBase exte
}
hpackEncoder.encode(mimeHeaders, headersPayload);
- headersPayload.flip();
+ ((Buffer)headersPayload).flip();
ByteUtil.setThreeBytes(frameHeader, 0, headersPayload.limit());
frameHeader[3] = FrameType.CONTINUATION.getIdByte();
@@ -373,7 +374,7 @@ public abstract class Http2TestBase exte
}
hpackEncoder.encode(headers, headersPayload);
- headersPayload.flip();
+ ((Buffer)headersPayload).flip();
ByteUtil.setThreeBytes(headersFrameHeader, 0, headersPayload.limit());
headersFrameHeader[3] = FrameType.HEADERS.getIdByte();
@@ -385,18 +386,18 @@ public abstract class Http2TestBase exte
// Data
if (padding != null) {
dataPayload.put((byte) (padding.length & 0xFF));
- dataPayload.limit(dataPayload.capacity() - padding.length);
+ ((Buffer)dataPayload).limit(dataPayload.capacity() - padding.length);
}
while (dataPayload.hasRemaining()) {
dataPayload.put((byte) 'x');
}
if (padding != null && padding.length > 0) {
- dataPayload.limit(dataPayload.capacity());
+ ((Buffer)dataPayload).limit(dataPayload.capacity());
dataPayload.put(padding);
}
- dataPayload.flip();
+ ((Buffer)dataPayload).flip();
// Size
ByteUtil.setThreeBytes(dataFrameHeader, 0, dataPayload.limit());
@@ -418,7 +419,7 @@ public abstract class Http2TestBase exte
trailerHeaders.addValue(TRAILER_HEADER_NAME).setString(TRAILER_HEADER_VALUE);
hpackEncoder.encode(trailerHeaders, trailersPayload);
- trailersPayload.flip();
+ ((Buffer)trailersPayload).flip();
ByteUtil.setThreeBytes(trailersFrameHeader, 0, trailersPayload.limit());
trailersFrameHeader[3] = FrameType.HEADERS.getIdByte();
@@ -1018,7 +1019,7 @@ public abstract class Http2TestBase exte
if (bodyBuffer != null) {
if (bodyBuffer.limit() > 0) {
trace.append(lastStreamId + "-Body-");
- bodyBuffer.flip();
+ ((Buffer)bodyBuffer).flip();
while (bodyBuffer.hasRemaining()) {
trace.append((char) bodyBuffer.get());
}
Index: apache-tomcat-9.0.35-src/test/org/apache/coyote/http2/TestHpack.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/test/org/apache/coyote/http2/TestHpack.java
+++ apache-tomcat-9.0.35-src/test/org/apache/coyote/http2/TestHpack.java
@@ -16,6 +16,7 @@
*/
package org.apache.coyote.http2;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import org.junit.Assert;
@@ -34,13 +35,13 @@ public class TestHpack {
ByteBuffer output = ByteBuffer.allocate(512);
HpackEncoder encoder = new HpackEncoder();
encoder.encode(headers, output);
- output.flip();
+ ((Buffer)output).flip();
// Size is supposed to be 33 without huffman, or 27 with it
// TODO: use the HpackHeaderFunction to enable huffman predictably
Assert.assertEquals(27, output.remaining());
- output.clear();
+ ((Buffer)output).clear();
encoder.encode(headers, output);
- output.flip();
+ ((Buffer)output).flip();
// Size is now 3 after using the table
Assert.assertEquals(3, output.remaining());
}
@@ -54,15 +55,15 @@ public class TestHpack {
ByteBuffer output = ByteBuffer.allocate(512);
HpackEncoder encoder = new HpackEncoder();
encoder.encode(headers, output);
- output.flip();
+ ((Buffer)output).flip();
MimeHeaders headers2 = new MimeHeaders();
HpackDecoder decoder = new HpackDecoder();
decoder.setHeaderEmitter(new HeadersListener(headers2));
decoder.decode(output);
// Redo (table is supposed to be updated)
- output.clear();
+ ((Buffer)output).clear();
encoder.encode(headers, output);
- output.flip();
+ ((Buffer)output).flip();
headers2.recycle();
Assert.assertEquals(3, output.remaining());
// Check that the decoder is using the table right
@@ -120,7 +121,7 @@ public class TestHpack {
// by another byte
output.array()[7] = (byte) -122;
output.put((byte) -1);
- output.flip();
+ ((Buffer)output).flip();
MimeHeaders headers2 = new MimeHeaders();
HpackDecoder decoder = new HpackDecoder();
decoder.setHeaderEmitter(new HeadersListener(headers2));
@@ -136,7 +137,7 @@ public class TestHpack {
ByteBuffer output = ByteBuffer.allocate(512);
HpackEncoder encoder = new HpackEncoder();
encoder.encode(headers, output);
- output.flip();
+ ((Buffer)output).flip();
MimeHeaders headers2 = new MimeHeaders();
HpackDecoder decoder = new HpackDecoder();
decoder.setHeaderEmitter(new HeadersListener(headers2));
Index: apache-tomcat-9.0.35-src/test/org/apache/coyote/http2/TestHttp2Limits.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/test/org/apache/coyote/http2/TestHttp2Limits.java
+++ apache-tomcat-9.0.35-src/test/org/apache/coyote/http2/TestHttp2Limits.java
@@ -17,6 +17,7 @@
package org.apache.coyote.http2;
import java.io.IOException;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
@@ -291,7 +292,7 @@ public class TestHttp2Limits extends Htt
if (state != State.COMPLETE) {
throw new Exception("Unable to build headers");
}
- headersPayload.flip();
+ ((Buffer)headersPayload).flip();
log.debug("Headers payload generated of size [" + headersPayload.limit() + "]");
}
Index: apache-tomcat-9.0.35-src/test/org/apache/coyote/http2/TestHttp2Section_8_1.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/test/org/apache/coyote/http2/TestHttp2Section_8_1.java
+++ apache-tomcat-9.0.35-src/test/org/apache/coyote/http2/TestHttp2Section_8_1.java
@@ -16,6 +16,7 @@
*/
package org.apache.coyote.http2;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
@@ -186,7 +187,7 @@ public class TestHttp2Section_8_1 extend
headers.clear();
headers.add(new Header(":authority", "localhost:" + getPort()));
- headersPayload.clear();
+ ((Buffer)headersPayload).clear();
buildSimpleGetRequestPart2(headersFrameHeader, headersPayload, headers , 3);
Index: apache-tomcat-9.0.35-src/test/org/apache/tomcat/util/buf/TestUtf8.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/test/org/apache/tomcat/util/buf/TestUtf8.java
+++ apache-tomcat-9.0.35-src/test/org/apache/tomcat/util/buf/TestUtf8.java
@@ -16,6 +16,7 @@
*/
package org.apache.tomcat.util.buf;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharsetDecoder;
@@ -579,7 +580,7 @@ public class TestUtf8 {
// an invalid sequence has been provided
for (int i = 0; i < len; i++) {
bb.put((byte) testCase.input[i]);
- bb.flip();
+ ((Buffer)bb).flip();
CoderResult cr = decoder.decode(bb, cb, false);
if (cr.isError()) {
int expected = testCase.invalidIndex;
@@ -604,11 +605,11 @@ public class TestUtf8 {
decoder.onUnmappableCharacter(CodingErrorAction.REPLACE);
// Add each byte one at a time.
- bb.clear();
- cb.clear();
+ ((Buffer)bb).clear();
+ ((Buffer)cb).clear();
for (int i = 0; i < len; i++) {
bb.put((byte) testCase.input[i]);
- bb.flip();
+ ((Buffer)bb).flip();
CoderResult cr = decoder.decode(bb, cb, false);
if (cr.isError()) {
Assert.fail(testCase.description);
@@ -617,12 +618,12 @@ public class TestUtf8 {
}
// For incomplete sequences at the end of the input need to tell
// the decoder the input has ended
- bb.flip();
+ ((Buffer)bb).flip();
CoderResult cr = decoder.decode(bb, cb, true);
if (cr.isError()) {
Assert.fail(testCase.description);
}
- cb.flip();
+ ((Buffer)cb).flip();
String expected = testCase.outputReplaced;
if ((flags & REPLACE_SWALLOWS_TRAILER) != 0) {
Index: apache-tomcat-9.0.35-src/test/org/apache/tomcat/websocket/pojo/TestEncodingDecoding.java
===================================================================
--- apache-tomcat-9.0.35-src.orig/test/org/apache/tomcat/websocket/pojo/TestEncodingDecoding.java
+++ apache-tomcat-9.0.35-src/test/org/apache/tomcat/websocket/pojo/TestEncodingDecoding.java
@@ -18,6 +18,7 @@ package org.apache.tomcat.websocket.pojo
import java.io.IOException;
import java.net.URI;
+import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
@@ -605,7 +606,7 @@ public class TestEncodingDecoding extend
reply.put((byte) 0x12);
reply.put((byte) 0x34);
reply.put(data);
- reply.flip();
+ ((Buffer)reply).flip();
return reply;
}
}