Skip to content

Commit dead5b2

Browse files
author
jan.nijtmans
committed
Fix [5f739d2253] for text widget. Put other checks in alphabetical order
2 parents aafb357 + 7cfae49 commit dead5b2

File tree

7 files changed

+156
-67
lines changed

7 files changed

+156
-67
lines changed

generic/tkButton.c

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1028,7 +1028,7 @@ ConfigureButton(
10281028
int error, haveImage;
10291029
Tk_Image image;
10301030
int wrapLength, borderWidth, highlightWidth, padX, padY;
1031-
int butPtrWidth, butPtrHeight;
1031+
int width, height;
10321032

10331033
/*
10341034
* Eliminate any existing trace on variables monitored by the button.
@@ -1092,13 +1092,6 @@ ConfigureButton(
10921092
} else {
10931093
Tk_SetBackgroundFromBorder(butPtr->tkwin, butPtr->normalBorder);
10941094
}
1095-
Tk_GetPixelsFromObj(NULL, butPtr->tkwin, butPtr->wrapLengthObj, &wrapLength);
1096-
if (wrapLength < 0) {
1097-
wrapLength = 0;
1098-
Tcl_DecrRefCount(butPtr->wrapLengthObj);
1099-
butPtr->wrapLengthObj = Tcl_NewIntObj(0);
1100-
Tcl_IncrRefCount(butPtr->wrapLengthObj);
1101-
}
11021095
Tk_GetPixelsFromObj(NULL, butPtr->tkwin, butPtr->borderWidthObj, &borderWidth);
11031096
if (borderWidth < 0) {
11041097
borderWidth = 0;
@@ -1127,6 +1120,13 @@ ConfigureButton(
11271120
butPtr->padYObj = Tcl_NewIntObj(0);
11281121
Tcl_IncrRefCount(butPtr->padYObj);
11291122
}
1123+
Tk_GetPixelsFromObj(NULL, butPtr->tkwin, butPtr->wrapLengthObj, &wrapLength);
1124+
if (wrapLength < 0) {
1125+
wrapLength = 0;
1126+
Tcl_DecrRefCount(butPtr->wrapLengthObj);
1127+
butPtr->wrapLengthObj = Tcl_NewIntObj(0);
1128+
Tcl_IncrRefCount(butPtr->wrapLengthObj);
1129+
}
11301130

11311131
if (butPtr->type >= TYPE_CHECK_BUTTON) {
11321132
Tcl_Obj *valuePtr, *namePtr;
@@ -1274,13 +1274,13 @@ ConfigureButton(
12741274
*/
12751275

12761276
if (Tk_GetPixelsFromObj(interp, butPtr->tkwin, butPtr->widthObj,
1277-
&butPtrWidth) != TCL_OK) {
1277+
&width) != TCL_OK) {
12781278
widthError:
12791279
Tcl_AddErrorInfo(interp, "\n (processing \"-width\" option)");
12801280
continue;
12811281
}
12821282
if (Tk_GetPixelsFromObj(interp, butPtr->tkwin, butPtr->heightObj,
1283-
&butPtrHeight) != TCL_OK) {
1283+
&height) != TCL_OK) {
12841284
heightError:
12851285
Tcl_AddErrorInfo(interp, "\n (processing \"-height\" option)");
12861286
continue;
@@ -1290,15 +1290,25 @@ ConfigureButton(
12901290
* The button displays an ordinary text string.
12911291
*/
12921292

1293-
if (Tcl_GetIntFromObj(interp, butPtr->widthObj, &butPtrWidth)
1293+
if (Tcl_GetIntFromObj(interp, butPtr->widthObj, &width)
12941294
!= TCL_OK) {
12951295
goto widthError;
12961296
}
1297-
if (Tcl_GetIntFromObj(interp, butPtr->heightObj, &butPtrHeight)
1297+
if (Tcl_GetIntFromObj(interp, butPtr->heightObj, &height)
12981298
!= TCL_OK) {
12991299
goto heightError;
13001300
}
13011301
}
1302+
if (width < 0) {
1303+
Tcl_DecrRefCount(butPtr->widthObj);
1304+
butPtr->widthObj = Tcl_NewIntObj(0);
1305+
Tcl_IncrRefCount(butPtr->widthObj);
1306+
}
1307+
if (height < 0) {
1308+
Tcl_DecrRefCount(butPtr->heightObj);
1309+
butPtr->heightObj = Tcl_NewIntObj(0);
1310+
Tcl_IncrRefCount(butPtr->heightObj);
1311+
}
13021312
break;
13031313
}
13041314
if (!error) {

generic/tkFrame.c

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -986,24 +986,18 @@ ConfigureFrame(
986986
Tk_SetWindowBackgroundPixmap(framePtr->tkwin, None);
987987
}
988988

989-
Tk_GetPixelsFromObj(NULL, framePtr->tkwin, framePtr->widthObj, &width);
990-
if (width < 0) {
991-
Tcl_DecrRefCount(framePtr->widthObj);
992-
framePtr->widthObj = Tcl_NewIntObj(0);
993-
Tcl_IncrRefCount(framePtr->widthObj);
989+
Tk_GetPixelsFromObj(NULL, framePtr->tkwin, framePtr->borderWidthObj, &borderWidth);
990+
if (borderWidth < 0) {
991+
Tcl_DecrRefCount(framePtr->borderWidthObj);
992+
framePtr->borderWidthObj = Tcl_NewIntObj(0);
993+
Tcl_IncrRefCount(framePtr->borderWidthObj);
994994
}
995995
Tk_GetPixelsFromObj(NULL, framePtr->tkwin, framePtr->heightObj, &height);
996996
if (height < 0) {
997997
Tcl_DecrRefCount(framePtr->heightObj);
998998
framePtr->heightObj = Tcl_NewIntObj(0);
999999
Tcl_IncrRefCount(framePtr->heightObj);
10001000
}
1001-
Tk_GetPixelsFromObj(NULL, framePtr->tkwin, framePtr->borderWidthObj, &borderWidth);
1002-
if (borderWidth < 0) {
1003-
Tcl_DecrRefCount(framePtr->borderWidthObj);
1004-
framePtr->borderWidthObj = Tcl_NewIntObj(0);
1005-
Tcl_IncrRefCount(framePtr->borderWidthObj);
1006-
}
10071001
Tk_GetPixelsFromObj(NULL, framePtr->tkwin, framePtr->highlightWidthObj, &highlightWidth);
10081002
if (highlightWidth < 0) {
10091003
Tcl_DecrRefCount(framePtr->highlightWidthObj);
@@ -1022,6 +1016,12 @@ ConfigureFrame(
10221016
framePtr->padYObj = Tcl_NewIntObj(0);
10231017
Tcl_IncrRefCount(framePtr->padYObj);
10241018
}
1019+
Tk_GetPixelsFromObj(NULL, framePtr->tkwin, framePtr->widthObj, &width);
1020+
if (width < 0) {
1021+
Tcl_DecrRefCount(framePtr->widthObj);
1022+
framePtr->widthObj = Tcl_NewIntObj(0);
1023+
Tcl_IncrRefCount(framePtr->widthObj);
1024+
}
10251025

10261026
/*
10271027
* If a -labelwidget is specified, check that it is valid and set up

generic/tkMessage.c

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -488,27 +488,15 @@ ConfigureMessage(
488488
* be specified to Tk_ConfigureWidget.
489489
*/
490490

491-
Tk_GetPixelsFromObj(NULL, msgPtr->tkwin, msgPtr->widthObj, &width);
492-
if (width < 0) {
493-
if (msgPtr->widthObj) {
494-
Tcl_DecrRefCount(msgPtr->widthObj);
495-
}
496-
msgPtr->widthObj = Tcl_NewIntObj(0);
497-
Tcl_IncrRefCount(msgPtr->widthObj);
498-
}
499491
Tk_GetPixelsFromObj(NULL, msgPtr->tkwin, msgPtr->borderWidthObj, &borderWidth);
500492
if (borderWidth < 0) {
501-
if (msgPtr->borderWidthObj) {
502-
Tcl_DecrRefCount(msgPtr->borderWidthObj);
503-
}
493+
Tcl_DecrRefCount(msgPtr->borderWidthObj);
504494
msgPtr->borderWidthObj = Tcl_NewIntObj(0);
505495
Tcl_IncrRefCount(msgPtr->borderWidthObj);
506496
}
507497
Tk_GetPixelsFromObj(NULL, msgPtr->tkwin, msgPtr->highlightWidthObj, &highlightWidth);
508498
if (highlightWidth < 0) {
509-
if (msgPtr->highlightWidthObj) {
510-
Tcl_DecrRefCount(msgPtr->highlightWidthObj);
511-
}
499+
Tcl_DecrRefCount(msgPtr->highlightWidthObj);
512500
msgPtr->highlightWidthObj = Tcl_NewIntObj(0);
513501
Tcl_IncrRefCount(msgPtr->highlightWidthObj);
514502
}
@@ -526,6 +514,12 @@ ConfigureMessage(
526514
msgPtr->padYObj = NULL;
527515
}
528516
}
517+
Tk_GetPixelsFromObj(NULL, msgPtr->tkwin, msgPtr->widthObj, &width);
518+
if (width < 0) {
519+
Tcl_DecrRefCount(msgPtr->widthObj);
520+
msgPtr->widthObj = Tcl_NewIntObj(0);
521+
Tcl_IncrRefCount(msgPtr->widthObj);
522+
}
529523

530524
Tk_FreeSavedOptions(&savedOptions);
531525
MessageWorldChanged(msgPtr);

generic/tkText.c

Lines changed: 54 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2062,9 +2062,9 @@ ConfigureText(
20622062
{
20632063
Tk_SavedOptions savedOptions;
20642064
int oldExport = (textPtr->exportSelection) && (!Tcl_IsSafe(textPtr->interp));
2065-
int mask = 0;
2066-
int selBorderWidth = INT_MIN, spacing1, spacing2, spacing3;
2067-
int insertBorderWidth, insertWidth;
2065+
int mask = 0, selBorderWidth = 0, height, highlightWidth;
2066+
int borderWidth, spacing1, spacing2, spacing3;
2067+
int insertBorderWidth, insertWidth, padX, padY;
20682068

20692069
if (Tk_SetOptions(interp, (char *) textPtr, textPtr->optionTable,
20702070
objc, objv, textPtr->tkwin, &savedOptions, &mask) != TCL_OK) {
@@ -2204,26 +2204,26 @@ ConfigureText(
22042204
* Don't allow negative spacings.
22052205
*/
22062206

2207-
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, textPtr->spacing1Obj, &spacing1);
2208-
if (spacing1 < 0) {
2209-
spacing1 = 0;
2210-
Tcl_DecrRefCount(textPtr->spacing1Obj);
2211-
textPtr->spacing1Obj = Tcl_NewIntObj(0);
2212-
Tcl_IncrRefCount(textPtr->spacing1Obj);
2207+
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, textPtr->borderWidthObj, &borderWidth);
2208+
if (borderWidth < 0) {
2209+
borderWidth = 0;
2210+
Tcl_DecrRefCount(textPtr->borderWidthObj);
2211+
textPtr->borderWidthObj = Tcl_NewIntObj(0);
2212+
Tcl_IncrRefCount(textPtr->borderWidthObj);
22132213
}
2214-
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, textPtr->spacing2Obj, &spacing2);
2215-
if (spacing2 < 0) {
2216-
spacing2 = 0;
2217-
Tcl_DecrRefCount(textPtr->spacing2Obj);
2218-
textPtr->spacing2Obj = Tcl_NewIntObj(0);
2219-
Tcl_IncrRefCount(textPtr->spacing2Obj);
2214+
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, textPtr->heightObj, &height);
2215+
if (height < 0) {
2216+
height = 0;
2217+
Tcl_DecrRefCount(textPtr->heightObj);
2218+
textPtr->heightObj = Tcl_NewIntObj(0);
2219+
Tcl_IncrRefCount(textPtr->heightObj);
22202220
}
2221-
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, textPtr->spacing3Obj, &spacing3);
2222-
if (spacing3 < 0) {
2223-
spacing3 = 0;
2224-
Tcl_DecrRefCount(textPtr->spacing3Obj);
2225-
textPtr->spacing3Obj = Tcl_NewIntObj(0);
2226-
Tcl_IncrRefCount(textPtr->spacing3Obj);
2221+
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, textPtr->highlightWidthObj, &highlightWidth);
2222+
if (highlightWidth < 0) {
2223+
highlightWidth = 0;
2224+
Tcl_DecrRefCount(textPtr->highlightWidthObj);
2225+
textPtr->highlightWidthObj = Tcl_NewIntObj(0);
2226+
Tcl_IncrRefCount(textPtr->highlightWidthObj);
22272227
}
22282228
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, textPtr->insertBorderWidthObj, &insertBorderWidth);
22292229
if (insertBorderWidth < 0) {
@@ -2239,6 +2239,18 @@ ConfigureText(
22392239
textPtr->insertWidthObj = Tcl_NewIntObj(0);
22402240
Tcl_IncrRefCount(textPtr->insertWidthObj);
22412241
}
2242+
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, textPtr->padXObj, &padX);
2243+
if (padX < 0) {
2244+
Tcl_DecrRefCount(textPtr->padXObj);
2245+
textPtr->padXObj = Tcl_NewIntObj(0);
2246+
Tcl_IncrRefCount(textPtr->padXObj);
2247+
}
2248+
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, textPtr->padYObj, &padY);
2249+
if (padY < 0) {
2250+
Tcl_DecrRefCount(textPtr->padYObj);
2251+
textPtr->padYObj = Tcl_NewIntObj(0);
2252+
Tcl_IncrRefCount(textPtr->padYObj);
2253+
}
22422254
if (textPtr->selBorderWidthObj) {
22432255
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, textPtr->selBorderWidthObj, &selBorderWidth);
22442256
}
@@ -2250,7 +2262,27 @@ ConfigureText(
22502262
textPtr->selBorderWidthObj = Tcl_NewIntObj(0);
22512263
Tcl_IncrRefCount(textPtr->selBorderWidthObj);
22522264
}
2253-
2265+
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, textPtr->spacing1Obj, &spacing1);
2266+
if (spacing1 < 0) {
2267+
spacing1 = 0;
2268+
Tcl_DecrRefCount(textPtr->spacing1Obj);
2269+
textPtr->spacing1Obj = Tcl_NewIntObj(0);
2270+
Tcl_IncrRefCount(textPtr->spacing1Obj);
2271+
}
2272+
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, textPtr->spacing2Obj, &spacing2);
2273+
if (spacing2 < 0) {
2274+
spacing2 = 0;
2275+
Tcl_DecrRefCount(textPtr->spacing2Obj);
2276+
textPtr->spacing2Obj = Tcl_NewIntObj(0);
2277+
Tcl_IncrRefCount(textPtr->spacing2Obj);
2278+
}
2279+
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, textPtr->spacing3Obj, &spacing3);
2280+
if (spacing3 < 0) {
2281+
spacing3 = 0;
2282+
Tcl_DecrRefCount(textPtr->spacing3Obj);
2283+
textPtr->spacing3Obj = Tcl_NewIntObj(0);
2284+
Tcl_IncrRefCount(textPtr->spacing3Obj);
2285+
}
22542286

22552287
/*
22562288
* Parse tab stops.

generic/tkTextImage.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,9 +539,19 @@ EmbImageLayoutProc(
539539

540540
if (eiPtr->body.ei.padXObj) {
541541
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, eiPtr->body.ei.padXObj, &padX);
542+
if (padX < 0) {
543+
Tcl_DecrRefCount(eiPtr->body.ei.padXObj);
544+
eiPtr->body.ei.padXObj = Tcl_NewIntObj(0);
545+
Tcl_IncrRefCount(eiPtr->body.ei.padXObj);
546+
}
542547
}
543548
if (eiPtr->body.ei.padYObj) {
544549
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, eiPtr->body.ei.padYObj, &padY);
550+
if (padY < 0) {
551+
Tcl_DecrRefCount(eiPtr->body.ei.padYObj);
552+
eiPtr->body.ei.padYObj = Tcl_NewIntObj(0);
553+
Tcl_IncrRefCount(eiPtr->body.ei.padYObj);
554+
}
545555
}
546556
/*
547557
* See if there's room for this image on this line.

generic/tkTextTag.c

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -369,8 +369,34 @@ TkTextTagCmd(
369369
if (borderWidth < 0) {
370370
borderWidth = 0;
371371
Tcl_DecrRefCount(tagPtr->borderWidthObj);
372-
tagPtr->borderWidthObj = Tcl_NewIntObj(0);
373-
Tcl_IncrRefCount(tagPtr->borderWidthObj);
372+
tagPtr->borderWidthObj = NULL;
373+
}
374+
}
375+
if (tagPtr->lMargin1Obj) {
376+
int lMargin1;
377+
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, tagPtr->lMargin1Obj, &lMargin1);
378+
if (lMargin1 < 0) {
379+
lMargin1 = 0;
380+
Tcl_DecrRefCount(tagPtr->lMargin1Obj);
381+
tagPtr->lMargin1Obj = NULL;
382+
}
383+
}
384+
if (tagPtr->lMargin2Obj) {
385+
int lMargin2;
386+
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, tagPtr->lMargin2Obj, &lMargin2);
387+
if (lMargin2 < 0) {
388+
lMargin2 = 0;
389+
Tcl_DecrRefCount(tagPtr->lMargin2Obj);
390+
tagPtr->lMargin2Obj = NULL;
391+
}
392+
}
393+
if (tagPtr->rMarginObj) {
394+
int rMargin;
395+
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, tagPtr->rMarginObj, &rMargin);
396+
if (rMargin < 0) {
397+
rMargin = 0;
398+
Tcl_DecrRefCount(tagPtr->rMarginObj);
399+
tagPtr->rMarginObj = NULL;
374400
}
375401
}
376402
if (tagPtr->spacing1Obj) {
@@ -379,8 +405,7 @@ TkTextTagCmd(
379405
if (spacing1 < 0) {
380406
spacing1 = 0;
381407
Tcl_DecrRefCount(tagPtr->spacing1Obj);
382-
tagPtr->spacing1Obj = Tcl_NewIntObj(0);
383-
Tcl_IncrRefCount(tagPtr->spacing1Obj);
408+
tagPtr->spacing1Obj = NULL;
384409
}
385410
}
386411
if (tagPtr->spacing2Obj) {
@@ -389,8 +414,7 @@ TkTextTagCmd(
389414
if (spacing2 < 0) {
390415
spacing2 = 0;
391416
Tcl_DecrRefCount(tagPtr->spacing2Obj);
392-
tagPtr->spacing2Obj = Tcl_NewIntObj(0);
393-
Tcl_IncrRefCount(tagPtr->spacing2Obj);
417+
tagPtr->spacing2Obj = NULL;
394418
}
395419
}
396420
if (tagPtr->spacing3Obj) {
@@ -399,8 +423,7 @@ TkTextTagCmd(
399423
if (spacing3 < 0) {
400424
spacing3 = 0;
401425
Tcl_DecrRefCount(tagPtr->spacing3Obj);
402-
tagPtr->spacing3Obj = Tcl_NewIntObj(0);
403-
Tcl_IncrRefCount(tagPtr->spacing3Obj);
426+
tagPtr->spacing3Obj = NULL;
404427
}
405428
}
406429
if (tagPtr->tabArrayPtr != NULL) {

generic/tkTextWind.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -991,9 +991,19 @@ EmbWinLayoutProc(
991991
} else {
992992
if (ewPtr->body.ew.padXObj) {
993993
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, ewPtr->body.ew.padXObj, &padX);
994+
if (padX < 0) {
995+
Tcl_DecrRefCount(ewPtr->body.ew.padXObj);
996+
ewPtr->body.ew.padXObj = Tcl_NewIntObj(0);
997+
Tcl_IncrRefCount(ewPtr->body.ew.padXObj);
998+
}
994999
}
9951000
if (ewPtr->body.ew.padYObj) {
9961001
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, ewPtr->body.ew.padYObj, &padY);
1002+
if (padY < 0) {
1003+
Tcl_DecrRefCount(ewPtr->body.ew.padYObj);
1004+
ewPtr->body.ew.padYObj = Tcl_NewIntObj(0);
1005+
Tcl_IncrRefCount(ewPtr->body.ew.padYObj);
1006+
}
9971007
}
9981008
width = Tk_ReqWidth(ewPtr->body.ew.tkwin) + 2 * padX;
9991009
height = Tk_ReqHeight(ewPtr->body.ew.tkwin) + 2 * padY;
@@ -1261,9 +1271,19 @@ EmbWinBboxProc(
12611271
}
12621272
if (ewPtr->body.ew.padXObj) {
12631273
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, ewPtr->body.ew.padXObj, &padX);
1274+
if (padX < 0) {
1275+
Tcl_DecrRefCount(ewPtr->body.ew.padXObj);
1276+
ewPtr->body.ew.padXObj = Tcl_NewIntObj(0);
1277+
Tcl_IncrRefCount(ewPtr->body.ew.padXObj);
1278+
}
12641279
}
12651280
if (ewPtr->body.ew.padYObj) {
12661281
Tk_GetPixelsFromObj(NULL, textPtr->tkwin, ewPtr->body.ew.padYObj, &padY);
1282+
if (padY < 0) {
1283+
Tcl_DecrRefCount(ewPtr->body.ew.padYObj);
1284+
ewPtr->body.ew.padYObj = Tcl_NewIntObj(0);
1285+
Tcl_IncrRefCount(ewPtr->body.ew.padYObj);
1286+
}
12671287
}
12681288
*xPtr = chunkPtr->x + padX;
12691289
if (ewPtr->body.ew.stretch) {

0 commit comments

Comments
 (0)