pkgsrc-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
pkg/32445: x11/Xaw3d causes graphics/xfig to hang under kde
>Number: 32445
>Category: pkg
>Synopsis: x11/Xaw3d has an overflow error in geometry computation code,
>causing xfig to hang under KDE
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: pkg-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Tue Jan 03 14:05:00 +0000 2006
>Originator: Stephan Thesing
>Release: NetBSD 3.99.11
>Organization:
= Tel.: +49-681-302-5571 = Universitaet des Saarlandes =
= Fax.: +49-681-302-3065 = Postfach 15 11 50 =
= Compiler Research Group = 66041 Saarbruecken =
= FR 6.2 - Informatik = GERMANY =
>Environment:
System: NetBSD gargoyle.cs.uni-sb.de 3.99.11 NetBSD 3.99.11 (Gargoyle) #5: Mon
Nov 7 08:53:22 CET 2005
thesing%gargoyle.cs.uni-sb.de@localhost:/local/thesing/netbsd/current/obj/sys/arch/i386/compile.i386/Gargoyle
i386
Architecture: i386
Machine: i386
>Description:
The x11/Xaw3d library has an integer overflow error in the computation of the
geometry for a Box Layout (file Box.c). There, the box tries to extend its
width until its
height fits within the constraint height (influenced by the window manager).
Unfortunately, widths are 16bit unsigned and in the error case (occuring
under KDE, windowmaker, twm
work fine here:-), the constraint width is 65535, i.e. maximal.
The code loops until either the computed height is smaller than the constraint
height or
the width exceeds the constraint width. In each loop iteration, the width of
the box layout is
doubled. This loop does not terminate, if one chooses unfortunate initial
width, as the width
wraps around if it overflows 16 bits and if the maximal constraint width is
SHORT_INT_MAX.
>How-To-Repeat:
Try to use xfig under KDE.
>Fix:
The following patch for X11/Xaw3d tries to capture the overflow before it wraps
around the
`width' variable, setting the width to the maximal one.
It makes xfig work under KDE.
--- Box.c.orig 1996-10-15 14:41:18.000000000 +0000
+++ Box.c 2006-01-02 15:13:32.000000000 +0000
@@ -352,8 +352,12 @@
}
else {
width = preferred_width;
+ if (0==width) width=1;
do { /* find some width big enough to stay within this height */
- width *= 2;
+ if (width>=32768) /* overflow */
+ width=constraint->width;
+ else
+ width*=2;
if (width > constraint->width) width = constraint->width;
DoLayout(w, width, 0, &preferred_width, &preferred_height,
FALSE);
} while (preferred_height > constraint->height &&
>Unformatted:
Home |
Main Index |
Thread Index |
Old Index