diff options
| author | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-02-11 22:25:10 +0000 |
|---|---|---|
| committer | Magnus Auvinen <magnus.auvinen@gmail.com> | 2008-02-11 22:25:10 +0000 |
| commit | 1ea859c431b33a384727c0016917dde15bceeff3 (patch) | |
| tree | a2e8a040abaa6334e6e5c0442a75b5777355000d /src/engine/e_msg.c | |
| parent | 79dfdb3cd71a44ec3cd8e1dab15263837381cbbf (diff) | |
| download | zcatch-1ea859c431b33a384727c0016917dde15bceeff3.tar.gz zcatch-1ea859c431b33a384727c0016917dde15bceeff3.zip | |
security audit: fixed so the packer functions checks for errors
Diffstat (limited to 'src/engine/e_msg.c')
| -rw-r--r-- | src/engine/e_msg.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/engine/e_msg.c b/src/engine/e_msg.c index 0bdaf856..f9efc2bf 100644 --- a/src/engine/e_msg.c +++ b/src/engine/e_msg.c @@ -5,6 +5,7 @@ /* message packing */ static PACKER msg_packer; static MSG_INFO pack_info; +static int packer_failed = 0; void msg_pack_int(int i) { packer_add_int(&msg_packer, i); } void msg_pack_string(const char *p, int limit) { packer_add_string(&msg_packer, p, limit); } @@ -15,6 +16,7 @@ void msg_pack_start_system(int msg, int flags) packer_reset(&msg_packer); pack_info.msg = (msg<<1)|1; pack_info.flags = flags; + packer_failed = 0; msg_pack_int(pack_info.msg); } @@ -24,18 +26,30 @@ void msg_pack_start(int msg, int flags) packer_reset(&msg_packer); pack_info.msg = msg<<1; pack_info.flags = flags; + packer_failed = 0; msg_pack_int(pack_info.msg); } void msg_pack_end() { - pack_info.size = packer_size(&msg_packer); - pack_info.data = packer_data(&msg_packer); + if(msg_packer.error) + { + packer_failed = 1; + pack_info.size = 0; + pack_info.data = (unsigned char *)""; + } + else + { + pack_info.size = packer_size(&msg_packer); + pack_info.data = packer_data(&msg_packer); + } } const MSG_INFO *msg_get_info() { + if(packer_failed) + return 0; return &pack_info; } @@ -53,3 +67,4 @@ int msg_unpack_start(const void *data, int data_size, int *system) int msg_unpack_int() { return unpacker_get_int(&msg_unpacker); } const char *msg_unpack_string() { return unpacker_get_string(&msg_unpacker); } const unsigned char *msg_unpack_raw(int size) { return unpacker_get_raw(&msg_unpacker, size); } +int msg_unpack_error() { return msg_unpacker.error; } |