From d09175ffe335d9be6846b4ac5e9e622d96213a00 Mon Sep 17 00:00:00 2001 From: Adam Langley Date: Fri, 20 May 2016 10:51:48 -0700 Subject: [PATCH] Replace base64 decoding. This code has caused a long history of problems. This change rewrites it completely with something that is, hopefully, much simplier and robust and adds more testing. Change-Id: Ibeef51f9386afd95d5b73316e451eb3a2d7ec4e0 Reviewed-on: https://boringssl-review.googlesource.com/8033 Reviewed-by: Adam Langley --- FUZZING.md | 18 +- crypto/base64/base64.c | 509 ++++++++---------- crypto/base64/base64_test.cc | 354 ++++++++++-- decrepit/bio/base64_bio.c | 4 +- fuzz/CMakeLists.txt | 9 + fuzz/read_pem.cc | 36 ++ .../01270d57eecae64f59b9b27cc06e3f9eaf2304e2 | 1 + .../0ab8318acaf6e678dd02e2b5c343ed41111b393d | 1 + .../0b08765ad46bb11ac55348755ad5c8e4386bd2f3 | Bin 0 -> 371 bytes .../0bdb9660f74f82a5471210026fdee0b674f1114e | 33 ++ .../0c4287915a432e6b50e1c2eb0f4ca037b1730aa0 | Bin 0 -> 394 bytes .../0d583f2aee2e15a7dc7eb93af1ecf44203b537f4 | 3 + .../0e3deb2e809b535f39efded20697314a29c8335a | 7 + .../0f29362dfb076a14a103e8bc2c9681fac93c237d | Bin 0 -> 405 bytes .../1078e6b183abbe50aa19cffd741db1cb30e5cf4f | 8 + .../149b4073e8ee2d37455c0d7867c7cffdecf0f8e1 | 17 + .../15dd914fbdc4335ebc69caa9afe37681dd75cc32 | 17 + .../18810634408061267ccb64d68fb85b4ed93515e8 | 45 ++ .../1f68f0ee67566b2954a4e2d2c31f6abb60cdaed5 | 4 + .../20a000f3932e041a634b759b7cef8138b5b40f67 | Bin 0 -> 470 bytes .../20d3859cd71d9b215f55983a5ac9cce7c0a36cc4 | Bin 0 -> 281 bytes .../217d0e120e43e1899a8ab51009de55038fe52789 | 15 + .../2493849afd1697d00f4c2f36af4522e6a9ba46b8 | Bin 0 -> 512 bytes .../27c891aa76f51487ada28b1fc69ac13c7315c933 | Bin 0 -> 358 bytes .../27ec8c0bf073ec4ea4f5ee15fbaca4fb32f728b3 | 1 + .../2904f9b6f6cb0ddf9248537b4fb4b2170174b74f | 3 + .../2a7b8759f3267d3ddca22e936df0b21eabb1aeed | Bin 0 -> 471 bytes .../2aaf881c96d0758e5ac244a74deccb7e6363c111 | 14 + .../2ef2666e807e55481eb81bd2bd8369a4422dfc6f | 5 + .../318bcf81a2b6fa0ce680ec82cf11e8a6e4bd93f0 | 4 + .../358ff4aeb6903affa5d080c317c3270ac4f13121 | 1 + .../35bae979e092abdc6b31f8b3c52ddcafa4722a9a | 11 + .../38fccbaee723a06ca137a952843b58d32d35ef25 | 2 + .../3aaa3cdd4444fad7e59ba1ac2c0cbe6b60ea1181 | 1 + .../3b981c1e4697103278b32ee4e29e3a7b5225d798 | 14 + .../3bff6c9ef0381ea1080fdfb5b4f9c02e95f549b2 | Bin 0 -> 325 bytes .../3cdb51f7ffc8ef0bd03265c3a414069815821d18 | Bin 0 -> 418 bytes .../3f46a93da1448c00d2a9f3a62117bd522ce8de64 | Bin 0 -> 463 bytes .../411752e433e18c27f83b9728256082c2ffb77ebb | 15 + .../42650de48dbf62d86a91ede484061f834214915d | 2 + .../488ae502baabc6506f8722dcdc5294940fa5d588 | Bin 0 -> 275 bytes .../4aa25eda7560bbd746d9a69b63965c0de21bb53e | 34 ++ .../4b32aa9edbd17b2d63390a41cc98739be7d45596 | 7 + .../4d43fa4e63042871afdb387b75a8845d47b46d18 | Bin 0 -> 315 bytes .../548649f5502df5e77b9d332d3f1e29dedd7afdb2 | Bin 0 -> 388 bytes .../55885a3f94688b36e34fac8ce1fd7fcc7bb7208c | Bin 0 -> 377 bytes .../5891dd7c6715eca7f427ed9267de9da72b8e82e8 | 15 + .../58bdb0aea139a2790c2e1a3b25e302892a6c4b55 | Bin 0 -> 439 bytes .../5c720dc0326e4ffa322f706337df9bc87f42fd96 | Bin 0 -> 481 bytes .../667da9df1cde33d635bbde1986827573ed686a7e | 6 + .../66f8b696c46c10a6db20b690e4431b72745f4760 | 7 + .../699044ddfe4887d6081ce2a36c1302814294eb68 | 15 + .../6d1d12ef00c585b4c859479bfa2522f4a447d907 | 5 + .../6d67bafd83bed7aadd641417671e6864dc87073c | 16 + .../6dcb7976d9af4a72b3667926f1fe7642c75685b2 | Bin 0 -> 362 bytes .../6e6aa5ec1653a57a37c043255ab834f6b2228b80 | 2 + .../729be2837328d9f25597b1d605188bc724c632e6 | 6 + .../74a4f38726a49f3a8c06763d58d8fc229b2aa915 | 3 + .../74b9536c60def2f9cb8e83512b80ff8406d12567 | Bin 0 -> 511 bytes .../74b97735df0ee03d5a912734de93772093826bda | 33 ++ .../7539289d67a0974d16f0ed01ded0a58a02b21126 | 1 + .../78c435e1927ec196afab938edced0b9ee267e70b | Bin 0 -> 403 bytes .../78e4c8a5d73cf074f243ef12a3669fef1e848121 | 10 + .../7a582440bd4712ab88a3e745f928202707585e6f | 33 ++ .../7b8e2a5dfa03cc13b70eb5f77d61222c108ab6bd | Bin 0 -> 446 bytes .../824b6dd27deb9ed157fdc80485f104268f7232fe | Bin 0 -> 507 bytes .../825edbf21bc40ec23225772635ea6390e6d9fb4c | 3 + .../8347c4366b5d668b467fb589c3090f201eacb5db | Bin 0 -> 358 bytes .../874ed5d633d245b10fdda52c49627b43b3f2e25b | 14 + .../88581ebac8ffbea71bb83f704e14d789dbc33f37 | 17 + .../892155ce92d4c3293f48e6fc2097336ba882a0ad | 8 + .../894e092b7fd9f4e0a5911ca106e097d3833d3491 | 3 + .../8c07d6299f33fee89ab0c82e92e06cd558ade60f | 14 + .../8e07fb01e0cfa23caddb6b0280c03d0ae2bac57e | Bin 0 -> 314 bytes .../92207925db84106af0167e887696d936aa41e785 | 5 + .../94514c5c092afe2f8295dc193d506f16c6ea82c1 | Bin 0 -> 369 bytes .../956c8cf1db9220ac8004eb9a75e3ebc1df33a33f | Bin 0 -> 405 bytes .../97c5565f723c0e49787fdec9ed15354760fcb1e6 | Bin 0 -> 234 bytes .../9832fea1fe1c8b575790f59f98404fb61672a3f3 | 5 + .../9940bd2f440a8c1e07dba6476c219349afeae711 | 12 + .../9d1e6ed2fc4b095a2ccb4e695241c91d4b194be5 | Bin 0 -> 315 bytes .../a2bc14d4be3bb4f4deb93ddaa77224db305158af | Bin 0 -> 419 bytes .../a75abe0b4dd03dc232f9192666d6adb369beffca | 5 + .../a92c58dfadb8195fbd90c70b4dc576986dbb7c46 | Bin 0 -> 386 bytes .../aa82ef4cf1c3c2d7dd7811803227cc87d2429b3c | Bin 0 -> 358 bytes .../ad49ff8fb9ff95a8f110b15702f8209df64f8fad | 14 + .../af9207c320f7400ba18dea62fd4af98330ba260b | 3 + .../b034864020154378b78a11122c8f61f81e8009ce | Bin 0 -> 385 bytes .../b178eadb35af688d045ba6bc400396ae0fc7c9b9 | 6 + .../b709f3412c5fb9a0b38a69eee59620a5c3990385 | 8 + .../b92f0f72b6839f6c7ac10f4c663765b89e1fa513 | 2 + .../bc205ed015bb01de66b5a6b5a631d167c8077a5c | Bin 0 -> 424 bytes .../c0348b5dd7aaf73888372a5a6abef82bd0df97b9 | 18 + .../c0596e573f43d2bd5a5d038bf4bd7d073141ddf0 | 16 + .../c45f49452fcdf531f2bcfd100645c535e5b71205 | 1 + .../c504659b0454be5eef0594da6a952f8daf347929 | 1 + .../c7e4b7f4c3bbc7c6ed4e3366d1d4c16ed44952f1 | Bin 0 -> 358 bytes .../caf489bb8f6f48e35b95032b2824ca0ffc77d26a | Bin 0 -> 314 bytes .../cc8ceeebb230ca237479e0c3dacafbb5524222e1 | 20 + .../cf1b3d1ed204deed6c62f41d0e706ee47bc802e0 | 7 + .../cfc3b1348ca73b8c02d9aed715d1e0681326888c | 1 + .../d4f0a19ece82b78c82c81eae5b49dc662c6f4a89 | Bin 0 -> 462 bytes .../d959c647c6a5ea641fec147b0de36187a9d2f8c5 | Bin 0 -> 445 bytes .../de2fb44503aca3f82d5466a9489c0735324b214d | Bin 0 -> 358 bytes .../df9fe7d51a89ee267034a2834025f71505d4a421 | 7 + .../e1a6c4096b145ced5362ede6ffedbc49d16ba57e | 4 + .../e207960b1761ba95e7544b9d924459c56e2c4695 | Bin 0 -> 386 bytes .../e3344ef8d734471ef90b16c719cb0f11af2ce743 | 3 + .../e45a6df435a1cecae6547f6dcde626a7e706434c | 8 + .../e7ef91e03a3aa8bd53b2466a2207a5028185678f | Bin 0 -> 430 bytes .../ebcae74985ccc7905a3800c0db2723392cfd2f2c | Bin 0 -> 410 bytes .../ed31baee70d3b705762e808e494b4debf604c5fb | 31 ++ .../ee06965764fdf6769657e744a61efe7d60d085fb | 1 + .../f123c08d0a46b72fa8989296e82e7aa25ebf16f8 | 7 + .../f18ebc593b87baa03b5e003b7540577001ba6aca | Bin 0 -> 429 bytes .../f1903c6e205ba7b902e53b07e08890ec8179cbd5 | 1 + .../f3f2959361766dbfafbb2f99a4f60c920001386e | 6 + .../f72115838630c70a067e89b98615357fcf19d058 | 45 ++ .../f9f61f03681250b015a00df3010b89d2d776d8fc | Bin 0 -> 385 bytes .../fad7e4071afc1e4f441e2cb65cf9b0da37dcd74e | 2 + .../fb36b0ce1600b9399d552eab916600c239be5ad5 | Bin 0 -> 481 bytes .../fb64fef6ea2f835804b69ae3d21fb2cac7e4973f | 9 + .../fb6d4702bcb98df173527a5f08d5ac829adb2f9f | 15 + .../fd1cc706033976b86a93d2b0c74b15bb2f31fccf | 18 + .../ff7dcdb0fc13ddea6e82cac7bf3a0414cb772ded | Bin 0 -> 511 bytes include/openssl/base64.h | 37 +- 126 files changed, 1376 insertions(+), 348 deletions(-) create mode 100644 fuzz/read_pem.cc create mode 100644 fuzz/read_pem_corpus/01270d57eecae64f59b9b27cc06e3f9eaf2304e2 create mode 100644 fuzz/read_pem_corpus/0ab8318acaf6e678dd02e2b5c343ed41111b393d create mode 100644 fuzz/read_pem_corpus/0b08765ad46bb11ac55348755ad5c8e4386bd2f3 create mode 100644 fuzz/read_pem_corpus/0bdb9660f74f82a5471210026fdee0b674f1114e create mode 100644 fuzz/read_pem_corpus/0c4287915a432e6b50e1c2eb0f4ca037b1730aa0 create mode 100644 fuzz/read_pem_corpus/0d583f2aee2e15a7dc7eb93af1ecf44203b537f4 create mode 100644 fuzz/read_pem_corpus/0e3deb2e809b535f39efded20697314a29c8335a create mode 100644 fuzz/read_pem_corpus/0f29362dfb076a14a103e8bc2c9681fac93c237d create mode 100644 fuzz/read_pem_corpus/1078e6b183abbe50aa19cffd741db1cb30e5cf4f create mode 100644 fuzz/read_pem_corpus/149b4073e8ee2d37455c0d7867c7cffdecf0f8e1 create mode 100644 fuzz/read_pem_corpus/15dd914fbdc4335ebc69caa9afe37681dd75cc32 create mode 100644 fuzz/read_pem_corpus/18810634408061267ccb64d68fb85b4ed93515e8 create mode 100644 fuzz/read_pem_corpus/1f68f0ee67566b2954a4e2d2c31f6abb60cdaed5 create mode 100644 fuzz/read_pem_corpus/20a000f3932e041a634b759b7cef8138b5b40f67 create mode 100644 fuzz/read_pem_corpus/20d3859cd71d9b215f55983a5ac9cce7c0a36cc4 create mode 100644 fuzz/read_pem_corpus/217d0e120e43e1899a8ab51009de55038fe52789 create mode 100644 fuzz/read_pem_corpus/2493849afd1697d00f4c2f36af4522e6a9ba46b8 create mode 100644 fuzz/read_pem_corpus/27c891aa76f51487ada28b1fc69ac13c7315c933 create mode 100644 fuzz/read_pem_corpus/27ec8c0bf073ec4ea4f5ee15fbaca4fb32f728b3 create mode 100644 fuzz/read_pem_corpus/2904f9b6f6cb0ddf9248537b4fb4b2170174b74f create mode 100644 fuzz/read_pem_corpus/2a7b8759f3267d3ddca22e936df0b21eabb1aeed create mode 100644 fuzz/read_pem_corpus/2aaf881c96d0758e5ac244a74deccb7e6363c111 create mode 100644 fuzz/read_pem_corpus/2ef2666e807e55481eb81bd2bd8369a4422dfc6f create mode 100644 fuzz/read_pem_corpus/318bcf81a2b6fa0ce680ec82cf11e8a6e4bd93f0 create mode 100644 fuzz/read_pem_corpus/358ff4aeb6903affa5d080c317c3270ac4f13121 create mode 100644 fuzz/read_pem_corpus/35bae979e092abdc6b31f8b3c52ddcafa4722a9a create mode 100644 fuzz/read_pem_corpus/38fccbaee723a06ca137a952843b58d32d35ef25 create mode 100644 fuzz/read_pem_corpus/3aaa3cdd4444fad7e59ba1ac2c0cbe6b60ea1181 create mode 100644 fuzz/read_pem_corpus/3b981c1e4697103278b32ee4e29e3a7b5225d798 create mode 100644 fuzz/read_pem_corpus/3bff6c9ef0381ea1080fdfb5b4f9c02e95f549b2 create mode 100644 fuzz/read_pem_corpus/3cdb51f7ffc8ef0bd03265c3a414069815821d18 create mode 100644 fuzz/read_pem_corpus/3f46a93da1448c00d2a9f3a62117bd522ce8de64 create mode 100644 fuzz/read_pem_corpus/411752e433e18c27f83b9728256082c2ffb77ebb create mode 100644 fuzz/read_pem_corpus/42650de48dbf62d86a91ede484061f834214915d create mode 100644 fuzz/read_pem_corpus/488ae502baabc6506f8722dcdc5294940fa5d588 create mode 100644 fuzz/read_pem_corpus/4aa25eda7560bbd746d9a69b63965c0de21bb53e create mode 100644 fuzz/read_pem_corpus/4b32aa9edbd17b2d63390a41cc98739be7d45596 create mode 100644 fuzz/read_pem_corpus/4d43fa4e63042871afdb387b75a8845d47b46d18 create mode 100644 fuzz/read_pem_corpus/548649f5502df5e77b9d332d3f1e29dedd7afdb2 create mode 100644 fuzz/read_pem_corpus/55885a3f94688b36e34fac8ce1fd7fcc7bb7208c create mode 100644 fuzz/read_pem_corpus/5891dd7c6715eca7f427ed9267de9da72b8e82e8 create mode 100644 fuzz/read_pem_corpus/58bdb0aea139a2790c2e1a3b25e302892a6c4b55 create mode 100644 fuzz/read_pem_corpus/5c720dc0326e4ffa322f706337df9bc87f42fd96 create mode 100644 fuzz/read_pem_corpus/667da9df1cde33d635bbde1986827573ed686a7e create mode 100644 fuzz/read_pem_corpus/66f8b696c46c10a6db20b690e4431b72745f4760 create mode 100644 fuzz/read_pem_corpus/699044ddfe4887d6081ce2a36c1302814294eb68 create mode 100644 fuzz/read_pem_corpus/6d1d12ef00c585b4c859479bfa2522f4a447d907 create mode 100644 fuzz/read_pem_corpus/6d67bafd83bed7aadd641417671e6864dc87073c create mode 100644 fuzz/read_pem_corpus/6dcb7976d9af4a72b3667926f1fe7642c75685b2 create mode 100644 fuzz/read_pem_corpus/6e6aa5ec1653a57a37c043255ab834f6b2228b80 create mode 100644 fuzz/read_pem_corpus/729be2837328d9f25597b1d605188bc724c632e6 create mode 100644 fuzz/read_pem_corpus/74a4f38726a49f3a8c06763d58d8fc229b2aa915 create mode 100644 fuzz/read_pem_corpus/74b9536c60def2f9cb8e83512b80ff8406d12567 create mode 100644 fuzz/read_pem_corpus/74b97735df0ee03d5a912734de93772093826bda create mode 100644 fuzz/read_pem_corpus/7539289d67a0974d16f0ed01ded0a58a02b21126 create mode 100644 fuzz/read_pem_corpus/78c435e1927ec196afab938edced0b9ee267e70b create mode 100644 fuzz/read_pem_corpus/78e4c8a5d73cf074f243ef12a3669fef1e848121 create mode 100644 fuzz/read_pem_corpus/7a582440bd4712ab88a3e745f928202707585e6f create mode 100644 fuzz/read_pem_corpus/7b8e2a5dfa03cc13b70eb5f77d61222c108ab6bd create mode 100644 fuzz/read_pem_corpus/824b6dd27deb9ed157fdc80485f104268f7232fe create mode 100644 fuzz/read_pem_corpus/825edbf21bc40ec23225772635ea6390e6d9fb4c create mode 100644 fuzz/read_pem_corpus/8347c4366b5d668b467fb589c3090f201eacb5db create mode 100644 fuzz/read_pem_corpus/874ed5d633d245b10fdda52c49627b43b3f2e25b create mode 100644 fuzz/read_pem_corpus/88581ebac8ffbea71bb83f704e14d789dbc33f37 create mode 100644 fuzz/read_pem_corpus/892155ce92d4c3293f48e6fc2097336ba882a0ad create mode 100644 fuzz/read_pem_corpus/894e092b7fd9f4e0a5911ca106e097d3833d3491 create mode 100644 fuzz/read_pem_corpus/8c07d6299f33fee89ab0c82e92e06cd558ade60f create mode 100644 fuzz/read_pem_corpus/8e07fb01e0cfa23caddb6b0280c03d0ae2bac57e create mode 100644 fuzz/read_pem_corpus/92207925db84106af0167e887696d936aa41e785 create mode 100644 fuzz/read_pem_corpus/94514c5c092afe2f8295dc193d506f16c6ea82c1 create mode 100644 fuzz/read_pem_corpus/956c8cf1db9220ac8004eb9a75e3ebc1df33a33f create mode 100644 fuzz/read_pem_corpus/97c5565f723c0e49787fdec9ed15354760fcb1e6 create mode 100644 fuzz/read_pem_corpus/9832fea1fe1c8b575790f59f98404fb61672a3f3 create mode 100644 fuzz/read_pem_corpus/9940bd2f440a8c1e07dba6476c219349afeae711 create mode 100644 fuzz/read_pem_corpus/9d1e6ed2fc4b095a2ccb4e695241c91d4b194be5 create mode 100644 fuzz/read_pem_corpus/a2bc14d4be3bb4f4deb93ddaa77224db305158af create mode 100644 fuzz/read_pem_corpus/a75abe0b4dd03dc232f9192666d6adb369beffca create mode 100644 fuzz/read_pem_corpus/a92c58dfadb8195fbd90c70b4dc576986dbb7c46 create mode 100644 fuzz/read_pem_corpus/aa82ef4cf1c3c2d7dd7811803227cc87d2429b3c create mode 100644 fuzz/read_pem_corpus/ad49ff8fb9ff95a8f110b15702f8209df64f8fad create mode 100644 fuzz/read_pem_corpus/af9207c320f7400ba18dea62fd4af98330ba260b create mode 100644 fuzz/read_pem_corpus/b034864020154378b78a11122c8f61f81e8009ce create mode 100644 fuzz/read_pem_corpus/b178eadb35af688d045ba6bc400396ae0fc7c9b9 create mode 100644 fuzz/read_pem_corpus/b709f3412c5fb9a0b38a69eee59620a5c3990385 create mode 100644 fuzz/read_pem_corpus/b92f0f72b6839f6c7ac10f4c663765b89e1fa513 create mode 100644 fuzz/read_pem_corpus/bc205ed015bb01de66b5a6b5a631d167c8077a5c create mode 100644 fuzz/read_pem_corpus/c0348b5dd7aaf73888372a5a6abef82bd0df97b9 create mode 100644 fuzz/read_pem_corpus/c0596e573f43d2bd5a5d038bf4bd7d073141ddf0 create mode 100644 fuzz/read_pem_corpus/c45f49452fcdf531f2bcfd100645c535e5b71205 create mode 100644 fuzz/read_pem_corpus/c504659b0454be5eef0594da6a952f8daf347929 create mode 100644 fuzz/read_pem_corpus/c7e4b7f4c3bbc7c6ed4e3366d1d4c16ed44952f1 create mode 100644 fuzz/read_pem_corpus/caf489bb8f6f48e35b95032b2824ca0ffc77d26a create mode 100644 fuzz/read_pem_corpus/cc8ceeebb230ca237479e0c3dacafbb5524222e1 create mode 100644 fuzz/read_pem_corpus/cf1b3d1ed204deed6c62f41d0e706ee47bc802e0 create mode 100644 fuzz/read_pem_corpus/cfc3b1348ca73b8c02d9aed715d1e0681326888c create mode 100644 fuzz/read_pem_corpus/d4f0a19ece82b78c82c81eae5b49dc662c6f4a89 create mode 100644 fuzz/read_pem_corpus/d959c647c6a5ea641fec147b0de36187a9d2f8c5 create mode 100644 fuzz/read_pem_corpus/de2fb44503aca3f82d5466a9489c0735324b214d create mode 100644 fuzz/read_pem_corpus/df9fe7d51a89ee267034a2834025f71505d4a421 create mode 100644 fuzz/read_pem_corpus/e1a6c4096b145ced5362ede6ffedbc49d16ba57e create mode 100644 fuzz/read_pem_corpus/e207960b1761ba95e7544b9d924459c56e2c4695 create mode 100644 fuzz/read_pem_corpus/e3344ef8d734471ef90b16c719cb0f11af2ce743 create mode 100644 fuzz/read_pem_corpus/e45a6df435a1cecae6547f6dcde626a7e706434c create mode 100644 fuzz/read_pem_corpus/e7ef91e03a3aa8bd53b2466a2207a5028185678f create mode 100644 fuzz/read_pem_corpus/ebcae74985ccc7905a3800c0db2723392cfd2f2c create mode 100644 fuzz/read_pem_corpus/ed31baee70d3b705762e808e494b4debf604c5fb create mode 100644 fuzz/read_pem_corpus/ee06965764fdf6769657e744a61efe7d60d085fb create mode 100644 fuzz/read_pem_corpus/f123c08d0a46b72fa8989296e82e7aa25ebf16f8 create mode 100644 fuzz/read_pem_corpus/f18ebc593b87baa03b5e003b7540577001ba6aca create mode 100644 fuzz/read_pem_corpus/f1903c6e205ba7b902e53b07e08890ec8179cbd5 create mode 100644 fuzz/read_pem_corpus/f3f2959361766dbfafbb2f99a4f60c920001386e create mode 100644 fuzz/read_pem_corpus/f72115838630c70a067e89b98615357fcf19d058 create mode 100644 fuzz/read_pem_corpus/f9f61f03681250b015a00df3010b89d2d776d8fc create mode 100644 fuzz/read_pem_corpus/fad7e4071afc1e4f441e2cb65cf9b0da37dcd74e create mode 100644 fuzz/read_pem_corpus/fb36b0ce1600b9399d552eab916600c239be5ad5 create mode 100644 fuzz/read_pem_corpus/fb64fef6ea2f835804b69ae3d21fb2cac7e4973f create mode 100644 fuzz/read_pem_corpus/fb6d4702bcb98df173527a5f08d5ac829adb2f9f create mode 100644 fuzz/read_pem_corpus/fd1cc706033976b86a93d2b0c74b15bb2f31fccf create mode 100644 fuzz/read_pem_corpus/ff7dcdb0fc13ddea6e82cac7bf3a0414cb772ded diff --git a/FUZZING.md b/FUZZING.md index 86d093084c..9f4edef195 100644 --- a/FUZZING.md +++ b/FUZZING.md @@ -30,15 +30,15 @@ The arguments to `jobs` and `workers` should be the number of cores that you wis The recommended values of `max_len` for each test are: -| Test | `max_len` value | -|-----------|-----------------| -| `cert` | 3072 | -| `client` | 20000 | -| `pkcs8` | 2048 | -| `privkey` | 2048 | -| `server` | 4096 | -| `spki` | 1024 | - +| Test | `max_len` value | +|------------|-----------------| +| `cert` | 3072 | +| `client` | 20000 | +| `pkcs8` | 2048 | +| `privkey` | 2048 | +| `server` | 4096 | +| `spki` | 1024 | +| `read_pem` | 512 | These were determined by rounding up the length of the largest case in the corpus. diff --git a/crypto/base64/base64.c b/crypto/base64/base64.c index 61f79cda16..0763a3e402 100644 --- a/crypto/base64/base64.c +++ b/crypto/base64/base64.c @@ -60,61 +60,42 @@ #include #include +#include + + +/* Encoding. */ static const unsigned char data_bin2ascii[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; #define conv_bin2ascii(a) (data_bin2ascii[(a) & 0x3f]) -/* 64 char lines - * pad input with 0 - * left over chars are set to = - * 1 byte => xx== - * 2 bytes => xxx= - * 3 bytes => xxxx - */ -#define BIN_PER_LINE (64/4*3) -#define CHUNKS_PER_LINE (64/4) -#define CHAR_PER_LINE (64+1) - -/* 0xF0 is a EOLN - * 0xF1 is ignore but next needs to be 0xF0 (for \r\n processing). - * 0xF2 is EOF - * 0xE0 is ignore at start of line. - * 0xFF is error */ - -#define B64_EOLN 0xF0 -#define B64_CR 0xF1 -#define B64_EOF 0xF2 -#define B64_WS 0xE0 -#define B64_ERROR 0xFF -#define B64_NOT_BASE64(a) (((a) | 0x13) == 0xF3) - -static const uint8_t data_ascii2bin[128] = { - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xF0, 0xFF, - 0xFF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0xFF, 0xF2, 0xFF, 0x3F, - 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0xFF, 0xFF, - 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, - 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, - 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, - 0xFF, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, - 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, - 0x31, 0x32, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, -}; +OPENSSL_COMPILE_ASSERT(sizeof(((EVP_ENCODE_CTX *)(NULL))->data) % 3 == 0, + data_length_must_be_multiple_of_base64_chunk_size); -static uint8_t conv_ascii2bin(uint8_t a) { - if (a >= 128) { - return 0xFF; +int EVP_EncodedLength(size_t *out_len, size_t len) { + if (len + 2 < len) { + return 0; + } + len += 2; + len /= 3; + + if (((len << 2) >> 2) != len) { + return 0; + } + len <<= 2; + + if (len + 1 < len) { + return 0; } - return data_ascii2bin[a]; + len++; + + *out_len = len; + return 1; } void EVP_EncodeInit(EVP_ENCODE_CTX *ctx) { - ctx->length = 48; - ctx->num = 0; - ctx->line_num = 0; + memset(ctx, 0, sizeof(EVP_ENCODE_CTX)); } void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, uint8_t *out, int *out_len, @@ -126,55 +107,72 @@ void EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, uint8_t *out, int *out_len, return; } - assert(ctx->length <= sizeof(ctx->enc_data)); - assert(ctx->num < ctx->length); + assert(ctx->data_used < sizeof(ctx->data)); - if (ctx->length - ctx->num > in_len) { - memcpy(&ctx->enc_data[ctx->num], in, in_len); - ctx->num += in_len; + if (sizeof(ctx->data) - ctx->data_used > in_len) { + memcpy(&ctx->data[ctx->data_used], in, in_len); + ctx->data_used += in_len; return; } - if (ctx->num != 0) { - size_t todo = ctx->length - ctx->num; - memcpy(&ctx->enc_data[ctx->num], in, todo); + if (ctx->data_used != 0) { + const size_t todo = sizeof(ctx->data) - ctx->data_used; + memcpy(&ctx->data[ctx->data_used], in, todo); in += todo; in_len -= todo; - size_t encoded = EVP_EncodeBlock(out, ctx->enc_data, ctx->length); - ctx->num = 0; + + size_t encoded = EVP_EncodeBlock(out, ctx->data, sizeof(ctx->data)); + ctx->data_used = 0; + out += encoded; *(out++) = '\n'; *out = '\0'; + total = encoded + 1; } - while (in_len >= ctx->length) { - size_t encoded = EVP_EncodeBlock(out, in, ctx->length); - in += ctx->length; - in_len -= ctx->length; + while (in_len >= sizeof(ctx->data)) { + size_t encoded = EVP_EncodeBlock(out, in, sizeof(ctx->data)); + in += sizeof(ctx->data); + in_len -= sizeof(ctx->data); + out += encoded; *(out++) = '\n'; *out = '\0'; + + if (total + encoded + 1 < total) { + *out_len = 0; + return; + } + total += encoded + 1; } if (in_len != 0) { - memcpy(&ctx->enc_data[0], in, in_len); + memcpy(ctx->data, in, in_len); + } + + ctx->data_used = in_len; + + if (total > INT_MAX) { + /* We cannot signal an error, but we can at least avoid making *out_len + * negative. */ + total = 0; } - ctx->num = in_len; *out_len = total; } void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, uint8_t *out, int *out_len) { - unsigned ret = 0; - - if (ctx->num != 0) { - ret = EVP_EncodeBlock(out, ctx->enc_data, ctx->num); - out[ret++] = '\n'; - out[ret] = '\0'; - ctx->num = 0; + if (ctx->data_used == 0) { + *out_len = 0; + return; } - *out_len = ret; + + size_t encoded = EVP_EncodeBlock(out, ctx->data, ctx->data_used); + out[encoded++] = '\n'; + out[encoded] = '\0'; + ctx->data_used = 0; + *out_len = encoded; } size_t EVP_EncodeBlock(uint8_t *dst, const uint8_t *src, size_t src_len) { @@ -209,246 +207,223 @@ size_t EVP_EncodeBlock(uint8_t *dst, const uint8_t *src, size_t src_len) { return ret; } + +/* Decoding. */ + int EVP_DecodedLength(size_t *out_len, size_t len) { if (len % 4 != 0) { return 0; } + *out_len = (len / 4) * 3; return 1; } -int EVP_DecodeBase64(uint8_t *out, size_t *out_len, size_t max_out, - const uint8_t *in, size_t in_len) { - uint8_t a, b, c, d; - size_t pad_len = 0, len = 0, max_len, i; - uint32_t l; +void EVP_DecodeInit(EVP_ENCODE_CTX *ctx) { + memset(ctx, 0, sizeof(EVP_ENCODE_CTX)); +} + +/* kBase64ASCIIToBinData maps characters (c < 128) to their base64 value, or + * else 0xff if they are invalid. As a special case, the padding character + * ('=') is mapped to zero. */ +static const uint8_t kBase64ASCIIToBinData[128] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3e, 0xff, 0xff, 0xff, 0x3f, + 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0xff, 0xff, + 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, + 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, + 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + 0x31, 0x32, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +static uint8_t base64_ascii_to_bin(uint8_t a) { + if (a >= 128) { + return 0xFF; + } - if (!EVP_DecodedLength(&max_len, in_len) || max_out < max_len) { + return kBase64ASCIIToBinData[a]; +} + +/* base64_decode_quad decodes a single “quad” (i.e. four characters) of base64 + * data and writes up to three bytes to |out|. It sets |*out_num_bytes| to the + * number of bytes written, which will be less than three if the quad ended + * with padding. It returns one on success or zero on error. */ +static int base64_decode_quad(uint8_t *out, size_t *out_num_bytes, + const uint8_t *in) { + const uint8_t a = base64_ascii_to_bin(in[0]); + const uint8_t b = base64_ascii_to_bin(in[1]); + const uint8_t c = base64_ascii_to_bin(in[2]); + const uint8_t d = base64_ascii_to_bin(in[3]); + if (a == 0xff || b == 0xff || c == 0xff || d == 0xff) { return 0; } - for (i = 0; i < in_len; i += 4) { - a = conv_ascii2bin(*(in++)); - b = conv_ascii2bin(*(in++)); - if (i + 4 == in_len && in[1] == '=') { - if (in[0] == '=') { - pad_len = 2; - } else { - pad_len = 1; - } - } - if (pad_len < 2) { - c = conv_ascii2bin(*(in++)); - } else { - c = 0; - } - if (pad_len < 1) { - d = conv_ascii2bin(*(in++)); - } else { - d = 0; - } - if ((a & 0x80) || (b & 0x80) || (c & 0x80) || (d & 0x80)) { + const uint32_t v = ((uint32_t)a) << 18 | ((uint32_t)b) << 12 | + ((uint32_t)c) << 6 | (uint32_t)d; + + const unsigned padding_pattern = (in[0] == '=') << 3 | + (in[1] == '=') << 2 | + (in[2] == '=') << 1 | + (in[3] == '='); + + switch (padding_pattern) { + case 0: + /* The common case of no padding. */ + *out_num_bytes = 3; + out[0] = v >> 16; + out[1] = v >> 8; + out[2] = v; + break; + + case 1: /* xxx= */ + *out_num_bytes = 2; + out[0] = v >> 16; + out[1] = v >> 8; + break; + + case 3: /* xx== */ + *out_num_bytes = 1; + out[0] = v >> 16; + break; + + default: return 0; - } - l = ((((uint32_t)a) << 18L) | (((uint32_t)b) << 12L) | - (((uint32_t)c) << 6L) | (((uint32_t)d))); - *(out++) = (uint8_t)(l >> 16L) & 0xff; - if (pad_len < 2) { - *(out++) = (uint8_t)(l >> 8L) & 0xff; - } - if (pad_len < 1) { - *(out++) = (uint8_t)(l) & 0xff; - } - len += 3 - pad_len; } - *out_len = len; - return 1; -} -void EVP_DecodeInit(EVP_ENCODE_CTX *ctx) { - ctx->length = 30; - ctx->num = 0; - ctx->line_num = 0; - ctx->expect_nl = 0; + return 1; } int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, uint8_t *out, int *out_len, const uint8_t *in, size_t in_len) { - int seof = -1, eof = 0, rv = -1, v, tmp, exp_nl; - uint8_t *d; - unsigned i, n, ln, ret = 0; - - n = ctx->num; - d = ctx->enc_data; - ln = ctx->line_num; - exp_nl = ctx->expect_nl; - - /* last line of input. */ - if (in_len == 0 || (n == 0 && conv_ascii2bin(in[0]) == B64_EOF)) { - rv = 0; - goto end; + *out_len = 0; + + if (ctx->error_encountered) { + return -1; } - /* We parse the input data */ + size_t bytes_out = 0, i; for (i = 0; i < in_len; i++) { - /* If the current line is > 80 characters, scream alot */ - if (ln >= 80) { - rv = -1; - goto end; + const char c = in[i]; + switch (c) { + case ' ': + case '\t': + case '\r': + case '\n': + continue; } - /* Get char and put it into the buffer */ - tmp = *(in++); - v = conv_ascii2bin(tmp); - /* only save the good data :-) */ - if (!B64_NOT_BASE64(v)) { - assert(n < sizeof(ctx->enc_data)); - d[n++] = tmp; - ln++; - } else if (v == B64_ERROR) { - rv = -1; - goto end; + if (base64_ascii_to_bin(c) == 0xff || ctx->eof_seen) { + ctx->error_encountered = 1; + return -1; } - /* have we seen a '=' which is 'definitly' the last - * input line. seof will point to the character that - * holds it. and eof will hold how many characters to - * chop off. */ - if (tmp == '=') { - if (seof == -1) { - seof = n; + ctx->data[ctx->data_used++] = c; + if (ctx->data_used == 4) { + size_t num_bytes_resulting; + if (!base64_decode_quad(out, &num_bytes_resulting, ctx->data)) { + ctx->error_encountered = 1; + return -1; } - eof++; - if (eof > 2) { - /* There are, at most, two equals signs at the end of base64 data. */ - rv = -1; - goto end; - } - } - if (v == B64_CR) { - ln = 0; - if (exp_nl) { - continue; - } - } + ctx->data_used = 0; + bytes_out += num_bytes_resulting; + out += num_bytes_resulting; - /* eoln */ - if (v == B64_EOLN) { - ln = 0; - if (exp_nl) { - exp_nl = 0; - continue; - } - } - exp_nl = 0; - - /* If we are at the end of input and it looks like a - * line, process it. */ - if ((i + 1) == in_len && (((n & 3) == 0) || eof)) { - v = B64_EOF; - /* In case things were given us in really small - records (so two '=' were given in separate - updates), eof may contain the incorrect number - of ending bytes to skip, so let's redo the count */ - eof = 0; - if (d[n - 1] == '=') { - eof++; - } - if (d[n - 2] == '=') { - eof++; + if (num_bytes_resulting < 3) { + ctx->eof_seen = 1; } - /* There will never be more than two '=' */ } + } - if ((v == B64_EOF && (n & 3) == 0) || n >= 64) { - /* This is needed to work correctly on 64 byte input - * lines. We process the line and then need to - * accept the '\n' */ - if (v != B64_EOF && n >= 64) { - exp_nl = 1; - } - if (n > 0) { - /* TODO(davidben): Switch this to EVP_DecodeBase64. */ - v = EVP_DecodeBlock(out, d, n); - n = 0; - if (v < 0) { - rv = 0; - goto end; - } - if (eof > v) { - rv = -1; - goto end; - } - ret += (v - eof); - } else { - eof = 1; - v = 0; - } + if (bytes_out > INT_MAX) { + ctx->error_encountered = 1; + *out_len = 0; + return -1; + } + *out_len = bytes_out; - /* This is the case where we have had a short - * but valid input line */ - if (v < (int)ctx->length && eof) { - rv = 0; - goto end; - } else { - ctx->length = v; - } + if (ctx->eof_seen) { + return 0; + } - if (seof >= 0) { - rv = 0; - goto end; - } - out += v; - } + return 1; +} + +int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, uint8_t *out, int *out_len) { + *out_len = 0; + if (ctx->error_encountered || ctx->data_used != 0) { + return -1; } - rv = 1; - -end: - *out_len = ret; - ctx->num = n; - ctx->line_num = ln; - ctx->expect_nl = exp_nl; - return rv; + + return 1; } -int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, uint8_t *out, int *outl) { - int i; +int EVP_DecodeBase64(uint8_t *out, size_t *out_len, size_t max_out, + const uint8_t *in, size_t in_len) { + *out_len = 0; + + if (in_len % 4 != 0) { + return 0; + } - *outl = 0; - if (ctx->num != 0) { - /* TODO(davidben): Switch this to EVP_DecodeBase64. */ - i = EVP_DecodeBlock(out, ctx->enc_data, ctx->num); - if (i < 0) { - return -1; + size_t max_len; + if (!EVP_DecodedLength(&max_len, in_len) || + max_out < max_len) { + return 0; + } + + size_t i, bytes_out = 0; + for (i = 0; i < in_len; i += 4) { + size_t num_bytes_resulting; + + if (!base64_decode_quad(out, &num_bytes_resulting, &in[i])) { + return 0; + } + + bytes_out += num_bytes_resulting; + out += num_bytes_resulting; + if (num_bytes_resulting != 3 && i != in_len - 4) { + return 0; } - ctx->num = 0; - *outl = i; - return 1; - } else { - return 1; } + + *out_len = bytes_out; + return 1; } int EVP_DecodeBlock(uint8_t *dst, const uint8_t *src, size_t src_len) { - size_t dst_len; + /* Trim spaces and tabs from the beginning of the input. */ + while (src_len > 0) { + if (src[0] != ' ' && src[0] != '\t') { + break; + } - /* trim white space from the start of the line. */ - while (conv_ascii2bin(*src) == B64_WS && src_len > 0) { src++; src_len--; } - /* strip off stuff at the end of the line - * ascii2bin values B64_WS, B64_EOLN, B64_EOLN and B64_EOF */ - while (src_len > 3 && B64_NOT_BASE64(conv_ascii2bin(src[src_len - 1]))) { - src_len--; - } + /* Trim newlines, spaces and tabs from the end of the line. */ + while (src_len > 0) { + switch (src[src_len-1]) { + case ' ': + case '\t': + case '\r': + case '\n': + src_len--; + continue; + } - if (!EVP_DecodedLength(&dst_len, src_len) || dst_len > INT_MAX) { - return -1; + break; } - if (!EVP_DecodeBase64(dst, &dst_len, dst_len, src, src_len)) { + + size_t dst_len; + if (!EVP_DecodedLength(&dst_len, src_len) || + dst_len > INT_MAX || + !EVP_DecodeBase64(dst, &dst_len, dst_len, src, src_len)) { return -1; } @@ -461,21 +436,3 @@ int EVP_DecodeBlock(uint8_t *dst, const uint8_t *src, size_t src_len) { return dst_len; } - -int EVP_EncodedLength(size_t *out_len, size_t len) { - if (len + 2 < len) { - return 0; - } - len += 2; - len /= 3; - if (((len << 2) >> 2) != len) { - return 0; - } - len <<= 2; - if (len + 1 < len) { - return 0; - } - len++; - *out_len = len; - return 1; -} diff --git a/crypto/base64/base64_test.cc b/crypto/base64/base64_test.cc index da016e6694..a608773213 100644 --- a/crypto/base64/base64_test.cc +++ b/crypto/base64/base64_test.cc @@ -15,76 +15,203 @@ #include #include +#include +#include + #include #include #include +enum encoding_relation { + // canonical indicates that the encoding is the expected encoding of the + // input. + canonical, + // valid indicates that the encoding is /a/ valid encoding of the input, but + // need not be the canonical one. + valid, + // invalid indicates that the encoded data is valid. + invalid, +}; + struct TestVector { + enum encoding_relation relation; const char *decoded; const char *encoded; }; // Test vectors from RFC 4648. static const TestVector kTestVectors[] = { - { "", "" }, - { "f" , "Zg==" }, - { "fo", "Zm8=" }, - { "foo", "Zm9v" }, - { "foob", "Zm9vYg==" }, - { "fooba", "Zm9vYmE=" }, - { "foobar", "Zm9vYmFy" }, + {canonical, "", ""}, + {canonical, "f", "Zg==\n"}, + {canonical, "fo", "Zm8=\n"}, + {canonical, "foo", "Zm9v\n"}, + {canonical, "foob", "Zm9vYg==\n"}, + {canonical, "fooba", "Zm9vYmE=\n"}, + {canonical, "foobar", "Zm9vYmFy\n"}, + {valid, "foobar", "Zm9vYmFy\n\n"}, + {valid, "foobar", " Zm9vYmFy\n\n"}, + {valid, "foobar", " Z m 9 v Y m F y\n\n"}, + {invalid, "", "Zm9vYmFy=\n"}, + {invalid, "", "Zm9vYmFy==\n"}, + {invalid, "", "Zm9vYmFy===\n"}, + {invalid, "", "Z"}, + {invalid, "", "Z\n"}, + {invalid, "", "ab!c"}, + {invalid, "", "ab=c"}, + {invalid, "", "abc"}, + + {canonical, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA==\n"}, + {valid, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA\n==\n"}, + {valid, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA=\n=\n"}, + {invalid, "", + "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA=\n==\n"}, + {canonical, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4\neHh4eHh" + "4eHh4eHh4\n"}, + {canonical, + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4\neHh4eHh" + "4eHh4eHh4eHh4eA==\n"}, + {valid, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh\n4eHh4eHh" + "4eHh4eHh4eHh4eA==\n"}, + {valid, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e" + "Hh4eHh4eHh4eA==\n"}, + {invalid, "", + "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eA==" + "\neHh4eHh4eHh4eHh4eHh4eHh4\n"}, + + // A '-' has traditionally been treated as the end of the data by OpenSSL + // and anything following would be ignored. BoringSSL does not accept this + // non-standard extension. + {invalid, "", "Zm9vYmFy-anythinggoes"}, + {invalid, "", "Zm9vYmFy\n-anythinggoes"}, + + // CVE-2015-0292 + {invalid, "", + "ZW5jb2RlIG1lCg===========================================================" + "=======\n"}, }; static const size_t kNumTests = sizeof(kTestVectors) / sizeof(kTestVectors[0]); -static bool TestEncode() { - for (size_t i = 0; i < kNumTests; i++) { +// RemoveNewlines returns a copy of |in| with all '\n' characters removed. +static std::string RemoveNewlines(const char *in) { + std::string ret; + const size_t in_len = strlen(in); + + size_t i; + for (i = 0; i < in_len; i++) { + if (in[i] != '\n') { + ret.push_back(in[i]); + } + } + + return ret; +} + +static bool TestEncodeBlock() { + for (unsigned i = 0; i < kNumTests; i++) { const TestVector *t = &kTestVectors[i]; - uint8_t out[9]; - size_t len = EVP_EncodeBlock(out, (const uint8_t*)t->decoded, - strlen(t->decoded)); - if (len != strlen(t->encoded) || - memcmp(out, t->encoded, len) != 0) { + if (t->relation != canonical) { + continue; + } + + const size_t decoded_len = strlen(t->decoded); + size_t max_encoded_len; + if (!EVP_EncodedLength(&max_encoded_len, decoded_len)) { + fprintf(stderr, "#%u: EVP_EncodedLength failed\n", i); + return false; + } + + std::vector out_vec(max_encoded_len); + uint8_t *out = out_vec.data(); + size_t len = EVP_EncodeBlock(out, (const uint8_t *)t->decoded, decoded_len); + + std::string encoded(RemoveNewlines(t->encoded)); + if (len != encoded.size() || + memcmp(out, encoded.data(), len) != 0) { fprintf(stderr, "encode(\"%s\") = \"%.*s\", want \"%s\"\n", - t->decoded, (int)len, (const char*)out, t->encoded); + t->decoded, (int)len, (const char*)out, encoded.c_str()); return false; } } + return true; } -static bool TestDecode() { - uint8_t out[6]; +static bool TestDecodeBase64() { size_t len; - for (size_t i = 0; i < kNumTests; i++) { - // Test the normal API. + for (unsigned i = 0; i < kNumTests; i++) { const TestVector *t = &kTestVectors[i]; - size_t expected_len = strlen(t->decoded); - if (!EVP_DecodeBase64(out, &len, sizeof(out), - (const uint8_t*)t->encoded, strlen(t->encoded))) { - fprintf(stderr, "decode(\"%s\") failed\n", t->encoded); - return false; + + if (t->relation == valid) { + // The non-canonical encodings will generally have odd whitespace etc + // that |EVP_DecodeBase64| will reject. + continue; } - if (len != strlen(t->decoded) || - memcmp(out, t->decoded, len) != 0) { - fprintf(stderr, "decode(\"%s\") = \"%.*s\", want \"%s\"\n", - t->encoded, (int)len, (const char*)out, t->decoded); - return false; + + const std::string encoded(RemoveNewlines(t->encoded)); + std::vector out_vec(encoded.size()); + uint8_t *out = out_vec.data(); + + int ok = EVP_DecodeBase64(out, &len, out_vec.size(), + (const uint8_t *)encoded.data(), encoded.size()); + + if (t->relation == invalid) { + if (ok) { + fprintf(stderr, "decode(\"%s\") didn't fail but should have\n", + encoded.c_str()); + return false; + } + } else if (t->relation == canonical) { + if (!ok) { + fprintf(stderr, "decode(\"%s\") failed\n", encoded.c_str()); + return false; + } + + if (len != strlen(t->decoded) || + memcmp(out, t->decoded, len) != 0) { + fprintf(stderr, "decode(\"%s\") = \"%.*s\", want \"%s\"\n", + encoded.c_str(), (int)len, (const char*)out, t->decoded); + return false; + } + } + } + + return true; +} + +static bool TestDecodeBlock() { + for (unsigned i = 0; i < kNumTests; i++) { + const TestVector *t = &kTestVectors[i]; + if (t->relation != canonical) { + continue; } + std::string encoded(RemoveNewlines(t->encoded)); + + std::vector out_vec(encoded.size()); + uint8_t *out = out_vec.data(); + // Test that the padding behavior of the deprecated API is preserved. - int ret = EVP_DecodeBlock(out, (const uint8_t*)t->encoded, - strlen(t->encoded)); + int ret = + EVP_DecodeBlock(out, (const uint8_t *)encoded.data(), encoded.size()); if (ret < 0) { - fprintf(stderr, "decode(\"%s\") failed\n", t->encoded); + fprintf(stderr, "EVP_DecodeBlock(\"%s\") failed\n", t->encoded); return false; } if (ret % 3 != 0) { fprintf(stderr, "EVP_DecodeBlock did not ignore padding\n"); return false; } + size_t expected_len = strlen(t->decoded); if (expected_len % 3 != 0) { ret -= 3 - (expected_len % 3); } @@ -96,19 +223,155 @@ static bool TestDecode() { } } - if (EVP_DecodeBase64(out, &len, sizeof(out), (const uint8_t*)"a!bc", 4)) { - fprintf(stderr, "Failed to reject invalid characters in the middle.\n"); - return false; - } + return true; +} + +static bool TestEncodeDecode() { + for (unsigned test_num = 0; test_num < kNumTests; test_num++) { + const TestVector *t = &kTestVectors[test_num]; + + EVP_ENCODE_CTX ctx; + const size_t decoded_len = strlen(t->decoded); + + if (t->relation == canonical) { + size_t max_encoded_len; + if (!EVP_EncodedLength(&max_encoded_len, decoded_len)) { + fprintf(stderr, "#%u: EVP_EncodedLength failed\n", test_num); + return false; + } + + // EVP_EncodeUpdate will output new lines every 64 bytes of output so we + // need slightly more than |EVP_EncodedLength| returns. */ + max_encoded_len += (max_encoded_len + 63) >> 6; + std::vector out_vec(max_encoded_len); + uint8_t *out = out_vec.data(); + + EVP_EncodeInit(&ctx); + + int out_len; + EVP_EncodeUpdate(&ctx, out, &out_len, + reinterpret_cast(t->decoded), + decoded_len); + size_t total = out_len; + + EVP_EncodeFinal(&ctx, out + total, &out_len); + total += out_len; + + if (total != strlen(t->encoded) || memcmp(out, t->encoded, total) != 0) { + fprintf(stderr, "#%u: EVP_EncodeUpdate produced different output: '%s' (%u)\n", + test_num, out, static_cast(total)); + return false; + } + } + + std::vector out_vec(strlen(t->encoded)); + uint8_t *out = out_vec.data(); + + EVP_DecodeInit(&ctx); + int out_len; + size_t total = 0; + int ret = EVP_DecodeUpdate(&ctx, out, &out_len, + reinterpret_cast(t->encoded), + strlen(t->encoded)); + if (ret != -1) { + total = out_len; + ret = EVP_DecodeFinal(&ctx, out + total, &out_len); + total += out_len; + } + + switch (t->relation) { + case canonical: + case valid: + if (ret == -1) { + fprintf(stderr, "#%u: EVP_DecodeUpdate failed\n", test_num); + return false; + } + if (total != decoded_len || memcmp(out, t->decoded, decoded_len)) { + fprintf(stderr, "#%u: EVP_DecodeUpdate produced incorrect output\n", + test_num); + return false; + } + break; - if (EVP_DecodeBase64(out, &len, sizeof(out), (const uint8_t*)"a=bc", 4)) { - fprintf(stderr, "Failed to reject invalid characters in the middle.\n"); - return false; + case invalid: + if (ret != -1) { + fprintf(stderr, "#%u: EVP_DecodeUpdate was successful but shouldn't have been\n", test_num); + return false; + } + break; + } } - if (EVP_DecodeBase64(out, &len, sizeof(out), (const uint8_t*)"abc", 4)) { - fprintf(stderr, "Failed to reject invalid input length.\n"); - return false; + return true; +} + +static bool TestDecodeUpdateStreaming() { + for (unsigned test_num = 0; test_num < kNumTests; test_num++) { + const TestVector *t = &kTestVectors[test_num]; + if (t->relation == invalid) { + continue; + } + + const size_t encoded_len = strlen(t->encoded); + + std::vector out(encoded_len); + + for (size_t chunk_size = 1; chunk_size <= encoded_len; chunk_size++) { + size_t out_len = 0; + EVP_ENCODE_CTX ctx; + EVP_DecodeInit(&ctx); + + for (size_t i = 0; i < encoded_len;) { + size_t todo = encoded_len - i; + if (todo > chunk_size) { + todo = chunk_size; + } + + int bytes_written; + int ret = EVP_DecodeUpdate( + &ctx, out.data() + out_len, &bytes_written, + reinterpret_cast(t->encoded + i), todo); + i += todo; + + switch (ret) { + case -1: + fprintf(stderr, "#%u: EVP_DecodeUpdate returned error\n", test_num); + return 0; + case 0: + out_len += bytes_written; + if (i == encoded_len || + (i + 1 == encoded_len && t->encoded[i] == '\n') || + /* If there was an '-' in the input (which means “EOF”) then + * this loop will continue to test that |EVP_DecodeUpdate| will + * ignore the remainder of the input. */ + strchr(t->encoded, '-') != nullptr) { + break; + } + + fprintf(stderr, + "#%u: EVP_DecodeUpdate returned zero before end of " + "encoded data\n", + test_num); + return 0; + default: + out_len += bytes_written; + } + } + + int bytes_written; + int ret = EVP_DecodeFinal(&ctx, out.data() + out_len, &bytes_written); + if (ret == -1) { + fprintf(stderr, "#%u: EVP_DecodeFinal returned error\n", test_num); + return 0; + } + out_len += bytes_written; + + if (out_len != strlen(t->decoded) || + memcmp(out.data(), t->decoded, out_len) != 0) { + fprintf(stderr, "#%u: incorrect output\n", test_num); + return 0; + } + } } return true; @@ -117,8 +380,11 @@ static bool TestDecode() { int main(void) { CRYPTO_library_init(); - if (!TestEncode() || - !TestDecode()) { + if (!TestEncodeBlock() || + !TestDecodeBase64() || + !TestDecodeBlock() || + !TestDecodeUpdateStreaming() || + !TestEncodeDecode()) { return 1; } diff --git a/decrepit/bio/base64_bio.c b/decrepit/bio/base64_bio.c index 2056138f65..8415bfedb4 100644 --- a/decrepit/bio/base64_bio.c +++ b/decrepit/bio/base64_bio.c @@ -452,7 +452,7 @@ static long b64_ctrl(BIO *b, int cmd, long num, void *ptr) { case BIO_CTRL_WPENDING: /* More to write in buffer */ assert(ctx->buf_len >= ctx->buf_off); ret = ctx->buf_len - ctx->buf_off; - if ((ret == 0) && (ctx->encode != B64_NONE) && (ctx->base64.num != 0)) { + if ((ret == 0) && (ctx->encode != B64_NONE) && (ctx->base64.data_used != 0)) { ret = 1; } else if (ret <= 0) { ret = BIO_ctrl(b->next_bio, cmd, num, ptr); @@ -484,7 +484,7 @@ static long b64_ctrl(BIO *b, int cmd, long num, void *ptr) { ctx->tmp_len = 0; goto again; } - } else if (ctx->encode != B64_NONE && ctx->base64.num != 0) { + } else if (ctx->encode != B64_NONE && ctx->base64.data_used != 0) { ctx->buf_off = 0; EVP_EncodeFinal(&(ctx->base64), (uint8_t *)ctx->buf, &(ctx->buf_len)); /* push out the bytes */ diff --git a/fuzz/CMakeLists.txt b/fuzz/CMakeLists.txt index f315347e1e..5bef3ae97e 100644 --- a/fuzz/CMakeLists.txt +++ b/fuzz/CMakeLists.txt @@ -55,3 +55,12 @@ add_executable( target_link_libraries(client Fuzzer) target_link_libraries(client crypto) target_link_libraries(client ssl) + +add_executable( + read_pem + + read_pem.cc +) + +target_link_libraries(read_pem Fuzzer) +target_link_libraries(read_pem crypto) diff --git a/fuzz/read_pem.cc b/fuzz/read_pem.cc new file mode 100644 index 0000000000..511c4ee060 --- /dev/null +++ b/fuzz/read_pem.cc @@ -0,0 +1,36 @@ +/* Copyright (c) 2016, Google Inc. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION + * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ + +#include +#include +#include + + +extern "C" int LLVMFuzzerTestOneInput(uint8_t *buf, size_t len) { + char *name, *header; + uint8_t *pem_data; + long pem_len; + + BIO *bio = BIO_new_mem_buf(buf, len); + + if (PEM_read_bio(bio, &name, &header, &pem_data, &pem_len) == 1) { + OPENSSL_free(name); + OPENSSL_free(header); + OPENSSL_free(pem_data); + } + + BIO_free(bio); + + return 0; +} diff --git a/fuzz/read_pem_corpus/01270d57eecae64f59b9b27cc06e3f9eaf2304e2 b/fuzz/read_pem_corpus/01270d57eecae64f59b9b27cc06e3f9eaf2304e2 new file mode 100644 index 0000000000..7709f4a36a --- /dev/null +++ b/fuzz/read_pem_corpus/01270d57eecae64f59b9b27cc06e3f9eaf2304e2 @@ -0,0 +1 @@ +-----BEGIN O-------- \ No newline at end of file diff --git a/fuzz/read_pem_corpus/0ab8318acaf6e678dd02e2b5c343ed41111b393d b/fuzz/read_pem_corpus/0ab8318acaf6e678dd02e2b5c343ed41111b393d new file mode 100644 index 0000000000..74e0f12e32 --- /dev/null +++ b/fuzz/read_pem_corpus/0ab8318acaf6e678dd02e2b5c343ed41111b393d @@ -0,0 +1 @@ +! \ No newline at end of file diff --git a/fuzz/read_pem_corpus/0b08765ad46bb11ac55348755ad5c8e4386bd2f3 b/fuzz/read_pem_corpus/0b08765ad46bb11ac55348755ad5c8e4386bd2f3 new file mode 100644 index 0000000000000000000000000000000000000000..80ece3cf04bec41e655d8456ecea7a2db913ac1a GIT binary patch literal 371 zcmdPZ1p+5mcTYbBR;vvr>f!<*0bMQyg)}fyP_X4y01|LMSlZRkMZtlL%O=_LB_&$qgZBDuVSrX zrO03{@1yB8QBzZ0!s>67mEvQoehodddi6>xEp@HLw~-MM)(6_HZfIy~Sy%_(2O9-- z`fcV`t27Pk-f}DJqbSbW@Lc2L2WzlfxLj>P{?zaTYt(f2WV+I%enC@fnw6EJprW0}wZ7W_ r-ujuJf;!L+T@7n4^-ODPO?CBt7i*B4fb1-FD|L{+Az^G4a>5z_u(oWm literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/0bdb9660f74f82a5471210026fdee0b674f1114e b/fuzz/read_pem_corpus/0bdb9660f74f82a5471210026fdee0b674f1114e new file mode 100644 index 0000000000..6f429701ad --- /dev/null +++ b/fuzz/read_pem_corpus/0bdb9660f74f82a5471210026fdee0b674f1114e @@ -0,0 +1,33 @@ +-G +----BEGIN O----- +----(END /!----G +( + 7-- +--BEGIN :4'----- +G +UU -----BEGIN :4'/---- +-----BEIN :4'----- +G +UU-- +--BEGIN :4'----- +G +UU -----BEGIN 24'/---- +----BEGIN :4'----- +G +UU qG +wFUG + fbwFUU QG +wFU QG +wFUG + fbwFUU QG +wFU fbwFUUU G +bwFU f +bwFU U fbwFUU f +bwFU U fbU fbwF fUG + fbwFU f fTwFTU fbwFUf( +FUU f +bwFU U fbwFUU;!(;)-----EN /O!:--- +---BE- NI-GO--- +---* + f +bwFU U fbU fbw-----BEG-F fU \ No newline at end of file diff --git a/fuzz/read_pem_corpus/0c4287915a432e6b50e1c2eb0f4ca037b1730aa0 b/fuzz/read_pem_corpus/0c4287915a432e6b50e1c2eb0f4ca037b1730aa0 new file mode 100644 index 0000000000000000000000000000000000000000..0bcf00c1f5e7a94570e9715df15d882f90e3be3a GIT binary patch literal 394 zcmdPZ1p+5mcTYbBR;vvr>f!<*0bMQyg*0a%RsaGpVGE|gOqh%nkIsBsE%mqk#&*`0 zR;C}UH8!X}|9C?y^M+=KdYZ)6Omz)wxjZdv>x)|U)`xU;*MrOjo9^o8f@+&py^6Jl zl_G<+ypN{WL`_X~39G+RR*H|U`t{7})hn&E)U^`dMn*(fA85C_p`odzXdQeXY!Zk7 zna12|m8N0cTW)226vb5=o@;#kU=4N(m#ZzvpBjE(jhgPBOjnxJFKB8_v$9eYRJ2yy zWM@^R#cHRRAEKyeXRXPmsoC~q2ai=juhyp{)~Wp8)fKcfRDV{k(NbS*t))I+V{&7P zy5dsntNrh-pZO`ML+nt`w6@k%SMPVRz72E|ke#J&rGCQtpLMoareg2!S#s)%P}y8X Ujbn<6i`9)3Rn{sRXiaPd00W11FaQ7m literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/0d583f2aee2e15a7dc7eb93af1ecf44203b537f4 b/fuzz/read_pem_corpus/0d583f2aee2e15a7dc7eb93af1ecf44203b537f4 new file mode 100644 index 0000000000..8782df57c0 --- /dev/null +++ b/fuzz/read_pem_corpus/0d583f2aee2e15a7dc7eb93af1ecf44203b537f4 @@ -0,0 +1,3 @@ +------BEG-* +----BEGIN N )(!a!*)(a':':--!;'---BEGIN )a':'!;'R):u ;qrR)M +* \ No newline at end of file diff --git a/fuzz/read_pem_corpus/0e3deb2e809b535f39efded20697314a29c8335a b/fuzz/read_pem_corpus/0e3deb2e809b535f39efded20697314a29c8335a new file mode 100644 index 0000000000..77d030eba4 --- /dev/null +++ b/fuzz/read_pem_corpus/0e3deb2e809b535f39efded20697314a29c8335a @@ -0,0 +1,7 @@ +- +---BEGIN O----- +----(END--=--END /!-----BE-----END GI 5;!(;)-----END /!--- + +- +6(- + \ No newline at end of file diff --git a/fuzz/read_pem_corpus/0f29362dfb076a14a103e8bc2c9681fac93c237d b/fuzz/read_pem_corpus/0f29362dfb076a14a103e8bc2c9681fac93c237d new file mode 100644 index 0000000000000000000000000000000000000000..c8e019d1452b905282bfd08a04969dcb97b021ff GIT binary patch literal 405 zcmdPZ1p+5mcTYbBg)|N8-f}DJqdYqEZMD?js;l?+yI9|5Zna9&Ft)bV1oB~A6m|V3 zcGi|w8=h-?{9vtadP6JohGvMmhQ!uPbq#B|JS}VMi(2;9>kqB}qprD2k=1I0iMqIe zRlSO}l_G<+ybnmP=?80#4eHN7LiJie^=85Kf*h&K1<|YNHBnPjUBc>bl$GLRtA0H* z>s0>l>IzyKs#a<0yA-3ew4NwhHD2KY>w)-e>uU`ytwoCJszu?VjGO6L?o~11&63m zxE7NZ2ccT7Xeb<#+ElpI$-&~#A>oLBLwSSQ()p4&^eoTAclkWe=ZQv3)e>(zov7BN zxLt>Y!aLeNw4O)9p-^3DV~QuXTC6%YGhb-|C#SD#qpq0zFm|Ze^1%t*9wTd%pROF|19HF`Y%J9wK;=cCL03jHbi{EgF_b}i}3l+ zfBe##Q?xjouh3r)bFq2955qPh-+LYVN3DL@;i91NaET>bz|E`6{N2tzZ;#jRGx4*@ z2~OZC$ZeEz z*3i;gq^J&ctCgkI28a>QHPo#&)%#tnZ!@=ArRhQh)q&1N@t!Hrdr&nS6rXE+{9vta MdV>q-OOV4t0I?8PcK`qY literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/217d0e120e43e1899a8ab51009de55038fe52789 b/fuzz/read_pem_corpus/217d0e120e43e1899a8ab51009de55038fe52789 new file mode 100644 index 0000000000..b66cf6b857 --- /dev/null +++ b/fuzz/read_pem_corpus/217d0e120e43e1899a8ab51009de55038fe52789 @@ -0,0 +1,15 @@ +-----BEGIN :T!(!*!*z:'*:Ͱ:!m*O*;:) +O*;:) + :(/!;!;7();':['H 'G)MG'yO )o(*(*-------END :) +O*;:) +-----BEGINO*;:) + + + :(/!;!;O*;:) +-----BEGIN :(/!;!;6();':['H('G)MG'yO )(*(*----- +O*;:) + +----BEGIN O!:'U('((/!;!;6();'8('H('1)MG'O!*;:) +:(-/!;!;6();':('H('G)MG'yO-----BEGIN----::(O*;:) +;(j-7();';['H('G/!;!;6();':(';)MG'yO )o(*(*----- +-----END O*;;)''D;:f(;w:;;V*H \ No newline at end of file diff --git a/fuzz/read_pem_corpus/2493849afd1697d00f4c2f36af4522e6a9ba46b8 b/fuzz/read_pem_corpus/2493849afd1697d00f4c2f36af4522e6a9ba46b8 new file mode 100644 index 0000000000000000000000000000000000000000..08dee539a8cd66cc4e11207ba4db1e762590345f GIT binary patch literal 512 zcmdPZ<q!m?c2PFeXrW z8W4q)yM=&tx^uaOLd+)8NRTq1bs!_5Omri`?t@Fh8AcEmkW_zuLo4%!W{7&4#MVr8 z4QshPEogR$QiB|P0)*4od4A$~KnqCt%)g`R{Mp-EWRVo0@ J)CHNY0006Jdo2I} literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/27c891aa76f51487ada28b1fc69ac13c7315c933 b/fuzz/read_pem_corpus/27c891aa76f51487ada28b1fc69ac13c7315c933 new file mode 100644 index 0000000000000000000000000000000000000000..ffa0411365174fb5d7ee348a5d36d7d41beacacf GIT binary patch literal 358 zcmXw#Pbh=NMJ%q3cdPqAY#r z8w6g~8+l%63NQAp&rS$;i^+;F*aP~vsAGvjF2m8$h)nVQyq5-L{1t~9ASnsa!^F%L zv=e}!MCF_Kjhbam*Md4v11jka!@w1&Q?A#WjmW7>?+k**9<}!g^pdFqrL!&{Rqu*w z^AUFxG$u-H+f~Uc32^MXncx;Pc VtlXCeH2z=zm$WRCXwo{M{y#68b9ev% literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/27ec8c0bf073ec4ea4f5ee15fbaca4fb32f728b3 b/fuzz/read_pem_corpus/27ec8c0bf073ec4ea4f5ee15fbaca4fb32f728b3 new file mode 100644 index 0000000000..db3ca3cc93 --- /dev/null +++ b/fuzz/read_pem_corpus/27ec8c0bf073ec4ea4f5ee15fbaca4fb32f728b3 @@ -0,0 +1 @@ +O!:'U('((/!;!;6();'8('H('G)MG'yO )o(*(*;:)O!:'U(*:!::(';'(;'(:(/))(-----BEGIN (/!;!;6();':('!;!;H('G)MG'yO*o( )(*;:)*:!::(';'(6;)(!:):"PZw;:P; :'::7!))vǾ:kqU;|:؎8*:;s(f!;;)j*:: \ No newline at end of file diff --git a/fuzz/read_pem_corpus/2904f9b6f6cb0ddf9248537b4fb4b2170174b74f b/fuzz/read_pem_corpus/2904f9b6f6cb0ddf9248537b4fb4b2170174b74f new file mode 100644 index 0000000000..0e95e43bff --- /dev/null +++ b/fuzz/read_pem_corpus/2904f9b6f6cb0ddf9248537b4fb4b2170174b74f @@ -0,0 +1,3 @@ +-----BEGIN x:*****f(~'!5 ) );'*E--------------- + +-----E::T***f(~'!5); C'*E;:;h0G;G('!*'l*)!:!:;'4C*3:)((#(':(''u*!!!;!;) \ No newline at end of file diff --git a/fuzz/read_pem_corpus/2a7b8759f3267d3ddca22e936df0b21eabb1aeed b/fuzz/read_pem_corpus/2a7b8759f3267d3ddca22e936df0b21eabb1aeed new file mode 100644 index 0000000000000000000000000000000000000000..e07812af507c943adc595c10dd582155c60427c3 GIT binary patch literal 471 zcmZvZKS~ zuEoOThM-!mXeb<#+Elo#$-&~#LE(^JLv=&h(w$j2_$=?syL{gF^F|`obS9F=Q>~g7 zw`I3bcul)TYx78`zM8czkyE1oP%~~M-GEb9}T465cXvcj-G)mz?VM! z_KT}d(dlryQNQ0Q#^?MFjM-yZ8FU=U+u>!0Zb5Wkl_l%Izh~F^>lcQ+-CMoM)VG)u z9Kl176Le;mW5ksMCr|Lu{8Dr9v6T6QY@JR^pXKTsI1K;(>3Nq??0wTW^*Z!l<7T># qfkC=v0<36x_Lc4m_rK%@-y3$Qsekg%J$^k)W<)&4A5:;}!;*:!;'y 'x'`)*a;:!E!*)(*)()''*:E*:1***!*z:H:*'*$'F';'*T!):- \ No newline at end of file diff --git a/fuzz/read_pem_corpus/318bcf81a2b6fa0ce680ec82cf11e8a6e4bd93f0 b/fuzz/read_pem_corpus/318bcf81a2b6fa0ce680ec82cf11e8a6e4bd93f0 new file mode 100644 index 0000000000..36b112609e --- /dev/null +++ b/fuzz/read_pem_corpus/318bcf81a2b6fa0ce680ec82cf11e8a6e4bd93f0 @@ -0,0 +1,4 @@ +-----BEGIN O----- +----(END /!-----BEGI 2;!(;)-----ED/ !--- + +-6( \ No newline at end of file diff --git a/fuzz/read_pem_corpus/358ff4aeb6903affa5d080c317c3270ac4f13121 b/fuzz/read_pem_corpus/358ff4aeb6903affa5d080c317c3270ac4f13121 new file mode 100644 index 0000000000..be1427a10e --- /dev/null +++ b/fuzz/read_pem_corpus/358ff4aeb6903affa5d080c317c3270ac4f13121 @@ -0,0 +1 @@ +- \ No newline at end of file diff --git a/fuzz/read_pem_corpus/35bae979e092abdc6b31f8b3c52ddcafa4722a9a b/fuzz/read_pem_corpus/35bae979e092abdc6b31f8b3c52ddcafa4722a9a new file mode 100644 index 0000000000..654203b5d6 --- /dev/null +++ b/fuzz/read_pem_corpus/35bae979e092abdc6b31f8b3c52ddcafa4722a9a @@ -0,0 +1,11 @@ +-----BEGIN O---- +----N!(ED /-----BEGI 6;!(;)----8-END - +---BEGIN O----- +----(END--=--END /!-----BE-----END GI 5;!(;)-----END /!--- + +- +6/!--- + +- +6((- + \ No newline at end of file diff --git a/fuzz/read_pem_corpus/38fccbaee723a06ca137a952843b58d32d35ef25 b/fuzz/read_pem_corpus/38fccbaee723a06ca137a952843b58d32d35ef25 new file mode 100644 index 0000000000..1ddb5fd95e --- /dev/null +++ b/fuzz/read_pem_corpus/38fccbaee723a06ca137a952843b58d32d35ef25 @@ -0,0 +1,2 @@ +-----BEGIN --+----- + \ No newline at end of file diff --git a/fuzz/read_pem_corpus/3aaa3cdd4444fad7e59ba1ac2c0cbe6b60ea1181 b/fuzz/read_pem_corpus/3aaa3cdd4444fad7e59ba1ac2c0cbe6b60ea1181 new file mode 100644 index 0000000000..de6ff53b59 --- /dev/null +++ b/fuzz/read_pem_corpus/3aaa3cdd4444fad7e59ba1ac2c0cbe6b60ea1181 @@ -0,0 +1 @@ +-----BEGIN \ No newline at end of file diff --git a/fuzz/read_pem_corpus/3b981c1e4697103278b32ee4e29e3a7b5225d798 b/fuzz/read_pem_corpus/3b981c1e4697103278b32ee4e29e3a7b5225d798 new file mode 100644 index 0000000000..9f35df061d --- /dev/null +++ b/fuzz/read_pem_corpus/3b981c1e4697103278b32ee4e29e3a7b5225d798 @@ -0,0 +1,14 @@ +O*;:) +O*;:) + :(/!;!;7();':['H 'G)MG'yO )o(*(*-------END :) +-----BEGINO*;:) + + + :(/!;!;O*;:) +-----BEGIN :(/!;!;6();':['H('G)MG'yO )(*(*----- +O*;:) + +----BEGIN O!:'U('((/!;!;6();'8('H('1)MG'O!*;:) +:(-/!;!;6();':('H('G)MG'yO-----BEGIN----::(O*;:) +;(j-7();';['H('G/!;!;6();':(';)MG'yO )o(*(*----- +-----END O*;;)''D;:f(;w:; ,=*'4>;9:(;'5*i)T;:) \ No newline at end of file diff --git a/fuzz/read_pem_corpus/3bff6c9ef0381ea1080fdfb5b4f9c02e95f549b2 b/fuzz/read_pem_corpus/3bff6c9ef0381ea1080fdfb5b4f9c02e95f549b2 new file mode 100644 index 0000000000000000000000000000000000000000..c998e40ad33dabf1daecd80ba2d7a0a18bb8cc21 GIT binary patch literal 325 zcmdPZ1p+5mcTYbBR;vvr>f!<*0bMQyAV>ofz1GIoAY5)W-&RZgZNIUdwWXEm2WyQD z>d!yk(8|1_8KRyhu{Bd&!&)v+%i8*)mc8}*Ll9HIq^q9`s@YccD%KiSiVW8BKAK(= zH8s^Gto}w>DL%I9*E6eEue8!q*GhaF84+Q9pxx?*hNhOHb?|+#Nl=I0W^T1g)3EL> zx3WIUqXTl)afo$VN31{Xw9@4AQ}9=`niZ;{eqTdKak+vm*8rNU9;%_W PiXCjDrn{A*m1hqCqeWy> literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/3cdb51f7ffc8ef0bd03265c3a414069815821d18 b/fuzz/read_pem_corpus/3cdb51f7ffc8ef0bd03265c3a414069815821d18 new file mode 100644 index 0000000000000000000000000000000000000000..60180841a228ab4dccdd81c5e7177961cb7b30ce GIT binary patch literal 418 zcmdPZ<H70@W4h&QdvK* zmIS0j6(D>C1t=eAt~(b<1|$MufSC}*KtWVdm>f_TZYGcoL?PvFAu!oc1vm@NFoLjv zr26w4TA4RAL)6nGwq~kpSj**USzBM!vbSD;2;y)s>FVc#8VFYPD%KiSiVW8BKAK(= zHPt1o{zh3Tg4Dw8fH17xLXGS!txP{yYp8E{{t?NtG*sKHL7IUf4g|=yfxK>HXKiT( KlHfwI))WBh&=3_0 z=VIaF5LC-4L4|`-n+lgTIanMzBpmT;sBTDIx?dDH^iB`&@_C=n8w9oKNOd01?9r^a zExUxmo7y!T?SptMmQDxLQOqP47Mm^P?0k>5>QB2Z-;CWVwz_i$H|{kcKaKHARsWX7 z%chc&C6>I~-9+y^K%Gia50EI@uWe;dS8TKr!%w0P%5FZ$w}h2_m}j+r18=+ekkWYB44L-(rblS1Fyrsdv?L)6!NBb_I3PEjZ`N2 tU(0DQ%tj`_s#X?Ws_aPgO>&d)O-DrTpZ=4Nwdb8V5zn!q+9zhV{sv4Unv?(l literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/411752e433e18c27f83b9728256082c2ffb77ebb b/fuzz/read_pem_corpus/411752e433e18c27f83b9728256082c2ffb77ebb new file mode 100644 index 0000000000..cc8856077b --- /dev/null +++ b/fuzz/read_pem_corpus/411752e433e18c27f83b9728256082c2ffb77ebb @@ -0,0 +1,15 @@ +O*;:) +O*;:) + :(/!;!;7();':['H 'G)MG'yO )o(*(*-------END :) +-----BEGINO*;:) + + + :(/!;!;O*;:) +-----BEGIN :(/!;!;6();':['H('G)MG'yO )(*(*----- +O*;:) + +----BEGIN O!:'U('((/!;!;6();'8('H('1)MG'O!*;:) +:(-/!;!;6();':('H('G)MG'yO-----BEGIN----::(O*;:) +;(j-7();';['H('G/!;!;6();':(';)MG'yO )o(*(*----- +-----END O*;;)''D;:f(;w:; ,=*'4>;9:(;'5*i)T;:G +) \ No newline at end of file diff --git a/fuzz/read_pem_corpus/42650de48dbf62d86a91ede484061f834214915d b/fuzz/read_pem_corpus/42650de48dbf62d86a91ede484061f834214915d new file mode 100644 index 0000000000..bc4db0e67b --- /dev/null +++ b/fuzz/read_pem_corpus/42650de48dbf62d86a91ede484061f834214915d @@ -0,0 +1,2 @@ +-----BEGIN O----- +----(END------B /!----BEGIN 6;!(;)-----END EGIN ---/!;!6(-BEGIN O \ No newline at end of file diff --git a/fuzz/read_pem_corpus/488ae502baabc6506f8722dcdc5294940fa5d588 b/fuzz/read_pem_corpus/488ae502baabc6506f8722dcdc5294940fa5d588 new file mode 100644 index 0000000000000000000000000000000000000000..ec5064dcd3478caee6d5a15253f37fadb8376612 GIT binary patch literal 275 zcmdPZ1p+5mcTYbBg)|N8-f}DJqdYqEZMD?j_M6yQTUwcZu-4e1{`}(&t;`#mA?g|u zTQk))tmU$_tgSC<*;}ta1TsLEi`8m_iMqG|gkx2&Vr`|!U@h;X=`~SPQ(eO9@0=(r z#m83tV0o~0=?YfJ_UV~fr-Du90xJ2XtLy6LqM&M(roKxtN=xgBqE+J+kOa)BTVHEv zX)RJzhq}_r(rN=l^K%V#Yfbfj7wg;1tyXEe5J7dIgHb$Y3iKFM%?8Ei8XrGctDD~7 K0{Rc+q!0ipa#oB0 literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/4aa25eda7560bbd746d9a69b63965c0de21bb53e b/fuzz/read_pem_corpus/4aa25eda7560bbd746d9a69b63965c0de21bb53e new file mode 100644 index 0000000000..8935731f9b --- /dev/null +++ b/fuzz/read_pem_corpus/4aa25eda7560bbd746d9a69b63965c0de21bb53e @@ -0,0 +1,34 @@ +-----BEGIN O----- +-( +-(END /!----G +( + (-- +( +BEGIN :4'----- +G +UU -----BEGIN :4'/---- +-----BEIN :4'----- +G +UU-- +--BEGIN :4'G +----- +G +UU -----BEGIN 24'/---- +-----BEGIN :4'----- +G +UU QG +wFUG + fbwFUU QG +wFU QG +wFUG + fbwFUU QG +wFU fbwFUUU G +bwFU f +bwFU U f fbwFUU f +bwFU U fbU fbwF fUG + fbwFU f fTwFTU fbwFUfbwFUU f +bwFU U fbwFUU;!(;)-----EN /O!:--- +---BE- NI-GO--- +---* + f +bwFU U fbU fbw-----BEG-F fU \ No newline at end of file diff --git a/fuzz/read_pem_corpus/4b32aa9edbd17b2d63390a41cc98739be7d45596 b/fuzz/read_pem_corpus/4b32aa9edbd17b2d63390a41cc98739be7d45596 new file mode 100644 index 0000000000..0240c224ea --- /dev/null +++ b/fuzz/read_pem_corpus/4b32aa9edbd17b2d63390a41cc98739be7d45596 @@ -0,0 +1,7 @@ +-----BEGIN :4'----- + f uf f - +;3;w: ,=*'3>;9:5;('*i)T'fi'(;n*;;*?;----- +-----END :4'----- +:$;(:!@;L)J))':Z:!:.6'y:*'*aYXX;:()*!;S------BEGIN :f(;w:; ,=*'3>;9:(;i'(; +E=BEGI(N-----)GIԂ')*::!!;!>:r*>!oT#!>;):)) :pэ*;e' *(%y*';*'(d'!;Տ;N 'i'(; +%i;;)''D;:;;)j':';;ki!'!''D;m!!('4!$!0* \ No newline at end of file diff --git a/fuzz/read_pem_corpus/4d43fa4e63042871afdb387b75a8845d47b46d18 b/fuzz/read_pem_corpus/4d43fa4e63042871afdb387b75a8845d47b46d18 new file mode 100644 index 0000000000000000000000000000000000000000..23ab556b4c4f2f243794be7f94c2e842ef78a40d GIT binary patch literal 315 zcmdPZ1p+5mcTYbBR;vvr>f!<*0bMQy1%Tmmv?W`@WOg~s_Y*2sx z@rG9B4b2esG>NU5>KfK^d0N)i7q#rI*B^rD1(U9RE~qA2)vH)*SSd1C%ll}0P1Mv> zm$3R9Wu^Gos$b8nUcJ&vOI<7RZDd4*^?`P)8ycEgiq^sR!6reScbmD@Dow+>x7^D5 zD31=vRmUOLX&tftw9`tH%TK{y(P~zxhWdRCA&uvA^%boZttXnj)zGw7x6;_cr|zMl z?yl)8I>UY6>x=4@{+jt3T8$dVp}M!Px#pUHC{npU*pshSK|8)H1&k2U8+pYEqOWru@i3s1+C7+~hJ+ zk^^zuR`cWJfEEXa=pJ2M+r^@AbdYQLO=i`z zP&X?{6rNyu!G^#ww)#`%ltKf-%A;;5W^_?L8EpXKBM-5Q2qAgTj2qISJc(JiiZz(J zX(>=*CCd?|)Yt>=;oWs`B znd$peU4=Ce9g!9psw0e4w6>7z=Fx6l#(h@^WN<_|oqk!(w$UWa*>f!<*0bMQyg*09ewl=mdx6)F7+iz@VZE0ot!CGU3`ty%B zv@&mKhN!1WY|T{Hu$IfyvbMgcWpBOy5JWSWboFyVHPWiyT1CT3k-=KtN7HMfrlz`t z)!!(q$5#D%X7%coKufd|-$q76SRZJ&x}l+|rDz>|A8ZiRdAFHcthrZGH>Rj7F15be|K9qU zhWb`TKlMxnYcBOnYimt)^?ny?kmG>tEOl#jE9-wJvc)nLdl&znC8w?kmCjXEJf@+z PSlw7rWv!xt*2Go-54d#o literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/5891dd7c6715eca7f427ed9267de9da72b8e82e8 b/fuzz/read_pem_corpus/5891dd7c6715eca7f427ed9267de9da72b8e82e8 new file mode 100644 index 0000000000..fe31431959 --- /dev/null +++ b/fuzz/read_pem_corpus/5891dd7c6715eca7f427ed9267de9da72b8e82e8 @@ -0,0 +1,15 @@ +-----BEGIN :T!(!*!*z:'*:Ͱ:!m*O*;:) +O*;:) + :(/!;!;7();':['H 'G)MG'yO )o(*(*-------END :) +-----BEGINO*;:) + + + :(/!;!;O*;:) +-----BEGIN :(/!;!;6();':['H('G)MG'yO )(*(*----- +O*;:) + +----BEGIN O!:'U('((/!;!;6();'8('H('1)MG'O!*;:) +:(-/!;!;6();':('H('G)MG'yO-----BEGIN----::(O*;:) +;(j-7();';['H('G/!;!;6();':(';)MG'yO )o(*(*----- +-----END O*;;)''D;:f(;w:;;*H----- + \ No newline at end of file diff --git a/fuzz/read_pem_corpus/58bdb0aea139a2790c2e1a3b25e302892a6c4b55 b/fuzz/read_pem_corpus/58bdb0aea139a2790c2e1a3b25e302892a6c4b55 new file mode 100644 index 0000000000000000000000000000000000000000..2a9c6c51dbff541ed8390aa945b1166587242792 GIT binary patch literal 439 zcmdPZ1p+5mcTYbBR;vvr>f!<*0bQ<81qFq)q;j`VI70!#0t$nX0#MG_&f3z-^ndKGI8D@6utc^^%$ ziJIyXR)3?c6dzml>zUQ7S6XSQYbCyojEJy4&~9}@Q)+C_|!c#)ZI0G-S^E9eSJ~A(qA)QL#t8aI8gUzpzbv{{onS3eF-+33+y#6FdGtP z{#GCk7sx;^T`u+e8deB9(5&ci-w(Ed6JZ6&f!iT&x9YLdP`BL3cU}FKhV}H9nin(_ gt!8R2dTTXBDQIfcf{t=)s{m^SD|J^Zkk1bR0B9wO2LJ#7 literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/5c720dc0326e4ffa322f706337df9bc87f42fd96 b/fuzz/read_pem_corpus/5c720dc0326e4ffa322f706337df9bc87f42fd96 new file mode 100644 index 0000000000000000000000000000000000000000..32ddacab9ae32c5d8025af85e317c4a13f7af88e GIT binary patch literal 481 zcmZvZKSFi!2VV zV-3lvs4ndKXvcdi{t?=s0LB*>2TzMWFuT)Yej?*kM$SXqwLOC&CXaki*b7_pNAYrChf?E!#P3g!IGD38U9IMKa~yfBWo$ODP&(_0P{l w{&D;t_)aiPmQjF3Ei6y#p6I|!ZUesUh%)=9f8pcj^RASL=aYw}Pt5K74X+oR7ytkO literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/667da9df1cde33d635bbde1986827573ed686a7e b/fuzz/read_pem_corpus/667da9df1cde33d635bbde1986827573ed686a7e new file mode 100644 index 0000000000..e0f7f03577 --- /dev/null +++ b/fuzz/read_pem_corpus/667da9df1cde33d635bbde1986827573ed686a7e @@ -0,0 +1,6 @@ +O*;:) +-----BEGIN :(/!;!;6();':['H('G)MG'yO )o(*(*----- +O*;:) + +----BEGIN O!:'U('O*;:) +-----BEGIN :(/!(( \ No newline at end of file diff --git a/fuzz/read_pem_corpus/66f8b696c46c10a6db20b690e4431b72745f4760 b/fuzz/read_pem_corpus/66f8b696c46c10a6db20b690e4431b72745f4760 new file mode 100644 index 0000000000..1a3eaae40e --- /dev/null +++ b/fuzz/read_pem_corpus/66f8b696c46c10a6db20b690e4431b72745f4760 @@ -0,0 +1,7 @@ +-----BEGIN !:T(!*!*z:H----- +F'*T!:m*;*c:>:;}!;*Z:!;'y 'x'`)*a;:!E!*)('---+---- +*)()''*:E*:1**';)*(;*-----vBEGIN --+---'---+------/ + +-----BEGIN --+---'---+------- + + \ No newline at end of file diff --git a/fuzz/read_pem_corpus/699044ddfe4887d6081ce2a36c1302814294eb68 b/fuzz/read_pem_corpus/699044ddfe4887d6081ce2a36c1302814294eb68 new file mode 100644 index 0000000000..3e36ec287b --- /dev/null +++ b/fuzz/read_pem_corpus/699044ddfe4887d6081ce2a36c1302814294eb68 @@ -0,0 +1,15 @@ +--* +--* +BEGIN -* +a!*)(-----BE-* + +----BEGIN N --* +--* +BEGIN -* +a!*)(-----BE-* + +----BEGIN N )(!a!*)(a':':--!9'---BEGIN )a'-* +a!*)(--:'!;'R):w (;Rrq)---B)(!a!*)(a':'E-* + +----BEGIN N :--!9'---BEGIN )a')(!-* + \ No newline at end of file diff --git a/fuzz/read_pem_corpus/6d1d12ef00c585b4c859479bfa2522f4a447d907 b/fuzz/read_pem_corpus/6d1d12ef00c585b4c859479bfa2522f4a447d907 new file mode 100644 index 0000000000..3c91ae4434 --- /dev/null +++ b/fuzz/read_pem_corpus/6d1d12ef00c585b4c859479bfa2522f4a447d907 @@ -0,0 +1,5 @@ +-----BEGIN --+---'------BEGIN --+---'---+------- + +-----BEGIN :T!(!**z:H_t);~*N?!:m*;*'----+------/ + +- \ No newline at end of file diff --git a/fuzz/read_pem_corpus/6d67bafd83bed7aadd641417671e6864dc87073c b/fuzz/read_pem_corpus/6d67bafd83bed7aadd641417671e6864dc87073c new file mode 100644 index 0000000000..50119ec34e --- /dev/null +++ b/fuzz/read_pem_corpus/6d67bafd83bed7aadd641417671e6864dc87073c @@ -0,0 +1,16 @@ +O*;:) +O*;:) + :(/!;!;7();':['H 'G)MG'yO )o(*(*-------END :) +-----BEGINO*;:) + + + :(/!;!;O*;:) +-----BEGIN :(/!;!;6();':['H('G)MG'yO )o(*(*----- +O*;:) + +----BEGIN O!:'U('((/!;!;6();'8('H('G)MG'O!*;:) +:(-/!;!;6();':('H('G)MG'yO-----BEGIN----::(O*;:) +;(j-7();';['H('G/!;!;6();':(';)MG'yO )o(*(*----- +-----END O*;:)Ĺ + +----B--E-6-BG \ No newline at end of file diff --git a/fuzz/read_pem_corpus/6dcb7976d9af4a72b3667926f1fe7642c75685b2 b/fuzz/read_pem_corpus/6dcb7976d9af4a72b3667926f1fe7642c75685b2 new file mode 100644 index 0000000000000000000000000000000000000000..2090fe206801202f71d18e62f50cacb109ffe0c4 GIT binary patch literal 362 zcmdPZ1p+5mcTYbBR;vvr>f!<*0bMQyg*1P~UTb6Paw{I4`LZ~KkytSzlfKUiyQ zP=EgMhF0bc%@Fl8iLIIH8rE`oTGrMVwd}3eAA)EHldgU)sD@hAt5|DTDKc2g`)GPi z)YMd$u=*QirTEyYU(c*wz0yicT`TczWJHAZfp)7K8k$;)*1`9|CP7_zo4M60O~bmk z+{*eWimNs}*ZBCs8tfDTP#ztck%C8a_Wju>0Cv{V;YK!)d9P^ Ban}F< literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/6e6aa5ec1653a57a37c043255ab834f6b2228b80 b/fuzz/read_pem_corpus/6e6aa5ec1653a57a37c043255ab834f6b2228b80 new file mode 100644 index 0000000000..7ad3f5c39b --- /dev/null +++ b/fuzz/read_pem_corpus/6e6aa5ec1653a57a37c043255ab834f6b2228b80 @@ -0,0 +1,2 @@ +-----BEGIN O!:'U('((/!;!;O!:'U('((/!;!;3();':('H('GO*;:) +-----BEGIN :(/!;!;6();':['H('G)MG'yO )o(*(*)MG'----- \ No newline at end of file diff --git a/fuzz/read_pem_corpus/729be2837328d9f25597b1d605188bc724c632e6 b/fuzz/read_pem_corpus/729be2837328d9f25597b1d605188bc724c632e6 new file mode 100644 index 0000000000..6f38622941 --- /dev/null +++ b/fuzz/read_pem_corpus/729be2837328d9f25597b1d605188bc724c632e6 @@ -0,0 +1,6 @@ +O*;:) +-----BEGIN :(/!;!;6();':['H('G)MG'yO )o(*(*----- +O*;:) + +----BEGIN O!:'U('((/!;!;6();'8('H('G)MG'O*;:) +:(-/!;!;6();':('H('G)MG'yO-----BEGIN----::(----BEGIN ;(j-/!;!;6();':('; \ No newline at end of file diff --git a/fuzz/read_pem_corpus/74a4f38726a49f3a8c06763d58d8fc229b2aa915 b/fuzz/read_pem_corpus/74a4f38726a49f3a8c06763d58d8fc229b2aa915 new file mode 100644 index 0000000000..a88821da31 --- /dev/null +++ b/fuzz/read_pem_corpus/74a4f38726a49f3a8c06763d58d8fc229b2aa915 @@ -0,0 +1,3 @@ +-----BEGIN --+---'---+------- + + \ No newline at end of file diff --git a/fuzz/read_pem_corpus/74b9536c60def2f9cb8e83512b80ff8406d12567 b/fuzz/read_pem_corpus/74b9536c60def2f9cb8e83512b80ff8406d12567 new file mode 100644 index 0000000000000000000000000000000000000000..fc048fe483c74771bac3412067b0349bcfacec23 GIT binary patch literal 511 zcmaixKWNi&5XCDv*iup#Eu@1zLEiU{{_wxZ9i*k?XH_H}j37}_Q>crDQi4gvRvbjd zLR_l2bP&`fih|O?qFWn?)u~8YLONIo@^er#XkARy)J5oy=8Xwpz+q(2ya_ z6^2Zl0F}X|w?BD#)hT)%j<@O8>xJk7hcIdP=+lUk^px#gaX3kcbk(xxZ(!|Y&u`)@ zXH#r9SH~sxrP~qq;SNNm#hlrNZo$P}$BxRL;>Y&jT`BnWO1*Z|P{MmmU|d12TXlsxh>(X9 zhQ66m1&RQP;#ha>l4#*03G%}9NCutAo|aTuWKtlVySud^;#V@-+ZHmGlD3eIQ#~-? z+l3bY3w~PAoizzt=v?RS{D& zUyWu(){mqpGC_w62;q#sB6DMX&L0N94}L?|vD0hiiXTwibK6u4q(ad)i{{Jaz?DqP E7mw<9-v9sr literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/78e4c8a5d73cf074f243ef12a3669fef1e848121 b/fuzz/read_pem_corpus/78e4c8a5d73cf074f243ef12a3669fef1e848121 new file mode 100644 index 0000000000..890697e640 --- /dev/null +++ b/fuzz/read_pem_corpus/78e4c8a5d73cf074f243ef12a3669fef1e848121 @@ -0,0 +1,10 @@ +-----BEGIN O----- +----(END /!-----BEGI 7;!(;)-----END /O!:-----BEGIN O----- +----(END /!---'U('(:(/!;!;6();':('H('G)MG'yO- + )o(*(*;:)*:!::(';'(;)(!:):"PZg;:; :'::7!))vǾ:--BEGIN 6;!(;)-- +----END /!----- +- +kqU;O!:'U|:؎8*:;s(f!;;)--*---- +----BEGIN O----- +----(END /!-----BEGIN 6- +j*:;!(;)-----END 6( \ No newline at end of file diff --git a/fuzz/read_pem_corpus/7a582440bd4712ab88a3e745f928202707585e6f b/fuzz/read_pem_corpus/7a582440bd4712ab88a3e745f928202707585e6f new file mode 100644 index 0000000000..84f5797cd6 --- /dev/null +++ b/fuzz/read_pem_corpus/7a582440bd4712ab88a3e745f928202707585e6f @@ -0,0 +1,33 @@ +-----BEGIN O----- +-( +-(END /!----G +( + 7-- +( +BEGIN :4'----- +G +UU -----BEGIN :4'/---- +-----BEIN :4'----- +G +UU-- +--BEGIN :4'----- +G +UU -----BEGIN 24'/---- +-----BEGIN :4'----- +G +UU QG +wFUG + fbwFUU QG +wFU QG +wFUG + fbwFUU QG +wFU fbwFUUU G +bwFU f +bwFU U f fbwFUU f +bwFU U fbU fbwF fUG + fbwFU f fTwFTU fbwFUfbwFUU f +bwFU U fbwFUU;!(;)-----EN /O!:--- +---BE- NI-GO--- +---* + f +bwFU U fbU fbw-----BEG-F fU \ No newline at end of file diff --git a/fuzz/read_pem_corpus/7b8e2a5dfa03cc13b70eb5f77d61222c108ab6bd b/fuzz/read_pem_corpus/7b8e2a5dfa03cc13b70eb5f77d61222c108ab6bd new file mode 100644 index 0000000000000000000000000000000000000000..7e27d28435f4417433870045f8f4674a22cb9d60 GIT binary patch literal 446 zcmdPZ1p+5mcTYbBR;vvr>f!<*0bMS4uFy~gg+O<%ayKBYkd_3b!3-`CO9533BxGb~ zZE0ot!CFIo!}E_fv@&mKhN!1WY|T{Hu$IfyvbMgcWpBOy5X5jW>FVc#YNb`ZinWH7 zB7?QOkEYi|O?3&Yzfo3-kFEOk%<9!E{f}!MvHrBvN|Ou0Qn1o^K38ASTG4u<(OV5o zYjvyWEqv-83hM5fzV7=ks=pSk^yk#f*U)Oz0O|(Y3L>~5<^Wk%TIyPfZzCfjtPiwX z-O#wCsikPGs~ZfIxepDL+sv(2X&TmRZtAVFQUqz%J+7v7Z;Kb5W-+hYO97M%J zT&lPf6x1b(Aksn6%@$&H>QE)LgM|AoNFL$E!923Xu z{v|6XOeK^#R=r!ln%;SUIvG;aBr5iOdCk*Rx~$6hy{Ln-z^kPVakLfFtPd|>9{EQ} zom%n1b{=l)`6~zG;C|8TW|wxEzg2$fR7Q_Ld$qTW5$1QqGGs{l$b(}CA@lIHH$VNt zl2i0K9O%-oSE?<}_VYoox!zdO=++QqXZkk?sE1I?ta9TxBJt1Rp z%>e?E>?olY#dv5}K2%;ENO?~`Zd5$fpvRDAu|RqGI%a*8y{8NVFEFak1N*IdKv{Xy z*9g3-H%q+K7G56Mn4c2v6@wL@vlH~sw~i&sg&ar6BQnExi!K_L$rl`Hfutlvj}kN2 z(5?^s5|vNlS8A7a-3aO|3#g<&3`3WoPPkcbwIZi3TyqE-`_$e$&~vT{l+N4TRG$&m z*?je*y3;b36b5 literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/874ed5d633d245b10fdda52c49627b43b3f2e25b b/fuzz/read_pem_corpus/874ed5d633d245b10fdda52c49627b43b3f2e25b new file mode 100644 index 0000000000..a11db388ac --- /dev/null +++ b/fuzz/read_pem_corpus/874ed5d633d245b10fdda52c49627b43b3f2e25b @@ -0,0 +1,14 @@ +-----BEGIN :T!(!*!*z:'*:Ͱ:!m*O*;:) +O*;:) + :(/!;!;7();':['H 'G)MG'yO )o(*(*-------END :) +-----BEGINO*;:) + + + :(/!;!;O*;:) +-----BEGIN :(/!;!;6();':['H('G)MG'yO )(*(*----- +O*;:) + +----BEGIN O!:'U('((/!;!;6();'8('H('1)MG'O!*;:) +:(-/!;!;6();':('H('G)MG'yO-----BEGIN----::(O*;:) +;(j-7();';['H('G/!;!;6();':(';)MG'yO )o(*(*----- +-----END O*;;)''D;:f(;w:;;*H--- \ No newline at end of file diff --git a/fuzz/read_pem_corpus/88581ebac8ffbea71bb83f704e14d789dbc33f37 b/fuzz/read_pem_corpus/88581ebac8ffbea71bb83f704e14d789dbc33f37 new file mode 100644 index 0000000000..66f9ba8255 --- /dev/null +++ b/fuzz/read_pem_corpus/88581ebac8ffbea71bb83f704e14d789dbc33f37 @@ -0,0 +1,17 @@ +-----BEGIN O----- +----(END /!----6( + 7;!(;)-----END /O!:--- +---BEGIN O----- +----(END /!---'U('(:(!/;!;6();':('H('G)MG'yO- + )o(*(*;:)*:!- +:(';'(;)- +(!:):"PZg:; :'::0!))v*Ǿ:--BEGIN 6;!(;)-- +----END /!----- +- +kqU;!:O'U|:؎8*:;s(f!;;)--*---- +----BEGIN O----- +----(END /!-----BEGIN 6 +j- +;!(;)-- +----EN- +6( \ No newline at end of file diff --git a/fuzz/read_pem_corpus/892155ce92d4c3293f48e6fc2097336ba882a0ad b/fuzz/read_pem_corpus/892155ce92d4c3293f48e6fc2097336ba882a0ad new file mode 100644 index 0000000000..fa326656de --- /dev/null +++ b/fuzz/read_pem_corpus/892155ce92d4c3293f48e6fc2097336ba882a0ad @@ -0,0 +1,8 @@ +-:($X: +m---BEGIN )a':':!;'R):u ;:rM'**;)=*;:)O(h!;:;'*0'!:;:((:;*()'(!E(:*t;;::;:!:(''`'O:!*:(&((')V`;'m\:!(@!(*:']A *:a!*)((;!2'):::)**g*!r;S()(;(*(;)*:(;c(!)!':)a':':!;'R):u ;:rM'**;)=*;::5;*j(';*(X) -x +-----BEGIN )'*;'))!':----- + 8x +x + = +-----END )'*;'))!':----- +---BEGIN )a':':!;'R):u ;:rM'**;)=*;:)O(h!;:;'*0'!:ˏ(:;:;(*()'(!E(:*t;;::;:!:(''`'O:!*:(&((')V`;'m\:!(@!(*:']A *:a!*)((;!0'):*::)*g*!r;S()( \ No newline at end of file diff --git a/fuzz/read_pem_corpus/894e092b7fd9f4e0a5911ca106e097d3833d3491 b/fuzz/read_pem_corpus/894e092b7fd9f4e0a5911ca106e097d3833d3491 new file mode 100644 index 0000000000..3c9e422ec7 --- /dev/null +++ b/fuzz/read_pem_corpus/894e092b7fd9f4e0a5911ca106e097d3833d3491 @@ -0,0 +1,3 @@ +Nh'):!X;*:):;!)l;'O2)+'*:):($X: +-----BEGIN !*!((4!ΰ)ϫ((D:(!(W;:w:*S;((':*:((`:(6 !; *(:'3@;2!(J`!:(() )'9:(B)J m!Y(!;)T!);*P)Nh'):!X;*:):;!)l;'O2Nh'):!X;*:)k*!*D'a[!ʬ*#'&:;!)l;)+*;Nh''*:):($X: +-----BEGIN !*!'O2)+'*:) \ No newline at end of file diff --git a/fuzz/read_pem_corpus/8c07d6299f33fee89ab0c82e92e06cd558ade60f b/fuzz/read_pem_corpus/8c07d6299f33fee89ab0c82e92e06cd558ade60f new file mode 100644 index 0000000000..1322c288dd --- /dev/null +++ b/fuzz/read_pem_corpus/8c07d6299f33fee89ab0c82e92e06cd558ade60f @@ -0,0 +1,14 @@ +-----BEGIN :T!(!*!*z:'*:Ͱ:!m*O*;:) +O*;:) + :(/!;!;7();':['H 'G)MG'yO )o(*(*-------END :) +-----BEGINO*;:) + + + :(/!;!;O*;:) +-----BEGIN :(/!;!;6();':['H('G)MG'yO )(*(*----- +O*;:) + +----BEGIN O!:'U('((/!;!;6();'8('H('1)MG'O!*;:) +:(-/!;!;6();':('H('G)MG'yO-----BEGIN----::(O*;:) +;(j-7();';['H('G/!;!;6();':(;)MG'yO )o(*(*----- +-----END O*;;)''D;:f(;w:; \ No newline at end of file diff --git a/fuzz/read_pem_corpus/8e07fb01e0cfa23caddb6b0280c03d0ae2bac57e b/fuzz/read_pem_corpus/8e07fb01e0cfa23caddb6b0280c03d0ae2bac57e new file mode 100644 index 0000000000000000000000000000000000000000..715ec1ccbf2c36abdc147fc538ed2ad2ca61f50e GIT binary patch literal 314 zcmdPZ1p+5mcTYbBR;vvr>f!<*0bMQy1%|HmE=U zctb1mhGvL*n#9&jbq#B|JS}VMi(2;9>kmQnf=O3D7gQ6i>Q$^YtP~ln<$W~0CTgln zSpAK%QhaRHuV+@TUTLMJu9f&UG9tqIK)clqjZ2zZiq^sR!6reScbmD@Dow+>x7^D5 zD38v3psS8UtkXJT{b{F_CYPUrzoONwP!09_8bTV+=jtn3D_T!9d#j;ot!|~Ug-_i> zL)~4|S9FH^zSkGkEB!U|HMANvjze{?x#f!<*0bMQyg|uF4W9xD&9-aBNTIz56jqR*0txP{yYiv+| z{_%!Z<_*md^)!jCnd%zWa(PV*s5R8tX{p+N=scU@oi*8g!O@Ts~Z}cT8h@e_rWGX-FKV0)hbQHy0_fQ z`Y4L4Hayq(_`w?N6fRe=VhumAMoo85rYlYA7c{k|Sy?FxDq1UUva>4EVzpDu4^dRK zv({wO)NFgQgU71iVz1VxBi5<>-_;egG*o|9uF+CoY^|j}Ut@A(in`)b>#P0mt)KZR zs6#AK&$PDIR9EkJu?D#b$j(x?R=2YLcOqLXQ?YmP?^$x{icslXMa5$pii_2a6jjzL J8fZ;y1pp?qbQ}Nx literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/956c8cf1db9220ac8004eb9a75e3ebc1df33a33f b/fuzz/read_pem_corpus/956c8cf1db9220ac8004eb9a75e3ebc1df33a33f new file mode 100644 index 0000000000000000000000000000000000000000..eb4f595171d1f22277b6aee4041d19b03f9f9ff8 GIT binary patch literal 405 zcmY+AKS+XM5Ql?k@I$ICr}|#V-g}SUmNe>)5=xQ8gvcS>Gi-2e3Q=eZvk12!G8$Ua z#Rf-7nga)+u|EzL=oExOetv~?+rd50-S4#S)oLKP9x=^0aCV=#=A6A)M)@ISF6ZZ` z;X{hUJhSTcf9=1yoM(lXsMLf`o29pbiH3?waFr7hcruC1kLcrKwb+%aB1Wj>krU&T znr0G1JQcQBZ=0bco1I3Y5nV*7e%ZY~o9eOFk=n3X6*^T)y68Jb;+b-D3%oP-DNO`7 z#brgr5MKnP>qeikla*V5SP;^EPe&+ga0XpcF&qWkYYeWj(IM!R7H>}skU$?!%Ay5v&_D<1Ml)10FXwZ@W!cl?cwzbNYumIx2*#b RATsK5Q{wSSzVLQ!`~V-efv*4n literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/97c5565f723c0e49787fdec9ed15354760fcb1e6 b/fuzz/read_pem_corpus/97c5565f723c0e49787fdec9ed15354760fcb1e6 new file mode 100644 index 0000000000000000000000000000000000000000..eabac816f9c3cfe2a19cb9ba4a0fd1e525ee70c3 GIT binary patch literal 234 zcmdPZ1p+5mcTYbBg)|N8-f}DJqdYqEZMD?j_M6yQTUwcZu-4e1{`}(&t;`#mA?g|u zTQk))tmX2wtgSC<*;}ta1TsLEi`8m_iMqG|gkx2&Vr`|!U@h;X=`~SPQ(eO9ZQsE{ISxE z(&E$bdZWl`t>}KpDo-<5ORdRTv)9_bkyC5iR9_7ZjYcg+O|6wYn%2(8pDxz0w$@Zv P?{~4j&D?4Q^_3L>+f!<*0bMQy1%Tmmv?W`@WOg~s_Y*2sx z@rG9B4b2esG>NU5>KfK^d0N)i7q#rI*B^rD1(U9RE~qA2)vH)*SSd1C%ll}0P1Mv> zm$3R9Wu^Gos$b8nUcJ&vOI<7RZDd4*^?`P)8yc51wG^#`?}Lqky6-k~t5uqYb#J+q z^-&(3`9NnKhuEie#QM`tD@`sx1%E}WS)m&0_ceqxp3l`+v{tm9X!ce^(^}n1V+)_U zhlaYlrmyG>_kFJ~s#p4J=4)s*Y8;2^UUSnQ>dOt!H9mf@278Um6>PT#&{*|Q4Xssv NU<)-V!;3a literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/a2bc14d4be3bb4f4deb93ddaa77224db305158af b/fuzz/read_pem_corpus/a2bc14d4be3bb4f4deb93ddaa77224db305158af new file mode 100644 index 0000000000000000000000000000000000000000..e0e223d069848b9828cc32f532b52a12986df50e GIT binary patch literal 419 zcmdPZ1p+5mcTYbBR;vvr>f!<*0bQ<81qFq)q;fD-Zmiz>w%^#!+S1DOgSEy6_2(aN zXl35e3{g*$*qW)XVJ(-ZWo>;?%ienZA&71;>FVc#YNl1ainWH7B7?QOkEYi|O?3&Y zzfo3-kFEOk%<9!Et+dp&65mEfL|7kax4NNmNmEPFT30t1Xw-eE18+08TBT`N_m*2( zALY@RZ>yz#9Acf;5$jJotu(p(6#Nxusau6=+}9A&cs^HO(OS`ZqS;#wO>1>4jV*lY z9vbTIn!chl-1oh{s9x!>nXjSMsBs*sd(BOMs3#$Yf_=sXW<$cqA0iGikV}_K{l113 z!VWYmI^6ezZQw+;V*8q#TC1!St$M69)GasiU01)QVLkn&<^>H!tC^aM-dasj3Yr?V TprhQ{D!^L7O5N28f!<*0bMQyg)}gN61HGbS3eg8D;}Nswp!|M`;G0aEv-yH zSZi!hfBx}?R^|=O5cM>Pt(oc?)^d4T*47ub?5z*!>aGWw2G@;ZhgH3bwT6`?EQ)WNrzTdmSG ztb5C?tdF9&YQuAlj~}eTPT_L31^G_H53Ets-IM7`lllcst!Y+Pih_#Piks}LinLhm z6!SwA7457w*)%oVp6uYUD!ACI_34OpD*tzN1uYHLpOtI0)E8T8sn6G#+?b-SxYYV; z|9k6aehTUkOVl&1tu@uv`(3O-ZUVBi)UDJ{SpT!m7RyxZUHp5NoVp@ZI#*Hgn16I%iBp?0DG literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/aa82ef4cf1c3c2d7dd7811803227cc87d2429b3c b/fuzz/read_pem_corpus/aa82ef4cf1c3c2d7dd7811803227cc87d2429b3c new file mode 100644 index 0000000000000000000000000000000000000000..d84db471e75699accc5adfa635918ed25815b500 GIT binary patch literal 358 zcmXw#JxGFK6on%i%E6`@YWZ#r?|msQGsE!G}REHP-H<7 z5m9DP5JU|YAvi=-Q$Ga#EYgolh^_ev-RazO&T<~ptX#Lp>kk?sOPaQ1M-gqNO}!vv zVch`&Vp&=gz`6gnGMo-XfRJK~WO2cp#lL9Dut!h=`gF>w%1Z@2v{<0S-9@`<9 VsOD9Gw*TrsNz*ilrp-ed`~zA8bN&DT literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/ad49ff8fb9ff95a8f110b15702f8209df64f8fad b/fuzz/read_pem_corpus/ad49ff8fb9ff95a8f110b15702f8209df64f8fad new file mode 100644 index 0000000000..99dd9ff640 --- /dev/null +++ b/fuzz/read_pem_corpus/ad49ff8fb9ff95a8f110b15702f8209df64f8fad @@ -0,0 +1,14 @@ +-----BEGIN O----- +----(END /!-----BEGI 7;!(;)-----END /O!:--- +-----END O-=--- +----(END /!---'U('(:(!/;!;6();':('H('G)MG'yO- + )o(*(*;:)*:!- +:(';'(;)- +(!:):"PZg;:; :'::7!))v*Ǿ:--BEGIN 6;!(;)-- +----END /!----- +- +kqU;!:O'U|:؎9*:;s(f!;;)------ +----BEGIN O----- +----(END /!-----BEGIN 6 +j- +;!(;)-----END 6( \ No newline at end of file diff --git a/fuzz/read_pem_corpus/af9207c320f7400ba18dea62fd4af98330ba260b b/fuzz/read_pem_corpus/af9207c320f7400ba18dea62fd4af98330ba260b new file mode 100644 index 0000000000..45332baf9e --- /dev/null +++ b/fuzz/read_pem_corpus/af9207c320f7400ba18dea62fd4af98330ba260b @@ -0,0 +1,3 @@ +-----BEGIN x:*****f(~'!5 ) );'*E-----B----- +-----END f(~'!5 ) C;'*E;:;h0G;G('!*l*)!:!:;'4C*ֈ3:)((#(':(''u*!!x +;!;) \ No newline at end of file diff --git a/fuzz/read_pem_corpus/b034864020154378b78a11122c8f61f81e8009ce b/fuzz/read_pem_corpus/b034864020154378b78a11122c8f61f81e8009ce new file mode 100644 index 0000000000000000000000000000000000000000..eb2588976d5bbc0a7a2f361d0673f0d32ef42ef0 GIT binary patch literal 385 zcmdPZ1p+5mcTYbBR;vvr>f!<*0bMQyg*0AdY;A39U2dhN{|hstR7qS>zUQ7R{|~3N_-m`5n+9x-Rg#hrk0|0@O`jBPg4T+g?5v8kSnU+^ zLlhP5tTov*HQS!-;IS&W*sJyFh;=IecXb6V4b`8OYqZoCTWhJ$*P7gzqOQ2q`fC4s z>t`D3TNVA(GZn14)HAKEHPzMoU93TF1G2N!t<|lp|DDJd%T(-L{Ck$1x*}9MS5fhp RhT>v%V?~vf!?WAQ3JQfhrCb;d18+4OLJGbmuB}3w7sGNJ|3JKmmm` zE)Yur%uIriFwa`l6P-_4-2) zd%>iup9{>D5K*go6>AMEMFwkmA5E``n(7i(f1|7vL2__wAq;DvWp>th7Ap?)xvQzZR|Z?*{-R!gc}x literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/c0348b5dd7aaf73888372a5a6abef82bd0df97b9 b/fuzz/read_pem_corpus/c0348b5dd7aaf73888372a5a6abef82bd0df97b9 new file mode 100644 index 0000000000..4471d0e6fb --- /dev/null +++ b/fuzz/read_pem_corpus/c0348b5dd7aaf73888372a5a6abef82bd0df97b9 @@ -0,0 +1,18 @@ +-----BEGIN O----- +----(END /!-- +---6( + 7;!(;)-----END /O!:--- +---BEGIN O----- +----(END /!---'U('(:(!/;!;6();':('H('G)MG'yO- + )o(*(*;:)*:!- +:(';'(;)- +(!:):"PZg:; :'::0!))v*Ǿ:--BEGIN 6;!(;)-- +----END /!----- +- +kqU;!:O'U|:؎8*:;s(f!;;)--*---- +----BEGIN O----- +----(END /!-----BEGIN 6 +j- +;!(;)-- +----EN- +6( \ No newline at end of file diff --git a/fuzz/read_pem_corpus/c0596e573f43d2bd5a5d038bf4bd7d073141ddf0 b/fuzz/read_pem_corpus/c0596e573f43d2bd5a5d038bf4bd7d073141ddf0 new file mode 100644 index 0000000000..1588358370 --- /dev/null +++ b/fuzz/read_pem_corpus/c0596e573f43d2bd5a5d038bf4bd7d073141ddf0 @@ -0,0 +1,16 @@ +------ +----- +----BEGIN 6( + +----N!(ED /-----BEGI 6;!(;)--'-8-END - +---BEGIN O----- +----(END--=--END -----BEGIN O----- +----(END /!-----BEGIN 6;!(;)-----END //!-----!;BE-----END GI 5;!(;)-----END /!--- + +- +6/!--!----- +6(- + +- +6((- + \ No newline at end of file diff --git a/fuzz/read_pem_corpus/c45f49452fcdf531f2bcfd100645c535e5b71205 b/fuzz/read_pem_corpus/c45f49452fcdf531f2bcfd100645c535e5b71205 new file mode 100644 index 0000000000..887d05d15c --- /dev/null +++ b/fuzz/read_pem_corpus/c45f49452fcdf531f2bcfd100645c535e5b71205 @@ -0,0 +1 @@ +O \ No newline at end of file diff --git a/fuzz/read_pem_corpus/c504659b0454be5eef0594da6a952f8daf347929 b/fuzz/read_pem_corpus/c504659b0454be5eef0594da6a952f8daf347929 new file mode 100644 index 0000000000..e5a9f0514e --- /dev/null +++ b/fuzz/read_pem_corpus/c504659b0454be5eef0594da6a952f8daf347929 @@ -0,0 +1 @@ +-----B-EGIN f( \ No newline at end of file diff --git a/fuzz/read_pem_corpus/c7e4b7f4c3bbc7c6ed4e3366d1d4c16ed44952f1 b/fuzz/read_pem_corpus/c7e4b7f4c3bbc7c6ed4e3366d1d4c16ed44952f1 new file mode 100644 index 0000000000000000000000000000000000000000..4b26afa737b2e94ad464515a00fdf65554f37b3a GIT binary patch literal 358 zcmdPZ1p+5mcTYbBe-Klb3reZq*RaxfK38ASTG4u<*;@@wYjrD)Eqv-88tU$vzBAnS zzrLtm>CdT|uc6hbaa`+&^{1V>T-(>&)LLbwXw_q-p>Da6@4EUe4eRMIH7{r=TFum4 z^ww&MQqa_>1s&zqRsq%uR_a!VtjrZPzkky#oABlMKCA4)Q0p428+{g9iPpsrHPWOM zCt6Ri*38nfva({(TIr$aX`OBTM$77vma_FcO@2l718WpD)UCsV6ywh-s_(KA(_A90 zVKw8lMZ1Qgrbd|h>Q{?v0!cq-()U-i0`V2CJ-@kYXjPUi(^4z~%Yy@u T3$7Fzgu1#4T3S`Q8?>SU+huZM literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/caf489bb8f6f48e35b95032b2824ca0ffc77d26a b/fuzz/read_pem_corpus/caf489bb8f6f48e35b95032b2824ca0ffc77d26a new file mode 100644 index 0000000000000000000000000000000000000000..b30a845eb6b474b27e046df7e37e93def1b0dea4 GIT binary patch literal 314 zcmdPZ1p+5mcTYbBR;vvr>f!<*0bQ<8g-`_rg|u>G^x)|U*6R;}^@2@s^>aZr(W+j>TEj|_!CKx&(`%xp zx`fr=C@aOsR{eTr_3D*YTIyPfZzCfjtPiwX-O#wCsikNgd>?EQ)Ooj=TdmSGtb5C? ztdH{O%m+H^I9QrX>xlKIomQG$ehU7IR8SeXDUsSL3*UZ<@YScIm)xGAXKh%#Ko@;#kU=8*dmn+zA4WO~=p&DAN P{J<7!x?3q)dG-JRk*8uv literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/cc8ceeebb230ca237479e0c3dacafbb5524222e1 b/fuzz/read_pem_corpus/cc8ceeebb230ca237479e0c3dacafbb5524222e1 new file mode 100644 index 0000000000..fe47159b6a --- /dev/null +++ b/fuzz/read_pem_corpus/cc8ceeebb230ca237479e0c3dacafbb5524222e1 @@ -0,0 +1,20 @@ +-6( + +----- +----BEGI) 6( + +----N!(ED /-----BEGI 6;!(;)--'-8-END - +---BEGIN O----- +----(END--=--END -----BEGIN O----- +----(END /!---GB-E-IN 3;!(;)-----END //!-----!;BE-----END GI 5;!(;)-----END ----------BEGIN O---------BEGIN O----- +---- +'U('(:( +/!--- + +- +7/!--!----- +6/!---O!:'U('(- + +(:(/!;!;6();':(- +6((- +'H'G)MG'yO )o(*(*;:)*;!::(';'(; )(!:):"PZw;:P; :'::7!))vǾ:kqU;|:8*a;s(f! \ No newline at end of file diff --git a/fuzz/read_pem_corpus/cf1b3d1ed204deed6c62f41d0e706ee47bc802e0 b/fuzz/read_pem_corpus/cf1b3d1ed204deed6c62f41d0e706ee47bc802e0 new file mode 100644 index 0000000000..b7c794bef2 --- /dev/null +++ b/fuzz/read_pem_corpus/cf1b3d1ed204deed6c62f41d0e706ee47bc802e0 @@ -0,0 +1,7 @@ +O*;:) +-----BEGIN :(/!;!;6();':['H('G)MG'yO )o(*(*----- +O*;:) + +----BEGIN O!:'U('((/!;!;6();'8('H('G)MG'O!*;:) +:(-/!;!;6();':('H('G)MG'yO-----BEGIN----::(O*;:) +;(j-/!;!;6();':('; \ No newline at end of file diff --git a/fuzz/read_pem_corpus/cfc3b1348ca73b8c02d9aed715d1e0681326888c b/fuzz/read_pem_corpus/cfc3b1348ca73b8c02d9aed715d1e0681326888c new file mode 100644 index 0000000000..f994166032 --- /dev/null +++ b/fuzz/read_pem_corpus/cfc3b1348ca73b8c02d9aed715d1e0681326888c @@ -0,0 +1 @@ +O!:'U('((/!;!;6();'8('H('G)MG'yO )o(*(*;O!:'U('((/!;!;6();'8('H('G)MG'yO )o:)O!:'U(*:!::(';'(;'(:(/))(-----BEGIN (/!;!;6();':('!;!;H('G)MG'yO*o( )(*;:()**(*;:)O!:'U(*:!::(';'(;'(:(:!::(';'/))(-----BEGIN (/!;!;6();':('!;!;H('G)MG(6;)(!:):'yO*o( )(*;:)*:!::(';'(6;)(!:):"PZw;:P; :'::7!))vǾ:kqU;|:؎8"PZw;:P; :'*:;s(f!;;)j:*:::7!))vǾ:kqU;|:؎8*:;s(f!; \ No newline at end of file diff --git a/fuzz/read_pem_corpus/d4f0a19ece82b78c82c81eae5b49dc662c6f4a89 b/fuzz/read_pem_corpus/d4f0a19ece82b78c82c81eae5b49dc662c6f4a89 new file mode 100644 index 0000000000000000000000000000000000000000..cc15e7f405f5e33a249d71f83f4d352da03df1db GIT binary patch literal 462 zcmZwEF-X*L6bEpHkQC9D60RYi%lG&D(vg)#yay`cofUBoT@Yqi7wD285_v`%4N;MB zEh;Szfwi0wSU4!Psc@;2gUO*o!Xf{L>ISo=yGn5AO^>&HzkFUeT$q+f+l5%I#>JH$ z6$pcK%P{yX>Y(i4<78csJAp;!`!=zG_*6(24zAnT zYkzCd`UEh(#wge>`qb>fIrC#Fr!vq9ZPw-#`WZhHNUtH}a~>SI0@;Aie){D%cb%fe z;c~Tpf0Sum^;HKVP*aL_A+SD|}+^z;AI*niT*5 literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/d959c647c6a5ea641fec147b0de36187a9d2f8c5 b/fuzz/read_pem_corpus/d959c647c6a5ea641fec147b0de36187a9d2f8c5 new file mode 100644 index 0000000000000000000000000000000000000000..cae86a1d877cacdc85b6f2b3d3127a041f02ba32 GIT binary patch literal 445 zcmdPZ1p+5mcTYbBR;vvr>f!<*0bMS4uFy~gg+O<%ayKBYkd_3b;S2>h3(hdIv$nJ{ z{a~%3zTx@D8(Nt+G(*(WB(`R%Ygo(WX<1ue)Uvl;e+XhWm~{1XLABAUUd39&N|C`@ z-bd4GqNcip)!!&9#m83tdS>JfEwtXsu{H(dey)rnS0N z^cFsK4+V91O<(u@7u8>jR{C>l=4)s*Y5;YEZ3Pir5OaVmD=l@c#J7mJwD{Q;!7V9xPVP@kpfA8Ms>9~_Pv zLU1>kLENMPa+3zwP5Wke`mI5@pNk902MA%XHIOKQc~JEAMPLv>ykb2OYVh%B0QZE6 A{Qv*} literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/de2fb44503aca3f82d5466a9489c0735324b214d b/fuzz/read_pem_corpus/de2fb44503aca3f82d5466a9489c0735324b214d new file mode 100644 index 0000000000000000000000000000000000000000..10df3f62065ef7235383481f9265c7499d1ca611 GIT binary patch literal 358 zcmX|-JxGFa5XK`K%E6`@YI(1Q|NReM+|ur#Aruu-L$IKRXlckHDlm+erWzs?iYzE1 zBFY>Jf~dhF1c!)f>Vu$O^mWJ%NZx70H-7SO8dHsYjHRcYTAv zt9q-*OKsuhfzA0T;a)LV@dZ0U|CDtsQOajIIv$Z3zF&0FuuQ(f!<*0bMQyg)}gNQfXki*V@>++=@qMzO9z}+kRs^YfCHB z57rtR)SrL6p_O?)`uflfW)kxXs*Z zm8N0cTW)226va^+o@;#kU=4N&m#ZzvcN%_ReVXo`OjnxJFKB8_v$9eYRJ2yyWM@^R z#cHRRAEKyeXRXPmsoC~q2ai?3#a^vXN32u%zpE=~X{i3JT%)DF*jh_{zQ*Ln6m`X= z)>r%ATR-ztP={Eeo@s5ZsjlAdVhwT=ke#J&rGCQtpLMoareg2n-?QY@6`|6(ii*cH R6c?)-DypniG|-yZ3IKP!cfkMv literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/e3344ef8d734471ef90b16c719cb0f11af2ce743 b/fuzz/read_pem_corpus/e3344ef8d734471ef90b16c719cb0f11af2ce743 new file mode 100644 index 0000000000..4e5586e5cf --- /dev/null +++ b/fuzz/read_pem_corpus/e3344ef8d734471ef90b16c719cb0f11af2ce743 @@ -0,0 +1,3 @@ +-----BEGIN )a':':!;'R):u ;:rM----- +--* +(!a!*)(-)--BEGIN N )--a \ No newline at end of file diff --git a/fuzz/read_pem_corpus/e45a6df435a1cecae6547f6dcde626a7e706434c b/fuzz/read_pem_corpus/e45a6df435a1cecae6547f6dcde626a7e706434c new file mode 100644 index 0000000000..349cbf1933 --- /dev/null +++ b/fuzz/read_pem_corpus/e45a6df435a1cecae6547f6dcde626a7e706434c @@ -0,0 +1,8 @@ +-:($X: +----BEGIN )a':':!;'R):u ;:rM'**;)=*;:)O(h!;:;'*0'!:;:((:;*()'(!E(:*t;;::;:!:(''`'O:!*:(&((')V`;'m\:!(@!(*:']A *:a!*)((;!2'):::)**g*!r;S()(;(*(;)*:(;c(!)!':)a':':!;'R):u ;:rM'**;)=*;::5;*j(';*(X) -x +-----BEGIN )'*;'))!':----- + 8x +x + x +-----END )'*;'))!':----- +---BEGIN )a':':!;'R):u ;:rM'**;)=*;:)O(h!;:;'*0'!:ˏ(:;(:;*()'(!E(:*t;;::;:!:(''`'O:!*:(&((')V`;'m\:!(@!(*:']A *:a!*)((;!0'):*::)*g*!r;S()( \ No newline at end of file diff --git a/fuzz/read_pem_corpus/e7ef91e03a3aa8bd53b2466a2207a5028185678f b/fuzz/read_pem_corpus/e7ef91e03a3aa8bd53b2466a2207a5028185678f new file mode 100644 index 0000000000000000000000000000000000000000..78850833079ec736626d19e73ad6a65376969127 GIT binary patch literal 430 zcmdPZ1p+5mcTYbBR;vvr>f!<*0bQ<81qFq)q;j`VI70!>GPbj}v@-o*t+7G<`Ntbt znKv{;)YBxkW~ysg%jIcVTVK?&w_bk;Vh)&e^>aZr-Kt*2TEj|_!CKx&(`%xpx`fr= zC@aOsR{eTr_3D*YTIyPfZzCfjtPiwX-O#wCsikPGs~Ze7>ORz|x0ze5(lo5s+|*iS zr3kj-xUTLGAcITmi1nwPR+?OX3jT_-)U84_?rR8XJfEwtXsu{H(d?~;rnS12#uh$x z4-Iv9O<(tYGelosRIl{c%-7Ir)Hn{*{TZlx%}xKe{a{~$&E^7ojSI|%1eL!Ph{FXk zkV}_K{l113!VWYmI^6ezZQw*$0dnAWh}*4ttTfauH}YLqzolV4{iWsw4MnS&nv33A ZO;HM(8nvLK+}bL@TER-))e7YELjZd0h+6;v literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/ebcae74985ccc7905a3800c0db2723392cfd2f2c b/fuzz/read_pem_corpus/ebcae74985ccc7905a3800c0db2723392cfd2f2c new file mode 100644 index 0000000000000000000000000000000000000000..dc16e558f8ce2cb2bd79381c2712fec1a1e94d5f GIT binary patch literal 410 zcmdPZ<H70@W4h&QdvK* zmIS0j6(D>C1sEU5-~!1g0Bt~sp^3uefWj~)kWK@lkaD*Wgbp-CZHUVTf7mB^60Gak^+yDRo literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/ed31baee70d3b705762e808e494b4debf604c5fb b/fuzz/read_pem_corpus/ed31baee70d3b705762e808e494b4debf604c5fb new file mode 100644 index 0000000000..0a71a8eac9 --- /dev/null +++ b/fuzz/read_pem_corpus/ed31baee70d3b705762e808e494b4debf604c5fb @@ -0,0 +1,31 @@ +-----BEGIN O----- +----(END /!----G +( + 7-- +--BEGIN :4'----- +G +UU -----BEGIN :4'/---- +-----BEIN :4'----- +G +UU-- +--BEGIN :4'----- +G +UU -----BEGIN 24'/---- +-----BEGIN :4'----- +G +UU QG +wFUG + fbwFUU QG +wFU QG +wFUG + fbwFUU QG +wFU fbwFUUU G +bwFU f +bwFU U fbwFUU f +bwFU U fbU fbwF fUG + fbwFU f fTwFTU fbwFUfbwFUU f +bwFU U fbwFUU;!(;)-----EN /O!:--- +---BE- NI-GO--- +---* + f +bwFU U fbU fbw-----BEG-F fU \ No newline at end of file diff --git a/fuzz/read_pem_corpus/ee06965764fdf6769657e744a61efe7d60d085fb b/fuzz/read_pem_corpus/ee06965764fdf6769657e744a61efe7d60d085fb new file mode 100644 index 0000000000..cc7aeba88b --- /dev/null +++ b/fuzz/read_pem_corpus/ee06965764fdf6769657e744a61efe7d60d085fb @@ -0,0 +1 @@ +O! \ No newline at end of file diff --git a/fuzz/read_pem_corpus/f123c08d0a46b72fa8989296e82e7aa25ebf16f8 b/fuzz/read_pem_corpus/f123c08d0a46b72fa8989296e82e7aa25ebf16f8 new file mode 100644 index 0000000000..e530a1278e --- /dev/null +++ b/fuzz/read_pem_corpus/f123c08d0a46b72fa8989296e82e7aa25ebf16f8 @@ -0,0 +1,7 @@ +-----BEGIN --+---'-----vBEGIN --+---'---+------/ + +-----+---------BEGIN --+---'---- + ++------- + + \ No newline at end of file diff --git a/fuzz/read_pem_corpus/f18ebc593b87baa03b5e003b7540577001ba6aca b/fuzz/read_pem_corpus/f18ebc593b87baa03b5e003b7540577001ba6aca new file mode 100644 index 0000000000000000000000000000000000000000..fe29dff66cfe608d3b7a377b6f43d5246fccc6be GIT binary patch literal 429 zcmdPZ1p+5mcTYbBR;vvr>f!<*0bQ<81qFq)q;j`VI0Gb5Zmiz>w%^#!+S1DOgSEy6 z_2(aNXl35e3{g*$*qW)XVJ(-ZWo>;?%ienZA&5C(($&ue)pVAMEMFwkmA5E`` zn(7i(f1|7vA6xb7nboUTT4||kCBBV}h_F7;ZgoTBlBSlTwXSY3(5U-Rr`~36wMx^l z?k%^nKFXsr-&RZgIK(=wBi5gGT4{3mDflbSQnw1#xUV6k@qDhnqP3#+M6ATD})_rR&==U2iw4juma@3?Q3pot+Gao&Lx7^5gUHz7Z_4JpT7c>;D fW@;{aYc)kFXlm4gj&f_O0BZ#+byq8p#}5Gj(M5=2 literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/f1903c6e205ba7b902e53b07e08890ec8179cbd5 b/fuzz/read_pem_corpus/f1903c6e205ba7b902e53b07e08890ec8179cbd5 new file mode 100644 index 0000000000..628e26765e --- /dev/null +++ b/fuzz/read_pem_corpus/f1903c6e205ba7b902e53b07e08890ec8179cbd5 @@ -0,0 +1 @@ +'*:'*:-'----BEGIN*:'*: \ No newline at end of file diff --git a/fuzz/read_pem_corpus/f3f2959361766dbfafbb2f99a4f60c920001386e b/fuzz/read_pem_corpus/f3f2959361766dbfafbb2f99a4f60c920001386e new file mode 100644 index 0000000000..47ebb5b436 --- /dev/null +++ b/fuzz/read_pem_corpus/f3f2959361766dbfafbb2f99a4f60c920001386e @@ -0,0 +1,6 @@ +------ +----BEGIN O--------- +----BEGIN O----- +----(END /!-----BEGIN 6;!(;)------- +--END --(END /!-----BEGIN 6;!(;)--/!----- +-- \ No newline at end of file diff --git a/fuzz/read_pem_corpus/f72115838630c70a067e89b98615357fcf19d058 b/fuzz/read_pem_corpus/f72115838630c70a067e89b98615357fcf19d058 new file mode 100644 index 0000000000..ce9b7f8e67 --- /dev/null +++ b/fuzz/read_pem_corpus/f72115838630c70a067e89b98615357fcf19d058 @@ -0,0 +1,45 @@ +-----BEGIN O----- +-( +-(END /!----G +( + (-- +( +BEGIN :4'----- +G +UU -----BEGIN :4'/---- +-----BEIN :4'----- +G +UU-- +--BEGIN :4'G +----- +G +UU -----BEGIN 24'/---- +-----BEGIN :4'----- +G +UU-----BEGIN O----- +-( +-(END /!----G +( + (-- +( +BEGIN :4'----- +G +UU -----BEGIN :4'/---- +-----BEIN QG +wF:4'----- +G +UU-- +--BEGIN :4'G +----- +G +UU -----BEGIN 24'/---- +-----BEGIN :4'----- +G +UU QG +wFUG + fbwFUU QG +wFU UQG +wFUG + fbwFUU QG +wFU fG + b \ No newline at end of file diff --git a/fuzz/read_pem_corpus/f9f61f03681250b015a00df3010b89d2d776d8fc b/fuzz/read_pem_corpus/f9f61f03681250b015a00df3010b89d2d776d8fc new file mode 100644 index 0000000000000000000000000000000000000000..7643d8eb586719dbdac5d090ca25bbb6521f4719 GIT binary patch literal 385 zcmdPZ1p+5mcTYbBR;vvr>f!<*0bMQyg*09yY;A4KYh7-orT(_x*v{J0%JhS^#s>B0 zA8%-7-p~wDPm|c1sjguym#1ZIeNoHadi^1YDPYpo&jrJnCeqpTiV_3N3{t5*Uo(Mo(984+Q9pxx?*hNhOHb?|+#K~Q(zW^T1g)3EL>x3WIU zqch(Y<|w#jRvVsceEeVybdoifD_E0;A6Qb;-IM7`lllcst!Y+Pih|aPo9wKLv{>yF z^FtIB?W{G~G&S3v?BKB~xY(=p>4RT24)H4;VxzsbQtu@uv`(3O-ZUeHj)UDO6tpA6I%f$)OKzF literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/fad7e4071afc1e4f441e2cb65cf9b0da37dcd74e b/fuzz/read_pem_corpus/fad7e4071afc1e4f441e2cb65cf9b0da37dcd74e new file mode 100644 index 0000000000..a6b2ddb603 --- /dev/null +++ b/fuzz/read_pem_corpus/fad7e4071afc1e4f441e2cb65cf9b0da37dcd74e @@ -0,0 +1,2 @@ +'---+----- + \ No newline at end of file diff --git a/fuzz/read_pem_corpus/fb36b0ce1600b9399d552eab916600c239be5ad5 b/fuzz/read_pem_corpus/fb36b0ce1600b9399d552eab916600c239be5ad5 new file mode 100644 index 0000000000000000000000000000000000000000..56195cbdd50ddb57a2bd3b0b0cddcacd0f0d8968 GIT binary patch literal 481 zcmZvZF-X*L6vqu5Qbb)!I0t=!e1GrJpDa`2Jy4PRXNg=x7lano1-2-NNM4~uLs%$W zi%N?_pe<)K6b?ykDxBKnU~%Y>aLB)*x*=`xPBTLMPLJ;!zF$6H&&#RBZ@nC;)+o7S zl_Vq&_0nkG_lk=S$@Bck-p7xGtHaBy6&A?+;$3ajUp7SFO*)ip^W+>JJSjo^114{0 z`J*K7n37Lxl44g?F6(t! zkS-kmY7L$H&BS^MFnNtJ$Q9D(W{)ozk0+eczzt}#HYd<0(fWXT3?a@iWb_(n9h_eJ z!y7wJ(c*BmOn*L2g;%*0V>UrseNF}@t!~rdI-&7&E{pyK=1%tf0v^28&-QHRkwktp zIl_6ofXJ+vGrQL$=&o&VlXGj|DuR`C>@(s8xWNU#8~G1-KUW@<$g_WS03X}atuZ2&mm|3)<_dQK!?Bv& literal 0 HcmV?d00001 diff --git a/fuzz/read_pem_corpus/fb64fef6ea2f835804b69ae3d21fb2cac7e4973f b/fuzz/read_pem_corpus/fb64fef6ea2f835804b69ae3d21fb2cac7e4973f new file mode 100644 index 0000000000..00294ef9f0 --- /dev/null +++ b/fuzz/read_pem_corpus/fb64fef6ea2f835804b69ae3d21fb2cac7e4973f @@ -0,0 +1,9 @@ +-----BEGIN O----- +----(END /!-----BEGI 7;!(;)-----END /O!:-----BEGIN O----- +----(END /!---'U('(:(/!;!;6();':('H('G)MG'yO- + )o(*(*;:)*:!::(';'(;)(!:):"PZg;:P; :'::7!))vǾ:--BEGIN 6;!(;)-----END /!----- +- +kqU;O!:'U|:؎8*:;s(f!;;)------ +----BEGIN O----- +----(END /!-----BEGIN 6- +j*:;!(;)-----END 6( \ No newline at end of file diff --git a/fuzz/read_pem_corpus/fb6d4702bcb98df173527a5f08d5ac829adb2f9f b/fuzz/read_pem_corpus/fb6d4702bcb98df173527a5f08d5ac829adb2f9f new file mode 100644 index 0000000000..cc3cbef272 --- /dev/null +++ b/fuzz/read_pem_corpus/fb6d4702bcb98df173527a5f08d5ac829adb2f9f @@ -0,0 +1,15 @@ +-----BEGIN O----- +----(END /!----6( + 7;!(;)-----END /O!:--- +---BEGIN O----- +----(END /!---'U('(:(!/;!;6();':('H('G)MG'yO- + )o(*(*;:)*:!- +:(';'(;)- +(!:):"PZg;:; :'::7!))v*Ǿ:--BEGIN 6;!(;)-- +----END /!----- +- +kqU;!:O'U|:؎8*:;s(f!;;)--*---- +----BEGIN O----- +----(END /!-----BEGIN 6 +j- +;!(;)-----END 6( \ No newline at end of file diff --git a/fuzz/read_pem_corpus/fd1cc706033976b86a93d2b0c74b15bb2f31fccf b/fuzz/read_pem_corpus/fd1cc706033976b86a93d2b0c74b15bb2f31fccf new file mode 100644 index 0000000000..06f32836da --- /dev/null +++ b/fuzz/read_pem_corpus/fd1cc706033976b86a93d2b0c74b15bb2f31fccf @@ -0,0 +1,18 @@ +-6( + +----- +----BEGIN 6( + +----N!(ED /-----BEGI 6;!(;)--'-8-END - +---BEGIN O----- +----(END--=--END -----BEGIN O----- +----(END /!-----BEGIN 7;!(;)-----END //!-----!;BE-----END GI 5;!(;)-----END ----- +/!--- + +- +7/!--!----- +6(- + +- +6((- + \ No newline at end of file diff --git a/fuzz/read_pem_corpus/ff7dcdb0fc13ddea6e82cac7bf3a0414cb772ded b/fuzz/read_pem_corpus/ff7dcdb0fc13ddea6e82cac7bf3a0414cb772ded new file mode 100644 index 0000000000000000000000000000000000000000..88fd2b031578a043bbd1165e39fa456bc46128e3 GIT binary patch literal 511 zcmdPZ<qe zY$((jXqv%J!)qkSI*4O1j8uRd4rdraSU^(!`3