clang compiler warnings: Fix autological comparisons
This fixes autological comparison warnings in the following: * chan_skinny: letohl may return a signed or unsigned value, depending on the macro chosen * func_curl: Provide a specific cast to CURLoption to prevent mismatch * cel: Fix enum comparisons where the enum can never be negative * enum: Fix comparison of return result of dn_expand, which returns a signed int value * event: Fix enum comparisons where the enum can never be negative * indications: tone_data.freq1 and freq2 are unsigned, and hence can never be negative * presencestate: Use the actual enum value for INVALID state * security_events: Fix enum comparisons where the enum can never be negative * udptl: Don't bother to check if the return value from encode_length is less than 0, as it returns an unsigned int * translate: Since the parameters are unsigned int, don't bother checking to see if they are negative. The cast to unsigned int would already blow past the matrix bounds. Review: https://reviewboard.asterisk.org/r/4533 ASTERISK-24917 Reported by: dkdegroot patches: rb4533.patch submitted by dkdegroot (License 6600) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@434469 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
parent
6b399f72dc
commit
7c4efc490a
11 changed files with 33 additions and 31 deletions
|
@ -2229,6 +2229,7 @@ static char *callstate2str(int ind)
|
|||
static int transmit_response_bysession(struct skinnysession *s, struct skinny_req *req)
|
||||
{
|
||||
int res = 0;
|
||||
unsigned long len;
|
||||
|
||||
if (!s) {
|
||||
ast_log(LOG_WARNING, "Asked to transmit to a non-existent session!\n");
|
||||
|
@ -2237,7 +2238,13 @@ static int transmit_response_bysession(struct skinnysession *s, struct skinny_re
|
|||
|
||||
ast_mutex_lock(&s->lock);
|
||||
|
||||
if ((letohl(req->len) > SKINNY_MAX_PACKET) || (letohl(req->len) < 0)) {
|
||||
/* Don't optimize out assigning letohl() to len. It is necessary to guarantee that
|
||||
* the comparison will always catch invalid values.
|
||||
* letohl() may or may not return a signed value depending upon which definition
|
||||
* is used.
|
||||
*/
|
||||
len = letohl(req->len);
|
||||
if (SKINNY_MAX_PACKET < len) {
|
||||
ast_log(LOG_WARNING, "transmit_response: the length of the request (%d) is out of bounds (%d)\n", letohl(req->len), SKINNY_MAX_PACKET);
|
||||
ast_mutex_unlock(&s->lock);
|
||||
return -1;
|
||||
|
|
|
@ -171,7 +171,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
|||
#define CURLVERSION_ATLEAST(a,b,c) \
|
||||
((LIBCURL_VERSION_MAJOR > (a)) || ((LIBCURL_VERSION_MAJOR == (a)) && (LIBCURL_VERSION_MINOR > (b))) || ((LIBCURL_VERSION_MAJOR == (a)) && (LIBCURL_VERSION_MINOR == (b)) && (LIBCURL_VERSION_PATCH >= (c))))
|
||||
|
||||
#define CURLOPT_SPECIAL_HASHCOMPAT -500
|
||||
#define CURLOPT_SPECIAL_HASHCOMPAT ((CURLoption) -500)
|
||||
|
||||
static void curlds_free(void *data);
|
||||
|
||||
|
|
|
@ -53,6 +53,8 @@ enum ast_cel_ama_flag {
|
|||
* \brief CEL event types
|
||||
*/
|
||||
enum ast_cel_event_type {
|
||||
AST_CEL_INVALID_VALUE = -1,
|
||||
AST_CEL_ALL = 0,
|
||||
/*! \brief channel birth */
|
||||
AST_CEL_CHANNEL_START = 1,
|
||||
/*! \brief channel end */
|
||||
|
@ -105,7 +107,7 @@ enum ast_cel_event_type {
|
|||
AST_CEL_FORWARD = 25,
|
||||
};
|
||||
|
||||
/*!
|
||||
/*!
|
||||
* \brief Check to see if CEL is enabled
|
||||
*
|
||||
* \since 1.8
|
||||
|
|
15
main/cel.c
15
main/cel.c
|
@ -123,7 +123,7 @@ static char cel_dateformat[256];
|
|||
* \brief Map of ast_cel_event_type to strings
|
||||
*/
|
||||
static const char * const cel_event_types[CEL_MAX_EVENT_IDS] = {
|
||||
[0] = "ALL",
|
||||
[AST_CEL_ALL] = "ALL",
|
||||
[AST_CEL_CHANNEL_START] = "CHAN_START",
|
||||
[AST_CEL_CHANNEL_END] = "CHAN_END",
|
||||
[AST_CEL_ANSWER] = "ANSWER",
|
||||
|
@ -256,15 +256,12 @@ enum ast_cel_event_type ast_cel_str_to_event_type(const char *name)
|
|||
unsigned int i;
|
||||
|
||||
for (i = 0; i < ARRAY_LEN(cel_event_types); i++) {
|
||||
if (!cel_event_types[i]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!strcasecmp(name, cel_event_types[i])) {
|
||||
if (cel_event_types[i] && !strcasecmp(name, cel_event_types[i])) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
ast_log(LOG_ERROR, "Unknown event name '%s'\n", name);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -288,10 +285,10 @@ static void parse_events(const char *val)
|
|||
|
||||
event_type = ast_cel_str_to_event_type(cur_event);
|
||||
|
||||
if (event_type == 0) {
|
||||
if (event_type == AST_CEL_ALL) {
|
||||
/* All events */
|
||||
eventset = (int64_t) -1;
|
||||
} else if (event_type == -1) {
|
||||
} else if (event_type == AST_CEL_INVALID_VALUE) {
|
||||
ast_log(LOG_WARNING, "Unknown event name '%s'\n",
|
||||
cur_event);
|
||||
} else {
|
||||
|
@ -416,7 +413,7 @@ const char *ast_cel_get_type_name(enum ast_cel_event_type type)
|
|||
|
||||
const char *ast_cel_get_ama_flag_name(enum ast_cel_ama_flag flag)
|
||||
{
|
||||
if (flag < 0 || flag >= ARRAY_LEN(cel_ama_flags)) {
|
||||
if (flag >= ARRAY_LEN(cel_ama_flags)) {
|
||||
ast_log(LOG_WARNING, "Invalid AMA flag: %u\n", flag);
|
||||
return "Unknown";
|
||||
}
|
||||
|
|
|
@ -250,7 +250,7 @@ struct ebl_context {
|
|||
static int ebl_callback(void *context, unsigned char *answer, int len, unsigned char *fullanswer)
|
||||
{
|
||||
struct ebl_context *c = context;
|
||||
unsigned int i;
|
||||
int i;
|
||||
|
||||
c->pos = 0; /* default to empty */
|
||||
c->separator[0] = 0;
|
||||
|
|
|
@ -295,7 +295,7 @@ const char *ast_event_get_type_name(const struct ast_event *event)
|
|||
|
||||
type = ast_event_get_type(event);
|
||||
|
||||
if (type < 0 || type >= ARRAY_LEN(event_names)) {
|
||||
if (type >= ARRAY_LEN(event_names)) {
|
||||
ast_log(LOG_ERROR, "Invalid event type - '%u'\n", type);
|
||||
return "";
|
||||
}
|
||||
|
@ -725,6 +725,7 @@ void ast_event_report_subs(const struct ast_event_sub *event_sub)
|
|||
struct ast_event *event;
|
||||
struct ast_event_sub *sub;
|
||||
enum ast_event_type event_type = -1;
|
||||
int found = 0;
|
||||
struct ast_event_ie_val *ie_val;
|
||||
|
||||
if (event_sub->type != AST_EVENT_SUB)
|
||||
|
@ -733,12 +734,14 @@ void ast_event_report_subs(const struct ast_event_sub *event_sub)
|
|||
AST_LIST_TRAVERSE(&event_sub->ie_vals, ie_val, entry) {
|
||||
if (ie_val->ie_type == AST_EVENT_IE_EVENTTYPE) {
|
||||
event_type = ie_val->payload.uint;
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (event_type == -1)
|
||||
if (!found) {
|
||||
return;
|
||||
}
|
||||
|
||||
AST_RWDLLIST_RDLOCK(&ast_event_subs[event_type]);
|
||||
AST_RWDLLIST_TRAVERSE(&ast_event_subs[event_type], sub, entry) {
|
||||
|
@ -763,7 +766,7 @@ struct ast_event_sub *ast_event_subscribe_new(enum ast_event_type type,
|
|||
{
|
||||
struct ast_event_sub *sub;
|
||||
|
||||
if (type < 0 || type >= AST_EVENT_TOTAL) {
|
||||
if (type >= AST_EVENT_TOTAL) {
|
||||
ast_log(LOG_ERROR, "%u is an invalid type!\n", type);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -360,14 +360,13 @@ int ast_playtones_start(struct ast_channel *chan, int vol, const char *playlst,
|
|||
|
||||
if (tone_data.midinote) {
|
||||
/* midi notes must be between 0 and 127 */
|
||||
|
||||
if (tone_data.freq1 >= 0 && tone_data.freq1 <= 127) {
|
||||
if (tone_data.freq1 <= 127) {
|
||||
tone_data.freq1 = midi_tohz[tone_data.freq1];
|
||||
} else {
|
||||
tone_data.freq1 = 0;
|
||||
}
|
||||
|
||||
if (tone_data.freq2 >= 0 && tone_data.freq2 <= 127) {
|
||||
if (tone_data.freq2 <= 127) {
|
||||
tone_data.freq2 = midi_tohz[tone_data.freq2];
|
||||
} else {
|
||||
tone_data.freq2 = 0;
|
||||
|
|
|
@ -240,7 +240,7 @@ static void do_presence_state_change(const char *provider)
|
|||
|
||||
state = ast_presence_state_helper(provider, &subtype, &message, 0);
|
||||
|
||||
if (state < 0) {
|
||||
if (state == AST_PRESENCE_INVALID) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -427,7 +427,7 @@ const char *ast_security_event_severity_get_name(
|
|||
|
||||
static int check_event_type(const enum ast_security_event_type event_type)
|
||||
{
|
||||
if (event_type < 0 || event_type >= AST_SECURITY_EVENT_NUM_TYPES) {
|
||||
if (event_type >= AST_SECURITY_EVENT_NUM_TYPES) {
|
||||
ast_log(LOG_ERROR, "Invalid security event type %u\n", event_type);
|
||||
return -1;
|
||||
}
|
||||
|
@ -680,7 +680,7 @@ int ast_security_event_report(const struct ast_security_event_common *sec)
|
|||
{
|
||||
int res;
|
||||
|
||||
if (sec->event_type < 0 || sec->event_type >= AST_SECURITY_EVENT_NUM_TYPES) {
|
||||
if (sec->event_type >= AST_SECURITY_EVENT_NUM_TYPES) {
|
||||
ast_log(LOG_ERROR, "Invalid security event type\n");
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -263,9 +263,6 @@ static void matrix_clear(void)
|
|||
*/
|
||||
static struct translator_path *matrix_get(unsigned int x, unsigned int y)
|
||||
{
|
||||
if (!(x >= 0 && y >= 0)) {
|
||||
return NULL;
|
||||
}
|
||||
return __matrix[x] + y;
|
||||
}
|
||||
|
||||
|
|
|
@ -320,8 +320,7 @@ static int encode_open_type(const struct ast_udptl *udptl, uint8_t *buf, unsigne
|
|||
}
|
||||
/* Encode the open type */
|
||||
for (octet_idx = 0; ; num_octets -= enclen, octet_idx += enclen) {
|
||||
if ((enclen = encode_length(buf, len, num_octets)) < 0)
|
||||
return -1;
|
||||
enclen = encode_length(buf, len, num_octets);
|
||||
if (enclen + *len > buflen) {
|
||||
ast_log(LOG_ERROR, "UDPTL (%s): Buffer overflow detected (%u + %u > %u)\n",
|
||||
LOG_TAG(udptl), enclen, *len, buflen);
|
||||
|
@ -604,8 +603,7 @@ static int udptl_build_packet(struct ast_udptl *s, uint8_t *buf, unsigned int bu
|
|||
buf[len++] = 0x00;
|
||||
/* The number of entries will always be zero, so it is pointless allowing
|
||||
for the fragmented case here. */
|
||||
if (encode_length(buf, &len, 0) < 0)
|
||||
return -1;
|
||||
encode_length(buf, &len, 0);
|
||||
break;
|
||||
case UDPTL_ERROR_CORRECTION_REDUNDANCY:
|
||||
/* Encode the error recovery type */
|
||||
|
@ -616,8 +614,7 @@ static int udptl_build_packet(struct ast_udptl *s, uint8_t *buf, unsigned int bu
|
|||
entries = s->tx_seq_no;
|
||||
/* The number of entries will always be small, so it is pointless allowing
|
||||
for the fragmented case here. */
|
||||
if (encode_length(buf, &len, entries) < 0)
|
||||
return -1;
|
||||
encode_length(buf, &len, entries);
|
||||
/* Encode the elements */
|
||||
for (i = 0; i < entries; i++) {
|
||||
j = (entry - i - 1) & UDPTL_BUF_MASK;
|
||||
|
|
Loading…
Reference in a new issue