diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/pugixml.cpp | 13 | 
1 files changed, 10 insertions, 3 deletions
diff --git a/src/pugixml.cpp b/src/pugixml.cpp index 7326dcf..bcb0e89 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -115,6 +115,8 @@ namespace  	// Get string length  	size_t strlength(const char_t* s)  	{ +		assert(s); +  	#ifdef PUGIXML_WCHAR_MODE  		return wcslen(s);  	#else @@ -125,6 +127,8 @@ namespace  	// Compare two strings  	bool strequal(const char_t* src, const char_t* dst)  	{ +		assert(src && dst); +  	#ifdef PUGIXML_WCHAR_MODE  		return wcscmp(src, dst) == 0;  	#else @@ -277,11 +281,11 @@ namespace pugi  		void deallocate_memory(void* ptr, size_t size, xml_memory_page* page)  		{ -			assert(ptr >= page->data && ptr < page->data + xml_memory_page_size); -			(void)!ptr; -  			if (page == _root) page->busy_size = _busy_size; +			assert(ptr >= page->data && ptr < page->data + page->busy_size); +			(void)!ptr; +  			page->freed_size += size;  			assert(page->freed_size <= page->busy_size); @@ -1344,6 +1348,7 @@ namespace  			if (end) // there was a gap already; collapse it  			{  				// Move [old_gap_end, new_gap_start) to [old_gap_start, ...) +				assert(s >= end);  				memmove(end - size, end, reinterpret_cast<char*>(s) - reinterpret_cast<char*>(end));  			} @@ -1360,6 +1365,7 @@ namespace  			if (end)  			{  				// Move [old_gap_end, current_pos) to [old_gap_start, ...) +				assert(s >= end);  				memmove(end - size, end, reinterpret_cast<char*>(s) - reinterpret_cast<char*>(end));  				return s - size; @@ -2346,6 +2352,7 @@ namespace  			}  			xml_parse_result result = make_parse_result(static_cast<xml_parse_status>(error), parser.error_offset ? parser.error_offset - buffer : 0); +			assert(result.offset >= 0 && static_cast<size_t>(result.offset) <= length);  			// update allocator state  			*static_cast<xml_allocator*>(xmldoc) = parser.alloc;  | 
