@@ -134,16 +134,12 @@ char* StrPair::ParseName( char* p )
return 0;
}
- if ( !XMLUtil::IsAlpha( *p ) ) {
- return 0;
- }
-
while( *p && (
XMLUtil::IsAlphaNum( (unsigned char) *p )
|| *p == '_'
- || *p == '-'
- || *p == '.'
- || *p == ':' ))
+ || *p == ':'
+ || (*p == '-' && p>start ) // can be in a name, but not lead it.
+ || (*p == '.' && p>start ) )) // can be in a name, but not lead it.
{
++p;
@@ -940,6 +940,12 @@ int main( int /*argc*/, const char ** /*argv*/ )
XMLTest( "QueryBoolText", boolValue, true, false );
+ {
+ const char* xml = "<element><_sub/><:sub/><sub:sub/><sub-sub/></element>";
+ XMLDocument doc;
+ doc.Parse( xml );
+ XMLTest( "Non-alpha element lead letter parses.", doc.Error(), false );
+ }
// ----------- Performance tracking --------------