aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_skinny.c
diff options
context:
space:
mode:
authormvanbaak <mvanbaak@f38db490-d61c-443f-a65b-d21fe96a405b>2008-08-03 00:00:06 +0000
committermvanbaak <mvanbaak@f38db490-d61c-443f-a65b-d21fe96a405b>2008-08-03 00:00:06 +0000
commit3ee450b7384546d3dba163bcf06d9dd61e8fc0ec (patch)
tree038e9b6a424187004f8cde142f5bb3fefde57117 /channels/chan_skinny.c
parent145c42dfdba44663b06e9b647ed5a8c88b462209 (diff)
Dont coredump on register of non-configured devices
(closes issue #13224) Reported by: mvanbaak Patches: noncon.diff uploaded by wedhorn (license 30) with whitespace fixes by me Tested by: wedhorn, mvanbaak git-svn-id: http://svn.digium.com/svn/asterisk/trunk@135371 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_skinny.c')
-rw-r--r--channels/chan_skinny.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c
index 5afeabb72..e0b9de1ed 100644
--- a/channels/chan_skinny.c
+++ b/channels/chan_skinny.c
@@ -4179,8 +4179,28 @@ static int handle_register_message(struct skinny_req *req, struct skinnysession
return -1;
snprintf(req->data.regrej.errMsg, sizeof(req->data.regrej.errMsg), "No Authority: %s", name);
- d->session = s;
- transmit_response(d, req);
+
+ /* transmit_respons in line as we don't have a valid d */
+ ast_mutex_lock(&s->lock);
+
+ if (letohl(req->len > SKINNY_MAX_PACKET) || letohl(req->len < 0)) {
+ ast_log(LOG_WARNING, "transmit_response: the length of the request is out of bounds\n");
+ ast_mutex_unlock(&s->lock);
+ return -1;
+ }
+
+ memset(s->outbuf, 0, sizeof(s->outbuf));
+ memcpy(s->outbuf, req, skinny_header_size);
+ memcpy(s->outbuf+skinny_header_size, &req->data, letohl(req->len));
+
+ res = write(s->fd, s->outbuf, letohl(req->len)+8);
+
+ if (res != letohl(req->len)+8) {
+ ast_log(LOG_WARNING, "Transmit: write only sent %d out of %d bytes: %s\n", res, letohl(req->len)+8, strerror(errno));
+ }
+
+ ast_mutex_unlock(&s->lock);
+
return 0;
}
ast_verb(3, "Device '%s' successfully registered\n", name);