From bfcd86603c6bc91605bf5cf98c21170d8bd93726 Mon Sep 17 00:00:00 2001 From: simon Date: Fri, 13 Apr 2012 18:02:30 +0000 Subject: [PATCH] Add code in dlg_filesel_set and dlg_fontsel_set which makes them duplicate the strings they pass to gtk_entry_set_text. I was already doing that in dlg_editbox_set, but forgot to add the same code when I revamped FontSpec and Filename to contain dynamically allocated strings (r9314 and r9316 respectively). This fixes a bug where, on some versions of GTK (but apparently not up-to-date versions), loading a saved session causes gibberish to appear in file-selector edit boxes accompanied by a valgrind error. git-svn-id: svn://svn.tartarus.org/sgt/putty@9456 cda61777-01e9-0310-a592-d414129be87e --- unix/gtkdlg.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/unix/gtkdlg.c b/unix/gtkdlg.c index 1af7145c..eb93d335 100644 --- a/unix/gtkdlg.c +++ b/unix/gtkdlg.c @@ -910,9 +910,13 @@ void dlg_filesel_set(union control *ctrl, void *dlg, Filename *fn) { struct dlgparam *dp = (struct dlgparam *)dlg; struct uctrl *uc = dlg_find_byctrl(dp, ctrl); + /* We must copy fn->path before passing it to gtk_entry_set_text. + * See comment in dlg_editbox_set() for the reasons. */ + char *duppath = dupstr(fn->path); assert(uc->ctrl->generic.type == CTRL_FILESELECT); assert(uc->entry != NULL); - gtk_entry_set_text(GTK_ENTRY(uc->entry), fn->path); + gtk_entry_set_text(GTK_ENTRY(uc->entry), duppath); + sfree(duppath); } Filename *dlg_filesel_get(union control *ctrl, void *dlg) @@ -928,9 +932,13 @@ void dlg_fontsel_set(union control *ctrl, void *dlg, FontSpec *fs) { struct dlgparam *dp = (struct dlgparam *)dlg; struct uctrl *uc = dlg_find_byctrl(dp, ctrl); + /* We must copy fs->name before passing it to gtk_entry_set_text. + * See comment in dlg_editbox_set() for the reasons. */ + char *dupname = dupstr(fs->name); assert(uc->ctrl->generic.type == CTRL_FONTSELECT); assert(uc->entry != NULL); - gtk_entry_set_text(GTK_ENTRY(uc->entry), fs->name); + gtk_entry_set_text(GTK_ENTRY(uc->entry), dupname); + sfree(dupname); } FontSpec *dlg_fontsel_get(union control *ctrl, void *dlg) -- 2.11.0