diff options
author | Luca Deri <deri@ntop.org> | 2020-07-14 22:16:43 +0200 |
---|---|---|
committer | Luca Deri <deri@ntop.org> | 2020-07-14 22:16:43 +0200 |
commit | 91d132ea3dd99e10012916f1a1ededad2e0eefab (patch) | |
tree | 0ee5200d51fdb65bb2c5aa5f9a120965e5cff830 /src/lib/protocols/netbios.c | |
parent | 3fd31530894e07fb22ed8cf430f3e8cbbd2f0115 (diff) |
Check for avoiding buffer overflow in netbios dissector
Diffstat (limited to 'src/lib/protocols/netbios.c')
-rw-r--r-- | src/lib/protocols/netbios.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/lib/protocols/netbios.c b/src/lib/protocols/netbios.c index 66224557a..6ca691c7e 100644 --- a/src/lib/protocols/netbios.c +++ b/src/lib/protocols/netbios.c @@ -39,25 +39,25 @@ struct netbios_header { /* The function below has been inherited by tcpdump */ int ndpi_netbios_name_interpret(char *in, size_t inlen, char *out, u_int out_len) { - int ret = 0, len; + int ret = 0, len, idx = inlen; char *b; len = (*in++)/2; b = out; *out = 0; - if(len > (out_len-1) || len < 1 || 2*len > inlen) + if((len > (out_len-1)) || (len < 1) || ((2*len) > inlen)) return(-1); - while (len--) { - if(in[0] < 'A' || in[0] > 'P' || in[1] < 'A' || in[1] > 'P') { + while(len--) { + if((idx < 2) || (in[0] < 'A') || (in[0] > 'P') || (in[1] < 'A') || (in[1] > 'P')) { *out = 0; break; } - *out = ((in[0]-'A')<<4) + (in[1]-'A'); + *out = ((in[0] - 'A') << 4) + (in[1] - 'A'); - in += 2; + in += 2, idx -= 2; if(isprint(*out)) out++, ret++; |