package: gimp
version: 2.2.13-1etch4
Severity: grave
Error Messages:
1) Reflection Message - Error while executing (script-fu-gimp-reflection 1
3 30 100 FALSE TRUE) ERROR: unbound variable (errobj
gimp-image-get-layer-position)
2) GIMP Message - Not enough visible layers for a merge. There must be at
least two. Reflection Message - Error while executing
(script-fu-gimp-reflection 1 2 30 100 FALSE TRUE) ERROR: Procedural
database execution failed: (gimp_image_merge_visible_layers 1 0)
Procedure to Reveal Bug:
0) Place gimp-reflection.scm in the /usr/share/gimp/2.0/scripts directory
1) Open Gimp
2) Close "GIMP Tip of the Day" window
3) Open Recent Single Layer Image File (jpg or psd)
4) Click Layer > Duplicate Layer
5) Click Filters > Decor > Reflection
6) Leave Defaults and Click "OK" on new window
7) Click "OK" when error message (1) pops up
8) Click Edit > Undo History
9) Watch Hard Drive Space Impersonate Evidence for WMD's
Description:
When the program first froze, I initially minimized it to see if it would
recover on it's own. I didn't realize other systems were being affected
until I tried to save a file in gnumeric and was given an out of space
error message. I proceded to terminate gimp with the 'xkill' command.
After running 'ps -ax', I noticed additional references to gimp, so i used
'kill -9' to terminate those processes with gimp in the name. At least
one would not die. I think it said '[gimp 2.2] <defunct>'. I tried to
logout then login. I tried to reboot. I tried to reboot and force an
fsck (shutdown -F -r now). After running once, fsck reported some
'failure', automatically rebooted and checked the 200GB partition a second
time. The second time it finished without errors and proceeded with the
boot process.
I was able to repeat this bug numerous times on my system. I have not
been able to recover the hard drive space that disappears. I checked the
usual suspects (/var, /tmp, and .profile directories). I'm running
fluxbox, so I don't have a trash icon. I have not modified any partitions
in years.
I spent hours researching a possible cause/solution. The malfunctions I
found that cause mildly similar symptoms are a decompression bomb, or disk
blocks still in use by a deleted file. Trouble-shooting problems like
this is well beyond my skill level. Just in case, here are the links:
http://www.aerasec.de/security/advisories/decompression-bomb-vulnerability.html)
http://forums.whirlpool.net.au/forum-replies-archive.cfm/699252.html
Also of note is my system is now missing hard drive space (over 10GB).
While running 'df', I noticed that 'used' + 'available' does not equal the
total '1-k blocks'. I'm not positive that this discrepancy wasn't there
before gimp crashed the first time, but I first noticed the discrepancy
after the crash. I was not able to repeat a similar discrepancy in later
crashes.
Contents of ~/.gimp-2.2/gimprc:
(swap-path "/tmp")
(tile-cache-size 320M)
(monitor-xresolution 100.000000)
(monitor-yresolution 100.000000)
(help-browser web-browser)
Depends: wget, gimp-data (= 2.2.13-1etch4), libaa1 (>= 1.2), libart-2.0-2
(>= 2.3.16), libatk1.0-0 (>= 1.12.2), libc6 (>= 2.3.6-6), libcairo2 (>=
1.2.4), libexif12, libexpat1 (>= 1.95.8), libfontconfig1 (>= 2.4.0),
libfreetype6 (>= 2.2), libgimp2.0 (>= 2.2.0+rel), libglib2.0-0 (>=
2.12.0), libgtk2.0-0 (>= 2.8.0), libice6 (>= 1:1.0.0), libjpeg62, liblcms1
(>= 1.08-1), libmng1 (>= 1.0.3-1), libpango1.0-0 (>= 1.14.8), libpng12-0
(>= 1.2.13-4), libsm6, libtiff4, libwmf0.2-7 (>= 0.2.8.4), libx11-6,
libxcursor1 (>> 1.1.2), libxext6, libxfixes3 (>= 1:4.0.1), libxi6,
libxinerama1, libxmu6, libxpm4, libxrandr2, libxrender1, libxt6, zlib1g
(>= 1:1.2.1)
System Info:
Kernel Version: 2.6.18-5-686 #1 SMP Wed Oct 3 00:12:50 UTC 2007 i686
GNU/Linux
Shared C Library: /lib/libc.so.6 -> libc-2.3.6.so
Debian Notes:
I attempted to upgrade from Sarge. The upgrade wasn't completely clean
and there were two files with dependency issues. Because of this, I
haven't downloaded very many software updates in months.
Processor Info:
processor : 0
vendor_id : AuthenticAMD
cpu family : 6
model : 10
model name : AMD Athlon(tm) XP 2500+
stepping : 0
cpu MHz : 1830.088
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr sse syscall mmxext 3dnowext 3dnow up ts
bogomips : 3662.85
I attached the malicious 'reflection.scm' file. It can be downloaded at:
http://registry.gimp.org/node/1025
nate carr
;
; Reflection v0.3 2007-12-20
;
; Copyright (C) 2005-2007 Otavio Correa Cordeiro (otavio gmail com)
; Create a reflection effect like Apple iWeb does..
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
;
; modified by Paul Sherman to work in GIMP 2.4.2 on 11/30/2007
;
; modified by David Cummins and Paul Sherman Dec 2007, tested on GIMP-2.4.3
; * added user settings to control the height of the generated reflection,
; the gradient mask starting point (presented as Fade Rate %), and options
; to keep the generated reflection as a separate layer, or on a single layer
; either transparent or flattened.
; * added code to "play nice" with the current GIMP environment: colors and
; gradient prior selections are preserved, as well as the original layer
; name (handled using careful stack order).
; generated layers are constrained around the original layer.
; * simplified some of the internal logic so repeated calculations are done
; only once, reformatted, organised the code, added comments, etc.
; * flattened on start (to avoid errors)
; * undo ability functional
;
(define (script-fu-gimp-reflection
theImage
theLayer
userHeight
userFade
new_layer
transparentBG
)
(gimp-image-undo-group-start theImage)
(gimp-selection-all theImage)
(gimp-selection-none theImage)
(set! theLayer (car(gimp-image-merge-visible-layers theImage 0)))
;preserve original settings
(define old-bg (car (gimp-context-get-background)))
(define old-fg (car (gimp-context-get-foreground)))
(define old-grad (car (gimp-context-get-gradient)))
;calculate color for start of gradient fade
(define fadeStart (* (- 100 userFade) 2.55))
(define fadeColor (list fadeStart fadeStart fadeStart))
(define originalWidth (car (gimp-image-width theImage)))
(define originalHeight (car (gimp-image-height theImage)))
(define reflectionScale (/ userHeight 100))
(define stackPos (car(gimp-image-get-layer-position theImage theLayer)))
(define newWidth originalWidth)
(define newHeight (* originalHeight (+ reflectionScale 1)))
(define gradX (/ originalWidth 2))
(define gradY1 (* originalHeight reflectionScale))
(define gradY2 (* originalHeight reflectionScale -1))
(gimp-image-resize theImage originalWidth newHeight 0 0)
(define new-layer (car (gimp-layer-copy theLayer 1)))
(gimp-image-add-layer theImage new-layer (+ stackPos 0))
(gimp-drawable-set-name new-layer "Reflection")
(gimp-layer-set-offsets new-layer 0 originalHeight)
(gimp-flip new-layer 1)
(define new-mask (car (gimp-layer-create-mask new-layer 0)))
(gimp-layer-add-mask new-layer new-mask)
(gimp-context-set-foreground fadeColor)
(gimp-edit-blend new-mask FG-TRANSPARENT-MODE NORMAL-MODE
GRADIENT-LINEAR 100 0 REPEAT-NONE
FALSE
FALSE 0 0 TRUE
gradX gradY1 gradX gradY2)
(if (= new_layer FALSE)
(begin
(if (= transparentBG TRUE)
(begin ;# NO separate layer, transparent ##############
(gimp-image-merge-visible-layers theImage 1)
)
(begin ;# NO separate layer, NOT transparent ##########
(gimp-image-flatten theImage)
)
)
; final crop not needed for new_layer FALSE
)
(begin
(if (= transparentBG TRUE)
(begin ;# separate layer, transparent ###############
(gimp-image-set-active-layer theImage new-layer)
)
(begin ;# separate layer, NOT transparent ###########
(define bg-layer (car(gimp-layer-new theImage originalWidth newHeight 0 "Reflection BG" 100 0)))
(gimp-image-add-layer theImage bg-layer (+ stackPos 2))
(gimp-selection-all theImage)
(gimp-bucket-fill bg-layer 1 0 100 255 0 1 1)
(gimp-selection-none theImage)
(gimp-image-set-active-layer theImage new-layer)
)
)
; the Reflection layer still overflows the image here
(gimp-image-crop theImage originalWidth newHeight 0 0)
)
)
;restore original settings
(gimp-context-set-foreground old-fg)
(gimp-context-set-background old-bg)
(gimp-context-set-gradient old-grad)
(gimp-image-undo-group-end theImage)
(gimp-displays-flush)
)
(script-fu-register "script-fu-gimp-reflection"
"<Image>/Filters/Decor/Reflection"
"Reflection -- extends lower section of an image as a reflection of the original image."
"Original author Otavio Cordeiro, later edited by David Cummins and Paul Sherman"
"Otavio Cordeiro (otavio gmail com)"
"Last updated 12/19/2007 - tested on GIMP-2.4.3"
"RGB* GRAY*"
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT "Reflection Height (% of original)" '( 30 10 99 1 20 0 0)
SF-ADJUSTMENT "Fade Rate (%)" '(100 0 100 10 20 0 0)
SF-TOGGLE "Keep Reflection as a separate Layer" FALSE
SF-TOGGLE "Transparent Background" TRUE
)