aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLev Walkin <vlm@lionet.info>2017-07-20 14:51:08 +0300
committerLev Walkin <vlm@lionet.info>2017-08-02 13:32:19 -0700
commit39837e6c2699a0cf7dbd1375d6b259dbbe194ad5 (patch)
tree0233c44a08387078475ab6076c3c849d648fa60b
parentd88bea9b1188f7e8a31371ae8901aadaaeb0af66 (diff)
safety
-rw-r--r--skeletons/asn_system.h8
-rw-r--r--skeletons/oer_support.c3
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;