Google
  Web www.spinics.net

Bit rot in GEGL examples

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


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@xxxxxxxxxxxxxxxxxxxxxx
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer

[Video For Linux]     [Photo]     [Yosemite News]    [Yosemite Photos]    [gtk]     [GIMP Users]     [KDE]     [Scanner]     [Gimp's Home]     [Gimp on Windows]     [Steve's Art]     [Webcams]