Skip to content

Commit 7f86352

Browse files
committed
fix: metadata key validation for cotnract analysis
1 parent f27c84f commit 7f86352

File tree

1 file changed

+36
-30
lines changed

1 file changed

+36
-30
lines changed

stackslib/src/net/api/getclaritymetadata.rs

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -98,36 +98,6 @@ impl HttpRequest for RPCGetClarityMetadataRequestHandler {
9898

9999
let contract_identifier = request::get_contract_address(captures, "address", "contract")?;
100100

101-
// Validate that the metadata key is well-formed. It must be of data type:
102-
// DataMapMeta (5) | VariableMeta (6) | FungibleTokenMeta (7) | NonFungibleTokenMeta (8)
103-
// or Contract (9) followed by a valid contract metadata name
104-
match captures
105-
.name("data_type")
106-
.and_then(|data_type| StoreType::try_from(data_type.as_str()).ok())
107-
{
108-
Some(data_type) => match data_type {
109-
StoreType::DataMapMeta
110-
| StoreType::VariableMeta
111-
| StoreType::FungibleTokenMeta
112-
| StoreType::NonFungibleTokenMeta => {}
113-
StoreType::Contract => {
114-
if captures
115-
.name("var_name")
116-
.and_then(|var_name| ContractDataVarName::try_from(var_name.as_str()).ok())
117-
.is_none()
118-
{
119-
return Err(Error::DecodeError("Invalid metadata var name".to_string()));
120-
}
121-
}
122-
_ => {
123-
return Err(Error::DecodeError("Invalid metadata type".to_string()));
124-
}
125-
},
126-
None => {
127-
return Err(Error::DecodeError("Invalid metadata type".to_string()));
128-
}
129-
}
130-
131101
let metadata_key = match captures.name("clarity_metadata_key") {
132102
Some(key_str) => key_str.as_str().to_string(),
133103
None => {
@@ -137,6 +107,42 @@ impl HttpRequest for RPCGetClarityMetadataRequestHandler {
137107
}
138108
};
139109

110+
if metadata_key != "analysis" {
111+
// Validate that the metadata key is well-formed. It must be of data type:
112+
// DataMapMeta (5) | VariableMeta (6) | FungibleTokenMeta (7) | NonFungibleTokenMeta (8)
113+
// or Contract (9) followed by a valid contract metadata name
114+
match captures
115+
.name("data_type")
116+
.and_then(|data_type| StoreType::try_from(data_type.as_str()).ok())
117+
{
118+
Some(data_type) => match data_type {
119+
StoreType::DataMapMeta
120+
| StoreType::VariableMeta
121+
| StoreType::FungibleTokenMeta
122+
| StoreType::NonFungibleTokenMeta => {}
123+
StoreType::Contract => {
124+
if captures
125+
.name("var_name")
126+
.and_then(|var_name| {
127+
ContractDataVarName::try_from(var_name.as_str()).ok()
128+
})
129+
.is_none()
130+
{
131+
return Err(Error::DecodeError(
132+
"Invalid metadata var name".to_string(),
133+
));
134+
}
135+
}
136+
_ => {
137+
return Err(Error::DecodeError("Invalid metadata type".to_string()));
138+
}
139+
},
140+
None => {
141+
return Err(Error::DecodeError("Invalid metadata type".to_string()));
142+
}
143+
}
144+
}
145+
140146
self.contract_identifier = Some(contract_identifier);
141147
self.clarity_metadata_key = Some(metadata_key);
142148

0 commit comments

Comments
 (0)