klavaro: patch to fix invalid free

+73
+2
pkgs/games/klavaro/default.nix
··· 26 26 substituteInPlace src/tutor.c --replace '"espeak ' '"${espeak}/bin/espeak ' 27 27 ''; 28 28 29 + patches = [ ./trans_lang_get_similar.patch ]; 30 + 29 31 postInstall = '' 30 32 wrapProgram $out/bin/klavaro \ 31 33 --prefix LD_LIBRARY_PATH : $out/lib
+71
pkgs/games/klavaro/trans_lang_get_similar.patch
··· 1 + --- a/src/translation.c (revision 137) 2 + +++ b/src/translation.c (working copy) 3 + @@ -257,23 +257,23 @@ 4 + * Private auxiliar function 5 + */ 6 + static gboolean 7 + -trans_lang_get_similar (gchar * test) 8 + +trans_lang_get_similar (gchar ** test) 9 + { 10 + gint i; 11 + gchar aux_code_2[3]; 12 + 13 + /* Prefer C over en_GB for English variants other than en_GB. (Debian patch 02) */ 14 + - if (g_str_has_prefix (test, "en")) 15 + + if (g_str_has_prefix (*test, "en")) 16 + { 17 + - g_free (test); 18 + - test = g_strdup ("C"); 19 + + g_free (*test); 20 + + *test = g_strdup ("C"); 21 + return (TRUE); 22 + } 23 + 24 + - if (g_str_equal (test, "C")) 25 + + if (g_str_equal (*test, "C")) 26 + return TRUE; 27 + 28 + - strncpy (aux_code_2, test, 2); 29 + + strncpy (aux_code_2, *test, 2); 30 + aux_code_2[2] = '\0'; 31 + 32 + for (i = 0; i < lang_num; i++) 33 + @@ -280,15 +280,15 @@ 34 + { 35 + if (strstr (lang[i].code, aux_code_2)) 36 + { 37 + - g_free (test); 38 + - test = g_strdup (lang[i].code); 39 + + g_free (*test); 40 + + *test = g_strdup (lang[i].code); 41 + break; 42 + } 43 + } 44 + - if (i == lang_num && g_str_has_prefix (test, "en")) 45 + + if (i == lang_num && g_str_has_prefix (*test, "en")) 46 + { 47 + - g_free (test); 48 + - test = g_strdup ("C"); 49 + + g_free (*test); 50 + + *test = g_strdup ("C"); 51 + return (TRUE); 52 + } 53 + return (i == lang_num ? FALSE : TRUE); 54 + @@ -356,7 +356,7 @@ 55 + lang_ok = (i == 0 ? TRUE : FALSE); 56 + break; 57 + } 58 + - lang_ok = trans_lang_get_similar (tmp_code); 59 + + lang_ok = trans_lang_get_similar (&tmp_code); 60 + if (lang_ok == TRUE) 61 + break; 62 + g_free (tmp_code); 63 + @@ -368,7 +368,7 @@ 64 + tmp_code = g_win32_getlocale (); 65 + lang_ok = trans_lang_is_available (tmp_code); 66 + if (lang_ok == FALSE) 67 + - lang_ok = trans_lang_get_similar (tmp_code); 68 + + lang_ok = trans_lang_get_similar (&tmp_code); 69 + #endif 70 + } 71 + if (tmp_code == NULL)