From 1f2426226b99a318da03c2bc261ac7d91e362d0c Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Tue, 4 Sep 2018 09:28:49 +0300 Subject: [PATCH] evmbin: escape newlines in json errors (#9458) --- evmbin/src/display/json.rs | 2 +- evmbin/src/display/mod.rs | 4 ++++ evmbin/src/display/std_json.rs | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/evmbin/src/display/json.rs b/evmbin/src/display/json.rs index 613be1d22..ea27c2854 100644 --- a/evmbin/src/display/json.rs +++ b/evmbin/src/display/json.rs @@ -95,7 +95,7 @@ impl vm::Informant for Informant { println!( "{{\"error\":\"{error}\",\"gasUsed\":\"{gas:x}\",\"time\":{time}}}", - error = failure.error, + error = display::escape_newlines(&failure.error), gas = failure.gas_used, time = display::as_micros(&failure.time), ) diff --git a/evmbin/src/display/mod.rs b/evmbin/src/display/mod.rs index a8eb20d9e..092316c03 100644 --- a/evmbin/src/display/mod.rs +++ b/evmbin/src/display/mod.rs @@ -31,3 +31,7 @@ pub fn format_time(time: &Duration) -> String { pub fn as_micros(time: &Duration) -> u64 { time.as_secs() * 1_000_000 + time.subsec_nanos() as u64 / 1_000 } + +fn escape_newlines(s: D) -> String { + format!("{}", s).replace("\r\n", "\n").replace('\n', "\\n") +} diff --git a/evmbin/src/display/std_json.rs b/evmbin/src/display/std_json.rs index 6bbace4a6..57b14128b 100644 --- a/evmbin/src/display/std_json.rs +++ b/evmbin/src/display/std_json.rs @@ -129,7 +129,7 @@ impl vm::Informant for Informant { writeln!( &mut out_sink, "{{\"error\":\"{error}\",\"gasUsed\":\"0x{gas:x}\",\"time\":{time}}}", - error = failure.error, + error = display::escape_newlines(&failure.error), gas = failure.gas_used, time = display::as_micros(&failure.time), ).expect("The sink must be writeable.");