aboutsummaryrefslogtreecommitdiffstats
path: root/channels
diff options
context:
space:
mode:
authorqwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-08-07 18:25:15 +0000
committerqwell <qwell@f38db490-d61c-443f-a65b-d21fe96a405b>2007-08-07 18:25:15 +0000
commit7b323277344d121d147a15d37ef1f77c1cbf3758 (patch)
tree7a332b01cade75ac3a6ae246973e692610b2ab85 /channels
parent502985569bfa8419895fbb47a5054829f883db26 (diff)
Properly check the capabilities count to avoid a segfault.
(ASA-2007-019) git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@78375 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels')
-rw-r--r--channels/chan_skinny.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c
index 2bde2e2d8..3bbc1bae2 100644
--- a/channels/chan_skinny.c
+++ b/channels/chan_skinny.c
@@ -202,9 +202,11 @@ struct station_capabilities {
} payloads;
};
+#define SKINNY_MAX_CAPABILITIES 18
+
struct capabilities_res_message {
uint32_t count;
- struct station_capabilities caps[18];
+ struct station_capabilities caps[SKINNY_MAX_CAPABILITIES];
};
#define SPEED_DIAL_STAT_REQ_MESSAGE 0x000A
@@ -3459,11 +3461,15 @@ static int handle_capabilities_res_message(struct skinny_req *req, struct skinny
{
struct skinny_device *d = s->device;
struct skinny_line *l;
- int count = 0;
+ uint32_t count = 0;
int codecs = 0;
int i;
count = letohl(req->data.caps.count);
+ if (count > SKINNY_MAX_CAPABILITIES) {
+ count = SKINNY_MAX_CAPABILITIES;
+ ast_log(LOG_WARNING, "Received more capabilities than we can handle (%d). Ignoring the rest.\n", SKINNY_MAX_CAPABILITIES);
+ }
for (i = 0; i < count; i++) {
int acodec = 0;