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 2019/02/20 05:14:39 UTC
[mina-sshd] 01/06: [SSHD-896] Fixed parsing of compound KEX
extension messages
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 3e56932eb496b24962363cb51a9e5ca1798fdc46
Author: Lyor Goldstein <lg...@apache.org>
AuthorDate: Mon Feb 18 10:06:06 2019 +0200
[SSHD-896] Fixed parsing of compound KEX extension messages
---
.../kex/extension/parser/AbstractKexExtensionParser.java | 4 ----
.../sshd/common/kex/extension/parser/DelayCompression.java | 4 ++++
.../apache/sshd/common/kex/extension/parser/Elevation.java | 8 +++++++-
.../sshd/common/kex/extension/parser/NoFlowControl.java | 8 +++++++-
.../kex/extension/parser/ServerSignatureAlgorithms.java | 13 ++++++++++++-
5 files changed, 30 insertions(+), 7 deletions(-)
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/AbstractKexExtensionParser.java b/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/AbstractKexExtensionParser.java
index 1d1a3ba..75265f7 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/AbstractKexExtensionParser.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/AbstractKexExtensionParser.java
@@ -24,7 +24,6 @@ import java.io.IOException;
import org.apache.sshd.common.kex.extension.KexExtensionParser;
import org.apache.sshd.common.util.ValidateUtils;
import org.apache.sshd.common.util.buffer.Buffer;
-import org.apache.sshd.common.util.buffer.BufferUtils;
/**
* @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
@@ -44,10 +43,7 @@ public abstract class AbstractKexExtensionParser<T> implements KexExtensionParse
@Override
public void putExtension(T value, Buffer buffer) throws IOException {
buffer.putString(getName());
- int lenPos = buffer.wpos();
- buffer.putInt(0); // placeholder for the encoded value length
encode(value, buffer);
- BufferUtils.updateLengthPlaceholder(buffer, lenPos);
}
protected abstract void encode(T value, Buffer buffer) throws IOException;
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 21763f8..c11002e 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
@@ -22,6 +22,7 @@ package org.apache.sshd.common.kex.extension.parser;
import java.io.IOException;
import org.apache.sshd.common.util.buffer.Buffer;
+import org.apache.sshd.common.util.buffer.BufferUtils;
/**
* @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
@@ -46,7 +47,10 @@ 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.putNameList(algos.getClient2Server());
buffer.putNameList(algos.getServer2Client());
+ BufferUtils.updateLengthPlaceholder(buffer, lenPos);
}
}
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/Elevation.java b/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/Elevation.java
index abaa15c..d08eca3 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/Elevation.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/Elevation.java
@@ -20,6 +20,7 @@
package org.apache.sshd.common.kex.extension.parser;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
import org.apache.sshd.common.util.buffer.Buffer;
@@ -37,8 +38,13 @@ public class Elevation extends AbstractKexExtensionParser<String> {
}
@Override
+ public String parseExtension(byte[] data, int off, int len) throws IOException {
+ return (len <= 0) ? "" : new String(data, off, len, StandardCharsets.UTF_8);
+ }
+
+ @Override
public String parseExtension(Buffer buffer) throws IOException {
- return buffer.getString();
+ return parseExtension(buffer.array(), buffer.rpos(), buffer.available());
}
@Override
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/NoFlowControl.java b/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/NoFlowControl.java
index f883131..259adae 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/NoFlowControl.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/NoFlowControl.java
@@ -20,6 +20,7 @@
package org.apache.sshd.common.kex.extension.parser;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
import org.apache.sshd.common.util.buffer.Buffer;
@@ -37,8 +38,13 @@ public class NoFlowControl extends AbstractKexExtensionParser<String> {
}
@Override
+ public String parseExtension(byte[] data, int off, int len) throws IOException {
+ return (len <= 0) ? "" : new String(data, off, len, StandardCharsets.UTF_8);
+ }
+
+ @Override
public String parseExtension(Buffer buffer) throws IOException {
- return buffer.getString();
+ return parseExtension(buffer.array(), buffer.rpos(), buffer.available());
}
@Override
diff --git a/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/ServerSignatureAlgorithms.java b/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/ServerSignatureAlgorithms.java
index 72b1364..e211cf2 100644
--- a/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/ServerSignatureAlgorithms.java
+++ b/sshd-common/src/main/java/org/apache/sshd/common/kex/extension/parser/ServerSignatureAlgorithms.java
@@ -20,8 +20,12 @@
package org.apache.sshd.common.kex.extension.parser;
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
+import org.apache.sshd.common.util.GenericUtils;
import org.apache.sshd.common.util.buffer.Buffer;
/**
@@ -38,8 +42,15 @@ public class ServerSignatureAlgorithms extends AbstractKexExtensionParser<List<S
}
@Override
+ public List<String> parseExtension(byte[] data, int off, int len) throws IOException {
+ String s = (len <= 0) ? "" : new String(data, off, len, StandardCharsets.UTF_8);
+ String[] vals = GenericUtils.isEmpty(s) ? GenericUtils.EMPTY_STRING_ARRAY : GenericUtils.split(s, ',');
+ return GenericUtils.isEmpty(vals) ? Collections.emptyList() : Arrays.asList(vals);
+ }
+
+ @Override
public List<String> parseExtension(Buffer buffer) throws IOException {
- return buffer.getNameList();
+ return parseExtension(buffer.array(), buffer.rpos(), buffer.available());
}
@Override