]> granicus.if.org Git - graphviz/commit
delaunay_remove_holes: fix mismatch of calling convention in callback
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 7 Nov 2021 18:54:58 +0000 (10:54 -0800)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Wed, 10 Nov 2021 02:33:36 +0000 (18:33 -0800)
commite90132e9fe08231104b8d6bb17f33f66db4d82e0
treec955602c8ccd4b2a4ae857991d3a42b862798923
parentae1e57cb7841382afbf2b463cd6972b9beb1055a
delaunay_remove_holes: fix mismatch of calling convention in callback

The compiler said about this code:

  delaunay.c: In function ‘delaunay_remove_holes’:
  delaunay.c:45:9: warning: cast between incompatible function types from
    ‘gboolean (*)(GtsTriangle *)’ {aka ‘int (*)(struct _GtsTriangle *)’}
    to ‘gint (*)(void *, void *)’ {aka ‘int (*)(void *, void *)’}
    [-Wcast-function-type]
         (GtsFunc) triangle_is_hole, NULL);

This warning is not spurious. In particular, the mismatch in the number of
arguments passed to the callback means the callback function has a different
calling convention than expected by the code calling it. The result of this can
be stack corruption or incorrect interpretation of function arguments.

In practice, all major native calling conventions use registers for both
function types, so this is somewhat benign. However, this likely caused problems
on stack-based environments like WASM and JITs.
CHANGELOG.md
lib/neatogen/delaunay.c