Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
parity
Mirrored projects
polkadot
Commits
9d92e7c5
Unverified
Commit
9d92e7c5
authored
Jun 17, 2021
by
Shawn Tabrizi
Committed by
GitHub
Jun 17, 2021
Browse files
Add XCM Decode Limit (#3273)
* Add XCM Decode Limit of 256 * use `decode_all_*` * Update xcm/src/double_encoded.rs
parent
ce4d4a9a
Pipeline
#142843
passed with stages
in 37 minutes and 56 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
xcm/src/double_encoded.rs
View file @
9d92e7c5
...
...
@@ -15,7 +15,10 @@
// along with Polkadot. If not, see <http://www.gnu.org/licenses/>.
use
alloc
::
vec
::
Vec
;
use
parity_scale_codec
::{
Encode
,
Decode
};
use
parity_scale_codec
::{
Encode
,
Decode
,
DecodeLimit
};
/// Maximum nesting level for XCM decoding.
pub
const
MAX_XCM_DECODE_DEPTH
:
u32
=
8
;
/// Wrapper around the encoded and decoded versions of a value.
/// Caches the decoded value once computed.
...
...
@@ -69,14 +72,22 @@ impl<T: Decode> DoubleEncoded<T> {
/// Returns a reference to the value in case of success and `Err(())` in case the decoding fails.
pub
fn
ensure_decoded
(
&
mut
self
)
->
Result
<&
T
,
()
>
{
if
self
.decoded
.is_none
()
{
self
.decoded
=
T
::
decode
(
&
mut
&
self
.encoded
[
..
])
.ok
();
self
.decoded
=
T
::
decode_all_with_depth_limit
(
MAX_XCM_DECODE_DEPTH
,
&
mut
&
self
.encoded
[
..
],
)
.ok
();
}
self
.decoded
.as_ref
()
.ok_or
(())
}
/// Move the decoded value out or (if not present) decode `encoded`.
pub
fn
take_decoded
(
&
mut
self
)
->
Result
<
T
,
()
>
{
self
.decoded
.take
()
.or_else
(||
T
::
decode
(
&
mut
&
self
.encoded
[
..
])
.ok
())
.ok_or
(())
self
.decoded
.take
()
.or_else
(||
{
T
::
decode_all_with_depth_limit
(
MAX_XCM_DECODE_DEPTH
,
&
mut
&
self
.encoded
[
..
],
)
.ok
()
})
.ok_or
(())
}
/// Provides an API similar to `TryInto` that allows fallible conversion to the inner value type.
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment