Clearing and refilling the code-pages list box can cause a
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 10 Jun 2009 17:42:15 +0000 (17:42 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Wed, 10 Jun 2009 17:42:15 +0000 (17:42 +0000)
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.

git-svn-id: svn://svn.tartarus.org/sgt/putty@8592 cda61777-01e9-0310-a592-d414129be87e

config.c

index 8d492df..3f0ea93 100644 (file)
--- 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,