about summary refs log tree commit diff
path: root/src/engine/shared
diff options
context:
space:
mode:
authoroy <Tom_Adams@web.de>2010-08-12 15:22:07 +0200
committeroy <Tom_Adams@web.de>2010-08-12 15:22:07 +0200
commit7503c642379cec7a2e14fe6a516d69a1f4d6d94a (patch)
tree7c10ada1c341c67669cccdc7ae6f261ae3d103a6 /src/engine/shared
parent1cde96ef79a8418a9c34f355ec49d08f1e654213 (diff)
downloadzcatch-7503c642379cec7a2e14fe6a516d69a1f4d6d94a.tar.gz
zcatch-7503c642379cec7a2e14fe6a516d69a1f4d6d94a.zip
made unpacking of net strings more strict - prevents possible malformed output
Diffstat (limited to 'src/engine/shared')
-rw-r--r--src/engine/shared/packer.cpp9
-rw-r--r--src/engine/shared/packer.h9
2 files changed, 14 insertions, 4 deletions
diff --git a/src/engine/shared/packer.cpp b/src/engine/shared/packer.cpp
index 3e1d8dd6..53a74754 100644
--- a/src/engine/shared/packer.cpp
+++ b/src/engine/shared/packer.cpp
@@ -114,7 +114,7 @@ int CUnpacker::GetInt()
 	return i;
 }
 
-const char *CUnpacker::GetString()
+const char *CUnpacker::GetString(int SanitizeType)
 {
 	if(m_Error || m_pCurrent >= m_pEnd)
 		return "";
@@ -132,8 +132,11 @@ const char *CUnpacker::GetString()
 	m_pCurrent++;
 	
 	// sanitize all strings
-	str_sanitize(pPtr);
-	return pPtr;
+	if(SanitizeType&SANITIZE)
+		str_sanitize(pPtr);
+	else if(SanitizeType&SANITIZE_CC)
+		str_sanitize_cc(pPtr);
+	return SanitizeType&SKIP_START_WHITESPACES ? str_skip_whitespaces(pPtr) : pPtr;
 }
 
 const unsigned char *CUnpacker::GetRaw(int Size)
diff --git a/src/engine/shared/packer.h b/src/engine/shared/packer.h
index 7a98501a..02619919 100644
--- a/src/engine/shared/packer.h
+++ b/src/engine/shared/packer.h
@@ -32,9 +32,16 @@ class CUnpacker
 	const unsigned char *m_pEnd;
 	int m_Error;
 public:
+	enum
+	{
+		SANITIZE=1,
+		SANITIZE_CC=2,
+		SKIP_START_WHITESPACES=4
+	};
+
 	void Reset(const void *pData, int Size);
 	int GetInt();
-	const char *GetString();
+	const char *GetString(int SanitizeType = SANITIZE);
 	const unsigned char *GetRaw(int Size);
 	bool Error() const { return m_Error; }
 };