]> granicus.if.org Git - graphviz/commit
smyrna openfiledlg: fix memory leak
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Mon, 10 Oct 2022 04:37:45 +0000 (21:37 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 15 Oct 2022 00:32:13 +0000 (17:32 -0700)
commitdaf31d56bc3d7ce8b75373b816c3eec194077d4e
treee42c4936b262a0be1638b8d59d53334fd373b9b9
parent84aa93fe0728814893c48cffe2f63eb0e417f097
smyrna openfiledlg: fix memory leak

The `gtk_file_chooser_get_filename` docs¹ note:

  Return value
  …
  The currently selected filename, or NULL if no file is selected, or the
  selected file can’t be represented with a local filename. Free with g_free().

  The caller of the method takes ownership of the data, and is responsible for
  freeing it.

Contrary to this, `openfiledlg` was duplicating the pointed to data and then
losing the pointer `gtk_file_chooser_get_filename` returned.

The straightforward fix to this would be to retain the pointer and then `g_free`
it after copying its contents into the buffer `xbuf`. However, we can instead
refactor this function to avoid the copy altogether and simply pass the original
memory back to the caller, making this both a fix and an optimization.

¹ https://docs.gtk.org/gtk3/method.FileChooser.get_filename.html
cmd/smyrna/gui/gui.c
cmd/smyrna/gui/gui.h
cmd/smyrna/gui/menucallbacks.c