Author: mjordan Date: Thu Apr 9 07:47:09 2015 New Revision: 434469 URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=434469 Log: 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) Modified: branches/11/channels/chan_skinny.c branches/11/funcs/func_curl.c branches/11/include/asterisk/cel.h branches/11/main/cel.c branches/11/main/enum.c branches/11/main/event.c branches/11/main/indications.c branches/11/main/presencestate.c branches/11/main/security_events.c branches/11/main/translate.c branches/11/main/udptl.c Modified: branches/11/channels/chan_skinny.c URL: http://svnview.digium.com/svn/asterisk/branches/11/channels/chan_skinny.c?view=diff&rev=434469&r1=434468&r2=434469 ============================================================================== --- branches/11/channels/chan_skinny.c (original) +++ branches/11/channels/chan_skinny.c Thu Apr 9 07:47:09 2015 @@ -2229,6 +2229,7 @@ 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 @@ 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; Modified: branches/11/funcs/func_curl.c URL: http://svnview.digium.com/svn/asterisk/branches/11/funcs/func_curl.c?view=diff&rev=434469&r1=434468&r2=434469 ============================================================================== --- branches/11/funcs/func_curl.c (original) +++ branches/11/funcs/func_curl.c Thu Apr 9 07:47:09 2015 @@ -171,7 +171,7 @@ #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); Modified: branches/11/include/asterisk/cel.h URL: http://svnview.digium.com/svn/asterisk/branches/11/include/asterisk/cel.h?view=diff&rev=434469&r1=434468&r2=434469 ============================================================================== --- branches/11/include/asterisk/cel.h (original) +++ branches/11/include/asterisk/cel.h Thu Apr 9 07:47:09 2015 @@ -53,6 +53,8 @@ * \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 @@ AST_CEL_FORWARD = 25, }; -/*! +/*! * \brief Check to see if CEL is enabled * * \since 1.8 Modified: branches/11/main/cel.c URL: http://svnview.digium.com/svn/asterisk/branches/11/main/cel.c?view=diff&rev=434469&r1=434468&r2=434469 ============================================================================== --- branches/11/main/cel.c (original) +++ branches/11/main/cel.c Thu Apr 9 07:47:09 2015 @@ -123,7 +123,7 @@ * \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 @@ 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 @@ 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_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"; } Modified: branches/11/main/enum.c URL: http://svnview.digium.com/svn/asterisk/branches/11/main/enum.c?view=diff&rev=434469&r1=434468&r2=434469 ============================================================================== --- branches/11/main/enum.c (original) +++ branches/11/main/enum.c Thu Apr 9 07:47:09 2015 @@ -250,7 +250,7 @@ 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; Modified: branches/11/main/event.c URL: http://svnview.digium.com/svn/asterisk/branches/11/main/event.c?view=diff&rev=434469&r1=434468&r2=434469 ============================================================================== --- branches/11/main/event.c (original) +++ branches/11/main/event.c Thu Apr 9 07:47:09 2015 @@ -295,7 +295,7 @@ 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 @@ 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 @@ 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; - break; - } - } - - if (event_type == -1) + found = 1; + break; + } + } + + 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 *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; } Modified: branches/11/main/indications.c URL: http://svnview.digium.com/svn/asterisk/branches/11/main/indications.c?view=diff&rev=434469&r1=434468&r2=434469 ============================================================================== --- branches/11/main/indications.c (original) +++ branches/11/main/indications.c Thu Apr 9 07:47:09 2015 @@ -360,14 +360,13 @@ 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; Modified: branches/11/main/presencestate.c URL: http://svnview.digium.com/svn/asterisk/branches/11/main/presencestate.c?view=diff&rev=434469&r1=434468&r2=434469 ============================================================================== --- branches/11/main/presencestate.c (original) +++ branches/11/main/presencestate.c Thu Apr 9 07:47:09 2015 @@ -240,7 +240,7 @@ state = ast_presence_state_helper(provider, &subtype, &message, 0); - if (state < 0) { + if (state == AST_PRESENCE_INVALID) { return; } Modified: branches/11/main/security_events.c URL: http://svnview.digium.com/svn/asterisk/branches/11/main/security_events.c?view=diff&rev=434469&r1=434468&r2=434469 ============================================================================== --- branches/11/main/security_events.c (original) +++ branches/11/main/security_events.c Thu Apr 9 07:47:09 2015 @@ -427,7 +427,7 @@ 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 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; } Modified: branches/11/main/translate.c URL: http://svnview.digium.com/svn/asterisk/branches/11/main/translate.c?view=diff&rev=434469&r1=434468&r2=434469 ============================================================================== --- branches/11/main/translate.c (original) +++ branches/11/main/translate.c Thu Apr 9 07:47:09 2015 @@ -263,9 +263,6 @@ */ static struct translator_path *matrix_get(unsigned int x, unsigned int y) { - if (!(x >= 0 && y >= 0)) { - return NULL; - } return __matrix[x] + y; } Modified: branches/11/main/udptl.c URL: http://svnview.digium.com/svn/asterisk/branches/11/main/udptl.c?view=diff&rev=434469&r1=434468&r2=434469 ============================================================================== --- branches/11/main/udptl.c (original) +++ branches/11/main/udptl.c Thu Apr 9 07:47:09 2015 @@ -320,8 +320,7 @@ } /* 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 @@ 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 @@ 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; -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits