summary refs log tree commit diff
path: root/pkgs/games
diff options
context:
space:
mode:
authorWill Dietz <w@wdtz.org>2022-03-13 21:43:03 -0500
committerWill Dietz <w@wdtz.org>2022-03-13 22:39:35 -0500
commit09c7cf2f4ecc1665b58002bb9683ba00fbc559cd (patch)
tree357e363e96fc14f27e7246ea149acd7911102bd1 /pkgs/games
parent65eed885d636e74eb3349b3aacee5e945a99f092 (diff)
downloadnixpkgs-09c7cf2f4ecc1665b58002bb9683ba00fbc559cd.tar
nixpkgs-09c7cf2f4ecc1665b58002bb9683ba00fbc559cd.tar.gz
nixpkgs-09c7cf2f4ecc1665b58002bb9683ba00fbc559cd.tar.bz2
nixpkgs-09c7cf2f4ecc1665b58002bb9683ba00fbc559cd.tar.lz
nixpkgs-09c7cf2f4ecc1665b58002bb9683ba00fbc559cd.tar.xz
nixpkgs-09c7cf2f4ecc1665b58002bb9683ba00fbc559cd.tar.zst
nixpkgs-09c7cf2f4ecc1665b58002bb9683ba00fbc559cd.zip
klavaro: patch to fix invalid free
Diffstat (limited to 'pkgs/games')
-rw-r--r--pkgs/games/klavaro/default.nix2
-rw-r--r--pkgs/games/klavaro/trans_lang_get_similar.patch71
2 files changed, 73 insertions, 0 deletions
diff --git a/pkgs/games/klavaro/default.nix b/pkgs/games/klavaro/default.nix
index 25bfb4daee2..ec00b8308de 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 00000000000..3b6644c5f7f
--- /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)