summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorBerke Viktor <berkeviktor@aol.com>2012-01-18 09:25:05 +0100
committerBerke Viktor <berkeviktor@aol.com>2012-01-18 09:25:05 +0100
commit569cb3dbbfb854038f9ebcdb5a5374e1de6ec9c0 (patch)
tree5f072d7ce5b8280ec2f3a72fd2fb719f4c0b5a35
parentffdd106588854aa66cdad1ad4bbac980b96df967 (diff)
add Non-BMP plugin against GTK+ exploits
-rw-r--r--plugins/makefile.mak4
-rw-r--r--plugins/nonbmp/makefile.mak18
-rw-r--r--plugins/nonbmp/nonbmp.c87
-rw-r--r--win32/release-x64.bat1
-rw-r--r--win32/release-x86.bat1
-rw-r--r--win32/xchat-wdk-x64.skel.iss2
-rw-r--r--win32/xchat-wdk-x86.skel.iss2
7 files changed, 115 insertions, 0 deletions
diff --git a/plugins/makefile.mak b/plugins/makefile.mak
index b692c41f..6a44e34d 100644
--- a/plugins/makefile.mak
+++ b/plugins/makefile.mak
@@ -13,6 +13,8 @@ all:
 	@-$(MAKE) /nologo /s /f makefile.mak $@
 	@cd ..\mpcinfo
 	@-$(MAKE) /nologo /s /f makefile.mak $@
+	@cd ..\nonbmp
+	@-$(MAKE) /nologo /s /f makefile.mak $@
 	@cd ..\python
 	@-$(MAKE) /nologo /s /f makefile.mak $@
 	@cd ..\tcl
@@ -45,6 +47,8 @@ clean:
 	@-$(MAKE) /nologo /s /f makefile.mak clean $@
 	@cd ..\mpcinfo
 	@-$(MAKE) /nologo /s /f makefile.mak clean $@
+	@cd ..\nonbmp
+	@-$(MAKE) /nologo /s /f makefile.mak clean $@
 	@cd ..\python
 	@-$(MAKE) /nologo /s /f makefile.mak clean $@
 	@cd ..\tcl
diff --git a/plugins/nonbmp/makefile.mak b/plugins/nonbmp/makefile.mak
new file mode 100644
index 00000000..1c28610d
--- /dev/null
+++ b/plugins/nonbmp/makefile.mak
@@ -0,0 +1,18 @@
+include "..\..\src\makeinc.mak"

+

+all: nonbmp.obj nonbmp.def

+	link $(LDFLAGS) $(LIBS) /dll /out:xcnonbmp.dll /def:nonbmp.def nonbmp.obj

+

+nonbmp.def:

+	echo EXPORTS > nonbmp.def

+	echo xchat_plugin_init >> nonbmp.def

+	echo xchat_plugin_deinit >> nonbmp.def

+

+nonbmp.obj: nonbmp.c makefile.mak

+	cl $(CFLAGS) $(GLIB) /I.. nonbmp.c

+

+clean:

+	del *.obj

+	del *.dll

+	del *.exp

+	del *.lib

diff --git a/plugins/nonbmp/nonbmp.c b/plugins/nonbmp/nonbmp.c
new file mode 100644
index 00000000..fe9571b7
--- /dev/null
+++ b/plugins/nonbmp/nonbmp.c
@@ -0,0 +1,87 @@
+#include <stdlib.h>
+#include <glib.h>
+#include <string.h>
+
+#include "xchat-plugin.h"
+
+static xchat_plugin *ph;
+static const char name[] = "Non-BMP";
+static const char desc[] = "Replace non-BMP characters with replacment characters";
+static const char version[] = "1.0000";
+static int recursing = 0;
+
+static int filter(
+	char *word[],
+	char *word_eol[],
+	void *unused
+) {
+	gunichar *line;
+	gchar *utf8_line;
+	glong length;
+	glong index;
+
+	if( recursing ) {
+		return XCHAT_EAT_NONE;
+	}
+
+	/* the input has already been checked so we can use the _fast version */
+	line = g_utf8_to_ucs4_fast(
+		(char *)word_eol[1],
+		-1, /* NUL terminated input */
+		&length
+	);
+	
+	for( index = 0; index < length; index++ ) {
+		if( line[ index ] > 0xFFFF ) {
+			line[ index ] = 0xFFFD; /* replacement character */
+		}
+	}
+
+	utf8_line = g_ucs4_to_utf8(
+		line,
+		-1, /* NUL terminated input */
+		NULL, /* items read */
+		NULL, /* items written */
+		NULL  /* ignore conversion error */
+	);
+
+	if( utf8_line == NULL ) {
+		/* conversion failed ... I guess we are screwed? */
+		g_free( line );
+		return XCHAT_EAT_NONE;
+	}
+
+	recursing = 1;
+	xchat_commandf( ph, "RECV %s", utf8_line );
+	recursing = 0;
+
+	g_free( line );
+	g_free( utf8_line );
+	return XCHAT_EAT_ALL;
+}
+
+int xchat_plugin_init(
+	xchat_plugin *plugin_handle,
+	char **plugin_name,
+	char **plugin_desc,
+	char **plugin_version,
+	char *arg 
+) {
+/*	int index = 0;*/
+
+	ph = plugin_handle;
+	*plugin_name = name;
+	*plugin_desc = desc;
+	*plugin_version = version;
+
+	xchat_hook_server( ph, "RAW LINE", XCHAT_PRI_HIGHEST, filter, (void *)NULL );
+	xchat_printf (ph, "%s plugin loaded\n", name);
+	return 1;
+}
+
+int
+xchat_plugin_deinit (void)
+{
+	xchat_printf (ph, "%s plugin unloaded\n", name);
+	return 1;
+}
\ No newline at end of file
diff --git a/win32/release-x64.bat b/win32/release-x64.bat
index 9e092a2b..9cf634a5 100644
--- a/win32/release-x64.bat
+++ b/win32/release-x64.bat
@@ -62,6 +62,7 @@ copy ..\plugins\fishlim\xcfishlim.dll %XCHAT_DEST%\plugins
 copy ..\plugins\lua\xclua.dll %XCHAT_DEST%\plugins
 ::obs copy ..\plugins\gtkpref\xcgtkpref.dll %XCHAT_DEST%\plugins
 copy ..\plugins\mpcinfo\xcmpcinfo.dll %XCHAT_DEST%\plugins
+copy ..\plugins\nonbmp\xcnonbmp.dll %XCHAT_DEST%\plugins
 copy ..\plugins\perl\xcperl-512.dll %XCHAT_DEST%\plugins
 copy ..\plugins\perl\xcperl-514.dll %XCHAT_DEST%\plugins
 copy ..\plugins\python\xcpython.dll %XCHAT_DEST%\plugins
diff --git a/win32/release-x86.bat b/win32/release-x86.bat
index bf0a8db6..05419beb 100644
--- a/win32/release-x86.bat
+++ b/win32/release-x86.bat
@@ -64,6 +64,7 @@ copy ..\plugins\fishlim\xcfishlim.dll %XCHAT_DEST%\plugins
 copy ..\plugins\lua\xclua.dll %XCHAT_DEST%\plugins
 ::obs copy ..\plugins\gtkpref\xcgtkpref.dll %XCHAT_DEST%\plugins
 copy ..\plugins\mpcinfo\xcmpcinfo.dll %XCHAT_DEST%\plugins
+copy ..\plugins\nonbmp\xcnonbmp.dll %XCHAT_DEST%\plugins
 copy ..\plugins\perl\xcperl-512.dll %XCHAT_DEST%\plugins
 copy ..\plugins\perl\xcperl-514.dll %XCHAT_DEST%\plugins
 copy ..\plugins\python\xcpython.dll %XCHAT_DEST%\plugins
diff --git a/win32/xchat-wdk-x64.skel.iss b/win32/xchat-wdk-x64.skel.iss
index 815bdd48..12fa3667 100644
--- a/win32/xchat-wdk-x64.skel.iss
+++ b/win32/xchat-wdk-x64.skel.iss
@@ -39,6 +39,7 @@ Name: "plugins\doat"; Description: "Do At"; Types: full custom; Flags: disableno
 Name: "plugins\exec"; Description: "Exec"; Types: full custom; Flags: disablenouninstallwarning

 Name: "plugins\fishlim"; Description: "FiSHLiM"; Types: full custom; Flags: disablenouninstallwarning

 Name: "plugins\mpcinfo"; Description: "mpcInfo"; Types: full custom; Flags: disablenouninstallwarning

+Name: "plugins\nonbmp"; Description: "Non-BMP"; Types: full custom; Flags: disablenouninstallwarning

 Name: "plugins\upd"; Description: "Update Checker"; Types: normal full custom; Flags: disablenouninstallwarning

 Name: "plugins\winamp"; Description: "Winamp"; Types: full custom; Flags: disablenouninstallwarning

 Name: "plugins\winsys"; Description: "WinSys"; Types: full custom; Flags: disablenouninstallwarning

@@ -154,6 +155,7 @@ Source: "plugins\xcexec.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Co
 Source: "plugins\xcfishlim.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\fishlim

 Source: "etc\music.png"; DestDir: "{app}\etc"; Flags: ignoreversion; Components: plugins\winamp or plugins\mpcinfo

 Source: "plugins\xcmpcinfo.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\mpcinfo

+Source: "plugins\xcnonbmp.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\nonbmp

 Source: "etc\download.png"; DestDir: "{app}\etc"; Flags: ignoreversion; Components: plugins\upd

 Source: "plugins\xcupd.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\upd

 Source: "plugins\xcwinamp.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\winamp

diff --git a/win32/xchat-wdk-x86.skel.iss b/win32/xchat-wdk-x86.skel.iss
index 2bc7969f..2bef323f 100644
--- a/win32/xchat-wdk-x86.skel.iss
+++ b/win32/xchat-wdk-x86.skel.iss
@@ -38,6 +38,7 @@ Name: "plugins\doat"; Description: "Do At"; Types: full custom; Flags: disableno
 Name: "plugins\exec"; Description: "Exec"; Types: full custom; Flags: disablenouninstallwarning

 Name: "plugins\fishlim"; Description: "FiSHLiM"; Types: full custom; Flags: disablenouninstallwarning

 Name: "plugins\mpcinfo"; Description: "mpcInfo"; Types: full custom; Flags: disablenouninstallwarning

+Name: "plugins\nonbmp"; Description: "Non-BMP"; Types: full custom; Flags: disablenouninstallwarning

 Name: "plugins\upd"; Description: "Update Checker"; Types: normal full custom; Flags: disablenouninstallwarning

 Name: "plugins\winamp"; Description: "Winamp"; Types: full custom; Flags: disablenouninstallwarning

 Name: "plugins\winsys"; Description: "WinSys"; Types: full custom; Flags: disablenouninstallwarning

@@ -155,6 +156,7 @@ Source: "plugins\xcexec.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Co
 Source: "plugins\xcfishlim.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\fishlim

 Source: "etc\music.png"; DestDir: "{app}\etc"; Flags: ignoreversion; Components: plugins\winamp or plugins\mpcinfo

 Source: "plugins\xcmpcinfo.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\mpcinfo

+Source: "plugins\xcnonbmp.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\nonbmp

 Source: "etc\download.png"; DestDir: "{app}\etc"; Flags: ignoreversion; Components: plugins\upd

 Source: "plugins\xcupd.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\upd

 Source: "plugins\xcwinamp.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\winamp