浏览代码

Allow spaces before the ascii STL header keyword

The text "solid" is the general STL header indicator that the file is in fact
an ascii STL archive.  Allows spaces to precede the "solid" keyword, providing
compatibility with exporters that insert such (non-compliant )spaces.
Jared Duke 12 年之前
父节点
当前提交
6f4632e4d9
共有 1 个文件被更改,包括 11 次插入2 次删除
  1. 11 2
      code/STLLoader.cpp

+ 11 - 2
code/STLLoader.cpp

@@ -86,7 +86,12 @@ bool IsAsciiSTL(const char* buffer, unsigned int fileSize) {
 	if (IsBinarySTL(buffer, fileSize))
 		return false;
 
-	if (fileSize < 5)
+	const char* bufferEnd = buffer + fileSize;
+
+	if (!SkipSpaces(&buffer))
+		return false;
+
+	if (buffer + 5 >= bufferEnd)
 		return false;
 
 	return strncmp(buffer, "solid", 5) == 0;
@@ -209,7 +214,11 @@ void STLImporter::LoadASCIIFile()
 {
 	aiMesh* pMesh = pScene->mMeshes[0];
 
-	const char* sz = mBuffer + 5; // skip the "solid"
+	const char* sz = mBuffer;
+	SkipSpaces(&sz);
+	ai_assert(!IsLineEnd(sz));
+
+	sz += 5; // skip the "solid"
 	SkipSpaces(&sz);
 	const char* szMe = sz;
 	while (!::IsSpaceOrNewLine(*sz)) {