on master help sign in
Fix bounds check in set/getBufferDouble

(thanks to @ziman!)

commite0e405f03ec2f7a0135e14c1cb7378853a7e86b5 authorEdwin Brady <ecb10@st-andrews.ac.uk> dateMon 22 Jan 2018, 13:07 (9 years ago) parent578134c
1 file changed+2−2
rts/idris_buffer.c+2−2
rts/idris_buffer.c+2−2
@@ -52,7 +52,7 @@ void idris_setBufferInt(void* buffer, int loc, int val) {
5252void idris_setBufferDouble(void* buffer, int loc, double val) {
5353 Buffer* b = buffer;
5454 // I am not proud of this
55− if (loc >= 0 && loc + sizeof(double) < b->size) {
55+ if (loc >= 0 && loc + sizeof(double) <= b->size) {
5656 unsigned char* c = (unsigned char*)(& val);
5757 for (int i = 0; i < sizeof(double); ++i) {
5858 b->data[loc+i] = c[i];
@@ -95,7 +95,7 @@ double idris_getBufferDouble(void* buffer, int loc) {
9595 double d;
9696 // I am even less proud of this
9797 unsigned char *c = (unsigned char*)(& d);
98− if (loc >= 0 && loc + sizeof(double) < b->size) {
98+ if (loc >= 0 && loc + sizeof(double) <= b->size) {
9999 for (int i = 0; i < sizeof(double); ++i) {
100100 c[i] = b->data[loc+i];
101101 }