Ver código fonte

Merge pull request #363 from Dmitry-Me/outputLengthAsserts

Asserts for formatted output length
Lee Thomason 10 anos atrás
pai
commit
7ae888a601
1 arquivos alterados com 5 adições e 1 exclusões
  1. 5 1
      tinyxml2.cpp

+ 5 - 1
tinyxml2.cpp

@@ -75,10 +75,12 @@ distribution.
 				const int required = _vsnprintf(str, len, format, va);
 				const int required = _vsnprintf(str, len, format, va);
 				delete[] str;
 				delete[] str;
 				if ( required != -1 ) {
 				if ( required != -1 ) {
+					TIXMLASSERT( required >= 0 );
 					len = required;
 					len = required;
 					break;
 					break;
 				}
 				}
 			}
 			}
+			TIXMLASSERT( len >= 0 );
 			return len;
 			return len;
 		}
 		}
 	#endif
 	#endif
@@ -90,6 +92,7 @@ distribution.
 	inline int TIXML_VSCPRINTF( const char* format, va_list va )
 	inline int TIXML_VSCPRINTF( const char* format, va_list va )
 	{
 	{
 		int len = vsnprintf( 0, 0, format, va );
 		int len = vsnprintf( 0, 0, format, va );
+		TIXMLASSERT( len >= 0 );
 		return len;
 		return len;
 	}
 	}
 	#define TIXML_SSCANF   sscanf
 	#define TIXML_SSCANF   sscanf
@@ -2105,9 +2108,10 @@ void XMLPrinter::Print( const char* format, ... )
         vfprintf( _fp, format, va );
         vfprintf( _fp, format, va );
     }
     }
     else {
     else {
-        int len = TIXML_VSCPRINTF( format, va );
+        const int len = TIXML_VSCPRINTF( format, va );
         // Close out and re-start the va-args
         // Close out and re-start the va-args
         va_end( va );
         va_end( va );
+        TIXMLASSERT( len >= 0 );
         va_start( va, format );
         va_start( va, format );
         TIXMLASSERT( _buffer.Size() > 0 && _buffer[_buffer.Size() - 1] == 0 );
         TIXMLASSERT( _buffer.Size() > 0 && _buffer[_buffer.Size() - 1] == 0 );
         char* p = _buffer.PushArr( len ) - 1;	// back up over the null terminator.
         char* p = _buffer.PushArr( len ) - 1;	// back up over the null terminator.