Browse Source

Only save ibus_addr_file after we've successfully read an address from it.

Fixes https://github.com/libsdl-org/SDL/issues/3359

(cherry picked from commit bc3d9e99f381072820d29e75e6cc28fe40572c42)
Sam Lantinga 1 year ago
parent
commit
64a7e75dd3
1 changed files with 5 additions and 3 deletions
  1. 5 3
      src/core/linux/SDL_ibus.c

+ 5 - 3
src/core/linux/SDL_ibus.c

@@ -574,15 +574,17 @@ SDL_bool SDL_IBus_Init(void)
             return SDL_FALSE;
         }
 
-        /* !!! FIXME: if ibus_addr_file != NULL, this will overwrite it and leak (twice!) */
-        ibus_addr_file = SDL_strdup(addr_file);
-
         addr = IBus_ReadAddressFromFile(addr_file);
         if (addr == NULL) {
             SDL_free(addr_file);
             return SDL_FALSE;
         }
 
+        if (ibus_addr_file) {
+            SDL_free(ibus_addr_file);
+        }
+        ibus_addr_file = SDL_strdup(addr_file);
+
         if (inotify_fd < 0) {
             inotify_fd = inotify_init();
             fcntl(inotify_fd, F_SETFL, O_NONBLOCK);