From 7b8ad8daf9b4ac27669cfab9bd65bb04199eaa02 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 1 Dec 2014 10:38:06 +0000 Subject: [PATCH] Handle when offset is beyond buffer size or length ends up 0 --- renderdoc/driver/gl/gl_replay.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/gl/gl_replay.cpp b/renderdoc/driver/gl/gl_replay.cpp index 3163d2fdd..b38d2e9fb 100644 --- a/renderdoc/driver/gl/gl_replay.cpp +++ b/renderdoc/driver/gl/gl_replay.cpp @@ -280,7 +280,11 @@ vector GLReplay::GetBufferData(ResourceId buff, uint32_t offset, uint32_t if(len > 0 && offset+len > buf.size) { RDCWARN("Attempting to read off the end of the array. Will be clamped"); - len = ~0U; // min below will clamp to max size size + + if(offset < buf.size) + len = ~0U; // min below will clamp to max size size + else + return ret; // offset past buffer size, return empty array } else if(len == 0) { @@ -290,6 +294,8 @@ vector GLReplay::GetBufferData(ResourceId buff, uint32_t offset, uint32_t // need to ensure len+offset doesn't overrun buffer or the glGetBufferSubData call // will fail. len = RDCMIN(len, bufsize-offset); + + if(len == 0) return ret; ret.resize(len);