owengage / fastnbt

Fast serde serializer and deserializer for Minecraft's NBT and Anvil formats
MIT License
186 stars 34 forks source link

Panic in fastanvil::decompress_chunk if the chunk data is corrupted #27

Closed Badel2 closed 3 years ago

Badel2 commented 3 years ago

I have been trying to read freshly generated minecraft 1.17 worlds, and sometimes I get this error:

thread 'main' panicked at 'called Result::unwrap() on an Err value: Custom { kind: InvalidInput, error: "corrupt deflate stream" }'

It's this unwrap:

https://github.com/owengage/fastnbt/blob/e9ff8035ac8863c242ec8de08da5b48e11367caa/fastanvil/src/lib.rs#L221

I don't know yet if the cause is related to the 1.17 version or it's just that my worlds are all corrupted, but I would like to be able to handle this error in my application by printing a warning and continuing with the next chunk.

Badel2 commented 3 years ago

I'm currently using this as a workaround:

    decoder.read_to_end(&mut outbuf).unwrap_or_else(|_e| {
        outbuf.clear();
        // In case of error, report 0 bytes read
        0
    });
owengage commented 3 years ago

Hey, this is a pretty old part of the codebase that I really need to go revisit and clean up.

If you're using the RegionBuffer object directly, then load_chunk on master should now return an fastnbt::Error::IO error. Hopefully that's enough of a workaround for you until I get around to cleaning that up more thoroughly.

Master also has a few fixes for 1.17's reverted height changes that you might want too.

owengage commented 3 years ago

Also, if it's possible, I'd be interested in looking at the region file with the corruption, I'd like to start building a corpus of difficult to handle files for testing. No worries if you can't!

Badel2 commented 3 years ago

Thanks! Will try the master branch later. As for the corruption, I discovered that it was simply because I was running out of disk space. But I collected the input data to use in a test, here it is:

let input_data = vec![0, 0, 24, 0, 2, 120, 156, 237, 93, 91, 108, 27, 87, 122, 30, 74, 148, 77, 201, 146, 77, 202, 178, 192, 52, 121, 48, 71, 209, 173, 64, 0, 93, 188, 222, 117, 177, 185, 112, 68, 201, 182, 162, 218, 150, 108, 38, 89, 247, 162, 80, 20, 105, 179, 166, 72, 133, 164, 34, 199, 8, 130, 173, 66, 56, 180, 65, 44, 90, 64, 40, 228, 34, 232, 174, 47, 202, 110, 211, 164, 55, 32, 47, 27, 20, 136, 157, 64, 201, 67, 187, 112, 251, 144, 167, 149, 225, 180, 1, 154, 23, 211, 78, 176, 15, 217, 34, 176, 250, 159, 153, 51, 228, 204, 112, 14, 207, 28, 159, 217, 141, 129, 156, 63, 72, 126, 158, 219, 247, 125, 231, 63, 231, 204, 156, 57, 28, 70, 109, 146, 212, 38, 181, 76, 37, 94, 78, 164, 125, 210, 182, 227, 133, 88, 97, 41, 47, 121, 147, 75, 233, 116, 179, 228, 61, 119, 44, 155, 151, 36, 169, 215, 43, 181, 77, 197, 242, 133, 232, 226, 124, 172, 144, 144, 52, 235, 220, 33, 109, 83, 82, 217, 133, 4, 212, 240, 162, 12, 111, 131, 127, 31, 181, 124, 126, 212, 242, 249, 81, 209, 94, 180, 23, 237, 69, 123, 209, 94, 180, 23, 237, 69, 123, 209, 94, 180, 23, 237, 69, 123, 209, 94, 180, 23, 237, 31, 254, 246, 94, 169, 227, 112, 230, 116, 108, 46, 85, 72, 204, 159, 72, 45, 232, 135, 4, 82, 179, 228, 61, 123, 44, 155, 223, 218, 218, 250, 191, 54, 169, 237, 80, 34, 117, 234, 116, 97, 33, 182, 152, 111, 151, 118, 28, 29, 27, 15, 31, 153, 157, 152, 58, 122, 116, 6, 42, 246, 6, 124, 243, 74, 200, 95, 26, 219, 245, 73, 81, 9, 117, 149, 199, 119, 125, 252, 249, 72, 168, 235, 226, 120, 160, 116, 109, 110, 56, 88, 122, 218, 255, 201, 181, 153, 3, 193, 139, 145, 192, 161, 143, 148, 189, 223, 188, 246, 116, 224, 208, 231, 185, 193, 96, 121, 34, 224, 123, 253, 203, 175, 191, 57, 31, 129, 122, 51, 195, 93, 165, 200, 174, 143, 255, 231, 171, 64, 251, 249, 131, 1, 95, 49, 252, 181, 90, 239, 90, 248, 183, 128, 3, 249, 80, 15, 240, 14, 34, 255, 218, 211, 168, 222, 96, 215, 79, 38, 180, 252, 215, 16, 126, 238, 192, 99, 23, 81, 254, 151, 191, 245, 157, 31, 3, 252, 185, 129, 111, 206, 61, 141, 116, 60, 210, 85, 26, 15, 28, 186, 250, 229, 23, 90, 189, 153, 65, 63, 194, 187, 250, 153, 134, 95, 28, 86, 241, 14, 94, 69, 58, 198, 48, 222, 147, 88, 135, 150, 190, 119, 238, 73, 157, 7, 252, 245, 47, 126, 131, 112, 230, 71, 30, 105, 135, 244, 246, 215, 255, 243, 246, 189, 179, 79, 86, 113, 182, 191, 126, 253, 246, 189, 243, 17, 191, 90, 255, 220, 15, 33, 253, 95, 143, 128, 126, 136, 145, 231, 139, 223, 156, 251, 97, 187, 244, 200, 31, 31, 61, 113, 248, 232, 145, 89, 101, 234, 232, 216, 179, 135, 143, 28, 156, 61, 114, 116, 118, 106, 60, 252, 220, 248, 113, 20, 71, 3, 143, 213, 127, 53, 160, 250, 207, 195, 166, 252, 79, 62, 68, 113, 177, 171, 255, 160, 254, 171, 161, 186, 252, 87, 77, 233, 123, 38, 29, 31, 126, 102, 106, 255, 198, 135, 70, 188, 167, 76, 56, 95, 191, 106, 76, 127, 118, 239, 107, 84, 191, 218, 14, 210, 134, 114, 45, 173, 243, 63, 165, 166, 191, 41, 61, 141, 226, 136, 234, 181, 75, 187, 44, 113, 124, 120, 103, 225, 171, 166, 89, 120, 207, 52, 11, 63, 52, 207, 66, 53, 122, 213, 89, 248, 148, 105, 22, 218, 68, 175, 58, 11, 113, 244, 12, 56, 144, 214, 103, 161, 26, 189, 255, 214, 103, 161, 22, 189, 142, 231, 143, 206, 76, 69, 102, 143, 71, 103, 38, 194, 99, 227, 182, 177, 251, 196, 219, 32, 118, 63, 102, 142, 157, 127, 187, 227, 216, 125, 229, 121, 40, 98, 247, 185, 199, 46, 118, 82, 171, 212, 126, 34, 149, 78, 140, 103, 10, 169, 66, 10, 157, 159, 162, 18, 169, 53, 149, 159, 66, 151, 199, 163, 25, 79, 171, 212, 138, 42, 156, 72, 197, 207, 228, 219, 160, 108, 169, 89, 242, 44, 106, 151, 83, 79, 1, 174, 165, 91, 224, 207, 130, 251, 123, 159, 228, 73, 73, 221, 11, 169, 76, 34, 158, 139, 37, 11, 127, 52, 151, 202, 197, 79, 207, 166, 19, 177, 151, 19, 121, 168, 243, 10, 52, 81, 192, 159, 147, 164, 166, 105, 201, 5, 144, 227, 60, 32, 99, 24, 228, 152, 27, 32, 68, 37, 111, 51, 116, 135, 168, 132, 5, 228, 4, 15, 8, 53, 38, 44, 32, 92, 74, 34, 180, 121, 194, 2, 194, 53, 58, 227, 24, 100, 134, 4, 242, 15, 110, 12, 49, 11, 8, 49, 176, 78, 64, 168, 67, 204, 2, 194, 165, 132, 58, 196, 44, 32, 196, 33, 118, 2, 50, 238, 134, 146, 113, 154, 146, 119, 220, 152, 39, 44, 32, 196, 209, 113, 2, 66, 157, 39, 44, 32, 92, 74, 244, 33, 38, 46, 64, 22, 16, 174, 209, 161, 94, 10, 222, 117, 227, 14, 200, 2, 66, 12, 172, 19, 144, 49, 55, 148, 80, 135, 152, 229, 54, 202, 117, 181, 167, 6, 150, 229, 26, 75, 4, 97, 89, 128, 92, 32, 212, 152, 176, 236, 148, 136, 51, 150, 101, 116, 136, 32, 44, 163, 195, 117, 27, 165, 46, 64, 150, 209, 113, 101, 21, 115, 129, 184, 26, 88, 174, 59, 32, 21, 132, 37, 176, 68, 16, 150, 192, 114, 129, 184, 178, 45, 167, 222, 119, 214, 29, 128, 132, 49, 200, 11, 110, 128, 156, 228, 1, 81, 220, 80, 162, 208, 148, 188, 197, 208, 157, 231, 221, 0, 249, 19, 30, 16, 197, 13, 37, 138, 27, 74, 198, 104, 163, 195, 2, 194, 53, 58, 250, 180, 255, 17, 9, 228, 231, 110, 12, 49, 11, 8, 49, 176, 78, 64, 168, 67, 204, 2, 194, 165, 132, 58, 196, 44, 32, 196, 33, 118, 2, 18, 113, 67, 73, 132, 166, 228, 23, 110, 204, 19, 22, 16, 226, 232, 56, 1, 161, 206, 19, 22, 16, 46, 37, 250, 16, 19, 23, 160, 19, 16, 234, 42, 118, 178, 241, 163, 142, 14, 11, 8, 49, 38, 44, 251, 88, 226, 140, 101, 1, 113, 229, 230, 197, 181, 118, 168, 32, 44, 211, 158, 11, 196, 149, 192, 186, 186, 201, 33, 206, 88, 150, 253, 9, 17, 132, 101, 136, 185, 238, 128, 212, 5, 200, 50, 196, 174, 172, 98, 46, 16, 87, 3, 203, 117, 243, 162, 130, 176, 4, 150, 11, 132, 122, 61, 97, 25, 29, 174, 139, 18, 245, 150, 113, 153, 1, 36, 234, 6, 8, 241, 82, 224, 4, 68, 95, 59, 207, 185, 1, 66, 140, 201, 21, 55, 98, 194, 2, 194, 165, 36, 226, 134, 18, 87, 98, 50, 78, 27, 29, 22, 16, 226, 60, 113, 2, 50, 209, 76, 217, 159, 92, 117, 99, 136, 89, 64, 136, 129, 117, 2, 66, 29, 98, 22, 16, 46, 37, 212, 33, 102, 1, 33, 14, 177, 19, 144, 9, 55, 148, 76, 208, 148, 92, 115, 99, 158, 176, 128, 16, 71, 199, 9, 8, 117, 158, 176, 128, 112, 41, 209, 135, 152, 184, 0, 157, 128, 80, 87, 177, 147, 141, 31, 117, 116, 88, 64, 184, 182, 160, 212, 209, 97, 1, 225, 186, 141, 234, 221, 225, 186, 80, 83, 65, 88, 46, 143, 68, 16, 150, 181, 195, 5, 66, 221, 90, 176, 204, 19, 46, 16, 87, 54, 57, 186, 18, 226, 218, 97, 217, 41, 17, 65, 88, 230, 9, 215, 189, 152, 122, 41, 96, 153, 39, 174, 92, 79, 184, 64, 168, 129, 101, 25, 29, 174, 157, 18, 117, 91, 206, 178, 138, 93, 185, 141, 114, 129, 80, 99, 194, 50, 196, 92, 129, 117, 229, 14, 168, 63, 3, 254, 25, 15, 136, 66, 3, 97, 57, 132, 225, 2, 113, 69, 137, 62, 58, 127, 238, 198, 2, 156, 117, 227, 212, 130, 216, 29, 150, 47, 137, 184, 64, 168, 49, 97, 249, 126, 135, 8, 194, 114, 8, 67, 236, 14, 203, 183, 42, 92, 32, 212, 152, 176, 28, 214, 17, 231, 9, 203, 153, 18, 81, 9, 203, 153, 18, 215, 165, 128, 170, 132, 229, 122, 194, 181, 0, 169, 74, 88, 22, 160, 43, 51, 214, 149, 209, 225, 10, 172, 174, 132, 56, 217, 88, 70, 135, 8, 194, 50, 58, 92, 151, 71, 234, 218, 97, 25, 29, 87, 22, 32, 23, 136, 43, 129, 29, 115, 35, 38, 84, 16, 150, 251, 14, 241, 53, 78, 22, 16, 226, 235, 52, 44, 55, 47, 34, 8, 203, 45, 131, 11, 196, 21, 37, 17, 90, 96, 89, 64, 136, 239, 248, 57, 1, 161, 190, 189, 204, 50, 237, 137, 49, 97, 249, 230, 154, 11, 132, 26, 88, 22, 16, 226, 187, 91, 78, 64, 198, 221, 80, 66, 125, 101, 209, 201, 151, 68, 212, 152, 176, 128, 112, 41, 161, 78, 54, 150, 95, 136, 112, 189, 247, 72, 157, 108, 44, 23, 37, 174, 85, 76, 189, 198, 178, 44, 64, 174, 33, 118, 245, 106, 79, 28, 98, 150, 192, 114, 93, 217, 168, 74, 88, 22, 160, 43, 51, 150, 43, 38, 212, 119, 134, 89, 2, 75, 4, 97, 9, 44, 23, 8, 85, 9, 203, 180, 231, 122, 45, 220, 149, 87, 229, 169, 247, 226, 159, 49, 108, 65, 137, 11, 144, 5, 132, 248, 147, 10, 39, 32, 212, 75, 1, 11, 8, 151, 18, 234, 232, 176, 128, 16, 175, 246, 78, 64, 92, 25, 98, 234, 47, 137, 156, 28, 234, 82, 231, 9, 11, 8, 113, 116, 52, 144, 174, 26, 72, 54, 118, 134, 113, 150, 56, 209, 65, 157, 37, 44, 223, 100, 16, 199, 134, 5, 132, 107, 108, 168, 251, 36, 39, 231, 194, 212, 1, 102, 1, 33, 6, 214, 9, 8, 245, 38, 202, 2, 194, 181, 252, 194, 52, 37, 44, 147, 158, 171, 59, 84, 16, 150, 11, 1, 113, 158, 176, 116, 199, 149, 201, 198, 5, 66, 189, 19, 179, 12, 177, 43, 23, 71, 34, 8, 75, 76, 184, 148, 80, 183, 56, 78, 126, 140, 68, 189, 235, 176, 128, 16, 47, 5, 255, 232, 198, 211, 14, 11, 8, 151, 18, 234, 3, 45, 11, 8, 151, 18, 234, 227, 1, 11, 8, 113, 178, 57, 1, 209, 191, 252, 38, 78, 182, 127, 114, 99, 136, 89, 64, 136, 129, 117, 2, 66, 29, 98, 22, 16, 46, 37, 212, 33, 102, 1, 33, 14, 177, 19, 144, 9, 55, 148, 76, 208, 148, 176, 172, 98, 46, 37, 174, 252, 128, 156, 122, 27, 101, 233, 14, 215, 218, 161, 46, 64, 150, 238, 184, 50, 58, 92, 147, 141, 10, 194, 242, 43, 116, 174, 95, 92, 83, 149, 176, 92, 99, 185, 182, 91, 212, 205, 48, 253, 145, 137, 122, 133, 189, 194, 255, 212, 69, 135, 160, 170, 184, 202, 175, 130, 14, 65, 85, 113, 141, 95, 5, 29, 130, 170, 98, 157, 95, 197, 223, 185, 241, 204, 199, 2, 66, 188, 227, 57, 1, 161, 78, 115, 22, 16, 226, 170, 253, 169, 27, 49, 97, 1, 33, 198, 196, 9, 8, 117, 136, 89, 64, 184, 148, 80, 175, 169, 44, 32, 92, 163, 67, 189, 247, 178, 204, 88, 226, 100, 99, 25, 98, 46, 16, 87, 166, 61, 245, 97, 154, 101, 237, 112, 13, 177, 43, 74, 168, 207, 193, 44, 74, 136, 32, 44, 74, 136, 63, 4, 102, 1, 33, 190, 20, 193, 50, 58, 92, 74, 168, 47, 138, 56, 1, 209, 87, 49, 241, 117, 47, 39, 32, 17, 26, 8, 203, 16, 19, 99, 194, 2, 66, 124, 63, 138, 101, 21, 255, 169, 27, 32, 68, 37, 44, 147, 141, 168, 132, 101, 158, 112, 117, 199, 21, 37, 212, 151, 54, 89, 148, 112, 129, 80, 223, 114, 100, 233, 14, 215, 16, 59, 156, 39, 141, 246, 142, 212, 147, 1, 58, 4, 245, 92, 192, 57, 4, 241, 103, 71, 116, 136, 131, 252, 42, 14, 242, 171, 56, 196, 15, 113, 152, 191, 35, 58, 4, 199, 160, 78, 210, 84, 252, 212, 241, 160, 82, 182, 17, 78, 32, 40, 59, 86, 39, 131, 202, 161, 226, 32, 191, 138, 67, 252, 42, 14, 209, 84, 56, 159, 157, 148, 103, 60, 39, 243, 130, 3, 130, 58, 47, 156, 119, 196, 133, 169, 69, 217, 90, 58, 81, 225, 194, 181, 211, 133, 65, 117, 97, 141, 112, 116, 68, 87, 225, 194, 85, 139, 235, 253, 47, 125, 79, 122, 148, 4, 194, 242, 134, 17, 23, 8, 85, 9, 203, 27, 70, 92, 32, 84, 37, 44, 111, 231, 113, 129, 80, 149, 208, 207, 14, 245, 231, 133, 35, 15, 14, 49, 78, 131, 160, 159, 29, 70, 104, 29, 161, 67, 140, 211, 32, 232, 103, 135, 212, 88, 208, 33, 168, 177, 160, 31, 63, 82, 7, 213, 249, 155, 60, 68, 21, 206, 79, 182, 57, 230, 5, 85, 133, 243, 65, 229, 24, 17, 170, 10, 231, 7, 194, 46, 12, 42, 199, 136, 80, 175, 24, 206, 7, 149, 227, 122, 65, 85, 225, 252, 235, 10, 142, 197, 78, 85, 225, 124, 94, 112, 64, 80, 59, 226, 124, 106, 17, 33, 156, 111, 21, 56, 32, 14, 243, 67, 76, 86, 33, 90, 37, 223, 241, 68, 188, 144, 202, 102, 208, 31, 8, 145, 2, 30, 201, 243, 163, 45, 169, 93, 218, 161, 164, 179, 241, 51, 232, 207, 56, 163, 191, 43, 226, 121, 78, 42, 134, 124, 138, 191, 24, 122, 248, 189, 236, 43, 106, 233, 224, 132, 191, 40, 123, 32, 255, 70, 192, 167, 72, 101, 181, 252, 47, 161, 220, 31, 9, 20, 123, 164, 213, 80, 240, 198, 80, 25, 234, 197, 33, 191, 44, 75, 197, 158, 160, 210, 9, 237, 74, 161, 129, 73, 140, 3, 245, 123, 164, 98, 216, 183, 226, 47, 134, 33, 223, 143, 240, 61, 222, 58, 94, 53, 31, 202, 3, 202, 49, 67, 254, 170, 94, 174, 248, 34, 184, 190, 134, 27, 26, 88, 217, 139, 188, 138, 27, 242, 20, 99, 62, 101, 111, 73, 65, 229, 145, 189, 37, 181, 94, 81, 229, 145, 125, 27, 129, 98, 12, 116, 249, 180, 126, 32, 157, 69, 69, 42, 133, 7, 34, 123, 141, 248, 125, 254, 149, 128, 55, 44, 173, 169, 58, 46, 35, 220, 27, 35, 94, 192, 13, 133, 86, 118, 7, 67, 210, 90, 223, 16, 212, 15, 131, 14, 255, 100, 160, 220, 211, 84, 92, 247, 109, 248, 139, 215, 129, 103, 72, 121, 113, 77, 110, 14, 66, 59, 121, 53, 228, 241, 41, 3, 147, 170, 254, 254, 1, 173, 63, 97, 127, 209, 95, 130, 184, 132, 253, 202, 143, 213, 126, 160, 180, 2, 253, 7, 190, 114, 28, 234, 7, 65, 31, 210, 21, 220, 64, 241, 41, 199, 125, 208, 47, 217, 163, 170, 42, 198, 60, 94, 37, 168, 12, 151, 123, 164, 210, 132, 127, 2, 225, 173, 65, 220, 247, 150, 32, 142, 16, 143, 33, 232, 95, 57, 238, 47, 199, 131, 215, 155, 130, 215, 135, 139, 1, 159, 44, 173, 221, 240, 71, 134, 202, 208, 110, 44, 56, 49, 84, 236, 243, 148, 123, 134, 166, 252, 107, 161, 230, 224, 70, 235, 202, 139, 69, 240, 215, 125, 147, 211, 197, 158, 166, 213, 203, 173, 55, 118, 7, 175, 3, 207, 240, 138, 127, 237, 134, 199, 23, 246, 21, 67, 93, 63, 247, 248, 100, 255, 69, 208, 239, 241, 29, 134, 180, 47, 236, 45, 201, 48, 238, 16, 215, 114, 79, 16, 210, 135, 165, 146, 236, 71, 60, 85, 125, 72, 63, 244, 167, 105, 245, 10, 202, 87, 154, 189, 40, 223, 167, 160, 242, 149, 206, 213, 183, 64, 135, 127, 42, 30, 4, 188, 141, 97, 52, 117, 164, 181, 235, 128, 139, 250, 29, 14, 110, 12, 173, 109, 128, 254, 0, 210, 223, 236, 189, 62, 188, 242, 98, 105, 12, 116, 250, 87, 134, 113, 92, 70, 189, 125, 208, 255, 161, 41, 84, 238, 11, 15, 175, 196, 124, 151, 61, 65, 208, 23, 66, 252, 97, 149, 199, 123, 1, 205, 6, 95, 88, 211, 227, 59, 172, 250, 213, 11, 147, 56, 173, 232, 190, 105, 21, 251, 146, 33, 95, 94, 93, 247, 180, 206, 13, 78, 206, 172, 66, 249, 91, 131, 17, 200, 111, 14, 66, 126, 239, 133, 57, 143, 239, 217, 23, 54, 134, 125, 19, 56, 190, 10, 214, 255, 44, 210, 167, 233, 7, 125, 195, 193, 13, 79, 187, 170, 127, 3, 197, 177, 12, 83, 208, 163, 150, 215, 120, 53, 31, 188, 97, 76, 175, 109, 12, 173, 123, 124, 227, 241, 182, 203, 72, 215, 219, 70, 93, 144, 175, 4, 144, 30, 79, 215, 186, 65, 31, 138, 239, 58, 210, 119, 69, 237, 71, 239, 187, 103, 64, 223, 201, 79, 255, 117, 117, 189, 229, 221, 57, 3, 79, 235, 25, 208, 223, 249, 233, 123, 239, 198, 61, 79, 156, 65, 250, 33, 63, 222, 233, 239, 81, 249, 65, 255, 19, 115, 158, 224, 13, 27, 125, 190, 27, 214, 120, 121, 90, 203, 241, 182, 105, 159, 178, 109, 104, 221, 152, 63, 142, 245, 189, 13, 250, 6, 39, 175, 172, 174, 131, 158, 193, 201, 105, 212, 15, 77, 47, 244, 3, 210, 173, 115, 53, 125, 103, 212, 114, 93, 31, 120, 164, 111, 14, 242, 79, 126, 10, 184, 45, 239, 24, 120, 81, 191, 90, 175, 156, 252, 244, 95, 234, 244, 41, 219, 15, 252, 74, 243, 198, 252, 254, 3, 191, 2, 222, 252, 155, 255, 107, 169, 63, 3, 113, 83, 245, 169, 243, 82, 215, 119, 224, 163, 80, 215, 122, 243, 155, 10, 30, 111, 208, 219, 3, 250, 46, 156, 57, 128, 226, 235, 241, 93, 169, 181, 127, 15, 233, 176, 209, 23, 122, 2, 233, 63, 249, 233, 123, 239, 40, 160, 223, 162, 207, 38, 174, 160, 15, 188, 170, 15, 244, 231, 139, 189, 239, 232, 229, 104, 252, 7, 39, 141, 227, 191, 170, 198, 25, 233, 51, 143, 191, 15, 244, 30, 127, 19, 149, 15, 64, 249, 21, 3, 254, 11, 200, 183, 252, 91, 147, 145, 247, 89, 228, 255, 230, 189, 159, 41, 158, 39, 96, 94, 168, 227, 63, 102, 55, 222, 99, 200, 95, 252, 254, 129, 27, 106, 252, 62, 83, 245, 45, 170, 253, 248, 129, 114, 18, 197, 201, 160, 223, 174, 189, 209, 215, 198, 191, 190, 28, 233, 253, 65, 125, 126, 168, 25, 249, 191, 26, 125, 19, 205, 79, 24, 23, 107, 121, 59, 90, 95, 126, 52, 127, 155, 96, 253, 25, 198, 127, 92, 29, 255, 25, 180, 254, 198, 7, 54, 190, 95, 139, 111, 11, 93, 39, 201, 171, 252, 16, 247, 186, 248, 156, 71, 241, 195, 252, 166, 118, 234, 245, 105, 44, 184, 81, 95, 142, 117, 67, 121, 123, 220, 166, 92, 235, 87, 109, 190, 51, 232, 124, 204, 144, 94, 111, 7, 63, 105, 199, 143, 117, 35, 125, 100, 126, 85, 95, 89, 47, 95, 52, 140, 143, 126, 93, 187, 236, 127, 128, 56, 66, 127, 6, 144, 135, 213, 215, 62, 231, 25, 180, 139, 79, 171, 19, 125, 65, 186, 190, 242, 34, 148, 255, 65, 192, 99, 238, 55, 73, 87, 41, 12, 243, 8, 165, 208, 58, 243, 95, 156, 89, 251, 168, 125, 174, 101, 176, 124, 118, 99, 196, 95, 68, 247, 31, 168, 162, 221, 47, 122, 7, 255, 26, 124, 231, 85, 116, 95, 110, 27, 118, 24, 63, 99, 185, 73, 95, 240, 99, 164, 239, 39, 254, 154, 62, 237, 190, 54, 56, 25, 170, 221, 143, 116, 157, 160, 111, 175, 230, 87, 212, 52, 232, 123, 102, 3, 110, 181, 219, 203, 241, 16, 90, 170, 72, 191, 119, 125, 176, 140, 226, 123, 137, 168, 175, 109, 184, 241, 252, 43, 219, 197, 215, 102, 94, 151, 213, 237, 176, 4, 98, 90, 165, 237, 199, 98, 233, 68, 161, 144, 64, 219, 218, 78, 159, 228, 61, 18, 91, 72, 72, 29, 181, 77, 113, 44, 149, 147, 244, 236, 128, 225, 224, 38, 49, 159, 131, 157, 111, 181, 104, 87, 173, 40, 95, 200, 102, 18, 82, 155, 212, 118, 44, 151, 93, 76, 228, 208, 159, 220, 131, 90, 177, 179, 169, 60, 218, 85, 235, 13, 118, 215, 26, 204, 39, 18, 139, 249, 52, 108, 161, 237, 136, 230, 83, 217, 92, 202, 80, 212, 105, 144, 150, 153, 79, 228, 141, 101, 254, 90, 217, 169, 28, 236, 227, 211, 86, 21, 205, 233, 84, 65, 106, 73, 198, 210, 249, 90, 35, 195, 105, 84, 46, 49, 175, 138, 159, 205, 230, 108, 9, 83, 185, 108, 198, 84, 182, 199, 168, 51, 182, 144, 205, 204, 155, 138, 3, 38, 61, 25, 163, 212, 157, 181, 162, 194, 82, 50, 105, 199, 22, 207, 198, 210, 36, 37, 167, 178, 105, 141, 202, 210, 193, 150, 116, 2, 117, 219, 51, 100, 71, 148, 142, 189, 28, 171, 230, 63, 102, 19, 255, 217, 186, 14, 238, 52, 118, 48, 87, 104, 220, 186, 42, 24, 61, 29, 73, 219, 165, 54, 245, 225, 72, 253, 35, 139, 18, 180, 20, 38, 76, 216, 119, 197, 182, 182, 84, 119, 207, 226, 127, 231, 118, 111, 203, 150, 127, 235, 187, 194, 175, 219, 183, 21, 127, 97, 194, 8, 86, 119, 92, 42, 201, 178, 28, 25, 29, 145, 67, 224, 229, 81, 89, 14, 69, 163, 51, 232, 99, 79, 52, 26, 181, 248, 25, 121, 89, 238, 139, 163, 132, 252, 114, 50, 169, 250, 62, 236, 147, 102, 223, 135, 125, 210, 198, 35, 56, 205, 207, 244, 225, 124, 5, 254, 85, 249, 145, 215, 232, 17, 159, 201, 143, 206, 104, 249, 163, 90, 181, 62, 92, 61, 57, 231, 68, 7, 242, 8, 23, 243, 170, 254, 248, 247, 162, 51, 224, 230, 100, 179, 245, 232, 126, 198, 236, 49, 111, 213, 91, 173, 31, 235, 233, 199, 122, 100, 147, 7, 25, 189, 88, 38, 226, 71, 30, 241, 247, 213, 209, 215, 235, 32, 120, 2, 127, 213, 19, 173, 23, 7, 56, 138, 7, 90, 181, 18, 193, 175, 208, 208, 92, 50, 126, 254, 1, 90, 133, 17, 139, 191, 100, 40, 187, 36, 243, 218, 227, 117, 252, 53, 62, 197, 150, 127, 196, 80, 247, 82, 127, 206, 33, 207, 21, 205, 253, 97, 29, 191, 98, 246, 128, 143, 63, 142, 62, 78, 231, 151, 129, 95, 145, 205, 166, 88, 60, 230, 239, 197, 252, 189, 84, 169, 143, 155, 147, 54, 252, 196, 176, 247, 226, 153, 9, 107, 63, 106, 235, 103, 170, 190, 215, 88, 223, 161, 97, 222, 193, 42, 191, 222, 190, 55, 90, 229, 181, 240, 247, 218, 235, 136, 154, 117, 68, 157, 233, 96, 225, 183, 232, 168, 243, 58, 175, 10, 129, 248, 113, 147, 154, 159, 49, 167, 235, 173, 126, 233, 24, 226, 111, 245, 85, 62, 163, 239, 125, 97, 197, 202, 167, 84, 121, 159, 55, 228, 71, 113, 26, 221, 84, 114, 216, 203, 3, 43, 218, 85, 107, 96, 101, 121, 89, 93, 7, 165, 229, 101, 181, 201, 114, 213, 19, 181, 87, 155, 202, 209, 28, 246, 8, 127, 160, 168, 152, 188, 92, 227, 5, 223, 139, 92, 255, 178, 230, 81, 89, 191, 198, 251, 6, 38, 124, 3, 235, 192, 201, 229, 106, 210, 184, 74, 245, 132, 230, 87, 228, 231, 151, 49, 191, 201, 23, 129, 55, 167, 134, 56, 154, 135, 187, 44, 240, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
// Panics
decompress_chunk(&input_data);
Badel2 commented 3 years ago

Confirmed that the fix is working, so I'm closing this.

If you want I can help you setup cargo fuzz to make sure that your code never panics.

owengage commented 3 years ago

Excellent. Cargo fuzz sounds like a great idea and I'd love help putting that together.

I've never fuzz tested anything before, but looking at it a bit I imagine a few good targets would be

I think the last one would probably be the most simple one to do.