diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-05-18 19:35:55 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-05-18 19:35:55 +0000 |
commit | da196b75b38646d68c1b285c67698af6581890b8 (patch) | |
tree | bdac14bdd409540509ba8bb878112409192d43c0 | |
parent | d5a76b5b3280880317355244d6815c28e6e4d712 (diff) |
use unsigned counters for handling answer/IE lengths while processing DNS results (issue #7174)
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.2@28337 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | enum.c | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -80,27 +80,29 @@ struct naptr { } __attribute__ ((__packed__)); /*--- parse_ie: Parse NAPTR record information elements */ -static int parse_ie(char *data, int maxdatalen, char *src, int srclen) +static unsigned int parse_ie(char *data, unsigned int maxdatalen, char *src, unsigned int srclen) { - int len, olen; + unsigned int len, olen; - len = olen = (int)src[0]; + len = olen = (unsigned int) src[0]; src++; srclen--; - if (len > srclen || len < 0 ) { + + if (len > srclen) { ast_log(LOG_WARNING, "ENUM parsing failed: Wanted %d characters, got %d\n", len, srclen); return -1; } + if (len > maxdatalen) len = maxdatalen; memcpy(data, src, len); + return olen + 1; } /*--- parse_naptr: Parse DNS NAPTR record used in ENUM ---*/ static int parse_naptr(char *dst, int dstsize, char *tech, int techsize, char *answer, int len, char *naptrinput) { - char tech_return[80]; char *oanswer = answer; char flags[512] = ""; @@ -344,7 +346,7 @@ static int txt_callback(void *context, char *answer, int len, char *fullanswer) /*--- enum_callback: Callback from ENUM lookup function */ static int enum_callback(void *context, char *answer, int len, char *fullanswer) { - struct enum_context *c = (struct enum_context *)context; + struct enum_context *c = (struct enum_context *)context; void *p = NULL; int res; |