aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2017-10-11 10:56:48 -0700
committerEmil Velikov <[email protected]>2017-10-17 16:59:31 +0100
commit4d1ae3283c1ecb31e9c06723da735dfc7435e2e2 (patch)
treefe381f013465367cc0ce7cdec9bf8f973078a571
parentd56aa9fe43cd0fa30b1aa92f534fe9e676a9a59e (diff)
glsl/blob: Return false from ensure_can_read on overrun
Otherwise, if you have a large read fail and then try to do a small read, the small read may succeed even though it's at the wrong offset. Reviewed-by: Nicolai Hähnle <[email protected]> Reviewed-by: Jordan Justen <[email protected]> Cc: [email protected] (cherry picked from commit 7118851374074bd92887bfabd47ce39c9be412fd)
-rw-r--r--src/compiler/glsl/blob.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/compiler/glsl/blob.c b/src/compiler/glsl/blob.c
index 3c4aed8524d..e837cdf2a0b 100644
--- a/src/compiler/glsl/blob.c
+++ b/src/compiler/glsl/blob.c
@@ -207,6 +207,9 @@ blob_reader_init(struct blob_reader *blob, uint8_t *data, size_t size)
static bool
ensure_can_read(struct blob_reader *blob, size_t size)
{
+ if (blob->overrun)
+ return false;
+
if (blob->current < blob->end && blob->end - blob->current >= size)
return true;