[#7843] yaml loader fails if string contain curly brackets
Summary yaml loader fails if string contain curly brackets
Queue Horde Framework Packages
Queue Version HEAD
Type Bug
State Assigned
Priority 2. Medium
Owners Chuck Hagenbuch <chuck (at) horde (dot) org>, Mike Naberezny <mike (at) naberezny (dot) com>
Requester eero (dot) afheurlin (at) nemein (dot) com
Created 01/13/09 (427 days ago)
Due
Updated 03/21/09 (360 days ago)
Assigned 01/13/09 (427 days ago)
Resolved
Attachments
Milestone
Patch No

History
03/21/09 eero (dot) afheurlin (at) nemein (dot) com Comment #2 Reply to this comment
using single-quotes in stead of double-quotes works around the issue 
on the old spyc at least (and the last time I looked you used the same 
code for parsing).



syck does not care about quoting or such, it "just works"
01/13/09 Chuck Hagenbuch State ⇒ Assigned
Assigned to Mike Naberezny
Assigned to Chuck Hagenbuch
 
01/13/09 Chuck Hagenbuch Version ⇒ HEAD
 
01/13/09 eero (dot) afheurlin (at) nemein (dot) com Comment #1
State ⇒ Unconfirmed
Patch ⇒
Milestone ⇒
Queue ⇒ Horde Framework Packages
Summary ⇒ yaml loader fails if string contain curly brackets
Type ⇒ Bug
Priority ⇒ 2. Medium
Reply to this comment
Consider the following yaml snippet



---<snip>---

routes:

     index:

         controller: net_nemein_news_controllers_index

         action: latest

         route: /

         content_entry_point: nnn-show-latest

         allowed_methods:

             - OPTIONS

             - GET

             - PROPFIND

     latest:

         controller: net_nemein_news_controllers_index

         action: latest

         route: "/latest/{$int:number}/"

         content_entry_point: nnn-show-latest

     rss:

         controller: net_nemein_news_controllers_index

         action: latest

         route: /rss.xml

         mimetype: text/xml

         template_entry_point: nnn-show-rss

     show:

         controller: net_nemein_news_controllers_article

         action: show

         route: "/{$name}/"

         content_entry_point: nnn-show-article

     edit:

         controller: net_nemein_news_controllers_article

         action: edit

         route: "/{$name}/edit"

         content_entry_point: nnn-edit-article

---<snap>---



This has the same bug as spyck in the parser (supposedly) thinking 
that the curly brackets inside strings are inline maps



syck parses this correctly even when the routes with curly brackets 
are not quoted.



tested on "PHP 5.2.0-8+etch11 (cli)" using the following code and 
horde/Yaml-1.0.1 via PEAR.



---<snip>---

<?php

error_reporting(E_ALL);

require_once('Horde/Yaml.php');

require_once('Horde/Yaml/Node.php');

require_once('Horde/Yaml/Exception.php');

require_once('Horde/Yaml/Loader.php');

$path = realpath(dirname(__FILE__)) . '/test.yml';

echo "path={$path}\n";

$array = Horde_Yaml::load($path);

if (   !(   isset($array['routes'])

          && isset($array['routes']['latest'])

          && isset($array['routes']['latest']['route'])

          && is_string($array['routes']['latest']['route']))

     || !(   isset($array['routes'])

          && isset($array['routes']['show'])

          && isset($array['routes']['show']['route'])

          && is_string($array['routes']['show']['route']))

     )

{

     echo "ERROR: Invalidly parsed route\n";

     var_dump($array);

     exit(1);

}



echo "No  errors detected";

?>

---<snip>---