]> granicus.if.org Git - graphviz/log
graphviz
2 years agosmyrna toolboxcallbacks: remove excess white space
Matthew Fernandez [Fri, 22 Jul 2022 01:18:00 +0000 (18:18 -0700)]
smyrna toolboxcallbacks: remove excess white space

2 years agosmyrna toolboxcallbacks: squash -Wunused-parameter warnings
Matthew Fernandez [Fri, 22 Jul 2022 01:16:34 +0000 (18:16 -0700)]
smyrna toolboxcallbacks: squash -Wunused-parameter warnings

These functions are used as Glade callbacks, so need to conform to particular
type signatures.

2 years agosmyrna topviewsettings: squash -Wunused-parameter warnings
Matthew Fernandez [Fri, 22 Jul 2022 01:14:08 +0000 (18:14 -0700)]
smyrna topviewsettings: squash -Wunused-parameter warnings

These functions are used as Glade callbacks, so need to conform to particular
type signatures.

2 years agosmyrna load_settings_from_graph: remove unused 'g' parameter
Matthew Fernandez [Fri, 22 Jul 2022 01:08:04 +0000 (18:08 -0700)]
smyrna load_settings_from_graph: remove unused 'g' parameter

2 years agotclpkg tclGdSizeCmd: squash an -Wunused-parameter warning
Matthew Fernandez [Fri, 22 Jul 2022 01:05:09 +0000 (18:05 -0700)]
tclpkg tclGdSizeCmd: squash an -Wunused-parameter warning

This parameter cannot easily be removed because this function is used as a
callback and needs to conform to a particular type signature.

2 years agoMerge branch 'smattr/d5eaf8b2-870d-4ef0-9557-51428f498a1b' into 'main'
Matthew Fernandez [Tue, 26 Jul 2022 03:00:38 +0000 (03:00 +0000)]
Merge branch 'smattr/d5eaf8b2-870d-4ef0-9557-51428f498a1b' into 'main'

misc simplification

See merge request graphviz/graphviz!2768

2 years agoPango plugin: remove unnecessary cast
Matthew Fernandez [Tue, 19 Jul 2022 03:00:30 +0000 (20:00 -0700)]
Pango plugin: remove unnecessary cast

2 years agoGDK plugin: remove unnecessary casts
Matthew Fernandez [Tue, 19 Jul 2022 03:00:16 +0000 (20:00 -0700)]
GDK plugin: remove unnecessary casts

2 years agoGD plugin: remove unnecessary casts
Matthew Fernandez [Tue, 19 Jul 2022 02:59:46 +0000 (19:59 -0700)]
GD plugin: remove unnecessary casts

2 years agorsvg plugin gvloadimage_rsvg_cairo: remove unnecessary cast
Matthew Fernandez [Tue, 19 Jul 2022 02:49:22 +0000 (19:49 -0700)]
rsvg plugin gvloadimage_rsvg_cairo: remove unnecessary cast

2 years agoglcomp plugin file_exists: simplify readability test
Matthew Fernandez [Tue, 19 Jul 2022 02:46:29 +0000 (19:46 -0700)]
glcomp plugin file_exists: simplify readability test

We do not need to open a file to test if it is readable.

2 years agoexpr extoken_fn: simplify hex parsing loop
Matthew Fernandez [Tue, 19 Jul 2022 02:42:42 +0000 (19:42 -0700)]
expr extoken_fn: simplify hex parsing loop

2 years agoexpr prformat: replace pointer and extent with central string view abstraction
Matthew Fernandez [Tue, 19 Jul 2022 02:30:50 +0000 (19:30 -0700)]
expr prformat: replace pointer and extent with central string view abstraction

2 years agocommon: remove some unnecessary casts
Matthew Fernandez [Tue, 19 Jul 2022 02:25:57 +0000 (19:25 -0700)]
common: remove some unnecessary casts

2 years agoMerge branch 'fix-subgraph-layout-and-rendering' into 'main'
Magnus Jacobsson [Mon, 25 Jul 2022 19:26:06 +0000 (19:26 +0000)]
Merge branch 'fix-subgraph-layout-and-rendering' into 'main'

Fix subgraph layout and rendering

Closes #1800

See merge request graphviz/graphviz!2767

2 years agoremove GD_drawing(g) NULL guard
Magnus Jacobsson [Tue, 12 Jul 2022 13:15:50 +0000 (15:15 +0200)]
remove GD_drawing(g) NULL guard

This guard is unnecessary since `graph_cleanup` alrady has the
necessary guards. This also ensures that the Agraphinfo_t record and
the graph's label is cleaned away even if the graph for some reason
doesn't have a drawing (can this ever happen?).

2 years agogvFreeLayout: correct comments about reset and root graph
Magnus Jacobsson [Tue, 12 Jul 2022 13:04:57 +0000 (15:04 +0200)]
gvFreeLayout: correct comments about reset and root graph

This comment was added in 44b02b91bd156cb832894fb4948bf4bc75ab27cb,
but this commit changed the cleanup to work on the given graph
(possibly a subgraph), not the root graph. The resets mentioned were
removed in 67acd9e27a053a5b80b3d1458f512d472debb434,
b3b7e0d1aea43baa81bf06a27d38447d6958c1b8 and
a71555a4ac650bf91396c77c277697b45eee44e6, although the called
`graph_cleanup` function does its own reset.

2 years agogvFreeLayout: remove incorrect comment about only the root graph having a drawing
Magnus Jacobsson [Wed, 6 Jul 2022 12:56:16 +0000 (14:56 +0200)]
gvFreeLayout: remove incorrect comment about only the root graph having a drawing

This comment was added in c55b546e3965a8dfd2a66763961c4a8003e433bf,
but both subgraphs and root graphs have a reference to (the same)
drawing through this statement in gvLayoutJobs:

    GD_drawing(agroot(g)) = GD_drawing(g);

2 years agotwopigen: layout: fix heap-buffer-overflow by storing dimension in root graph
Magnus Jacobsson [Mon, 18 Jul 2022 13:02:59 +0000 (15:02 +0200)]
twopigen: layout: fix heap-buffer-overflow by storing dimension in root graph

The layout allocates memory based on the dimension of the root graph,
but since the dimension was stored in the subgraph and the dimension
in the root graph defaulted to zero, too little memory was allocated.

An alternative solution would have been to use the dimension of the
subgraph, but this had other implications and the chosen solution is
the same as what the other two layout engines supporting the dim
attribute (neato and sfdp) use. Twopi always uses two dimensions.

This fixes the last memory issue detected by ASan in the
test_subgraph_layout test, which now runs without failures.

2 years agocircogen: layout: fix heap-buffer-overflow by storing dimension in root graph
Magnus Jacobsson [Mon, 18 Jul 2022 12:56:45 +0000 (14:56 +0200)]
circogen: layout: fix heap-buffer-overflow by storing dimension in root graph

The layout allocates memory based on the dimension of the root graph,
but since the dimension was stored in the subgraph and the dimension
in the root graph defaulted to zero, too little memory was allocated.

An alternative solution would have been to use the dimension of the
subgraph, but this had other implications and the chosen solution is
the same as what the other two layout engines supporting the `dim`
attribute (neato and sfdp) use. Circo always uses two dimensions.

2 years agofdpgen: layout: fix heap-buffer-overflow by storing dimension in root graph
Magnus Jacobsson [Mon, 18 Jul 2022 12:17:04 +0000 (14:17 +0200)]
fdpgen: layout: fix heap-buffer-overflow by storing dimension in root graph

The layout allocates memory based on the dimension of the root graph,
but since the dimension was stored in the subgraph and the dimension
in the root graph defaulted to zero, too little memory was allocated.

An alternative solution would have been to use the dimension of the
subgraph, but this had other implications and the chosen solution is
the same as what the other two layout engines supporting the `dim`
attribute (neato and sfdp) use.

2 years agogvRender*: render subgraph when given, not always root graph
Magnus Jacobsson [Mon, 18 Jul 2022 15:46:01 +0000 (17:46 +0200)]
gvRender*: render subgraph when given, not always root graph

These functions always rendered the root graph, even if a sub graph
was given. Apart from being incorrect, this caused
heap-buffer-overflow when trying to render a graph consisting of two
subgraph of which only one had a layout. Also, even if both subgraphs
had layouts, they somehow mixed up the bounding boxes of the graphs
causing some nodes and edges not to be rendered since they were
outside the graph bounding box.

2 years agogvLayoutJobs: initialize also root graph if it isn't already
Magnus Jacobsson [Wed, 13 Jul 2022 06:17:54 +0000 (08:17 +0200)]
gvLayoutJobs: initialize also root graph if it isn't already

The root graph info is needed by gvLayoutJobs when doing subgraph
layout. This fixes a heap-buffer-overflow detected by ASan in the
test_subgraph_layout test.

2 years agoadd new test test_subgraph_layout
Magnus Jacobsson [Tue, 12 Jul 2022 13:52:26 +0000 (15:52 +0200)]
add new test test_subgraph_layout

This test is run in CI with ASan leak detection enabled. It currectly
fails because ASan detects several memory issues in various layout
engines.

2 years agopatchwork: fix memory leak by freeing cluster data in graph cleanup
Magnus Jacobsson [Mon, 18 Jul 2022 07:53:21 +0000 (09:53 +0200)]
patchwork: fix memory leak by freeing cluster data in graph cleanup

This fixes a memory leak detected by ASan in the test_clusters test,
which now runs without failures

2 years agodotgen cluster: fix memory leaks by freeing data from removed rank leaders
Magnus Jacobsson [Mon, 18 Jul 2022 07:47:15 +0000 (09:47 +0200)]
dotgen cluster: fix memory leaks by freeing data from removed rank leaders

The `build_skeleton` function inserts virtual nodes and edges into the
graph to be used by the clustering algorithms. The `expand_cluster`
function later installs real nodes or sub-clusters and deletes the
virtual nodes and edges by calling the `remove_rank_leaders` function
which removes these from the graph. However, it didn't free the data
allocated for them which caused several memory leaks.

2 years agoadd new test case test_clusters
Magnus Jacobsson [Sun, 10 Jul 2022 08:47:22 +0000 (10:47 +0200)]
add new test case test_clusters

Upcoming commits in this series will make changes to subgraph layout
and since clusters are also subgraphs, we want to weed out any memory
issues related to clusters separately.

This test is run in CI with ASan leak detection enabled. It currectly
fails because ASan detects memory leaks in the dot and patchwork
layout engines.

2 years agodon't clean away Agraphinfo_t in layout specific cleanups
Magnus Jacobsson [Tue, 12 Jul 2022 13:11:25 +0000 (15:11 +0200)]
don't clean away Agraphinfo_t in layout specific cleanups

This cleanup is since 2b3b37c47244f57a9690bff8fb92f77d17ec616c handled
by the general `graph_cleanup` function.

This information is since 44b02b91bd156cb832894fb4948bf4bc75ab27cb
needed by the general layout cleanup function that runs after the
layout-specific cleanup.

This problem was fixed for root graphs in commit
c55b546e3965a8dfd2a66763961c4a8003e433bf, but not for subgraph layout.

This fixes a heap-buffer-overflow detected by ASan in the
test_neatopack test, which now runs without failures.

This commit also reverts commit
291b7a40f742551797e5681acbb8f5662c084822 since the
dot.demo/neatopack.c example now runs without failures.

Fixes https://gitlab.com/graphviz/graphviz/-/issues/1800.

2 years agoadd new test_neatopack test
Magnus Jacobsson [Mon, 4 Jul 2022 13:01:10 +0000 (15:01 +0200)]
add new test_neatopack test

Upcoming commits in this series will make changes to gvFreeLayout and
we want to ensure that those changes don't introduce any memory leaks
when run with ASan, since gvFreeLayout handles cleanup of both
subgraphs and the root graph and the test case extracts subgraphs from
the root graph.

This test is run in CI with ASan leak detection enabled. It is more or
less a replica of 'dot.demo/neatopack.c', which is also tested in CI
by 'tests/test_examples.py', but with leak detection disabled. It
currently fails because of a heap-buffer-overflow in the gvFreeLayout.

Towards https://gitlab.com/graphviz/graphviz/-/issues/1800.

2 years agodot.demo/neatopack.c: add missing free of connected components subgraphs
Magnus Jacobsson [Wed, 6 Jul 2022 07:46:19 +0000 (09:46 +0200)]
dot.demo/neatopack.c: add missing free of connected components subgraphs

Towards https://gitlab.com/graphviz/graphviz/-/issues/1800.

2 years agodot.demo/neatopack.c: add missing initialization
Magnus Jacobsson [Mon, 4 Jul 2022 09:43:14 +0000 (11:43 +0200)]
dot.demo/neatopack.c: add missing initialization

Normally gvLayoutJobs does this initialization, but since we call
ccomps before doing the layout and it expects graphs and nodes to have
'Agraphinfo_t' and 'Anodeinfo_t' records attached already, we must do
this initialization in the user program instead, see
https://graphviz.org/pdf/pack.3.pdf.

Fixes first part of
https://gitlab.com/graphviz/graphviz/-/issues/1800.

2 years agoadd new test_subgraphs test
Magnus Jacobsson [Tue, 5 Jul 2022 20:45:20 +0000 (22:45 +0200)]
add new test_subgraphs test

Upcoming commits in this series will make changes to gvFreeLayout and
we want to ensure that those changes don't introduce any memory leaks
when run with ASan, since gvFreeLayout handles cleanup of both
subgraphs and the root graph.

This test is run in CI with ASan leak detection enabled.

Towards https://gitlab.com/graphviz/graphviz/-/issues/1800.

2 years agoosage_cleanup: add missing cleanup of edges
Magnus Jacobsson [Sun, 17 Jul 2022 11:13:14 +0000 (13:13 +0200)]
osage_cleanup: add missing cleanup of edges

This fixes a memory leak detected by ASan in the test_engines test,
which now runs without failures

2 years agoadd new simple test_engines test
Magnus Jacobsson [Tue, 5 Jul 2022 17:22:31 +0000 (19:22 +0200)]
add new simple test_engines test

Upcoming commits in this series will make changes to gvFreeLayout and
we want to ensure that those changes don't introduce any memory leaks
when run with ASan, since gvFreeLayout calls layout-specific cleanup
functions.

This test is run in CI with ASan leak detection enabled. It currently
fails because of a memory leak in the osage layout.

Towards https://gitlab.com/graphviz/graphviz/-/issues/1800.

2 years agoadd the fmt library as a test dependency
Magnus Jacobsson [Tue, 19 Jul 2022 19:13:12 +0000 (21:13 +0200)]
add the fmt library as a test dependency

2 years agoadd libfmt-dev to Ubuntu 22.04 Dockerfile
Magnus Jacobsson [Sun, 6 Mar 2022 13:11:31 +0000 (14:11 +0100)]
add libfmt-dev to Ubuntu 22.04 Dockerfile

It is going to be used in new tests in upcoming commits.

2 years agotests: CMake: change test_common from a static to a shared library
Magnus Jacobsson [Fri, 22 Jul 2022 12:10:19 +0000 (14:10 +0200)]
tests: CMake: change test_common from a static to a shared library

This was the original intention according to the commit message in
commit a9daedd8bee1b5620a933b612c3335b90bde263d.

2 years agotests/CMakeLists.txt: sort test cases
Magnus Jacobsson [Wed, 6 Jul 2022 10:42:02 +0000 (12:42 +0200)]
tests/CMakeLists.txt: sort test cases

2 years agoMerge branch 'smattr/BA128E20-1C11-4C5C-978E-6F16C28B3671' into 'main'
Matthew Fernandez [Sun, 24 Jul 2022 05:52:16 +0000 (05:52 +0000)]
Merge branch 'smattr/BA128E20-1C11-4C5C-978E-6F16C28B3671' into 'main'

rephrase comparators to avoid arithmetic

See merge request graphviz/graphviz!2766

2 years agosparse comp_ascend_int: remove unnecessary parens
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
sparse comp_ascend_int: remove unnecessary parens

2 years agosfdpgen scomp: remove unnecessary parens
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
sfdpgen scomp: remove unnecessary parens

2 years agopatchwork nodecmp: rephrase comparator to avoid arithmetic
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
patchwork nodecmp: rephrase comparator to avoid arithmetic

cccb8b1d22a18031fc92d93133c7fa14ef7e1361 fixed an integer overflow in a
`memcmp`-/`strcmp`-like comparator. The same situation exists in the code
touched in this commit. Rather than wait for an edge case to expose an overflow
here, this change makes the same update, removing arithmetic and the consequent
possibility of overflow.

2 years agopack cmpf: rephrase comparator to avoid arithmetic
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
pack cmpf: rephrase comparator to avoid arithmetic

cccb8b1d22a18031fc92d93133c7fa14ef7e1361 fixed an integer overflow in a
`memcmp`-/`strcmp`-like comparator. The same situation exists in the code
touched in this commit. Rather than wait for an edge case to expose an overflow
here, this change makes the same update, removing arithmetic and the consequent
possibility of overflow.

2 years agoneatogen cmpIpair: rephrase comparator to avoid arithmetic
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
neatogen cmpIpair: rephrase comparator to avoid arithmetic

cccb8b1d22a18031fc92d93133c7fa14ef7e1361 fixed an integer overflow in a
`memcmp`-/`strcmp`-like comparator. The same situation exists in the code
touched in this commit. Rather than wait for an edge case to expose an overflow
here, this change makes the same update, removing arithmetic and the consequent
possibility of overflow.

2 years agoneatogen cmpitem: rephrase comparator to avoid arithmetic
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
neatogen cmpitem: rephrase comparator to avoid arithmetic

cccb8b1d22a18031fc92d93133c7fa14ef7e1361 fixed an integer overflow in a
`memcmp`-/`strcmp`-like comparator. The same situation exists in the code
touched in this commit. Rather than wait for an edge case to expose an overflow
here, this change makes the same update, removing arithmetic and the consequent
possibility of overflow.

2 years agofdpgen ijcmpf: rephrase comparator to avoid arithmetic
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
fdpgen ijcmpf: rephrase comparator to avoid arithmetic

cccb8b1d22a18031fc92d93133c7fa14ef7e1361 fixed an integer overflow in a
`memcmp`-/`strcmp`-like comparator. The same situation exists in the code
touched in this commit. Rather than wait for an edge case to expose an overflow
here, this change makes the same update, removing arithmetic and the consequent
possibility of overflow.

2 years agodotgen edgeposcmpf: rephrase comparator to avoid arithmetic
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
dotgen edgeposcmpf: rephrase comparator to avoid arithmetic

cccb8b1d22a18031fc92d93133c7fa14ef7e1361 fixed an integer overflow in a
`memcmp`-/`strcmp`-like comparator. The same situation exists in the code
touched in this commit. Rather than wait for an edge case to expose an overflow
here, this change makes the same update, removing arithmetic and the consequent
possibility of overflow.

2 years agodotgen nodeposcmpf: rephrase comparator to avoid arithmetic
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
dotgen nodeposcmpf: rephrase comparator to avoid arithmetic

cccb8b1d22a18031fc92d93133c7fa14ef7e1361 fixed an integer overflow in a
`memcmp`-/`strcmp`-like comparator. The same situation exists in the code
touched in this commit. Rather than wait for an edge case to expose an overflow
here, this change makes the same update, removing arithmetic and the consequent
possibility of overflow.

2 years agodotgen ordercmpf: rephrase comparator to avoid arithmetic
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
dotgen ordercmpf: rephrase comparator to avoid arithmetic

cccb8b1d22a18031fc92d93133c7fa14ef7e1361 fixed an integer overflow in a
`memcmp`-/`strcmp`-like comparator. The same situation exists in the code
touched in this commit. Rather than wait for an edge case to expose an overflow
here, this change makes the same update, removing arithmetic and the consequent
possibility of overflow.

2 years agocommon textfont_comparf: rephrase comparator to avoid arithmetic
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
common textfont_comparf: rephrase comparator to avoid arithmetic

cccb8b1d22a18031fc92d93133c7fa14ef7e1361 fixed an integer overflow in a
`memcmp`-/`strcmp`-like comparator. The same situation exists in the code
touched in this commit. Rather than wait for an edge case to expose an overflow
here, this change makes the same update, removing arithmetic and the consequent
possibility of overflow.

2 years agocommon increasingrankcmpf: rephrase comparator to avoid arithmetic
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
common increasingrankcmpf: rephrase comparator to avoid arithmetic

cccb8b1d22a18031fc92d93133c7fa14ef7e1361 fixed an integer overflow in a
`memcmp`-/`strcmp`-like comparator. The same situation exists in the code
touched in this commit. Rather than wait for an edge case to expose an overflow
here, this change makes the same update, removing arithmetic and the consequent
possibility of overflow.

2 years agocommon decreasingrankcmpf: rephrase comparator to avoid arithmetic
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
common decreasingrankcmpf: rephrase comparator to avoid arithmetic

cccb8b1d22a18031fc92d93133c7fa14ef7e1361 fixed an integer overflow in a
`memcmp`-/`strcmp`-like comparator. The same situation exists in the code
touched in this commit. Rather than wait for an edge case to expose an overflow
here, this change makes the same update, removing arithmetic and the consequent
possibility of overflow.

2 years agocgraph agsubnodeseqcmpf: remove unnecessary casts
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
cgraph agsubnodeseqcmpf: remove unnecessary casts

2 years agocgraph agsubnodeidcmpf: remove unnecessary casts
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
cgraph agsubnodeidcmpf: remove unnecessary casts

2 years agogvcolor cmpf: rephrase comparator to avoid arithmetic
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
gvcolor cmpf: rephrase comparator to avoid arithmetic

cccb8b1d22a18031fc92d93133c7fa14ef7e1361 fixed an integer overflow in a
`memcmp`-/`strcmp`-like comparator. The same situation exists in the code
touched in this commit. Rather than wait for an edge case to expose an overflow
here, this change makes the same update, removing arithmetic and the consequent
possibility of overflow.

2 years agodijkstra cmpf: rephrase comparator to avoid arithmetic
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
dijkstra cmpf: rephrase comparator to avoid arithmetic

cccb8b1d22a18031fc92d93133c7fa14ef7e1361 fixed an integer overflow in a
`memcmp`-/`strcmp`-like comparator. The same situation exists in the code
touched in this commit. Rather than wait for an edge case to expose an overflow
here, this change makes the same update, removing arithmetic and the consequent
possibility of overflow.

2 years agodotgen edgelblcmpfn: remove unnecessary casts
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
dotgen edgelblcmpfn: remove unnecessary casts

2 years agodotgen edgecmp: rephrase comparator to avoid arithmetic
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
dotgen edgecmp: rephrase comparator to avoid arithmetic

cccb8b1d22a18031fc92d93133c7fa14ef7e1361 fixed an integer overflow in a
`memcmp`-/`strcmp`-like comparator. The same situation exists in the code
touched in this commit. Rather than wait for an edge case to expose an overflow
here, this change makes the same update, removing arithmetic and the consequent
possibility of overflow.

Note that the first comparison in this function appears to be the wrong way
around. But this (mistake?) is left as-is.

2 years agodotgen edgecmp: remove unnecessary casts
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
dotgen edgecmp: remove unnecessary casts

2 years agocircogen: remove commented out 'cleanBlocklist'
Matthew Fernandez [Fri, 8 Jul 2022 00:24:05 +0000 (17:24 -0700)]
circogen: remove commented out 'cleanBlocklist'

This was commented out when first committed in the initial revision,
256ef66663ca0c072554ee3f5e7971911031b3c7. It has never been uncommented or used.

2 years agoMerge branch 'smattr/ac7d6a52-2008-42b9-8ce4-e82b996d2211' into 'main'
Matthew Fernandez [Sat, 23 Jul 2022 01:14:16 +0000 (01:14 +0000)]
Merge branch 'smattr/ac7d6a52-2008-42b9-8ce4-e82b996d2211' into 'main'

squash more -Wunused-parameter warnings

See merge request graphviz/graphviz!2765

2 years agoneatogen getPath: remove unused obstacle parameters
Matthew Fernandez [Sun, 17 Jul 2022 22:51:06 +0000 (15:51 -0700)]
neatogen getPath: remove unused obstacle parameters

This function ignores obstacles when routing.

2 years agodotgen make_flat_adj_edges: remove unused 'P' parameter
Matthew Fernandez [Sun, 17 Jul 2022 22:44:42 +0000 (15:44 -0700)]
dotgen make_flat_adj_edges: remove unused 'P' parameter

2 years agodotgen cloneNode: remove unused 'flipped' parameter
Matthew Fernandez [Sun, 17 Jul 2022 22:43:31 +0000 (15:43 -0700)]
dotgen cloneNode: remove unused 'flipped' parameter

2 years agodotgen constraining_flat_edge: remove unused 'v' parameter
Matthew Fernandez [Sun, 17 Jul 2022 22:32:33 +0000 (15:32 -0700)]
dotgen constraining_flat_edge: remove unused 'v' parameter

2 years agodotgen getCluster: remove unused 'g' parameter
Matthew Fernandez [Sun, 17 Jul 2022 22:31:08 +0000 (15:31 -0700)]
dotgen getCluster: remove unused 'g' parameter

This also makes `g` in `makeCompoundEdge` unused, so we remove that parameter
too.

2 years agodotgen make_interclust_chain: remove unused 'g' parameter
Matthew Fernandez [Sun, 17 Jul 2022 22:27:14 +0000 (15:27 -0700)]
dotgen make_interclust_chain: remove unused 'g' parameter

2 years agotopfish make_coarse_ex_graph: remove unused 'nvtxs' parameter
Matthew Fernandez [Sun, 17 Jul 2022 22:25:34 +0000 (15:25 -0700)]
topfish make_coarse_ex_graph: remove unused 'nvtxs' parameter

2 years agotopfish make_coarse_graph: remove unused 'nvtxs' parameter
Matthew Fernandez [Sun, 17 Jul 2022 22:24:05 +0000 (15:24 -0700)]
topfish make_coarse_graph: remove unused 'nvtxs' parameter

2 years agogvc: remove unused 'gvevent_delete'
Matthew Fernandez [Sun, 17 Jul 2022 22:18:32 +0000 (15:18 -0700)]
gvc: remove unused 'gvevent_delete'

The `del` field was added to `gvdevice_callbacks_t` in
ad82f9fa3212cbaa01625f3c27a1e90c1c990fd2 under the name `delete`, but seemingly
has never been used by any in-tree plugin. This commit removes a no-op,
never-called callback for it, squashing some -Wunused-parameter warnings.

This commit does not remove the member because it is part of the public API. We
are assuming the convention is to check these pointers against null before
calling them, like the other GVC structs. But the struct has no comment
explaining it nor how it is meant to be used, so we cannot be sure how/if users
would be relying on this.

2 years agogvc: remove unused 'gvevent_modify'
Matthew Fernandez [Sun, 17 Jul 2022 22:16:17 +0000 (15:16 -0700)]
gvc: remove unused 'gvevent_modify'

The `modify` field was added to `gvdevice_callbacks_t` in
50df9e82edcb61c5650f81ca317a31c9493ed07e, but seemingly has never been used by
any in-tree plugin. This commit removes a no-op, never-called callback for it,
squashing some -Wunused-parameter warnings.

This commit does not remove the member because it is part of the public API. We
are assuming the convention is to check these pointers against null before
calling them, like the other GVC structs. But the struct has no comment
explaining it nor how it is meant to be used, so we cannot be sure how/if users
would be relying on this.

2 years agogvc: squash -Wunused-parameter warnings in callback functions
Matthew Fernandez [Sun, 17 Jul 2022 22:15:40 +0000 (15:15 -0700)]
gvc: squash -Wunused-parameter warnings in callback functions

These cannot easily be removed as these functions need to conform to a
particular type signature.

2 years agoMerge branch 'smattr/F3BB1D68-083C-4B29-BFA8-4B434E13A729' into 'main'
Matthew Fernandez [Fri, 22 Jul 2022 02:49:06 +0000 (02:49 +0000)]
Merge branch 'smattr/F3BB1D68-083C-4B29-BFA8-4B434E13A729' into 'main'

CI: remove Ubuntu 21.10 jobs

See merge request graphviz/graphviz!2763

2 years agoCI: remove Ubuntu 21.10 jobs
Matthew Fernandez [Sat, 16 Jul 2022 16:35:07 +0000 (09:35 -0700)]
CI: remove Ubuntu 21.10 jobs

Ubuntu 21.10 was EOLed on 2022-07-14.¹

¹ https://wiki.ubuntu.com/Releases

2 years agoCI: upgrade linting jobs from Ubtuntu 21.10 to 22.04
Matthew Fernandez [Sat, 16 Jul 2022 16:31:36 +0000 (09:31 -0700)]
CI: upgrade linting jobs from Ubtuntu 21.10 to 22.04

Ubuntu 21.10 was EOLed on 2022-07-14.¹

¹ https://wiki.ubuntu.com/Releases

2 years agoMerge branch 'smattr/f6073fe4-f775-4723-bb1e-0dcffd065496' into 'main'
Matthew Fernandez [Fri, 22 Jul 2022 01:41:19 +0000 (01:41 +0000)]
Merge branch 'smattr/f6073fe4-f775-4723-bb1e-0dcffd065496' into 'main'

replace strtok with a thread-safe non-allocating API

See merge request graphviz/graphviz!2764

2 years agopathplan make_polyline: fix unchecked allocation failure
Matthew Fernandez [Wed, 13 Jul 2022 04:02:09 +0000 (21:02 -0700)]
pathplan make_polyline: fix unchecked allocation failure

2 years agopathplan make_polyline: squash -Wsign-conversion warning
Matthew Fernandez [Wed, 13 Jul 2022 04:00:09 +0000 (21:00 -0700)]
pathplan make_polyline: squash -Wsign-conversion warning

`npts` is guaranteed greater than 0 here.

2 years agogv2gml: refactor 'parseStyle' to avoid 'strtok'
Matthew Fernandez [Fri, 8 Jul 2022 04:07:31 +0000 (21:07 -0700)]
gv2gml: refactor 'parseStyle' to avoid 'strtok'

This improves thread safety (`strtok` works by modifying global state) and
removes the need for dynamic allocation.

2 years agocommon stylefn: replace 'strtok' with tokenize.h
Matthew Fernandez [Sun, 10 Jul 2022 03:55:23 +0000 (20:55 -0700)]
common stylefn: replace 'strtok' with tokenize.h

This removes dynamic allocation in this code and improves thread safety.

2 years agocommon mkDirlist: switch to cgraph allocation helpers
Matthew Fernandez [Sat, 16 Jul 2022 17:20:05 +0000 (10:20 -0700)]
common mkDirlist: switch to cgraph allocation helpers

These have the advantage of zeroing newly allocated memory, leaving the caller
one fewer thing to worry about.

2 years agocommon mkDirlist: use a 'size_t' for item count
Matthew Fernandez [Sat, 16 Jul 2022 17:05:21 +0000 (10:05 -0700)]
common mkDirlist: use a 'size_t' for item count

Squashes two -Wsign-conversion warnings.

2 years agocommon: manage directory search list as views instead of allocated strings
Matthew Fernandez [Fri, 8 Jul 2022 14:59:20 +0000 (07:59 -0700)]
common: manage directory search list as views instead of allocated strings

This list is derived from the `Gvfilepath` global, something that is live for
the entire run of a program. So we can avoid `strdup`-ing components being
extracted out of it and maintain these as read-only references instead. This is
both faster and decreases memory usage.

2 years agogvc auto_output_filename: avoid 'strdup' when constructing file name
Matthew Fernandez [Sat, 9 Jul 2022 16:05:41 +0000 (09:05 -0700)]
gvc auto_output_filename: avoid 'strdup' when constructing file name

This block of code is scanning a string of `:`-separated entries and writing
them into `buf` in reverse order `.`-separated. We can rewrite it to avoid
dynamic allocation, thus avoiding certain failure cases and locking overhead.

Unfortunately there seems to be no variant of `strrchr` that takes a length. So
we need to write our own loop for locating the last `:` with a limit.

2 years agocgraph tok: add extra check for duplicate separator characters
Matthew Fernandez [Thu, 14 Jul 2022 14:58:17 +0000 (07:58 -0700)]
cgraph tok: add extra check for duplicate separator characters

When a user supplies the same character more than once when constructing a
tokenizer, nothing is functionally incorrect but this is strong indicator of a
bug or misunderstanding by the caller. For example, a bug like this is
documented in #2259.

2 years agocgraph: implement a string tokenization API
Matthew Fernandez [Sat, 9 Jul 2022 05:10:45 +0000 (22:10 -0700)]
cgraph: implement a string tokenization API

This will be used in an upcoming commit.

2 years agoMerge branch 'smattr/gitlab-925' into 'main'
Matthew Fernandez [Tue, 19 Jul 2022 15:29:31 +0000 (15:29 +0000)]
Merge branch 'smattr/gitlab-925' into 'main'

fix UTF-8 character decoding in record labels

Closes #925

See merge request graphviz/graphviz!2760

2 years agofix UTF-8 character decoding in record labels
Matthew Fernandez [Thu, 14 Jul 2022 04:52:21 +0000 (21:52 -0700)]
fix UTF-8 character decoding in record labels

When using `shape=record`, certain characters within labels have alternate
semantics. The switch in `parse_reclbl` handles these, with most characters
having no special semantics and branching to the default case. The trailing loop
in this case was attempting to accrue UTF-8 continuation bytes. But lets take a
look at the Wikipedia table describing UTF-8:¹

  ┌────────────────┬───────────────┬──────────┬──────────┬──────────┬──────────┐
  │First code point│Last code point│  Byte 1  │  Byte 2  │  Byte 3  │  Byte 4  │
  ├────────────────┼───────────────┼──────────┼──────────┼──────────┼──────────┤
  │          U+0000│         U+007F│ 0xxxxxxx │          │          │          │
  │          U+0080│         U+07FF│ 110xxxxx │ 10xxxxxx │          │          │
  │          U+0800│         U+FFFF│ 1110xxxx │ 10xxxxxx │ 10xxxxxx │          │
  │         U+10000│       U+10FFFF│ 11110xxx │ 10xxxxxx │ 10xxxxxx │ 10xxxxxx │
  └────────────────┴───────────────┴──────────┴──────────┴──────────┴──────────┘

Notice that the continuation bytes are distinguished by upper 0b10 bits. Now
consider that the trailing loop was using a mask with 128 (0b10000000) to
identify such bytes. Such a value masks _out_ bit 6. That is, this loop
condition expression was true for all values with upper 0b10 bits _or_ upper
0b11 bits.

The first consequence of this is that this loop thought multiple consecutive
non-ASCII characters were a single character. It treated the 0b11xxxxxx byte 1
of a new non-ASCII character as if it were another continuation byte of the
preceding non-ASCII character.

The second consequence of this is that an ASCII character followed by non-ASCII
characters would be treated as a single character. That is, 0b0xxxxxxx bytes led
to adjacent following 0b1xxxxxxx bytes being consumed along with them.

These factors combine in the #925 example to confuse the state machine of the
containing loop and result in a malformed label being produced.

This fix adjusts the mask such that it takes _both_ bit 7 and bit 6 and compares
against 0b10xxxxxx.

There are a number of other odd things going on with this code that I did not
attempt to change:

  1. ASCII characters are allowed to have following UTF-8 continuation bytes.
     This would be considered malformed, but this code treats it as legal.

  2. UTF-8 permits a maximum of 3 continuation bytes (see table above) but this
     code allows an arbitrary number of continuation bytes. It also does no
     validation that the leading byte’s upper bit values and the number of
     continuation bytes correspond.

  3. There is something called “hard space” mode that this code toggles to keep
     track of when a space that would otherwise be omitted needs to be
     preserved in the output. Once the hard space flag is toggled on, the code
     appears to never toggle it off. This looks like it has the (presumably
     unintended) effect of something like `"\\ "` causing all later spaces in
     the label to become hard spaces.

Gitlab: fixes #925

¹ https://en.wikipedia.org/wiki/UTF-8

2 years agocommon parse_reclbl: reflow some lines
Matthew Fernandez [Thu, 14 Jul 2022 04:36:34 +0000 (21:36 -0700)]
common parse_reclbl: reflow some lines

An attempt to make this dense function slightly more comprehensible.

2 years agoadd a test case for #925
Matthew Fernandez [Thu, 14 Jul 2022 04:07:52 +0000 (21:07 -0700)]
add a test case for #925

2 years agofix test suite 'dot' reliance on locale
Matthew Fernandez [Thu, 14 Jul 2022 14:38:45 +0000 (07:38 -0700)]
fix test suite 'dot' reliance on locale

This function was using the current system locale to encode and decode data sent
to Graphviz and received from Graphviz when using a textual output format. As a
result, encoding exceptions would occur if either the input or the output
contained non-ASCII characters and the system locale was not a UTF-8 one.
Apparently none of the current test suite hits this scenario. However, an
upcoming commit adds a test case that does.

This change forces the encoding and decoding to be done as UTF-8, which is also
what Graphviz unconditionally uses.

2 years agoMerge branch 'smattr/gitlab-2259' into 'main'
Matthew Fernandez [Tue, 19 Jul 2022 04:06:46 +0000 (04:06 +0000)]
Merge branch 'smattr/gitlab-2259' into 'main'

smyrna: fix incorrect use of 'strtok'

Closes #2259

See merge request graphviz/graphviz!2759

2 years agosmyrna: fix incorrect use of 'strtok'
Matthew Fernandez [Thu, 14 Jul 2022 00:45:31 +0000 (17:45 -0700)]
smyrna: fix incorrect use of 'strtok'

This code was using `strtok` as if it splits based on the single separator
passed to it. But `strtok` actually treats the second parameter as a list of
character separators. In this change, we rephrase this code to do what its
original author appears to have intended.

This slightly changes the semantics of this code. But it seems we do not know
the exact intent of the original, so this is hoped to match the author’s
intention.

Gitlab: fixes #2259

2 years agoMerge branch 'smattr/19EA43B7-07EB-4524-8AB9-59BABF4C84F1' into 'main'
Matthew Fernandez [Tue, 19 Jul 2022 03:03:35 +0000 (03:03 +0000)]
Merge branch 'smattr/19EA43B7-07EB-4524-8AB9-59BABF4C84F1' into 'main'

squash Clang -Wmissing-field-initializers warnings

See merge request graphviz/graphviz!2757

2 years agosquash Clang -Wmissing-field-initializers warnings
Matthew Fernandez [Thu, 14 Jul 2022 00:14:14 +0000 (17:14 -0700)]
squash Clang -Wmissing-field-initializers warnings

Clang seems to consider `{NULL}` different from `{0}`, with the latter being an
intent of zero initialization and the former a possible accidental omission of
other fields.

2 years agoMerge branch 'smattr/gitlab-2262' into 'main'
Matthew Fernandez [Tue, 19 Jul 2022 01:57:10 +0000 (01:57 +0000)]
Merge branch 'smattr/gitlab-2262' into 'main'

add missing -I flags to point to perl files

Closes #1576 and #2262

See merge request graphviz/graphviz!2758

2 years agoadd missing -I flags to point to perl files
Matthew Fernandez [Wed, 13 Jul 2022 15:15:11 +0000 (08:15 -0700)]
add missing -I flags to point to perl files

This applies a patch NetBSD has been carrying downstream for some time.

Gitlab: fixes #2262, #1576
Reported-by: Michael Bäuerle <micha@NetBSD.org>
2 years agoMerge branch 'smattr/fe641be3-af28-471f-b861-1478012716ca' into 'main'
Matthew Fernandez [Sun, 17 Jul 2022 05:50:05 +0000 (05:50 +0000)]
Merge branch 'smattr/fe641be3-af28-471f-b861-1478012716ca' into 'main'

squash some unused parameter warnings

See merge request graphviz/graphviz!2756

2 years agodotgen leader_of: remove unused 'g' parameter
Matthew Fernandez [Tue, 12 Jul 2022 03:57:46 +0000 (20:57 -0700)]
dotgen leader_of: remove unused 'g' parameter

2 years agodotgen plain_vnode: remove unused 'orig' parameter
Matthew Fernandez [Tue, 12 Jul 2022 03:56:28 +0000 (20:56 -0700)]
dotgen plain_vnode: remove unused 'orig' parameter