Sfoglia il codice sorgente

Fix error in aiString documentation. MAXLEN includes the terminal NULL. This is unusual, but true.
Fix overflow vulnerability in SceneCombiner. Thanks to Krishty to point it out.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@683 67173fc5-114c-0410-ac8e-9d2fd5bffc1f

aramis_acg 15 anni fa
parent
commit
685d2b83c5
2 ha cambiato i file con 8 aggiunte e 1 eliminazioni
  1. 6 0
      code/SceneCombiner.cpp
  2. 2 1
      include/aiTypes.h

+ 6 - 0
code/SceneCombiner.cpp

@@ -62,6 +62,12 @@ inline void PrefixString(aiString& string,const char* prefix, unsigned int len)
 	if (string.length >= 1 && string.data[0] == '$')
 	if (string.length >= 1 && string.data[0] == '$')
 		return;
 		return;
 
 
+	if (len+string.length>=MAXLEN-1) {
+		DefaultLogger::get()->debug("Can't add an unique prefix because the string is too long");
+		ai_assert(false);
+		return;
+	}
+
 	// Add the prefix
 	// Add the prefix
 	::memmove(string.data+len,string.data,string.length+1);
 	::memmove(string.data+len,string.data,string.length+1);
 	::memcpy (string.data, prefix, len);
 	::memcpy (string.data, prefix, len);

+ 2 - 1
include/aiTypes.h

@@ -230,7 +230,8 @@ struct aiColor3D
  *  UTF-8 strings to their working character set (i.e. MBCS, WideChar).
  *  UTF-8 strings to their working character set (i.e. MBCS, WideChar).
  *
  *
  *  We use this representation instead of std::string to be C-compatible. The 
  *  We use this representation instead of std::string to be C-compatible. The 
- *  (binary) length of such a string is limited to MAXLEN characters (excluding the 0).
+ *  (binary) length of such a string is limited to MAXLEN characters (including the
+ *  the terminating zero).
 */
 */
 struct aiString
 struct aiString
 {
 {