@@ -383,7 +383,7 @@ fn encode_value(typ: &MemberType, value: &Value) -> Result<Vec<u8>, String> {
383383fn get_value (
384384 what : & pb:: EthTypedMessageValueResponse ,
385385 msg : & Eip712Message ,
386- ) -> Result < Vec < u8 > , String > {
386+ ) -> Result < ( Vec < u8 > , DataType ) , String > {
387387 enum Either < ' a > {
388388 HashMap ( & ' a HashMap < String , Value > ) ,
389389 JsonValue ( Value ) ,
@@ -446,8 +446,10 @@ fn get_value(
446446 _ => return Err ( "path element does not point to struct or array" . into ( ) ) ,
447447 }
448448 }
449+ let data_type =
450+ DataType :: try_from ( typ. r#type ) . map_err ( |_| format ! ( "invalid data type: {}" , typ. r#type) ) ?;
449451 if let Either :: JsonValue ( value) = & value {
450- encode_value ( & typ, value)
452+ encode_value ( & typ, value) . map ( |v| ( v , data_type ) )
451453 } else {
452454 Err ( "path points to struct or array; value expected" . to_string ( ) )
453455 }
@@ -700,7 +702,13 @@ impl<R: Runtime> PairedBitBox<R> {
700702 ) )
701703 . await ?;
702704 while let pb:: eth_response:: Response :: TypedMsgValue ( typed_msg_value) = & response {
703- let value = get_value ( typed_msg_value, & msg) . map_err ( Error :: EthTypedMessage ) ?;
705+ let ( value, data_type) =
706+ get_value ( typed_msg_value, & msg) . map_err ( Error :: EthTypedMessage ) ?;
707+ if data_type == DataType :: String && value. len ( ) > STREAMING_THRESHOLD {
708+ return Err ( Error :: EthTypedMessage (
709+ "string value exceeds maximum size" . into ( ) ,
710+ ) ) ;
711+ }
704712 let use_streaming = value. len ( ) > STREAMING_THRESHOLD ;
705713 response = self
706714 . query_proto_eth ( pb:: eth_request:: Request :: TypedMsgValue (
@@ -1231,7 +1239,7 @@ mod tests {
12311239 . is_err( ) ) ;
12321240
12331241 // domain.name
1234- let value = get_value (
1242+ let ( value, _ ) = get_value (
12351243 & pb:: EthTypedMessageValueResponse {
12361244 root_object : RootObject :: Domain as _ ,
12371245 path : vec ! [ 0 ] ,
@@ -1242,7 +1250,7 @@ mod tests {
12421250 assert_eq ! ( value, b"Ether Mail" . to_vec( ) ) ;
12431251
12441252 // domain.version
1245- let value = get_value (
1253+ let ( value, _ ) = get_value (
12461254 & pb:: EthTypedMessageValueResponse {
12471255 root_object : RootObject :: Domain as _ ,
12481256 path : vec ! [ 1 ] ,
@@ -1253,7 +1261,7 @@ mod tests {
12531261 assert_eq ! ( value, b"1" . to_vec( ) ) ;
12541262
12551263 // domain.chainId
1256- let value = get_value (
1264+ let ( value, _ ) = get_value (
12571265 & pb:: EthTypedMessageValueResponse {
12581266 root_object : RootObject :: Domain as _ ,
12591267 path : vec ! [ 2 ] ,
@@ -1264,7 +1272,7 @@ mod tests {
12641272 assert_eq ! ( value, b"\x01 " . to_vec( ) ) ;
12651273
12661274 // domain.verifyingContract
1267- let value = get_value (
1275+ let ( value, _ ) = get_value (
12681276 & pb:: EthTypedMessageValueResponse {
12691277 root_object : RootObject :: Domain as _ ,
12701278 path : vec ! [ 3 ] ,
@@ -1289,7 +1297,7 @@ mod tests {
12891297 // MESSAGE
12901298
12911299 // message.from.name
1292- let value = get_value (
1300+ let ( value, _ ) = get_value (
12931301 & pb:: EthTypedMessageValueResponse {
12941302 root_object : RootObject :: Message as _ ,
12951303 path : vec ! [ 0 , 0 ] ,
@@ -1300,7 +1308,7 @@ mod tests {
13001308 assert_eq ! ( value, b"Cow" . to_vec( ) ) ;
13011309
13021310 // message.from.wallet
1303- let value = get_value (
1311+ let ( value, _ ) = get_value (
13041312 & pb:: EthTypedMessageValueResponse {
13051313 root_object : RootObject :: Message as _ ,
13061314 path : vec ! [ 0 , 1 ] ,
@@ -1314,7 +1322,7 @@ mod tests {
13141322 ) ;
13151323
13161324 // message.to.wallet
1317- let value = get_value (
1325+ let ( value, _ ) = get_value (
13181326 & pb:: EthTypedMessageValueResponse {
13191327 root_object : RootObject :: Message as _ ,
13201328 path : vec ! [ 1 , 1 ] ,
@@ -1328,7 +1336,7 @@ mod tests {
13281336 ) ;
13291337
13301338 // message.attachments.0.contents
1331- let value = get_value (
1339+ let ( value, _ ) = get_value (
13321340 & pb:: EthTypedMessageValueResponse {
13331341 root_object : RootObject :: Message as _ ,
13341342 path : vec ! [ 3 , 0 , 0 ] ,
@@ -1339,7 +1347,7 @@ mod tests {
13391347 assert_eq ! ( value, b"attachment1" . to_vec( ) ) ;
13401348
13411349 // message.attachments.1.contents
1342- let value = get_value (
1350+ let ( value, _ ) = get_value (
13431351 & pb:: EthTypedMessageValueResponse {
13441352 root_object : RootObject :: Message as _ ,
13451353 path : vec ! [ 3 , 1 , 0 ] ,
0 commit comments