Module: Mesa
Branch: master
Commit: 8d655263cae8765895feec14ac0cd1ebcfdf6e3f
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8d655263cae8765895feec14ac0cd1ebcfdf6e3f

Author: Jose Fonseca <[email protected]>
Date:   Mon Jul 24 14:20:03 2017 +0100

trace: Correct transfer box size calculation.

For textures we must not approximate the calculation with `stride *
height`, or `slice_stride * depth`, as that can easily lead to buffer
overflows, particularly for partial transfers.

This should address the issue that Bruce Cherniak found and diagnosed.

Reviewed-by: Roland Scheidegger <[email protected]>

---

 src/gallium/drivers/trace/tr_dump.c | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/trace/tr_dump.c 
b/src/gallium/drivers/trace/tr_dump.c
index 78c72492dc..2003222cc1 100644
--- a/src/gallium/drivers/trace/tr_dump.c
+++ b/src/gallium/drivers/trace/tr_dump.c
@@ -448,23 +448,22 @@ void trace_dump_box_bytes(const void *data,
                          unsigned stride,
                          unsigned slice_stride)
 {
+   enum pipe_format format = resource->format;
    size_t size;
 
+   assert(box->height > 0);
+   assert(box->depth > 0);
+
+   size =  util_format_get_nblocksx(format, box->width )      * 
util_format_get_blocksize(format)
+        + (util_format_get_nblocksy(format, box->height) - 1) * stride
+        +                                  (box->depth   - 1) * slice_stride;
+
    /*
     * Only dump buffer transfers to avoid huge files.
     * TODO: Make this run-time configurable
     */
    if (resource->target != PIPE_BUFFER) {
       size = 0;
-   } else {
-      enum pipe_format format = resource->format;
-      if (slice_stride)
-         size = box->depth * slice_stride;
-      else if (stride)
-         size = util_format_get_nblocksy(format, box->height) * stride;
-      else {
-         size = util_format_get_nblocksx(format, box->width) * 
util_format_get_blocksize(format);
-      }
    }
 
    trace_dump_bytes(data, size);

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to