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));