Several panics found by fuzzing
Hi,

I am fuzzing the monero-rs with afl.rs, and I have found some panics. I list the code snippets below. The version I test is 0.19.0.

These several cases trigger 'index out of bounds' panics with slightly different panic information.
```rust
    let data=[128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 101, 50, 55, 52, 97, 57, 99, 0, 255, 49, 100, 54, 50, 49, 49, 99, 102, 54, 128, 128, 128, 128, 128, 128, 128, 101, 50, 55, 52, 97, 57, 99, 0, 255, 49, 100, 54, 50, 49, 49, 99, 102, 54, 56, 49, 98, 53, 128];
    let _local0_param0_helper1 = &mut (&data[..]);
    let _local0: std::result::Result::<monero::util::address::Address, monero::consensus::encode::Error> = <monero::util::address::Address as monero::consensus::encode::Decodable>::consensus_decode(_local0_param0_helper1);
```
```rust
    let data=[73, 19, 48, 48, 0, 1, 200, 171, 115, 115, 115, 115, 115, 179, 200, 98, 98, 98, 50, 50, 55, 101, 55, 51, 49, 51, 99, 99, 50, 101, 255, 115, 115, 127, 115, 115, 115, 115, 107, 122, 112, 120, 112, 252, 119, 111, 51, 99, 99, 50, 101, 255, 233, 237, 238, 207, 226, 226, 226, 226, 226, 226, 238, 246, 247, 244, 238, 238, 206, 50, 78, 51, 57, 0, 250, 1];
    let _local0_param0_helper1 = &mut (&data[..]);
    let _local0: std::result::Result::<monero::util::address::Address, monero::consensus::encode::Error> = <monero::util::address::Address as monero::consensus::encode::Decodable>::consensus_decode(_local0_param0_helper1);
```
```rust
    let data=[52, 54, 161, 56, 99, 52, 55, 33, 96, 239, 48, 50, 143, 52, 99, 57, 100, 50, 51, 56, 100, 54, 161, 56, 99, 52, 55, 33, 96, 239, 48, 50, 143, 52, 99, 57, 100, 50, 51, 56, 100, 48, 38, 50, 97, 49, 48, 38, 50, 97, 49, 48, 38, 50, 97, 49, 97, 49, 52];
    let _local0_param0_helper1 = &mut (&data[..]);
    let _local0: std::result::Result::<monero::util::address::Address, monero::consensus::encode::Error> = <monero::util::address::Address as monero::consensus::encode::Decodable>::consensus_decode(_local0_param0_helper1);
```
```rust
    let data=[54];
    let _local0 = monero::util::address::Address::from_bytes(&data);
```

```
thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0', /home/jjf/Fuzzing-Target-Generator/experiments/monero-rs/src/util/address.rs:237:40
stack backtrace:
   0: rust_begin_unwind
   1: core::panicking::panic_fmt
   2: core::panicking::panic_bounds_check
   3: monero::util::address::Address::from_bytes
             at ./src/util/address.rs:237:40
   4: <monero::util::address::Address as monero::consensus::encode::Decodable>::consensus_decode
             at ./src/util/address.rs:344:12
   5: replay_monero47::test_function47
             at ./fuzz_target/build/replay_monero47/src/main.rs:25:108
   6: replay_monero47::main
             at ./fuzz_target/build/replay_monero47/src/main.rs:60:5
   7: core::ops::function::FnOnce::call_once
             at /home/jjf/Fuzzing-Target-Generator/library/core/src/ops/function.rs:251:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
```
It seems this API should not crash even it receive an invalid input. As the return of this API is a Result.

This case trigger a crash of memory allocation.
```rust
    let data=[101, 55, 102, 55, 102, 55, 52, 101, 100, 53, 54, 56, 51, 49, 54, 99, 98, 102, 48, 48, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 42, 0, 1, 255, 140, 216, 216, 216, 216, 216, 216, 216, 156, 156, 156, 156, 156, 156, 157, 156, 156, 156, 156, 161, 156, 156, 156, 156, 156, 255, 1, 0, 0, 3, 98, 52, 99, 51, 101, 50, 57, 100, 101, 0, 64, 57, 255, 255, 255, 127, 100, 100, 49, 49, 41, 255, 0, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 101, 51, 50, 97, 48, 48, 2, 2, 2, 2, 100, 49, 2, 2, 2];
    let _local0_param0_helper1 = &mut (&data[..]);
    let _local0: std::result::Result::<monero::blockdata::block::Block, monero::consensus::encode::Error> = <monero::blockdata::block::Block as monero::consensus::encode::Decodable>::consensus_decode(_local0_param0_helper1);
```
The program shows an information and crash.
```
memory allocation of 570483160128 bytes failed
```

These cases panicked at 'attempt to subtract with overflow'
```rust
    let data=[98, 52, 99, 51, 101, 50, 57, 100, 101, 255, 64, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 2, 2, 2, 2, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 236, 1, 2, 3, 2, 243, 255, 0, 0, 0, 25, 0, 4, 0, 53, 97, 55, 98, 128, 0, 2, 2, 2, 2, 2, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 232, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 21, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 73, 36, 146, 73, 36, 146, 74, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 250, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 128, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 255, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 50, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 64, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 100, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 98, 52, 99, 51, 101, 50, 57, 100, 101, 0, 64, 49, 2, 2, 2, 2, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0];
    let _local0_param0_helper1 = &mut (&data[..]);
    let _local0: std::result::Result::<monero::blockdata::block::Block, monero::consensus::encode::Error> = <monero::blockdata::block::Block as monero::consensus::encode::Decodable>::consensus_decode(_local0_param0_helper1);
```
```rust
    let data=[216, 216, 216, 216, 216, 216, 20, 1, 2, 2, 231, 67, 0, 1, 1, 3, 152, 70, 2, 0, 0, 0, 2, 2, 4, 0, 49, 3, 250, 4, 251, 250, 237, 100, 97, 97, 100, 101, 97, 97, 102, 98, 102, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 73, 36, 146, 73, 36, 146, 73, 1, 217, 1, 255, 0, 128, 2, 2, 2, 2, 2, 60, 60, 60, 60, 2, 3, 2, 16, 2, 2, 2, 2, 2, 2, 5, 2, 2, 218, 1, 179, 2, 2, 2, 2, 2, 2, 60, 2, 2, 2, 2, 60, 2, 2, 0, 2, 6, 12, 2, 44, 1, 1, 255, 184, 65, 0, 0, 6, 227, 75, 64, 28, 133, 28, 151, 11, 231, 70, 1, 1, 25, 48, 28, 231, 11, 11, 11, 11, 11, 0, 32, 135, 52, 0, 248, 50, 2, 1, 192, 47, 2, 16, 0, 1, 255, 184, 65, 0, 0, 6, 167, 167, 167, 167, 167, 167, 177, 167, 167, 167, 167, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 236, 1, 2, 2, 2, 2, 2, 2, 2, 37, 2, 2, 1, 231, 1, 29, 1, 0, 97, 134, 24, 97, 134, 24, 97, 29, 59, 29, 154, 1, 29, 29, 29, 29, 29, 0, 1, 255, 184, 65, 0, 0, 6, 167, 167, 167, 167, 167, 167, 177, 167, 167, 167, 167, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 236, 1, 2, 2, 2, 2, 2, 2, 2, 37, 2, 2, 1, 231, 1, 29, 1, 29, 29, 29, 29, 169, 169, 169, 1, 127, 255, 2, 2, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 0, 0, 11, 67, 1, 1, 1, 255, 0, 128, 2, 2, 0, 0, 255, 255, 11, 0, 1, 255, 231, 69, 0, 1, 1, 4, 1, 1, 67, 67, 0, 255, 2, 67, 1, 1, 1, 255, 0, 128, 2, 2, 0, 0, 255, 255, 11, 0, 1, 255, 1, 25, 232, 78, 29, 29, 255, 231, 190, 1, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 147, 0, 29, 29, 29, 29, 29];
    let _local0_param0_helper1 = &mut (&data[..]);
    let _local0: std::result::Result::<monero::blockdata::transaction::Transaction, monero::consensus::encode::Error> = <monero::blockdata::transaction::Transaction as monero::consensus::encode::Decodable>::consensus_decode(_local0_param0_helper1);
```

Panic information:
```
thread 'main' panicked at 'attempt to subtract with overflow', /home/jjf/Fuzzing-Target-Generator/experiments/monero-rs/src/blockdata/transaction.rs:1059:72
stack backtrace:
   0: rust_begin_unwind
   1: core::panicking::panic_fmt
   2: core::panicking::panic
   3: <monero::blockdata::transaction::Transaction as monero::consensus::encode::Decodable>::consensus_decode
             at ./src/blockdata/transaction.rs:1059:72
   4: <monero::blockdata::block::Block as monero::consensus::encode::Decodable>::consensus_decode
             at ./src/internal_macros.rs:41:32
   5: replay_monero53::test_function53
             at ./fuzz_target/build/replay_monero53/src/main.rs:26:109
   6: replay_monero53::main
             at ./fuzz_target/build/replay_monero53/src/main.rs:61:5
   7: core::ops::function::FnOnce::call_once
             at /home/jjf/Fuzzing-Target-Generator/library/core/src/ops/function.rs:251:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
```

