diff --git a/tinyxml2.cpp b/tinyxml2.cpp
index be888f4..6dae0d9 100644
--- a/tinyxml2.cpp
+++ b/tinyxml2.cpp
@@ -136,16 +136,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;
}
diff --git a/xmltest.cpp b/xmltest.cpp
index 8155ef4..3144384 100644
--- a/xmltest.cpp
+++ b/xmltest.cpp
@@ -940,6 +940,13 @@ int main( int /*argc*/, const char ** /*argv*/ )
XMLTest( "QueryBoolText", boolValue, true, false );
}
+ {
+ const char* xml = "<_sub/><:sub/>";
+ XMLDocument doc;
+ doc.Parse( xml );
+ XMLTest( "Non-alpha element lead letter parses.", doc.Error(), false );
+ }
+
// ----------- Whitespace ------------
{
const char* xml = ""
@@ -958,7 +965,6 @@ int main( int /*argc*/, const char ** /*argv*/ )
XMLTest( "Whitespace collapse", "This is ' text '", parent->GetText() );
}
}
-
// ----------- Performance tracking --------------
{