Merge pull request #1029 from samitc/master
fix bug when reading strings in quote in MD5 modelspull/1033/head
commit
ccf32aaf57
|
@ -195,7 +195,7 @@ bool MD5Parser::ParseSection(Section& out)
|
||||||
#define AI_MD5_SKIP_SPACES() if(!SkipSpaces(&sz)) \
|
#define AI_MD5_SKIP_SPACES() if(!SkipSpaces(&sz)) \
|
||||||
MD5Parser::ReportWarning("Unexpected end of line",elem.iLineNumber);
|
MD5Parser::ReportWarning("Unexpected end of line",elem.iLineNumber);
|
||||||
|
|
||||||
// read a triple float in brackets: (1.0 1.0 1.0)
|
// read a triple float in brackets: (1.0 1.0 1.0)
|
||||||
#define AI_MD5_READ_TRIPLE(vec) \
|
#define AI_MD5_READ_TRIPLE(vec) \
|
||||||
AI_MD5_SKIP_SPACES(); \
|
AI_MD5_SKIP_SPACES(); \
|
||||||
if ('(' != *sz++) \
|
if ('(' != *sz++) \
|
||||||
|
@ -210,7 +210,7 @@ bool MD5Parser::ParseSection(Section& out)
|
||||||
if (')' != *sz++) \
|
if (')' != *sz++) \
|
||||||
MD5Parser::ReportWarning("Unexpected token: ) was expected",elem.iLineNumber);
|
MD5Parser::ReportWarning("Unexpected token: ) was expected",elem.iLineNumber);
|
||||||
|
|
||||||
// parse a string, enclosed in quotation marks or not
|
// parse a string, enclosed in quotation marks or not
|
||||||
#define AI_MD5_PARSE_STRING(out) \
|
#define AI_MD5_PARSE_STRING(out) \
|
||||||
bool bQuota = (*sz == '\"'); \
|
bool bQuota = (*sz == '\"'); \
|
||||||
const char* szStart = sz; \
|
const char* szStart = sz; \
|
||||||
|
@ -228,6 +228,15 @@ bool MD5Parser::ParseSection(Section& out)
|
||||||
::memcpy(out.data,szStart,out.length); \
|
::memcpy(out.data,szStart,out.length); \
|
||||||
out.data[out.length] = '\0';
|
out.data[out.length] = '\0';
|
||||||
|
|
||||||
|
// parse a string, enclosed in quotation marks
|
||||||
|
#define AI_MD5_PARSE_STRING_IN_QUOTATION(out) \
|
||||||
|
while('\"'!=*sz)++sz; \
|
||||||
|
const char* szStart = ++sz; \
|
||||||
|
while('\"'!=*sz)++sz; \
|
||||||
|
const char* szEnd = (sz++); \
|
||||||
|
out.length = (size_t)(szEnd - szStart); \
|
||||||
|
::memcpy(out.data,szStart,out.length); \
|
||||||
|
out.data[out.length] = '\0';
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// .MD5MESH parsing function
|
// .MD5MESH parsing function
|
||||||
MD5MeshParser::MD5MeshParser(SectionList& mSections)
|
MD5MeshParser::MD5MeshParser(SectionList& mSections)
|
||||||
|
@ -247,9 +256,9 @@ MD5MeshParser::MD5MeshParser(SectionList& mSections)
|
||||||
for (const auto & elem : (*iter).mElements){
|
for (const auto & elem : (*iter).mElements){
|
||||||
mJoints.push_back(BoneDesc());
|
mJoints.push_back(BoneDesc());
|
||||||
BoneDesc& desc = mJoints.back();
|
BoneDesc& desc = mJoints.back();
|
||||||
|
|
||||||
const char* sz = elem.szStart;
|
const char* sz = elem.szStart;
|
||||||
AI_MD5_PARSE_STRING(desc.mName);
|
AI_MD5_PARSE_STRING_IN_QUOTATION(desc.mName);
|
||||||
AI_MD5_SKIP_SPACES();
|
AI_MD5_SKIP_SPACES();
|
||||||
|
|
||||||
// negative values, at least -1, is allowed here
|
// negative values, at least -1, is allowed here
|
||||||
|
@ -269,7 +278,7 @@ MD5MeshParser::MD5MeshParser(SectionList& mSections)
|
||||||
// shader attribute
|
// shader attribute
|
||||||
if (TokenMatch(sz,"shader",6)) {
|
if (TokenMatch(sz,"shader",6)) {
|
||||||
AI_MD5_SKIP_SPACES();
|
AI_MD5_SKIP_SPACES();
|
||||||
AI_MD5_PARSE_STRING(desc.mShader);
|
AI_MD5_PARSE_STRING_IN_QUOTATION(desc.mShader);
|
||||||
}
|
}
|
||||||
// numverts attribute
|
// numverts attribute
|
||||||
else if (TokenMatch(sz,"numverts",8)) {
|
else if (TokenMatch(sz,"numverts",8)) {
|
||||||
|
@ -362,7 +371,7 @@ MD5AnimParser::MD5AnimParser(SectionList& mSections)
|
||||||
AnimBoneDesc& desc = mAnimatedBones.back();
|
AnimBoneDesc& desc = mAnimatedBones.back();
|
||||||
|
|
||||||
const char* sz = elem.szStart;
|
const char* sz = elem.szStart;
|
||||||
AI_MD5_PARSE_STRING(desc.mName);
|
AI_MD5_PARSE_STRING_IN_QUOTATION(desc.mName);
|
||||||
AI_MD5_SKIP_SPACES();
|
AI_MD5_SKIP_SPACES();
|
||||||
|
|
||||||
// parent index - negative values are allowed (at least -1)
|
// parent index - negative values are allowed (at least -1)
|
||||||
|
|
Loading…
Reference in New Issue