tls/sni: use byte array instead of string

Bug 7887
pull/14564/head
Shivani Bhardwaj 7 months ago committed by Victor Julien
parent 24f5b7dab2
commit 9c3ed7d31c

@ -952,20 +952,18 @@ static inline int TLSDecodeHSHelloExtensionSni(SSLState *ssl_state,
return (int)(input - initial_input);
}
const size_t sni_strlen = sni_len + 1;
ssl_state->curr_connp->sni = SCMalloc(sni_strlen);
ssl_state->curr_connp->sni_len = sni_len;
ssl_state->curr_connp->sni = SCMalloc(sni_len);
if (unlikely(ssl_state->curr_connp->sni == NULL))
return -1;
const size_t consumed = input - initial_input;
if (SafeMemcpy(ssl_state->curr_connp->sni, 0, sni_strlen,
initial_input, consumed, input_len, sni_len) != 0) {
if (SafeMemcpy(ssl_state->curr_connp->sni, 0, sni_len, initial_input, consumed, input_len,
sni_len) != 0) {
SCFree(ssl_state->curr_connp->sni);
ssl_state->curr_connp->sni = NULL;
return -1;
}
ssl_state->curr_connp->sni[sni_strlen-1] = 0;
input += sni_len;
return (int)(input - initial_input);

@ -197,7 +197,8 @@ typedef struct SSLStateConnp_ {
char **cert0_sans;
uint16_t cert0_sans_len;
/* ssl server name indication extension */
char *sni;
uint8_t *sni;
uint16_t sni_len;
char *session_id;

@ -1,4 +1,4 @@
/* Copyright (C) 2007-2023 Open Information Security Foundation
/* Copyright (C) 2007-2025 Open Information Security Foundation
*
* You can copy, redistribute or modify this Program under the terms of
* the GNU General Public License version 2 as published by the Free
@ -120,8 +120,8 @@ static InspectionBuffer *GetData(DetectEngineThreadCtx *det_ctx,
return NULL;
}
const uint32_t data_len = (uint32_t)strlen(ssl_state->client_connp.sni);
const uint8_t *data = (uint8_t *)ssl_state->client_connp.sni;
const uint32_t data_len = ssl_state->client_connp.sni_len;
const uint8_t *data = ssl_state->client_connp.sni;
InspectionBufferSetupAndApplyTransforms(
det_ctx, list_id, buffer, data, data_len, transforms);

@ -188,7 +188,8 @@ static void JsonTlsLogFingerprint(SCJsonBuilder *js, SSLState *ssl_state)
static void JsonTlsLogSni(SCJsonBuilder *js, SSLState *ssl_state)
{
if (ssl_state->client_connp.sni) {
SCJbSetString(js, "sni", ssl_state->client_connp.sni);
SCJbSetStringFromBytes(
js, "sni", ssl_state->client_connp.sni, ssl_state->client_connp.sni_len);
}
}

@ -205,8 +205,8 @@ static int GetSNI(lua_State *luastate, const SSLState *ssl_state)
if (ssl_state->client_connp.sni == NULL)
return LuaCallbackError(luastate, "error: no server name indication");
return LuaPushStringBuffer(luastate, (uint8_t *)ssl_state->client_connp.sni,
strlen(ssl_state->client_connp.sni));
return LuaPushStringBuffer(
luastate, ssl_state->client_connp.sni, ssl_state->client_connp.sni_len);
}
static int LuaTlsGetSNI(lua_State *luastate)

Loading…
Cancel
Save