diff options
| author | Matias Fontanini <matias.fontanini@gmail.com> | 2012-10-20 11:12:59 -0300 |
|---|---|---|
| committer | Matias Fontanini <matias.fontanini@gmail.com> | 2012-10-20 11:12:59 -0300 |
| commit | 5fd892c77e2744dd2a05e4f5d8b3224d70b83483 (patch) | |
| tree | 4e42bf75290fe68d790d3c8aa0bd6714fb67d873 /src/rsn_information.cpp | |
| parent | abaa2bf9265eabd448e255410533f04186a3cb9e (diff) | |
Fixed some bugs. Added documentation.v0.2
Diffstat (limited to 'src/rsn_information.cpp')
| -rw-r--r-- | src/rsn_information.cpp | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/rsn_information.cpp b/src/rsn_information.cpp index f730061..a441518 100644 --- a/src/rsn_information.cpp +++ b/src/rsn_information.cpp @@ -51,21 +51,20 @@ RSNInformation::RSNInformation(const uint8_t *buffer, uint32_t total_sz) { void RSNInformation::init(const uint8_t *buffer, uint32_t total_sz) { const char *err_msg = "Malformed RSN information structure"; - check_size<uint16_t>(total_sz, err_msg); + if(total_sz <= sizeof(uint16_t) * 2 + sizeof(uint32_t)) + throw std::runtime_error(err_msg); version(Endian::le_to_host(*(uint16_t*)buffer)); buffer += sizeof(uint16_t); total_sz -= sizeof(uint16_t); - group_suite((RSNInformation::CypherSuites)*(uint32_t*)buffer); - check_size<uint32_t>(total_sz, err_msg); + group_suite((RSNInformation::CypherSuites)*(uint32_t*)buffer); buffer += sizeof(uint32_t); total_sz -= sizeof(uint32_t); - check_size<uint16_t>(total_sz, err_msg); - uint16_t count = *(uint16_t*)buffer; buffer += sizeof(uint16_t); total_sz -= sizeof(uint16_t); + if(count * sizeof(uint32_t) > total_sz) throw std::runtime_error(err_msg); total_sz -= count * sizeof(uint32_t); |
