summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/parserutils/input/inputstream.h2
-rw-r--r--include/parserutils/utils/buffer.h2
-rw-r--r--src/utils/buffer.c24
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;
+}
+