cmXml.c : Allow attributes to be wrapped in single or double quotes.

This commit is contained in:
kevin 2021-01-29 10:09:29 -05:00
parent 75067f1304
commit e29b975677

View File

@ -332,14 +332,17 @@ cmXmlRC_t _cmXmlParseAttr( cmXml_t* p, cmChar_t endChar, cmXmlNode_t* np )
if((v0 = _cmXmlAdvanceToNextNonWhite(p)) == NULL ) if((v0 = _cmXmlAdvanceToNextNonWhite(p)) == NULL )
return _cmXmlSyntaxError(p); return _cmXmlSyntaxError(p);
char begChar = *p->c;
// the first character in the value must be a single quote // the first character in the value must be a single quote
if( *p->c == '\'' ) if( begChar == '\'' || begChar == '"' )
{ {
if((v0 = _cmXmlAdvanceOne(p)) == NULL ) if((v0 = _cmXmlAdvanceOne(p)) == NULL )
return _cmXmlSyntaxError(p); return _cmXmlSyntaxError(p);
char endStr[] = { begChar, 0 };
// advance to the next single quote // advance to the next single quote
v1 = _cmXmlAdvanceToNext(p,"'"); v1 = _cmXmlAdvanceToNext(p,endStr);
} }
else else
{ {
@ -350,7 +353,7 @@ cmXmlRC_t _cmXmlParseAttr( cmXml_t* p, cmChar_t endChar, cmXmlNode_t* np )
return _cmXmlSyntaxError(p); return _cmXmlSyntaxError(p);
// advance past the ending single quote // advance past the ending quote
if( *p->c != endChar ) if( *p->c != endChar )
if( _cmXmlAdvanceOne(p) == NULL ) if( _cmXmlAdvanceOne(p) == NULL )
return _cmXmlSyntaxError(p); return _cmXmlSyntaxError(p);
@ -359,7 +362,7 @@ cmXmlRC_t _cmXmlParseAttr( cmXml_t* p, cmChar_t endChar, cmXmlNode_t* np )
_cmXmlAttrAlloc(p, np, l0, l1-l0, v0, v1-v0 ); _cmXmlAttrAlloc(p, np, l0, l1-l0, v0, v1-v0 );
// p->c now points just past the ending single quote // p->c now points just past the ending quote
return rc; return rc;
} }