Skip to content

Commit 5f509a0

Browse files
committed
fix: guard websocket callbacks against drop
1 parent c3a5921 commit 5f509a0

File tree

2 files changed

+25
-30
lines changed

2 files changed

+25
-30
lines changed

rust/src/contract_interface/encoding.rs

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
//! Helper types for interaction between wasm and host boundaries.
2-
use std::{collections::{HashMap, HashSet}, marker::PhantomData};
2+
use std::{
3+
collections::{HashMap, HashSet},
4+
marker::PhantomData,
5+
};
36

47
use serde::{de::DeserializeOwned, Serialize};
58

6-
use crate::parameters::Parameters;
79
use super::*;
10+
use crate::parameters::Parameters;
811

912
pub enum MergeResult {
1013
Success,
@@ -78,8 +81,7 @@ impl RelatedContractsContainer {
7881
pub fn get<C: TypedContract>(
7982
&self,
8083
params: &C::Parameters,
81-
) -> Result<Related<C>, <<C as EncodingAdapter>::SelfEncoder as Encoder<C>>::Error>
82-
{
84+
) -> Result<Related<C>, <<C as EncodingAdapter>::SelfEncoder as Encoder<C>>::Error> {
8385
let id = <C as TypedContract>::instance_id(params);
8486
if let Some(res) = self.contracts.get(&id) {
8587
match <<C as EncodingAdapter>::SelfEncoder>::deserialize(res.as_ref()) {
@@ -335,12 +337,9 @@ where
335337
<T as EncodingAdapter>::Parameters,
336338
>>::Error,
337339
>,
338-
ContractError:
339-
From<
340-
<<T as EncodingAdapter>::SummaryEncoder as Encoder<
341-
<T as EncodingAdapter>::Summary,
342-
>>::Error,
343-
>,
340+
ContractError: From<
341+
<<T as EncodingAdapter>::SummaryEncoder as Encoder<<T as EncodingAdapter>::Summary>>::Error,
342+
>,
344343
{
345344
let typed_params =
346345
<<T as EncodingAdapter>::ParametersEncoder>::deserialize(parameters.as_ref())?;
@@ -363,21 +362,17 @@ where
363362
<T as EncodingAdapter>::Parameters,
364363
>>::Error,
365364
>,
366-
ContractError:
367-
From<
368-
<<T as EncodingAdapter>::SummaryEncoder as Encoder<
369-
<T as EncodingAdapter>::Summary,
370-
>>::Error,
371-
>,
365+
ContractError: From<
366+
<<T as EncodingAdapter>::SummaryEncoder as Encoder<<T as EncodingAdapter>::Summary>>::Error,
367+
>,
372368
ContractError: From<
373369
<<T as EncodingAdapter>::DeltaEncoder as Encoder<<T as EncodingAdapter>::Delta>>::Error,
374370
>,
375371
{
376372
let typed_params =
377373
<<T as EncodingAdapter>::ParametersEncoder>::deserialize(parameters.as_ref())?;
378374
let typed_state = <<T as EncodingAdapter>::SelfEncoder>::deserialize(state.as_ref())?;
379-
let typed_summary =
380-
<<T as EncodingAdapter>::SummaryEncoder>::deserialize(summary.as_ref())?;
375+
let typed_summary = <<T as EncodingAdapter>::SummaryEncoder>::deserialize(summary.as_ref())?;
381376
let summary = typed_state.delta(typed_params, typed_summary)?;
382377
let encoded = <<T as EncodingAdapter>::DeltaEncoder>::serialize(&summary)?;
383378
Ok(encoded.into())

rust/src/contract_interface/mod.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,28 @@
66
77
pub(crate) const CONTRACT_KEY_SIZE: usize = 32;
88

9-
mod error;
10-
mod state;
11-
mod key;
129
mod code;
13-
mod update;
1410
mod contract;
15-
mod wrapped;
11+
pub mod encoding;
12+
mod error;
13+
mod key;
14+
mod state;
1615
mod trait_def;
16+
mod update;
1717
pub(crate) mod wasm_interface;
18-
pub mod encoding;
18+
mod wrapped;
1919

2020
#[cfg(all(test, any(unix, windows)))]
2121
mod tests;
2222

2323
// Re-export all public types
24+
pub use code::ContractCode;
25+
pub use contract::Contract;
2426
pub use error::ContractError;
25-
pub use state::{State, StateDelta, StateSummary};
2627
pub use key::{ContractInstanceId, ContractKey};
27-
pub use code::ContractCode;
28+
pub use state::{State, StateDelta, StateSummary};
29+
pub use trait_def::ContractInterface;
2830
pub use update::{
29-
UpdateData, UpdateModification, RelatedContracts, RelatedContract, RelatedMode, ValidateResult,
31+
RelatedContract, RelatedContracts, RelatedMode, UpdateData, UpdateModification, ValidateResult,
3032
};
31-
pub use contract::Contract;
32-
pub use wrapped::{WrappedState, WrappedContract};
33-
pub use trait_def::ContractInterface;
33+
pub use wrapped::{WrappedContract, WrappedState};

0 commit comments

Comments
 (0)