From 85933efe263b7a9fe321d98909cfd7462eae6a93 Mon Sep 17 00:00:00 2001 From: treectrl Date: Fri, 29 Feb 2008 20:49:22 +0000 Subject: Fixed integer overflow in the "item bbox" command when getting the bounds of a column or element in a big list. New TreeRectangle struct replaces the use of XRectangle which uses short integers. --- generic/tkTreeCtrl.h | 12 +++++++++--- generic/tkTreeDrag.c | 4 ++-- generic/tkTreeItem.c | 10 +++++----- generic/tkTreeStyle.c | 4 ++-- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/generic/tkTreeCtrl.h b/generic/tkTreeCtrl.h index aa9e96d..9bcb054 100644 --- a/generic/tkTreeCtrl.h +++ b/generic/tkTreeCtrl.h @@ -7,7 +7,7 @@ * Copyright (c) 2002-2003 Christian Krone * Copyright (c) 2003 ActiveState Corporation * - * RCS: @(#) $Id: tkTreeCtrl.h,v 1.92 2008/01/22 01:03:02 treectrl Exp $ + * RCS: @(#) $Id: tkTreeCtrl.h,v 1.93 2008/02/29 20:49:22 treectrl Exp $ */ #include "tkPort.h" @@ -99,6 +99,12 @@ typedef struct int height; } TreeDrawable; +typedef struct +{ + int x, y; + int width, height; +} TreeRectangle; + typedef struct GCCache GCCache; struct GCCache { @@ -565,7 +571,7 @@ extern void TreeItem_Identify(TreeCtrl *tree, TreeItem item_, int lock, int x, i extern void TreeItem_Identify2(TreeCtrl *tree, TreeItem item_, int x1, int y1, int x2, int y2, Tcl_Obj *listObj); extern int TreeItem_GetRects(TreeCtrl *tree, TreeItem item_, - TreeColumn treeColumn, int objc, Tcl_Obj *CONST objv[], XRectangle rects[]); + TreeColumn treeColumn, int objc, Tcl_Obj *CONST objv[], TreeRectangle rects[]); extern int TreeItem_Indent(TreeCtrl *tree, TreeItem item_); extern void Tree_UpdateItemIndex(TreeCtrl *tree); extern void Tree_DeselectHidden(TreeCtrl *tree); @@ -645,7 +651,7 @@ extern int TreeStyle_GetSortData(TreeCtrl *tree, TreeStyle style_, int elemIndex #if 0 extern int TreeStyle_ValidateElements(TreeCtrl *tree, TreeStyle style_, int objc, Tcl_Obj *CONST objv[]); #endif -extern int TreeStyle_GetElemRects(StyleDrawArgs *drawArgs, int objc, Tcl_Obj *CONST objv[], XRectangle rects[]); +extern int TreeStyle_GetElemRects(StyleDrawArgs *drawArgs, int objc, Tcl_Obj *CONST objv[], TreeRectangle rects[]); extern int TreeElementCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int TreeStyleCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[]); extern int TreeStyle_ChangeState(TreeCtrl *tree, TreeStyle style_, int state1, int state2); diff --git a/generic/tkTreeDrag.c b/generic/tkTreeDrag.c index e172830..c98f9ff 100644 --- a/generic/tkTreeDrag.c +++ b/generic/tkTreeDrag.c @@ -5,7 +5,7 @@ * * Copyright (c) 2002-2008 Tim Baker * - * RCS: @(#) $Id: tkTreeDrag.c,v 1.27 2008/01/22 01:03:02 treectrl Exp $ + * RCS: @(#) $Id: tkTreeDrag.c,v 1.28 2008/02/29 20:49:22 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -395,7 +395,7 @@ TreeDragImageCmd( TreeItem item; TreeItemColumn itemColumn; TreeColumn treeColumn; - XRectangle rects[128]; + TreeRectangle rects[128]; DragElem *elem; int i, count, result = TCL_OK; diff --git a/generic/tkTreeItem.c b/generic/tkTreeItem.c index 9b7ce4a..8f9b0a7 100644 --- a/generic/tkTreeItem.c +++ b/generic/tkTreeItem.c @@ -5,7 +5,7 @@ * * Copyright (c) 2002-2008 Tim Baker * - * RCS: @(#) $Id: tkTreeItem.c,v 1.104 2008/01/22 01:03:02 treectrl Exp $ + * RCS: @(#) $Id: tkTreeItem.c,v 1.105 2008/02/29 20:49:22 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -7347,7 +7347,7 @@ TreeItemCmd( int x, y, w, h; int count; TreeColumn treeColumn; - XRectangle rect; + TreeRectangle rect; if (objc == 4) { if (Tree_ItemBbox(tree, item, COLUMN_LOCK_NONE, &x, &y, &w, &h) < 0) @@ -8563,7 +8563,7 @@ SpanWalkProc_GetRects( TreeColumn treeColumn; int count; Tcl_Obj *CONST *objv; - XRectangle *rects; + TreeRectangle *rects; int result; } *data = clientData; @@ -8644,7 +8644,7 @@ TreeItem_GetRects( * 1+ means objv[] contains names of elements * to get rects for. */ Tcl_Obj *CONST objv[], /* Array of element names or NULL. */ - XRectangle rects[] /* Out: returned bounding boxes. */ + TreeRectangle rects[] /* Out: returned bounding boxes. */ ) { int left, top, width, height; @@ -8653,7 +8653,7 @@ TreeItem_GetRects( TreeColumn treeColumn; int count; Tcl_Obj *CONST *objv; - XRectangle *rects; + TreeRectangle *rects; int result; } clientData; diff --git a/generic/tkTreeStyle.c b/generic/tkTreeStyle.c index 6195a6a..5b2a686 100644 --- a/generic/tkTreeStyle.c +++ b/generic/tkTreeStyle.c @@ -5,7 +5,7 @@ * * Copyright (c) 2002-2008 Tim Baker * - * RCS: @(#) $Id: tkTreeStyle.c,v 1.77 2008/01/22 01:03:02 treectrl Exp $ + * RCS: @(#) $Id: tkTreeStyle.c,v 1.78 2008/02/29 20:49:22 treectrl Exp $ */ #include "tkTreeCtrl.h" @@ -6499,7 +6499,7 @@ TreeStyle_GetElemRects( StyleDrawArgs *drawArgs, /* Various args. */ int objc, /* Number of element names. */ Tcl_Obj *CONST objv[], /* Array of element names. */ - XRectangle rects[] /* Returned rectangles. */ + TreeRectangle rects[] /* Returned rectangles. */ ) { -- cgit v0.12