diff options
-rw-r--r-- | include/parserutils/input/inputstream.h | 2 | ||||
-rw-r--r-- | include/parserutils/utils/buffer.h | 2 | ||||
-rw-r--r-- | src/utils/buffer.c | 24 |
3 files changed, 28 insertions, 0 deletions
diff --git a/include/parserutils/input/inputstream.h b/include/parserutils/input/inputstream.h index db81eb0..26f3353 100644 --- a/include/parserutils/input/inputstream.h +++ b/include/parserutils/input/inputstream.h @@ -85,6 +85,8 @@ static inline uintptr_t parserutils_inputstream_peek( if (stream == NULL) return PARSERUTILS_INPUTSTREAM_OOD; + parserutils_buffer_randomise(stream->utf8); + #define IS_ASCII(x) (((x) & 0x80) == 0) if (stream->cursor + offset < stream->utf8->length) { diff --git a/include/parserutils/utils/buffer.h b/include/parserutils/utils/buffer.h index f3a1883..96053a3 100644 --- a/include/parserutils/utils/buffer.h +++ b/include/parserutils/utils/buffer.h @@ -35,5 +35,7 @@ parserutils_error parserutils_buffer_discard(parserutils_buffer *buffer, parserutils_error parserutils_buffer_grow(parserutils_buffer *buffer); +parserutils_error parserutils_buffer_randomise(parserutils_buffer *buffer); + #endif diff --git a/src/utils/buffer.c b/src/utils/buffer.c index 21c47fc..3c28e16 100644 --- a/src/utils/buffer.c +++ b/src/utils/buffer.c @@ -154,3 +154,27 @@ parserutils_error parserutils_buffer_grow(parserutils_buffer *buffer) return PARSERUTILS_OK; } +parserutils_error parserutils_buffer_randomise(parserutils_buffer *buffer) +{ + if (buffer == NULL) + return PARSERUTILS_BADPARM; + +#ifndef NDEBUG + uint8_t *temp = buffer->alloc(NULL, buffer->allocated, buffer->pw); + if (temp == NULL) + return PARSERUTILS_NOMEM; + + memcpy(temp, buffer->data, buffer->length); + + memset(buffer->data, 0xff, buffer->length); + + /* Leak the buffer's current data, so we don't reuse it */ + /* buffer->alloc(buffer->data, 0, buffer->pw); */ + + buffer->data = temp; +#endif + + + return PARSERUTILS_OK; +} + |