mirror of
https://github.com/aljazceru/cdk.git
synced 2026-02-05 05:06:14 +01:00
Merge pull request #915 from BitcreditProtocol/peanut/transactionid_panic
TransactionId::from_hex check bytes len before copy_from_slice
This commit is contained in:
@@ -310,6 +310,9 @@ impl TransactionId {
|
||||
/// From hex string
|
||||
pub fn from_hex(value: &str) -> Result<Self, Error> {
|
||||
let bytes = hex::decode(value)?;
|
||||
if bytes.len() != 32 {
|
||||
return Err(Error::InvalidTransactionId);
|
||||
}
|
||||
let mut array = [0u8; 32];
|
||||
array.copy_from_slice(&bytes);
|
||||
Ok(Self(array))
|
||||
@@ -357,3 +360,29 @@ impl TryFrom<Proofs> for TransactionId {
|
||||
Self::from_proofs(proofs)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_transaction_id_from_hex() {
|
||||
let hex_str = "a1b2c3d4e5f60718293a0b1c2d3e4f506172839a0b1c2d3e4f506172839a0b1c";
|
||||
let transaction_id = TransactionId::from_hex(hex_str).unwrap();
|
||||
assert_eq!(transaction_id.to_string(), hex_str);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_transaction_id_from_hex_empty_string() {
|
||||
let hex_str = "";
|
||||
let res = TransactionId::from_hex(hex_str);
|
||||
assert!(matches!(res, Err(Error::InvalidTransactionId)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_transaction_id_from_hex_longer_string() {
|
||||
let hex_str = "a1b2c3d4e5f60718293a0b1c2d3e4f506172839a0b1c2d3e4f506172839a0b1ca1b2";
|
||||
let res = TransactionId::from_hex(hex_str);
|
||||
assert!(matches!(res, Err(Error::InvalidTransactionId)));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user