From 9c9199e05fadfb4d44ac80b23adbc67d95bd7541 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Sun, 21 Aug 2011 13:13:53 +0200 Subject: [PATCH] pki: Fix possible segfault in ssh_key_type_from_name(). --- src/pki.c | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/pki.c b/src/pki.c index bcfb2085..785ffab5 100644 --- a/src/pki.c +++ b/src/pki.c @@ -178,26 +178,30 @@ const char *ssh_key_type_to_char(enum ssh_keytypes_e type) { * @return The enum ssh key type. */ enum ssh_keytypes_e ssh_key_type_from_name(const char *name) { - if (strcmp(name, "rsa1") == 0) { - return SSH_KEYTYPE_RSA1; - } else if (strcmp(name, "rsa") == 0) { - return SSH_KEYTYPE_RSA; - } else if (strcmp(name, "dsa") == 0) { - return SSH_KEYTYPE_DSS; - } else if (strcmp(name, "ssh-rsa1") == 0) { - return SSH_KEYTYPE_RSA1; - } else if (strcmp(name, "ssh-rsa") == 0) { - return SSH_KEYTYPE_RSA; - } else if (strcmp(name, "ssh-dss") == 0) { - return SSH_KEYTYPE_DSS; - } else if (strcmp(name, "ssh-ecdsa") == 0 - || strcmp(name, "ecdsa") == 0 - || strcmp(name, "ecdsa-sha2-nistp256") == 0 - || strcmp(name, "ecdsa-sha2-nistp384") == 0 - || strcmp(name, "ecdsa-sha2-nistp521") == 0) { - } + if (name == NULL) { + return SSH_KEYTYPE_UNKNOWN; + } - return SSH_KEYTYPE_UNKNOWN; + if (strcmp(name, "rsa1") == 0) { + return SSH_KEYTYPE_RSA1; + } else if (strcmp(name, "rsa") == 0) { + return SSH_KEYTYPE_RSA; + } else if (strcmp(name, "dsa") == 0) { + return SSH_KEYTYPE_DSS; + } else if (strcmp(name, "ssh-rsa1") == 0) { + return SSH_KEYTYPE_RSA1; + } else if (strcmp(name, "ssh-rsa") == 0) { + return SSH_KEYTYPE_RSA; + } else if (strcmp(name, "ssh-dss") == 0) { + return SSH_KEYTYPE_DSS; + } else if (strcmp(name, "ssh-ecdsa") == 0 + || strcmp(name, "ecdsa") == 0 + || strcmp(name, "ecdsa-sha2-nistp256") == 0 + || strcmp(name, "ecdsa-sha2-nistp384") == 0 + || strcmp(name, "ecdsa-sha2-nistp521") == 0) { + } + + return SSH_KEYTYPE_UNKNOWN; } /**