Package: yabasic Version: 2.763-4 Severity: normal Tags: patch In yabasic, executing the statement "open window 200,200" results in the following error output:
open window 200,200 *** glibc detected *** yabasic: munmap_chunk(): invalid pointer: 0x080683a1 *** ======= Backtrace: ========= /lib/i686/cmov/libc.so.6[0xb7ca74f4] yabasic[0x80575f1] yabasic[0x8059552] yabasic[0x804db6b] yabasic[0x804e336] /lib/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0xb7c4f455] yabasic[0x804a711] ======= Memory map: ======== 08048000-08078000 r-xp 00000000 08:06 296531 /usr/bin/yabasic 08078000-08079000 rw-p 0002f000 08:06 296531 /usr/bin/yabasic 08079000-080b2000 rw-p 08079000 00:00 0 [heap] b7bdd000-b7be7000 r-xp 00000000 08:01 39952 /lib/i686/cmov/libnss_files-2.7 .so b7be7000-b7be9000 rw-p 00009000 08:01 39952 /lib/i686/cmov/libnss_files-2.7 .so b7c11000-b7c12000 rw-p b7c11000 00:00 0 b7c12000-b7c16000 r-xp 00000000 08:06 1235847 /usr/lib/libXdmcp.so.6.0.0 b7c16000-b7c17000 rw-p 00003000 08:06 1235847 /usr/lib/libXdmcp.so.6.0.0 b7c17000-b7c19000 r-xp 00000000 08:06 1235845 /usr/lib/libXau.so.6.0.0 b7c19000-b7c1a000 rw-p 00001000 08:06 1235845 /usr/lib/libXau.so.6.0.0 b7c1a000-b7c31000 r-xp 00000000 08:06 1235849 /usr/lib/libxcb.so.1.0.0 b7c31000-b7c32000 rw-p 00016000 08:06 1235849 /usr/lib/libxcb.so.1.0.0 b7c32000-b7c33000 rw-p b7c32000 00:00 0 b7c33000-b7c34000 r-xp 00000000 08:06 1236455 /usr/lib/libxcb-xlib.so.0.0.0 b7c34000-b7c35000 rw-p 00000000 08:06 1236455 /usr/lib/libxcb-xlib.so.0.0.0 b7c35000-b7c37000 r-xp 00000000 08:01 39946 /lib/i686/cmov/libdl-2.7.so b7c37000-b7c39000 rw-p 00001000 08:01 39946 /lib/i686/cmov/libdl-2.7.so b7c39000-b7d8e000 r-xp 00000000 08:01 39943 /lib/i686/cmov/libc-2.7.so b7d8e000-b7d8f000 r--p 00155000 08:01 39943 /lib/i686/cmov/libc-2.7.so b7d8f000-b7d91000 rw-p 00156000 08:01 39943 /lib/i686/cmov/libc-2.7.so b7d91000-b7d94000 rw-p b7d91000 00:00 0 b7d94000-b7e7f000 r-xp 00000000 08:06 1236457 /usr/lib/libX11.so.6.2.0 b7e7f000-b7e82000 rw-p 000eb000 08:06 1236457 /usr/lib/libX11.so.6.2.0 b7e82000-b7e83000 rw-p b7e82000 00:00 0 b7e83000-b7eb2000 r-xp 00000000 08:01 26585 /lib/libncurses.so.5.6 b7eb2000-b7eb5000 rw-p 0002f000 08:01 26585 /lib/libncurses.so.5.6 b7eb5000-b7ed9000 r-xp 00000000 08:01 39947 /lib/i686/cmov/libm-2.7.so b7ed9000-b7edb000 rw-p 00023000 08:01 39947 /lib/i686/cmov/libm-2.7.so b7edb000-b7edc000 rw-p b7edb000 00:00 0 b7edc000-b7ef0000 r-xp 00000000 08:06 1236461 /usr/lib/libICE.so.6.3.0 b7ef0000-b7ef1000 rw-p 00014000 08:06 1236461 /usr/lib/libICE.so.6.3.0 b7ef1000-b7ef3000 rw-p b7ef1000 00:00 0 b7ef3000-b7efa000 r-xp 00000000 08:06 1236463 /usr/lib/libSM.so.6.0.0 b7efa000-b7efb000 rw-p 00006000 08:06 1236463 /usr/lib/libSM.so.6.0.0 b7f14000-b7f20000 r-xp 00000000 08:01 26627 /lib/libgcc_s.so.1 b7f20000-b7f21000 rw-p 0000b000 08:01 26627 /lib/libgcc_s.so.1 b7f21000-b7f25000 rw-p b7f21000 00:00 0 b7f25000-b7f3f000 r-xp 00000000 08:01 29362 /lib/ld-2.7.so b7f3f000-b7f41000 rw-p 0001a000 08:01 29362 /lib/ld-2.7.so bf9de000-bf9f3000 rw-p bffeb000 00:00 0 [stack] ffffe000-fffff000 r-xp 00000000 00:00 0 [vdso] ---Fatal in standard input, line 1: received signal ABORT, cannot proceed. ---Immediate exit to system, due to a fatal error. I found a discussion at http://forum.basicprogramming.org/index.php?topic=21.0 and a patch at http://www.basicprogramming.org/files/graphic.patch, which I'm including with this report. I've applied the patch on my system and it does fix the problem. -- System Information: Debian Release: lenny/sid APT prefers testing APT policy: (750, 'testing'), (80, 'cool'), (80, 'cold'), (40, 'stable') Architecture: i386 (i686) Kernel: Linux 2.6.24-1-686 (SMP w/4 CPU cores) Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968) Shell: /bin/sh linked to /bin/bash Versions of packages yabasic depends on: ii libc6 2.7-13 GNU C Library: Shared libraries ii libice6 2:1.0.4-1 X11 Inter-Client Exchange library ii libncurses5 5.6+20080804-1 shared libraries for terminal hand ii libsm6 2:1.0.3-2 X11 Session Management library ii libx11-6 2:1.1.4-2 X11 client-side library yabasic recommends no packages. yabasic suggests no packages. -- debconf-show failed
diff -r -u yabasic-2.763.orig/graphic.c yabasic-2.763/graphic.c --- yabasic-2.763.orig/graphic.c 2008-08-28 15:35:44.000000000 -0400 +++ yabasic-2.763/graphic.c 2008-08-28 15:36:50.000000000 -0400 @@ -212,12 +212,12 @@ return; #ifdef UNIX - /* create the window */ attrib.backing_store = Always; attrib.save_under = TRUE; attrib.background_pixel = backpixel; attrib.colormap = colormap; + window = XCreateWindow (display, root, winx, winy, winwidth, winheight, 0, CopyFromParent, CopyFromParent, visualinfo.visual, @@ -731,6 +731,7 @@ return FALSE; } + /* get screen */ screen = DefaultScreen (display); root = RootWindow (display, screen); @@ -780,8 +781,10 @@ visualinfo.visual, AllocNone); /* now, that we have the colormap, we try to get the colors requested for fore- and background */ + if (!foreground) foreground = XGetDefault (display, "yabasic", "foreground"); + if (!foreground) foreground = "black"; if (!XLookupColor @@ -815,6 +818,7 @@ /* get size hints */ if (geometry == NULL) geometry = XGetDefault (display, "yabasic", "geometry"); + XParseGeometry (geometry, &winx, &winy, &w, &h); sizehints.x = winx; sizehints.y = winy; @@ -830,12 +834,15 @@ rgc = XCreateGC (display, root, GCForeground | GCBackground, &xgcvalues); /* get font */ - if (!font) - font = XGetDefault (display, "yabasic", "font"); - if (!font) - font = "6x10"; - if (!change_font (font)) - return FALSE; + +/* if (!font) + font = XGetDefault (display, "yabasic", "font");*/ + if (!font) { + font = malloc(sizeof(char)*6); + font = strcpy(font,"fixed"); + } + if (!change_font (font)) + return FALSE; #elif WINDOWS /* choose font */ @@ -895,19 +902,20 @@ #ifdef UNIX if (font) - { - if (!myfont || strcmp (font, name)) + { + if (!myfont || strcmp (font, name)) { - if (myfont) - XUnloadFont (display, myfont->fid); - my_free (font); - } - else - { - return TRUE; + if (myfont) { + XUnloadFont (display, myfont->fid); + my_free (font); + } } + else + { + return TRUE; } - font = my_strdup (name); + } +// font = my_strdup (name); myfont = XLoadQueryFont (display, font); if (!myfont) {