From: Simon Tatham Date: Wed, 10 Jun 2009 17:42:15 +0000 (+0000) Subject: Clearing and refilling the code-pages list box can cause a X-Git-Tag: 0.61~145 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=b024b57644994a0f12d73250abee6f22c82cf0d1;hp=f8a260d59fbc9e25efde99d7c0d5a91596d0a74a;p=PuTTY.git Clearing and refilling the code-pages list box can cause a re-entrant call to its handler in config.c, which destroys the previous value in cfg->line_codepage. Therefore, preserve the right value in an automatic variable until all the re-entrant calls have finished. [originally from svn r8592] --- diff --git a/config.c b/config.c index 8d492df1..3f0ea931 100644 --- a/config.c +++ b/config.c @@ -317,14 +317,14 @@ static void codepage_handler(union control *ctrl, void *dlg, Config *cfg = (Config *)data; if (event == EVENT_REFRESH) { int i; - const char *cp; + const char *cp, *thiscp; dlg_update_start(ctrl, dlg); - strcpy(cfg->line_codepage, - cp_name(decode_codepage(cfg->line_codepage))); + thiscp = cp_name(decode_codepage(cfg->line_codepage)); dlg_listbox_clear(ctrl, dlg); for (i = 0; (cp = cp_enumerate(i)) != NULL; i++) dlg_listbox_add(ctrl, dlg, cp); - dlg_editbox_set(ctrl, dlg, cfg->line_codepage); + dlg_editbox_set(ctrl, dlg, thiscp); + strcpy(cfg->line_codepage, thiscp); dlg_update_done(ctrl, dlg); } else if (event == EVENT_VALCHANGE) { dlg_editbox_get(ctrl, dlg, cfg->line_codepage,