From 0458e212111882856ec85191bd92d802134c6f1c Mon Sep 17 00:00:00 2001 From: John Safranek Date: Tue, 31 Mar 2015 09:51:55 -0700 Subject: [PATCH] 1. In the sniffer, replace call to strnlen with strlen and accounted for size differences (fixes issue #60) 2. fixed overrun with long SNI names in hello messages --- src/sniffer.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/sniffer.c b/src/sniffer.c index 0e81a8674..58dfa4b0b 100644 --- a/src/sniffer.c +++ b/src/sniffer.c @@ -1075,8 +1075,12 @@ static int SetNamedPrivateKey(const char* name, const char* address, int port, } XMEMSET(namedKey, 0, sizeof(NamedKey)); - namedKey->nameSz = (word32)strnlen(name, sizeof(namedKey->name)); - strncpy(namedKey->name, name, sizeof(namedKey->name)); + namedKey->nameSz = (word32)XSTRLEN(name); + XSTRNCPY(namedKey->name, name, sizeof(namedKey->name)); + if (namedKey->nameSz >= sizeof(namedKey->name)) { + namedKey->nameSz = sizeof(namedKey->name) - 1; + namedKey->name[namedKey->nameSz] = '\0'; + } ret = LoadKeyFile(&namedKey->key, &namedKey->keySz, keyFile, type, password); @@ -1578,6 +1582,8 @@ static int ProcessClientHello(const byte* input, int* sslBytes, if (ret == SSL_SUCCESS) { NamedKey* namedKey; + if (nameSz >= sizeof(name)) + nameSz = sizeof(name) - 1; name[nameSz] = 0; LockMutex(&session->context->namedKeysMutex); namedKey = session->context->namedKeys;