You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by gn...@apache.org on 2015/02/10 08:32:09 UTC
mina-sshd git commit: [SSHD-406] Stop parsing pty-req modes for
undefined opcodes
Repository: mina-sshd
Updated Branches:
refs/heads/master 4d794e5e8 -> ea285c6cb
[SSHD-406] Stop parsing pty-req modes for undefined opcodes
Project: http://git-wip-us.apache.org/repos/asf/mina-sshd/repo
Commit: http://git-wip-us.apache.org/repos/asf/mina-sshd/commit/ea285c6c
Tree: http://git-wip-us.apache.org/repos/asf/mina-sshd/tree/ea285c6c
Diff: http://git-wip-us.apache.org/repos/asf/mina-sshd/diff/ea285c6c
Branch: refs/heads/master
Commit: ea285c6cbff496a81029d12e7706ae4de68fb5f9
Parents: 4d794e5
Author: Guillaume Nodet <gn...@apache.org>
Authored: Tue Feb 10 08:31:58 2015 +0100
Committer: Guillaume Nodet <gn...@apache.org>
Committed: Tue Feb 10 08:31:58 2015 +0100
----------------------------------------------------------------------
.../java/org/apache/sshd/common/PtyMode.java | 3 ++-
.../sshd/server/channel/ChannelSession.java | 19 +++++++++++++++----
2 files changed, 17 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/ea285c6c/sshd-core/src/main/java/org/apache/sshd/common/PtyMode.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/common/PtyMode.java b/sshd-core/src/main/java/org/apache/sshd/common/PtyMode.java
index 3075ce2..47ec123 100644
--- a/sshd-core/src/main/java/org/apache/sshd/common/PtyMode.java
+++ b/sshd-core/src/main/java/org/apache/sshd/common/PtyMode.java
@@ -22,7 +22,8 @@ import java.util.HashMap;
import java.util.Map;
/**
- * A enum describing the tty modes.
+ * A enum describing the tty modes according to
+ * <a href="https://tools.ietf.org/html/rfc4254#section-8">RFC 4254 - section 8</a>.
*
* @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
*/
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/ea285c6c/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
index b2ad04a..e8c0481 100644
--- a/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
+++ b/sshd-core/src/main/java/org/apache/sshd/server/channel/ChannelSession.java
@@ -339,16 +339,27 @@ public class ChannelSession extends AbstractServerChannel {
int tWidth = buffer.getInt();
int tHeight = buffer.getInt();
byte[] modes = buffer.getBytes();
+ Environment environment = getEnvironment();
+ Map<PtyMode, Integer> ptyModes = environment.getPtyModes();
for (int i = 0; i < modes.length && modes[i] != 0;) {
- PtyMode mode = PtyMode.fromInt(modes[i++]);
+ int opcode = modes[i++] & 0x00FF;
+ PtyMode mode = PtyMode.fromInt(opcode);
+ /**
+ * According to section 8 of RFC 4254:
+ * "Opcodes 160 to 255 are not yet defined, and cause parsing to stop"
+ */
+ if (mode == null) {
+ log.warn("Unknown pty opcode value: " + opcode);
+ break;
+ }
int val = ((modes[i++] << 24) & 0xff000000) |
((modes[i++] << 16) & 0x00ff0000) |
((modes[i++] << 8) & 0x0000ff00) |
- ((modes[i++] ) & 0x000000ff);
- getEnvironment().getPtyModes().put(mode, val);
+ ((modes[i++]) & 0x000000ff);
+ ptyModes.put(mode, val);
}
if (log.isDebugEnabled()) {
- log.debug("pty for channel {}: term={}, size=({} - {}), pixels=({}, {}), modes=[{}]", new Object[] { id, term, tColumns, tRows, tWidth, tHeight, getEnvironment().getPtyModes() });
+ log.debug("pty for channel {}: term={}, size=({} - {}), pixels=({}, {}), modes=[{}]", new Object[] { id, term, tColumns, tRows, tWidth, tHeight, ptyModes });
}
addEnvVariable(Environment.ENV_TERM, term);
addEnvVariable(Environment.ENV_COLUMNS, Integer.toString(tColumns));