diff options
author | Ivan Nardi <12729895+IvanNardi@users.noreply.github.com> | 2023-09-10 11:09:59 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-10 11:09:59 +0200 |
commit | 2b883b93be5feef26469fb07ca126b7c13b2fd21 (patch) | |
tree | 0f9bbcde2e9d41a86bdce1edfdab1588729c52ae /src/lib/ndpi_main.c | |
parent | 805df2e5ceebf9252248ac4514d47ba8756c4042 (diff) |
Fix some errors found by fuzzers (#2078)
Fix compilation on Windows.
"dirent.h" file has been taken from https://github.com/tronkko/dirent/
Fix Python bindings
Fix some warnings with x86_64-w64-mingw32-gcc:
```
protocols/dns.c: In function ‘ndpi_search_dns’:
protocols/dns.c:775:41: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
775 | unsigned long first_element_len = (unsigned long)dot - (unsigned long)_hostname;
| ^
protocols/dns.c:775:62: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
775 | unsigned long first_element_len = (unsigned long)dot - (unsigned long)_hostname;
|
```
```
In file included from ndpi_bitmap64.c:31:
third_party/include/binaryfusefilter.h: In function ‘binary_fuse8_hash’:
third_party/include/binaryfusefilter.h:160:32: error: left shift count >= width of type [-Werror=shift-count-overflow]
160 | uint64_t hh = hash & ((1UL << 36) - 1);
```
```
In function ‘ndpi_match_custom_category’,
inlined from ‘ndpi_fill_protocol_category.part.0’ at ndpi_main.c:7056:16:
ndpi_main.c:3419:3: error: ‘strncpy’ specified bound depends on the length of the source argument [-Werror=stringop-overflow=]
3419 | strncpy(buf, name, name_len);
```
Diffstat (limited to 'src/lib/ndpi_main.c')
-rw-r--r-- | src/lib/ndpi_main.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index ae3c4c200..c2a5b2f2f 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -2669,7 +2669,8 @@ void ndpi_debug_printf(unsigned int proto, struct ndpi_detection_module_struct * void set_ndpi_debug_function(struct ndpi_detection_module_struct *ndpi_str, ndpi_debug_function_ptr ndpi_debug_printf) { #ifdef NDPI_ENABLE_DEBUG_MESSAGES - ndpi_str->ndpi_debug_printf = ndpi_debug_printf; + if(ndpi_str) + ndpi_str->ndpi_debug_printf = ndpi_debug_printf; #endif } @@ -3002,7 +3003,15 @@ struct ndpi_detection_module_struct *ndpi_init_detection_module(ndpi_init_prefs ac_automata_name(ndpi_str->custom_categories.hostnames_shadow.ac_automa, "ccat_sh", 0); #else ndpi_str->custom_categories.sc_hostnames = ndpi_domain_classify_alloc(); + if(!ndpi_str->custom_categories.sc_hostnames) { + ndpi_exit_detection_module(ndpi_str); + return(NULL); + } ndpi_str->custom_categories.sc_hostnames_shadow = ndpi_domain_classify_alloc(); + if(!ndpi_str->custom_categories.sc_hostnames_shadow) { + ndpi_exit_detection_module(ndpi_str); + return(NULL); + } #endif ndpi_str->custom_categories.ipAddresses = ndpi_patricia_new(32 /* IPv4 */); @@ -3407,7 +3416,7 @@ int ndpi_match_custom_category(struct ndpi_detection_module_struct *ndpi_str, u_int max_len = sizeof(buf)-1; if(name_len > max_len) name_len = max_len; - strncpy(buf, name, name_len); + memcpy(buf, name, name_len); buf[name_len] = '\0'; if(ndpi_domain_classify_contains(ndpi_str->custom_categories.sc_hostnames, @@ -6887,6 +6896,9 @@ int ndpi_load_hostname_category(struct ndpi_detection_module_struct *ndpi_str, (AC_AUTOMATA_t *)ndpi_str->custom_categories.hostnames_shadow.ac_automa, name_to_add,category,category, 0, 0, 1); /* at_end */ #else + if(ndpi_str->custom_categories.sc_hostnames_shadow == NULL) + return(-1); + return(ndpi_domain_classify_add(ndpi_str->custom_categories.sc_hostnames_shadow, (u_int16_t)category, (char*)name_to_add) ? 0 : -1); #endif |