Closed
Description
Symfony version(s) affected: symfony/yaml@^4.2
Description
I have received the following error when I try to parse YAML document generated by YARD documentation tool. The custom tag (!ruby/object:YARDJS::CodeObjects::PropertyObject
) in the YAML file has a reference to itself, but parser hasn't added it to the references registry yet thus throws the error.
PHP Fatal error: Uncaught Symfony\Component\Yaml\Exception\ParseException: Reference "1" does not exist at line 4 (near "object: *1"). in vendor/symfony/yaml/Parser.php:642
Stack trace:
#0 vendor/symfony/yaml/Parser.php(337): Symfony\Component\Yaml\Parser->parseValue('1', 512, 'mapping')
#1 vendor/symfony/yaml/Parser.php(454): Symfony\Component\Yaml\Parser->doParse('Constructs a se...', 512)
#2 vendor/symfony/yaml/Parser.php(315): Symfony\Component\Yaml\Parser->parseBlock(18, 'str: |-\n Const...', 512)
#3 vendor/symfony/yaml/Parser.php(454): Symfony\Component\Yaml\Parser->doParse(Array, 512)
#4 vendor/symfony/yaml/Parser.php(185): Symfony\Component\Yaml\Parser->parseBlock(10, 'files: []\ncurre...', 512)
#5 vendor/symfony/yaml/Parser.php(454): Symfony\Component\Yaml\Parser->doParse('- &1 !ruby/obje...', 512)
#6 vendor/symfony/yaml/Parser in vendor/symfony/yaml/Parser.php on line 642
How to reproduce
Just run:
use Symfony\Component\Yaml\Yaml;
$content = "
children: !ruby/array:YARD::CodeObjects::CodeObjectList
internal:
- &235 !ruby/object:YARD::CodeObjects::ModuleObject
children: !ruby/array:YARD::CodeObjects::CodeObjectList
internal:
- &2 !ruby/object:YARD::CodeObjects::ClassObject
children: !ruby/array:YARD::CodeObjects::CodeObjectList
internal:
- &1 !ruby/object:YARDJS::CodeObjects::PropertyObject
files: []
current_file_has_comments: false
name: :constructor
source_type: :ruby
visibility: :public
tags: []
docstrings: {}
docstring: !ruby/string:YARD::Docstring
str: |-
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibu
lum sit amet pulvinar odio, vitae convallis dolor.
object: *1
summary:
hash_flag: false
";
$yaml = Yaml::parse( $content, Yaml::PARSE_CUSTOM_TAGS );