Skip to content

Commit 9c3ed7d

Browse files
inashivbvictorjulien
authored andcommitted
tls/sni: use byte array instead of string
Bug 7887
1 parent 24f5b7d commit 9c3ed7d

5 files changed

Lines changed: 13 additions & 13 deletions

File tree

src/app-layer-ssl.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -952,20 +952,18 @@ static inline int TLSDecodeHSHelloExtensionSni(SSLState *ssl_state,
952952
return (int)(input - initial_input);
953953
}
954954

955-
const size_t sni_strlen = sni_len + 1;
956-
ssl_state->curr_connp->sni = SCMalloc(sni_strlen);
955+
ssl_state->curr_connp->sni_len = sni_len;
956+
ssl_state->curr_connp->sni = SCMalloc(sni_len);
957957
if (unlikely(ssl_state->curr_connp->sni == NULL))
958958
return -1;
959959

960960
const size_t consumed = input - initial_input;
961-
if (SafeMemcpy(ssl_state->curr_connp->sni, 0, sni_strlen,
962-
initial_input, consumed, input_len, sni_len) != 0) {
961+
if (SafeMemcpy(ssl_state->curr_connp->sni, 0, sni_len, initial_input, consumed, input_len,
962+
sni_len) != 0) {
963963
SCFree(ssl_state->curr_connp->sni);
964964
ssl_state->curr_connp->sni = NULL;
965965
return -1;
966966
}
967-
ssl_state->curr_connp->sni[sni_strlen-1] = 0;
968-
969967
input += sni_len;
970968

971969
return (int)(input - initial_input);

src/app-layer-ssl.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,8 @@ typedef struct SSLStateConnp_ {
197197
char **cert0_sans;
198198
uint16_t cert0_sans_len;
199199
/* ssl server name indication extension */
200-
char *sni;
200+
uint8_t *sni;
201+
uint16_t sni_len;
201202

202203
char *session_id;
203204

src/detect-tls-sni.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (C) 2007-2023 Open Information Security Foundation
1+
/* Copyright (C) 2007-2025 Open Information Security Foundation
22
*
33
* You can copy, redistribute or modify this Program under the terms of
44
* the GNU General Public License version 2 as published by the Free
@@ -120,8 +120,8 @@ static InspectionBuffer *GetData(DetectEngineThreadCtx *det_ctx,
120120
return NULL;
121121
}
122122

123-
const uint32_t data_len = (uint32_t)strlen(ssl_state->client_connp.sni);
124-
const uint8_t *data = (uint8_t *)ssl_state->client_connp.sni;
123+
const uint32_t data_len = ssl_state->client_connp.sni_len;
124+
const uint8_t *data = ssl_state->client_connp.sni;
125125

126126
InspectionBufferSetupAndApplyTransforms(
127127
det_ctx, list_id, buffer, data, data_len, transforms);

src/output-json-tls.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,8 @@ static void JsonTlsLogFingerprint(SCJsonBuilder *js, SSLState *ssl_state)
188188
static void JsonTlsLogSni(SCJsonBuilder *js, SSLState *ssl_state)
189189
{
190190
if (ssl_state->client_connp.sni) {
191-
SCJbSetString(js, "sni", ssl_state->client_connp.sni);
191+
SCJbSetStringFromBytes(
192+
js, "sni", ssl_state->client_connp.sni, ssl_state->client_connp.sni_len);
192193
}
193194
}
194195

src/util-lua-tls.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,8 @@ static int GetSNI(lua_State *luastate, const SSLState *ssl_state)
205205
if (ssl_state->client_connp.sni == NULL)
206206
return LuaCallbackError(luastate, "error: no server name indication");
207207

208-
return LuaPushStringBuffer(luastate, (uint8_t *)ssl_state->client_connp.sni,
209-
strlen(ssl_state->client_connp.sni));
208+
return LuaPushStringBuffer(
209+
luastate, ssl_state->client_connp.sni, ssl_state->client_connp.sni_len);
210210
}
211211

212212
static int LuaTlsGetSNI(lua_State *luastate)

0 commit comments

Comments
 (0)