diff --git a/tomcat-9.0.43-java8compat.patch b/tomcat-9.0.43-java8compat.patch index 33294bb..d232214 100644 --- a/tomcat-9.0.43-java8compat.patch +++ b/tomcat-9.0.43-java8compat.patch @@ -1,3417 +1,32 @@ -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/catalina/connector/InputBuffer.java apache-tomcat-9.0.43-src/java/org/apache/catalina/connector/InputBuffer.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/catalina/connector/InputBuffer.java 2021-01-28 21:36:21.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/catalina/connector/InputBuffer.java 2021-10-18 22:46:03.740843061 +0200 -@@ -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; - } -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/catalina/connector/OutputBuffer.java apache-tomcat-9.0.43-src/java/org/apache/catalina/connector/OutputBuffer.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/catalina/connector/OutputBuffer.java 2021-01-28 21:36:21.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/catalina/connector/OutputBuffer.java 2021-10-18 22:46:03.740843061 +0200 -@@ -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) { -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/catalina/tribes/transport/nio/NioReplicationTask.java apache-tomcat-9.0.43-src/java/org/apache/catalina/tribes/transport/nio/NioReplicationTask.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/catalina/tribes/transport/nio/NioReplicationTask.java 2021-01-28 21:36:25.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/catalina/tribes/transport/nio/NioReplicationTask.java 2021-10-18 22:46:03.744843076 +0200 -@@ -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; - } -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/catalina/tribes/transport/nio/NioSender.java apache-tomcat-9.0.43-src/java/org/apache/catalina/tribes/transport/nio/NioSender.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/catalina/tribes/transport/nio/NioSender.java 2021-01-28 21:36:25.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/catalina/tribes/transport/nio/NioSender.java 2021-10-18 22:46:03.744843076 +0200 -@@ -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); -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/ajp/AjpProcessor.java apache-tomcat-9.0.43-src/java/org/apache/coyote/ajp/AjpProcessor.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/ajp/AjpProcessor.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/ajp/AjpProcessor.java 2021-10-18 22:46:03.744843076 +0200 -@@ -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.CertificateException; -@@ -1255,7 +1256,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()); -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/filters/BufferedInputFilter.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/filters/BufferedInputFilter.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/filters/BufferedInputFilter.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/filters/BufferedInputFilter.java 2021-10-18 22:46:03.744843076 +0200 -@@ -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; -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/filters/ChunkedInputFilter.java 2021-10-18 22:46:03.744843076 +0200 -@@ -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()) { -@@ -272,7 +273,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; -@@ -372,7 +373,7 @@ public class ChunkedInputFilter implemen - - // Parsing the CRLF increments pos - if (!eol) { -- readChunk.position(readChunk.position() + 1); -+ ((Buffer)readChunk).position(readChunk.position() + 1); - } - } - -@@ -424,7 +425,7 @@ public class ChunkedInputFilter implemen - throwIOException(sm.getString("chunkedInputFilter.invalidCrlf")); - } - -- readChunk.position(readChunk.position() + 1); -+ ((Buffer)readChunk).position(readChunk.position() + 1); - } - } - -@@ -493,7 +494,7 @@ public class ChunkedInputFilter implemen - trailingHeaders.append(chr); - } - -- readChunk.position(readChunk.position() + 1); -+ ((Buffer)readChunk).position(readChunk.position() + 1); - - } - int colonPos = trailingHeaders.getEnd(); -@@ -522,7 +523,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; -@@ -558,7 +559,7 @@ public class ChunkedInputFilter implemen - } - - if (!eol) { -- readChunk.position(readChunk.position() + 1); -+ ((Buffer)readChunk).position(readChunk.position() + 1); - } - } - -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/filters/ChunkedOutputFilter.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/filters/ChunkedOutputFilter.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/filters/ChunkedOutputFilter.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/filters/ChunkedOutputFilter.java 2021-10-18 22:46:03.744843076 +0200 -@@ -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(); - } -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/filters/IdentityInputFilter.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/filters/IdentityInputFilter.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/filters/IdentityInputFilter.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/filters/IdentityInputFilter.java 2021-10-18 22:46:03.744843076 +0200 -@@ -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; - } -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/filters/IdentityOutputFilter.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/filters/IdentityOutputFilter.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/filters/IdentityOutputFilter.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/filters/IdentityOutputFilter.java 2021-10-18 22:46:03.744843076 +0200 -@@ -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 { -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/filters/SavedRequestInputFilter.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/filters/SavedRequestInputFilter.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/filters/SavedRequestInputFilter.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/filters/SavedRequestInputFilter.java 2021-10-18 22:46:03.744843076 +0200 -@@ -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(); -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/Http11InputBuffer.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/Http11InputBuffer.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/Http11InputBuffer.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/Http11InputBuffer.java 2021-10-18 22:46:03.744843076 +0200 -@@ -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; -@@ -264,7 +265,7 @@ public class Http11InputBuffer implement - activeFilters[i].recycle(); - } - -- byteBuffer.limit(0).position(0); -+ ((Buffer)byteBuffer).limit(0).position(0); - lastActiveFilter = -1; - swallowInput = true; - -@@ -298,10 +299,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); - } - } - -@@ -385,7 +386,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; -@@ -431,7 +432,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(); -@@ -525,7 +526,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(); -@@ -642,7 +643,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); - } - } - -@@ -744,7 +745,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); - } - } - -@@ -777,14 +778,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) { -@@ -792,7 +793,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 (log.isDebugEnabled()) { - log.debug("Received [" -@@ -838,10 +839,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; - } -@@ -884,7 +885,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(); - } -@@ -922,7 +923,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; - } - } -@@ -1153,7 +1154,7 @@ public class Http11InputBuffer implement - - int length = byteBuffer.remaining(); - handler.setByteBuffer(byteBuffer.duplicate()); -- byteBuffer.position(byteBuffer.limit()); -+ ((Buffer)byteBuffer).position(byteBuffer.limit()); - - return length; - } -@@ -1180,12 +1181,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; - } - } -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/Http11OutputBuffer.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/Http11OutputBuffer.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http11/Http11OutputBuffer.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http11/Http11OutputBuffer.java 2021-10-18 22:46:03.744843076 +0200 -@@ -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; - -@@ -245,7 +246,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()); - } - - -@@ -273,7 +274,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; - ackSent = false; - responseFinished = false; -@@ -310,7 +311,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) { -@@ -319,7 +320,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()); - } - } - } -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/HpackDecoder.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/HpackDecoder.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/HpackDecoder.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/HpackDecoder.java 2021-10-18 22:46:03.744843076 +0200 -@@ -16,6 +16,7 @@ - */ - package org.apache.coyote.http2; - -+import java.nio.Buffer; - import java.nio.ByteBuffer; - - import org.apache.tomcat.util.res.StringManager; -@@ -97,10 +98,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( -@@ -111,12 +112,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); -@@ -125,12 +126,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); -@@ -138,12 +139,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); -@@ -162,10 +163,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) { -@@ -195,7 +196,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; -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/HPackHuffman.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/HPackHuffman.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/HPackHuffman.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/HPackHuffman.java 2021-10-18 22:46:03.748843092 +0200 -@@ -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))); -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/Hpack.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/Hpack.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/Hpack.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/Hpack.java 2021-10-18 22:46:03.748843092 +0200 -@@ -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(); -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/Http2AsyncParser.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/Http2AsyncParser.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/Http2AsyncParser.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/Http2AsyncParser.java 2021-10-18 22:46:03.748843092 +0200 -@@ -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); -@@ -233,7 +234,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 { -@@ -287,7 +288,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) { -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java 2021-10-18 22:46:03.748843092 +0200 -@@ -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; -@@ -218,11 +219,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(); - } - } -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/Http2Parser.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/Http2Parser.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/Http2Parser.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/Http2Parser.java 2021-10-18 22:46:03.748843092 +0200 -@@ -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; - } -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/Http2UpgradeHandler.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/Http2UpgradeHandler.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/Http2UpgradeHandler.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/Http2UpgradeHandler.java 2021-10-18 22:46:03.748843092 +0200 -@@ -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; -@@ -770,9 +771,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); -@@ -1919,7 +1920,7 @@ class Http2UpgradeHandler extends Abstra - } catch (IOException ioe) { - handleAppInitiatedIOException(ioe); - } -- payload.clear(); -+ ((Buffer)payload).clear(); - } - - @Override -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/Stream.java apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/Stream.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/coyote/http2/Stream.java 2021-01-28 21:36:26.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/coyote/http2/Stream.java 2021-10-18 22:46:03.748843092 +0200 -@@ -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; -@@ -810,9 +811,9 @@ class Stream extends AbstractNonZeroStre - 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 -@@ -882,7 +883,7 @@ class Stream extends AbstractNonZeroStre - // Buffer is empty. Nothing to do. - return false; - } -- buffer.flip(); -+ ((Buffer)buffer).flip(); - int left = buffer.remaining(); - while (left > 0) { - if (streamReservation == 0) { -@@ -913,7 +914,7 @@ class Stream extends AbstractNonZeroStre - left -= connectionReservation; - } - } -- buffer.clear(); -+ ((Buffer)buffer).clear(); - return false; - } - -@@ -974,9 +975,9 @@ class Stream extends AbstractNonZeroStre - 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; - } -@@ -1064,14 +1065,14 @@ class Stream extends AbstractNonZeroStre - 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 { -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/buf/B2CConverter.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/buf/B2CConverter.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/buf/B2CConverter.java 2021-01-28 21:36:28.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/buf/B2CConverter.java 2021-10-18 22:46:03.748843092 +0200 -@@ -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()); - } - } -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/buf/ByteBufferHolder.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/buf/ByteBufferHolder.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/buf/ByteBufferHolder.java 2021-01-28 21:36:28.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/buf/ByteBufferHolder.java 2021-10-18 22:46:03.748843092 +0200 -@@ -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; -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/buf/ByteBufferUtils.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/buf/ByteBufferUtils.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/buf/ByteBufferUtils.java 2021-01-28 21:36:28.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/buf/ByteBufferUtils.java 2021-10-18 22:46:03.748843092 +0200 -@@ -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) { -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/buf/ByteChunk.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/buf/ByteChunk.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/buf/ByteChunk.java 2021-01-28 21:36:28.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/buf/ByteChunk.java 2021-10-18 22:46:03.752843108 +0200 -@@ -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; - } -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/buf/C2BConverter.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/buf/C2BConverter.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/buf/C2BConverter.java 2021-01-28 21:36:28.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/buf/C2BConverter.java 2021-10-18 22:46:03.752843108 +0200 -@@ -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()); - } - } -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/buf/Utf8Decoder.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/buf/Utf8Decoder.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/buf/Utf8Decoder.java 2021-01-28 21:36:28.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/buf/Utf8Decoder.java 2021-10-18 22:46:03.752843108 +0200 -@@ -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; -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/buf/Utf8Encoder.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/buf/Utf8Encoder.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/buf/Utf8Encoder.java 2021-01-28 21:36:28.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/buf/Utf8Encoder.java 2021-10-18 22:46:03.752843108 +0200 -@@ -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; - } -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/AprEndpoint.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/AprEndpoint.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/AprEndpoint.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/AprEndpoint.java 2021-10-18 22:46:03.752843108 +0200 -@@ -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; -@@ -2033,7 +2034,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; - } -@@ -2095,7 +2096,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 + "]"); -@@ -2174,7 +2175,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; -@@ -2297,9 +2298,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 -@@ -2308,13 +2309,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)) { -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/Nio2Endpoint.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/Nio2Endpoint.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/Nio2Endpoint.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/Nio2Endpoint.java 2021-10-18 22:46:03.752843108 +0200 -@@ -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; -@@ -555,7 +556,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 { -@@ -900,7 +901,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 + "]"); -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/NioEndpoint.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/NioEndpoint.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/NioEndpoint.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/NioEndpoint.java 2021-10-18 22:46:03.752843108 +0200 -@@ -24,6 +24,7 @@ import java.net.InetAddress; - import java.net.InetSocketAddress; - import java.net.SocketAddress; - import java.net.SocketTimeoutException; -+import java.nio.Buffer; - import java.nio.ByteBuffer; - import java.nio.channels.CancelledKeyException; - import java.nio.channels.Channel; -@@ -1228,7 +1229,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 + "]"); -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/openssl/OpenSSLEngine.java 2021-10-18 22:46:03.752843108 +0200 -@@ -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 { -@@ -968,7 +969,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() { -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/SecureNio2Channel.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/SecureNio2Channel.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/SecureNio2Channel.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/SecureNio2Channel.java 2021-10-18 22:46:03.756843123 +0200 -@@ -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; -@@ -138,7 +139,7 @@ public class SecureNio2Channel extends N - unwrapBeforeRead = true; - closed = false; - closing = false; -- netInBuffer.clear(); -+ ((Buffer)netInBuffer).clear(); - } - - @Override -@@ -328,7 +329,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) { -@@ -423,9 +424,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")); - } -@@ -456,8 +457,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(); -@@ -481,10 +482,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; -@@ -533,12 +534,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; -@@ -555,7 +556,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()); -@@ -621,7 +622,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 -@@ -629,7 +630,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) { -@@ -731,7 +732,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); -@@ -874,10 +875,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(); -@@ -929,7 +930,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 -@@ -1037,7 +1038,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 -@@ -1157,11 +1158,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(); -@@ -1211,11 +1212,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(); -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/SecureNioChannel.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/SecureNioChannel.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/SecureNioChannel.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/SecureNioChannel.java 2021-10-18 22:46:03.756843123 +0200 -@@ -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; -@@ -100,7 +101,7 @@ public class SecureNioChannel extends Ni - handshakeComplete = false; - closed = false; - closing = false; -- netInBuffer.clear(); -+ ((Buffer)netInBuffer).clear(); - } - - @Override -@@ -320,9 +321,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")); - } -@@ -353,8 +354,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(); -@@ -466,12 +467,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 -@@ -491,7 +492,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 -@@ -505,7 +506,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()); -@@ -557,7 +558,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 -@@ -565,7 +566,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); - -@@ -632,7 +633,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 -@@ -709,7 +710,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 -@@ -817,12 +818,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) { -@@ -854,12 +855,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(); -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/SocketBufferHandler.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/SocketBufferHandler.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/SocketBufferHandler.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/SocketBufferHandler.java 2021-10-18 22:46:03.756843123 +0200 -@@ -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; -@@ -78,13 +79,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; - } -@@ -171,15 +172,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; - } -@@ -210,9 +211,9 @@ public class SocketBufferHandler { - - - public void reset() { -- readBuffer.clear(); -+ ((Buffer)readBuffer).clear(); - readBufferConfiguredForWrite = true; -- writeBuffer.clear(); -+ ((Buffer)writeBuffer).clear(); - writeBufferConfiguredForWrite = true; - } - -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/SocketWrapperBase.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/SocketWrapperBase.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/SocketWrapperBase.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/SocketWrapperBase.java 2021-10-18 22:46:03.756843123 +0200 -@@ -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; -@@ -1502,9 +1503,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; - } -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/TLSClientHelloExtractor.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/TLSClientHelloExtractor.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/TLSClientHelloExtractor.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/TLSClientHelloExtractor.java 2021-10-18 22:46:03.756843123 +0200 -@@ -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; -@@ -83,7 +84,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. -@@ -186,8 +187,8 @@ public class TLSClientHelloExtractor { - this.sniValue = sniValue; - this.clientRequestedProtocols = clientRequestedProtocols; - // Whatever happens, return the buffer to its original state -- netInBuffer.limit(limit); -- netInBuffer.position(pos); -+ ((Buffer)netInBuffer).limit(limit); -+ ((Buffer)netInBuffer).position(pos); - } - } - -@@ -259,7 +260,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; -@@ -287,7 +288,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 { -@@ -368,7 +369,7 @@ public class TLSClientHelloExtractor { - - - private static void skipBytes(ByteBuffer bb, int size) { -- bb.position(bb.position() + size); -+ ((Buffer)bb).position(bb.position() + size); - } - - -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/WriteBuffer.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/WriteBuffer.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/util/net/WriteBuffer.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/util/net/WriteBuffer.java 2021-10-18 22:46:03.756843123 +0200 -@@ -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; -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/AsyncChannelWrapperSecure.java 2021-10-18 22:46:03.756843123 +0200 -@@ -19,6 +19,7 @@ package org.apache.tomcat.websocket; - import java.io.EOFException; - import java.io.IOException; - import java.net.SocketAddress; -+import java.nio.Buffer; - import java.nio.ByteBuffer; - import java.nio.channels.AsynchronousSocketChannel; - import java.nio.channels.CompletionHandler; -@@ -196,7 +197,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); -@@ -222,7 +223,7 @@ public class AsyncChannelWrapperSecure i - } - } - -- socketWriteBuffer.flip(); -+ ((Buffer)socketWriteBuffer).flip(); - - // Do the write - int toWrite = r.bytesProduced(); -@@ -279,7 +280,7 @@ public class AsyncChannelWrapperSecure i - } - } - -- socketReadBuffer.flip(); -+ ((Buffer)socketReadBuffer).flip(); - - if (socketReadBuffer.hasRemaining()) { - // Decrypt the data in the buffer -@@ -365,7 +366,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; -@@ -375,11 +376,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 fWrite = - socketChannel.write(socketWriteBuffer); - fWrite.get(); -@@ -393,7 +394,7 @@ public class AsyncChannelWrapperSecure i - socketChannel.read(socketReadBuffer); - fRead.get(); - } -- socketReadBuffer.flip(); -+ ((Buffer)socketReadBuffer).flip(); - SSLEngineResult r = - sslEngine.unwrap(socketReadBuffer, DUMMY); - checkResult(r, false); -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/PerMessageDeflate.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/PerMessageDeflate.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/PerMessageDeflate.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/PerMessageDeflate.java 2021-10-18 22:46:03.756843123 +0200 -@@ -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, -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/server/WsFrameServer.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/server/WsFrameServer.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/server/WsFrameServer.java 2021-01-28 21:36:31.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/server/WsFrameServer.java 2021-10-18 22:46:03.756843123 +0200 -@@ -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.coyote.http11.upgrade.UpgradeInfo; - import org.apache.juli.logging.Log; -@@ -70,10 +71,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) { -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/WsFrameBase.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/WsFrameBase.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/WsFrameBase.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/WsFrameBase.java 2021-10-18 22:46:03.756843123 +0200 -@@ -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,7 +258,7 @@ 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); -@@ -268,7 +269,7 @@ public abstract class WsFrameBase { - throw new WsIOException( - new CloseReason(CloseCodes.PROTOCOL_ERROR, sm.getString("wsFrame.payloadMsbInvalid"))); - } -- inputBuffer.position(inputBuffer.position() + 8); -+ ((Buffer)inputBuffer).position(inputBuffer.position() + 8); - } - if (Util.isControl(opCode)) { - if (payloadLength > 125) { -@@ -333,13 +334,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, -@@ -351,8 +352,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"))); -@@ -360,7 +361,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(); - } - } -@@ -377,17 +378,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; - } -@@ -417,7 +418,7 @@ public abstract class WsFrameBase { - } catch (Throwable t) { - handleThrowableOnSend(t); - } finally { -- messageBufferText.clear(); -+ ((Buffer)messageBufferText).clear(); - } - } - -@@ -428,7 +429,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); -@@ -439,9 +440,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, -@@ -468,7 +469,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 -@@ -482,9 +483,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, -@@ -497,9 +498,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(); -@@ -511,7 +512,7 @@ public abstract class WsFrameBase { - } - } else { - // End of message -- messageBufferText.flip(); -+ ((Buffer)messageBufferText).flip(); - sendMessageText(true); - - newMessage(); -@@ -539,12 +540,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); - } -@@ -554,12 +555,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) { -@@ -608,8 +609,8 @@ public abstract class WsFrameBase { - - - private void newMessage() { -- messageBufferBinary.clear(); -- messageBufferText.clear(); -+ ((Buffer)messageBufferBinary).clear(); -+ ((Buffer)messageBufferText).clear(); - utf8DecoderMessage.reset(); - continuationExpected = false; - newFrame(); -@@ -618,7 +619,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; -@@ -651,7 +652,7 @@ public abstract class WsFrameBase { - - private void makeRoom() { - inputBuffer.compact(); -- inputBuffer.flip(); -+ ((Buffer)inputBuffer).flip(); - } - - -@@ -669,7 +670,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) { -@@ -965,9 +966,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) { -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/WsFrameClient.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/WsFrameClient.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/WsFrameClient.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/WsFrameClient.java 2021-10-18 22:46:03.760843139 +0200 -@@ -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); - } - -@@ -172,7 +173,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); -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java 2021-10-18 22:46:03.760843139 +0200 -@@ -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; -@@ -241,13 +242,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); -@@ -330,7 +331,7 @@ public abstract class WsRemoteEndpointIm - } - - if (payload != null) { -- payload.clear(); -+ ((Buffer)payload).clear(); - } - - endMessage(null, null); -@@ -442,7 +443,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); -@@ -492,10 +493,10 @@ public abstract class WsRemoteEndpointIm - } - - int payloadSize = mp.getPayload().remaining(); -- 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 -@@ -822,13 +823,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); - } -@@ -889,7 +890,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; - } -@@ -903,7 +904,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) { -@@ -921,15 +922,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 { -@@ -947,7 +948,7 @@ public abstract class WsRemoteEndpointIm - if (outputBuffer.hasRemaining()) { - endpoint.doWrite(this, blockingWriteTimeoutExpiry, outputBuffer); - } else { -- outputBuffer.clear(); -+ ((Buffer)outputBuffer).clear(); - write(); - } - } else { -@@ -973,7 +974,7 @@ public abstract class WsRemoteEndpointIm - @Override - public void onResult(SendResult result) { - if (result.isOK()) { -- outputBuffer.clear(); -+ ((Buffer)outputBuffer).clear(); - } - handler.onResult(result); - } -@@ -1066,11 +1067,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(); - } - } - -@@ -1145,9 +1146,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); - } -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/WsSession.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/WsSession.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/WsSession.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/WsSession.java 2021-10-18 22:46:03.760843139 +0200 -@@ -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; -@@ -608,7 +609,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) { -diff -Napur apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/WsWebSocketContainer.java apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/WsWebSocketContainer.java ---- apache-tomcat-9.0.43-src.orig/java/org/apache/tomcat/websocket/WsWebSocketContainer.java 2021-01-28 21:36:30.000000000 +0100 -+++ apache-tomcat-9.0.43-src/java/org/apache/tomcat/websocket/WsWebSocketContainer.java 2021-10-18 22:46:03.760843139 +0200 -@@ -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; -@@ -753,7 +754,7 @@ public class WsWebSocketContainer implem - // Terminating CRLF - result.put(CRLF); - -- result.flip(); -+ ((Buffer)result).flip(); - - return result; - } -@@ -782,7 +783,7 @@ public class WsWebSocketContainer implem - newSize = input.capacity() * 2; - } - ByteBuffer expanded = ByteBuffer.allocate(newSize); -- input.flip(); -+ ((Buffer)input).flip(); - expanded.put(input); - input = expanded; - } -@@ -811,7 +812,7 @@ 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 read = channel.read(response); - Integer bytesRead; -@@ -826,7 +827,7 @@ public class WsWebSocketContainer implem - if (bytesRead.intValue() == -1) { - throw new EOFException(sm.getString("wsWebSocketContainer.responseFail", Integer.toString(status), headers)); - } -- response.flip(); -+ ((Buffer)response).flip(); - while (response.hasRemaining() && !readHeaders) { - if (line == null) { - line = readLine(response); -diff -Napur apache-tomcat-9.0.43-src.orig/test/org/apache/coyote/http11/upgrade/TestUpgradeInternalHandler.java apache-tomcat-9.0.43-src/test/org/apache/coyote/http11/upgrade/TestUpgradeInternalHandler.java ---- apache-tomcat-9.0.43-src.orig/test/org/apache/coyote/http11/upgrade/TestUpgradeInternalHandler.java 2021-01-28 21:36:33.000000000 +0100 -+++ apache-tomcat-9.0.43-src/test/org/apache/coyote/http11/upgrade/TestUpgradeInternalHandler.java 2021-10-18 22:46:03.760843139 +0200 -@@ -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() { - @Override - public void completed(Long result, Void attachment) { -diff -Napur apache-tomcat-9.0.43-src.orig/test/org/apache/coyote/http2/Http2TestBase.java apache-tomcat-9.0.43-src/test/org/apache/coyote/http2/Http2TestBase.java ---- apache-tomcat-9.0.43-src.orig/test/org/apache/coyote/http2/Http2TestBase.java 2021-01-28 21:36:33.000000000 +0100 -+++ apache-tomcat-9.0.43-src/test/org/apache/coyote/http2/Http2TestBase.java 2021-10-18 22:46:03.760843139 +0200 -@@ -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(); -@@ -1032,7 +1033,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()); - } -diff -Napur apache-tomcat-9.0.43-src.orig/test/org/apache/coyote/http2/TestHpack.java apache-tomcat-9.0.43-src/test/org/apache/coyote/http2/TestHpack.java ---- apache-tomcat-9.0.43-src.orig/test/org/apache/coyote/http2/TestHpack.java 2021-01-28 21:36:33.000000000 +0100 -+++ apache-tomcat-9.0.43-src/test/org/apache/coyote/http2/TestHpack.java 2021-10-18 22:46:03.760843139 +0200 -@@ -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)); -diff -Napur apache-tomcat-9.0.43-src.orig/test/org/apache/coyote/http2/TestHttp2Limits.java apache-tomcat-9.0.43-src/test/org/apache/coyote/http2/TestHttp2Limits.java ---- apache-tomcat-9.0.43-src.orig/test/org/apache/coyote/http2/TestHttp2Limits.java 2021-01-28 21:36:33.000000000 +0100 -+++ apache-tomcat-9.0.43-src/test/org/apache/coyote/http2/TestHttp2Limits.java 2021-10-18 22:46:03.764843154 +0200 -@@ -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; -@@ -324,7 +325,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() + "]"); - } -diff -Napur apache-tomcat-9.0.43-src.orig/test/org/apache/coyote/http2/TestHttp2Section_8_1.java apache-tomcat-9.0.43-src/test/org/apache/coyote/http2/TestHttp2Section_8_1.java ---- apache-tomcat-9.0.43-src.orig/test/org/apache/coyote/http2/TestHttp2Section_8_1.java 2021-01-28 21:36:33.000000000 +0100 -+++ apache-tomcat-9.0.43-src/test/org/apache/coyote/http2/TestHttp2Section_8_1.java 2021-10-18 22:46:03.764843154 +0200 -@@ -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; -@@ -225,7 +226,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); - -diff -Napur apache-tomcat-9.0.43-src.orig/test/org/apache/tomcat/util/buf/TestUtf8.java apache-tomcat-9.0.43-src/test/org/apache/tomcat/util/buf/TestUtf8.java ---- apache-tomcat-9.0.43-src.orig/test/org/apache/tomcat/util/buf/TestUtf8.java 2021-01-28 21:36:34.000000000 +0100 -+++ apache-tomcat-9.0.43-src/test/org/apache/tomcat/util/buf/TestUtf8.java 2021-10-18 22:46:03.764843154 +0200 -@@ -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) { -diff -Napur apache-tomcat-9.0.43-src.orig/test/org/apache/tomcat/websocket/pojo/TestEncodingDecoding.java apache-tomcat-9.0.43-src/test/org/apache/tomcat/websocket/pojo/TestEncodingDecoding.java ---- apache-tomcat-9.0.43-src.orig/test/org/apache/tomcat/websocket/pojo/TestEncodingDecoding.java 2021-01-28 21:36:34.000000000 +0100 -+++ apache-tomcat-9.0.43-src/test/org/apache/tomcat/websocket/pojo/TestEncodingDecoding.java 2021-10-18 22:46:03.764843154 +0200 -@@ -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; -@@ -606,7 +607,7 @@ public class TestEncodingDecoding extend - reply.put((byte) 0x12); - reply.put((byte) 0x34); - reply.put(data); -- reply.flip(); -+ ((Buffer)reply).flip(); - return reply; - } - } +--- apache-tomcat-9.0.43-src/build.xml 2022-07-05 21:42:13.038838402 +0200 ++++ apache-tomcat-9.0.43-src/build.xml 2022-07-05 23:04:10.506328581 +0200 +@@ -957,6 +957,7 @@ + deprecation="${compile.deprecation}" + source="${compile.source}" + target="${compile.target}" ++ release="${compile.release}" + encoding="ISO-8859-1" + includeAntRuntime="true" > + + + ++ ++ ++ ++ ++ ++ ++ + + + diff --git a/tomcat.changes b/tomcat.changes index 186a689..2403692 100644 --- a/tomcat.changes +++ b/tomcat.changes @@ -1,3 +1,14 @@ +------------------------------------------------------------------- +Thu Jul 7 15:35:34 UTC 2022 - Fridrich Strba + +- Fix bsc#1201081 by building with release=8 all files that can be + built this way. The one file remaining, build it with source=8 and + target=8 +- Modified patch: + * tomcat-9.0.43-java8compat.patch + + Do not cast ByteBuffer to Buffer to call the Java 8 compatible + methods. Build with release=8 instead + ------------------------------------------------------------------- Thu Apr 7 08:48:46 UTC 2022 - Michele Bussolotto