]> granicus.if.org Git - graphviz/commit
smyrna load_attributes: use a string view for 'ss'
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 10 Jul 2022 18:03:02 +0000 (11:03 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 16 Jul 2022 00:06:35 +0000 (17:06 -0700)
commit83635cfc27ca95bbb79d43660c5447dfea3b2453
treedba3ff7590e44c8dbb4b6af5fc0ac0446af78be3
parent16fc03f1f8626dd282f4e268cce1549d9159387f
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.
cmd/smyrna/gui/gui.c