gimpusers.com logo
German version English version

Not logged in

Sign up! | Lost password?

Latest discussion

  1. gimp-user | today 10:48 AM
    Suppressing the "press any character to close this window" message in Script-Fu
  2. gimp-developer | today 10:45 AM
    Help with new default resources in 2.8
  3. gimp-docs | today 10:34 AM
    Where does the HTML documentation
  4. gimp-developer | today 09:34 AM
    html layers
  5. gimp-developer | today 08:50 AM
    Please fix Color and/or Value transfer mode

External news

Poll

Would you like to see or even participate in GFX contests hosted by gimpusers.com?

Yes, but prices for winners are important!

Yes, GFX contests are a good idea! It brings community together even if there are no prices available

No, contests are not important

Maybe, it is however not a tragedy if there are no contests. I don't care much.

See results

Stats

gimpusers.com RSS feed

GIMP Forums » For GEGL developers

Bit rot in GEGL examples

Jump to message:

  1. Bit rot in GEGL examples — Klaus Pedersen, 25 Feb 2010 05:23 PM

As a registered user, you can subscribe forum threads in order to get notified when replies are posted. Just log in at the right top of the page if you already have an account, otherwise you can register for free.

Permalink:loom.20100225T161010-713@post.gmane.org
Date:25 Feb 2010 05:23 PM
From:Klaus Pedersen
Subject:Bit rot in GEGL examples
Hi,

On Klaus Wrote to the gmame robot:
>
> No I am not top-posting!
>

Recently I have been playing with GEGL, the api and design is easy enough but
unfortunately the examples doesn't compile/run any more.

For example:

examples/hello-world.c:

GeglNode *display = gegl_node_create_child (gegl, "gegl:display");


and

examples/hello-world-video.c:

GeglNode *display = gegl_node_new_child (gegl, "operation",
"gegl:ff-save", "path", "test.avi", "bitrate", 1200000.0, NULL);


With these two examples you get runtime errors complaining about the operations
"gegl:display" and "gegl:ff-save" are unknown.


examples/gegl-paint.c:

Running ./paint without parameters terminate with a buffer overflow.
I tried to trace it. Here is how it looks with function traces:

$ ./paint
...
expose_event:441
gegl_view_repaint:505
gegl_view_repaint:511 (roi={0,0,513,513})
*** buffer overflow detected ***: ./paint terminated
======= Backtrace: =========
/lib64/libc.so.6(__fortify_fail+0x37)[0x3b4c4f75e7]
/lib64/libc.so.6[0x3b4c4f5600]
/usr/lib64/libgegl-0.0.so.0(gegl_buffer_header_init+0x54)

Notice that the repaint area in "gegl_view_repaint()" is bigger
than the allocated area. To fix it we can change gegl_view_repaint():

void
gegl_view_repaint (GeglView *view)
{
GtkWidget *widget = GTK_WIDGET (view);
GeglViewPrivate *priv = GEGL_VIEW_GET_PRIVATE (view);
GeglRectangle roi;
GtkAllocation allocation;

roi.x = priv->x / priv->scale;
roi.y = priv->y / priv->scale;
gtk_widget_get_allocation (widget, &allocation);
roi.width = ceil(allocation.width / priv->scale+1);
roi.height = ceil(allocation.height / priv->scale+1);

Should probably be changed to:
+ roi.width = ceil(allocation.width / priv->scale);
+ roi.height = ceil(allocation.height / priv->scale);

Making this change make the program run a little longer. But still
crash after flashing the window on the screen:

$ ./paint
...
gegl_view_class_init:105
gegl_view_init:176
gegl_view_repaint:513
gegl_view_repaint:519 (roi={0,0,1,1})
expose_event:447
gegl_view_repaint:513
gegl_view_repaint:519 (roi={0,0,512,512})
*** buffer overflow detected ***: ./paint terminated
======= Backtrace: =========
/lib64/libc.so.6(__fortify_fail+0x37)[0x3b4c4f75e7]
/lib64/libc.so.6[0x3b4c4f5600]
/usr/lib64/libgegl-0.0.so.0(gegl_buffer_header_init+0x54)[0x34b421b684]
/usr/lib64/libgegl-0.0.so.0[0x34b4226bff]
/usr/lib64/libgegl-0.0.so.0[0x34b4227cd6]
/usr/lib64/libgegl-0.0.so.0[0x34b4229f04]
/usr/lib64/libgegl-0.0.so.0(gegl_tile_store+0x8a)[0x34b422517a]



After removing the call to gegl_buffer_linear_close (buffer, buf)
in main() - the program executes without buffer overflows (why??).

> buf = gegl_buffer_linear_open(buffer, NULL, NULL, babl_format("Y' u8"));
> /* it would be useful to have a programmatic way of doing this */
> memset (buf, 100, 512 * 512);
>// gegl_buffer_linear_close (buffer, buf);


The program can run, but nothing happens on the screen (it's black)...



BR, Klaus
_______________________________________________
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer
↑Back to thread overview

Adobe® Photoshop® is a registered trademark of Adobe Systems, Inc. Linux is a trademark of Linus Torvalds. Ubuntu and Canonical are registered trademarks of Canonical Ltd. | Clock times are shown as CET / CEST | Imprint / Privacy policy | powered by bitfire it services | sponsored by Hirners Hotel Guide