From 7c21051d896c3095e0c9c95a1203bcdb3beffd68 Mon Sep 17 00:00:00 2001 From: Murtaza Jafferji Date: Fri, 11 Oct 2019 14:00:21 -0700 Subject: [PATCH 1/9] Add equals sign to list of values not considered safe for plain styling According to this post and my use case, the strings with equals sign needs to be quoted: https://stackoverflow.com/questions/19109912/do-i-need-quotes-for-strings-in-yaml Use quotes if your value includes special characters, (e.g. :, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, \). --- lib/js-yaml/dumper.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/js-yaml/dumper.js b/lib/js-yaml/dumper.js index 86f34794..804eb91e 100644 --- a/lib/js-yaml/dumper.js +++ b/lib/js-yaml/dumper.js @@ -23,6 +23,7 @@ var CHAR_ASTERISK = 0x2A; /* * */ var CHAR_COMMA = 0x2C; /* , */ var CHAR_MINUS = 0x2D; /* - */ var CHAR_COLON = 0x3A; /* : */ +var CHAR_EQUALS = 0x3D; /* = */ var CHAR_GREATER_THAN = 0x3E; /* > */ var CHAR_QUESTION = 0x3F; /* ? */ var CHAR_COMMERCIAL_AT = 0x40; /* @ */ @@ -220,16 +221,17 @@ function isPlainSafeFirst(c) { && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET - // | “#” | “&” | “*” | “!” | “|” | “>” | “'” | “"” + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK && c !== CHAR_EXCLAMATION && c !== CHAR_VERTICAL_LINE + && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE + // | “"” | “%” | “@” | “`”) && c !== CHAR_DOUBLE_QUOTE - // | “%” | “@” | “`”) && c !== CHAR_PERCENT && c !== CHAR_COMMERCIAL_AT && c !== CHAR_GRAVE_ACCENT; From 8b7ff6fde10cec2fbb0e650f585ead3d87f24b5e Mon Sep 17 00:00:00 2001 From: Murtaza Jafferji Date: Fri, 11 Oct 2019 14:02:54 -0700 Subject: [PATCH 2/9] Remove extra character --- lib/js-yaml/dumper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/js-yaml/dumper.js b/lib/js-yaml/dumper.js index 804eb91e..675c18da 100644 --- a/lib/js-yaml/dumper.js +++ b/lib/js-yaml/dumper.js @@ -221,7 +221,7 @@ function isPlainSafeFirst(c) { && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET - // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK From 0ec88e3efb3c451cb20358be5dff5a0ceb70763e Mon Sep 17 00:00:00 2001 From: Murtaza Jafferji Date: Mon, 14 Oct 2019 17:04:03 -0700 Subject: [PATCH 3/9] Add test to ensure quotes around lines with equals sign are not stripped --- test/issues/0519.js | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 test/issues/0519.js diff --git a/test/issues/0519.js b/test/issues/0519.js new file mode 100644 index 00000000..9fe90f65 --- /dev/null +++ b/test/issues/0519.js @@ -0,0 +1,10 @@ +'use strict'; + +var assert = require('assert'); +var yaml = require('../../'); + +test('Loader should not strip quotes for lines containing equals sign', function () { + var line_with_equals_sign = "'='"; + var result_of_load_and_dump = yaml.dump(yaml.load(line_with_equals_sign)); + assert.strictEqual(line_with_equals_sign, result_of_load_and_dump); +}); From 154013506e09a71246870cfdd64a82a40021a7a2 Mon Sep 17 00:00:00 2001 From: Murtaza Jafferji Date: Mon, 14 Oct 2019 18:09:20 -0700 Subject: [PATCH 4/9] Fix test by adding newline --- test/issues/0519.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/issues/0519.js b/test/issues/0519.js index 9fe90f65..2e382cf2 100644 --- a/test/issues/0519.js +++ b/test/issues/0519.js @@ -4,7 +4,7 @@ var assert = require('assert'); var yaml = require('../../'); test('Loader should not strip quotes for lines containing equals sign', function () { - var line_with_equals_sign = "'='"; + var line_with_equals_sign = "'='\n"; var result_of_load_and_dump = yaml.dump(yaml.load(line_with_equals_sign)); assert.strictEqual(line_with_equals_sign, result_of_load_and_dump); }); From fad86cd4270a23f16a2345f5ddddab0caa866c61 Mon Sep 17 00:00:00 2001 From: Murtaza Jafferji Date: Tue, 15 Oct 2019 11:43:10 -0700 Subject: [PATCH 5/9] Update test name and contents to be more clear about intention --- test/issues/0519.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/test/issues/0519.js b/test/issues/0519.js index 2e382cf2..05aa16f9 100644 --- a/test/issues/0519.js +++ b/test/issues/0519.js @@ -3,8 +3,9 @@ var assert = require('assert'); var yaml = require('../../'); -test('Loader should not strip quotes for lines containing equals sign', function () { - var line_with_equals_sign = "'='\n"; - var result_of_load_and_dump = yaml.dump(yaml.load(line_with_equals_sign)); - assert.strictEqual(line_with_equals_sign, result_of_load_and_dump); +test('Dumper should add quotes around equals sign', function () { + // pyyaml fails with unquoted `=` + // https://yaml-online-parser.appspot.com/?yaml=%3D%0A&type=json + assert.strictEqual(yaml.load(yaml.dump('=')), '='); + assert.strictEqual(yaml.dump('='), "'='"); }); From 2245cd47fbaa5ab46fc1aa03adcfbab3886674ab Mon Sep 17 00:00:00 2001 From: Murtaza Jafferji Date: Tue, 15 Oct 2019 11:47:21 -0700 Subject: [PATCH 6/9] Fix test by adding newline --- test/issues/0519.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/issues/0519.js b/test/issues/0519.js index 05aa16f9..ce9f77bd 100644 --- a/test/issues/0519.js +++ b/test/issues/0519.js @@ -7,5 +7,5 @@ test('Dumper should add quotes around equals sign', function () { // pyyaml fails with unquoted `=` // https://yaml-online-parser.appspot.com/?yaml=%3D%0A&type=json assert.strictEqual(yaml.load(yaml.dump('=')), '='); - assert.strictEqual(yaml.dump('='), "'='"); + assert.strictEqual(yaml.dump('='), "'='\n"); }); From 40707dd37bffea156b5aa2217a54454dce5d2a54 Mon Sep 17 00:00:00 2001 From: Murtaza Jafferji Date: Wed, 16 Oct 2019 19:39:18 -0700 Subject: [PATCH 7/9] Move back single quote --- lib/js-yaml/dumper.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/js-yaml/dumper.js b/lib/js-yaml/dumper.js index 675c18da..c3528815 100644 --- a/lib/js-yaml/dumper.js +++ b/lib/js-yaml/dumper.js @@ -221,7 +221,7 @@ function isPlainSafeFirst(c) { && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET - // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK @@ -230,7 +230,7 @@ function isPlainSafeFirst(c) { && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE - // | “"” | “%” | “@” | “`”) + // | “%” | “@” | “`”) && c !== CHAR_DOUBLE_QUOTE && c !== CHAR_PERCENT && c !== CHAR_COMMERCIAL_AT From 62a550cf368fe418218d3a892aad8c20721b66ab Mon Sep 17 00:00:00 2001 From: Murtaza Jafferji Date: Wed, 16 Oct 2019 19:40:50 -0700 Subject: [PATCH 8/9] Move back double quote --- lib/js-yaml/dumper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/js-yaml/dumper.js b/lib/js-yaml/dumper.js index c3528815..c5ff45fa 100644 --- a/lib/js-yaml/dumper.js +++ b/lib/js-yaml/dumper.js @@ -230,8 +230,8 @@ function isPlainSafeFirst(c) { && c !== CHAR_EQUALS && c !== CHAR_GREATER_THAN && c !== CHAR_SINGLE_QUOTE - // | “%” | “@” | “`”) && c !== CHAR_DOUBLE_QUOTE + // | “%” | “@” | “`”) && c !== CHAR_PERCENT && c !== CHAR_COMMERCIAL_AT && c !== CHAR_GRAVE_ACCENT; From 9566bc99e4de43776d1f8f9042fec76b3a1d509b Mon Sep 17 00:00:00 2001 From: Murtaza Jafferji Date: Wed, 16 Oct 2019 19:44:19 -0700 Subject: [PATCH 9/9] Remove trailing space --- lib/js-yaml/dumper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/js-yaml/dumper.js b/lib/js-yaml/dumper.js index c5ff45fa..77ba64cb 100644 --- a/lib/js-yaml/dumper.js +++ b/lib/js-yaml/dumper.js @@ -221,7 +221,7 @@ function isPlainSafeFirst(c) { && c !== CHAR_RIGHT_SQUARE_BRACKET && c !== CHAR_LEFT_CURLY_BRACKET && c !== CHAR_RIGHT_CURLY_BRACKET - // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” && c !== CHAR_SHARP && c !== CHAR_AMPERSAND && c !== CHAR_ASTERISK