From 987e7fde5dbcd8553569d7e6f8e42b849fcdd1a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrik=20Sm=C4=9Bl=C3=BD?= Date: Wed, 2 Oct 2024 04:05:52 +0200 Subject: [PATCH] Fix bug in Clay_SetPointerState that causes null pointer deref (#33) --- clay.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/clay.h b/clay.h index 2bb857d..8ea3ec0 100644 --- a/clay.h +++ b/clay.h @@ -3091,8 +3091,9 @@ void Clay_SetPointerState(Clay_Vector2 position, bool isPointerDown) { Clay__treeNodeVisited.internalArray[dfsBuffer.length - 1] = true; Clay_LayoutElement *currentElement = Clay_LayoutElementArray_Get(&Clay__layoutElements, Clay__int32_tArray_Get(&dfsBuffer, (int)dfsBuffer.length - 1)); Clay_LayoutElementHashMapItem *mapItem = Clay__GetHashMapItem(currentElement->id); // TODO I wish there was a way around this, maybe the fact that it's essentially a binary tree limits the cost, have to measure - if ((mapItem && Clay__PointIsInsideRect(position, mapItem->boundingBox)) || (!mapItem && Clay__PointIsInsideRect(position, CLAY__INIT(Clay_BoundingBox) {0,0, currentElement->dimensions.width, currentElement->dimensions.height}))) { + if (mapItem && Clay__PointIsInsideRect(position, mapItem->boundingBox)) { Clay__ElementIdArray_Add(&Clay__pointerOverIds, mapItem->elementId); + if (currentElement->elementType == CLAY__LAYOUT_ELEMENT_TYPE_TEXT) { dfsBuffer.length--; continue; @@ -3343,4 +3344,4 @@ freely, subject to the following restrictions: 3. This notice may not be removed or altered from any source distribution. -*/ \ No newline at end of file +*/