diff options
| author | oy <Tom_Adams@web.de> | 2010-08-12 15:22:07 +0200 |
|---|---|---|
| committer | oy <Tom_Adams@web.de> | 2010-08-12 15:22:07 +0200 |
| commit | 7503c642379cec7a2e14fe6a516d69a1f4d6d94a (patch) | |
| tree | 7c10ada1c341c67669cccdc7ae6f261ae3d103a6 /src/engine/shared | |
| parent | 1cde96ef79a8418a9c34f355ec49d08f1e654213 (diff) | |
| download | zcatch-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.cpp | 9 | ||||
| -rw-r--r-- | src/engine/shared/packer.h | 9 |
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; } }; |