Skip to content

Commit

Permalink
fix: prevent serde error from crashing service (#1097)
Browse files Browse the repository at this point in the history
* fix: prevent serde error from crashing service

* don't panic

---------

Co-authored-by: Rashad Alston <rashad@Rashads-Air.lan>
  • Loading branch information
ra0x3 and Rashad Alston authored Jul 13, 2023
1 parent 2474f8e commit c7159f1
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 9 deletions.
6 changes: 3 additions & 3 deletions packages/fuel-indexer-macros/src/decoder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -673,14 +673,14 @@ impl From<ObjectDecoder> for TokenStream {

impl From<#ident> for Json {
fn from(value: #ident) -> Self {
let s = serde_json::to_string(&value).expect("Serde error.");
let s = serde_json::to_string(&value).expect("Failed to serialize Entity.");
Self(s)
}
}

impl From<Json> for #ident {
fn from(value: Json) -> Self {
let s: #ident = serde_json::from_str(&value.0).expect("Serde error.");
let s: #ident = serde_json::from_str(&value.0).expect("Failed to deserialize Entity.");
s
}
}
Expand Down Expand Up @@ -716,7 +716,7 @@ impl From<ObjectDecoder> for TokenStream {
Some(d) => {
match d.lock().await.get_object(Self::TYPE_ID, id).await {
Some(bytes) => {
let columns: Vec<FtColumn> = bincode::deserialize(&bytes).expect("Serde error.");
let columns: Vec<FtColumn> = bincode::deserialize(&bytes).expect("Failed to deserialize Vec<FtColumn> for Entity::load.");
let obj = Self::from_row(columns);
Some(obj)
},
Expand Down
38 changes: 33 additions & 5 deletions packages/fuel-indexer-types/src/fuel.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,11 +70,20 @@ pub struct CommonMetadata {

impl From<CommonMetadata> for Json {
fn from(metadata: CommonMetadata) -> Self {
let s = serde_json::to_string(&metadata).expect("Serde error.");
let s = serde_json::to_string(&metadata)
.expect("Failed to serialize CommonMetadata.");
Self(s)
}
}

impl From<Json> for CommonMetadata {
fn from(json: Json) -> Self {
let metadata: CommonMetadata =
serde_json::from_str(&json.0).expect("Failed to deserialize CommonMetadata.");
metadata
}
}

#[derive(Clone, Debug, Serialize, Deserialize, Default)]
pub struct Script {
pub gas_price: Word,
Expand All @@ -97,11 +106,20 @@ pub struct ScriptMetadata {

impl From<ScriptMetadata> for Json {
fn from(metadata: ScriptMetadata) -> Self {
let s = serde_json::to_string(&metadata).expect("Serde error.");
let s = serde_json::to_string(&metadata)
.expect("Failed to deserialize MintMetadata.");
Self(s)
}
}

impl From<Json> for ScriptMetadata {
fn from(json: Json) -> Self {
let metadata: ScriptMetadata =
serde_json::from_str(&json.0).expect("Failed to deserialize ScriptMetadata.");
metadata
}
}

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct Mint {
pub tx_pointer: TxPointer,
Expand All @@ -118,11 +136,20 @@ pub struct MintMetadata {

impl From<MintMetadata> for Json {
fn from(metadata: MintMetadata) -> Self {
let s = serde_json::to_string(&metadata).expect("Serde error.");
let s =
serde_json::to_string(&metadata).expect("Failed to serialize MintMetadata.");
Self(s)
}
}

impl From<Json> for MintMetadata {
fn from(json: Json) -> Self {
let metadata: MintMetadata =
serde_json::from_str(&json.0).expect("Failed to deserialize MintMetadata.");
metadata
}
}

#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct TransactionData {
pub transaction: Transaction,
Expand Down Expand Up @@ -592,14 +619,15 @@ pub struct ProgramState {

impl From<ProgramState> for Json {
fn from(state: ProgramState) -> Self {
let s = serde_json::to_string(&state).expect("Serde error.");
let s = serde_json::to_string(&state).expect("Failed to serialize ProgramState.");
Self(s)
}
}

impl From<Json> for ProgramState {
fn from(json: Json) -> Self {
let state: ProgramState = serde_json::from_str(&json.0).expect("Serde error.");
let state: ProgramState =
serde_json::from_str(&json.0).expect("Failed to deserialize ProgramState.");
state
}
}
11 changes: 10 additions & 1 deletion packages/fuel-indexer/src/ffi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,16 @@ fn put_object(env: &IndexEnv, type_id: i64, ptr: u32, len: u32) {
bytes.extend_from_slice(&mem.data_unchecked()[range]);
}

let columns: Vec<FtColumn> = bincode::deserialize(&bytes).expect("Serde error.");
let columns: Vec<FtColumn> = match bincode::deserialize(&bytes) {
Ok(columns) => columns,
Err(e) => {
error!(
"Failed to deserialize Vec<FtColumn> for put_object: {:?}",
e
);
return;
}
};

let rt = tokio::runtime::Handle::current();
rt.block_on(async {
Expand Down

0 comments on commit c7159f1

Please sign in to comment.