diff options
author | Lev Walkin <vlm@lionet.info> | 2017-07-20 14:51:08 +0300 |
---|---|---|
committer | Lev Walkin <vlm@lionet.info> | 2017-08-02 13:32:19 -0700 |
commit | 39837e6c2699a0cf7dbd1375d6b259dbbe194ad5 (patch) | |
tree | 0233c44a08387078475ab6076c3c849d648fa60b | |
parent | d88bea9b1188f7e8a31371ae8901aadaaeb0af66 (diff) |
safety
-rw-r--r-- | skeletons/asn_system.h | 8 | ||||
-rw-r--r-- | skeletons/oer_support.c | 3 |
2 files changed, 11 insertions, 0 deletions
diff --git a/skeletons/asn_system.h b/skeletons/asn_system.h index 5bf02c28..9313de4f 100644 --- a/skeletons/asn_system.h +++ b/skeletons/asn_system.h @@ -138,4 +138,12 @@ typedef unsigned int uint32_t; #endif /* __GNUC__ */ #endif /* MIN */ +#ifndef SIZE_MAX +#define SIZE_MAX ULONG_MAX +#endif + +#ifndef RSIZE_MAX /* C11, Annex K */ +#define RSIZE_MAX (SIZE_MAX >> 1) +#endif + #endif /* ASN_SYSTEM_H */ diff --git a/skeletons/oer_support.c b/skeletons/oer_support.c index 096652c7..f228f092 100644 --- a/skeletons/oer_support.c +++ b/skeletons/oer_support.c @@ -57,6 +57,9 @@ oer_fetch_length(const void *bufptr, size_t size, size_t *len_r) { len = (len << 8) + *b; } + if(len > RSIZE_MAX) /* A bit of C11 validation */ + return -1; + *len_r = len; assert(len_len + 1 == bend - (const uint8_t *)bufptr); return len_len + 1; |