]> granicus.if.org Git - graphviz/commit
cgraph: fix: align 'dict_relabel' with 'agobjfn_t' type signature
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 6 Nov 2022 18:08:58 +0000 (10:08 -0800)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Thu, 10 Nov 2022 16:47:32 +0000 (08:47 -0800)
commitf48e7e4d9692131c8f87023fa9ab0fd31bef59b1
tree2af172e9e27a69721b2049705198001f06bf7320
parenta96ddedd1e0c890d738f2e70aeac75defae4d762
cgraph: fix: align 'dict_relabel' with 'agobjfn_t' type signature

The `dict_relabel` function is used as a callback and the compiler correctly
identified it would be invoked incorrectly:

  node.c: In function ‘agrelabel_node’:
  node.c:245:37: warning: cast between incompatible function types from
    ‘void (*)(Agnode_t *, void *)’ {aka ‘void (*)(struct Agnode_s *, void *)’}
    to ‘void (*)(Agraph_t *, Agobj_t *, void *)’ {aka ‘void (*)(struct Agraph_s
    *, struct Agobj_s *, void *)’} [-Wcast-function-type]
    245 |  agapply(g, (Agobj_t*)n, (agobjfn_t)dict_relabel, &new_id, FALSE);
        |                          ^

The calling convention of `dict_relabel` and `agobjfn_t` differed in a way that
meant the callback would result in stack corruption on most platforms.

Note that this has little effect on the #2300 test case involving `gxl2gv`
because `dict_relabel` is still incorrect, crashing with references to invalid
pointers when you invoke it.

Gitlab: #2300
CHANGELOG.md
lib/cgraph/node.c