You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by lg...@apache.org on 2022/02/08 16:37:36 UTC

[mina-sshd] 01/05: [SSHD-1244] Fixed channel window adjustment handling of large UINT32 values

This is an automated email from the ASF dual-hosted git repository.

lgoldstein pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mina-sshd.git

commit a9f87e9dd91df8d993f3346336de2cfd6fb3e088
Author: Lyor Goldstein <lg...@apache.org>
AuthorDate: Fri Feb 4 08:09:16 2022 +0200

    [SSHD-1244] Fixed channel window adjustment handling of large UINT32 values
---
 CHANGES.md                                         |  2 ++
 pom.xml                                            |  1 +
 .../sshd/common/kex/extension/KexExtensions.java   |  2 +-
 .../kex/extension/parser/DelayCompression.java     |  2 +-
 .../signature/AbstractSecurityKeySignature.java    |  2 +-
 .../org/apache/sshd/common/util/buffer/Buffer.java | 17 ++++++++++----
 .../sshd/common/util/buffer/BufferUtils.java       |  4 ++--
 .../sshd/common/util/buffer/ByteArrayBuffer.java   |  2 +-
 .../apache/sshd/agent/SshAgentKeyConstraint.java   |  2 +-
 .../sshd/agent/common/AbstractAgentClient.java     | 10 ++++----
 .../sshd/agent/common/AbstractAgentProxy.java      |  4 ++--
 .../org/apache/sshd/agent/unix/AgentClient.java    |  2 +-
 .../auth/keyboard/UserAuthKeyboardInteractive.java |  2 +-
 .../client/channel/PtyCapableChannelSession.java   |  2 +-
 .../sshd/common/channel/AbstractChannel.java       |  4 ++--
 .../common/channel/ChannelAsyncOutputStream.java   |  2 +-
 .../sshd/common/channel/ChannelOutputStream.java   |  2 +-
 .../org/apache/sshd/common/channel/Window.java     |  8 +++----
 .../sshd/common/forward/DefaultForwarder.java      |  4 ++--
 .../common/session/helpers/AbstractSession.java    |  6 ++---
 .../org/apache/sshd/core/CoreModuleProperties.java | 10 +++++---
 .../server/auth/hostbased/UserAuthHostBased.java   |  2 +-
 .../server/auth/keyboard/InteractiveChallenge.java |  2 +-
 .../server/global/CancelTcpipForwardHandler.java   |  2 +-
 .../sshd/server/global/TcpipForwardHandler.java    |  2 +-
 .../session/helpers/AbstractSessionTest.java       |  6 ++---
 .../deprecated/UserAuthKeyboardInteractive.java    |  2 +-
 .../sshd/server/channel/ChannelSessionTest.java    | 27 +++++++++++++++++++++-
 .../helpers/AbstractCheckFileExtension.java        |  2 +-
 .../sshd/sftp/client/impl/AbstractSftpClient.java  |  4 ++--
 .../sshd/sftp/client/impl/DefaultSftpClient.java   | 10 ++++----
 .../sftp/client/impl/SftpInputStreamAsync.java     |  3 ++-
 .../sftp/client/impl/SftpOutputStreamAsync.java    |  2 +-
 .../org/apache/sshd/sftp/common/SftpHelper.java    |  6 ++---
 .../extensions/SpaceAvailableExtensionInfo.java    |  2 +-
 .../sftp/server/AbstractSftpSubsystemHelper.java   | 22 +++++++++---------
 .../org/apache/sshd/sftp/server/SftpSubsystem.java |  4 ++--
 .../client/impl/SftpRemotePathChannelTest.java     |  2 +-
 38 files changed, 115 insertions(+), 75 deletions(-)

diff --git a/CHANGES.md b/CHANGES.md
index c884827..9063114 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -40,5 +40,7 @@ this value (though the choice of 256KB should be compatible with the vast majori
 
 * [SSHD-1231](https://issues.apache.org/jira/browse/SSHD-1231) Public key authentication: wrong signature algorithm used (ed25519 key with ssh-rsa signature)
 * [SSHD-1233](https://issues.apache.org/jira/browse/SSHD-1233) Added support for "limits@openssh.com" SFTP extension
+* [SSHD-1244](https://issues.apache.org/jira/browse/SSHD-1244) Fixed channel window adjustment handling of large UINT32 values
+
 
 
diff --git a/pom.xml b/pom.xml
index 1ec30dc..7e66769 100644
--- a/pom.xml
+++ b/pom.xml
@@ -111,6 +111,7 @@
         <slf4j.version>1.7.32</slf4j.version>
         <logback.version>1.2.9</logback.version>
         <spring.version>5.3.14</spring.version>
+            <!-- NOTE: upgrading to 6.x requires Java 11 -->
         <jgit.version>5.13.0.202109080827-r</jgit.version>
         <junit.version>4.13.2</junit.version>
         <bytebuddy.version>1.12.6</bytebuddy.version>
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/KexExtensions.java b/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/KexExtensions.java
index bc21f2e..af82982 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/KexExtensions.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/KexExtensions.java
@@ -172,7 +172,7 @@ public final class KexExtensions {
      */
     public static void putExtensions(Collection<? extends Map.Entry<String, ?>> exts, Buffer buffer) throws IOException {
         int count = GenericUtils.size(exts);
-        buffer.putInt(count);
+        buffer.putUInt(count);
         if (count <= 0) {
             return;
         }
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/DelayCompression.java b/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/DelayCompression.java
index 96a0c31..d09a654 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/DelayCompression.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/DelayCompression.java
@@ -48,7 +48,7 @@ public class DelayCompression extends AbstractKexExtensionParser<DelayedCompress
     @Override
     protected void encode(DelayedCompressionAlgorithms algos, Buffer buffer) throws IOException {
         int lenPos = buffer.wpos();
-        buffer.putInt(0); // total length placeholder
+        buffer.putUInt(0L); // total length placeholder
         buffer.putNameList(algos.getClient2Server());
         buffer.putNameList(algos.getServer2Client());
         BufferUtils.updateLengthPlaceholder(buffer, lenPos);
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/signature/AbstractSecurityKeySignature.java b/sshd-common/src/main/java/org/apache/sshd/common/signature/AbstractSecurityKeySignature.java
index 66bebb2..f27ce1b 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/signature/AbstractSecurityKeySignature.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/signature/AbstractSecurityKeySignature.java
@@ -94,7 +94,7 @@ public abstract class AbstractSecurityKeySignature implements Signature {
         byte[] appNameDigest = md.digest(publicKey.getAppName().getBytes(StandardCharsets.UTF_8));
         byte[] challengeDigest = this.challengeDigest.digest();
         ByteArrayBuffer counterData = new ByteArrayBuffer(Integer.BYTES, false);
-        counterData.putInt(counter);
+        counterData.putUInt(counter);
 
         Signature delegate = getDelegateSignature();
         delegate.initVerifier(session, publicKey.getDelegatePublicKey());
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/buffer/Buffer.java b/sshd-common/src/main/java/org/apache/sshd/common/util/buffer/Buffer.java
index 4c30537..c7c9df5 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/buffer/Buffer.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/buffer/Buffer.java
@@ -704,7 +704,14 @@ public abstract class Buffer implements Readable {
      * @param i The 32-bit value
      */
     public void putInt(long i) {
-        BufferUtils.validateInt32Value(i, "Invalid 32-bit value: %d");
+        BufferUtils.validateInt32Value(i, "Invalid INT32 value: %d");
+        ensureCapacity(Integer.BYTES);
+        BufferUtils.putUInt(i, workBuf, 0, Integer.BYTES);
+        putRawBytes(workBuf, 0, Integer.BYTES);
+    }
+
+    public void putUInt(long i) {
+        BufferUtils.validateUint32Value(i, "Invalid UINT32 value: %d");
         ensureCapacity(Integer.BYTES);
         BufferUtils.putUInt(i, workBuf, 0, Integer.BYTES);
         putRawBytes(workBuf, 0, Integer.BYTES);
@@ -755,7 +762,7 @@ public abstract class Buffer implements Readable {
     }
 
     public void putBytes(byte[] b, int off, int len) {
-        putInt(len);
+        putUInt(len);
         putRawBytes(b, off, len);
     }
 
@@ -783,7 +790,7 @@ public abstract class Buffer implements Readable {
     public void putStringList(Collection<?> objects, Charset charset, boolean prependLength) {
         int numObjects = GenericUtils.size(objects);
         if (prependLength) {
-            putInt(numObjects);
+            putUInt(numObjects);
         }
 
         if (numObjects <= 0) {
@@ -933,7 +940,7 @@ public abstract class Buffer implements Readable {
 
     public void putMPInt(byte[] mpInt) {
         if ((mpInt[0] & 0x80) != 0) {
-            putInt(mpInt.length + 1 /* padding */);
+            putUInt(mpInt.length + 1 /* padding */);
             putByte((byte) 0);
         } else {
             putInt(mpInt.length);
@@ -949,7 +956,7 @@ public abstract class Buffer implements Readable {
 
     public void putPublicKey(PublicKey key) {
         int ow = wpos();
-        putInt(0);
+        putUInt(0L);
         int ow1 = wpos();
         putRawPublicKey(key);
         int ow2 = wpos();
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/buffer/BufferUtils.java b/sshd-common/src/main/java/org/apache/sshd/common/util/buffer/BufferUtils.java
index 2ee33a8..beaf150 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/buffer/BufferUtils.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/buffer/BufferUtils.java
@@ -644,7 +644,7 @@ public final class BufferUtils {
         // NOTE: although data length is defined as UINT32, we do not expected sizes above Integer.MAX_VALUE
         ValidateUtils.checkTrue(dataLength >= 0, "Illegal data length: %d", dataLength);
         buffer.wpos(lenPos);
-        buffer.putInt(dataLength);
+        buffer.putUInt(dataLength);
         buffer.wpos(endPos);
         return dataLength;
     }
@@ -661,7 +661,7 @@ public final class BufferUtils {
     public static void updateLengthPlaceholder(Buffer buffer, int lenPos, int dataLength) {
         int curPos = buffer.wpos();
         buffer.wpos(lenPos);
-        buffer.putInt(dataLength);
+        buffer.putUInt(dataLength);
         buffer.wpos(curPos);
     }
 
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/util/buffer/ByteArrayBuffer.java b/sshd-common/src/main/java/org/apache/sshd/common/util/buffer/ByteArrayBuffer.java
index 04085ed..3efa761 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/util/buffer/ByteArrayBuffer.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/util/buffer/ByteArrayBuffer.java
@@ -220,7 +220,7 @@ public class ByteArrayBuffer extends Buffer {
     public void putBuffer(ByteBuffer buffer) {
         int required = buffer.remaining();
         ensureCapacity(required + Integer.SIZE);
-        putInt(required);
+        putUInt(required);
         buffer.get(data, wpos, required);
         wpos += required;
     }
diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/SshAgentKeyConstraint.java b/sshd-core/src/main/java/org/apache/sshd/agent/SshAgentKeyConstraint.java
index 20bafea..c5f5c57 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/SshAgentKeyConstraint.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/SshAgentKeyConstraint.java
@@ -96,7 +96,7 @@ public abstract class SshAgentKeyConstraint {
         @Override
         public void put(Buffer buffer) {
             super.put(buffer);
-            buffer.putInt(secondsToLive);
+            buffer.putUInt(secondsToLive);
         }
     }
 
diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentClient.java b/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentClient.java
index 520068c..970c86e 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentClient.java
@@ -71,7 +71,7 @@ public abstract class AbstractAgentClient extends AbstractLoggingBean {
         }
 
         Buffer rep = new ByteArrayBuffer();
-        rep.putInt(0);
+        rep.putUInt(0L);
         rep.rpos(rep.wpos());
 
         Buffer req = new ByteArrayBuffer(buffer.getBytes());
@@ -83,9 +83,9 @@ public abstract class AbstractAgentClient extends AbstractLoggingBean {
             debug("Failed ({}) to handle command={}: {}",
                     e.getClass().getSimpleName(), cmd, e.getMessage(), e);
             rep.clear();
-            rep.putInt(0);
+            rep.putUInt(0L);
             rep.rpos(rep.wpos());
-            rep.putInt(1);
+            rep.putUInt(1L);
             rep.putByte(SshAgentConstants.SSH2_AGENT_FAILURE);
         }
         reply(prepare(rep));
@@ -111,7 +111,7 @@ public abstract class AbstractAgentClient extends AbstractLoggingBean {
                 }
 
                 rep.putByte(SshAgentConstants.SSH2_AGENT_IDENTITIES_ANSWER);
-                rep.putInt(keys.size());
+                rep.putUInt(keys.size());
                 for (Map.Entry<PublicKey, String> key : keys) {
                     rep.putPublicKey(key.getKey());
                     rep.putString(key.getValue());
@@ -178,7 +178,7 @@ public abstract class AbstractAgentClient extends AbstractLoggingBean {
         int wpos = buf.wpos();
         buf.rpos(rpos - 4);
         buf.wpos(rpos - 4);
-        buf.putInt(len);
+        buf.putUInt(len);
         buf.wpos(wpos);
         return buf;
     }
diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentProxy.java b/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentProxy.java
index 428d07a..a0fa391 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentProxy.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/common/AbstractAgentProxy.java
@@ -253,7 +253,7 @@ public abstract class AbstractAgentProxy extends AbstractLoggingBean implements
 
     protected Buffer createBuffer(byte cmd, int extraLen) {
         Buffer buffer = new ByteArrayBuffer((extraLen <= 0) ? ByteArrayBuffer.DEFAULT_SIZE : extraLen + Byte.SIZE, false);
-        buffer.putInt(0);
+        buffer.putUInt(0L);
         buffer.putByte(cmd);
         return buffer;
     }
@@ -261,7 +261,7 @@ public abstract class AbstractAgentProxy extends AbstractLoggingBean implements
     protected Buffer prepare(Buffer buffer) {
         int wpos = buffer.wpos();
         buffer.wpos(0);
-        buffer.putInt(wpos - 4);
+        buffer.putUInt(wpos - 4);
         buffer.wpos(wpos);
         return buffer;
     }
diff --git a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentClient.java b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentClient.java
index ab0966a..7d9ac35 100644
--- a/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentClient.java
+++ b/sshd-core/src/main/java/org/apache/sshd/agent/unix/AgentClient.java
@@ -195,7 +195,7 @@ public class AgentClient extends AbstractAgentProxy implements Runnable, Factory
     protected synchronized Buffer request(Buffer buffer) throws IOException {
         int wpos = buffer.wpos();
         buffer.wpos(0);
-        buffer.putInt(wpos - 4);
+        buffer.putUInt(wpos - 4);
         buffer.wpos(wpos);
         synchronized (messages) {
             int result = Socket.send(handle, buffer.array(), buffer.rpos(), buffer.available());
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/auth/keyboard/UserAuthKeyboardInteractive.java b/sshd-core/src/main/java/org/apache/sshd/client/auth/keyboard/UserAuthKeyboardInteractive.java
index ccb942a..412c894 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/auth/keyboard/UserAuthKeyboardInteractive.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/auth/keyboard/UserAuthKeyboardInteractive.java
@@ -174,7 +174,7 @@ public class UserAuthKeyboardInteractive extends AbstractUserAuth {
         int numResponses = rep.length;
         buffer = session.createBuffer(
                 SshConstants.SSH_MSG_USERAUTH_INFO_RESPONSE, numResponses * Long.SIZE + Byte.SIZE);
-        buffer.putInt(numResponses);
+        buffer.putUInt(numResponses);
         for (int index = 0; index < numResponses; index++) {
             String r = rep[index];
             if (traceEnabled) {
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/channel/PtyCapableChannelSession.java b/sshd-core/src/main/java/org/apache/sshd/client/channel/PtyCapableChannelSession.java
index 88f8f03..214a6d9 100644
--- a/sshd-core/src/main/java/org/apache/sshd/client/channel/PtyCapableChannelSession.java
+++ b/sshd-core/src/main/java/org/apache/sshd/client/channel/PtyCapableChannelSession.java
@@ -281,7 +281,7 @@ public class PtyCapableChannelSession extends ChannelSession implements PtyChann
             if (numModes > 0) {
                 ptyModes.forEach((mode, value) -> {
                     modes.putByte((byte) mode.toInt());
-                    modes.putInt(value.longValue());
+                    modes.putUInt(value.longValue());
                 });
             }
             modes.putByte(PtyMode.TTY_OP_END);
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
index 1bf627e..69c6d24 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/AbstractChannel.java
@@ -885,7 +885,7 @@ public abstract class AbstractChannel extends AbstractInnerCloseable implements
 
     @Override
     public void handleWindowAdjust(Buffer buffer) throws IOException {
-        int window = buffer.getInt();
+        long window = buffer.getUInt();
         if (log.isDebugEnabled()) {
             log.debug("handleWindowAdjust({}) SSH_MSG_CHANNEL_WINDOW_ADJUST window={}", this, window);
         }
@@ -1013,7 +1013,7 @@ public abstract class AbstractChannel extends AbstractInnerCloseable implements
         Session s = getSession();
         Buffer buffer = s.createBuffer(SshConstants.SSH_MSG_CHANNEL_WINDOW_ADJUST, Short.SIZE);
         buffer.putInt(getRecipient());
-        buffer.putInt(len);
+        buffer.putUInt(len);
         writePacket(buffer);
     }
 
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncOutputStream.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncOutputStream.java
index 84fbf34..81844a6 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncOutputStream.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelAsyncOutputStream.java
@@ -261,7 +261,7 @@ public class ChannelAsyncOutputStream extends AbstractCloseable implements IoOut
         if (cmd == SshConstants.SSH_MSG_CHANNEL_EXTENDED_DATA) {
             buf.putInt(SshConstants.SSH_EXTENDED_DATA_STDERR);
         }
-        buf.putInt(length);
+        buf.putUInt(length);
         buf.putRawBytes(buffer.array(), buffer.rpos(), (int) length);
         buffer.rpos(buffer.rpos() + (int) length);
         return buf;
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelOutputStream.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelOutputStream.java
index 2937c7d..ec08f8a 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelOutputStream.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/ChannelOutputStream.java
@@ -230,7 +230,7 @@ public class ChannelOutputStream extends OutputStream implements java.nio.channe
 
                 int pos = buf.wpos();
                 buf.wpos((cmd == SshConstants.SSH_MSG_CHANNEL_EXTENDED_DATA) ? 14 : 10);
-                buf.putInt(length);
+                buf.putUInt(length);
                 buf.wpos(buf.wpos() + (int) length);
                 if (total == length) {
                     newBuffer((int) length);
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java b/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java
index 9b175c6..2bb3d8b 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/channel/Window.java
@@ -119,8 +119,8 @@ public class Window extends AbstractLoggingBean implements java.nio.channels.Cha
         }
     }
 
-    public void expand(int window) {
-        ValidateUtils.checkTrue(window >= 0, "Negative window size: %d", window);
+    public void expand(long window) {
+        BufferUtils.validateUint32Value(window, "Invalid expansion window size: %d");
         checkInitialized("expand");
 
         long expandedSize;
@@ -128,8 +128,8 @@ public class Window extends AbstractLoggingBean implements java.nio.channels.Cha
             /*
              * See RFC-4254 section 5.2:
              *
-             * "Implementations MUST correctly handle window sizes of up to 2^32 - 1 bytes. The window MUST NOT be
-             * increased above 2^32 - 1 bytes.
+             * "Implementations MUST correctly handle window sizes of up to 2^32 - 1 bytes.
+             * The window MUST NOT be increased above 2^32 - 1 bytes.
              */
             expandedSize = size + window;
             if (expandedSize > BufferUtils.MAX_UINT32_VALUE) {
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultForwarder.java b/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultForwarder.java
index 1c25ec1..df46433 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultForwarder.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/forward/DefaultForwarder.java
@@ -292,7 +292,7 @@ public class DefaultForwarder
         buffer.putString("tcpip-forward");
         buffer.putBoolean(true); // want reply
         buffer.putString(remoteHost);
-        buffer.putInt(remotePort);
+        buffer.putUInt(remotePort);
 
         Duration timeout = CoreModuleProperties.FORWARD_REQUEST_TIMEOUT.getRequired(session);
         Buffer result;
@@ -358,7 +358,7 @@ public class DefaultForwarder
             buffer.putString("cancel-tcpip-forward");
             buffer.putBoolean(false); // want reply
             buffer.putString(remoteHost);
-            buffer.putInt(port);
+            buffer.putUInt(port);
 
             signalTearingDownExplicitTunnel(bound, false, remote);
             try {
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSession.java b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSession.java
index 08e5d7e..17023d7 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSession.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/session/helpers/AbstractSession.java
@@ -1013,7 +1013,7 @@ public abstract class AbstractSession extends SessionHelper {
         int ignoreDataLen = resolveIgnoreBufferDataLength();
         if (ignoreDataLen > 0) {
             ignoreBuf = createBuffer(SshConstants.SSH_MSG_IGNORE, ignoreDataLen + Byte.SIZE);
-            ignoreBuf.putInt(ignoreDataLen);
+            ignoreBuf.putUInt(ignoreDataLen);
 
             int wpos = ignoreBuf.wpos();
             synchronized (random) {
@@ -1315,7 +1315,7 @@ public abstract class AbstractSession extends SessionHelper {
 
             // Write 5 header bytes
             buffer.wpos(off);
-            buffer.putInt(len);
+            buffer.putUInt(len);
             buffer.putByte((byte) pad);
             // Make sure enough room for padding and then fill it
             buffer.wpos(off + oldLen + SshConstants.SSH_PACKET_HEADER_LEN + pad);
@@ -1600,7 +1600,7 @@ public abstract class AbstractSession extends SessionHelper {
         }
 
         buffer.putBoolean(false); // first kex packet follows
-        buffer.putInt(0); // reserved (FFU)
+        buffer.putUInt(0L); // reserved (FFU)
 
         ReservedSessionMessagesHandler handler = getReservedSessionMessagesHandler();
         IoWriteFuture future = (handler == null) ? null : handler.sendKexInitRequest(this, proposal, buffer);
diff --git a/sshd-core/src/main/java/org/apache/sshd/core/CoreModuleProperties.java b/sshd-core/src/main/java/org/apache/sshd/core/CoreModuleProperties.java
index 71cb4f8..efa7d5f 100644
--- a/sshd-core/src/main/java/org/apache/sshd/core/CoreModuleProperties.java
+++ b/sshd-core/src/main/java/org/apache/sshd/core/CoreModuleProperties.java
@@ -265,11 +265,13 @@ public final class CoreModuleProperties {
     public static final Property<Integer> PROP_DHGEX_CLIENT_PRF_KEY
             = Property.integer("dhgex-client-prf");
 
+    public static final long DEFAULT_WINDOW_SIZE = 0x200000L;
+
     /**
      * Key used to retrieve the value of the channel window size in the configuration properties map.
      */
     public static final Property<Long> WINDOW_SIZE
-            = Property.long_("window-size", 0x200000L);
+            = Property.long_("window-size", DEFAULT_WINDOW_SIZE);
 
     /**
      * Key used to retrieve timeout (msec.) to wait for data to become available when reading from a channel. If not set
@@ -296,17 +298,19 @@ public final class CoreModuleProperties {
     public static final Property<Duration> BUFFERED_IO_OUTPUT_MAX_PENDING_WRITE_WAIT
             = Property.duration("buffered-io-output-max-pending-write-wait", Duration.ofSeconds(30L));
 
+    public static final long DEFAULT_MAX_PACKET_SIZE = 0x8000L;
     /**
      * Key used to retrieve the value of the maximum packet size in the configuration properties map.
      */
     public static final Property<Long> MAX_PACKET_SIZE
-            = Property.long_("packet-size", 0x8000L);
+            = Property.long_("packet-size", DEFAULT_MAX_PACKET_SIZE);
 
+    public static final long DEFAULT_LIMIT_PACKET_SIZE = Integer.MAX_VALUE / 4L;
     /**
      * A safety value that is designed to avoid an attack that uses large channel packet sizes
      */
     public static final Property<Long> LIMIT_PACKET_SIZE
-            = Property.long_("max-packet-size", Integer.MAX_VALUE / 4L);
+            = Property.long_("max-packet-size", DEFAULT_LIMIT_PACKET_SIZE);
 
     /**
      * Number of NIO worker threads to use.
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/hostbased/UserAuthHostBased.java b/sshd-core/src/main/java/org/apache/sshd/server/auth/hostbased/UserAuthHostBased.java
index db3cdb8..6082f6e 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/auth/hostbased/UserAuthHostBased.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/hostbased/UserAuthHostBased.java
@@ -164,7 +164,7 @@ public class UserAuthHostBased extends AbstractUserAuth implements SignatureFact
         buf.putString(getService());
         buf.putString(getName());
         buf.putString(keyType);
-        buf.putInt(keyLen);
+        buf.putUInt(keyLen);
         // copy the key + certificates
         buf.putRawBytes(buffer.array(), keyOffset, keyLen);
         buf.putString(clientHostName);
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/auth/keyboard/InteractiveChallenge.java b/sshd-core/src/main/java/org/apache/sshd/server/auth/keyboard/InteractiveChallenge.java
index 24053f8..6c64a29 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/auth/keyboard/InteractiveChallenge.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/auth/keyboard/InteractiveChallenge.java
@@ -98,7 +98,7 @@ public class InteractiveChallenge implements Cloneable {
 
         List<PromptEntry> entries = getPrompts();
         int numEntries = GenericUtils.size(entries);
-        buffer.putInt(numEntries);
+        buffer.putUInt(numEntries);
 
         for (int index = 0; index < numEntries; index++) {
             PromptEntry e = entries.get(index);
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/global/CancelTcpipForwardHandler.java b/sshd-core/src/main/java/org/apache/sshd/server/global/CancelTcpipForwardHandler.java
index a2fc226..0b7da84 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/global/CancelTcpipForwardHandler.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/global/CancelTcpipForwardHandler.java
@@ -70,7 +70,7 @@ public class CancelTcpipForwardHandler extends AbstractConnectionServiceRequestH
         if (wantReply) {
             Session session = connectionService.getSession();
             buffer = session.createBuffer(SshConstants.SSH_MSG_REQUEST_SUCCESS, Integer.BYTES);
-            buffer.putInt(port);
+            buffer.putUInt(port);
             session.writePacket(buffer);
         }
 
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/global/TcpipForwardHandler.java b/sshd-core/src/main/java/org/apache/sshd/server/global/TcpipForwardHandler.java
index b64d1b2..db983fd 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/global/TcpipForwardHandler.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/global/TcpipForwardHandler.java
@@ -76,7 +76,7 @@ public class TcpipForwardHandler extends AbstractConnectionServiceRequestHandler
         if (wantReply) {
             Session session = connectionService.getSession();
             buffer = session.createBuffer(SshConstants.SSH_MSG_REQUEST_SUCCESS, Integer.BYTES);
-            buffer.putInt(port);
+            buffer.putUInt(port);
             session.writePacket(buffer);
         }
 
diff --git a/sshd-core/src/test/java/org/apache/sshd/common/session/helpers/AbstractSessionTest.java b/sshd-core/src/test/java/org/apache/sshd/common/session/helpers/AbstractSessionTest.java
index a143cab..a0c3d53 100644
--- a/sshd-core/src/test/java/org/apache/sshd/common/session/helpers/AbstractSessionTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/common/session/helpers/AbstractSessionTest.java
@@ -250,7 +250,7 @@ public class AbstractSessionTest extends BaseTestSupport {
         });
 
         Buffer buffer = new ByteArrayBuffer(Long.SIZE + Byte.MAX_VALUE);
-        buffer.putInt(Byte.MAX_VALUE + 1); // bad message length
+        buffer.putUInt(Byte.MAX_VALUE + 1L); // bad message length
         for (int index = 0; index < Byte.MAX_VALUE; index++) {
             buffer.putByte((byte) index);
             session.handleIgnore(buffer);
@@ -272,7 +272,7 @@ public class AbstractSessionTest extends BaseTestSupport {
         buffer.putBoolean(true);
         session.handleDebug(buffer); // no message field
 
-        buffer.putInt(Byte.MAX_VALUE + 1); // bad message field length
+        buffer.putUInt(Byte.MAX_VALUE + 1L); // bad message field length
         for (int index = 0; index < Byte.MAX_VALUE; index++) {
             buffer.putByte((byte) index);
             session.handleDebug(buffer);
@@ -293,7 +293,7 @@ public class AbstractSessionTest extends BaseTestSupport {
         buffer.putString(getCurrentTestName());
         session.handleDebug(buffer); // no language tag
 
-        buffer.putInt(Byte.SIZE + 1); // bad language tag length
+        buffer.putUInt(Byte.SIZE + 1L); // bad language tag length
         for (int index = 0; index < Byte.SIZE; index++) {
             buffer.putByte((byte) index);
             session.handleDebug(buffer);
diff --git a/sshd-core/src/test/java/org/apache/sshd/deprecated/UserAuthKeyboardInteractive.java b/sshd-core/src/test/java/org/apache/sshd/deprecated/UserAuthKeyboardInteractive.java
index d334846..1b0b3de 100644
--- a/sshd-core/src/test/java/org/apache/sshd/deprecated/UserAuthKeyboardInteractive.java
+++ b/sshd-core/src/test/java/org/apache/sshd/deprecated/UserAuthKeyboardInteractive.java
@@ -109,7 +109,7 @@ public class UserAuthKeyboardInteractive extends AbstractUserAuth {
                     }
 
                     buffer = session.createBuffer(SshConstants.SSH_MSG_USERAUTH_INFO_RESPONSE);
-                    buffer.putInt(rep.length);
+                    buffer.putUInt(rep.length);
                     for (String r : rep) {
                         buffer.putString(r);
                     }
diff --git a/sshd-core/src/test/java/org/apache/sshd/server/channel/ChannelSessionTest.java b/sshd-core/src/test/java/org/apache/sshd/server/channel/ChannelSessionTest.java
index b9caf27..803b6c1 100644
--- a/sshd-core/src/test/java/org/apache/sshd/server/channel/ChannelSessionTest.java
+++ b/sshd-core/src/test/java/org/apache/sshd/server/channel/ChannelSessionTest.java
@@ -38,7 +38,9 @@ import org.apache.sshd.common.channel.Channel;
 import org.apache.sshd.common.channel.ChannelAsyncOutputStream;
 import org.apache.sshd.common.channel.Window;
 import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.BufferUtils;
 import org.apache.sshd.common.util.buffer.ByteArrayBuffer;
+import org.apache.sshd.core.CoreModuleProperties;
 import org.apache.sshd.server.SshServer;
 import org.apache.sshd.util.test.BaseTestSupport;
 import org.apache.sshd.util.test.BogusChannel;
@@ -109,7 +111,7 @@ public class ChannelSessionTest extends BaseTestSupport {
     @Test
     public void testHandleWindowAdjust() throws Exception {
         Buffer buffer = new ByteArrayBuffer();
-        buffer.putInt(1234);
+        buffer.putUInt(1234L);
 
         try (ChannelSession channelSession = new ChannelSession() {
             {
@@ -148,4 +150,27 @@ public class ChannelSessionTest extends BaseTestSupport {
 
         assertEquals("Close listener not called", 1, closeCount.get());
     }
+
+    @Test   // SSHD-1244
+    public void testLargeWindowSizeAdjust() throws Exception {
+        try (ChannelSession session = new ChannelSession() {
+            {
+                Window wRemote = getRemoteWindow();
+                wRemote.init(PropertyResolverUtils.toPropertyResolver(Collections.emptyMap()));
+            }
+        }) {
+            Window wRemote = session.getRemoteWindow();
+            long initialSize = wRemote.getSize();
+            assertTrue("Bad initial window size: " + initialSize,
+                    (initialSize >= CoreModuleProperties.DEFAULT_WINDOW_SIZE)
+                            && (initialSize < BufferUtils.MAX_UINT32_VALUE));
+
+            Buffer buffer = new ByteArrayBuffer();
+            buffer.putUInt(BufferUtils.MAX_UINT32_VALUE);
+            session.handleWindowAdjust(buffer);
+
+            long updatedSize = wRemote.getSize();
+            assertEquals("Mismatched updated window size", BufferUtils.MAX_UINT32_VALUE, updatedSize);
+        }
+    }
 }
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/helpers/AbstractCheckFileExtension.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/helpers/AbstractCheckFileExtension.java
index 3a1aefc..bc2cf06 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/helpers/AbstractCheckFileExtension.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/extensions/helpers/AbstractCheckFileExtension.java
@@ -48,7 +48,7 @@ public abstract class AbstractCheckFileExtension extends AbstractSftpClientExten
         buffer.putString(GenericUtils.join(algorithms, ','));
         buffer.putLong(offset);
         buffer.putLong(length);
-        buffer.putInt(blockSize);
+        buffer.putUInt(blockSize);
 
         if (log.isDebugEnabled()) {
             log.debug("doGetHash({})[{}] - offset={}, length={}, block-size={}",
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/AbstractSftpClient.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/AbstractSftpClient.java
index cef3a6e..78f0b2f 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/AbstractSftpClient.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/AbstractSftpClient.java
@@ -660,7 +660,7 @@ public abstract class AbstractSftpClient
         Buffer buffer = new ByteArrayBuffer(id.length + Long.SIZE /* some extra fields */, false);
         buffer.putBytes(id);
         buffer.putLong(fileOffset);
-        buffer.putInt(len);
+        buffer.putUInt(len);
         return checkData(SftpConstants.SSH_FXP_READ, buffer, dstOffset, dst, eofSignalled);
     }
 
@@ -795,7 +795,7 @@ public abstract class AbstractSftpClient
 
         Buffer buffer = new ByteArrayBuffer(path.length() + Long.SIZE /* some extra fields */, false);
         buffer = putReferencedName(SftpConstants.SSH_FXP_MKDIR, buffer, path, 0);
-        buffer.putInt(0);
+        buffer.putUInt(0L);
 
         int version = getVersion();
         if (version != SftpConstants.SFTP_V3) {
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/DefaultSftpClient.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/DefaultSftpClient.java
index 21f21ac..a543a61 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/DefaultSftpClient.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/DefaultSftpClient.java
@@ -282,14 +282,14 @@ public class DefaultSftpClient extends AbstractSftpClient {
             int s = buffer.rpos() - hdr;
             buffer.rpos(s);
             buffer.wpos(s);
-            buffer.putInt(1 /* cmd */ + Integer.BYTES /* id */ + len); // length
+            buffer.putUInt(1 /* cmd */ + Integer.BYTES /* id */ + len); // length
             buffer.putByte((byte) (cmd & 0xFF)); // cmd
-            buffer.putInt(id); // id
+            buffer.putInt(id);
             buffer.wpos(wpos);
             buf = buffer;
         } else {
             buf = new ByteArrayBuffer(hdr + len);
-            buf.putInt(1 /* cmd */ + Integer.BYTES /* id */ + len);
+            buf.putUInt(1 /* cmd */ + Integer.BYTES /* id */ + len);
             buf.putByte((byte) (cmd & 0xFF));
             buf.putInt(id);
             buf.putBuffer(buffer);
@@ -367,9 +367,9 @@ public class DefaultSftpClient extends AbstractSftpClient {
 
         // Send init packet
         Buffer buf = new ByteArrayBuffer(INIT_COMMAND_SIZE + SshConstants.SSH_PACKET_HEADER_LEN);
-        buf.putInt(INIT_COMMAND_SIZE);
+        buf.putUInt(INIT_COMMAND_SIZE);
         buf.putByte((byte) SftpConstants.SSH_FXP_INIT);
-        buf.putInt(initialVersion);
+        buf.putUInt(initialVersion);
 
         boolean traceEnabled = log.isTraceEnabled();
         ClientChannel clientChannel = getClientChannel();
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpInputStreamAsync.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpInputStreamAsync.java
index 3c822e8..a4083f4 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpInputStreamAsync.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpInputStreamAsync.java
@@ -155,6 +155,7 @@ public class SftpInputStreamAsync extends InputStreamWithChannel implements Sftp
         return numXfered;
     }
 
+    @Override
     @SuppressWarnings("PMD.MissingOverride")
     public long transferTo(OutputStream out) throws IOException {
         if (!isOpen()) {
@@ -236,7 +237,7 @@ public class SftpInputStreamAsync extends InputStreamWithChannel implements Sftp
             buf.wpos(23);
             buf.putBytes(id);
             buf.putLong(requestOffset);
-            buf.putInt(bufferSize);
+            buf.putUInt(bufferSize);
             int reqId = client.send(SftpConstants.SSH_FXP_READ, buf);
             SftpAckData ack = new SftpAckData(reqId, requestOffset, bufferSize);
             if (traceEnabled) {
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpOutputStreamAsync.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpOutputStreamAsync.java
index db6147e..3de58d9 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpOutputStreamAsync.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/client/impl/SftpOutputStreamAsync.java
@@ -194,7 +194,7 @@ public class SftpOutputStreamAsync extends OutputStreamWithChannel implements Sf
             buffer.wpos(buffer.rpos());
             buffer.putBytes(id);
             buffer.putLong(offset);
-            buffer.putInt(avail);
+            buffer.putUInt(avail);
             buffer.wpos(wpos);
             buf = buffer;
         } else {
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/common/SftpHelper.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/common/SftpHelper.java
index 5de859d..a394150 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/common/SftpHelper.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/common/SftpHelper.java
@@ -795,7 +795,7 @@ public final class SftpHelper {
 
     public static <B extends Buffer> B writeExtensions(B buffer, Map<?, ?> extensions) {
         int numExtensions = MapEntryUtils.size(extensions);
-        buffer.putInt(numExtensions);
+        buffer.putUInt(numExtensions);
         if (numExtensions <= 0) {
             return buffer;
         }
@@ -1005,7 +1005,7 @@ public final class SftpHelper {
 
     public static <B extends Buffer> B writeACLs(B buffer, int version, Collection<? extends AclEntry> acl) {
         int lenPos = buffer.wpos();
-        buffer.putInt(0); // length placeholder
+        buffer.putUInt(0L); // length placeholder
         buffer = encodeACLs(buffer, version, acl);
         BufferUtils.updateLengthPlaceholder(buffer, lenPos);
         return buffer;
@@ -1014,7 +1014,7 @@ public final class SftpHelper {
     public static <B extends Buffer> B encodeACLs(B buffer, int version, Collection<? extends AclEntry> acl) {
         Objects.requireNonNull(acl, "No ACL");
         if (version >= SftpConstants.SFTP_V6) {
-            buffer.putInt(0); // TODO handle ACL flags
+            buffer.putUInt(0L); // TODO handle ACL flags
         }
 
         int numEntries = GenericUtils.size(acl);
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/common/extensions/SpaceAvailableExtensionInfo.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/common/extensions/SpaceAvailableExtensionInfo.java
index 961bc25..abc7fe7 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/common/extensions/SpaceAvailableExtensionInfo.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/common/extensions/SpaceAvailableExtensionInfo.java
@@ -121,6 +121,6 @@ public class SpaceAvailableExtensionInfo implements Cloneable {
         buffer.putLong(info.unusedBytesOnDevice);
         buffer.putLong(info.bytesAvailableToUser);
         buffer.putLong(info.unusedBytesAvailableToUser);
-        buffer.putInt(info.bytesPerAllocationUnit & 0xFFFFFFFFL);
+        buffer.putUInt(info.bytesPerAllocationUnit & 0xFFFFFFFFL);
     }
 }
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/AbstractSftpSubsystemHelper.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/AbstractSftpSubsystemHelper.java
index b3e32bf..ba8ca69 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/AbstractSftpSubsystemHelper.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/AbstractSftpSubsystemHelper.java
@@ -1847,7 +1847,7 @@ public abstract class AbstractSftpSubsystemHelper
 
             // placeholder for length
             int lenPos = buffer.wpos();
-            buffer.putInt(0);
+            buffer.putUInt(0L);
             buffer.putInt(mask);
             BufferUtils.updateLengthPlaceholder(buffer, lenPos);
         }
@@ -2053,7 +2053,7 @@ public abstract class AbstractSftpSubsystemHelper
                 Collections.unmodifiableMap(versionProperties));
         // placeholder for length
         int lenPos = buffer.wpos();
-        buffer.putInt(0);
+        buffer.putUInt(0L);
         buffer.putString(resolver.getStringProperty("groupId", getClass().getPackage().getName())); // vendor-name
         buffer.putString(resolver.getStringProperty("artifactId", getClass().getSimpleName())); // product-name
         buffer.putString(resolver.getStringProperty("version", FactoryManager.DEFAULT_VERSION)); // product-version
@@ -2073,21 +2073,21 @@ public abstract class AbstractSftpSubsystemHelper
         buffer.putString(SftpConstants.EXT_SUPPORTED);
 
         int lenPos = buffer.wpos();
-        buffer.putInt(0); // length placeholder
+        buffer.putUInt(0L); // length placeholder
         // supported-attribute-mask
         buffer.putInt(SftpConstants.SSH_FILEXFER_ATTR_SIZE | SftpConstants.SSH_FILEXFER_ATTR_PERMISSIONS
                       | SftpConstants.SSH_FILEXFER_ATTR_ACCESSTIME | SftpConstants.SSH_FILEXFER_ATTR_CREATETIME
                       | SftpConstants.SSH_FILEXFER_ATTR_MODIFYTIME | SftpConstants.SSH_FILEXFER_ATTR_OWNERGROUP
                       | SftpConstants.SSH_FILEXFER_ATTR_BITS);
         // TODO: supported-attribute-bits
-        buffer.putInt(0);
+        buffer.putUInt(0L);
         // supported-open-flags
         buffer.putInt(SftpConstants.SSH_FXF_READ | SftpConstants.SSH_FXF_WRITE | SftpConstants.SSH_FXF_APPEND
                       | SftpConstants.SSH_FXF_CREAT | SftpConstants.SSH_FXF_TRUNC | SftpConstants.SSH_FXF_EXCL);
         // TODO: supported-access-mask
-        buffer.putInt(0);
+        buffer.putUInt(0L);
         // max-read-size
-        buffer.putInt(0);
+        buffer.putUInt(0L);
         // supported extensions
         buffer.putStringList(extras, false);
 
@@ -2108,20 +2108,20 @@ public abstract class AbstractSftpSubsystemHelper
         buffer.putString(SftpConstants.EXT_SUPPORTED2);
 
         int lenPos = buffer.wpos();
-        buffer.putInt(0); // length placeholder
+        buffer.putUInt(0L); // length placeholder
         // supported-attribute-mask
         buffer.putInt(SftpConstants.SSH_FILEXFER_ATTR_SIZE | SftpConstants.SSH_FILEXFER_ATTR_PERMISSIONS
                       | SftpConstants.SSH_FILEXFER_ATTR_ACCESSTIME | SftpConstants.SSH_FILEXFER_ATTR_CREATETIME
                       | SftpConstants.SSH_FILEXFER_ATTR_MODIFYTIME | SftpConstants.SSH_FILEXFER_ATTR_OWNERGROUP
                       | SftpConstants.SSH_FILEXFER_ATTR_BITS);
         // TODO: supported-attribute-bits
-        buffer.putInt(0);
+        buffer.putUInt(0L);
         // supported-open-flags
         buffer.putInt(SftpConstants.SSH_FXF_ACCESS_DISPOSITION | SftpConstants.SSH_FXF_APPEND_DATA);
         // TODO: supported-access-mask
-        buffer.putInt(0);
+        buffer.putUInt(0L);
         // max-read-size
-        buffer.putInt(0);
+        buffer.putUInt(0L);
         // supported-open-block-vector
         buffer.putShort(0);
         // supported-block-vector
@@ -2151,7 +2151,7 @@ public abstract class AbstractSftpSubsystemHelper
     protected void sendLink(Buffer buffer, int id, Path file, String link) throws IOException {
         buffer.putByte((byte) SftpConstants.SSH_FXP_NAME);
         buffer.putInt(id);
-        buffer.putInt(1); // one response
+        buffer.putUInt(1L); // one response
 
         // in case we are running on Windows
         String unixPath = link.replace(File.separatorChar, '/');
diff --git a/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/SftpSubsystem.java b/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/SftpSubsystem.java
index 34421cb..fdd4bae 100644
--- a/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/SftpSubsystem.java
+++ b/sshd-sftp/src/main/java/org/apache/sshd/sftp/server/SftpSubsystem.java
@@ -991,7 +991,7 @@ public class SftpSubsystem
         buffer = prepareReply(buffer);
 
         buffer.putByte((byte) SftpConstants.SSH_FXP_VERSION);
-        buffer.putInt(version);
+        buffer.putUInt(version);
         appendExtensions(buffer, negotiated.getValue());
 
         SftpEventListener listener = getSftpEventListenerProxy();
@@ -1003,7 +1003,7 @@ public class SftpSubsystem
     @Override
     protected Buffer prepareReply(Buffer buffer) {
         buffer.clear();
-        buffer.putInt(0); // reserve space for actual packet length
+        buffer.putUInt(0L); // reserve space for actual packet length
         return buffer;
     }
 
diff --git a/sshd-sftp/src/test/java/org/apache/sshd/sftp/client/impl/SftpRemotePathChannelTest.java b/sshd-sftp/src/test/java/org/apache/sshd/sftp/client/impl/SftpRemotePathChannelTest.java
index bdabd91..62fba0b 100644
--- a/sshd-sftp/src/test/java/org/apache/sshd/sftp/client/impl/SftpRemotePathChannelTest.java
+++ b/sshd-sftp/src/test/java/org/apache/sshd/sftp/client/impl/SftpRemotePathChannelTest.java
@@ -309,7 +309,7 @@ public class SftpRemotePathChannelTest extends AbstractSftpClientTestSupport {
                 Buffer requestBuffer = new ByteArrayBuffer(id.length + Long.SIZE, false);
                 requestBuffer.putBytes(id);
                 requestBuffer.putLong(curPos);
-                requestBuffer.putInt(readLength);
+                requestBuffer.putUInt(readLength);
                 ((RawSftpClient) sftp).send(SftpConstants.SSH_FXP_READ, requestBuffer);
 
                 Thread.sleep(1L);