summaryrefslogtreecommitdiff
path: root/channels
diff options
context:
space:
mode:
authorKinsey Moore <kmoore@digium.com>2012-07-31 20:21:43 +0000
committerKinsey Moore <kmoore@digium.com>2012-07-31 20:21:43 +0000
commit9b16c8b0f6c3b6310e303411421bfcb16b26c3c4 (patch)
tree273c31a834a21bd2239ec6b83cd35c602ea25d26 /channels
parent6c23a60f802e7708389b1a6463a40dc0500512bd (diff)
Clean up and ensure proper usage of alloca()
This replaces all calls to alloca() with ast_alloca() which calls gcc's __builtin_alloca() to avoid BSD semantics and removes all NULL checks on memory allocated via ast_alloca() and ast_strdupa(). (closes issue ASTERISK-20125) Review: https://reviewboard.asterisk.org/r/2032/ Patch-by: Walter Doekes (wdoekes) ........ Merged revisions 370642 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 370643 from http://svn.asterisk.org/svn/asterisk/branches/10 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@370655 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_alsa.c4
-rw-r--r--channels/chan_dahdi.c2
-rw-r--r--channels/chan_gtalk.c20
-rw-r--r--channels/chan_iax2.c23
-rw-r--r--channels/chan_jingle.c18
-rw-r--r--channels/chan_sip.c13
-rw-r--r--channels/sig_analog.c2
-rw-r--r--channels/sig_pri.c2
-rw-r--r--channels/sig_ss7.c2
9 files changed, 42 insertions, 44 deletions
diff --git a/channels/chan_alsa.c b/channels/chan_alsa.c
index e535a3adc..71d51adf4 100644
--- a/channels/chan_alsa.c
+++ b/channels/chan_alsa.c
@@ -182,7 +182,7 @@ static snd_pcm_t *alsa_card_init(char *dev, snd_pcm_stream_t stream)
ast_debug(1, "Opening device %s in %s mode\n", dev, (stream == SND_PCM_STREAM_CAPTURE) ? "read" : "write");
}
- hwparams = alloca(snd_pcm_hw_params_sizeof());
+ hwparams = ast_alloca(snd_pcm_hw_params_sizeof());
memset(hwparams, 0, snd_pcm_hw_params_sizeof());
snd_pcm_hw_params_any(handle, hwparams);
@@ -223,7 +223,7 @@ static snd_pcm_t *alsa_card_init(char *dev, snd_pcm_stream_t stream)
if (err < 0)
ast_log(LOG_ERROR, "Couldn't set the new hw params: %s\n", snd_strerror(err));
- swparams = alloca(snd_pcm_sw_params_sizeof());
+ swparams = ast_alloca(snd_pcm_sw_params_sizeof());
memset(swparams, 0, snd_pcm_sw_params_sizeof());
snd_pcm_sw_params_current(handle, swparams);
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index 28212e5ee..c0afc576a 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -4181,7 +4181,7 @@ static void dahdi_r2_on_call_disconnect(openr2_chan_t *r2chan, openr2_call_disco
snprintf(cause_str, sizeof(cause_str), "R2 DISCONNECT (%s)", openr2_proto_get_disconnect_string(cause));
datalen += strlen(cause_str);
- cause_code = alloca(datalen);
+ cause_code = ast_alloca(datalen);
cause_code->ast_cause = dahdi_r2_cause_to_ast_cause(cause);
ast_copy_string(cause_code->chan_name, ast_channel_name(p->owner), AST_CHANNEL_NAME);
ast_copy_string(cause_code->code, cause_str, datalen + 1 - sizeof(*cause_code));
diff --git a/channels/chan_gtalk.c b/channels/chan_gtalk.c
index e1d3ab491..9864f7884 100644
--- a/channels/chan_gtalk.c
+++ b/channels/chan_gtalk.c
@@ -1908,15 +1908,17 @@ static struct ast_channel *gtalk_request(const char *type, struct ast_format_cap
if (data) {
s = ast_strdupa(data);
- if (s) {
- sender = strsep(&s, "/");
- if (sender && (sender[0] != '\0')) {
- to = strsep(&s, "/");
- }
- if (!to) {
- ast_log(LOG_ERROR, "Bad arguments in Gtalk Dialstring: %s\n", data);
- return NULL;
- }
+ sender = strsep(&s, "/");
+ if (sender && (sender[0] != '\0')) {
+ to = strsep(&s, "/");
+ }
+ if (!to) {
+ ast_log(LOG_ERROR, "Bad arguments in Gtalk Dialstring: %s\n", data);
+ return NULL;
+ }
+ if (!to) {
+ ast_log(LOG_ERROR, "Bad arguments in Gtalk Dialstring: %s\n", (char*) data);
+ return NULL;
}
}
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index 70318a14c..51e777cd0 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -3084,10 +3084,7 @@ static int try_firmware(char *s)
unsigned char sum[16], buf[1024];
char *s2, *last;
- if (!(s2 = alloca(strlen(s) + 100))) {
- ast_log(LOG_WARNING, "Alloca failed!\n");
- return -1;
- }
+ s2 = ast_alloca(strlen(s) + 100);
last = strrchr(s, '/');
if (last)
@@ -6340,7 +6337,7 @@ static int decode_frame(ast_aes_decrypt_key *dcx, struct ast_iax2_full_hdr *fh,
int padding;
unsigned char *workspace;
- workspace = alloca(*datalen);
+ workspace = ast_alloca(*datalen);
memset(f, 0, sizeof(*f));
if (ntohs(fh->scallno) & IAX_FLAG_FULL) {
struct ast_iax2_full_enc_hdr *efh = (struct ast_iax2_full_enc_hdr *)fh;
@@ -6386,9 +6383,7 @@ static int encrypt_frame(ast_aes_encrypt_key *ecx, struct ast_iax2_full_hdr *fh,
{
int padding;
unsigned char *workspace;
- workspace = alloca(*datalen + 32);
- if (!workspace)
- return -1;
+ workspace = ast_alloca(*datalen + 32);
if (ntohs(fh->scallno) & IAX_FLAG_FULL) {
struct ast_iax2_full_enc_hdr *efh = (struct ast_iax2_full_enc_hdr *)fh;
if (iaxdebug)
@@ -10016,9 +10011,9 @@ static int socket_process_helper(struct iax2_thread *thread)
char *using_prefs = "mine";
/* allocate an iax_frame with 4096 bytes of data buffer */
- fr = alloca(sizeof(*fr) + 4096);
+ fr = ast_alloca(sizeof(*fr) + 4096);
memset(fr, 0, sizeof(*fr));
- fr->afdatalen = 4096; /* From alloca() above */
+ fr->afdatalen = 4096; /* From ast_alloca() above */
/* Copy frequently used parameters to the stack */
res = thread->buf_len;
@@ -10236,7 +10231,7 @@ static int socket_process_helper(struct iax2_thread *thread)
/* add length of subclass */
data_size += strlen(subclass);
- cause_code = alloca(data_size);
+ cause_code = ast_alloca(data_size);
ast_copy_string(cause_code->chan_name, ast_channel_name(iaxs[fr->callno]->owner), AST_CHANNEL_NAME);
cause_code->ast_cause = ies.causecode;
@@ -12470,9 +12465,7 @@ static int peer_set_srcaddr(struct iax2_peer *peer, const char *srcaddr)
char *host;
char *portstr;
- if (!(tmp = ast_strdupa(srcaddr)))
- return -1;
-
+ tmp = ast_strdupa(srcaddr);
ast_sockaddr_split_hostport(tmp, &host, &portstr, 0);
if (portstr) {
@@ -12935,7 +12928,7 @@ static struct iax2_user *build_user(const char *name, struct ast_variable *v, st
ast_append_acl(v->name, v->value, &user->acl, NULL, &subscribe_acl_change);
} else if (!strcasecmp(v->name, "setvar")) {
varname = ast_strdupa(v->value);
- if (varname && (varval = strchr(varname,'='))) {
+ if ((varval = strchr(varname, '='))) {
*varval = '\0';
varval++;
if((tmpvar = ast_variable_new(varname, varval, ""))) {
diff --git a/channels/chan_jingle.c b/channels/chan_jingle.c
index 4f4af23fc..a3adb653a 100644
--- a/channels/chan_jingle.c
+++ b/channels/chan_jingle.c
@@ -1553,14 +1553,16 @@ static struct ast_channel *jingle_request(const char *type, struct ast_format_ca
if (data) {
s = ast_strdupa(data);
- if (s) {
- sender = strsep(&s, "/");
- if (sender && (sender[0] != '\0'))
- to = strsep(&s, "/");
- if (!to) {
- ast_log(LOG_ERROR, "Bad arguments in Jingle Dialstring: %s\n", data);
- return NULL;
- }
+ sender = strsep(&s, "/");
+ if (sender && (sender[0] != '\0'))
+ to = strsep(&s, "/");
+ if (!to) {
+ ast_log(LOG_ERROR, "Bad arguments in Jingle Dialstring: %s\n", data);
+ return NULL;
+ }
+ if (!to) {
+ ast_log(LOG_ERROR, "Bad arguments in Jingle Dialstring: %s\n", (char*) data);
+ return NULL;
}
}
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 6c2ff43fd..367aeee8e 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -5657,7 +5657,7 @@ static int create_addr_from_peer(struct sip_pvt *dialog, struct sip_peer *peer)
/* Change the dialog callid. */
callid_size = strlen(tmpcall) + strlen(peer->fromdomain) + 2;
- new_callid = alloca(callid_size);
+ new_callid = ast_alloca(callid_size);
snprintf(new_callid, callid_size, "%s@%s", tmpcall, peer->fromdomain);
change_callid_pvt(dialog, new_callid);
}
@@ -13829,7 +13829,7 @@ static void state_notify_build_xml(struct state_notify_data *data, int full, con
cid_num = S_COR(ast_channel_caller(caller)->id.number.valid,
ast_channel_caller(caller)->id.number.str, "");
need = strlen(cid_num) + strlen(p->fromdomain) + sizeof("sip:@");
- remote_target = alloca(need);
+ remote_target = ast_alloca(need);
snprintf(remote_target, need, "sip:%s@%s", cid_num, p->fromdomain);
remote_display = ast_strdupa(S_COR(ast_channel_caller(caller)->id.name.valid,
@@ -13838,7 +13838,7 @@ static void state_notify_build_xml(struct state_notify_data *data, int full, con
connected_num = S_COR(ast_channel_connected(caller)->id.number.valid,
ast_channel_connected(caller)->id.number.str, "");
need = strlen(connected_num) + strlen(p->fromdomain) + sizeof("sip:@");
- local_target = alloca(need);
+ local_target = ast_alloca(need);
snprintf(local_target, need, "sip:%s@%s", connected_num, p->fromdomain);
local_display = ast_strdupa(S_COR(ast_channel_connected(caller)->id.name.valid,
@@ -25025,7 +25025,8 @@ static int local_attended_transfer(struct sip_pvt *transferer, struct sip_dual *
payload_size = ast_connected_line_build_data(connected_line_data,
sizeof(connected_line_data), &connected_to_target, NULL);
frame_size = payload_size + sizeof(*frame_payload);
- if (payload_size != -1 && (frame_payload = alloca(frame_size))) {
+ if (payload_size != -1) {
+ frame_payload = ast_alloca(frame_size);
frame_payload->payload_size = payload_size;
memcpy(frame_payload->payload, connected_line_data, payload_size);
frame_payload->action = AST_FRAME_READ_ACTION_CONNECTED_LINE_MACRO;
@@ -27037,7 +27038,7 @@ static int handle_incoming(struct sip_pvt *p, struct sip_request *req, struct as
int data_size = sizeof(*cause_code);
/* size of the string making up the cause code is "SIP " + cause length */
data_size += 4 + strlen(REQ_OFFSET_TO_STR(req, rlpart2));
- cause_code = alloca(data_size);
+ cause_code = ast_alloca(data_size);
ast_copy_string(cause_code->chan_name, ast_channel_name(p->owner), AST_CHANNEL_NAME);
@@ -31734,7 +31735,7 @@ static int sip_addheader(struct ast_channel *chan, const char *data)
}
if (ok) {
size_t len = strlen(inbuf);
- subbuf = alloca(len + 1);
+ subbuf = ast_alloca(len + 1);
ast_get_encoded_str(inbuf, subbuf, len + 1);
pbx_builtin_setvar_helper(chan, varbuf, subbuf);
if (sipdebug) {
diff --git a/channels/sig_analog.c b/channels/sig_analog.c
index 608f82b27..2b81eb460 100644
--- a/channels/sig_analog.c
+++ b/channels/sig_analog.c
@@ -2734,7 +2734,7 @@ static struct ast_frame *__analog_handle_event(struct analog_pvt *p, struct ast_
data_size += 7;
subclass = analog_event2str(res);
data_size += strlen(subclass);
- cause_code = alloca(data_size);
+ cause_code = ast_alloca(data_size);
cause_code->ast_cause = AST_CAUSE_NORMAL_CLEARING;
ast_copy_string(cause_code->chan_name, ast_channel_name(ast), AST_CHANNEL_NAME);
snprintf(cause_code->code, data_size - sizeof(*cause_code) + 1, "ANALOG %s", subclass);
diff --git a/channels/sig_pri.c b/channels/sig_pri.c
index 30d11e755..4bb4066e7 100644
--- a/channels/sig_pri.c
+++ b/channels/sig_pri.c
@@ -1286,7 +1286,7 @@ static void pri_queue_pvt_cause_data(struct sig_pri_span *pri, int chanpos, cons
chan = pri->pvts[chanpos]->owner;
if (chan) {
int datalen = sizeof(*cause_code) + strlen(cause);
- cause_code = alloca(datalen);
+ cause_code = ast_alloca(datalen);
cause_code->ast_cause = ast_cause;
ast_copy_string(cause_code->chan_name, ast_channel_name(chan), AST_CHANNEL_NAME);
ast_copy_string(cause_code->code, cause, datalen + 1 - sizeof(*cause_code));
diff --git a/channels/sig_ss7.c b/channels/sig_ss7.c
index 810a0d5f2..1e4e7f308 100644
--- a/channels/sig_ss7.c
+++ b/channels/sig_ss7.c
@@ -389,7 +389,7 @@ static void ss7_queue_pvt_cause_data(struct ast_channel *owner, const char *caus
struct ast_control_pvt_cause_code *cause_code;
int datalen = sizeof(*cause_code) + strlen(cause);
- cause_code = alloca(datalen);
+ cause_code = ast_alloca(datalen);
cause_code->ast_cause = ast_cause;
ast_copy_string(cause_code->chan_name, ast_channel_name(owner), AST_CHANNEL_NAME);
ast_copy_string(cause_code->code, cause, datalen + 1 - sizeof(*cause_code));