]> granicus.if.org Git - graphviz/log
graphviz
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

2 years agocircogen getRotation: remove unused 'g' parameter
Matthew Fernandez [Tue, 12 Jul 2022 03:45:45 +0000 (20:45 -0700)]
circogen getRotation: remove unused 'g' parameter

Removing this made a chain of other function parameters unused, so this removes
them too.

2 years agocircogen getRotation: remove commented out code
Matthew Fernandez [Tue, 12 Jul 2022 03:45:28 +0000 (20:45 -0700)]
circogen getRotation: remove commented out code

2 years agocircogen deglist: squash -Wunused-parameter warnings
Matthew Fernandez [Tue, 12 Jul 2022 03:43:29 +0000 (20:43 -0700)]
circogen deglist: squash -Wunused-parameter warnings

These functions are used in a `Dtdisc_t` structure so need to conform to
particular type signatures.

2 years agocircogen edgelist: squash -Wunused-parameter warnings
Matthew Fernandez [Tue, 12 Jul 2022 03:36:08 +0000 (20:36 -0700)]
circogen edgelist: squash -Wunused-parameter warnings

These functions are used in a `Dtdisc_t` structure so need to conform to
particular type signatures.

2 years agocircogen: remove commented out prototypes
Matthew Fernandez [Tue, 12 Jul 2022 03:33:23 +0000 (20:33 -0700)]
circogen: remove commented out prototypes

These functions were removed in e20473ad1f730c3a0550825cc3a79c13bd02346f.

2 years agocircogen: remove unused 'node_position'
Matthew Fernandez [Tue, 12 Jul 2022 03:31:35 +0000 (20:31 -0700)]
circogen: remove unused 'node_position'

2 years agogvc gvrender_ellipse: removed unused 'n' parameter
Matthew Fernandez [Tue, 12 Jul 2022 03:28:53 +0000 (20:28 -0700)]
gvc gvrender_ellipse: removed unused 'n' parameter

2 years agogvc gvrender_begin_edge: remove unused 'e' parameter
Matthew Fernandez [Tue, 12 Jul 2022 03:22:57 +0000 (20:22 -0700)]
gvc gvrender_begin_edge: remove unused 'e' parameter

2 years agogvc gvrender_begin_node: remove unused 'n' parameter
Matthew Fernandez [Tue, 12 Jul 2022 02:58:29 +0000 (19:58 -0700)]
gvc gvrender_begin_node: remove unused 'n' parameter

2 years agogvc gvrender_end_cluster: remove unused 'g' parameter
Matthew Fernandez [Tue, 12 Jul 2022 02:57:24 +0000 (19:57 -0700)]
gvc gvrender_end_cluster: remove unused 'g' parameter

2 years agogvc gvrender_begin_cluster: remove unused 'sg' parameter
Matthew Fernandez [Tue, 12 Jul 2022 02:56:19 +0000 (19:56 -0700)]
gvc gvrender_begin_cluster: remove unused 'sg' parameter

2 years agogvc gvrender_begin_graph: remove unused 'g' parameter
Matthew Fernandez [Tue, 12 Jul 2022 02:54:45 +0000 (19:54 -0700)]
gvc gvrender_begin_graph: remove unused 'g' parameter

2 years agogvc gvrender_begin_graph: remove commented out code
Matthew Fernandez [Tue, 12 Jul 2022 02:54:09 +0000 (19:54 -0700)]
gvc gvrender_begin_graph: remove commented out code

2 years agoMerge branch 'dot-demo-makefile' into 'main'
Matthew Fernandez [Sat, 16 Jul 2022 16:44:47 +0000 (16:44 +0000)]
Merge branch 'dot-demo-makefile' into 'main'

dot.demo: replace LDFLAGS with LDLIBS in Makefile

See merge request graphviz/graphviz!2761

2 years agodot.demo: replace LDFLAGS with LDLIBS in Makefile
Vincent Fu [Fri, 15 Jul 2022 00:19:20 +0000 (20:19 -0400)]
dot.demo: replace LDFLAGS with LDLIBS in Makefile

With LDFLAGS I am unable to build the demo programs using the Makefile
but the Makefile works with LDFLAGS changed to LDLIBS. We are using
pkg-config to obtain the appropriate libraries. So LDLIBS is the
appropriate variable to use.

Gitlab: fixes #2250

Signed-off-by: Vincent Fu <vincentfu@gmail.com>
2 years agoMerge branch 'smattr/B3A96CCC-49D5-41E2-BACB-30F753258B2B' into 'main'
Matthew Fernandez [Sat, 16 Jul 2022 02:53:19 +0000 (02:53 +0000)]
Merge branch 'smattr/B3A96CCC-49D5-41E2-BACB-30F753258B2B' into 'main'

replace 'oldof' with central allocation wrappers

See merge request graphviz/graphviz!2754

2 years agoast: remove now unused 'oldof'
Matthew Fernandez [Sat, 9 Jul 2022 16:57:22 +0000 (09:57 -0700)]
ast: remove now unused 'oldof'

2 years agogvpr addOutputGraph: fix an unchecked allocation failure
Matthew Fernandez [Sat, 9 Jul 2022 16:55:51 +0000 (09:55 -0700)]
gvpr addOutputGraph: fix an unchecked allocation failure

2 years agogvpr parseArgs: fix an unchecked allocation failure
Matthew Fernandez [Sat, 9 Jul 2022 16:52:46 +0000 (09:52 -0700)]
gvpr parseArgs: fix an unchecked allocation failure

2 years agogvpr makef: fix an unchecked allocation failure
Matthew Fernandez [Sat, 9 Jul 2022 16:46:35 +0000 (09:46 -0700)]
gvpr makef: fix an unchecked allocation failure

The previous use of `oldof` was a verbose way of allocating a single element, so
we replace it with the central allocation helper, also avoiding crashes if
allocation fails.

2 years agoexpr expush: remove unnecessary cast
Matthew Fernandez [Sat, 9 Jul 2022 16:32:25 +0000 (09:32 -0700)]
expr expush: remove unnecessary cast

2 years agoMerge branch 'smattr/d2888353-8f83-47f7-b03d-7303042d9142' into 'main'
Matthew Fernandez [Sat, 16 Jul 2022 01:43:59 +0000 (01:43 +0000)]
Merge branch 'smattr/d2888353-8f83-47f7-b03d-7303042d9142' into 'main'

reduce strdup calls

See merge request graphviz/graphviz!2755

2 years agoxdot sprintXDot: steal agxbuf’s buffer instead of double copying
Matthew Fernandez [Sat, 9 Jul 2022 15:39:55 +0000 (08:39 -0700)]
xdot sprintXDot: steal agxbuf’s buffer instead of double copying

8064f6e902cc4c3062cffa2d1d307ee9cf1893bb replaced lib/xdot’s inline copy of a
subset of the agxbuf.h API with an include of the header containing the full
API. This gives us access to `agxbdisown`. This function effectively does the
work of `agxbuse;strdup;agxbfree` by taking the existing dynamically allocated
buffer within the `agxbuf` object, rather than making yet another copy of this
data only to discard the original.

2 years agoedgepaint: remove unnecessary 'strdup' of 'lightness'
Matthew Fernandez [Sat, 9 Jul 2022 15:29:58 +0000 (08:29 -0700)]
edgepaint: remove unnecessary 'strdup' of 'lightness'

Pointers `getopt` returns in `optarg` point into the original `argv` which lives
in immortal storage. There is no need to duplicate such a pointer to prolong its
lifetime.

This commit looks like it is changing the source string, but `arg` and `optarg`
point at the same thing at this point. But `optarg` is not `const` qualified, so
we can do this assignment without a compiler warning.

2 years agosmyrna: remove unnecessary 'strdup' calls in 'mTestgvpr'
Matthew Fernandez [Sat, 9 Jul 2022 15:24:11 +0000 (08:24 -0700)]
smyrna: remove unnecessary 'strdup' calls in 'mTestgvpr'

The strings being duplicated are passed through to `gvpr` which does not modify
its arguments. So by rearranging when we release `bf2`, we can remove the need
to dynamically allocate the members of `argv`.

2 years agosmyrna: fix memory leak in 'mTestgvpr'
Matthew Fernandez [Sat, 9 Jul 2022 15:17:44 +0000 (08:17 -0700)]
smyrna: fix memory leak in 'mTestgvpr'

Even when a text field is empty, calling `gtk_text_buffer_get_text` returns a
dynamically allocated (empty) string that must be freed.

2 years agosmyrna load_attributes: use a string view for 'ss'
Matthew Fernandez [Sun, 10 Jul 2022 18:03:02 +0000 (11:03 -0700)]
smyrna load_attributes: use a string view for 'ss'

This code contained multiple memory leaks and unchecked allocations:¹

  1. `pch` was `strdup`-ed into `ss` on line 58. But `strdup`-ed again when
     being saved to an `attr` field. This lost the memory originating from the
     first `strdup`.

  2. Cases 0, 3, and 4 of the switch do not save the full contents of `ss` at
     all. This means naively removing the `strdup` calls in cases 1, 2, and
     default would not have solved the memory leak in (1) because cases 0, 3,
     and 4 would still leak memory.

  3. None of the `strdup` calls in this function were checked for failure.

This commit attempts to solve all the above. We now take a read-only reference
to the string data on line 58 and only `strdup` it when needed.

¹ It also assumes all lines of the input file are fewer characters than
  `BUFSIZ`, a platform-dependent constant. I do not know why this would be
  guaranteed. However, this problem seems orthogonal to the above.

2 years agocgraph: add a 'strdup' equivalent for 'strview_t'
Matthew Fernandez [Sun, 10 Jul 2022 17:53:54 +0000 (10:53 -0700)]
cgraph: add a 'strdup' equivalent for 'strview_t'

This will be used in an upcoming commit.

2 years agocgraph: add a 'strstr' equivalent for 'strview_t'
Matthew Fernandez [Sun, 10 Jul 2022 17:50:42 +0000 (10:50 -0700)]
cgraph: add a 'strstr' equivalent for 'strview_t'

This will be used in an upcoming commit.

2 years agosmyrna: simplify outer 'load_attributes' loop
Matthew Fernandez [Sat, 9 Jul 2022 15:13:48 +0000 (08:13 -0700)]
smyrna: simplify outer 'load_attributes' loop

This loop contains no `continue` statements, its counter is incremented in a
regular way, and the counter is unused outside the loop. So we can write the
loop more concisely and scope `attrcount` more tightly by using a `for` loop
instead of a `while` loop.

2 years agosmyrna: simplify inner 'load_attributes' loop
Matthew Fernandez [Sat, 9 Jul 2022 15:11:44 +0000 (08:11 -0700)]
smyrna: simplify inner 'load_attributes' loop

This loop contains no `continue` statements, its counter is incremented in a
regular way, and the counter is unused outside the loop. So we can write the
loop more concisely and scope `ind` more tightly by using a `for` loop instead
of a `while` loop.

2 years agosmyrna: remove an unnecessary 'strdup'
Matthew Fernandez [Sat, 9 Jul 2022 15:05:04 +0000 (08:05 -0700)]
smyrna: remove an unnecessary 'strdup'

Pointers `getopt` returns in `optarg` point into the original `argv` which lives
in immortal storage. There is no need to duplicate such a pointer to prolong its
lifetime.

2 years agocgraph: fix a missing header guard
Matthew Fernandez [Sun, 10 Jul 2022 02:44:32 +0000 (19:44 -0700)]
cgraph: fix a missing header guard

2 years agoMerge branch 'smattr/53F5F123-E14D-494D-B685-B8F9C64A50DD' into 'main'
Matthew Fernandez [Fri, 15 Jul 2022 01:17:44 +0000 (01:17 +0000)]
Merge branch 'smattr/53F5F123-E14D-494D-B685-B8F9C64A50DD' into 'main'

mm2gv: remove unused 'mm_typecode_to_str'

See merge request graphviz/graphviz!2753

2 years agomm2gv: remove unused 'mm_typecode_to_str'
Matthew Fernandez [Sun, 10 Jul 2022 19:40:58 +0000 (12:40 -0700)]
mm2gv: remove unused 'mm_typecode_to_str'

2 years agomm2gv SparseMatrix_import_matrix_market: replace an 'assert' with 'UNREACHABLE'
Matthew Fernandez [Sun, 10 Jul 2022 19:39:36 +0000 (12:39 -0700)]
mm2gv SparseMatrix_import_matrix_market: replace an 'assert' with 'UNREACHABLE'

This is slightly clearer and yields more reliable error behavior.

2 years agoMerge branch 'types-h' into 'main'
Matthew Fernandez [Sun, 10 Jul 2022 01:30:24 +0000 (01:30 +0000)]
Merge branch 'types-h' into 'main'

types.h: doxygen comments

See merge request graphviz/graphviz!2742

2 years agotypes.h: doxygen comments
Costa Shulyupin [Tue, 5 Jul 2022 16:16:50 +0000 (19:16 +0300)]
types.h: doxygen comments

2 years agoMerge branch 'smattr/72B145EF-707C-4237-AEAC-A88969A1AF9F' into 'main'
Matthew Fernandez [Sat, 9 Jul 2022 23:43:12 +0000 (23:43 +0000)]
Merge branch 'smattr/72B145EF-707C-4237-AEAC-A88969A1AF9F' into 'main'

cgraph: some warning squashing

See merge request graphviz/graphviz!2743

2 years agocgraph: more uniform treatment of sequence IDs
Matthew Fernandez [Wed, 6 Jul 2022 00:24:05 +0000 (17:24 -0700)]
cgraph: more uniform treatment of sequence IDs

Sequence IDs are calculated using 64-bit counters in `Agclos_s`. But then the
field used to store sequence IDs, `Agtag_s.seq`, is `sizeof(unsigned) * 8 - 4`
bits wide, 28-bit on x86 and x86-64. As a result, the compiler believes IDs that
exceed 2²⁸ - 1 can occur and overflow `Agtag_s.seq`:

  edge.c:213:30: warning: conversion from 'int' to 'unsigned int:28' may change
    value [-Wconversion]
  213 |     AGSEQ(in) = AGSEQ(out) = seq;
      |                              ^~~
  ...
  graph.c: In function 'agopen1':
  graph.c:77:20: warning: conversion from 'uint64_t' {aka 'long unsigned int'}
    to 'unsigned int:28' may change value [-Wconversion]
   77 |         AGSEQ(g) = agnextseq(par, AGRAPH);
      |                    ^~~~~~~~~
  ...
  node.c: In function 'newnode':
  node.c:76:16: warning: conversion from 'uint64_t' {aka 'long unsigned int'} to
    'unsigned int:28' may change value [-Wconversion]
   76 |     AGSEQ(n) = seq;
      |                ^~~
  ...
  node.c: In function 'agnodebefore':
  node.c:359:22: warning: conversion from 'uint64_t' {aka 'long unsigned int'}
    to 'unsigned int:28' may change value [-Wconversion]
  359 |         AGSEQ(snd) = (g->clos->seq[AGNODE] + 2);
      |                      ^

In practice, ingesting a graph of this size is not achievable, so these
overflows cannot occur.

This change introduces assertions and casts in these cases to explain the
assumptions to the compiler. It squashes the above warnings. In future, perhaps
these fields should all be made to all consistently use the same type.

2 years agocgraph: rephrase ID comparison in 'agraphidcmpf'
Matthew Fernandez [Wed, 6 Jul 2022 00:24:05 +0000 (17:24 -0700)]
cgraph: rephrase ID comparison in 'agraphidcmpf'

Avoids a possible integer overflow and squashes a -Wsign-conversion warning.

2 years agocgraph: remove unnecessary casts in 'agraphidcmpf'
Matthew Fernandez [Wed, 6 Jul 2022 00:24:05 +0000 (17:24 -0700)]
cgraph: remove unnecessary casts in 'agraphidcmpf'

2 years agoMerge branch 'smattr/52D7B067-5BE8-44F3-AC13-6CA93F46B9A5' into 'main'
Matthew Fernandez [Sat, 9 Jul 2022 20:24:23 +0000 (20:24 +0000)]
Merge branch 'smattr/52D7B067-5BE8-44F3-AC13-6CA93F46B9A5' into 'main'

CI: some minor fixes to the deployment script

See merge request graphviz/graphviz!2748

2 years agoCI: call Windows ZIP artifact 'archive' not 'installer'
Matthew Fernandez [Fri, 8 Jul 2022 02:29:15 +0000 (19:29 -0700)]
CI: call Windows ZIP artifact 'archive' not 'installer'

This is what the website’s JSON has always called this artifact, but a mistake
in 32b91edef64d1c726c88c7a7d6e68239399cc358 labelled this 'installer' instead.

2 years agoCI: remove legacy TODO in deploy script
Matthew Fernandez [Fri, 8 Jul 2022 02:28:11 +0000 (19:28 -0700)]
CI: remove legacy TODO in deploy script

This was addressed in 6117abe680037824d134149b0de42f589fb24466, with subsequent
fixes in 92804597802903f126c3d701179fc06bda58ed4c and
156b57941de82d1d229c0ccf331cf2dc3a9f7e32.

2 years agoMerge branch 'smattr/6a4630c7-4928-4c5c-a28f-4b9a0f7ad13d' into 'main'
Matthew Fernandez [Sat, 9 Jul 2022 19:21:30 +0000 (19:21 +0000)]
Merge branch 'smattr/6a4630c7-4928-4c5c-a28f-4b9a0f7ad13d' into 'main'

gv_trim_zeros: identify string extent instead of writing a '\0'

See merge request graphviz/graphviz!2749

2 years agogv_trim_zeros: identify string extent instead of writing a '\0'
Matthew Fernandez [Fri, 8 Jul 2022 03:19:38 +0000 (20:19 -0700)]
gv_trim_zeros: identify string extent instead of writing a '\0'

The buffer that this function was truncating is destined for `gvwrite`. So we
can make the whole thing read-only by identifying a string extent instead of
modifying the buffer in place. The compiler may have been able to identify the
intent of this code anyway¹ but if not these changes make it clearer how this
code can be optimized.

¹ Though probably not if the experience discussed in
  bf800b51ccf5808c9b4faecdec01488b5513c307 is anything to go by.

2 years agoMerge branch 'smattr/AC13F6AC-696F-43DA-AA5E-4B62E0EE03FB' into 'main'
Matthew Fernandez [Sat, 9 Jul 2022 18:17:24 +0000 (18:17 +0000)]
Merge branch 'smattr/AC13F6AC-696F-43DA-AA5E-4B62E0EE03FB' into 'main'

glcomp: remove no-op casts

See merge request graphviz/graphviz!2751

2 years agoglcomp: remove no-op casts
Matthew Fernandez [Sat, 9 Apr 2022 19:05:35 +0000 (12:05 -0700)]
glcomp: remove no-op casts

2 years agoMerge branch 'smattr/255050CF-C355-4788-9063-95138C4395EB' into 'main'
Matthew Fernandez [Sat, 9 Jul 2022 17:09:47 +0000 (17:09 +0000)]
Merge branch 'smattr/255050CF-C355-4788-9063-95138C4395EB' into 'main'

move dot_builtins.c into C++

See merge request graphviz/graphviz!2752

2 years agomove dot_builtins.c into C++
Matthew Fernandez [Sat, 28 May 2022 17:40:34 +0000 (10:40 -0700)]
move dot_builtins.c into C++

This looks like a bit of a strange change, when we now wrap the entire file in
`extern "C"`. However this has two key benefits:

  1. `dot_builtins` and `dot_static` that include this source needed an
     Autotools hack¹ to force compilation to use the C++ front end (`c++`)
     instead of the C front end (`cc`) in order to link against the C++ standard
     library. By moving this source into C++ we can remove this hack.

  2. When trying to integrate `dot_builtins` into the CMake build system, MSVC
     complains (correctly) that the initializers to the array in this file are
     not compile-time constants. GCC and Clang apparently allow this by a
     non-standard extension. By moving this into C++, we get more relaxed
     initialization semantics that allow this on all compilers.

Gitlab: #1836

¹ https://www.gnu.org/software/automake/manual/automake.html#Libtool-Convenience-Libraries

2 years agoMerge branch 'smattr/B5CBD467-EBB2-4F04-B9EA-75F2E2AC4093' into 'main'
Matthew Fernandez [Sat, 9 Jul 2022 15:59:50 +0000 (15:59 +0000)]
Merge branch 'smattr/B5CBD467-EBB2-4F04-B9EA-75F2E2AC4093' into 'main'

common: some macro clean up

See merge request graphviz/graphviz!2744

2 years agocommon: remove 'GD_inleaf'
Matthew Fernandez [Wed, 6 Jul 2022 04:11:43 +0000 (21:11 -0700)]
common: remove 'GD_inleaf'

As discussed in the prior commit, this refers to a field that does not and has
never existed.

2 years agodotgen: remove 'OBSOLETE'-guarded code
Matthew Fernandez [Wed, 6 Jul 2022 04:00:34 +0000 (21:00 -0700)]
dotgen: remove 'OBSOLETE'-guarded code

This code is not currently compiled and, in fact, will not compile if you try to
re-enable it. As an example issue, it uses `GD_inleaf`, a macro intended for
accessing `Agraphinfo_t` fields, on a `node_t`. This is sort of a double mistake
as `Agraphinfo_t` also has no `inleaf` field. This problem seems to have been
present in the very first Graphviz revision,
256ef66663ca0c072554ee3f5e7971911031b3c7. Fortunately the mistakes sort of
cancelled each other out because the `GD_*` marcos did no casting and
`Agnodeinfo_t` _does_ have an `inleaf` field. The outcome seems to be what the
author intended, even if the route by which they got there was not intended.

The above is only one of several issues with this code. Resurrecting it has
unknown cost and unknown benefit, so we remove it here to avoid the implication
that it can be easily switched back on.

2 years agocommon: remove 'GD_cl_cnt'
Matthew Fernandez [Wed, 6 Jul 2022 03:48:39 +0000 (20:48 -0700)]
common: remove 'GD_cl_cnt'

This macro is clearly typoed (it refers to the field `cl_nt` while its name says
`cl_cnt`), but this macro has also never been used.

2 years agoMerge branch 'smattr/gitlab-2256' into 'main'
Matthew Fernandez [Sat, 9 Jul 2022 06:14:00 +0000 (06:14 +0000)]
Merge branch 'smattr/gitlab-2256' into 'main'

xlib plugin: relax button value assertions

Closes #2256

See merge request graphviz/graphviz!2740

2 years agoxlib plugin: relax button value assertions
Matthew Fernandez [Mon, 4 Jul 2022 21:44:42 +0000 (14:44 -0700)]
xlib plugin: relax button value assertions

Contrary to the X11 documentation,¹ it seems button values other than 1-5 can be
returned as button press events. The assertions altered in this commit were
introduced to guarantee the value does not exceed the limits of the type of the
parameter in the user’s callback (`int`). So we can safely relax this to just
the limit itself.

Gitlab: fixes #2256

¹ https://www.x.org/releases/X11R7.7/doc/libX11/libX11/libX11.html#Keyboard_and_Pointer_Events_b

2 years agoMerge branch 'clone-name-clash' into 'main'
Matthew Fernandez [Sat, 9 Jul 2022 04:26:34 +0000 (04:26 +0000)]
Merge branch 'clone-name-clash' into 'main'

rename clone to cloneO to avoid clone(2) nameclash

See merge request graphviz/graphviz!2750

2 years agorename clone to cloneO to avoid clone(2) nameclash
Natanael Copa [Tue, 26 Jul 2011 12:41:21 +0000 (12:41 +0000)]
rename clone to cloneO to avoid clone(2) nameclash

Rename clone to cloneO to avoid a name clash with the Linux `clone`
syscall. https://man7.org/linux/man-pages/man2/clone.2.html

2 years agoMerge branch 'chgraph-h' into 'main'
Matthew Fernandez [Sat, 9 Jul 2022 03:21:23 +0000 (03:21 +0000)]
Merge branch 'chgraph-h' into 'main'

doxygen doc for cgraph.h

See merge request graphviz/graphviz!2741

2 years agocgraph.h: exclude irrelevant from doxygen
Costa Shulyupin [Tue, 5 Jul 2022 13:16:53 +0000 (16:16 +0300)]
cgraph.h: exclude irrelevant from doxygen

2 years agocgraph.h: reformat comments for doxygen
Costa Shulyupin [Tue, 5 Jul 2022 13:15:57 +0000 (16:15 +0300)]
cgraph.h: reformat comments for doxygen

2 years agoDoxyfile: ignore attribute PRINTF_LIKE
Costa Shulyupin [Tue, 5 Jul 2022 12:34:24 +0000 (15:34 +0300)]
Doxyfile: ignore attribute PRINTF_LIKE

because it is not relevant for documentation

2 years agoMerge branch 'logic' into 'main'
Matthew Fernandez [Fri, 8 Jul 2022 03:15:21 +0000 (03:15 +0000)]
Merge branch 'logic' into 'main'

replace obsolete logic.h

See merge request graphviz/graphviz!2745

2 years agoremove obsolete unused logic.h
Costa Shulyupin [Wed, 6 Jul 2022 09:38:31 +0000 (12:38 +0300)]
remove obsolete unused logic.h

to reduce number of files in overpopulated directory lib/common
and make project a little bit more tidy

2 years agoreplace include of logic.h with stdbool.h
Costa Shulyupin [Wed, 6 Jul 2022 09:35:18 +0000 (12:35 +0300)]
replace include of logic.h with stdbool.h

and replace FALSE/TRUE with false/true

to reuse standard definitions

2 years agoremove unused includes of logic.h
Costa Shulyupin [Wed, 6 Jul 2022 09:32:46 +0000 (12:32 +0300)]
remove unused includes of logic.h

to keep the code a bit cleaner

2 years agoMerge branch 'smattr/A2FCED53-DEC0-47DE-BC19-01625CA7B4E9' into 'main'
Matthew Fernandez [Fri, 8 Jul 2022 01:00:59 +0000 (01:00 +0000)]
Merge branch 'smattr/A2FCED53-DEC0-47DE-BC19-01625CA7B4E9' into 'main'

Start 5.0.1 development

See merge request graphviz/graphviz!2747