From e2fa08555c71171d8cdc2ac024dcddd9e3f844df Mon Sep 17 00:00:00 2001 From: Roan Kattouw Date: Thu, 13 Mar 2008 16:44:05 +0000 Subject: [PATCH] (bug 12120) Unescaped quote in YAML output --- includes/api/ApiFormatYaml_spyc.php | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/includes/api/ApiFormatYaml_spyc.php b/includes/api/ApiFormatYaml_spyc.php index b3ccff0fef..b2973b8c4f 100644 --- a/includes/api/ApiFormatYaml_spyc.php +++ b/includes/api/ApiFormatYaml_spyc.php @@ -385,6 +385,18 @@ return false; } } + + /** + * Find out whether a string needs to be output as a literal rather than in plain style. + * Added by Roan Kattouw 13-03-2008 + * @param $value The string to check + * @return bool + */ + function _needLiteral($value) { + # Check whether the string contains # or : or begins with any of: + # [ - ? , [ ] { } ! * & | > ' " % @ ` ] + return (bool)(preg_match("/[#:]/", $value) || preg_match("/^[-?,[\]{}!*&|>'\"%@`]/", $value)); + } /** * Returns YAML from a key and a value @@ -396,7 +408,7 @@ */ function _dumpNode($key,$value,$indent) { // do some folding here, for blocks - if (strpos($value,"\n")) { + if (strpos($value,"\n") || $this->_needLiteral($value)) { $value = $this->_doLiteralBlock($value,$indent); } else { $value = $this->_doFolding($value,$indent); -- 2.20.1