From 09c7cf2f4ecc1665b58002bb9683ba00fbc559cd Mon Sep 17 00:00:00 2001 From: Will Dietz Date: Sun, 13 Mar 2022 21:43:03 -0500 Subject: klavaro: patch to fix invalid free --- pkgs/games/klavaro/default.nix | 2 + pkgs/games/klavaro/trans_lang_get_similar.patch | 71 +++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 pkgs/games/klavaro/trans_lang_get_similar.patch (limited to 'pkgs/games') diff --git a/pkgs/games/klavaro/default.nix b/pkgs/games/klavaro/default.nix index 25bfb4daee28..ec00b8308de7 100644 --- a/pkgs/games/klavaro/default.nix +++ b/pkgs/games/klavaro/default.nix @@ -26,6 +26,8 @@ stdenv.mkDerivation rec { substituteInPlace src/tutor.c --replace '"espeak ' '"${espeak}/bin/espeak ' ''; + patches = [ ./trans_lang_get_similar.patch ]; + postInstall = '' wrapProgram $out/bin/klavaro \ --prefix LD_LIBRARY_PATH : $out/lib diff --git a/pkgs/games/klavaro/trans_lang_get_similar.patch b/pkgs/games/klavaro/trans_lang_get_similar.patch new file mode 100644 index 000000000000..3b6644c5f7f7 --- /dev/null +++ b/pkgs/games/klavaro/trans_lang_get_similar.patch @@ -0,0 +1,71 @@ +--- a/src/translation.c (revision 137) ++++ b/src/translation.c (working copy) +@@ -257,23 +257,23 @@ + * Private auxiliar function + */ + static gboolean +-trans_lang_get_similar (gchar * test) ++trans_lang_get_similar (gchar ** test) + { + gint i; + gchar aux_code_2[3]; + + /* Prefer C over en_GB for English variants other than en_GB. (Debian patch 02) */ +- if (g_str_has_prefix (test, "en")) ++ if (g_str_has_prefix (*test, "en")) + { +- g_free (test); +- test = g_strdup ("C"); ++ g_free (*test); ++ *test = g_strdup ("C"); + return (TRUE); + } + +- if (g_str_equal (test, "C")) ++ if (g_str_equal (*test, "C")) + return TRUE; + +- strncpy (aux_code_2, test, 2); ++ strncpy (aux_code_2, *test, 2); + aux_code_2[2] = '\0'; + + for (i = 0; i < lang_num; i++) +@@ -280,15 +280,15 @@ + { + if (strstr (lang[i].code, aux_code_2)) + { +- g_free (test); +- test = g_strdup (lang[i].code); ++ g_free (*test); ++ *test = g_strdup (lang[i].code); + break; + } + } +- if (i == lang_num && g_str_has_prefix (test, "en")) ++ if (i == lang_num && g_str_has_prefix (*test, "en")) + { +- g_free (test); +- test = g_strdup ("C"); ++ g_free (*test); ++ *test = g_strdup ("C"); + return (TRUE); + } + return (i == lang_num ? FALSE : TRUE); +@@ -356,7 +356,7 @@ + lang_ok = (i == 0 ? TRUE : FALSE); + break; + } +- lang_ok = trans_lang_get_similar (tmp_code); ++ lang_ok = trans_lang_get_similar (&tmp_code); + if (lang_ok == TRUE) + break; + g_free (tmp_code); +@@ -368,7 +368,7 @@ + tmp_code = g_win32_getlocale (); + lang_ok = trans_lang_is_available (tmp_code); + if (lang_ok == FALSE) +- lang_ok = trans_lang_get_similar (tmp_code); ++ lang_ok = trans_lang_get_similar (&tmp_code); + #endif + } + if (tmp_code == NULL) -- cgit 1.4.1