aboutsummaryrefslogtreecommitdiff
path: root/src/lib/protocols
diff options
context:
space:
mode:
authorLuca Deri <deri@ntop.org>2020-01-08 17:13:24 +0100
committerLuca Deri <deri@ntop.org>2020-01-08 17:13:24 +0100
commitfd943d6000316cdab5588558090bce0b2242f2f3 (patch)
tree25dd73325917f29cc6325be5e481aa1ddf87b9a1 /src/lib/protocols
parent691778df331487b91acdd17c8e3a861e1325036b (diff)
Code hardening
Diffstat (limited to 'src/lib/protocols')
-rw-r--r--src/lib/protocols/tls.c52
1 files changed, 7 insertions, 45 deletions
diff --git a/src/lib/protocols/tls.c b/src/lib/protocols/tls.c
index 80a252d53..c4048bc83 100644
--- a/src/lib/protocols/tls.c
+++ b/src/lib/protocols/tls.c
@@ -176,50 +176,6 @@ void ndpi_search_tls_tcp_memory(struct ndpi_detection_module_struct *ndpi_struct
static void cleanupServerName(char *buffer, int buffer_len) {
u_int i;
-#if 0
- int is_puny;
-
- // printf("->%s<-\n", buffer);
-
- for(i = 0; i < buffer_len; i++) {
- // printf("%c [%d]\n", buffer[i], buffer[i]);
-
- if((buffer[i] != '.')
- && (buffer[i] != '-')
- && (buffer[i] != '_')
- && (buffer[i] != '*')
- && (!ndpi_isalpha(buffer[i]))
- && (!ndpi_isdigit(buffer[i]))) {
- buffer[i] = '\0';
- buffer_len = i;
- break;
- }
- }
-
- /* check for punycode encoding */
- is_puny = ndpi_check_punycode_string(buffer, buffer_len);
-
- // not a punycode string - need more checks
- if(is_puny == 0) {
- if(i > 0) i--;
-
- while(i > 0) {
- if(!ndpi_isalpha(buffer[i])) {
- buffer[i] = '\0';
- buffer_len = i;
- i--;
- } else
- break;
- }
-
- for(i = buffer_len; i > 0; i--) {
- if(buffer[i] == '.') break;
- else if(ndpi_isdigit(buffer[i]))
- buffer[i] = '\0', buffer_len = i;
- }
- }
-#endif
-
/* Now all lowecase */
for(i=0; i<buffer_len; i++)
buffer[i] = tolower(buffer[i]);
@@ -362,7 +318,7 @@ static void processCertificateElements(struct ndpi_detection_module_struct *ndpi
i += 2;
- if(len > sizeof(dNSName)-1)
+ if((len > sizeof(dNSName)-1) || (len == 0 /* Looks something went wrong */))
break; /* String too long */
strncpy(dNSName, (const char*)&packet->payload[i], len);
@@ -445,6 +401,9 @@ int processCertificate(struct ndpi_detection_module_struct *ndpi_struct,
while(certificates_offset < certificates_length) {
u_int16_t certificate_len = (packet->payload[certificates_offset] << 16) + (packet->payload[certificates_offset+1] << 8) + packet->payload[certificates_offset+2];
+ if(certificate_len == 0) /* Invalid lenght */
+ break;
+
certificates_offset += 3;
#ifdef DEBUG_TLS
printf("[TLS] Processing %u bytes certificate [%02X %02X %02X]\n",
@@ -564,6 +523,9 @@ static int ndpi_search_tls_tcp(struct ndpi_detection_module_struct *ndpi_struct,
break;
}
+ if(len == 0) /* Something went wrong */
+ break;
+
#ifdef DEBUG_TLS_MEMORY
printf("[TLS Mem] Processing %u bytes message\n", len);
#endif