Skip to content

SemanticErrorException when path key exceeds 1023 characters #95

@ShaunLoganOracle

Description

@ShaunLoganOracle

Using v1.8.0.0 (via OpenAPI.NET v1.2.3) to parse an OA3 json document, we are seeing a SemanticErrorException when one of the keys in the Paths collection exceeds 1023 characters. For example, take the PetStore reference OA3 json and change the /pets path key to be extremely long. Attempt to read/parse the file, and get this exception:

SharpYaml.SemanticErrorException: (Lin: 15, Col: 1030, Chr: 1276) - (Lin: 15, Col: 1031, Chr: 1277): While parsing a flow mapping,  did not find expected ',' or '}'.
   at SharpYaml.Parser`1.ParseFlowMappingKey(Boolean isFirst) in C:\SharpYaml 1.8.0\src\SharpYaml\Parser.cs:line 903
   at SharpYaml.Parser`1.StateMachine() in C:\SharpYaml 1.8.0\src\SharpYaml\Parser.cs:line 198
   at SharpYaml.Parser`1.MoveNext() in C:\SharpYaml 1.8.0\src\SharpYaml\Parser.cs:line 128
   at SharpYaml.EventReader.MoveNext() in C:\SharpYaml 1.8.0\src\SharpYaml\EventReader.cs:line 117
   at SharpYaml.EventReader.Allow[T]() in C:\SharpYaml 1.8.0\src\SharpYaml\EventReader.cs:line 146
   at SharpYaml.Model.YamlValue.Load(EventReader eventReader, YamlNodeTracker tracker) in C:\SharpYaml 1.8.0\src\SharpYaml\Model\YamlValue.cs:line 59
   at SharpYaml.Model.YamlNode.ReadElement(EventReader eventReader, YamlNodeTracker tracker) in C:\SharpYaml 1.8.0\src\SharpYaml\Model\YamlNode.cs:line 44
   at SharpYaml.Model.YamlMapping.Load(EventReader eventReader, YamlNodeTracker tracker) in C:\SharpYaml 1.8.0\src\SharpYaml\Model\YamlMapping.cs:line 132
   at SharpYaml.Model.YamlNode.ReadElement(EventReader eventReader, YamlNodeTracker tracker) in C:\SharpYaml 1.8.0\src\SharpYaml\Model\YamlNode.cs:line 38
   at SharpYaml.Model.YamlMapping.Load(EventReader eventReader, YamlNodeTracker tracker) in C:\SharpYaml 1.8.0\src\SharpYaml\Model\YamlMapping.cs:line 132
   at SharpYaml.Model.YamlNode.ReadElement(EventReader eventReader, YamlNodeTracker tracker) in C:\SharpYaml 1.8.0\src\SharpYaml\Model\YamlNode.cs:line 38
   at SharpYaml.Model.YamlDocument.Load(EventReader eventReader, YamlNodeTracker tracker) in C:\SharpYaml 1.8.0\src\SharpYaml\Model\YamlDocument.cs:line 49
   at SharpYaml.Model.YamlStream.Load(EventReader eventReader, YamlNodeTracker tracker) in C:\SharpYaml 1.8.0\src\SharpYaml\Model\YamlStream.cs:line 68
   at SharpYaml.Model.YamlStream.Load(TextReader stream, YamlNodeTracker tracker) in C:\SharpYaml 1.8.0\src\SharpYaml\Model\YamlStream.cs:line 60

(Edit: updated exception stack trace to include line numbers)

Here is the sample code that demonstrates this:

         var filepath = @"c:\temp\petstore-3.0-with-a-really-long-path.json";
            using (Stream file = new FileStream (filepath, FileMode.Open))
            {
               YamlDocument yamlDocument;
               using (var streamReader = new StreamReader (file))
               {
                  var yamlStream = new YamlStream ();
                  yamlStream.Load (streamReader);  // <-- this line throws
                  yamlDocument = yamlStream.Documents.First ();
                  Assert.IsNotNull (yamlDocument);
               }
            }

Here is the sample (long) path entry in the json file:

/pets-with-a-really-long-path-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123

Our expectation is that keys of arbitrary lengths could be parsed. Is there a workaround for this apparent limitation?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions