Tcl Source Code

View Ticket
Login
Ticket UUID: 733911
Title: canvas postscript command core dumps on special polygon
Type: Bug Version: final: 8.3.5
Submitter: nobody Created on: 2003-05-07 14:33:45
Subsystem: 18. Commands M-Z Assigned To: dkf
Priority: 5 Medium Severity:
Status: Closed Last Modified: 2003-05-07 21:50:28
Resolution: Invalid Closed By: dkf
    Closed on: 2003-05-07 14:50:28
Description:
Hi,

there is a bug in tkCanvPoly.c:PolygonToPostscript in 
recent Tk Versions (tested 8.3.5, 8.4.2).


Create a polygon with two identical points and no
outline color (I know this seems to be nonsense,
but in my case it was absolutely needed).
Do a postscript command on the canvas and you get the
core dump (a color
NULL pointer is passed on from PolygonToPostscript to
Tk_PostscriptColor, where it is referenced)


15:09[wilm@rubin:ConStruct3]$ wish
.wishrc .wishrc .wishrc ...
% canvas .c
.c
% pack .c
% .c create polygon 10 20 10 20
1
% .c postscript
Segmentation fault




Setting the outline sets the color pointer to non-NULL:

15:41[wilm@rubin:ConStruct3]$  wish
.wishrc .wishrc .wishrc ...
%  canvas .c
.c
% pack .c
% .c create polygon 10 20 10 20 -outline black
1
% .c postscript
%!PS-Adobe-3.0 EPSF-3.0
...



To avoid this create a polygon with 3 points (using two
different points
activates expansion to three points and cirumvents the
faulty if-clause as well):

16:04[wilm@rubin:ConStruct3]$ wish
.wishrc .wishrc .wishrc ...
% canvas .c
.c
% pack .c
% .c create polygon 10 20 10 20 10 20 
1
% .c postscript
%!PS-Adobe-3.0 EPSF-3.0
...


The reason for this bu is the following:
If only two points exist, special case code is used to
create a line and the color
is not verfified to be valid.

To patch this just check if color==NULL in case
polyPtr->numPoints==2 and return TCL_OK
See attachment.

Andreas
User Comments: dkf added on 2003-05-07 21:50:27:
Logged In: YES 
user_id=79902

While serious, this is not a bug in Tcl.  Please resubmit to
the tktoolkit project.

nobody added on 2003-05-07 21:33:46:

File Added - 49795: tkCanvPoly.diff

Attachments: