From 07e88a74791d4a78b4445b758c9e67deccc25911 Mon Sep 17 00:00:00 2001 From: Jason Ish Date: Mon, 29 Jun 2020 11:10:40 -0600 Subject: [PATCH] jsonbuilder: add debug_validate to state If debug validation is enabled, panic on invalid state errors. For example, calling close on an already closed jsonbuilder object. --- rust/src/jsonbuilder.rs | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/rust/src/jsonbuilder.rs b/rust/src/jsonbuilder.rs index a16823a591..75cce54f32 100644 --- a/rust/src/jsonbuilder.rs +++ b/rust/src/jsonbuilder.rs @@ -164,7 +164,10 @@ impl JsonBuilder { self.pop_state(); Ok(self) } - _ => Err(JsonError::InvalidState), + State::None => { + debug_validate_fail!("invalid state"); + Err(JsonError::InvalidState) + }, } } @@ -226,6 +229,7 @@ impl JsonBuilder { self.buf.push_str(",\""); } _ => { + debug_validate_fail!("invalid state"); return Err(JsonError::InvalidState); } } @@ -247,6 +251,7 @@ impl JsonBuilder { self.buf.push(','); } _ => { + debug_validate_fail!("invalid state"); return Err(JsonError::InvalidState); } } @@ -268,6 +273,7 @@ impl JsonBuilder { self.buf.push(','); } _ => { + debug_validate_fail!("invalid state"); return Err(JsonError::InvalidState); } } @@ -292,7 +298,10 @@ impl JsonBuilder { self.encode_string(val)?; Ok(self) } - _ => Err(JsonError::InvalidState), + _ => { + debug_validate_fail!("invalid state"); + Err(JsonError::InvalidState) + } } } @@ -313,6 +322,7 @@ impl JsonBuilder { self.buf.push(','); } _ => { + debug_validate_fail!("invalid state"); return Err(JsonError::InvalidState); } } @@ -329,6 +339,7 @@ impl JsonBuilder { self.set_state(State::ObjectNth); } _ => { + debug_validate_fail!("invalid state"); return Err(JsonError::InvalidState); } } @@ -352,6 +363,7 @@ impl JsonBuilder { self.buf.push(','); } _ => { + debug_validate_fail!("invalid state"); return Err(JsonError::InvalidState); } } @@ -365,7 +377,10 @@ impl JsonBuilder { match self.current_state() { State::ObjectNth => self.buf.push(','), State::ObjectFirst => self.set_state(State::ObjectNth), - _ => return Err(JsonError::InvalidState), + _ => { + debug_validate_fail!("invalid state"); + return Err(JsonError::InvalidState); + } } self.buf.push('"'); self.buf.push_str(key); @@ -395,6 +410,7 @@ impl JsonBuilder { self.set_state(State::ObjectNth); } _ => { + debug_validate_fail!("invalid state"); return Err(JsonError::InvalidState); } } @@ -414,6 +430,7 @@ impl JsonBuilder { self.set_state(State::ObjectNth); } _ => { + debug_validate_fail!("invalid state"); return Err(JsonError::InvalidState); } } @@ -439,6 +456,7 @@ impl JsonBuilder { self.set_state(State::ObjectNth); } _ => { + debug_validate_fail!("invalid state"); return Err(JsonError::InvalidState); } } @@ -458,6 +476,7 @@ impl JsonBuilder { self.set_state(State::ObjectNth); } _ => { + debug_validate_fail!("invalid state"); return Err(JsonError::InvalidState); } }