From dce343e9261cb7670e13912b07e52b5354c7572c Mon Sep 17 00:00:00 2001 From: Matti Niemenmaa Date: Mon, 1 Oct 2018 11:58:57 +0300 Subject: [PATCH] Avoid panic on pretty string ending in single quote Fixes #262. --- src/ser.rs | 4 ++++ test-suite/tests/valid.rs | 4 ++++ test-suite/tests/valid/quote-surrounded-value.json | 10 ++++++++++ test-suite/tests/valid/quote-surrounded-value.toml | 2 ++ 4 files changed, 20 insertions(+) create mode 100644 test-suite/tests/valid/quote-surrounded-value.json create mode 100644 test-suite/tests/valid/quote-surrounded-value.toml diff --git a/src/ser.rs b/src/ser.rs index 9d989db..9f36f59 100644 --- a/src/ser.rs +++ b/src/ser.rs @@ -585,6 +585,10 @@ impl<'a> Serializer<'a> { } } } + if can_be_pretty && found_singles > 0 && value.ends_with('\'') { + // We cannot escape the ending quote so we must use """ + can_be_pretty = false; + } if !can_be_pretty { debug_assert!(ty != Type::OnelineTripple); return Repr::Std(ty); diff --git a/test-suite/tests/valid.rs b/test-suite/tests/valid.rs index d032ba5..7c1691c 100644 --- a/test-suite/tests/valid.rs +++ b/test-suite/tests/valid.rs @@ -250,3 +250,7 @@ test!(table_array_nest_no_keys, test!(dotted_keys, include_str!("valid/dotted-keys.toml"), include_str!("valid/dotted-keys.json")); + +test!(quote_surrounded_value, + include_str!("valid/quote-surrounded-value.toml"), + include_str!("valid/quote-surrounded-value.json")); diff --git a/test-suite/tests/valid/quote-surrounded-value.json b/test-suite/tests/valid/quote-surrounded-value.json new file mode 100644 index 0000000..84495cf --- /dev/null +++ b/test-suite/tests/valid/quote-surrounded-value.json @@ -0,0 +1,10 @@ +{ + "double": { + "type": "string", + "value": "\"double quotes here\"" + }, + "single": { + "type": "string", + "value": "'single quotes here'" + } +} diff --git a/test-suite/tests/valid/quote-surrounded-value.toml b/test-suite/tests/valid/quote-surrounded-value.toml new file mode 100644 index 0000000..dc8697e --- /dev/null +++ b/test-suite/tests/valid/quote-surrounded-value.toml @@ -0,0 +1,2 @@ +double = '"double quotes here"' +single = "'single quotes here'"