Bug 29095 - Default values for xml:space attribute in a schema are not lower case.
Summary: Default values for xml:space attribute in a schema are not lower case.
Status: NEW
Alias: None
Product: Class Libraries
Classification: Mono
Component: System.XML (show other bugs)
Version: unspecified
Hardware: Other Other
: --- normal
Target Milestone: Untriaged
Assignee: Bugzilla
URL:
Depends on:
Blocks:
 
Reported: 2015-04-14 16:28 UTC by daniel.madill
Modified: 2015-04-14 16:28 UTC (History)
1 user (show)

See Also:
Tags:
Is this bug a regression?: ---
Last known good build:


Attachments

Description daniel.madill 2015-04-14 16:28:57 UTC
The line <xs:attribute ref="xml:space" fixed="preserve"/> in a schema causes a validating XmlReader using this schema to fail with a System.ArgumentException of "The requested value 'preserve' was not found", even though "preserve" is a valid value for the xml:space attribute. This issue was observed on iOS and Android.

Changing the line to <xs:attribute ref="xml:space" fixed="Preserve"/> gets rid of the exception but is not compatible across platforms (e.g. Visual Studio 2013 Update 2 requires "preserve" and causes an exception if "Preserve" is used).

The "preserve" value should be lower case. The problem is a bug in /Library/Frameworks/Xamarin.iOS.framework/Versions/8.9.1.3/src/mono/mcs/class/System.XML/Mono.Xml.Schema/XmlSchemaValidatingReader.cs:446:

    return (XmlSpace) Enum.Parse (typeof(XmlSpace), spaceSpec, false);

This code is wrong because the XmlSpace enumeration uses "Preserve" for the enumeration value but "preserve" is the correct value for xml:space in the schema. If allowing any case would be acceptable, then an easy "fix" would be to change this line to:

    return (XmlSpace) Enum.Parse (typeof(XmlSpace), spaceSpec, true);

so that case is ignored when comparing the xml:space attribute value to the XmlSpace enumeration.

Note You need to log in before you can comment on or make changes to this bug.