From c063ec2b6e0852a52d2fd5b65497f3cf6a2a059e Mon Sep 17 00:00:00 2001 From: dumol <1620933+dumol@users.noreply.github.com> Date: Fri, 13 Oct 2023 14:56:46 +0300 Subject: [PATCH] OpenSSL 2023.09 updates. (#175) * Updated brink.conf from server repo. * Updated OpenSSL sources to version 1.1.1w. * Updated OpenSSL 1.1.1 version to build. * Patched OpenSSL 1.0.2 sources for CVE-2023-0286. * OpenSSL version string fixes. * Exclude safety checks for cryptography's OpenSSL and requests. * Exclude one more safety check for certifi. * Updated macOS label to use. * Try specifying the full path to the choco binary. * Try fixing the Python build on macOS 11. * Exclude one more safety check for pywin32. * Try reverting to brink.conf from master. * Revert "Try reverting to brink.conf from master." This reverts commit 12b184528885b074d83186005bffae5924ae7e85. * Try the py2-support branch of compat. * Try fixing more issues on macOS 11. * Patch cryptography for CVE-2023-23931 when built w/o pip. * Try fixing `cryptography` 3.3.2 too for CVE-2023-23931. * Try updating psutil to 5.9.5 on all platforms. * Updated SQLite sources to version 3.43.1. * Updated SQLite Windows DLLs to version 3.43.1. * Updated SQLite version to build to latest: 3.43.1. * Updated zlib sources to version 1.3. * Updated SQLite version to build to latest: 1.3. * Updated external deps sheets. * Updated external deps sheets (bis). * Changes after own review. * Updated external deps sheets after own review. * Try building the ARM64 package on Amazon 2 running on Laja. * Try fixing the ARM64 build. * Try fixing the ARM64 build, take two. * Try fixing the ARM64 build, take three. * Try fixing CVE-2021-3177 for Python. * Try fixing CVE-2023-24329 for Python. * CVE-2021-3177 is not fixable on Windows. * Fix the patch for CVE-2023-24329. * Updated external deps stuff. * Updated comments for safety's ignored opts. * Try sleeping 10s before hacking GHA's macOS Homebrew setup. * Changes after own review. --- .github/workflows/bare.yaml | 9 +- brink.conf | 4 +- brink.sh | 6 +- chevah_build | 79 +- external_deps.csv | 48 +- external_deps.fods | 2672 +-- python-modules/README | 2 +- .../test_python_binary_dist.py | 4 +- .../CVE-2023-23931.patch | 32 + .../.travis-create-release.sh | 0 .../ACKNOWLEDGMENTS | 0 .../CHANGES | 4 + .../CHANGES.SSLeay | 0 .../CONTRIBUTING | 0 .../Configure | 0 .../FAQ | 0 .../GitConfigure | 0 .../GitMake | 0 .../INSTALL | 0 .../INSTALL.DJGPP | 0 .../INSTALL.MacOS | 0 .../INSTALL.NW | 0 .../INSTALL.OS2 | 0 .../INSTALL.VMS | 0 .../INSTALL.W32 | 0 .../INSTALL.W64 | 0 .../INSTALL.WCE | 0 .../LICENSE | 0 .../MacOS/GUSI_Init.cpp | 0 .../MacOS/GetHTTPS.src/CPStringUtils.cpp | 0 .../MacOS/GetHTTPS.src/CPStringUtils.hpp | 0 .../MacOS/GetHTTPS.src/ErrorHandling.cpp | 0 .../MacOS/GetHTTPS.src/ErrorHandling.hpp | 0 .../MacOS/GetHTTPS.src/GetHTTPS.cpp | 0 .../MacOS/GetHTTPS.src/MacSocket.cpp | 0 .../MacOS/GetHTTPS.src/MacSocket.h | 0 .../MacOS/OpenSSL.mcp.hqx | 0 .../MacOS/Randomizer.cpp | 0 .../MacOS/Randomizer.h | 0 .../MacOS/TODO | 0 .../MacOS/_MWERKS_GUSI_prefix.h | 0 .../MacOS/_MWERKS_prefix.h | 0 .../MacOS/buildinf.h | 0 .../MacOS/mklinks.as.hqx | 0 .../MacOS/opensslconf.h | 0 .../Makefile.org | 0 .../Makefile.shared | 0 .../NEWS | 0 .../Netware/build.bat | 0 .../Netware/cpy_tests.bat | 0 .../Netware/do_tests.pl | 0 .../Netware/globals.txt | 0 .../Netware/readme.txt | 0 .../Netware/set_env.bat | 0 .../PROBLEMS | 0 .../README | 0 .../README.ASN1 | 0 .../README.ENGINE | 0 .../TABLE | 0 .../VMS/TODO | 0 .../VMS/VMSify-conf.pl | 0 .../VMS/WISHLIST.TXT | 0 .../VMS/install-vms.com | 0 .../VMS/mkshared.com | 0 .../VMS/multinet_shr.opt | 0 .../VMS/openssl_startup.com | 0 .../VMS/openssl_undo.com | 0 .../VMS/openssl_utils.com | 0 .../VMS/socketshr_shr.opt | 0 .../VMS/tcpip_shr_decc.opt | 0 .../VMS/test-includes.com | 0 .../VMS/ucx_shr_decc.opt | 0 .../VMS/ucx_shr_decc_log.opt | 0 .../VMS/ucx_shr_vaxc.opt | 0 .../apps/CA.com | 0 .../apps/CA.pl.in | 0 .../apps/CA.sh | 0 .../apps/Makefile | 0 .../apps/app_rand.c | 0 .../apps/apps.c | 0 .../apps/apps.h | 0 .../apps/asn1pars.c | 0 .../apps/ca-cert.srl | 0 .../apps/ca-key.pem | 0 .../apps/ca-req.pem | 0 .../apps/ca.c | 0 .../apps/cert.pem | 0 .../apps/ciphers.c | 0 .../apps/client.pem | 0 .../apps/cms.c | 0 .../apps/crl.c | 0 .../apps/crl2p7.c | 0 .../apps/demoCA/cacert.pem | 0 .../apps/demoCA/index.txt | 0 .../apps/demoCA/private/cakey.pem | 0 .../apps/demoCA/serial | 0 .../apps/demoSRP/srp_verifier.txt | 0 .../apps/demoSRP/srp_verifier.txt.attr | 0 .../apps/dgst.c | 0 .../apps/dh.c | 0 .../apps/dh1024.pem | 0 .../apps/dh2048.pem | 0 .../apps/dh4096.pem | 0 .../apps/dh512.pem | 0 .../apps/dhparam.c | 0 .../apps/dsa-ca.pem | 0 .../apps/dsa-pca.pem | 0 .../apps/dsa.c | 0 .../apps/dsa1024.pem | 0 .../apps/dsa512.pem | 0 .../apps/dsap.pem | 0 .../apps/dsaparam.c | 0 .../apps/ec.c | 0 .../apps/ecparam.c | 0 .../apps/enc.c | 0 .../apps/engine.c | 0 .../apps/errstr.c | 0 .../apps/gendh.c | 0 .../apps/gendsa.c | 0 .../apps/genpkey.c | 0 .../apps/genrsa.c | 0 .../apps/install-apps.com | 0 .../apps/makeapps.com | 0 .../apps/nseq.c | 0 .../apps/ocsp.c | 0 .../apps/oid.cnf | 0 .../apps/openssl-vms.cnf | 0 .../apps/openssl.c | 0 .../apps/openssl.cnf | 0 .../apps/passwd.c | 0 .../apps/pca-cert.srl | 0 .../apps/pca-key.pem | 0 .../apps/pca-req.pem | 0 .../apps/pkcs12.c | 0 .../apps/pkcs7.c | 0 .../apps/pkcs8.c | 0 .../apps/pkey.c | 0 .../apps/pkeyparam.c | 0 .../apps/pkeyutl.c | 0 .../apps/prime.c | 0 .../apps/privkey.pem | 0 .../apps/progs.h | 0 .../apps/progs.pl | 0 .../apps/rand.c | 0 .../apps/req.c | 0 .../apps/req.pem | 0 .../apps/rsa.c | 0 .../apps/rsa8192.pem | 0 .../apps/rsautl.c | 0 .../apps/s1024key.pem | 0 .../apps/s1024req.pem | 0 .../apps/s512-key.pem | 0 .../apps/s512-req.pem | 0 .../apps/s_apps.h | 0 .../apps/s_cb.c | 0 .../apps/s_client.c | 0 .../apps/s_server.c | 0 .../apps/s_socket.c | 0 .../apps/s_time.c | 0 .../apps/server.pem | 0 .../apps/server.srl | 0 .../apps/server2.pem | 0 .../apps/sess_id.c | 0 .../apps/set/set-g-ca.pem | 0 .../apps/set/set-m-ca.pem | 0 .../apps/set/set_b_ca.pem | 0 .../apps/set/set_c_ca.pem | 0 .../apps/set/set_d_ct.pem | 0 .../apps/set/set_root.pem | 0 .../apps/smime.c | 0 .../apps/speed.c | 0 .../apps/spkac.c | 0 .../apps/srp.c | 0 .../apps/testCA.pem | 0 .../apps/testdsa.h | 0 .../apps/testrsa.h | 0 .../apps/timeouts.h | 0 .../apps/ts.c | 0 .../apps/tsget | 0 .../apps/verify.c | 0 .../apps/version.c | 0 .../apps/vms_decc_init.c | 0 .../apps/vms_term_sock.c | 0 .../apps/vms_term_sock.h | 0 .../apps/winrand.c | 0 .../apps/x509.c | 0 .../appveyor.yml | 0 .../bugs/MS | 0 .../bugs/SSLv3 | 0 .../bugs/alpha.c | 0 .../bugs/dggccbug.c | 0 .../bugs/sgiccbug.c | 0 .../bugs/sslref.dif | 0 .../bugs/stream.c | 0 .../bugs/ultrixcc.c | 0 .../certs/README.RootCerts | 0 .../certs/demo/ca-cert.pem | 0 .../certs/demo/dsa-ca.pem | 0 .../certs/demo/dsa-pca.pem | 0 .../certs/demo/pca-cert.pem | 0 .../certs/expired/ICE.crl | 0 .../config | 0 .../crypto/LPdir_nyi.c | 0 .../crypto/LPdir_unix.c | 0 .../crypto/LPdir_vms.c | 0 .../crypto/LPdir_win.c | 0 .../crypto/LPdir_win32.c | 0 .../crypto/LPdir_wince.c | 0 .../crypto/Makefile | 0 .../crypto/aes/Makefile | 0 .../crypto/aes/README | 0 .../crypto/aes/aes.h | 0 .../crypto/aes/aes_cbc.c | 0 .../crypto/aes/aes_cfb.c | 0 .../crypto/aes/aes_core.c | 0 .../crypto/aes/aes_ctr.c | 0 .../crypto/aes/aes_ecb.c | 0 .../crypto/aes/aes_ige.c | 0 .../crypto/aes/aes_locl.h | 0 .../crypto/aes/aes_misc.c | 0 .../crypto/aes/aes_ofb.c | 0 .../crypto/aes/aes_wrap.c | 0 .../crypto/aes/aes_x86core.c | 0 .../crypto/aes/asm/aes-586.pl | 0 .../crypto/aes/asm/aes-armv4.pl | 0 .../crypto/aes/asm/aes-ia64.S | 0 .../crypto/aes/asm/aes-mips.pl | 0 .../crypto/aes/asm/aes-parisc.pl | 0 .../crypto/aes/asm/aes-ppc.pl | 0 .../crypto/aes/asm/aes-s390x.pl | 0 .../crypto/aes/asm/aes-sparcv9.pl | 0 .../crypto/aes/asm/aes-x86_64.pl | 0 .../crypto/aes/asm/aesni-mb-x86_64.pl | 0 .../crypto/aes/asm/aesni-sha1-x86_64.pl | 0 .../crypto/aes/asm/aesni-sha256-x86_64.pl | 0 .../crypto/aes/asm/aesni-x86.pl | 0 .../crypto/aes/asm/aesni-x86_64.pl | 0 .../crypto/aes/asm/aesp8-ppc.pl | 0 .../crypto/aes/asm/aest4-sparcv9.pl | 0 .../crypto/aes/asm/aesv8-armx.pl | 0 .../crypto/aes/asm/bsaes-armv7.pl | 0 .../crypto/aes/asm/bsaes-x86_64.pl | 0 .../crypto/aes/asm/vpaes-ppc.pl | 0 .../crypto/aes/asm/vpaes-x86.pl | 0 .../crypto/aes/asm/vpaes-x86_64.pl | 0 .../crypto/alphacpuid.pl | 0 .../crypto/arm64cpuid.S | 0 .../crypto/arm_arch.h | 0 .../crypto/armcap.c | 0 .../crypto/armv4cpuid.S | 0 .../crypto/asn1/Makefile | 0 .../crypto/asn1/a_bitstr.c | 0 .../crypto/asn1/a_bool.c | 0 .../crypto/asn1/a_bytes.c | 0 .../crypto/asn1/a_d2i_fp.c | 0 .../crypto/asn1/a_digest.c | 0 .../crypto/asn1/a_dup.c | 0 .../crypto/asn1/a_enum.c | 0 .../crypto/asn1/a_gentm.c | 0 .../crypto/asn1/a_i2d_fp.c | 0 .../crypto/asn1/a_int.c | 0 .../crypto/asn1/a_mbstr.c | 0 .../crypto/asn1/a_object.c | 0 .../crypto/asn1/a_octet.c | 0 .../crypto/asn1/a_print.c | 0 .../crypto/asn1/a_set.c | 0 .../crypto/asn1/a_sign.c | 0 .../crypto/asn1/a_strex.c | 0 .../crypto/asn1/a_strnid.c | 0 .../crypto/asn1/a_time.c | 0 .../crypto/asn1/a_type.c | 0 .../crypto/asn1/a_utctm.c | 0 .../crypto/asn1/a_utf8.c | 0 .../crypto/asn1/a_verify.c | 0 .../crypto/asn1/ameth_lib.c | 0 .../crypto/asn1/asn1.h | 0 .../crypto/asn1/asn1_err.c | 0 .../crypto/asn1/asn1_gen.c | 0 .../crypto/asn1/asn1_int.h | 0 .../crypto/asn1/asn1_lib.c | 0 .../crypto/asn1/asn1_locl.h | 0 .../crypto/asn1/asn1_mac.h | 0 .../crypto/asn1/asn1_par.c | 0 .../crypto/asn1/asn1t.h | 0 .../crypto/asn1/asn_mime.c | 0 .../crypto/asn1/asn_moid.c | 0 .../crypto/asn1/asn_pack.c | 0 .../crypto/asn1/bio_asn1.c | 0 .../crypto/asn1/bio_ndef.c | 0 .../crypto/asn1/charmap.h | 0 .../crypto/asn1/charmap.pl | 0 .../crypto/asn1/d2i_pr.c | 0 .../crypto/asn1/d2i_pu.c | 0 .../crypto/asn1/evp_asn1.c | 0 .../crypto/asn1/f_enum.c | 0 .../crypto/asn1/f_int.c | 0 .../crypto/asn1/f_string.c | 0 .../crypto/asn1/i2d_pr.c | 0 .../crypto/asn1/i2d_pu.c | 0 .../crypto/asn1/n_pkey.c | 0 .../crypto/asn1/nsseq.c | 0 .../crypto/asn1/p5_pbe.c | 0 .../crypto/asn1/p5_pbev2.c | 0 .../crypto/asn1/p8_pkey.c | 0 .../crypto/asn1/t_bitst.c | 0 .../crypto/asn1/t_crl.c | 0 .../crypto/asn1/t_pkey.c | 0 .../crypto/asn1/t_req.c | 0 .../crypto/asn1/t_spki.c | 0 .../crypto/asn1/t_x509.c | 0 .../crypto/asn1/t_x509a.c | 0 .../crypto/asn1/tasn_dec.c | 0 .../crypto/asn1/tasn_enc.c | 0 .../crypto/asn1/tasn_fre.c | 0 .../crypto/asn1/tasn_new.c | 0 .../crypto/asn1/tasn_prn.c | 0 .../crypto/asn1/tasn_typ.c | 0 .../crypto/asn1/tasn_utl.c | 0 .../crypto/asn1/x_algor.c | 0 .../crypto/asn1/x_attrib.c | 0 .../crypto/asn1/x_bignum.c | 0 .../crypto/asn1/x_crl.c | 0 .../crypto/asn1/x_exten.c | 0 .../crypto/asn1/x_info.c | 0 .../crypto/asn1/x_long.c | 0 .../crypto/asn1/x_name.c | 0 .../crypto/asn1/x_nx509.c | 0 .../crypto/asn1/x_pkey.c | 0 .../crypto/asn1/x_pubkey.c | 0 .../crypto/asn1/x_req.c | 0 .../crypto/asn1/x_sig.c | 0 .../crypto/asn1/x_spki.c | 0 .../crypto/asn1/x_val.c | 0 .../crypto/asn1/x_x509.c | 0 .../crypto/asn1/x_x509a.c | 0 .../crypto/bf/COPYRIGHT | 0 .../crypto/bf/INSTALL | 0 .../crypto/bf/Makefile | 0 .../crypto/bf/README | 0 .../crypto/bf/VERSION | 0 .../crypto/bf/asm/bf-586.pl | 0 .../crypto/bf/asm/bf-686.pl | 0 .../crypto/bf/asm/readme | 0 .../crypto/bf/bf_cbc.c | 0 .../crypto/bf/bf_cfb64.c | 0 .../crypto/bf/bf_ecb.c | 0 .../crypto/bf/bf_enc.c | 0 .../crypto/bf/bf_locl.h | 0 .../crypto/bf/bf_ofb64.c | 0 .../crypto/bf/bf_opts.c | 0 .../crypto/bf/bf_pi.h | 0 .../crypto/bf/bf_skey.c | 0 .../crypto/bf/bfs.cpp | 0 .../crypto/bf/bfspeed.c | 0 .../crypto/bf/bftest.c | 0 .../crypto/bf/blowfish.h | 0 .../crypto/bio/Makefile | 0 .../crypto/bio/b_dump.c | 0 .../crypto/bio/b_print.c | 0 .../crypto/bio/b_sock.c | 0 .../crypto/bio/bf_buff.c | 0 .../crypto/bio/bf_lbuf.c | 0 .../crypto/bio/bf_nbio.c | 0 .../crypto/bio/bf_null.c | 0 .../crypto/bio/bio.h | 0 .../crypto/bio/bio_cb.c | 0 .../crypto/bio/bio_err.c | 0 .../crypto/bio/bio_lcl.h | 0 .../crypto/bio/bio_lib.c | 0 .../crypto/bio/bss_acpt.c | 0 .../crypto/bio/bss_bio.c | 0 .../crypto/bio/bss_conn.c | 0 .../crypto/bio/bss_dgram.c | 0 .../crypto/bio/bss_fd.c | 0 .../crypto/bio/bss_file.c | 0 .../crypto/bio/bss_log.c | 0 .../crypto/bio/bss_mem.c | 0 .../crypto/bio/bss_null.c | 0 .../crypto/bio/bss_rtcp.c | 0 .../crypto/bio/bss_sock.c | 0 .../crypto/bn/Makefile | 0 .../crypto/bn/asm/README | 0 .../crypto/bn/asm/alpha-mont.pl | 0 .../crypto/bn/asm/armv4-gf2m.pl | 0 .../crypto/bn/asm/armv4-mont.pl | 0 .../crypto/bn/asm/bn-586.pl | 0 .../crypto/bn/asm/co-586.pl | 0 .../crypto/bn/asm/ia64-mont.pl | 0 .../crypto/bn/asm/ia64.S | 0 .../crypto/bn/asm/mips-mont.pl | 0 .../crypto/bn/asm/mips.pl | 0 .../crypto/bn/asm/mips3-mont.pl | 0 .../crypto/bn/asm/mips3.s | 0 .../crypto/bn/asm/pa-risc2.s | 0 .../crypto/bn/asm/pa-risc2W.s | 0 .../crypto/bn/asm/parisc-mont.pl | 0 .../crypto/bn/asm/ppc-mont.pl | 0 .../crypto/bn/asm/ppc.pl | 0 .../crypto/bn/asm/ppc64-mont.pl | 0 .../crypto/bn/asm/rsaz-avx2.pl | 0 .../crypto/bn/asm/rsaz-x86_64.pl | 0 .../crypto/bn/asm/s390x-gf2m.pl | 0 .../crypto/bn/asm/s390x-mont.pl | 0 .../crypto/bn/asm/s390x.S | 0 .../crypto/bn/asm/sparct4-mont.pl | 0 .../crypto/bn/asm/sparcv8.S | 0 .../crypto/bn/asm/sparcv8plus.S | 0 .../crypto/bn/asm/sparcv9-gf2m.pl | 0 .../crypto/bn/asm/sparcv9-mont.pl | 0 .../crypto/bn/asm/sparcv9a-mont.pl | 0 .../crypto/bn/asm/via-mont.pl | 0 .../crypto/bn/asm/vis3-mont.pl | 0 .../crypto/bn/asm/vms.mar | 0 .../crypto/bn/asm/x86-gf2m.pl | 0 .../crypto/bn/asm/x86-mont.pl | 0 .../crypto/bn/asm/x86.pl | 0 .../crypto/bn/asm/x86/add.pl | 0 .../crypto/bn/asm/x86/comba.pl | 0 .../crypto/bn/asm/x86/div.pl | 0 .../crypto/bn/asm/x86/f | 0 .../crypto/bn/asm/x86/mul.pl | 0 .../crypto/bn/asm/x86/mul_add.pl | 0 .../crypto/bn/asm/x86/sqr.pl | 0 .../crypto/bn/asm/x86/sub.pl | 0 .../crypto/bn/asm/x86_64-gcc.c | 0 .../crypto/bn/asm/x86_64-gf2m.pl | 0 .../crypto/bn/asm/x86_64-mont.pl | 0 .../crypto/bn/asm/x86_64-mont5.pl | 0 .../crypto/bn/bn.h | 0 .../crypto/bn/bn.mul | 0 .../crypto/bn/bn_add.c | 0 .../crypto/bn/bn_asm.c | 0 .../crypto/bn/bn_blind.c | 0 .../crypto/bn/bn_const.c | 0 .../crypto/bn/bn_ctx.c | 0 .../crypto/bn/bn_depr.c | 0 .../crypto/bn/bn_div.c | 0 .../crypto/bn/bn_err.c | 0 .../crypto/bn/bn_exp.c | 0 .../crypto/bn/bn_exp2.c | 0 .../crypto/bn/bn_gcd.c | 0 .../crypto/bn/bn_gf2m.c | 0 .../crypto/bn/bn_kron.c | 0 .../crypto/bn/bn_lcl.h | 0 .../crypto/bn/bn_lib.c | 0 .../crypto/bn/bn_mod.c | 0 .../crypto/bn/bn_mont.c | 0 .../crypto/bn/bn_mpi.c | 0 .../crypto/bn/bn_mul.c | 0 .../crypto/bn/bn_nist.c | 0 .../crypto/bn/bn_prime.c | 0 .../crypto/bn/bn_prime.h | 0 .../crypto/bn/bn_prime.pl | 0 .../crypto/bn/bn_print.c | 0 .../crypto/bn/bn_rand.c | 0 .../crypto/bn/bn_recp.c | 0 .../crypto/bn/bn_shift.c | 0 .../crypto/bn/bn_sqr.c | 0 .../crypto/bn/bn_sqrt.c | 0 .../crypto/bn/bn_word.c | 0 .../crypto/bn/bn_x931p.c | 0 .../crypto/bn/bnspeed.c | 0 .../crypto/bn/bntest.c | 0 .../crypto/bn/divtest.c | 0 .../crypto/bn/exp.c | 0 .../crypto/bn/expspeed.c | 0 .../crypto/bn/exptest.c | 0 .../crypto/bn/rsaz_exp.c | 0 .../crypto/bn/rsaz_exp.h | 0 .../crypto/bn/todo | 0 .../crypto/bn/vms-helper.c | 0 .../crypto/bn_int.h | 0 .../crypto/buffer/Makefile | 0 .../crypto/buffer/buf_err.c | 0 .../crypto/buffer/buf_str.c | 0 .../crypto/buffer/buffer.c | 0 .../crypto/buffer/buffer.h | 0 .../crypto/camellia/Makefile | 0 .../crypto/camellia/asm/cmll-x86.pl | 0 .../crypto/camellia/asm/cmll-x86_64.pl | 0 .../crypto/camellia/asm/cmllt4-sparcv9.pl | 0 .../crypto/camellia/camellia.c | 0 .../crypto/camellia/camellia.h | 0 .../crypto/camellia/cmll_cbc.c | 0 .../crypto/camellia/cmll_cfb.c | 0 .../crypto/camellia/cmll_ctr.c | 0 .../crypto/camellia/cmll_ecb.c | 0 .../crypto/camellia/cmll_locl.h | 0 .../crypto/camellia/cmll_misc.c | 0 .../crypto/camellia/cmll_ofb.c | 0 .../crypto/camellia/cmll_utl.c | 0 .../crypto/cast/Makefile | 0 .../crypto/cast/asm/cast-586.pl | 0 .../crypto/cast/asm/readme | 0 .../crypto/cast/c_cfb64.c | 0 .../crypto/cast/c_ecb.c | 0 .../crypto/cast/c_enc.c | 0 .../crypto/cast/c_ofb64.c | 0 .../crypto/cast/c_skey.c | 0 .../crypto/cast/cast.h | 0 .../crypto/cast/cast_lcl.h | 0 .../crypto/cast/cast_s.h | 0 .../crypto/cast/cast_spd.c | 0 .../crypto/cast/castopts.c | 0 .../crypto/cast/casts.cpp | 0 .../crypto/cast/casttest.c | 0 .../crypto/cmac/Makefile | 0 .../crypto/cmac/cm_ameth.c | 0 .../crypto/cmac/cm_pmeth.c | 0 .../crypto/cmac/cmac.c | 0 .../crypto/cmac/cmac.h | 0 .../crypto/cms/Makefile | 0 .../crypto/cms/cms.h | 0 .../crypto/cms/cms_asn1.c | 0 .../crypto/cms/cms_att.c | 0 .../crypto/cms/cms_cd.c | 0 .../crypto/cms/cms_dd.c | 0 .../crypto/cms/cms_enc.c | 0 .../crypto/cms/cms_env.c | 0 .../crypto/cms/cms_err.c | 0 .../crypto/cms/cms_ess.c | 0 .../crypto/cms/cms_io.c | 0 .../crypto/cms/cms_kari.c | 0 .../crypto/cms/cms_lcl.h | 0 .../crypto/cms/cms_lib.c | 0 .../crypto/cms/cms_pwri.c | 0 .../crypto/cms/cms_sd.c | 0 .../crypto/cms/cms_smime.c | 0 .../crypto/comp/Makefile | 0 .../crypto/comp/c_rle.c | 0 .../crypto/comp/c_zlib.c | 0 .../crypto/comp/comp.h | 0 .../crypto/comp/comp_err.c | 0 .../crypto/comp/comp_lib.c | 0 .../crypto/conf/Makefile | 0 .../crypto/conf/README | 0 .../crypto/conf/cnf_save.c | 0 .../crypto/conf/conf.h | 0 .../crypto/conf/conf_api.c | 0 .../crypto/conf/conf_api.h | 0 .../crypto/conf/conf_def.c | 0 .../crypto/conf/conf_def.h | 0 .../crypto/conf/conf_err.c | 0 .../crypto/conf/conf_lib.c | 0 .../crypto/conf/conf_mall.c | 0 .../crypto/conf/conf_mod.c | 0 .../crypto/conf/conf_sap.c | 0 .../crypto/conf/keysets.pl | 0 .../crypto/conf/ssleay.cnf | 0 .../crypto/conf/test.c | 0 .../crypto/constant_time_locl.h | 0 .../crypto/constant_time_test.c | 0 .../crypto/cpt_err.c | 0 .../crypto/cryptlib.c | 0 .../crypto/cryptlib.h | 0 .../crypto/crypto-lib.com | 0 .../crypto/crypto.h | 0 .../crypto/cversion.c | 0 .../crypto/des/COPYRIGHT | 0 .../crypto/des/DES.pm | 0 .../crypto/des/DES.xs | 0 .../crypto/des/FILES0 | 0 .../crypto/des/INSTALL | 0 .../crypto/des/Imakefile | 0 .../crypto/des/KERBEROS | 0 .../crypto/des/Makefile | 0 .../crypto/des/README | 0 .../crypto/des/VERSION | 0 .../crypto/des/asm/crypt586.pl | 0 .../crypto/des/asm/des-586.pl | 0 .../crypto/des/asm/des_enc.m4 | 0 .../crypto/des/asm/desboth.pl | 0 .../crypto/des/asm/dest4-sparcv9.pl | 0 .../crypto/des/asm/readme | 0 .../crypto/des/cbc3_enc.c | 0 .../crypto/des/cbc_cksm.c | 0 .../crypto/des/cbc_enc.c | 0 .../crypto/des/cfb64ede.c | 0 .../crypto/des/cfb64enc.c | 0 .../crypto/des/cfb_enc.c | 0 .../crypto/des/des-lib.com | 0 .../crypto/des/des.c | 0 .../crypto/des/des.h | 0 .../crypto/des/des.pod | 0 .../crypto/des/des3s.cpp | 0 .../crypto/des/des_enc.c | 0 .../crypto/des/des_locl.h | 0 .../crypto/des/des_old.c | 0 .../crypto/des/des_old.h | 0 .../crypto/des/des_old2.c | 0 .../crypto/des/des_opts.c | 0 .../crypto/des/des_ver.h | 0 .../crypto/des/dess.cpp | 0 .../crypto/des/destest.c | 0 .../crypto/des/ecb3_enc.c | 0 .../crypto/des/ecb_enc.c | 0 .../crypto/des/ede_cbcm_enc.c | 0 .../crypto/des/enc_read.c | 0 .../crypto/des/enc_writ.c | 0 .../crypto/des/fcrypt.c | 0 .../crypto/des/fcrypt_b.c | 0 .../crypto/des/makefile.bc | 0 .../crypto/des/ncbc_enc.c | 0 .../crypto/des/ofb64ede.c | 0 .../crypto/des/ofb64enc.c | 0 .../crypto/des/ofb_enc.c | 0 .../crypto/des/options.txt | 0 .../crypto/des/pcbc_enc.c | 0 .../crypto/des/qud_cksm.c | 0 .../crypto/des/rand_key.c | 0 .../crypto/des/read2pwd.c | 0 .../crypto/des/read_pwd.c | 0 .../crypto/des/rpc_des.h | 0 .../crypto/des/rpc_enc.c | 0 .../crypto/des/rpw.c | 0 .../crypto/des/set_key.c | 0 .../crypto/des/speed.c | 0 .../crypto/des/spr.h | 0 .../crypto/des/str2key.c | 0 .../crypto/des/t/test | 0 .../crypto/des/times/486-50.sol | 0 .../crypto/des/times/586-100.lnx | 0 .../crypto/des/times/686-200.fre | 0 .../crypto/des/times/aix.cc | 0 .../crypto/des/times/alpha.cc | 0 .../crypto/des/times/hpux.cc | 0 .../crypto/des/times/sparc.gcc | 0 .../crypto/des/times/usparc.cc | 0 .../crypto/des/typemap | 0 .../crypto/des/xcbc_enc.c | 0 .../crypto/dh/Makefile | 0 .../crypto/dh/dh.h | 0 .../crypto/dh/dh1024.pem | 0 .../crypto/dh/dh192.pem | 0 .../crypto/dh/dh2048.pem | 0 .../crypto/dh/dh4096.pem | 0 .../crypto/dh/dh512.pem | 0 .../crypto/dh/dh_ameth.c | 0 .../crypto/dh/dh_asn1.c | 0 .../crypto/dh/dh_check.c | 0 .../crypto/dh/dh_depr.c | 0 .../crypto/dh/dh_err.c | 0 .../crypto/dh/dh_gen.c | 0 .../crypto/dh/dh_kdf.c | 0 .../crypto/dh/dh_key.c | 0 .../crypto/dh/dh_lib.c | 0 .../crypto/dh/dh_pmeth.c | 0 .../crypto/dh/dh_prn.c | 0 .../crypto/dh/dh_rfc5114.c | 0 .../crypto/dh/dhtest.c | 0 .../crypto/dh/example | 0 .../crypto/dh/generate | 0 .../crypto/dh/p1024.c | 0 .../crypto/dh/p192.c | 0 .../crypto/dh/p512.c | 0 .../crypto/dsa/Makefile | 0 .../crypto/dsa/README | 0 .../crypto/dsa/dsa.h | 0 .../crypto/dsa/dsa_ameth.c | 0 .../crypto/dsa/dsa_asn1.c | 0 .../crypto/dsa/dsa_depr.c | 0 .../crypto/dsa/dsa_err.c | 0 .../crypto/dsa/dsa_gen.c | 0 .../crypto/dsa/dsa_key.c | 0 .../crypto/dsa/dsa_lib.c | 0 .../crypto/dsa/dsa_locl.h | 0 .../crypto/dsa/dsa_ossl.c | 0 .../crypto/dsa/dsa_pmeth.c | 0 .../crypto/dsa/dsa_prn.c | 0 .../crypto/dsa/dsa_sign.c | 0 .../crypto/dsa/dsa_vrf.c | 0 .../crypto/dsa/dsagen.c | 0 .../crypto/dsa/dsatest.c | 0 .../crypto/dsa/fips186a.txt | 0 .../crypto/dso/Makefile | 0 .../crypto/dso/README | 0 .../crypto/dso/dso.h | 0 .../crypto/dso/dso_beos.c | 0 .../crypto/dso/dso_dl.c | 0 .../crypto/dso/dso_dlfcn.c | 0 .../crypto/dso/dso_err.c | 0 .../crypto/dso/dso_lib.c | 0 .../crypto/dso/dso_null.c | 0 .../crypto/dso/dso_openssl.c | 0 .../crypto/dso/dso_vms.c | 0 .../crypto/dso/dso_win32.c | 0 .../crypto/ebcdic.c | 0 .../crypto/ebcdic.h | 0 .../crypto/ec/Makefile | 0 .../crypto/ec/asm/ecp_nistz256-avx2.pl | 0 .../crypto/ec/asm/ecp_nistz256-x86_64.pl | 0 .../crypto/ec/ec.h | 0 .../crypto/ec/ec2_mult.c | 0 .../crypto/ec/ec2_oct.c | 0 .../crypto/ec/ec2_smpl.c | 0 .../crypto/ec/ec_ameth.c | 0 .../crypto/ec/ec_asn1.c | 0 .../crypto/ec/ec_check.c | 0 .../crypto/ec/ec_curve.c | 0 .../crypto/ec/ec_cvt.c | 0 .../crypto/ec/ec_err.c | 0 .../crypto/ec/ec_key.c | 0 .../crypto/ec/ec_lcl.h | 0 .../crypto/ec/ec_lib.c | 0 .../crypto/ec/ec_mult.c | 0 .../crypto/ec/ec_oct.c | 0 .../crypto/ec/ec_pmeth.c | 0 .../crypto/ec/ec_print.c | 0 .../crypto/ec/eck_prn.c | 0 .../crypto/ec/ecp_mont.c | 0 .../crypto/ec/ecp_nist.c | 0 .../crypto/ec/ecp_nistp224.c | 0 .../crypto/ec/ecp_nistp256.c | 0 .../crypto/ec/ecp_nistp521.c | 0 .../crypto/ec/ecp_nistputil.c | 0 .../crypto/ec/ecp_nistz256.c | 0 .../crypto/ec/ecp_nistz256_table.c | 0 .../crypto/ec/ecp_oct.c | 0 .../crypto/ec/ecp_smpl.c | 0 .../crypto/ec/ectest.c | 0 .../crypto/ecdh/Makefile | 0 .../crypto/ecdh/ecdh.h | 0 .../crypto/ecdh/ecdhtest.c | 0 .../crypto/ecdh/ech_err.c | 0 .../crypto/ecdh/ech_kdf.c | 0 .../crypto/ecdh/ech_key.c | 0 .../crypto/ecdh/ech_lib.c | 0 .../crypto/ecdh/ech_locl.h | 0 .../crypto/ecdh/ech_ossl.c | 0 .../crypto/ecdsa/Makefile | 0 .../crypto/ecdsa/ecdsa.h | 0 .../crypto/ecdsa/ecdsatest.c | 0 .../crypto/ecdsa/ecs_asn1.c | 0 .../crypto/ecdsa/ecs_err.c | 0 .../crypto/ecdsa/ecs_lib.c | 0 .../crypto/ecdsa/ecs_locl.h | 0 .../crypto/ecdsa/ecs_ossl.c | 0 .../crypto/ecdsa/ecs_sign.c | 0 .../crypto/ecdsa/ecs_vrf.c | 0 .../crypto/engine/Makefile | 0 .../crypto/engine/README | 0 .../crypto/engine/eng_all.c | 0 .../crypto/engine/eng_cnf.c | 0 .../crypto/engine/eng_cryptodev.c | 0 .../crypto/engine/eng_ctrl.c | 0 .../crypto/engine/eng_dyn.c | 0 .../crypto/engine/eng_err.c | 0 .../crypto/engine/eng_fat.c | 0 .../crypto/engine/eng_init.c | 0 .../crypto/engine/eng_int.h | 0 .../crypto/engine/eng_lib.c | 0 .../crypto/engine/eng_list.c | 0 .../crypto/engine/eng_openssl.c | 0 .../crypto/engine/eng_pkey.c | 0 .../crypto/engine/eng_rdrand.c | 0 .../crypto/engine/eng_table.c | 0 .../crypto/engine/engine.h | 0 .../crypto/engine/enginetest.c | 0 .../crypto/engine/tb_asnmth.c | 0 .../crypto/engine/tb_cipher.c | 0 .../crypto/engine/tb_dh.c | 0 .../crypto/engine/tb_digest.c | 0 .../crypto/engine/tb_dsa.c | 0 .../crypto/engine/tb_ecdh.c | 0 .../crypto/engine/tb_ecdsa.c | 0 .../crypto/engine/tb_pkmeth.c | 0 .../crypto/engine/tb_rand.c | 0 .../crypto/engine/tb_rsa.c | 0 .../crypto/engine/tb_store.c | 0 .../crypto/err/Makefile | 0 .../crypto/err/err.c | 0 .../crypto/err/err.h | 0 .../crypto/err/err_all.c | 0 .../crypto/err/err_prn.c | 0 .../crypto/err/openssl.ec | 0 .../crypto/evp/Makefile | 0 .../crypto/evp/bio_b64.c | 0 .../crypto/evp/bio_enc.c | 0 .../crypto/evp/bio_md.c | 0 .../crypto/evp/bio_ok.c | 0 .../crypto/evp/c_all.c | 0 .../crypto/evp/c_allc.c | 0 .../crypto/evp/c_alld.c | 0 .../crypto/evp/digest.c | 0 .../crypto/evp/e_aes.c | 0 .../crypto/evp/e_aes_cbc_hmac_sha1.c | 0 .../crypto/evp/e_aes_cbc_hmac_sha256.c | 0 .../crypto/evp/e_bf.c | 0 .../crypto/evp/e_camellia.c | 0 .../crypto/evp/e_cast.c | 0 .../crypto/evp/e_des.c | 0 .../crypto/evp/e_des3.c | 0 .../crypto/evp/e_dsa.c | 0 .../crypto/evp/e_idea.c | 0 .../crypto/evp/e_null.c | 0 .../crypto/evp/e_old.c | 0 .../crypto/evp/e_rc2.c | 0 .../crypto/evp/e_rc4.c | 0 .../crypto/evp/e_rc4_hmac_md5.c | 0 .../crypto/evp/e_rc5.c | 0 .../crypto/evp/e_seed.c | 0 .../crypto/evp/e_xcbc_d.c | 0 .../crypto/evp/encode.c | 0 .../crypto/evp/evp.h | 0 .../crypto/evp/evp_acnf.c | 0 .../crypto/evp/evp_cnf.c | 0 .../crypto/evp/evp_enc.c | 0 .../crypto/evp/evp_err.c | 0 .../crypto/evp/evp_extra_test.c | 0 .../crypto/evp/evp_key.c | 0 .../crypto/evp/evp_lib.c | 0 .../crypto/evp/evp_locl.h | 0 .../crypto/evp/evp_pbe.c | 0 .../crypto/evp/evp_pkey.c | 0 .../crypto/evp/evp_test.c | 0 .../crypto/evp/evptests.txt | 0 .../crypto/evp/m_dss.c | 0 .../crypto/evp/m_dss1.c | 0 .../crypto/evp/m_ecdsa.c | 0 .../crypto/evp/m_md2.c | 0 .../crypto/evp/m_md4.c | 0 .../crypto/evp/m_md5.c | 0 .../crypto/evp/m_mdc2.c | 0 .../crypto/evp/m_null.c | 0 .../crypto/evp/m_ripemd.c | 0 .../crypto/evp/m_sha.c | 0 .../crypto/evp/m_sha1.c | 0 .../crypto/evp/m_sigver.c | 0 .../crypto/evp/m_wp.c | 0 .../crypto/evp/names.c | 0 .../crypto/evp/openbsd_hw.c | 0 .../crypto/evp/p5_crpt.c | 0 .../crypto/evp/p5_crpt2.c | 0 .../crypto/evp/p_dec.c | 0 .../crypto/evp/p_enc.c | 0 .../crypto/evp/p_lib.c | 0 .../crypto/evp/p_open.c | 0 .../crypto/evp/p_seal.c | 0 .../crypto/evp/p_sign.c | 0 .../crypto/evp/p_verify.c | 0 .../crypto/evp/pmeth_fn.c | 0 .../crypto/evp/pmeth_gn.c | 0 .../crypto/evp/pmeth_lib.c | 0 .../crypto/ex_data.c | 0 .../crypto/fips_err.h | 0 .../crypto/fips_ers.c | 0 .../crypto/getenv.c | 0 .../crypto/hmac/Makefile | 0 .../crypto/hmac/hm_ameth.c | 0 .../crypto/hmac/hm_pmeth.c | 0 .../crypto/hmac/hmac.c | 0 .../crypto/hmac/hmac.h | 0 .../crypto/hmac/hmactest.c | 0 .../crypto/ia64cpuid.S | 0 .../crypto/idea/Makefile | 0 .../crypto/idea/i_cbc.c | 0 .../crypto/idea/i_cfb64.c | 0 .../crypto/idea/i_ecb.c | 0 .../crypto/idea/i_ofb64.c | 0 .../crypto/idea/i_skey.c | 0 .../crypto/idea/idea.h | 0 .../crypto/idea/idea_lcl.h | 0 .../crypto/idea/idea_spd.c | 0 .../crypto/idea/ideatest.c | 0 .../crypto/idea/version | 0 .../crypto/install-crypto.com | 0 .../crypto/jpake/Makefile | 0 .../crypto/jpake/jpake.c | 0 .../crypto/jpake/jpake.h | 0 .../crypto/jpake/jpake_err.c | 0 .../crypto/jpake/jpaketest.c | 0 .../crypto/krb5/Makefile | 0 .../crypto/krb5/krb5_asn.c | 0 .../crypto/krb5/krb5_asn.h | 0 .../crypto/lhash/Makefile | 0 .../crypto/lhash/lh_stats.c | 0 .../crypto/lhash/lh_test.c | 0 .../crypto/lhash/lhash.c | 0 .../crypto/lhash/lhash.h | 0 .../crypto/lhash/num.pl | 0 .../crypto/md2/Makefile | 0 .../crypto/md2/md2.c | 0 .../crypto/md2/md2.h | 0 .../crypto/md2/md2_dgst.c | 0 .../crypto/md2/md2_one.c | 0 .../crypto/md2/md2test.c | 0 .../crypto/md32_common.h | 0 .../crypto/md4/Makefile | 0 .../crypto/md4/md4.c | 0 .../crypto/md4/md4.h | 0 .../crypto/md4/md4_dgst.c | 0 .../crypto/md4/md4_locl.h | 0 .../crypto/md4/md4_one.c | 0 .../crypto/md4/md4s.cpp | 0 .../crypto/md4/md4test.c | 0 .../crypto/md5/Makefile | 0 .../crypto/md5/asm/md5-586.pl | 0 .../crypto/md5/asm/md5-ia64.S | 0 .../crypto/md5/asm/md5-sparcv9.pl | 0 .../crypto/md5/asm/md5-x86_64.pl | 0 .../crypto/md5/md5.c | 0 .../crypto/md5/md5.h | 0 .../crypto/md5/md5_dgst.c | 0 .../crypto/md5/md5_locl.h | 0 .../crypto/md5/md5_one.c | 0 .../crypto/md5/md5s.cpp | 0 .../crypto/md5/md5test.c | 0 .../crypto/mdc2/Makefile | 0 .../crypto/mdc2/mdc2.h | 0 .../crypto/mdc2/mdc2_one.c | 0 .../crypto/mdc2/mdc2dgst.c | 0 .../crypto/mdc2/mdc2test.c | 0 .../crypto/mem.c | 0 .../crypto/mem_clr.c | 0 .../crypto/mem_dbg.c | 0 .../crypto/modes/Makefile | 0 .../crypto/modes/asm/aesni-gcm-x86_64.pl | 0 .../crypto/modes/asm/ghash-alpha.pl | 0 .../crypto/modes/asm/ghash-armv4.pl | 0 .../crypto/modes/asm/ghash-ia64.pl | 0 .../crypto/modes/asm/ghash-parisc.pl | 0 .../crypto/modes/asm/ghash-s390x.pl | 0 .../crypto/modes/asm/ghash-sparcv9.pl | 0 .../crypto/modes/asm/ghash-x86.pl | 0 .../crypto/modes/asm/ghash-x86_64.pl | 0 .../crypto/modes/asm/ghashp8-ppc.pl | 0 .../crypto/modes/asm/ghashv8-armx.pl | 0 .../crypto/modes/cbc128.c | 0 .../crypto/modes/ccm128.c | 0 .../crypto/modes/cfb128.c | 0 .../crypto/modes/ctr128.c | 0 .../crypto/modes/cts128.c | 0 .../crypto/modes/gcm128.c | 0 .../crypto/modes/modes.h | 0 .../crypto/modes/modes_lcl.h | 0 .../crypto/modes/ofb128.c | 0 .../crypto/modes/wrap128.c | 0 .../crypto/modes/xts128.c | 0 .../crypto/o_dir.c | 0 .../crypto/o_dir.h | 0 .../crypto/o_dir_test.c | 0 .../crypto/o_fips.c | 0 .../crypto/o_init.c | 0 .../crypto/o_str.c | 0 .../crypto/o_str.h | 0 .../crypto/o_time.c | 0 .../crypto/o_time.h | 0 .../crypto/objects/Makefile | 0 .../crypto/objects/o_names.c | 0 .../crypto/objects/obj_dat.c | 0 .../crypto/objects/obj_dat.h | 0 .../crypto/objects/obj_dat.pl | 0 .../crypto/objects/obj_err.c | 0 .../crypto/objects/obj_lib.c | 0 .../crypto/objects/obj_mac.h | 0 .../crypto/objects/obj_mac.num | 0 .../crypto/objects/obj_xref.c | 0 .../crypto/objects/obj_xref.h | 0 .../crypto/objects/obj_xref.txt | 0 .../crypto/objects/objects.README | 0 .../crypto/objects/objects.h | 0 .../crypto/objects/objects.pl | 0 .../crypto/objects/objects.txt | 0 .../crypto/objects/objxref.pl | 0 .../crypto/ocsp/Makefile | 0 .../crypto/ocsp/ocsp.h | 0 .../crypto/ocsp/ocsp_asn.c | 0 .../crypto/ocsp/ocsp_cl.c | 0 .../crypto/ocsp/ocsp_err.c | 0 .../crypto/ocsp/ocsp_ext.c | 0 .../crypto/ocsp/ocsp_ht.c | 0 .../crypto/ocsp/ocsp_lib.c | 0 .../crypto/ocsp/ocsp_prn.c | 0 .../crypto/ocsp/ocsp_srv.c | 0 .../crypto/ocsp/ocsp_vfy.c | 0 .../crypto/opensslconf.h.in | 0 .../crypto/opensslv.h | 4 +- .../crypto/ossl_typ.h | 0 .../crypto/pariscid.pl | 0 .../crypto/pem/Makefile | 0 .../crypto/pem/message | 0 .../crypto/pem/pem.h | 0 .../crypto/pem/pem2.h | 0 .../crypto/pem/pem_all.c | 0 .../crypto/pem/pem_err.c | 0 .../crypto/pem/pem_info.c | 0 .../crypto/pem/pem_lib.c | 0 .../crypto/pem/pem_oth.c | 0 .../crypto/pem/pem_pk8.c | 0 .../crypto/pem/pem_pkey.c | 0 .../crypto/pem/pem_seal.c | 0 .../crypto/pem/pem_sign.c | 0 .../crypto/pem/pem_x509.c | 0 .../crypto/pem/pem_xaux.c | 0 .../crypto/pem/pkcs7.lis | 0 .../crypto/pem/pvkfmt.c | 0 .../crypto/perlasm/cbc.pl | 0 .../crypto/perlasm/ppc-xlate.pl | 0 .../crypto/perlasm/readme | 0 .../crypto/perlasm/sparcv9_modes.pl | 0 .../crypto/perlasm/x86_64-xlate.pl | 0 .../crypto/perlasm/x86asm.pl | 0 .../crypto/perlasm/x86gas.pl | 0 .../crypto/perlasm/x86masm.pl | 0 .../crypto/perlasm/x86nasm.pl | 0 .../crypto/pkcs12/Makefile | 0 .../crypto/pkcs12/p12_add.c | 0 .../crypto/pkcs12/p12_asn.c | 0 .../crypto/pkcs12/p12_attr.c | 0 .../crypto/pkcs12/p12_crpt.c | 0 .../crypto/pkcs12/p12_crt.c | 0 .../crypto/pkcs12/p12_decr.c | 0 .../crypto/pkcs12/p12_init.c | 0 .../crypto/pkcs12/p12_key.c | 0 .../crypto/pkcs12/p12_kiss.c | 0 .../crypto/pkcs12/p12_mutl.c | 0 .../crypto/pkcs12/p12_npas.c | 0 .../crypto/pkcs12/p12_p8d.c | 0 .../crypto/pkcs12/p12_p8e.c | 0 .../crypto/pkcs12/p12_utl.c | 0 .../crypto/pkcs12/pk12err.c | 0 .../crypto/pkcs12/pkcs12.h | 0 .../crypto/pkcs7/Makefile | 0 .../crypto/pkcs7/bio_pk7.c | 0 .../crypto/pkcs7/pk7_asn1.c | 0 .../crypto/pkcs7/pk7_attr.c | 0 .../crypto/pkcs7/pk7_dgst.c | 0 .../crypto/pkcs7/pk7_doit.c | 0 .../crypto/pkcs7/pk7_enc.c | 0 .../crypto/pkcs7/pk7_lib.c | 0 .../crypto/pkcs7/pk7_mime.c | 0 .../crypto/pkcs7/pk7_smime.c | 0 .../crypto/pkcs7/pkcs7.h | 0 .../crypto/pkcs7/pkcs7err.c | 0 .../crypto/ppc_arch.h | 0 .../crypto/ppccap.c | 0 .../crypto/ppccpuid.pl | 0 .../crypto/pqueue/Makefile | 0 .../crypto/pqueue/pq_test.c | 0 .../crypto/pqueue/pqueue.c | 0 .../crypto/pqueue/pqueue.h | 0 .../crypto/rand/Makefile | 0 .../crypto/rand/md_rand.c | 0 .../crypto/rand/rand.h | 0 .../crypto/rand/rand_egd.c | 0 .../crypto/rand/rand_err.c | 0 .../crypto/rand/rand_lcl.h | 0 .../crypto/rand/rand_lib.c | 0 .../crypto/rand/rand_nw.c | 0 .../crypto/rand/rand_os2.c | 0 .../crypto/rand/rand_unix.c | 0 .../crypto/rand/rand_vms.c | 0 .../crypto/rand/rand_win.c | 0 .../crypto/rand/randfile.c | 0 .../crypto/rand/randtest.c | 0 .../crypto/rc2/Makefile | 0 .../crypto/rc2/rc2.h | 0 .../crypto/rc2/rc2_cbc.c | 0 .../crypto/rc2/rc2_ecb.c | 0 .../crypto/rc2/rc2_locl.h | 0 .../crypto/rc2/rc2_skey.c | 0 .../crypto/rc2/rc2cfb64.c | 0 .../crypto/rc2/rc2ofb64.c | 0 .../crypto/rc2/rc2speed.c | 0 .../crypto/rc2/rc2test.c | 0 .../crypto/rc2/rrc2.doc | 0 .../crypto/rc2/tab.c | 0 .../crypto/rc2/version | 0 .../crypto/rc4/Makefile | 0 .../crypto/rc4/asm/rc4-586.pl | 0 .../crypto/rc4/asm/rc4-ia64.pl | 0 .../crypto/rc4/asm/rc4-md5-x86_64.pl | 0 .../crypto/rc4/asm/rc4-parisc.pl | 0 .../crypto/rc4/asm/rc4-s390x.pl | 0 .../crypto/rc4/asm/rc4-x86_64.pl | 0 .../crypto/rc4/rc4.c | 0 .../crypto/rc4/rc4.h | 0 .../crypto/rc4/rc4_enc.c | 0 .../crypto/rc4/rc4_locl.h | 0 .../crypto/rc4/rc4_skey.c | 0 .../crypto/rc4/rc4_utl.c | 0 .../crypto/rc4/rc4s.cpp | 0 .../crypto/rc4/rc4speed.c | 0 .../crypto/rc4/rc4test.c | 0 .../crypto/rc4/rrc4.doc | 0 .../crypto/rc5/Makefile | 0 .../crypto/rc5/asm/rc5-586.pl | 0 .../crypto/rc5/rc5.h | 0 .../crypto/rc5/rc5_ecb.c | 0 .../crypto/rc5/rc5_enc.c | 0 .../crypto/rc5/rc5_locl.h | 0 .../crypto/rc5/rc5_skey.c | 0 .../crypto/rc5/rc5cfb64.c | 0 .../crypto/rc5/rc5ofb64.c | 0 .../crypto/rc5/rc5s.cpp | 0 .../crypto/rc5/rc5speed.c | 0 .../crypto/rc5/rc5test.c | 0 .../crypto/ripemd/Makefile | 0 .../crypto/ripemd/README | 0 .../crypto/ripemd/asm/rips.cpp | 0 .../crypto/ripemd/asm/rmd-586.pl | 0 .../crypto/ripemd/ripemd.h | 0 .../crypto/ripemd/rmd160.c | 0 .../crypto/ripemd/rmd_dgst.c | 0 .../crypto/ripemd/rmd_locl.h | 0 .../crypto/ripemd/rmd_one.c | 0 .../crypto/ripemd/rmdconst.h | 0 .../crypto/ripemd/rmdtest.c | 0 .../crypto/rsa/Makefile | 0 .../crypto/rsa/rsa.h | 0 .../crypto/rsa/rsa_ameth.c | 0 .../crypto/rsa/rsa_asn1.c | 0 .../crypto/rsa/rsa_chk.c | 0 .../crypto/rsa/rsa_crpt.c | 0 .../crypto/rsa/rsa_depr.c | 0 .../crypto/rsa/rsa_eay.c | 0 .../crypto/rsa/rsa_err.c | 0 .../crypto/rsa/rsa_gen.c | 0 .../crypto/rsa/rsa_lib.c | 0 .../crypto/rsa/rsa_locl.h | 0 .../crypto/rsa/rsa_none.c | 0 .../crypto/rsa/rsa_null.c | 0 .../crypto/rsa/rsa_oaep.c | 0 .../crypto/rsa/rsa_pk1.c | 0 .../crypto/rsa/rsa_pmeth.c | 0 .../crypto/rsa/rsa_prn.c | 0 .../crypto/rsa/rsa_pss.c | 0 .../crypto/rsa/rsa_saos.c | 0 .../crypto/rsa/rsa_sign.c | 0 .../crypto/rsa/rsa_ssl.c | 0 .../crypto/rsa/rsa_test.c | 0 .../crypto/rsa/rsa_x931.c | 0 .../crypto/s390xcap.c | 0 .../crypto/s390xcpuid.S | 0 .../crypto/seed/Makefile | 0 .../crypto/seed/seed.c | 0 .../crypto/seed/seed.h | 0 .../crypto/seed/seed_cbc.c | 0 .../crypto/seed/seed_cfb.c | 0 .../crypto/seed/seed_ecb.c | 0 .../crypto/seed/seed_locl.h | 0 .../crypto/seed/seed_ofb.c | 0 .../crypto/sha/Makefile | 0 .../crypto/sha/asm/README | 0 .../crypto/sha/asm/sha1-586.pl | 0 .../crypto/sha/asm/sha1-alpha.pl | 0 .../crypto/sha/asm/sha1-armv4-large.pl | 0 .../crypto/sha/asm/sha1-armv8.pl | 0 .../crypto/sha/asm/sha1-ia64.pl | 0 .../crypto/sha/asm/sha1-mb-x86_64.pl | 0 .../crypto/sha/asm/sha1-mips.pl | 0 .../crypto/sha/asm/sha1-parisc.pl | 0 .../crypto/sha/asm/sha1-ppc.pl | 0 .../crypto/sha/asm/sha1-s390x.pl | 0 .../crypto/sha/asm/sha1-sparcv9.pl | 0 .../crypto/sha/asm/sha1-sparcv9a.pl | 0 .../crypto/sha/asm/sha1-thumb.pl | 0 .../crypto/sha/asm/sha1-x86_64.pl | 0 .../crypto/sha/asm/sha256-586.pl | 0 .../crypto/sha/asm/sha256-armv4.pl | 0 .../crypto/sha/asm/sha256-mb-x86_64.pl | 0 .../crypto/sha/asm/sha512-586.pl | 0 .../crypto/sha/asm/sha512-armv4.pl | 0 .../crypto/sha/asm/sha512-armv8.pl | 0 .../crypto/sha/asm/sha512-ia64.pl | 0 .../crypto/sha/asm/sha512-mips.pl | 0 .../crypto/sha/asm/sha512-parisc.pl | 0 .../crypto/sha/asm/sha512-ppc.pl | 0 .../crypto/sha/asm/sha512-s390x.pl | 0 .../crypto/sha/asm/sha512-sparcv9.pl | 0 .../crypto/sha/asm/sha512-x86_64.pl | 0 .../crypto/sha/asm/sha512p8-ppc.pl | 0 .../crypto/sha/sha.c | 0 .../crypto/sha/sha.h | 0 .../crypto/sha/sha1.c | 0 .../crypto/sha/sha1_one.c | 0 .../crypto/sha/sha1dgst.c | 0 .../crypto/sha/sha1test.c | 0 .../crypto/sha/sha256.c | 0 .../crypto/sha/sha256t.c | 0 .../crypto/sha/sha512.c | 0 .../crypto/sha/sha512t.c | 0 .../crypto/sha/sha_dgst.c | 0 .../crypto/sha/sha_locl.h | 0 .../crypto/sha/sha_one.c | 0 .../crypto/sha/shatest.c | 0 .../crypto/sparc_arch.h | 0 .../crypto/sparccpuid.S | 0 .../crypto/sparcv9cap.c | 0 .../crypto/srp/Makefile | 0 .../crypto/srp/srp.h | 0 .../crypto/srp/srp_grps.h | 0 .../crypto/srp/srp_lcl.h | 0 .../crypto/srp/srp_lib.c | 0 .../crypto/srp/srp_vfy.c | 0 .../crypto/srp/srptest.c | 0 .../crypto/stack/Makefile | 0 .../crypto/stack/safestack.h | 0 .../crypto/stack/stack.c | 0 .../crypto/stack/stack.h | 0 .../crypto/store/Makefile | 0 .../crypto/store/README | 0 .../crypto/store/store.h | 0 .../crypto/store/str_err.c | 0 .../crypto/store/str_lib.c | 0 .../crypto/store/str_locl.h | 0 .../crypto/store/str_mem.c | 0 .../crypto/store/str_meth.c | 0 .../crypto/symhacks.h | 0 .../crypto/threads/README | 0 .../crypto/threads/mttest.c | 0 .../crypto/threads/netware.bat | 0 .../crypto/threads/profile.sh | 0 .../crypto/threads/ptest.bat | 0 .../crypto/threads/pthread.sh | 0 .../crypto/threads/pthread2.sh | 0 .../crypto/threads/pthreads-vms.com | 0 .../crypto/threads/purify.sh | 0 .../crypto/threads/solaris.sh | 0 .../crypto/threads/th-lock.c | 0 .../crypto/threads/win32.bat | 0 .../crypto/ts/Makefile | 0 .../crypto/ts/ts.h | 0 .../crypto/ts/ts_asn1.c | 0 .../crypto/ts/ts_conf.c | 0 .../crypto/ts/ts_err.c | 0 .../crypto/ts/ts_lib.c | 0 .../crypto/ts/ts_req_print.c | 0 .../crypto/ts/ts_req_utils.c | 0 .../crypto/ts/ts_rsp_print.c | 0 .../crypto/ts/ts_rsp_sign.c | 0 .../crypto/ts/ts_rsp_utils.c | 0 .../crypto/ts/ts_rsp_verify.c | 0 .../crypto/ts/ts_verify_ctx.c | 0 .../crypto/txt_db/Makefile | 0 .../crypto/txt_db/txt_db.c | 0 .../crypto/txt_db/txt_db.h | 0 .../crypto/ui/Makefile | 0 .../crypto/ui/ui.h | 0 .../crypto/ui/ui_compat.c | 0 .../crypto/ui/ui_compat.h | 0 .../crypto/ui/ui_err.c | 0 .../crypto/ui/ui_lib.c | 0 .../crypto/ui/ui_locl.h | 0 .../crypto/ui/ui_openssl.c | 0 .../crypto/ui/ui_util.c | 0 .../crypto/uid.c | 0 .../crypto/vms_rms.h | 0 .../crypto/whrlpool/Makefile | 0 .../crypto/whrlpool/asm/wp-mmx.pl | 0 .../crypto/whrlpool/asm/wp-x86_64.pl | 0 .../crypto/whrlpool/whrlpool.h | 0 .../crypto/whrlpool/wp_block.c | 0 .../crypto/whrlpool/wp_dgst.c | 0 .../crypto/whrlpool/wp_locl.h | 0 .../crypto/whrlpool/wp_test.c | 0 .../crypto/x509/Makefile | 0 .../crypto/x509/by_dir.c | 0 .../crypto/x509/by_file.c | 0 .../crypto/x509/verify_extra_test.c | 0 .../crypto/x509/vpm_int.h | 0 .../crypto/x509/x509.h | 0 .../crypto/x509/x509_att.c | 0 .../crypto/x509/x509_cmp.c | 0 .../crypto/x509/x509_d2.c | 0 .../crypto/x509/x509_def.c | 0 .../crypto/x509/x509_err.c | 0 .../crypto/x509/x509_ext.c | 0 .../crypto/x509/x509_lu.c | 0 .../crypto/x509/x509_obj.c | 0 .../crypto/x509/x509_r2x.c | 0 .../crypto/x509/x509_req.c | 0 .../crypto/x509/x509_set.c | 0 .../crypto/x509/x509_trs.c | 0 .../crypto/x509/x509_txt.c | 0 .../crypto/x509/x509_v3.c | 0 .../crypto/x509/x509_vfy.c | 0 .../crypto/x509/x509_vfy.h | 0 .../crypto/x509/x509_vpm.c | 0 .../crypto/x509/x509cset.c | 0 .../crypto/x509/x509name.c | 0 .../crypto/x509/x509rset.c | 0 .../crypto/x509/x509spki.c | 0 .../crypto/x509/x509type.c | 0 .../crypto/x509/x_all.c | 0 .../crypto/x509v3/Makefile | 0 .../crypto/x509v3/ext_dat.h | 0 .../crypto/x509v3/pcy_cache.c | 0 .../crypto/x509v3/pcy_data.c | 0 .../crypto/x509v3/pcy_int.h | 0 .../crypto/x509v3/pcy_lib.c | 0 .../crypto/x509v3/pcy_map.c | 0 .../crypto/x509v3/pcy_node.c | 0 .../crypto/x509v3/pcy_tree.c | 0 .../crypto/x509v3/tabtest.c | 0 .../crypto/x509v3/v3_addr.c | 0 .../crypto/x509v3/v3_akey.c | 0 .../crypto/x509v3/v3_akeya.c | 0 .../crypto/x509v3/v3_alt.c | 0 .../crypto/x509v3/v3_asid.c | 0 .../crypto/x509v3/v3_bcons.c | 0 .../crypto/x509v3/v3_bitst.c | 0 .../crypto/x509v3/v3_conf.c | 0 .../crypto/x509v3/v3_cpols.c | 0 .../crypto/x509v3/v3_crld.c | 0 .../crypto/x509v3/v3_enum.c | 0 .../crypto/x509v3/v3_extku.c | 0 .../crypto/x509v3/v3_genn.c | 2 +- .../crypto/x509v3/v3_ia5.c | 0 .../crypto/x509v3/v3_info.c | 0 .../crypto/x509v3/v3_int.c | 0 .../crypto/x509v3/v3_lib.c | 0 .../crypto/x509v3/v3_ncons.c | 0 .../crypto/x509v3/v3_ocsp.c | 0 .../crypto/x509v3/v3_pci.c | 0 .../crypto/x509v3/v3_pcia.c | 0 .../crypto/x509v3/v3_pcons.c | 0 .../crypto/x509v3/v3_pku.c | 0 .../crypto/x509v3/v3_pmaps.c | 0 .../crypto/x509v3/v3_prn.c | 0 .../crypto/x509v3/v3_purp.c | 0 .../crypto/x509v3/v3_scts.c | 0 .../crypto/x509v3/v3_skey.c | 0 .../crypto/x509v3/v3_sxnet.c | 0 .../crypto/x509v3/v3_utl.c | 0 .../crypto/x509v3/v3conf.c | 0 .../crypto/x509v3/v3err.c | 0 .../crypto/x509v3/v3nametest.c | 8 + .../crypto/x509v3/v3prin.c | 0 .../crypto/x509v3/x509v3.h | 2 +- .../crypto/x86_64cpuid.pl | 0 .../crypto/x86cpuid.pl | 0 .../demos/README | 0 .../demos/asn1/README.ASN1 | 0 .../demos/asn1/ocsp.c | 0 .../demos/b64.c | 0 .../demos/b64.pl | 0 .../demos/bio/Makefile | 0 .../demos/bio/README | 0 .../demos/bio/accept.cnf | 0 .../demos/bio/client-arg.c | 0 .../demos/bio/client-conf.c | 0 .../demos/bio/connect.cnf | 0 .../demos/bio/saccept.c | 0 .../demos/bio/sconnect.c | 0 .../demos/bio/server-arg.c | 0 .../demos/bio/server-conf.c | 0 .../demos/bio/server.pem | 0 .../demos/cms/cacert.pem | 0 .../demos/cms/cakey.pem | 0 .../demos/cms/cms_comp.c | 0 .../demos/cms/cms_ddec.c | 0 .../demos/cms/cms_dec.c | 0 .../demos/cms/cms_denc.c | 0 .../demos/cms/cms_enc.c | 0 .../demos/cms/cms_sign.c | 0 .../demos/cms/cms_sign2.c | 0 .../demos/cms/cms_uncomp.c | 0 .../demos/cms/cms_ver.c | 0 .../demos/cms/comp.txt | 0 .../demos/cms/encr.txt | 0 .../demos/cms/sign.txt | 0 .../demos/cms/signer.pem | 0 .../demos/cms/signer2.pem | 0 .../demos/easy_tls/Makefile | 0 .../demos/easy_tls/README | 0 .../demos/easy_tls/cacerts.pem | 0 .../demos/easy_tls/cert.pem | 0 .../demos/easy_tls/easy-tls.c | 0 .../demos/easy_tls/easy-tls.h | 0 .../demos/easy_tls/test.c | 0 .../demos/easy_tls/test.h | 0 .../demos/engines/cluster_labs/Makefile | 0 .../demos/engines/cluster_labs/cluster_labs.h | 0 .../engines/cluster_labs/hw_cluster_labs.c | 0 .../engines/cluster_labs/hw_cluster_labs.ec | 0 .../cluster_labs/hw_cluster_labs_err.c | 0 .../cluster_labs/hw_cluster_labs_err.h | 0 .../demos/engines/ibmca/Makefile | 0 .../demos/engines/ibmca/hw_ibmca.c | 0 .../demos/engines/ibmca/hw_ibmca.ec | 0 .../demos/engines/ibmca/hw_ibmca_err.c | 0 .../demos/engines/ibmca/hw_ibmca_err.h | 0 .../demos/engines/ibmca/ica_openssl_api.h | 0 .../demos/engines/rsaref/Makefile | 0 .../demos/engines/rsaref/README | 0 .../demos/engines/rsaref/build.com | 0 .../demos/engines/rsaref/rsaref.c | 0 .../demos/engines/rsaref/rsaref.ec | 0 .../demos/engines/rsaref/rsaref_err.c | 0 .../demos/engines/rsaref/rsaref_err.h | 0 .../demos/engines/zencod/Makefile | 0 .../demos/engines/zencod/hw_zencod.c | 0 .../demos/engines/zencod/hw_zencod.ec | 0 .../demos/engines/zencod/hw_zencod.h | 0 .../demos/engines/zencod/hw_zencod_err.c | 0 .../demos/engines/zencod/hw_zencod_err.h | 0 .../demos/pkcs12/README | 0 .../demos/pkcs12/pkread.c | 0 .../demos/pkcs12/pkwrite.c | 0 .../demos/prime/Makefile | 0 .../demos/prime/prime.c | 0 .../demos/privkey.pem | 0 .../demos/selfsign.c | 0 .../demos/sign/Makefile | 0 .../demos/sign/cert.pem | 0 .../demos/sign/key.pem | 0 .../demos/sign/sig.txt | 0 .../demos/sign/sign.c | 0 .../demos/sign/sign.txt | 0 .../demos/smime/cacert.pem | 0 .../demos/smime/cakey.pem | 0 .../demos/smime/encr.txt | 0 .../demos/smime/sign.txt | 0 .../demos/smime/signer.pem | 0 .../demos/smime/signer2.pem | 0 .../demos/smime/smdec.c | 0 .../demos/smime/smenc.c | 0 .../demos/smime/smsign.c | 0 .../demos/smime/smsign2.c | 0 .../demos/smime/smver.c | 0 .../demos/spkigen.c | 0 .../demos/ssl/cli.cpp | 0 .../demos/ssl/inetdsrv.cpp | 0 .../demos/ssl/serv.cpp | 0 .../demos/ssltest-ecc/ECC-RSAcertgen.sh | 0 .../demos/ssltest-ecc/ECCcertgen.sh | 0 .../demos/ssltest-ecc/README | 0 .../demos/ssltest-ecc/RSAcertgen.sh | 0 .../demos/ssltest-ecc/ssltest.sh | 0 .../demos/state_machine/Makefile | 0 .../demos/state_machine/state_machine.c | 0 .../demos/tunala/A-client.pem | 0 .../demos/tunala/A-server.pem | 0 .../demos/tunala/CA.pem | 0 .../demos/tunala/INSTALL | 0 .../demos/tunala/Makefile | 0 .../demos/tunala/Makefile.am | 0 .../demos/tunala/README | 0 .../demos/tunala/autogunk.sh | 0 .../demos/tunala/autoungunk.sh | 0 .../demos/tunala/breakage.c | 0 .../demos/tunala/buffer.c | 0 .../demos/tunala/cb.c | 0 .../demos/tunala/configure.in | 0 .../demos/tunala/ip.c | 0 .../demos/tunala/sm.c | 0 .../demos/tunala/test.sh | 0 .../demos/tunala/tunala.c | 0 .../demos/tunala/tunala.h | 0 .../demos/x509/README | 0 .../demos/x509/mkcert.c | 0 .../demos/x509/mkreq.c | 0 .../doc/HOWTO/certificates.txt | 0 .../doc/HOWTO/keys.txt | 0 .../doc/HOWTO/proxy_certificates.txt | 0 .../doc/README | 0 .../doc/apps/CA.pl.pod | 0 .../doc/apps/asn1parse.pod | 0 .../doc/apps/c_rehash.pod | 0 .../doc/apps/ca.pod | 0 .../doc/apps/ciphers.pod | 0 .../doc/apps/cms.pod | 0 .../doc/apps/config.pod | 0 .../doc/apps/crl.pod | 0 .../doc/apps/crl2pkcs7.pod | 0 .../doc/apps/dgst.pod | 0 .../doc/apps/dhparam.pod | 0 .../doc/apps/dsa.pod | 0 .../doc/apps/dsaparam.pod | 0 .../doc/apps/ec.pod | 0 .../doc/apps/ecparam.pod | 0 .../doc/apps/enc.pod | 0 .../doc/apps/errstr.pod | 0 .../doc/apps/gendsa.pod | 0 .../doc/apps/genpkey.pod | 0 .../doc/apps/genrsa.pod | 0 .../doc/apps/nseq.pod | 0 .../doc/apps/ocsp.pod | 0 .../doc/apps/openssl.pod | 0 .../doc/apps/passwd.pod | 0 .../doc/apps/pkcs12.pod | 0 .../doc/apps/pkcs7.pod | 0 .../doc/apps/pkcs8.pod | 0 .../doc/apps/pkey.pod | 0 .../doc/apps/pkeyparam.pod | 0 .../doc/apps/pkeyutl.pod | 0 .../doc/apps/rand.pod | 0 .../doc/apps/req.pod | 0 .../doc/apps/rsa.pod | 0 .../doc/apps/rsautl.pod | 0 .../doc/apps/s_client.pod | 0 .../doc/apps/s_server.pod | 0 .../doc/apps/s_time.pod | 0 .../doc/apps/sess_id.pod | 0 .../doc/apps/smime.pod | 0 .../doc/apps/speed.pod | 0 .../doc/apps/spkac.pod | 0 .../doc/apps/ts.pod | 0 .../doc/apps/tsget.pod | 0 .../doc/apps/verify.pod | 0 .../doc/apps/version.pod | 0 .../doc/apps/x509.pod | 0 .../doc/apps/x509v3_config.pod | 0 .../doc/c-indentation.el | 0 .../doc/crypto/ASN1_OBJECT_new.pod | 0 .../doc/crypto/ASN1_STRING_length.pod | 0 .../doc/crypto/ASN1_STRING_new.pod | 0 .../doc/crypto/ASN1_STRING_print_ex.pod | 0 .../doc/crypto/ASN1_TIME_set.pod | 0 .../doc/crypto/ASN1_generate_nconf.pod | 0 .../doc/crypto/BIO_ctrl.pod | 0 .../doc/crypto/BIO_f_base64.pod | 0 .../doc/crypto/BIO_f_buffer.pod | 0 .../doc/crypto/BIO_f_cipher.pod | 0 .../doc/crypto/BIO_f_md.pod | 0 .../doc/crypto/BIO_f_null.pod | 0 .../doc/crypto/BIO_f_ssl.pod | 0 .../doc/crypto/BIO_find_type.pod | 0 .../doc/crypto/BIO_new.pod | 0 .../doc/crypto/BIO_new_CMS.pod | 0 .../doc/crypto/BIO_push.pod | 0 .../doc/crypto/BIO_read.pod | 0 .../doc/crypto/BIO_s_accept.pod | 0 .../doc/crypto/BIO_s_bio.pod | 0 .../doc/crypto/BIO_s_connect.pod | 0 .../doc/crypto/BIO_s_fd.pod | 0 .../doc/crypto/BIO_s_file.pod | 0 .../doc/crypto/BIO_s_mem.pod | 0 .../doc/crypto/BIO_s_null.pod | 0 .../doc/crypto/BIO_s_socket.pod | 0 .../doc/crypto/BIO_set_callback.pod | 0 .../doc/crypto/BIO_should_retry.pod | 0 .../doc/crypto/BN_BLINDING_new.pod | 0 .../doc/crypto/BN_CTX_new.pod | 0 .../doc/crypto/BN_CTX_start.pod | 0 .../doc/crypto/BN_add.pod | 0 .../doc/crypto/BN_add_word.pod | 0 .../doc/crypto/BN_bn2bin.pod | 0 .../doc/crypto/BN_cmp.pod | 0 .../doc/crypto/BN_copy.pod | 0 .../doc/crypto/BN_generate_prime.pod | 0 .../doc/crypto/BN_mod_inverse.pod | 0 .../doc/crypto/BN_mod_mul_montgomery.pod | 0 .../doc/crypto/BN_mod_mul_reciprocal.pod | 0 .../doc/crypto/BN_new.pod | 0 .../doc/crypto/BN_num_bytes.pod | 0 .../doc/crypto/BN_rand.pod | 0 .../doc/crypto/BN_set_bit.pod | 0 .../doc/crypto/BN_swap.pod | 0 .../doc/crypto/BN_zero.pod | 0 .../doc/crypto/CMS_add0_cert.pod | 0 .../doc/crypto/CMS_add1_recipient_cert.pod | 0 .../doc/crypto/CMS_add1_signer.pod | 0 .../doc/crypto/CMS_compress.pod | 0 .../doc/crypto/CMS_decrypt.pod | 0 .../doc/crypto/CMS_encrypt.pod | 0 .../doc/crypto/CMS_final.pod | 0 .../doc/crypto/CMS_get0_RecipientInfos.pod | 0 .../doc/crypto/CMS_get0_SignerInfos.pod | 0 .../doc/crypto/CMS_get0_type.pod | 0 .../doc/crypto/CMS_get1_ReceiptRequest.pod | 0 .../doc/crypto/CMS_sign.pod | 0 .../doc/crypto/CMS_sign_receipt.pod | 0 .../doc/crypto/CMS_uncompress.pod | 0 .../doc/crypto/CMS_verify.pod | 0 .../doc/crypto/CMS_verify_receipt.pod | 0 .../doc/crypto/CONF_modules_free.pod | 0 .../doc/crypto/CONF_modules_load_file.pod | 0 .../doc/crypto/CRYPTO_set_ex_data.pod | 0 .../doc/crypto/DH_generate_key.pod | 0 .../doc/crypto/DH_generate_parameters.pod | 0 .../doc/crypto/DH_get_ex_new_index.pod | 0 .../doc/crypto/DH_new.pod | 0 .../doc/crypto/DH_set_method.pod | 0 .../doc/crypto/DH_size.pod | 0 .../doc/crypto/DSA_SIG_new.pod | 0 .../doc/crypto/DSA_do_sign.pod | 0 .../doc/crypto/DSA_dup_DH.pod | 0 .../doc/crypto/DSA_generate_key.pod | 0 .../doc/crypto/DSA_generate_parameters.pod | 0 .../doc/crypto/DSA_get_ex_new_index.pod | 0 .../doc/crypto/DSA_new.pod | 0 .../doc/crypto/DSA_set_method.pod | 0 .../doc/crypto/DSA_sign.pod | 0 .../doc/crypto/DSA_size.pod | 0 .../doc/crypto/EC_GFp_simple_method.pod | 0 .../doc/crypto/EC_GROUP_copy.pod | 0 .../doc/crypto/EC_GROUP_new.pod | 0 .../doc/crypto/EC_KEY_new.pod | 0 .../doc/crypto/EC_POINT_add.pod | 0 .../doc/crypto/EC_POINT_new.pod | 0 .../doc/crypto/ERR_GET_LIB.pod | 0 .../doc/crypto/ERR_clear_error.pod | 0 .../doc/crypto/ERR_error_string.pod | 0 .../doc/crypto/ERR_get_error.pod | 0 .../doc/crypto/ERR_load_crypto_strings.pod | 0 .../doc/crypto/ERR_load_strings.pod | 0 .../doc/crypto/ERR_print_errors.pod | 0 .../doc/crypto/ERR_put_error.pod | 0 .../doc/crypto/ERR_remove_state.pod | 0 .../doc/crypto/ERR_set_mark.pod | 0 .../doc/crypto/EVP_BytesToKey.pod | 0 .../doc/crypto/EVP_DigestInit.pod | 0 .../doc/crypto/EVP_DigestSignInit.pod | 0 .../doc/crypto/EVP_DigestVerifyInit.pod | 0 .../doc/crypto/EVP_EncodeInit.pod | 0 .../doc/crypto/EVP_EncryptInit.pod | 0 .../doc/crypto/EVP_OpenInit.pod | 0 .../doc/crypto/EVP_PKEY_CTX_ctrl.pod | 0 .../doc/crypto/EVP_PKEY_CTX_new.pod | 0 .../doc/crypto/EVP_PKEY_cmp.pod | 0 .../doc/crypto/EVP_PKEY_decrypt.pod | 0 .../doc/crypto/EVP_PKEY_derive.pod | 0 .../doc/crypto/EVP_PKEY_encrypt.pod | 0 .../crypto/EVP_PKEY_get_default_digest.pod | 0 .../doc/crypto/EVP_PKEY_keygen.pod | 0 .../doc/crypto/EVP_PKEY_meth_new.pod | 0 .../doc/crypto/EVP_PKEY_new.pod | 0 .../doc/crypto/EVP_PKEY_print_private.pod | 0 .../doc/crypto/EVP_PKEY_set1_RSA.pod | 0 .../doc/crypto/EVP_PKEY_sign.pod | 0 .../doc/crypto/EVP_PKEY_verify.pod | 0 .../doc/crypto/EVP_PKEY_verify_recover.pod | 0 .../doc/crypto/EVP_SealInit.pod | 0 .../doc/crypto/EVP_SignInit.pod | 0 .../doc/crypto/EVP_VerifyInit.pod | 0 .../doc/crypto/OBJ_nid2obj.pod | 0 .../doc/crypto/OPENSSL_Applink.pod | 0 .../doc/crypto/OPENSSL_VERSION_NUMBER.pod | 0 .../doc/crypto/OPENSSL_config.pod | 0 .../doc/crypto/OPENSSL_ia32cap.pod | 0 .../doc/crypto/OPENSSL_instrument_bus.pod | 0 .../crypto/OPENSSL_load_builtin_modules.pod | 0 .../doc/crypto/OpenSSL_add_all_algorithms.pod | 0 .../doc/crypto/PEM_write_bio_CMS_stream.pod | 0 .../doc/crypto/PEM_write_bio_PKCS7_stream.pod | 0 .../doc/crypto/PKCS12_create.pod | 0 .../doc/crypto/PKCS12_parse.pod | 0 .../doc/crypto/PKCS7_decrypt.pod | 0 .../doc/crypto/PKCS7_encrypt.pod | 0 .../doc/crypto/PKCS7_sign.pod | 0 .../doc/crypto/PKCS7_sign_add_signer.pod | 0 .../doc/crypto/PKCS7_verify.pod | 0 .../doc/crypto/RAND_add.pod | 0 .../doc/crypto/RAND_bytes.pod | 0 .../doc/crypto/RAND_cleanup.pod | 0 .../doc/crypto/RAND_egd.pod | 0 .../doc/crypto/RAND_load_file.pod | 0 .../doc/crypto/RAND_set_rand_method.pod | 0 .../doc/crypto/RSA_blinding_on.pod | 0 .../doc/crypto/RSA_check_key.pod | 0 .../doc/crypto/RSA_generate_key.pod | 0 .../doc/crypto/RSA_get_ex_new_index.pod | 0 .../doc/crypto/RSA_new.pod | 0 .../crypto/RSA_padding_add_PKCS1_type_1.pod | 0 .../doc/crypto/RSA_print.pod | 0 .../doc/crypto/RSA_private_encrypt.pod | 0 .../doc/crypto/RSA_public_encrypt.pod | 0 .../doc/crypto/RSA_set_method.pod | 0 .../doc/crypto/RSA_sign.pod | 0 .../doc/crypto/RSA_sign_ASN1_OCTET_STRING.pod | 0 .../doc/crypto/RSA_size.pod | 0 .../doc/crypto/SMIME_read_CMS.pod | 0 .../doc/crypto/SMIME_read_PKCS7.pod | 0 .../doc/crypto/SMIME_write_CMS.pod | 0 .../doc/crypto/SMIME_write_PKCS7.pod | 0 .../doc/crypto/SSLeay_version.pod | 0 .../doc/crypto/X509_NAME_ENTRY_get_object.pod | 0 .../doc/crypto/X509_NAME_add_entry_by_txt.pod | 0 .../doc/crypto/X509_NAME_get_index_by_NID.pod | 0 .../doc/crypto/X509_NAME_print_ex.pod | 0 .../doc/crypto/X509_STORE_CTX_get_error.pod | 0 .../X509_STORE_CTX_get_ex_new_index.pod | 0 .../doc/crypto/X509_STORE_CTX_new.pod | 0 .../crypto/X509_STORE_CTX_set_verify_cb.pod | 0 .../crypto/X509_STORE_set_verify_cb_func.pod | 0 .../crypto/X509_VERIFY_PARAM_set_flags.pod | 0 .../doc/crypto/X509_check_host.pod | 0 .../doc/crypto/X509_check_private_key.pod | 0 .../doc/crypto/X509_cmp_time.pod | 0 .../doc/crypto/X509_new.pod | 0 .../doc/crypto/X509_verify_cert.pod | 0 .../doc/crypto/bio.pod | 0 .../doc/crypto/blowfish.pod | 0 .../doc/crypto/bn.pod | 0 .../doc/crypto/bn_internal.pod | 0 .../doc/crypto/buffer.pod | 0 .../doc/crypto/crypto.pod | 0 .../doc/crypto/d2i_ASN1_OBJECT.pod | 0 .../doc/crypto/d2i_CMS_ContentInfo.pod | 0 .../doc/crypto/d2i_DHparams.pod | 0 .../doc/crypto/d2i_DSAPublicKey.pod | 0 .../doc/crypto/d2i_ECPKParameters.pod | 0 .../doc/crypto/d2i_ECPrivateKey.pod | 0 .../doc/crypto/d2i_PKCS8PrivateKey.pod | 0 .../doc/crypto/d2i_PrivateKey.pod | 0 .../doc/crypto/d2i_RSAPublicKey.pod | 0 .../doc/crypto/d2i_X509.pod | 0 .../doc/crypto/d2i_X509_ALGOR.pod | 0 .../doc/crypto/d2i_X509_CRL.pod | 0 .../doc/crypto/d2i_X509_NAME.pod | 0 .../doc/crypto/d2i_X509_REQ.pod | 0 .../doc/crypto/d2i_X509_SIG.pod | 0 .../doc/crypto/des.pod | 0 .../doc/crypto/des_modes.pod | 0 .../doc/crypto/dh.pod | 0 .../doc/crypto/dsa.pod | 0 .../doc/crypto/ec.pod | 0 .../doc/crypto/ecdsa.pod | 0 .../doc/crypto/engine.pod | 0 .../doc/crypto/err.pod | 0 .../doc/crypto/evp.pod | 0 .../doc/crypto/hmac.pod | 0 .../doc/crypto/i2d_CMS_bio_stream.pod | 0 .../doc/crypto/i2d_PKCS7_bio_stream.pod | 0 .../doc/crypto/lh_stats.pod | 0 .../doc/crypto/lhash.pod | 0 .../doc/crypto/md5.pod | 0 .../doc/crypto/mdc2.pod | 0 .../doc/crypto/pem.pod | 0 .../doc/crypto/rand.pod | 0 .../doc/crypto/rc4.pod | 0 .../doc/crypto/ripemd.pod | 0 .../doc/crypto/rsa.pod | 0 .../doc/crypto/sha.pod | 0 .../doc/crypto/threads.pod | 0 .../doc/crypto/ui.pod | 0 .../doc/crypto/ui_compat.pod | 0 .../doc/crypto/x509.pod | 0 .../doc/dir-locals.example.el | 0 .../doc/fingerprints.txt | 0 .../doc/openssl-c-indent.el | 0 .../doc/openssl-shared.txt | 0 .../doc/openssl.txt | 0 .../doc/ssl/SSL_CIPHER_get_name.pod | 0 .../ssl/SSL_COMP_add_compression_method.pod | 0 .../doc/ssl/SSL_CONF_CTX_new.pod | 0 .../doc/ssl/SSL_CONF_CTX_set1_prefix.pod | 0 .../doc/ssl/SSL_CONF_CTX_set_flags.pod | 0 .../doc/ssl/SSL_CONF_CTX_set_ssl_ctx.pod | 0 .../doc/ssl/SSL_CONF_cmd.pod | 0 .../doc/ssl/SSL_CONF_cmd_argv.pod | 0 .../doc/ssl/SSL_CTX_add1_chain_cert.pod | 0 .../doc/ssl/SSL_CTX_add_extra_chain_cert.pod | 0 .../doc/ssl/SSL_CTX_add_session.pod | 0 .../doc/ssl/SSL_CTX_ctrl.pod | 0 .../doc/ssl/SSL_CTX_flush_sessions.pod | 0 .../doc/ssl/SSL_CTX_free.pod | 0 .../doc/ssl/SSL_CTX_get0_param.pod | 0 .../doc/ssl/SSL_CTX_get_ex_new_index.pod | 0 .../doc/ssl/SSL_CTX_get_verify_mode.pod | 0 .../doc/ssl/SSL_CTX_load_verify_locations.pod | 0 .../doc/ssl/SSL_CTX_new.pod | 0 .../doc/ssl/SSL_CTX_sess_number.pod | 0 .../doc/ssl/SSL_CTX_sess_set_cache_size.pod | 0 .../doc/ssl/SSL_CTX_sess_set_get_cb.pod | 0 .../doc/ssl/SSL_CTX_sessions.pod | 0 .../doc/ssl/SSL_CTX_set1_curves.pod | 0 .../ssl/SSL_CTX_set1_verify_cert_store.pod | 0 .../doc/ssl/SSL_CTX_set_alpn_select_cb.pod | 0 .../doc/ssl/SSL_CTX_set_cert_cb.pod | 0 .../doc/ssl/SSL_CTX_set_cert_store.pod | 0 .../ssl/SSL_CTX_set_cert_verify_callback.pod | 0 .../doc/ssl/SSL_CTX_set_cipher_list.pod | 0 .../doc/ssl/SSL_CTX_set_client_CA_list.pod | 0 .../doc/ssl/SSL_CTX_set_client_cert_cb.pod | 0 .../doc/ssl/SSL_CTX_set_custom_cli_ext.pod | 0 .../doc/ssl/SSL_CTX_set_default_passwd_cb.pod | 0 .../ssl/SSL_CTX_set_generate_session_id.pod | 0 .../doc/ssl/SSL_CTX_set_info_callback.pod | 0 .../doc/ssl/SSL_CTX_set_max_cert_list.pod | 0 .../doc/ssl/SSL_CTX_set_mode.pod | 0 .../doc/ssl/SSL_CTX_set_msg_callback.pod | 0 .../doc/ssl/SSL_CTX_set_options.pod | 0 .../ssl/SSL_CTX_set_psk_client_callback.pod | 0 .../doc/ssl/SSL_CTX_set_quiet_shutdown.pod | 0 .../doc/ssl/SSL_CTX_set_read_ahead.pod | 0 .../ssl/SSL_CTX_set_session_cache_mode.pod | 0 .../ssl/SSL_CTX_set_session_id_context.pod | 0 .../doc/ssl/SSL_CTX_set_ssl_version.pod | 0 .../doc/ssl/SSL_CTX_set_timeout.pod | 0 ...SSL_CTX_set_tlsext_servername_callback.pod | 0 .../doc/ssl/SSL_CTX_set_tlsext_status_cb.pod | 0 .../ssl/SSL_CTX_set_tlsext_ticket_key_cb.pod | 0 .../doc/ssl/SSL_CTX_set_tmp_dh_callback.pod | 0 .../doc/ssl/SSL_CTX_set_tmp_rsa_callback.pod | 0 .../doc/ssl/SSL_CTX_set_verify.pod | 0 .../doc/ssl/SSL_CTX_use_certificate.pod | 0 .../doc/ssl/SSL_CTX_use_psk_identity_hint.pod | 0 .../doc/ssl/SSL_CTX_use_serverinfo.pod | 0 .../doc/ssl/SSL_SESSION_free.pod | 0 .../doc/ssl/SSL_SESSION_get_ex_new_index.pod | 0 .../doc/ssl/SSL_SESSION_get_time.pod | 0 .../doc/ssl/SSL_accept.pod | 0 .../doc/ssl/SSL_alert_type_string.pod | 0 .../doc/ssl/SSL_check_chain.pod | 0 .../doc/ssl/SSL_clear.pod | 0 .../doc/ssl/SSL_connect.pod | 0 .../doc/ssl/SSL_do_handshake.pod | 0 .../doc/ssl/SSL_export_keying_material.pod | 0 .../doc/ssl/SSL_free.pod | 0 .../doc/ssl/SSL_get_SSL_CTX.pod | 0 .../doc/ssl/SSL_get_ciphers.pod | 0 .../doc/ssl/SSL_get_client_CA_list.pod | 0 .../doc/ssl/SSL_get_current_cipher.pod | 0 .../doc/ssl/SSL_get_default_timeout.pod | 0 .../doc/ssl/SSL_get_error.pod | 0 .../SSL_get_ex_data_X509_STORE_CTX_idx.pod | 0 .../doc/ssl/SSL_get_ex_new_index.pod | 0 .../doc/ssl/SSL_get_fd.pod | 0 .../doc/ssl/SSL_get_peer_cert_chain.pod | 0 .../doc/ssl/SSL_get_peer_certificate.pod | 0 .../doc/ssl/SSL_get_psk_identity.pod | 0 .../doc/ssl/SSL_get_rbio.pod | 0 .../doc/ssl/SSL_get_session.pod | 0 .../doc/ssl/SSL_get_verify_result.pod | 0 .../doc/ssl/SSL_get_version.pod | 0 .../doc/ssl/SSL_library_init.pod | 0 .../doc/ssl/SSL_load_client_CA_file.pod | 0 .../doc/ssl/SSL_new.pod | 0 .../doc/ssl/SSL_pending.pod | 0 .../doc/ssl/SSL_read.pod | 0 .../doc/ssl/SSL_rstate_string.pod | 0 .../doc/ssl/SSL_session_reused.pod | 0 .../doc/ssl/SSL_set_bio.pod | 0 .../doc/ssl/SSL_set_connect_state.pod | 0 .../doc/ssl/SSL_set_fd.pod | 0 .../doc/ssl/SSL_set_session.pod | 0 .../doc/ssl/SSL_set_shutdown.pod | 0 .../doc/ssl/SSL_set_verify_result.pod | 0 .../doc/ssl/SSL_shutdown.pod | 0 .../doc/ssl/SSL_state_string.pod | 0 .../doc/ssl/SSL_want.pod | 0 .../doc/ssl/SSL_write.pod | 0 .../doc/ssl/d2i_SSL_SESSION.pod | 0 .../doc/ssl/ssl.pod | 0 .../doc/ssleay.txt | 0 .../doc/standards.txt | 0 .../e_os.h | 0 .../e_os2.h | 0 .../engines/Makefile | 0 .../engines/alpha.opt | 0 .../engines/axp.opt | 0 .../engines/capierr.bat | 0 .../engines/ccgost/Makefile | 0 .../engines/ccgost/README.gost | 0 .../engines/ccgost/e_gost_err.c | 0 .../engines/ccgost/e_gost_err.h | 0 .../engines/ccgost/e_gost_err.proto | 0 .../engines/ccgost/gost.ec | 0 .../engines/ccgost/gost2001.c | 0 .../engines/ccgost/gost2001_keyx.c | 0 .../engines/ccgost/gost2001_keyx.h | 0 .../engines/ccgost/gost89.c | 0 .../engines/ccgost/gost89.h | 0 .../engines/ccgost/gost94_keyx.c | 0 .../engines/ccgost/gost_ameth.c | 0 .../engines/ccgost/gost_asn1.c | 0 .../engines/ccgost/gost_crypt.c | 0 .../engines/ccgost/gost_ctl.c | 0 .../engines/ccgost/gost_eng.c | 0 .../engines/ccgost/gost_keywrap.c | 0 .../engines/ccgost/gost_keywrap.h | 0 .../engines/ccgost/gost_lcl.h | 0 .../engines/ccgost/gost_md.c | 0 .../engines/ccgost/gost_params.c | 0 .../engines/ccgost/gost_params.h | 0 .../engines/ccgost/gost_pmeth.c | 0 .../engines/ccgost/gost_sign.c | 0 .../engines/ccgost/gosthash.c | 0 .../engines/ccgost/gosthash.h | 0 .../engines/ccgost/gostsum.c | 0 .../engines/e_4758cca.c | 0 .../engines/e_4758cca.ec | 0 .../engines/e_4758cca_err.c | 0 .../engines/e_4758cca_err.h | 0 .../engines/e_aep.c | 0 .../engines/e_aep.ec | 0 .../engines/e_aep_err.c | 0 .../engines/e_aep_err.h | 0 .../engines/e_atalla.c | 0 .../engines/e_atalla.ec | 0 .../engines/e_atalla_err.c | 0 .../engines/e_atalla_err.h | 0 .../engines/e_capi.c | 0 .../engines/e_capi.ec | 0 .../engines/e_capi_err.c | 0 .../engines/e_capi_err.h | 0 .../engines/e_chil.c | 0 .../engines/e_chil.ec | 0 .../engines/e_chil_err.c | 0 .../engines/e_chil_err.h | 0 .../engines/e_cswift.c | 0 .../engines/e_cswift.ec | 0 .../engines/e_cswift_err.c | 0 .../engines/e_cswift_err.h | 0 .../engines/e_gmp.c | 0 .../engines/e_gmp.ec | 0 .../engines/e_gmp_err.c | 0 .../engines/e_gmp_err.h | 0 .../engines/e_nuron.c | 0 .../engines/e_nuron.ec | 0 .../engines/e_nuron_err.c | 0 .../engines/e_nuron_err.h | 0 .../engines/e_padlock.c | 0 .../engines/e_padlock.ec | 0 .../engines/e_sureware.c | 0 .../engines/e_sureware.ec | 0 .../engines/e_sureware_err.c | 0 .../engines/e_sureware_err.h | 0 .../engines/e_ubsec.c | 0 .../engines/e_ubsec.ec | 0 .../engines/e_ubsec_err.c | 0 .../engines/e_ubsec_err.h | 0 .../engines/engine_vector.mar | 0 .../engines/ia64.opt | 0 .../engines/makeengines.com | 0 .../engines/vax.opt | 0 .../engines/vendor_defns/aep.h | 0 .../engines/vendor_defns/atalla.h | 0 .../engines/vendor_defns/cswift.h | 0 .../engines/vendor_defns/hw_4758_cca.h | 0 .../engines/vendor_defns/hw_ubsec.h | 0 .../engines/vendor_defns/hwcryptohook.h | 0 .../engines/vendor_defns/sureware.h | 0 .../install.com | 0 .../makevms.com | 0 .../ms/.rnd | Bin .../ms/32all.bat | 0 .../ms/README | 0 .../ms/applink.c | 0 .../ms/bcb4.bat | 0 .../ms/certCA.srl | 0 .../ms/certCA.ss | 0 .../ms/certU.ss | 0 .../ms/cmp.pl | 0 .../ms/do_ms.bat | 0 .../ms/do_nasm.bat | 0 .../ms/do_nt.bat | 0 .../ms/do_win64a.bat | 0 .../ms/do_win64i.bat | 0 .../ms/keyCA.ss | 0 .../ms/keyU.ss | 0 .../ms/mingw32.bat | 0 .../ms/mw.bat | 0 .../ms/req2CA.ss | 0 .../ms/reqCA.ss | 0 .../ms/reqU.ss | 0 .../ms/speed32.bat | 0 .../ms/tenc.bat | 0 .../ms/tencce.bat | 0 .../ms/test.bat | 0 .../ms/testce.bat | 0 .../ms/testce2.bat | 0 .../ms/testenc.bat | 0 .../ms/testencce.bat | 0 .../ms/testpem.bat | 0 .../ms/testpemce.bat | 0 .../ms/testss.bat | 0 .../ms/testssce.bat | 0 .../ms/tlhelp32.h | 0 .../ms/tpem.bat | 0 .../ms/tpemce.bat | 0 .../ms/uplink-common.pl | 0 .../ms/uplink-ia64.pl | 0 .../ms/uplink-x86.pl | 0 .../ms/uplink-x86_64.pl | 0 .../ms/uplink.c | 0 .../ms/uplink.h | 0 .../ms/uplink.pl | 0 .../ms/x86asm.bat | 0 .../openssl.doxy | 0 .../openssl.spec | 0 .../os2/OS2-EMX.cmd | 0 .../os2/backwardify.pl | 0 .../shlib/Makefile.hpux10-cc | 0 .../shlib/README | 0 .../shlib/hpux10-cc.sh | 0 .../shlib/irix.sh | 0 .../shlib/sco5-shared-gcc.sh | 0 .../shlib/sco5-shared-installed | 0 .../shlib/sco5-shared.sh | 0 .../shlib/solaris-sc4.sh | 0 .../shlib/solaris.sh | 0 .../shlib/sun.sh | 0 .../shlib/svr5-shared-gcc.sh | 0 .../shlib/svr5-shared-installed | 0 .../shlib/svr5-shared.sh | 0 .../shlib/win32.bat | 0 .../shlib/win32dll.bat | 0 .../ssl/Makefile | 0 .../ssl/bad_dtls_test.c | 0 .../ssl/bio_ssl.c | 0 .../ssl/clienthellotest.c | 0 .../ssl/d1_both.c | 0 .../ssl/d1_clnt.c | 0 .../ssl/d1_lib.c | 0 .../ssl/d1_meth.c | 0 .../ssl/d1_pkt.c | 0 .../ssl/d1_srtp.c | 0 .../ssl/d1_srvr.c | 0 .../ssl/dtls1.h | 0 .../ssl/dtlstest.c | 0 .../ssl/fatalerrtest.c | 0 .../ssl/heartbeat_test.c | 0 .../ssl/install-ssl.com | 0 .../ssl/kssl.c | 0 .../ssl/kssl.h | 0 .../ssl/kssl_lcl.h | 0 .../ssl/s23_clnt.c | 0 .../ssl/s23_lib.c | 0 .../ssl/s23_meth.c | 0 .../ssl/s23_pkt.c | 0 .../ssl/s23_srvr.c | 0 .../ssl/s2_clnt.c | 0 .../ssl/s2_enc.c | 0 .../ssl/s2_lib.c | 0 .../ssl/s2_meth.c | 0 .../ssl/s2_pkt.c | 0 .../ssl/s2_srvr.c | 0 .../ssl/s3_both.c | 0 .../ssl/s3_cbc.c | 0 .../ssl/s3_clnt.c | 0 .../ssl/s3_enc.c | 0 .../ssl/s3_lib.c | 0 .../ssl/s3_meth.c | 0 .../ssl/s3_pkt.c | 0 .../ssl/s3_srvr.c | 0 .../ssl/srtp.h | 0 .../ssl/ssl-lib.com | 0 .../ssl/ssl.h | 0 .../ssl/ssl2.h | 0 .../ssl/ssl23.h | 0 .../ssl/ssl3.h | 0 .../ssl/ssl_algs.c | 0 .../ssl/ssl_asn1.c | 0 .../ssl/ssl_cert.c | 0 .../ssl/ssl_ciph.c | 0 .../ssl/ssl_conf.c | 0 .../ssl/ssl_err.c | 0 .../ssl/ssl_err2.c | 0 .../ssl/ssl_lib.c | 0 .../ssl/ssl_locl.h | 0 .../ssl/ssl_rsa.c | 0 .../ssl/ssl_sess.c | 0 .../ssl/ssl_stat.c | 0 .../ssl/ssl_task.c | 0 .../ssl/ssl_txt.c | 0 .../ssl/ssl_utst.c | 0 .../ssl/ssltest.c | 0 .../ssl/sslv2conftest.c | 0 .../ssl/t1_clnt.c | 0 .../ssl/t1_enc.c | 0 .../ssl/t1_ext.c | 0 .../ssl/t1_lib.c | 0 .../ssl/t1_meth.c | 0 .../ssl/t1_reneg.c | 0 .../ssl/t1_srvr.c | 0 .../ssl/t1_trce.c | 0 .../ssl/tls1.h | 0 .../ssl/tls_srp.c | 0 .../test/CAss.cnf | 0 .../test/CAssdh.cnf | 0 .../test/CAssdsa.cnf | 0 .../test/CAssrsa.cnf | 0 .../test/CAtsa.cnf | 0 .../test/Makefile | 0 .../test/P1ss.cnf | 0 .../test/P2ss.cnf | 0 .../test/Sssdsa.cnf | 0 .../test/Sssrsa.cnf | 0 .../test/Uss.cnf | 0 .../test/VMSca-response.1 | 0 .../test/VMSca-response.2 | 0 .../test/asn1test.c | 0 .../test/bctest | 0 .../test/bctest.com | 0 .../test/bntest.com | 0 .../test/certs/bad.key | 0 .../test/certs/bad.pem | 0 .../test/certs/interCA.key | 0 .../test/certs/interCA.pem | 0 .../test/certs/leaf.key | 0 .../test/certs/leaf.pem | 0 .../test/certs/pss1.pem | 0 .../test/certs/rootCA.key | 0 .../test/certs/rootCA.pem | 0 .../test/certs/roots.pem | 0 .../test/certs/subinterCA-ss.pem | 0 .../test/certs/subinterCA.key | 0 .../test/certs/subinterCA.pem | 0 .../test/certs/untrusted.pem | 0 .../test/clean_test.com | 0 .../test/cms-examples.pl | 0 .../test/cms-test.pl | 0 .../test/dummytest.c | 0 .../test/igetest.c | 0 .../test/maketests.com | 0 .../test/methtest.c | 0 .../test/ocsp-tests/D1.ors | 0 .../test/ocsp-tests/D1_Cert_EE.pem | 0 .../test/ocsp-tests/D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/D2.ors | 0 .../test/ocsp-tests/D2_Cert_ICA.pem | 0 .../test/ocsp-tests/D2_Issuer_Root.pem | 0 .../test/ocsp-tests/D3.ors | 0 .../test/ocsp-tests/D3_Cert_EE.pem | 0 .../test/ocsp-tests/D3_Issuer_Root.pem | 0 .../test/ocsp-tests/ISDOSC_D1.ors | 0 .../test/ocsp-tests/ISDOSC_D2.ors | 0 .../test/ocsp-tests/ISDOSC_D3.ors | 0 .../test/ocsp-tests/ISIC_D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/ISIC_D2_Issuer_Root.pem | 0 .../test/ocsp-tests/ISIC_D3_Issuer_Root.pem | 0 .../test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/ISIC_ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/ISIC_ND3_Issuer_Root.pem | 0 .../test/ocsp-tests/ISOP_D1.ors | 0 .../test/ocsp-tests/ISOP_D2.ors | 0 .../test/ocsp-tests/ISOP_D3.ors | 0 .../test/ocsp-tests/ISOP_ND1.ors | 0 .../test/ocsp-tests/ISOP_ND2.ors | 0 .../test/ocsp-tests/ISOP_ND3.ors | 0 .../test/ocsp-tests/ND1.ors | 0 .../test/ocsp-tests/ND1_Cert_EE.pem | 0 .../test/ocsp-tests/ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/ND2.ors | 0 .../test/ocsp-tests/ND2_Cert_ICA.pem | 0 .../test/ocsp-tests/ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/ND3.ors | 0 .../test/ocsp-tests/ND3_Cert_EE.pem | 0 .../test/ocsp-tests/ND3_Issuer_Root.pem | 0 .../test/ocsp-tests/WIKH_D1.ors | 0 .../test/ocsp-tests/WIKH_D2.ors | 0 .../test/ocsp-tests/WIKH_D3.ors | 0 .../test/ocsp-tests/WIKH_ND1.ors | 0 .../test/ocsp-tests/WIKH_ND2.ors | 0 .../test/ocsp-tests/WIKH_ND3.ors | 0 .../test/ocsp-tests/WINH_D1.ors | 0 .../test/ocsp-tests/WINH_D2.ors | 0 .../test/ocsp-tests/WINH_D3.ors | 0 .../test/ocsp-tests/WINH_ND1.ors | 0 .../test/ocsp-tests/WINH_ND2.ors | 0 .../test/ocsp-tests/WINH_ND3.ors | 0 .../test/ocsp-tests/WKDOSC_D1.ors | 0 .../test/ocsp-tests/WKDOSC_D2.ors | 0 .../test/ocsp-tests/WKDOSC_D3.ors | 0 .../test/ocsp-tests/WKIC_D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WKIC_D2_Issuer_Root.pem | 0 .../test/ocsp-tests/WKIC_D3_Issuer_Root.pem | 0 .../test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WKIC_ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/WKIC_ND3_Issuer_Root.pem | 0 .../test/ocsp-tests/WRID_D1.ors | 0 .../test/ocsp-tests/WRID_D2.ors | 0 .../test/ocsp-tests/WRID_D3.ors | 0 .../test/ocsp-tests/WRID_ND1.ors | 0 .../test/ocsp-tests/WRID_ND2.ors | 0 .../test/ocsp-tests/WRID_ND3.ors | 0 .../test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WSNIC_D2_Issuer_Root.pem | 0 .../test/ocsp-tests/WSNIC_D3_Issuer_Root.pem | 0 .../test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem | 0 .../test/pkcs7-1.pem | 0 .../test/pkcs7.pem | 0 .../test/pkits-test.pl | 0 .../test/r160test.c | 0 .../test/recipes/60-test_x509_time.t | 0 .../test/serverinfo.pem | 0 .../test/smcont.txt | 0 .../test/smime-certs/ca.cnf | 0 .../test/smime-certs/mksmime-certs.sh | 0 .../test/smime-certs/smdh.pem | 0 .../test/smime-certs/smdsa1.pem | 0 .../test/smime-certs/smdsa2.pem | 0 .../test/smime-certs/smdsa3.pem | 0 .../test/smime-certs/smdsap.pem | 0 .../test/smime-certs/smec1.pem | 0 .../test/smime-certs/smec2.pem | 0 .../test/smime-certs/smroot.pem | 0 .../test/smime-certs/smrsa1.pem | 0 .../test/smime-certs/smrsa2.pem | 0 .../test/smime-certs/smrsa3.pem | 0 .../test/ssltestlib.c | 0 .../test/ssltestlib.h | 0 .../test/tcrl | 0 .../test/tcrl.com | 0 .../test/test.cnf | 0 .../test/test_padlock | 0 .../test/testca | 0 .../test/testca.com | 0 .../test/testcrl.pem | 0 .../test/testenc | 0 .../test/testenc.com | 0 .../test/testfipsssl | 0 .../test/testgen | 0 .../test/testgen.com | 0 .../test/testp7.pem | 0 .../test/testreq2.pem | 0 .../test/testrsa.pem | 0 .../test/tests.com | 0 .../test/testsid.pem | 0 .../test/testss | 0 .../test/testss.com | 0 .../test/testssl | 0 .../test/testssl.com | 0 .../test/testsslproxy | 0 .../test/testtsa | 0 .../test/testtsa.com | 0 .../test/testutil.h | 0 .../test/testx509.pem | 0 .../test/times | 0 .../test/tocsp | 0 .../test/tocsp.com | 0 .../test/tpkcs7 | 0 .../test/tpkcs7.com | 0 .../test/tpkcs7d | 0 .../test/tpkcs7d.com | 0 .../test/treq | 0 .../test/treq.com | 0 .../test/trsa | 0 .../test/trsa.com | 0 .../test/tsid | 0 .../test/tsid.com | 0 .../test/tverify.com | 0 .../test/tx509 | 0 .../test/tx509.com | 0 .../test/v3-cert1.pem | 0 .../test/v3-cert2.pem | 0 .../test/x509_time_test.c | 0 .../tools/Makefile | 0 .../tools/c89.sh | 0 .../tools/c_hash | 0 .../tools/c_info | 0 .../tools/c_issuer | 0 .../tools/c_name | 0 .../tools/c_rehash.in | 0 .../util/FreeBSD.sh | 0 .../util/add_cr.pl | 0 .../util/bat.sh | 0 .../util/ck_errf.pl | 0 .../util/clean-depend.pl | 0 .../util/copy-if-different.pl | 0 .../util/copy.pl | 0 .../util/cygwin.sh | 0 .../util/deleof.pl | 0 .../util/deltree.com | 0 .../util/dirname.pl | 0 .../util/do_ms.sh | 0 .../util/domd | 0 .../util/err-ins.pl | 0 .../util/extract-names.pl | 0 .../util/extract-section.pl | 0 .../util/files.pl | 0 .../util/fixNT.sh | 0 .../util/indent.pro | 0 .../util/install.sh | 0 .../util/libeay.num | 0 .../util/mk1mf.pl | 0 .../util/mkbuildinf.pl | 0 .../util/mkcerts.sh | 0 .../util/mkdef.pl | 0 .../util/mkdir-p.pl | 0 .../util/mkerr.pl | 0 .../util/mkfiles.pl | 0 .../util/mklink.pl | 0 .../util/mkrc.pl | 0 .../util/mkstack.pl | 0 .../util/openssl-format-source | 0 .../util/opensslwrap.sh | 0 .../util/perlpath.pl | 0 .../util/pl/BC-32.pl | 0 .../util/pl/Mingw32.pl | 0 .../util/pl/OS2-EMX.pl | 0 .../util/pl/VC-32.pl | 0 .../util/pl/linux.pl | 0 .../util/pl/netware.pl | 0 .../util/pl/ultrix.pl | 0 .../util/pl/unix.pl | 0 .../util/pod2man.pl | 0 .../util/pod2mantest | 0 .../util/pod2mantest.pod | 0 .../util/point.sh | 0 .../util/selftest.pl | 0 .../util/shlib_wrap.sh | 0 .../util/sp-diff.pl | 0 .../util/speed.sh | 0 .../util/src-dep.pl | 0 .../util/ssleay.num | 0 .../util/su-filter.pl | 0 .../util/tab_num.pl | 0 .../util/toutf8.sh | 0 .../util/x86asm.sh | 0 src/openssl/openssl-1.1.1t/appveyor.yml | 78 - .../openssl-1.1.1t/crypto/bn/rsa_sup_mul.c | 614 - .../ACKNOWLEDGEMENTS | 0 .../AUTHORS | 0 .../CHANGES | 117 + .../CONTRIBUTING | 0 .../Configurations/00-base-templates.conf | 0 .../Configurations/10-main.conf | 0 .../Configurations/15-android.conf | 0 .../Configurations/15-ios.conf | 0 .../Configurations/50-djgpp.conf | 0 .../Configurations/50-haiku.conf | 0 .../Configurations/50-masm.conf | 0 .../Configurations/50-win-onecore.conf | 0 .../Configurations/INTERNALS.Configure | 0 .../Configurations/README | 0 .../Configurations/README.design | 0 .../Configurations/common.tmpl | 0 .../Configurations/common0.tmpl | 0 .../Configurations/descrip.mms.tmpl | 10 +- .../Configurations/shared-info.pl | 0 .../Configurations/unix-Makefile.tmpl | 0 .../Configurations/unix-checker.pm | 0 .../Configurations/windows-checker.pm | 0 .../Configurations/windows-makefile.tmpl | 3 +- .../Configure | 2 +- .../{openssl-1.1.1t => openssl-1.1.1w}/FAQ | 0 .../INSTALL | 0 .../LICENSE | 0 .../{openssl-1.1.1t => openssl-1.1.1w}/NEWS | 19 + .../NOTES.ANDROID | 0 .../NOTES.DJGPP | 0 .../NOTES.PERL | 0 .../NOTES.UNIX | 0 .../NOTES.VMS | 0 .../NOTES.WIN | 0 .../{openssl-1.1.1t => openssl-1.1.1w}/README | 4 +- .../README.ENGINE | 0 .../README.FIPS | 0 .../VMS/VMSify-conf.pl | 0 .../VMS/engine.opt | 0 .../VMS/msg_install.com | 0 .../VMS/msg_staging.com | 0 .../VMS/openssl_ivp.com.in | 0 .../VMS/openssl_shutdown.com.in | 0 .../VMS/openssl_startup.com.in | 0 .../VMS/openssl_utils.com.in | 0 .../VMS/test-includes.com | 0 .../VMS/translatesyms.pl | 0 .../apps/CA.pl.in | 0 .../apps/app_rand.c | 0 .../apps/apps.c | 0 .../apps/apps.h | 0 .../apps/asn1pars.c | 0 .../apps/bf_prefix.c | 0 .../apps/build.info | 0 .../apps/ca-cert.srl | 0 .../apps/ca-key.pem | 0 .../apps/ca-req.pem | 0 .../apps/ca.c | 0 .../apps/cert.pem | 0 .../apps/ciphers.c | 0 .../apps/client.pem | 0 .../apps/cms.c | 0 .../apps/crl.c | 0 .../apps/crl2p7.c | 0 .../apps/ct_log_list.cnf | 0 .../apps/demoSRP/srp_verifier.txt | 0 .../apps/demoSRP/srp_verifier.txt.attr | 0 .../apps/dgst.c | 0 .../apps/dh1024.pem | 0 .../apps/dh2048.pem | 0 .../apps/dh4096.pem | 0 .../apps/dhparam.c | 0 .../apps/dsa-ca.pem | 0 .../apps/dsa-pca.pem | 0 .../apps/dsa.c | 0 .../apps/dsa1024.pem | 0 .../apps/dsa512.pem | 0 .../apps/dsap.pem | 0 .../apps/dsaparam.c | 0 .../apps/ec.c | 0 .../apps/ecparam.c | 0 .../apps/enc.c | 0 .../apps/engine.c | 0 .../apps/errstr.c | 0 .../apps/gendsa.c | 0 .../apps/genpkey.c | 0 .../apps/genrsa.c | 0 .../apps/nseq.c | 0 .../apps/ocsp.c | 0 .../apps/openssl-vms.cnf | 0 .../apps/openssl.c | 0 .../apps/openssl.cnf | 0 .../apps/opt.c | 0 .../apps/passwd.c | 0 .../apps/pca-cert.srl | 0 .../apps/pca-key.pem | 0 .../apps/pca-req.pem | 0 .../apps/pkcs12.c | 0 .../apps/pkcs7.c | 0 .../apps/pkcs8.c | 0 .../apps/pkey.c | 0 .../apps/pkeyparam.c | 0 .../apps/pkeyutl.c | 0 .../apps/prime.c | 0 .../apps/privkey.pem | 0 .../apps/progs.pl | 0 .../apps/rand.c | 0 .../apps/rehash.c | 0 .../apps/req.c | 0 .../apps/req.pem | 0 .../apps/rsa.c | 0 .../apps/rsa8192.pem | 0 .../apps/rsautl.c | 0 .../apps/s1024key.pem | 0 .../apps/s1024req.pem | 0 .../apps/s512-key.pem | 0 .../apps/s512-req.pem | 0 .../apps/s_apps.h | 0 .../apps/s_cb.c | 0 .../apps/s_client.c | 0 .../apps/s_server.c | 0 .../apps/s_socket.c | 0 .../apps/s_time.c | 0 .../apps/server.pem | 0 .../apps/server.srl | 0 .../apps/server2.pem | 0 .../apps/sess_id.c | 0 .../apps/smime.c | 0 .../apps/speed.c | 0 .../apps/spkac.c | 0 .../apps/srp.c | 0 .../apps/storeutl.c | 0 .../apps/testCA.pem | 0 .../apps/testdsa.h | 0 .../apps/testrsa.h | 0 .../apps/timeouts.h | 0 .../apps/ts.c | 0 .../apps/tsget.in | 0 .../apps/verify.c | 0 .../apps/version.c | 0 .../apps/vms_decc_argv.c | 0 .../apps/vms_decc_init.c | 0 .../apps/vms_term_sock.c | 0 .../apps/vms_term_sock.h | 0 .../apps/win32_init.c | 0 .../apps/x509.c | 0 .../build.info | 0 .../{openssl-1.1.1t => openssl-1.1.1w}/config | 0 .../config.com | 0 .../crypto/LPdir_nyi.c | 0 .../crypto/LPdir_unix.c | 0 .../crypto/LPdir_vms.c | 0 .../crypto/LPdir_win.c | 0 .../crypto/LPdir_win32.c | 0 .../crypto/LPdir_wince.c | 0 .../crypto/aes/aes_cbc.c | 0 .../crypto/aes/aes_cfb.c | 0 .../crypto/aes/aes_core.c | 0 .../crypto/aes/aes_ecb.c | 0 .../crypto/aes/aes_ige.c | 0 .../crypto/aes/aes_local.h | 0 .../crypto/aes/aes_misc.c | 0 .../crypto/aes/aes_ofb.c | 0 .../crypto/aes/aes_wrap.c | 0 .../crypto/aes/aes_x86core.c | 0 .../crypto/aes/asm/aes-armv4.pl | 0 .../crypto/aes/asm/aes-c64xplus.pl | 0 .../crypto/aes/asm/aes-ia64.S | 0 .../crypto/aes/asm/aes-mips.pl | 0 .../crypto/aes/asm/aes-parisc.pl | 0 .../crypto/aes/asm/aes-ppc.pl | 0 .../crypto/aes/asm/aes-s390x.pl | 0 .../crypto/aes/asm/aes-sparcv9.pl | 0 .../crypto/aes/asm/aesfx-sparcv9.pl | 0 .../crypto/aes/asm/aesni-mb-x86_64.pl | 0 .../crypto/aes/asm/aesni-sha1-x86_64.pl | 0 .../crypto/aes/asm/aesni-sha256-x86_64.pl | 0 .../crypto/aes/asm/aesni-x86.pl | 0 .../crypto/aes/asm/aesni-x86_64.pl | 0 .../crypto/aes/asm/aesp8-ppc.pl | 0 .../crypto/aes/asm/aest4-sparcv9.pl | 0 .../crypto/aes/asm/aesv8-armx.pl | 0 .../crypto/aes/asm/bsaes-armv7.pl | 4 +- .../crypto/aes/asm/vpaes-armv8.pl | 0 .../crypto/aes/asm/vpaes-ppc.pl | 0 .../crypto/aes/asm/vpaes-x86.pl | 0 .../crypto/aes/asm/vpaes-x86_64.pl | 0 .../crypto/aes/build.info | 0 .../crypto/alphacpuid.pl | 0 .../crypto/aria/aria.c | 0 .../crypto/aria/build.info | 0 .../crypto/arm64cpuid.pl | 0 .../crypto/arm_arch.h | 0 .../crypto/armcap.c | 0 .../crypto/armv4cpuid.pl | 0 .../crypto/asn1/a_bitstr.c | 8 +- .../crypto/asn1/a_d2i_fp.c | 0 .../crypto/asn1/a_digest.c | 0 .../crypto/asn1/a_dup.c | 0 .../crypto/asn1/a_gentm.c | 0 .../crypto/asn1/a_i2d_fp.c | 0 .../crypto/asn1/a_int.c | 0 .../crypto/asn1/a_mbstr.c | 0 .../crypto/asn1/a_object.c | 0 .../crypto/asn1/a_octet.c | 0 .../crypto/asn1/a_print.c | 0 .../crypto/asn1/a_sign.c | 0 .../crypto/asn1/a_strex.c | 0 .../crypto/asn1/a_strnid.c | 0 .../crypto/asn1/a_time.c | 0 .../crypto/asn1/a_type.c | 0 .../crypto/asn1/a_utctm.c | 0 .../crypto/asn1/a_utf8.c | 0 .../crypto/asn1/a_verify.c | 0 .../crypto/asn1/ameth_lib.c | 11 +- .../crypto/asn1/asn1_err.c | 0 .../crypto/asn1/asn1_gen.c | 0 .../crypto/asn1/asn1_item_list.c | 0 .../crypto/asn1/asn1_item_list.h | 0 .../crypto/asn1/asn1_lib.c | 0 .../crypto/asn1/asn1_local.h | 0 .../crypto/asn1/asn1_par.c | 0 .../crypto/asn1/asn_mime.c | 0 .../crypto/asn1/asn_moid.c | 0 .../crypto/asn1/asn_mstbl.c | 0 .../crypto/asn1/asn_pack.c | 0 .../crypto/asn1/bio_asn1.c | 0 .../crypto/asn1/bio_ndef.c | 0 .../crypto/asn1/build.info | 0 .../crypto/asn1/charmap.h | 0 .../crypto/asn1/charmap.pl | 0 .../crypto/asn1/d2i_pr.c | 0 .../crypto/asn1/d2i_pu.c | 0 .../crypto/asn1/evp_asn1.c | 0 .../crypto/asn1/f_int.c | 0 .../crypto/asn1/f_string.c | 0 .../crypto/asn1/i2d_pr.c | 0 .../crypto/asn1/i2d_pu.c | 0 .../crypto/asn1/n_pkey.c | 0 .../crypto/asn1/nsseq.c | 0 .../crypto/asn1/p5_pbe.c | 0 .../crypto/asn1/p5_pbev2.c | 0 .../crypto/asn1/p5_scrypt.c | 0 .../crypto/asn1/p8_pkey.c | 0 .../crypto/asn1/standard_methods.h | 0 .../crypto/asn1/t_bitst.c | 0 .../crypto/asn1/t_pkey.c | 0 .../crypto/asn1/t_spki.c | 0 .../crypto/asn1/tasn_dec.c | 0 .../crypto/asn1/tasn_enc.c | 0 .../crypto/asn1/tasn_fre.c | 0 .../crypto/asn1/tasn_new.c | 0 .../crypto/asn1/tasn_prn.c | 0 .../crypto/asn1/tasn_scn.c | 0 .../crypto/asn1/tasn_typ.c | 0 .../crypto/asn1/tasn_utl.c | 0 .../crypto/asn1/tbl_standard.h | 0 .../crypto/asn1/x_algor.c | 0 .../crypto/asn1/x_bignum.c | 0 .../crypto/asn1/x_info.c | 0 .../crypto/asn1/x_int64.c | 0 .../crypto/asn1/x_long.c | 0 .../crypto/asn1/x_pkey.c | 0 .../crypto/asn1/x_sig.c | 0 .../crypto/asn1/x_spki.c | 0 .../crypto/asn1/x_val.c | 0 .../crypto/async/arch/async_null.c | 0 .../crypto/async/arch/async_null.h | 0 .../crypto/async/arch/async_posix.c | 0 .../crypto/async/arch/async_posix.h | 0 .../crypto/async/arch/async_win.c | 0 .../crypto/async/arch/async_win.h | 0 .../crypto/async/async.c | 0 .../crypto/async/async_err.c | 0 .../crypto/async/async_local.h | 0 .../crypto/async/async_wait.c | 0 .../crypto/async/build.info | 0 .../crypto/bf/asm/bf-586.pl | 0 .../crypto/bf/bf_cfb64.c | 0 .../crypto/bf/bf_ecb.c | 0 .../crypto/bf/bf_enc.c | 0 .../crypto/bf/bf_local.h | 0 .../crypto/bf/bf_ofb64.c | 0 .../crypto/bf/bf_pi.h | 0 .../crypto/bf/bf_skey.c | 0 .../crypto/bf/build.info | 0 .../crypto/bio/b_addr.c | 0 .../crypto/bio/b_dump.c | 0 .../crypto/bio/b_print.c | 1 - .../crypto/bio/b_sock.c | 0 .../crypto/bio/b_sock2.c | 0 .../crypto/bio/bf_buff.c | 0 .../crypto/bio/bf_lbuf.c | 0 .../crypto/bio/bf_nbio.c | 0 .../crypto/bio/bf_null.c | 0 .../crypto/bio/bio_cb.c | 0 .../crypto/bio/bio_err.c | 0 .../crypto/bio/bio_lib.c | 0 .../crypto/bio/bio_local.h | 0 .../crypto/bio/bio_meth.c | 0 .../crypto/bio/bss_acpt.c | 0 .../crypto/bio/bss_bio.c | 0 .../crypto/bio/bss_conn.c | 0 .../crypto/bio/bss_dgram.c | 0 .../crypto/bio/bss_fd.c | 0 .../crypto/bio/bss_file.c | 0 .../crypto/bio/bss_log.c | 0 .../crypto/bio/bss_mem.c | 0 .../crypto/bio/bss_null.c | 0 .../crypto/bio/bss_sock.c | 0 .../crypto/bio/build.info | 0 .../crypto/blake2/blake2_impl.h | 0 .../crypto/blake2/blake2_local.h | 0 .../crypto/blake2/blake2b.c | 0 .../crypto/blake2/blake2s.c | 0 .../crypto/blake2/build.info | 0 .../crypto/blake2/m_blake2b.c | 0 .../crypto/blake2/m_blake2s.c | 0 .../crypto/bn/README.pod | 0 .../crypto/bn/asm/alpha-mont.pl | 0 .../crypto/bn/asm/armv4-gf2m.pl | 0 .../crypto/bn/asm/armv4-mont.pl | 0 .../crypto/bn/asm/armv8-mont.pl | 0 .../crypto/bn/asm/bn-586.pl | 0 .../crypto/bn/asm/bn-c64xplus.asm | 0 .../crypto/bn/asm/c64xplus-gf2m.pl | 0 .../crypto/bn/asm/co-586.pl | 0 .../crypto/bn/asm/ia64-mont.pl | 0 .../crypto/bn/asm/ia64.S | 0 .../crypto/bn/asm/mips-mont.pl | 0 .../crypto/bn/asm/mips.pl | 0 .../crypto/bn/asm/parisc-mont.pl | 0 .../crypto/bn/asm/ppc-mont.pl | 0 .../crypto/bn/asm/ppc.pl | 0 .../crypto/bn/asm/ppc64-mont.pl | 0 .../crypto/bn/asm/rsaz-avx2.pl | 0 .../crypto/bn/asm/rsaz-x86_64.pl | 0 .../crypto/bn/asm/s390x-gf2m.pl | 0 .../crypto/bn/asm/s390x-mont.pl | 0 .../crypto/bn/asm/s390x.S | 0 .../crypto/bn/asm/sparct4-mont.pl | 0 .../crypto/bn/asm/sparcv8.S | 0 .../crypto/bn/asm/sparcv8plus.S | 0 .../crypto/bn/asm/sparcv9-gf2m.pl | 0 .../crypto/bn/asm/sparcv9-mont.pl | 0 .../crypto/bn/asm/sparcv9a-mont.pl | 0 .../crypto/bn/asm/via-mont.pl | 0 .../crypto/bn/asm/vis3-mont.pl | 0 .../crypto/bn/asm/x86-gf2m.pl | 0 .../crypto/bn/asm/x86-mont.pl | 0 .../crypto/bn/asm/x86_64-gcc.c | 0 .../crypto/bn/asm/x86_64-gf2m.pl | 0 .../crypto/bn/asm/x86_64-mont.pl | 0 .../crypto/bn/asm/x86_64-mont5.pl | 0 .../crypto/bn/bn_add.c | 0 .../crypto/bn/bn_asm.c | 108 +- .../crypto/bn/bn_blind.c | 17 +- .../crypto/bn/bn_const.c | 0 .../crypto/bn/bn_ctx.c | 0 .../crypto/bn/bn_depr.c | 0 .../crypto/bn/bn_dh.c | 0 .../crypto/bn/bn_div.c | 0 .../crypto/bn/bn_err.c | 2 - .../crypto/bn/bn_exp.c | 0 .../crypto/bn/bn_exp2.c | 0 .../crypto/bn/bn_gcd.c | 0 .../crypto/bn/bn_gf2m.c | 0 .../crypto/bn/bn_intern.c | 0 .../crypto/bn/bn_kron.c | 0 .../crypto/bn/bn_lib.c | 24 +- .../crypto/bn/bn_local.h | 40 +- .../crypto/bn/bn_mod.c | 0 .../crypto/bn/bn_mont.c | 0 .../crypto/bn/bn_mpi.c | 0 .../crypto/bn/bn_mul.c | 0 .../crypto/bn/bn_nist.c | 0 .../crypto/bn/bn_prime.c | 0 .../crypto/bn/bn_prime.h | 0 .../crypto/bn/bn_prime.pl | 0 .../crypto/bn/bn_print.c | 0 .../crypto/bn/bn_rand.c | 0 .../crypto/bn/bn_recp.c | 0 .../crypto/bn/bn_shift.c | 0 .../crypto/bn/bn_sqr.c | 0 .../crypto/bn/bn_sqrt.c | 0 .../crypto/bn/bn_srp.c | 0 .../crypto/bn/bn_word.c | 0 .../crypto/bn/bn_x931p.c | 0 .../crypto/bn/build.info | 3 +- .../crypto/bn/rsaz_exp.c | 0 .../crypto/bn/rsaz_exp.h | 0 .../crypto/buffer/buf_err.c | 0 .../crypto/buffer/buffer.c | 0 .../crypto/buffer/build.info | 0 .../crypto/build.info | 0 .../crypto/c64xpluscpuid.pl | 0 .../crypto/camellia/asm/cmll-x86.pl | 0 .../crypto/camellia/asm/cmll-x86_64.pl | 0 .../crypto/camellia/asm/cmllt4-sparcv9.pl | 0 .../crypto/camellia/build.info | 0 .../crypto/camellia/camellia.c | 0 .../crypto/camellia/cmll_cbc.c | 0 .../crypto/camellia/cmll_cfb.c | 0 .../crypto/camellia/cmll_ctr.c | 0 .../crypto/camellia/cmll_ecb.c | 0 .../crypto/camellia/cmll_local.h | 0 .../crypto/camellia/cmll_misc.c | 0 .../crypto/camellia/cmll_ofb.c | 0 .../crypto/cast/asm/cast-586.pl | 0 .../crypto/cast/build.info | 0 .../crypto/cast/c_cfb64.c | 0 .../crypto/cast/c_ecb.c | 0 .../crypto/cast/c_enc.c | 0 .../crypto/cast/c_ofb64.c | 0 .../crypto/cast/c_skey.c | 0 .../crypto/cast/cast_local.h | 0 .../crypto/cast/cast_s.h | 0 .../crypto/chacha/asm/chacha-armv4.pl | 0 .../crypto/chacha/asm/chacha-armv8.pl | 0 .../crypto/chacha/asm/chacha-c64xplus.pl | 0 .../crypto/chacha/asm/chacha-ppc.pl | 0 .../crypto/chacha/asm/chacha-s390x.pl | 0 .../crypto/chacha/asm/chacha-x86.pl | 0 .../crypto/chacha/asm/chacha-x86_64.pl | 0 .../crypto/chacha/build.info | 0 .../crypto/chacha/chacha_enc.c | 0 .../crypto/cmac/build.info | 0 .../crypto/cmac/cm_ameth.c | 0 .../crypto/cmac/cm_pmeth.c | 0 .../crypto/cmac/cmac.c | 0 .../crypto/cms/build.info | 0 .../crypto/cms/cms_asn1.c | 17 +- .../crypto/cms/cms_att.c | 0 .../crypto/cms/cms_cd.c | 0 .../crypto/cms/cms_dd.c | 0 .../crypto/cms/cms_enc.c | 0 .../crypto/cms/cms_env.c | 0 .../crypto/cms/cms_err.c | 0 .../crypto/cms/cms_ess.c | 0 .../crypto/cms/cms_io.c | 0 .../crypto/cms/cms_kari.c | 0 .../crypto/cms/cms_lib.c | 0 .../crypto/cms/cms_local.h | 3 +- .../crypto/cms/cms_pwri.c | 0 .../crypto/cms/cms_sd.c | 16 +- .../crypto/cms/cms_smime.c | 5 +- .../crypto/comp/build.info | 0 .../crypto/comp/c_zlib.c | 0 .../crypto/comp/comp_err.c | 0 .../crypto/comp/comp_lib.c | 0 .../crypto/comp/comp_local.h | 0 .../crypto/conf/build.info | 0 .../crypto/conf/conf_api.c | 0 .../crypto/conf/conf_def.c | 0 .../crypto/conf/conf_def.h | 0 .../crypto/conf/conf_err.c | 0 .../crypto/conf/conf_lib.c | 0 .../crypto/conf/conf_local.h | 0 .../crypto/conf/conf_mall.c | 0 .../crypto/conf/conf_mod.c | 0 .../crypto/conf/conf_sap.c | 7 +- .../crypto/conf/conf_ssl.c | 0 .../crypto/conf/keysets.pl | 0 .../crypto/cpt_err.c | 0 .../crypto/cryptlib.c | 0 .../crypto/ct/build.info | 0 .../crypto/ct/ct_b64.c | 0 .../crypto/ct/ct_err.c | 0 .../crypto/ct/ct_local.h | 0 .../crypto/ct/ct_log.c | 0 .../crypto/ct/ct_oct.c | 0 .../crypto/ct/ct_policy.c | 0 .../crypto/ct/ct_prn.c | 0 .../crypto/ct/ct_sct.c | 0 .../crypto/ct/ct_sct_ctx.c | 0 .../crypto/ct/ct_vfy.c | 0 .../crypto/ct/ct_x509v3.c | 0 .../crypto/ctype.c | 0 .../crypto/cversion.c | 0 .../crypto/des/asm/crypt586.pl | 0 .../crypto/des/asm/des-586.pl | 0 .../crypto/des/asm/des_enc.m4 | 0 .../crypto/des/asm/desboth.pl | 0 .../crypto/des/asm/dest4-sparcv9.pl | 0 .../crypto/des/build.info | 0 .../crypto/des/cbc_cksm.c | 0 .../crypto/des/cbc_enc.c | 0 .../crypto/des/cfb64ede.c | 0 .../crypto/des/cfb64enc.c | 0 .../crypto/des/cfb_enc.c | 0 .../crypto/des/des_enc.c | 0 .../crypto/des/des_local.h | 0 .../crypto/des/ecb3_enc.c | 0 .../crypto/des/ecb_enc.c | 0 .../crypto/des/fcrypt.c | 0 .../crypto/des/fcrypt_b.c | 0 .../crypto/des/ncbc_enc.c | 0 .../crypto/des/ofb64ede.c | 0 .../crypto/des/ofb64enc.c | 0 .../crypto/des/ofb_enc.c | 0 .../crypto/des/pcbc_enc.c | 0 .../crypto/des/qud_cksm.c | 0 .../crypto/des/rand_key.c | 0 .../crypto/des/set_key.c | 0 .../crypto/des/spr.h | 0 .../crypto/des/str2key.c | 0 .../crypto/des/xcbc_enc.c | 0 .../crypto/dh/build.info | 0 .../crypto/dh/dh1024.pem | 0 .../crypto/dh/dh192.pem | 0 .../crypto/dh/dh2048.pem | 0 .../crypto/dh/dh4096.pem | 0 .../crypto/dh/dh512.pem | 0 .../crypto/dh/dh_ameth.c | 0 .../crypto/dh/dh_asn1.c | 0 .../crypto/dh/dh_check.c | 20 +- .../crypto/dh/dh_depr.c | 0 .../crypto/dh/dh_err.c | 3 +- .../crypto/dh/dh_gen.c | 0 .../crypto/dh/dh_kdf.c | 0 .../crypto/dh/dh_key.c | 0 .../crypto/dh/dh_lib.c | 0 .../crypto/dh/dh_local.h | 0 .../crypto/dh/dh_meth.c | 0 .../crypto/dh/dh_pmeth.c | 0 .../crypto/dh/dh_prn.c | 0 .../crypto/dh/dh_rfc5114.c | 0 .../crypto/dh/dh_rfc7919.c | 0 .../crypto/dllmain.c | 0 .../crypto/dsa/build.info | 0 .../crypto/dsa/dsa_ameth.c | 0 .../crypto/dsa/dsa_asn1.c | 0 .../crypto/dsa/dsa_depr.c | 0 .../crypto/dsa/dsa_err.c | 0 .../crypto/dsa/dsa_gen.c | 0 .../crypto/dsa/dsa_key.c | 0 .../crypto/dsa/dsa_lib.c | 0 .../crypto/dsa/dsa_local.h | 0 .../crypto/dsa/dsa_meth.c | 0 .../crypto/dsa/dsa_ossl.c | 0 .../crypto/dsa/dsa_pmeth.c | 0 .../crypto/dsa/dsa_prn.c | 0 .../crypto/dsa/dsa_sign.c | 0 .../crypto/dsa/dsa_vrf.c | 0 .../crypto/dso/build.info | 0 .../crypto/dso/dso_dl.c | 0 .../crypto/dso/dso_dlfcn.c | 0 .../crypto/dso/dso_err.c | 0 .../crypto/dso/dso_lib.c | 0 .../crypto/dso/dso_local.h | 0 .../crypto/dso/dso_openssl.c | 0 .../crypto/dso/dso_vms.c | 0 .../crypto/dso/dso_win32.c | 0 .../crypto/ebcdic.c | 0 .../crypto/ec/asm/ecp_nistz256-armv4.pl | 0 .../crypto/ec/asm/ecp_nistz256-armv8.pl | 0 .../crypto/ec/asm/ecp_nistz256-ppc64.pl | 0 .../crypto/ec/asm/ecp_nistz256-sparcv9.pl | 0 .../crypto/ec/asm/ecp_nistz256-x86.pl | 0 .../crypto/ec/asm/ecp_nistz256-x86_64.pl | 0 .../crypto/ec/asm/x25519-ppc64.pl | 0 .../crypto/ec/asm/x25519-x86_64.pl | 0 .../crypto/ec/build.info | 0 .../crypto/ec/curve25519.c | 0 .../ec/curve448/arch_32/arch_intrinsics.h | 0 .../crypto/ec/curve448/arch_32/f_impl.c | 0 .../crypto/ec/curve448/arch_32/f_impl.h | 0 .../crypto/ec/curve448/curve448.c | 0 .../crypto/ec/curve448/curve448_local.h | 0 .../crypto/ec/curve448/curve448_tables.c | 0 .../crypto/ec/curve448/curve448utils.h | 0 .../crypto/ec/curve448/ed448.h | 0 .../crypto/ec/curve448/eddsa.c | 0 .../crypto/ec/curve448/f_generic.c | 0 .../crypto/ec/curve448/field.h | 0 .../crypto/ec/curve448/point_448.h | 0 .../crypto/ec/curve448/scalar.c | 0 .../crypto/ec/curve448/word.h | 0 .../crypto/ec/ec2_oct.c | 0 .../crypto/ec/ec2_smpl.c | 0 .../crypto/ec/ec_ameth.c | 19 +- .../crypto/ec/ec_asn1.c | 0 .../crypto/ec/ec_check.c | 0 .../crypto/ec/ec_curve.c | 0 .../crypto/ec/ec_cvt.c | 0 .../crypto/ec/ec_err.c | 0 .../crypto/ec/ec_key.c | 0 .../crypto/ec/ec_kmeth.c | 0 .../crypto/ec/ec_lib.c | 0 .../crypto/ec/ec_local.h | 0 .../crypto/ec/ec_mult.c | 0 .../crypto/ec/ec_oct.c | 0 .../crypto/ec/ec_pmeth.c | 0 .../crypto/ec/ec_print.c | 0 .../crypto/ec/ecdh_kdf.c | 0 .../crypto/ec/ecdh_ossl.c | 0 .../crypto/ec/ecdsa_ossl.c | 0 .../crypto/ec/ecdsa_sign.c | 0 .../crypto/ec/ecdsa_vrf.c | 0 .../crypto/ec/eck_prn.c | 0 .../crypto/ec/ecp_mont.c | 0 .../crypto/ec/ecp_nist.c | 0 .../crypto/ec/ecp_nistp224.c | 0 .../crypto/ec/ecp_nistp256.c | 0 .../crypto/ec/ecp_nistp521.c | 0 .../crypto/ec/ecp_nistputil.c | 0 .../crypto/ec/ecp_nistz256.c | 0 .../crypto/ec/ecp_nistz256_table.c | 0 .../crypto/ec/ecp_oct.c | 0 .../crypto/ec/ecp_smpl.c | 0 .../crypto/ec/ecx_meth.c | 0 .../crypto/engine/README | 0 .../crypto/engine/build.info | 0 .../crypto/engine/eng_all.c | 0 .../crypto/engine/eng_cnf.c | 0 .../crypto/engine/eng_ctrl.c | 0 .../crypto/engine/eng_devcrypto.c | 0 .../crypto/engine/eng_dyn.c | 0 .../crypto/engine/eng_err.c | 0 .../crypto/engine/eng_fat.c | 0 .../crypto/engine/eng_init.c | 0 .../crypto/engine/eng_lib.c | 0 .../crypto/engine/eng_list.c | 0 .../crypto/engine/eng_local.h | 0 .../crypto/engine/eng_openssl.c | 0 .../crypto/engine/eng_pkey.c | 0 .../crypto/engine/eng_rdrand.c | 0 .../crypto/engine/eng_table.c | 0 .../crypto/engine/tb_asnmth.c | 0 .../crypto/engine/tb_cipher.c | 0 .../crypto/engine/tb_dh.c | 0 .../crypto/engine/tb_digest.c | 0 .../crypto/engine/tb_dsa.c | 0 .../crypto/engine/tb_eckey.c | 0 .../crypto/engine/tb_pkmeth.c | 0 .../crypto/engine/tb_rand.c | 0 .../crypto/engine/tb_rsa.c | 0 .../crypto/err/README | 0 .../crypto/err/build.info | 0 .../crypto/err/err.c | 0 .../crypto/err/err_all.c | 0 .../crypto/err/err_prn.c | 0 .../crypto/err/openssl.ec | 0 .../crypto/err/openssl.txt | 2 +- .../crypto/evp/bio_b64.c | 0 .../crypto/evp/bio_enc.c | 0 .../crypto/evp/bio_md.c | 0 .../crypto/evp/bio_ok.c | 0 .../crypto/evp/build.info | 0 .../crypto/evp/c_allc.c | 0 .../crypto/evp/c_alld.c | 0 .../crypto/evp/cmeth_lib.c | 0 .../crypto/evp/digest.c | 0 .../crypto/evp/e_aes.c | 0 .../crypto/evp/e_aes_cbc_hmac_sha1.c | 0 .../crypto/evp/e_aes_cbc_hmac_sha256.c | 0 .../crypto/evp/e_aria.c | 0 .../crypto/evp/e_bf.c | 0 .../crypto/evp/e_camellia.c | 0 .../crypto/evp/e_cast.c | 0 .../crypto/evp/e_chacha20_poly1305.c | 0 .../crypto/evp/e_des.c | 0 .../crypto/evp/e_des3.c | 0 .../crypto/evp/e_idea.c | 0 .../crypto/evp/e_null.c | 0 .../crypto/evp/e_old.c | 0 .../crypto/evp/e_rc2.c | 0 .../crypto/evp/e_rc4.c | 0 .../crypto/evp/e_rc4_hmac_md5.c | 0 .../crypto/evp/e_rc5.c | 0 .../crypto/evp/e_seed.c | 0 .../crypto/evp/e_sm4.c | 0 .../crypto/evp/e_xcbc_d.c | 0 .../crypto/evp/encode.c | 0 .../crypto/evp/evp_cnf.c | 0 .../crypto/evp/evp_enc.c | 0 .../crypto/evp/evp_err.c | 0 .../crypto/evp/evp_key.c | 0 .../crypto/evp/evp_lib.c | 0 .../crypto/evp/evp_local.h | 0 .../crypto/evp/evp_pbe.c | 0 .../crypto/evp/evp_pkey.c | 0 .../crypto/evp/m_md2.c | 0 .../crypto/evp/m_md4.c | 0 .../crypto/evp/m_md5.c | 0 .../crypto/evp/m_md5_sha1.c | 0 .../crypto/evp/m_mdc2.c | 0 .../crypto/evp/m_null.c | 0 .../crypto/evp/m_ripemd.c | 0 .../crypto/evp/m_sha1.c | 0 .../crypto/evp/m_sha3.c | 0 .../crypto/evp/m_sigver.c | 0 .../crypto/evp/m_wp.c | 0 .../crypto/evp/names.c | 0 .../crypto/evp/p5_crpt.c | 0 .../crypto/evp/p5_crpt2.c | 0 .../crypto/evp/p_dec.c | 0 .../crypto/evp/p_enc.c | 0 .../crypto/evp/p_lib.c | 0 .../crypto/evp/p_open.c | 0 .../crypto/evp/p_seal.c | 0 .../crypto/evp/p_sign.c | 0 .../crypto/evp/p_verify.c | 0 .../crypto/evp/pbe_scrypt.c | 0 .../crypto/evp/pmeth_fn.c | 0 .../crypto/evp/pmeth_gn.c | 0 .../crypto/evp/pmeth_lib.c | 0 .../crypto/ex_data.c | 0 .../crypto/getenv.c | 0 .../crypto/hmac/build.info | 0 .../crypto/hmac/hm_ameth.c | 0 .../crypto/hmac/hm_pmeth.c | 0 .../crypto/hmac/hmac.c | 0 .../crypto/hmac/hmac_local.h | 0 .../crypto/ia64cpuid.S | 0 .../crypto/idea/build.info | 0 .../crypto/idea/i_cbc.c | 0 .../crypto/idea/i_cfb64.c | 0 .../crypto/idea/i_ecb.c | 0 .../crypto/idea/i_ofb64.c | 0 .../crypto/idea/i_skey.c | 0 .../crypto/idea/idea_local.h | 0 .../crypto/init.c | 0 .../crypto/kdf/build.info | 0 .../crypto/kdf/hkdf.c | 0 .../crypto/kdf/kdf_err.c | 0 .../crypto/kdf/scrypt.c | 0 .../crypto/kdf/tls1_prf.c | 0 .../crypto/lhash/build.info | 0 .../crypto/lhash/lh_stats.c | 0 .../crypto/lhash/lhash.c | 0 .../crypto/lhash/lhash_local.h | 0 .../crypto/md2/build.info | 0 .../crypto/md2/md2_dgst.c | 0 .../crypto/md2/md2_one.c | 0 .../crypto/md4/build.info | 0 .../crypto/md4/md4_dgst.c | 0 .../crypto/md4/md4_local.h | 0 .../crypto/md4/md4_one.c | 0 .../crypto/md5/asm/md5-586.pl | 0 .../crypto/md5/asm/md5-sparcv9.pl | 0 .../crypto/md5/asm/md5-x86_64.pl | 0 .../crypto/md5/build.info | 0 .../crypto/md5/md5_dgst.c | 0 .../crypto/md5/md5_local.h | 0 .../crypto/md5/md5_one.c | 0 .../crypto/mdc2/build.info | 0 .../crypto/mdc2/mdc2_one.c | 0 .../crypto/mdc2/mdc2dgst.c | 0 .../crypto/mem.c | 0 .../crypto/mem_clr.c | 0 .../crypto/mem_dbg.c | 0 .../crypto/mem_sec.c | 0 .../crypto/mips_arch.h | 0 .../crypto/modes/asm/aesni-gcm-x86_64.pl | 0 .../crypto/modes/asm/ghash-alpha.pl | 0 .../crypto/modes/asm/ghash-armv4.pl | 0 .../crypto/modes/asm/ghash-c64xplus.pl | 0 .../crypto/modes/asm/ghash-ia64.pl | 0 .../crypto/modes/asm/ghash-parisc.pl | 0 .../crypto/modes/asm/ghash-s390x.pl | 0 .../crypto/modes/asm/ghash-sparcv9.pl | 0 .../crypto/modes/asm/ghash-x86.pl | 0 .../crypto/modes/asm/ghash-x86_64.pl | 0 .../crypto/modes/asm/ghashp8-ppc.pl | 0 .../crypto/modes/asm/ghashv8-armx.pl | 0 .../crypto/modes/build.info | 0 .../crypto/modes/cbc128.c | 0 .../crypto/modes/ccm128.c | 0 .../crypto/modes/cfb128.c | 0 .../crypto/modes/ctr128.c | 0 .../crypto/modes/cts128.c | 0 .../crypto/modes/gcm128.c | 0 .../crypto/modes/modes_local.h | 0 .../crypto/modes/ocb128.c | 0 .../crypto/modes/ofb128.c | 0 .../crypto/modes/wrap128.c | 0 .../crypto/modes/xts128.c | 0 .../crypto/o_dir.c | 0 .../crypto/o_fips.c | 0 .../crypto/o_fopen.c | 0 .../crypto/o_init.c | 0 .../crypto/o_str.c | 0 .../crypto/o_time.c | 0 .../crypto/objects/README | 0 .../crypto/objects/build.info | 0 .../crypto/objects/o_names.c | 0 .../crypto/objects/obj_dat.c | 21 +- .../crypto/objects/obj_dat.h | 0 .../crypto/objects/obj_dat.pl | 0 .../crypto/objects/obj_err.c | 0 .../crypto/objects/obj_lib.c | 0 .../crypto/objects/obj_local.h | 0 .../crypto/objects/obj_mac.num | 0 .../crypto/objects/obj_xref.c | 0 .../crypto/objects/obj_xref.h | 0 .../crypto/objects/obj_xref.txt | 0 .../crypto/objects/objects.pl | 0 .../crypto/objects/objects.txt | 0 .../crypto/objects/objxref.pl | 0 .../crypto/ocsp/build.info | 0 .../crypto/ocsp/ocsp_asn.c | 0 .../crypto/ocsp/ocsp_cl.c | 0 .../crypto/ocsp/ocsp_err.c | 0 .../crypto/ocsp/ocsp_ext.c | 0 .../crypto/ocsp/ocsp_ht.c | 0 .../crypto/ocsp/ocsp_lib.c | 0 .../crypto/ocsp/ocsp_local.h | 0 .../crypto/ocsp/ocsp_prn.c | 0 .../crypto/ocsp/ocsp_srv.c | 0 .../crypto/ocsp/ocsp_vfy.c | 0 .../crypto/ocsp/v3_ocsp.c | 0 .../crypto/pariscid.pl | 0 .../crypto/pem/build.info | 0 .../crypto/pem/pem_all.c | 0 .../crypto/pem/pem_err.c | 0 .../crypto/pem/pem_info.c | 0 .../crypto/pem/pem_lib.c | 0 .../crypto/pem/pem_oth.c | 0 .../crypto/pem/pem_pk8.c | 0 .../crypto/pem/pem_pkey.c | 0 .../crypto/pem/pem_sign.c | 0 .../crypto/pem/pem_x509.c | 0 .../crypto/pem/pem_xaux.c | 0 .../crypto/pem/pvkfmt.c | 0 .../crypto/perlasm/README | 0 .../crypto/perlasm/arm-xlate.pl | 0 .../crypto/perlasm/cbc.pl | 0 .../crypto/perlasm/ppc-xlate.pl | 0 .../crypto/perlasm/sparcv9_modes.pl | 0 .../crypto/perlasm/x86_64-xlate.pl | 0 .../crypto/perlasm/x86asm.pl | 0 .../crypto/perlasm/x86gas.pl | 0 .../crypto/perlasm/x86masm.pl | 0 .../crypto/perlasm/x86nasm.pl | 0 .../crypto/pkcs12/build.info | 0 .../crypto/pkcs12/p12_add.c | 0 .../crypto/pkcs12/p12_asn.c | 0 .../crypto/pkcs12/p12_attr.c | 0 .../crypto/pkcs12/p12_crpt.c | 0 .../crypto/pkcs12/p12_crt.c | 0 .../crypto/pkcs12/p12_decr.c | 0 .../crypto/pkcs12/p12_init.c | 0 .../crypto/pkcs12/p12_key.c | 0 .../crypto/pkcs12/p12_kiss.c | 0 .../crypto/pkcs12/p12_local.h | 0 .../crypto/pkcs12/p12_mutl.c | 0 .../crypto/pkcs12/p12_npas.c | 0 .../crypto/pkcs12/p12_p8d.c | 0 .../crypto/pkcs12/p12_p8e.c | 0 .../crypto/pkcs12/p12_sbag.c | 0 .../crypto/pkcs12/p12_utl.c | 0 .../crypto/pkcs12/pk12err.c | 0 .../crypto/pkcs7/bio_pk7.c | 0 .../crypto/pkcs7/build.info | 0 .../crypto/pkcs7/pk7_asn1.c | 0 .../crypto/pkcs7/pk7_attr.c | 0 .../crypto/pkcs7/pk7_doit.c | 0 .../crypto/pkcs7/pk7_lib.c | 0 .../crypto/pkcs7/pk7_mime.c | 0 .../crypto/pkcs7/pk7_smime.c | 0 .../crypto/pkcs7/pkcs7err.c | 0 .../crypto/poly1305/asm/poly1305-armv4.pl | 0 .../crypto/poly1305/asm/poly1305-armv8.pl | 0 .../crypto/poly1305/asm/poly1305-c64xplus.pl | 0 .../crypto/poly1305/asm/poly1305-mips.pl | 0 .../crypto/poly1305/asm/poly1305-ppc.pl | 0 .../crypto/poly1305/asm/poly1305-ppcfp.pl | 0 .../crypto/poly1305/asm/poly1305-s390x.pl | 0 .../crypto/poly1305/asm/poly1305-sparcv9.pl | 0 .../crypto/poly1305/asm/poly1305-x86.pl | 0 .../crypto/poly1305/asm/poly1305-x86_64.pl | 6 +- .../crypto/poly1305/build.info | 0 .../crypto/poly1305/poly1305.c | 0 .../crypto/poly1305/poly1305_ameth.c | 0 .../crypto/poly1305/poly1305_base2_44.c | 0 .../crypto/poly1305/poly1305_ieee754.c | 0 .../crypto/poly1305/poly1305_local.h | 0 .../crypto/poly1305/poly1305_pmeth.c | 0 .../crypto/ppc_arch.h | 0 .../crypto/ppccap.c | 0 .../crypto/ppccpuid.pl | 0 .../crypto/rand/build.info | 0 .../crypto/rand/drbg_ctr.c | 0 .../crypto/rand/drbg_lib.c | 0 .../crypto/rand/rand_egd.c | 0 .../crypto/rand/rand_err.c | 0 .../crypto/rand/rand_lib.c | 0 .../crypto/rand/rand_local.h | 0 .../crypto/rand/rand_unix.c | 0 .../crypto/rand/rand_vms.c | 0 .../crypto/rand/rand_win.c | 0 .../crypto/rand/randfile.c | 0 .../crypto/rc2/build.info | 0 .../crypto/rc2/rc2_cbc.c | 0 .../crypto/rc2/rc2_ecb.c | 0 .../crypto/rc2/rc2_local.h | 0 .../crypto/rc2/rc2_skey.c | 0 .../crypto/rc2/rc2cfb64.c | 0 .../crypto/rc2/rc2ofb64.c | 0 .../crypto/rc4/asm/rc4-586.pl | 0 .../crypto/rc4/asm/rc4-c64xplus.pl | 0 .../crypto/rc4/asm/rc4-md5-x86_64.pl | 0 .../crypto/rc4/asm/rc4-parisc.pl | 0 .../crypto/rc4/asm/rc4-s390x.pl | 0 .../crypto/rc4/asm/rc4-x86_64.pl | 0 .../crypto/rc4/build.info | 0 .../crypto/rc4/rc4_enc.c | 0 .../crypto/rc4/rc4_local.h | 0 .../crypto/rc4/rc4_skey.c | 0 .../crypto/rc5/asm/rc5-586.pl | 0 .../crypto/rc5/build.info | 0 .../crypto/rc5/rc5_ecb.c | 0 .../crypto/rc5/rc5_enc.c | 0 .../crypto/rc5/rc5_local.h | 0 .../crypto/rc5/rc5_skey.c | 0 .../crypto/rc5/rc5cfb64.c | 0 .../crypto/rc5/rc5ofb64.c | 0 .../crypto/ripemd/asm/rmd-586.pl | 0 .../crypto/ripemd/build.info | 0 .../crypto/ripemd/rmd_dgst.c | 0 .../crypto/ripemd/rmd_local.h | 0 .../crypto/ripemd/rmd_one.c | 0 .../crypto/ripemd/rmdconst.h | 0 .../crypto/rsa/build.info | 0 .../crypto/rsa/rsa_ameth.c | 7 +- .../crypto/rsa/rsa_asn1.c | 0 .../crypto/rsa/rsa_chk.c | 0 .../crypto/rsa/rsa_crpt.c | 0 .../crypto/rsa/rsa_depr.c | 0 .../crypto/rsa/rsa_err.c | 0 .../crypto/rsa/rsa_gen.c | 0 .../crypto/rsa/rsa_lib.c | 0 .../crypto/rsa/rsa_local.h | 0 .../crypto/rsa/rsa_meth.c | 0 .../crypto/rsa/rsa_mp.c | 0 .../crypto/rsa/rsa_none.c | 0 .../crypto/rsa/rsa_oaep.c | 0 .../crypto/rsa/rsa_ossl.c | 30 +- .../crypto/rsa/rsa_pk1.c | 0 .../crypto/rsa/rsa_pmeth.c | 0 .../crypto/rsa/rsa_prn.c | 0 .../crypto/rsa/rsa_pss.c | 0 .../crypto/rsa/rsa_saos.c | 0 .../crypto/rsa/rsa_sign.c | 0 .../crypto/rsa/rsa_ssl.c | 0 .../crypto/rsa/rsa_x931.c | 0 .../crypto/rsa/rsa_x931g.c | 0 .../crypto/s390x_arch.h | 0 .../crypto/s390xcap.c | 0 .../crypto/s390xcpuid.pl | 0 .../crypto/seed/build.info | 0 .../crypto/seed/seed.c | 0 .../crypto/seed/seed_cbc.c | 0 .../crypto/seed/seed_cfb.c | 0 .../crypto/seed/seed_ecb.c | 0 .../crypto/seed/seed_local.h | 0 .../crypto/seed/seed_ofb.c | 0 .../crypto/sha/asm/keccak1600-armv4.pl | 0 .../crypto/sha/asm/keccak1600-armv8.pl | 0 .../crypto/sha/asm/keccak1600-avx2.pl | 0 .../crypto/sha/asm/keccak1600-avx512.pl | 0 .../crypto/sha/asm/keccak1600-avx512vl.pl | 0 .../crypto/sha/asm/keccak1600-c64x.pl | 0 .../crypto/sha/asm/keccak1600-mmx.pl | 0 .../crypto/sha/asm/keccak1600-ppc64.pl | 0 .../crypto/sha/asm/keccak1600-s390x.pl | 0 .../crypto/sha/asm/keccak1600-x86_64.pl | 0 .../crypto/sha/asm/keccak1600p8-ppc.pl | 0 .../crypto/sha/asm/sha1-586.pl | 0 .../crypto/sha/asm/sha1-alpha.pl | 0 .../crypto/sha/asm/sha1-armv4-large.pl | 0 .../crypto/sha/asm/sha1-armv8.pl | 0 .../crypto/sha/asm/sha1-c64xplus.pl | 0 .../crypto/sha/asm/sha1-ia64.pl | 0 .../crypto/sha/asm/sha1-mb-x86_64.pl | 0 .../crypto/sha/asm/sha1-mips.pl | 0 .../crypto/sha/asm/sha1-parisc.pl | 0 .../crypto/sha/asm/sha1-ppc.pl | 0 .../crypto/sha/asm/sha1-s390x.pl | 0 .../crypto/sha/asm/sha1-sparcv9.pl | 0 .../crypto/sha/asm/sha1-sparcv9a.pl | 0 .../crypto/sha/asm/sha1-thumb.pl | 0 .../crypto/sha/asm/sha1-x86_64.pl | 0 .../crypto/sha/asm/sha256-586.pl | 0 .../crypto/sha/asm/sha256-armv4.pl | 0 .../crypto/sha/asm/sha256-c64xplus.pl | 0 .../crypto/sha/asm/sha256-mb-x86_64.pl | 0 .../crypto/sha/asm/sha512-586.pl | 0 .../crypto/sha/asm/sha512-armv4.pl | 0 .../crypto/sha/asm/sha512-armv8.pl | 0 .../crypto/sha/asm/sha512-c64xplus.pl | 0 .../crypto/sha/asm/sha512-ia64.pl | 0 .../crypto/sha/asm/sha512-mips.pl | 0 .../crypto/sha/asm/sha512-parisc.pl | 0 .../crypto/sha/asm/sha512-ppc.pl | 0 .../crypto/sha/asm/sha512-s390x.pl | 0 .../crypto/sha/asm/sha512-sparcv9.pl | 0 .../crypto/sha/asm/sha512-x86_64.pl | 0 .../crypto/sha/asm/sha512p8-ppc.pl | 0 .../crypto/sha/build.info | 0 .../crypto/sha/keccak1600.c | 0 .../crypto/sha/sha1_one.c | 0 .../crypto/sha/sha1dgst.c | 0 .../crypto/sha/sha256.c | 0 .../crypto/sha/sha512.c | 0 .../crypto/sha/sha_local.h | 0 .../crypto/siphash/build.info | 0 .../crypto/siphash/siphash.c | 0 .../crypto/siphash/siphash_ameth.c | 0 .../crypto/siphash/siphash_local.h | 0 .../crypto/siphash/siphash_pmeth.c | 0 .../crypto/sm2/build.info | 0 .../crypto/sm2/sm2_crypt.c | 0 .../crypto/sm2/sm2_err.c | 0 .../crypto/sm2/sm2_pmeth.c | 0 .../crypto/sm2/sm2_sign.c | 0 .../crypto/sm3/build.info | 0 .../crypto/sm3/m_sm3.c | 0 .../crypto/sm3/sm3.c | 0 .../crypto/sm3/sm3_local.h | 0 .../crypto/sm4/build.info | 0 .../crypto/sm4/sm4.c | 0 .../crypto/sparc_arch.h | 0 .../crypto/sparccpuid.S | 0 .../crypto/sparcv9cap.c | 0 .../crypto/srp/build.info | 0 .../crypto/srp/srp_lib.c | 0 .../crypto/srp/srp_vfy.c | 0 .../crypto/stack/build.info | 0 .../crypto/stack/stack.c | 0 .../crypto/store/build.info | 0 .../crypto/store/loader_file.c | 0 .../crypto/store/store_err.c | 0 .../crypto/store/store_init.c | 0 .../crypto/store/store_lib.c | 0 .../crypto/store/store_local.h | 0 .../crypto/store/store_register.c | 0 .../crypto/store/store_strings.c | 0 .../crypto/threads_none.c | 0 .../crypto/threads_pthread.c | 0 .../crypto/threads_win.c | 0 .../crypto/ts/build.info | 0 .../crypto/ts/ts_asn1.c | 0 .../crypto/ts/ts_conf.c | 0 .../crypto/ts/ts_err.c | 0 .../crypto/ts/ts_lib.c | 0 .../crypto/ts/ts_local.h | 0 .../crypto/ts/ts_req_print.c | 0 .../crypto/ts/ts_req_utils.c | 0 .../crypto/ts/ts_rsp_print.c | 0 .../crypto/ts/ts_rsp_sign.c | 0 .../crypto/ts/ts_rsp_utils.c | 0 .../crypto/ts/ts_rsp_verify.c | 0 .../crypto/ts/ts_verify_ctx.c | 0 .../crypto/txt_db/build.info | 0 .../crypto/txt_db/txt_db.c | 0 .../crypto/ui/build.info | 0 .../crypto/ui/ui_err.c | 0 .../crypto/ui/ui_lib.c | 6 +- .../crypto/ui/ui_local.h | 0 .../crypto/ui/ui_null.c | 0 .../crypto/ui/ui_openssl.c | 0 .../crypto/ui/ui_util.c | 6 +- .../crypto/uid.c | 0 .../crypto/vms_rms.h | 0 .../crypto/whrlpool/asm/wp-mmx.pl | 0 .../crypto/whrlpool/asm/wp-x86_64.pl | 0 .../crypto/whrlpool/build.info | 0 .../crypto/whrlpool/wp_block.c | 0 .../crypto/whrlpool/wp_dgst.c | 0 .../crypto/whrlpool/wp_local.h | 0 .../crypto/x509/build.info | 0 .../crypto/x509/by_dir.c | 0 .../crypto/x509/by_file.c | 0 .../crypto/x509/t_crl.c | 0 .../crypto/x509/t_req.c | 0 .../crypto/x509/t_x509.c | 0 .../crypto/x509/x509_att.c | 0 .../crypto/x509/x509_cmp.c | 0 .../crypto/x509/x509_d2.c | 0 .../crypto/x509/x509_def.c | 0 .../crypto/x509/x509_err.c | 0 .../crypto/x509/x509_ext.c | 0 .../crypto/x509/x509_local.h | 0 .../crypto/x509/x509_lu.c | 0 .../crypto/x509/x509_meth.c | 0 .../crypto/x509/x509_obj.c | 0 .../crypto/x509/x509_r2x.c | 0 .../crypto/x509/x509_req.c | 0 .../crypto/x509/x509_set.c | 0 .../crypto/x509/x509_trs.c | 0 .../crypto/x509/x509_txt.c | 0 .../crypto/x509/x509_v3.c | 0 .../crypto/x509/x509_vfy.c | 13 +- .../crypto/x509/x509_vpm.c | 0 .../crypto/x509/x509cset.c | 0 .../crypto/x509/x509name.c | 0 .../crypto/x509/x509rset.c | 0 .../crypto/x509/x509spki.c | 0 .../crypto/x509/x509type.c | 0 .../crypto/x509/x_all.c | 0 .../crypto/x509/x_attrib.c | 0 .../crypto/x509/x_crl.c | 0 .../crypto/x509/x_exten.c | 0 .../crypto/x509/x_name.c | 0 .../crypto/x509/x_pubkey.c | 0 .../crypto/x509/x_req.c | 0 .../crypto/x509/x_x509.c | 0 .../crypto/x509/x_x509a.c | 0 .../crypto/x509v3/build.info | 0 .../crypto/x509v3/ext_dat.h | 0 .../crypto/x509v3/pcy_cache.c | 0 .../crypto/x509v3/pcy_data.c | 0 .../crypto/x509v3/pcy_lib.c | 0 .../crypto/x509v3/pcy_local.h | 10 +- .../crypto/x509v3/pcy_map.c | 0 .../crypto/x509v3/pcy_node.c | 26 +- .../crypto/x509v3/pcy_tree.c | 56 +- .../crypto/x509v3/standard_exts.h | 0 .../crypto/x509v3/v3_addr.c | 0 .../crypto/x509v3/v3_admis.c | 0 .../crypto/x509v3/v3_admis.h | 0 .../crypto/x509v3/v3_akey.c | 0 .../crypto/x509v3/v3_akeya.c | 0 .../crypto/x509v3/v3_alt.c | 0 .../crypto/x509v3/v3_asid.c | 0 .../crypto/x509v3/v3_bcons.c | 0 .../crypto/x509v3/v3_bitst.c | 0 .../crypto/x509v3/v3_conf.c | 0 .../crypto/x509v3/v3_cpols.c | 0 .../crypto/x509v3/v3_crld.c | 0 .../crypto/x509v3/v3_enum.c | 0 .../crypto/x509v3/v3_extku.c | 0 .../crypto/x509v3/v3_genn.c | 0 .../crypto/x509v3/v3_ia5.c | 0 .../crypto/x509v3/v3_info.c | 0 .../crypto/x509v3/v3_int.c | 0 .../crypto/x509v3/v3_lib.c | 0 .../crypto/x509v3/v3_ncons.c | 0 .../crypto/x509v3/v3_pci.c | 0 .../crypto/x509v3/v3_pcia.c | 0 .../crypto/x509v3/v3_pcons.c | 0 .../crypto/x509v3/v3_pku.c | 0 .../crypto/x509v3/v3_pmaps.c | 0 .../crypto/x509v3/v3_prn.c | 0 .../crypto/x509v3/v3_purp.c | 0 .../crypto/x509v3/v3_skey.c | 0 .../crypto/x509v3/v3_sxnet.c | 0 .../crypto/x509v3/v3_tlsf.c | 0 .../crypto/x509v3/v3_utl.c | 0 .../crypto/x509v3/v3err.c | 0 .../crypto/x86_64cpuid.pl | 0 .../crypto/x86cpuid.pl | 0 .../demos/README | 0 .../demos/bio/Makefile | 0 .../demos/bio/README | 0 .../demos/bio/accept.cnf | 0 .../demos/bio/client-arg.c | 0 .../demos/bio/client-conf.c | 0 .../demos/bio/cmod.cnf | 0 .../demos/bio/connect.cnf | 0 .../demos/bio/descrip.mms | 0 .../demos/bio/intca.pem | 0 .../demos/bio/root.pem | 0 .../demos/bio/saccept.c | 0 .../demos/bio/sconnect.c | 0 .../demos/bio/server-arg.c | 0 .../demos/bio/server-cmod.c | 0 .../demos/bio/server-conf.c | 0 .../demos/bio/server-ec.pem | 0 .../demos/bio/server.pem | 0 .../demos/bio/shared.opt | 0 .../demos/bio/static.opt | 0 .../demos/certs/README | 0 .../demos/certs/apps/apps.cnf | 0 .../demos/certs/apps/ckey.pem | 0 .../demos/certs/apps/intkey.pem | 0 .../demos/certs/apps/mkacerts.sh | 0 .../demos/certs/apps/mkxcerts.sh | 0 .../demos/certs/apps/rootkey.pem | 0 .../demos/certs/apps/skey.pem | 0 .../demos/certs/apps/skey2.pem | 0 .../demos/certs/ca.cnf | 0 .../demos/certs/mkcerts.sh | 0 .../demos/certs/ocspquery.sh | 0 .../demos/certs/ocsprun.sh | 0 .../demos/cms/cacert.pem | 0 .../demos/cms/cakey.pem | 0 .../demos/cms/cms_comp.c | 0 .../demos/cms/cms_ddec.c | 0 .../demos/cms/cms_dec.c | 0 .../demos/cms/cms_denc.c | 0 .../demos/cms/cms_enc.c | 0 .../demos/cms/cms_sign.c | 0 .../demos/cms/cms_sign2.c | 0 .../demos/cms/cms_uncomp.c | 0 .../demos/cms/cms_ver.c | 0 .../demos/cms/comp.txt | 0 .../demos/cms/encr.txt | 0 .../demos/cms/sign.txt | 0 .../demos/cms/signer.pem | 0 .../demos/cms/signer2.pem | 0 .../demos/engines/e_chil.txt | 0 .../demos/evp/Makefile | 0 .../demos/evp/aesccm.c | 0 .../demos/evp/aesgcm.c | 0 .../demos/pkcs12/pkread.c | 0 .../demos/pkcs12/pkwrite.c | 0 .../demos/smime/cacert.pem | 0 .../demos/smime/cakey.pem | 0 .../demos/smime/encr.txt | 0 .../demos/smime/sign.txt | 0 .../demos/smime/signer.pem | 0 .../demos/smime/signer2.pem | 0 .../demos/smime/smdec.c | 0 .../demos/smime/smenc.c | 0 .../demos/smime/smsign.c | 0 .../demos/smime/smsign2.c | 0 .../demos/smime/smver.c | 0 .../doc/HOWTO/certificates.txt | 0 .../doc/HOWTO/keys.txt | 0 .../doc/README | 0 .../doc/dir-locals.example.el | 0 .../doc/fingerprints.txt | 5 + .../doc/man1/CA.pl.pod | 0 .../doc/man1/asn1parse.pod | 0 .../doc/man1/ca.pod | 0 .../doc/man1/ciphers.pod | 0 .../doc/man1/cms.pod | 0 .../doc/man1/crl.pod | 0 .../doc/man1/crl2pkcs7.pod | 0 .../doc/man1/dgst.pod | 0 .../doc/man1/dhparam.pod | 0 .../doc/man1/dsa.pod | 0 .../doc/man1/dsaparam.pod | 0 .../doc/man1/ec.pod | 0 .../doc/man1/ecparam.pod | 0 .../doc/man1/enc.pod | 0 .../doc/man1/engine.pod | 0 .../doc/man1/errstr.pod | 0 .../doc/man1/gendsa.pod | 0 .../doc/man1/genpkey.pod | 0 .../doc/man1/genrsa.pod | 0 .../doc/man1/list.pod | 0 .../doc/man1/nseq.pod | 0 .../doc/man1/ocsp.pod | 0 .../doc/man1/openssl.pod | 0 .../doc/man1/passwd.pod | 0 .../doc/man1/pkcs12.pod | 0 .../doc/man1/pkcs7.pod | 0 .../doc/man1/pkcs8.pod | 0 .../doc/man1/pkey.pod | 0 .../doc/man1/pkeyparam.pod | 0 .../doc/man1/pkeyutl.pod | 0 .../doc/man1/prime.pod | 0 .../doc/man1/rand.pod | 0 .../doc/man1/rehash.pod | 0 .../doc/man1/req.pod | 0 .../doc/man1/rsa.pod | 0 .../doc/man1/rsautl.pod | 0 .../doc/man1/s_client.pod | 0 .../doc/man1/s_server.pod | 0 .../doc/man1/s_time.pod | 0 .../doc/man1/sess_id.pod | 0 .../doc/man1/smime.pod | 0 .../doc/man1/speed.pod | 0 .../doc/man1/spkac.pod | 0 .../doc/man1/srp.pod | 0 .../doc/man1/storeutl.pod | 0 .../doc/man1/ts.pod | 0 .../doc/man1/tsget.pod | 0 .../doc/man1/verify.pod | 0 .../doc/man1/version.pod | 0 .../doc/man1/x509.pod | 0 .../doc/man3/ADMISSIONS.pod | 0 .../doc/man3/ASN1_INTEGER_get_int64.pod | 0 .../doc/man3/ASN1_ITEM_lookup.pod | 0 .../doc/man3/ASN1_OBJECT_new.pod | 0 .../doc/man3/ASN1_STRING_TABLE_add.pod | 0 .../doc/man3/ASN1_STRING_length.pod | 0 .../doc/man3/ASN1_STRING_new.pod | 0 .../doc/man3/ASN1_STRING_print_ex.pod | 0 .../doc/man3/ASN1_TIME_set.pod | 0 .../doc/man3/ASN1_TYPE_get.pod | 0 .../doc/man3/ASN1_generate_nconf.pod | 0 .../doc/man3/ASYNC_WAIT_CTX_new.pod | 0 .../doc/man3/ASYNC_start_job.pod | 0 .../doc/man3/BF_encrypt.pod | 0 .../doc/man3/BIO_ADDR.pod | 0 .../doc/man3/BIO_ADDRINFO.pod | 0 .../doc/man3/BIO_connect.pod | 0 .../doc/man3/BIO_ctrl.pod | 0 .../doc/man3/BIO_f_base64.pod | 0 .../doc/man3/BIO_f_buffer.pod | 0 .../doc/man3/BIO_f_cipher.pod | 0 .../doc/man3/BIO_f_md.pod | 0 .../doc/man3/BIO_f_null.pod | 0 .../doc/man3/BIO_f_ssl.pod | 0 .../doc/man3/BIO_find_type.pod | 0 .../doc/man3/BIO_get_data.pod | 0 .../doc/man3/BIO_get_ex_new_index.pod | 0 .../doc/man3/BIO_meth_new.pod | 0 .../doc/man3/BIO_new.pod | 0 .../doc/man3/BIO_new_CMS.pod | 0 .../doc/man3/BIO_parse_hostserv.pod | 0 .../doc/man3/BIO_printf.pod | 0 .../doc/man3/BIO_push.pod | 0 .../doc/man3/BIO_read.pod | 0 .../doc/man3/BIO_s_accept.pod | 0 .../doc/man3/BIO_s_bio.pod | 0 .../doc/man3/BIO_s_connect.pod | 0 .../doc/man3/BIO_s_fd.pod | 0 .../doc/man3/BIO_s_file.pod | 0 .../doc/man3/BIO_s_mem.pod | 0 .../doc/man3/BIO_s_null.pod | 0 .../doc/man3/BIO_s_socket.pod | 0 .../doc/man3/BIO_set_callback.pod | 0 .../doc/man3/BIO_should_retry.pod | 0 .../doc/man3/BN_BLINDING_new.pod | 0 .../doc/man3/BN_CTX_new.pod | 0 .../doc/man3/BN_CTX_start.pod | 0 .../doc/man3/BN_add.pod | 0 .../doc/man3/BN_add_word.pod | 0 .../doc/man3/BN_bn2bin.pod | 0 .../doc/man3/BN_cmp.pod | 0 .../doc/man3/BN_copy.pod | 0 .../doc/man3/BN_generate_prime.pod | 0 .../doc/man3/BN_mod_inverse.pod | 0 .../doc/man3/BN_mod_mul_montgomery.pod | 0 .../doc/man3/BN_mod_mul_reciprocal.pod | 0 .../doc/man3/BN_new.pod | 0 .../doc/man3/BN_num_bytes.pod | 0 .../doc/man3/BN_rand.pod | 0 .../doc/man3/BN_security_bits.pod | 0 .../doc/man3/BN_set_bit.pod | 0 .../doc/man3/BN_swap.pod | 0 .../doc/man3/BN_zero.pod | 0 .../doc/man3/BUF_MEM_new.pod | 0 .../doc/man3/CMS_add0_cert.pod | 0 .../doc/man3/CMS_add1_recipient_cert.pod | 0 .../doc/man3/CMS_add1_signer.pod | 0 .../doc/man3/CMS_compress.pod | 0 .../doc/man3/CMS_decrypt.pod | 0 .../doc/man3/CMS_encrypt.pod | 0 .../doc/man3/CMS_final.pod | 0 .../doc/man3/CMS_get0_RecipientInfos.pod | 0 .../doc/man3/CMS_get0_SignerInfos.pod | 0 .../doc/man3/CMS_get0_type.pod | 0 .../doc/man3/CMS_get1_ReceiptRequest.pod | 0 .../doc/man3/CMS_sign.pod | 4 +- .../doc/man3/CMS_sign_receipt.pod | 0 .../doc/man3/CMS_uncompress.pod | 0 .../doc/man3/CMS_verify.pod | 0 .../doc/man3/CMS_verify_receipt.pod | 0 .../doc/man3/CONF_modules_free.pod | 0 .../doc/man3/CONF_modules_load_file.pod | 0 .../doc/man3/CRYPTO_THREAD_run_once.pod | 0 .../doc/man3/CRYPTO_get_ex_new_index.pod | 0 .../doc/man3/CRYPTO_memcmp.pod | 0 .../doc/man3/CTLOG_STORE_get0_log_by_id.pod | 0 .../doc/man3/CTLOG_STORE_new.pod | 0 .../doc/man3/CTLOG_new.pod | 0 .../doc/man3/CT_POLICY_EVAL_CTX_new.pod | 0 .../doc/man3/DEFINE_STACK_OF.pod | 0 .../doc/man3/DES_random_key.pod | 0 .../doc/man3/DH_generate_key.pod | 0 .../doc/man3/DH_generate_parameters.pod | 0 .../doc/man3/DH_get0_pqg.pod | 0 .../doc/man3/DH_get_1024_160.pod | 0 .../doc/man3/DH_meth_new.pod | 0 .../doc/man3/DH_new.pod | 0 .../doc/man3/DH_new_by_nid.pod | 0 .../doc/man3/DH_set_method.pod | 0 .../doc/man3/DH_size.pod | 0 .../doc/man3/DSA_SIG_new.pod | 0 .../doc/man3/DSA_do_sign.pod | 0 .../doc/man3/DSA_dup_DH.pod | 0 .../doc/man3/DSA_generate_key.pod | 0 .../doc/man3/DSA_generate_parameters.pod | 0 .../doc/man3/DSA_get0_pqg.pod | 0 .../doc/man3/DSA_meth_new.pod | 0 .../doc/man3/DSA_new.pod | 0 .../doc/man3/DSA_set_method.pod | 0 .../doc/man3/DSA_sign.pod | 0 .../doc/man3/DSA_size.pod | 0 .../doc/man3/DTLS_get_data_mtu.pod | 0 .../doc/man3/DTLS_set_timer_cb.pod | 0 .../doc/man3/DTLSv1_listen.pod | 0 .../doc/man3/ECDSA_SIG_new.pod | 0 .../doc/man3/ECPKParameters_print.pod | 0 .../doc/man3/EC_GFp_simple_method.pod | 0 .../doc/man3/EC_GROUP_copy.pod | 0 .../doc/man3/EC_GROUP_new.pod | 0 .../doc/man3/EC_KEY_get_enc_flags.pod | 0 .../doc/man3/EC_KEY_new.pod | 0 .../doc/man3/EC_POINT_add.pod | 0 .../doc/man3/EC_POINT_new.pod | 0 .../doc/man3/ENGINE_add.pod | 0 .../doc/man3/ERR_GET_LIB.pod | 0 .../doc/man3/ERR_clear_error.pod | 0 .../doc/man3/ERR_error_string.pod | 0 .../doc/man3/ERR_get_error.pod | 0 .../doc/man3/ERR_load_crypto_strings.pod | 0 .../doc/man3/ERR_load_strings.pod | 0 .../doc/man3/ERR_print_errors.pod | 0 .../doc/man3/ERR_put_error.pod | 0 .../doc/man3/ERR_remove_state.pod | 0 .../doc/man3/ERR_set_mark.pod | 0 .../doc/man3/EVP_BytesToKey.pod | 0 .../man3/EVP_CIPHER_CTX_get_cipher_data.pod | 0 .../doc/man3/EVP_CIPHER_meth_new.pod | 0 .../doc/man3/EVP_DigestInit.pod | 0 .../doc/man3/EVP_DigestSignInit.pod | 0 .../doc/man3/EVP_DigestVerifyInit.pod | 0 .../doc/man3/EVP_EncodeInit.pod | 0 .../doc/man3/EVP_EncryptInit.pod | 0 .../doc/man3/EVP_MD_meth_new.pod | 0 .../doc/man3/EVP_OpenInit.pod | 0 .../doc/man3/EVP_PKEY_ASN1_METHOD.pod | 0 .../doc/man3/EVP_PKEY_CTX_ctrl.pod | 0 .../doc/man3/EVP_PKEY_CTX_new.pod | 0 .../doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod | 0 .../doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod | 0 .../EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod | 0 .../doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod | 0 .../doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod | 0 .../doc/man3/EVP_PKEY_asn1_get_count.pod | 0 .../doc/man3/EVP_PKEY_cmp.pod | 0 .../doc/man3/EVP_PKEY_decrypt.pod | 0 .../doc/man3/EVP_PKEY_derive.pod | 0 .../doc/man3/EVP_PKEY_encrypt.pod | 0 .../man3/EVP_PKEY_get_default_digest_nid.pod | 0 .../doc/man3/EVP_PKEY_keygen.pod | 0 .../doc/man3/EVP_PKEY_meth_get_count.pod | 0 .../doc/man3/EVP_PKEY_meth_new.pod | 0 .../doc/man3/EVP_PKEY_new.pod | 0 .../doc/man3/EVP_PKEY_print_private.pod | 0 .../doc/man3/EVP_PKEY_set1_RSA.pod | 0 .../doc/man3/EVP_PKEY_sign.pod | 0 .../doc/man3/EVP_PKEY_size.pod | 0 .../doc/man3/EVP_PKEY_verify.pod | 0 .../doc/man3/EVP_PKEY_verify_recover.pod | 0 .../doc/man3/EVP_SealInit.pod | 0 .../doc/man3/EVP_SignInit.pod | 0 .../doc/man3/EVP_VerifyInit.pod | 0 .../doc/man3/EVP_aes.pod | 0 .../doc/man3/EVP_aria.pod | 0 .../doc/man3/EVP_bf_cbc.pod | 0 .../doc/man3/EVP_blake2b512.pod | 0 .../doc/man3/EVP_camellia.pod | 0 .../doc/man3/EVP_cast5_cbc.pod | 0 .../doc/man3/EVP_chacha20.pod | 0 .../doc/man3/EVP_des.pod | 0 .../doc/man3/EVP_desx_cbc.pod | 0 .../doc/man3/EVP_idea_cbc.pod | 0 .../doc/man3/EVP_md2.pod | 0 .../doc/man3/EVP_md4.pod | 0 .../doc/man3/EVP_md5.pod | 0 .../doc/man3/EVP_mdc2.pod | 0 .../doc/man3/EVP_rc2_cbc.pod | 0 .../doc/man3/EVP_rc4.pod | 0 .../doc/man3/EVP_rc5_32_12_16_cbc.pod | 0 .../doc/man3/EVP_ripemd160.pod | 0 .../doc/man3/EVP_seed_cbc.pod | 0 .../doc/man3/EVP_sha1.pod | 0 .../doc/man3/EVP_sha224.pod | 0 .../doc/man3/EVP_sha3_224.pod | 0 .../doc/man3/EVP_sm3.pod | 0 .../doc/man3/EVP_sm4_cbc.pod | 0 .../doc/man3/EVP_whirlpool.pod | 0 .../doc/man3/HMAC.pod | 0 .../doc/man3/MD5.pod | 0 .../doc/man3/MDC2_Init.pod | 0 .../doc/man3/OBJ_nid2obj.pod | 0 .../doc/man3/OCSP_REQUEST_new.pod | 0 .../doc/man3/OCSP_cert_to_id.pod | 0 .../doc/man3/OCSP_request_add1_nonce.pod | 0 .../doc/man3/OCSP_resp_find_status.pod | 0 .../doc/man3/OCSP_response_status.pod | 0 .../doc/man3/OCSP_sendreq_new.pod | 0 .../doc/man3/OPENSSL_Applink.pod | 0 .../doc/man3/OPENSSL_LH_COMPFUNC.pod | 0 .../doc/man3/OPENSSL_LH_stats.pod | 0 .../doc/man3/OPENSSL_VERSION_NUMBER.pod | 0 .../doc/man3/OPENSSL_config.pod | 0 .../doc/man3/OPENSSL_fork_prepare.pod | 0 .../doc/man3/OPENSSL_ia32cap.pod | 0 .../doc/man3/OPENSSL_init_crypto.pod | 0 .../doc/man3/OPENSSL_init_ssl.pod | 0 .../doc/man3/OPENSSL_instrument_bus.pod | 0 .../doc/man3/OPENSSL_load_builtin_modules.pod | 0 .../doc/man3/OPENSSL_malloc.pod | 0 .../doc/man3/OPENSSL_secure_malloc.pod | 0 .../doc/man3/OSSL_STORE_INFO.pod | 0 .../doc/man3/OSSL_STORE_LOADER.pod | 0 .../doc/man3/OSSL_STORE_SEARCH.pod | 0 .../doc/man3/OSSL_STORE_expect.pod | 0 .../doc/man3/OSSL_STORE_open.pod | 0 .../doc/man3/OpenSSL_add_all_algorithms.pod | 0 .../doc/man3/PEM_bytes_read_bio.pod | 0 .../doc/man3/PEM_read.pod | 0 .../doc/man3/PEM_read_CMS.pod | 0 .../doc/man3/PEM_read_bio_PrivateKey.pod | 0 .../doc/man3/PEM_read_bio_ex.pod | 0 .../doc/man3/PEM_write_bio_CMS_stream.pod | 0 .../doc/man3/PEM_write_bio_PKCS7_stream.pod | 0 .../doc/man3/PKCS12_create.pod | 0 .../doc/man3/PKCS12_newpass.pod | 0 .../doc/man3/PKCS12_parse.pod | 0 .../doc/man3/PKCS5_PBKDF2_HMAC.pod | 0 .../doc/man3/PKCS7_decrypt.pod | 0 .../doc/man3/PKCS7_encrypt.pod | 0 .../doc/man3/PKCS7_sign.pod | 0 .../doc/man3/PKCS7_sign_add_signer.pod | 0 .../doc/man3/PKCS7_verify.pod | 0 .../doc/man3/RAND_DRBG_generate.pod | 0 .../doc/man3/RAND_DRBG_get0_master.pod | 0 .../doc/man3/RAND_DRBG_new.pod | 0 .../doc/man3/RAND_DRBG_reseed.pod | 0 .../doc/man3/RAND_DRBG_set_callbacks.pod | 0 .../doc/man3/RAND_DRBG_set_ex_data.pod | 0 .../doc/man3/RAND_add.pod | 0 .../doc/man3/RAND_bytes.pod | 0 .../doc/man3/RAND_cleanup.pod | 0 .../doc/man3/RAND_egd.pod | 0 .../doc/man3/RAND_load_file.pod | 0 .../doc/man3/RAND_set_rand_method.pod | 0 .../doc/man3/RC4_set_key.pod | 0 .../doc/man3/RIPEMD160_Init.pod | 0 .../doc/man3/RSA_blinding_on.pod | 0 .../doc/man3/RSA_check_key.pod | 0 .../doc/man3/RSA_generate_key.pod | 0 .../doc/man3/RSA_get0_key.pod | 0 .../doc/man3/RSA_meth_new.pod | 0 .../doc/man3/RSA_new.pod | 0 .../doc/man3/RSA_padding_add_PKCS1_type_1.pod | 0 .../doc/man3/RSA_print.pod | 0 .../doc/man3/RSA_private_encrypt.pod | 0 .../doc/man3/RSA_public_encrypt.pod | 0 .../doc/man3/RSA_set_method.pod | 0 .../doc/man3/RSA_sign.pod | 0 .../doc/man3/RSA_sign_ASN1_OCTET_STRING.pod | 0 .../doc/man3/RSA_size.pod | 0 .../doc/man3/SCT_new.pod | 0 .../doc/man3/SCT_print.pod | 0 .../doc/man3/SCT_validate.pod | 0 .../doc/man3/SHA256_Init.pod | 0 .../doc/man3/SMIME_read_CMS.pod | 0 .../doc/man3/SMIME_read_PKCS7.pod | 0 .../doc/man3/SMIME_write_CMS.pod | 0 .../doc/man3/SMIME_write_PKCS7.pod | 0 .../doc/man3/SSL_CIPHER_get_name.pod | 0 .../man3/SSL_COMP_add_compression_method.pod | 0 .../doc/man3/SSL_CONF_CTX_new.pod | 0 .../doc/man3/SSL_CONF_CTX_set1_prefix.pod | 0 .../doc/man3/SSL_CONF_CTX_set_flags.pod | 0 .../doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod | 0 .../doc/man3/SSL_CONF_cmd.pod | 0 .../doc/man3/SSL_CONF_cmd_argv.pod | 0 .../doc/man3/SSL_CTX_add1_chain_cert.pod | 0 .../doc/man3/SSL_CTX_add_extra_chain_cert.pod | 0 .../doc/man3/SSL_CTX_add_session.pod | 0 .../doc/man3/SSL_CTX_config.pod | 0 .../doc/man3/SSL_CTX_ctrl.pod | 0 .../doc/man3/SSL_CTX_dane_enable.pod | 0 .../doc/man3/SSL_CTX_flush_sessions.pod | 0 .../doc/man3/SSL_CTX_free.pod | 0 .../doc/man3/SSL_CTX_get0_param.pod | 0 .../doc/man3/SSL_CTX_get_verify_mode.pod | 0 .../man3/SSL_CTX_has_client_custom_ext.pod | 0 .../man3/SSL_CTX_load_verify_locations.pod | 0 .../doc/man3/SSL_CTX_new.pod | 0 .../doc/man3/SSL_CTX_sess_number.pod | 0 .../doc/man3/SSL_CTX_sess_set_cache_size.pod | 0 .../doc/man3/SSL_CTX_sess_set_get_cb.pod | 0 .../doc/man3/SSL_CTX_sessions.pod | 0 .../doc/man3/SSL_CTX_set0_CA_list.pod | 0 .../doc/man3/SSL_CTX_set1_curves.pod | 0 .../doc/man3/SSL_CTX_set1_sigalgs.pod | 0 .../man3/SSL_CTX_set1_verify_cert_store.pod | 0 .../doc/man3/SSL_CTX_set_alpn_select_cb.pod | 0 .../doc/man3/SSL_CTX_set_cert_cb.pod | 0 .../doc/man3/SSL_CTX_set_cert_store.pod | 0 .../man3/SSL_CTX_set_cert_verify_callback.pod | 0 .../doc/man3/SSL_CTX_set_cipher_list.pod | 0 .../doc/man3/SSL_CTX_set_client_cert_cb.pod | 0 .../doc/man3/SSL_CTX_set_client_hello_cb.pod | 0 .../SSL_CTX_set_ct_validation_callback.pod | 0 .../doc/man3/SSL_CTX_set_ctlog_list_file.pod | 0 .../man3/SSL_CTX_set_default_passwd_cb.pod | 0 .../doc/man3/SSL_CTX_set_ex_data.pod | 0 .../man3/SSL_CTX_set_generate_session_id.pod | 0 .../doc/man3/SSL_CTX_set_info_callback.pod | 0 .../doc/man3/SSL_CTX_set_keylog_callback.pod | 0 .../doc/man3/SSL_CTX_set_max_cert_list.pod | 0 .../man3/SSL_CTX_set_min_proto_version.pod | 0 .../doc/man3/SSL_CTX_set_mode.pod | 0 .../doc/man3/SSL_CTX_set_msg_callback.pod | 0 .../doc/man3/SSL_CTX_set_num_tickets.pod | 0 .../doc/man3/SSL_CTX_set_options.pod | 0 .../man3/SSL_CTX_set_psk_client_callback.pod | 0 .../doc/man3/SSL_CTX_set_quiet_shutdown.pod | 0 .../doc/man3/SSL_CTX_set_read_ahead.pod | 0 .../SSL_CTX_set_record_padding_callback.pod | 0 .../doc/man3/SSL_CTX_set_security_level.pod | 0 .../man3/SSL_CTX_set_session_cache_mode.pod | 0 .../man3/SSL_CTX_set_session_id_context.pod | 0 .../man3/SSL_CTX_set_session_ticket_cb.pod | 0 .../man3/SSL_CTX_set_split_send_fragment.pod | 0 .../doc/man3/SSL_CTX_set_ssl_version.pod | 0 ...L_CTX_set_stateless_cookie_generate_cb.pod | 0 .../doc/man3/SSL_CTX_set_timeout.pod | 0 ...SSL_CTX_set_tlsext_servername_callback.pod | 0 .../doc/man3/SSL_CTX_set_tlsext_status_cb.pod | 0 .../man3/SSL_CTX_set_tlsext_ticket_key_cb.pod | 0 .../doc/man3/SSL_CTX_set_tlsext_use_srtp.pod | 0 .../doc/man3/SSL_CTX_set_tmp_dh_callback.pod | 0 .../doc/man3/SSL_CTX_set_verify.pod | 0 .../doc/man3/SSL_CTX_use_certificate.pod | 0 .../man3/SSL_CTX_use_psk_identity_hint.pod | 0 .../doc/man3/SSL_CTX_use_serverinfo.pod | 0 .../doc/man3/SSL_SESSION_free.pod | 0 .../doc/man3/SSL_SESSION_get0_cipher.pod | 0 .../doc/man3/SSL_SESSION_get0_hostname.pod | 0 .../doc/man3/SSL_SESSION_get0_id_context.pod | 0 .../doc/man3/SSL_SESSION_get0_peer.pod | 0 .../doc/man3/SSL_SESSION_get_compress_id.pod | 0 .../doc/man3/SSL_SESSION_get_ex_data.pod | 0 .../man3/SSL_SESSION_get_protocol_version.pod | 0 .../doc/man3/SSL_SESSION_get_time.pod | 0 .../doc/man3/SSL_SESSION_has_ticket.pod | 0 .../doc/man3/SSL_SESSION_is_resumable.pod | 0 .../doc/man3/SSL_SESSION_print.pod | 0 .../doc/man3/SSL_SESSION_set1_id.pod | 0 .../doc/man3/SSL_accept.pod | 0 .../doc/man3/SSL_alert_type_string.pod | 0 .../doc/man3/SSL_alloc_buffers.pod | 0 .../doc/man3/SSL_check_chain.pod | 0 .../doc/man3/SSL_clear.pod | 0 .../doc/man3/SSL_connect.pod | 0 .../doc/man3/SSL_do_handshake.pod | 0 .../doc/man3/SSL_export_keying_material.pod | 0 .../doc/man3/SSL_extension_supported.pod | 0 .../doc/man3/SSL_free.pod | 0 .../doc/man3/SSL_get0_peer_scts.pod | 0 .../doc/man3/SSL_get_SSL_CTX.pod | 0 .../doc/man3/SSL_get_all_async_fds.pod | 0 .../doc/man3/SSL_get_ciphers.pod | 0 .../doc/man3/SSL_get_client_random.pod | 0 .../doc/man3/SSL_get_current_cipher.pod | 0 .../doc/man3/SSL_get_default_timeout.pod | 0 .../doc/man3/SSL_get_error.pod | 0 .../doc/man3/SSL_get_extms_support.pod | 0 .../doc/man3/SSL_get_fd.pod | 0 .../doc/man3/SSL_get_peer_cert_chain.pod | 0 .../doc/man3/SSL_get_peer_certificate.pod | 0 .../doc/man3/SSL_get_peer_signature_nid.pod | 0 .../doc/man3/SSL_get_peer_tmp_key.pod | 0 .../doc/man3/SSL_get_psk_identity.pod | 0 .../doc/man3/SSL_get_rbio.pod | 0 .../doc/man3/SSL_get_session.pod | 0 .../doc/man3/SSL_get_shared_sigalgs.pod | 0 .../doc/man3/SSL_get_verify_result.pod | 0 .../doc/man3/SSL_get_version.pod | 0 .../doc/man3/SSL_in_init.pod | 0 .../doc/man3/SSL_key_update.pod | 0 .../doc/man3/SSL_library_init.pod | 0 .../doc/man3/SSL_load_client_CA_file.pod | 0 .../doc/man3/SSL_new.pod | 0 .../doc/man3/SSL_pending.pod | 0 .../doc/man3/SSL_read.pod | 0 .../doc/man3/SSL_read_early_data.pod | 0 .../doc/man3/SSL_rstate_string.pod | 0 .../doc/man3/SSL_session_reused.pod | 0 .../doc/man3/SSL_set1_host.pod | 0 .../doc/man3/SSL_set_bio.pod | 0 .../doc/man3/SSL_set_connect_state.pod | 0 .../doc/man3/SSL_set_fd.pod | 0 .../doc/man3/SSL_set_session.pod | 0 .../doc/man3/SSL_set_shutdown.pod | 0 .../doc/man3/SSL_set_verify_result.pod | 0 .../doc/man3/SSL_shutdown.pod | 0 .../doc/man3/SSL_state_string.pod | 0 .../doc/man3/SSL_want.pod | 0 .../doc/man3/SSL_write.pod | 0 .../doc/man3/UI_STRING.pod | 0 .../doc/man3/UI_UTIL_read_pw.pod | 0 .../doc/man3/UI_create_method.pod | 0 .../doc/man3/UI_new.pod | 0 .../doc/man3/X509V3_get_d2i.pod | 0 .../doc/man3/X509_ALGOR_dup.pod | 0 .../doc/man3/X509_CRL_get0_by_serial.pod | 0 .../doc/man3/X509_EXTENSION_set_object.pod | 0 .../doc/man3/X509_LOOKUP.pod | 0 .../doc/man3/X509_LOOKUP_hash_dir.pod | 0 .../doc/man3/X509_LOOKUP_meth_new.pod | 0 .../doc/man3/X509_NAME_ENTRY_get_object.pod | 0 .../doc/man3/X509_NAME_add_entry_by_txt.pod | 0 .../doc/man3/X509_NAME_get0_der.pod | 0 .../doc/man3/X509_NAME_get_index_by_NID.pod | 0 .../doc/man3/X509_NAME_print_ex.pod | 0 .../doc/man3/X509_PUBKEY_new.pod | 0 .../doc/man3/X509_SIG_get0.pod | 0 .../doc/man3/X509_STORE_CTX_get_error.pod | 0 .../doc/man3/X509_STORE_CTX_new.pod | 0 .../doc/man3/X509_STORE_CTX_set_verify_cb.pod | 0 .../doc/man3/X509_STORE_add_cert.pod | 0 .../doc/man3/X509_STORE_get0_param.pod | 0 .../doc/man3/X509_STORE_new.pod | 0 .../man3/X509_STORE_set_verify_cb_func.pod | 0 .../doc/man3/X509_VERIFY_PARAM_set_flags.pod | 11 +- .../doc/man3/X509_check_ca.pod | 0 .../doc/man3/X509_check_host.pod | 0 .../doc/man3/X509_check_issued.pod | 0 .../doc/man3/X509_check_private_key.pod | 0 .../doc/man3/X509_check_purpose.pod | 0 .../doc/man3/X509_cmp.pod | 0 .../doc/man3/X509_cmp_time.pod | 0 .../doc/man3/X509_digest.pod | 0 .../doc/man3/X509_dup.pod | 0 .../doc/man3/X509_get0_notBefore.pod | 0 .../doc/man3/X509_get0_signature.pod | 0 .../doc/man3/X509_get0_uids.pod | 0 .../doc/man3/X509_get_extension_flags.pod | 0 .../doc/man3/X509_get_pubkey.pod | 0 .../doc/man3/X509_get_serialNumber.pod | 0 .../doc/man3/X509_get_subject_name.pod | 0 .../doc/man3/X509_get_version.pod | 0 .../doc/man3/X509_new.pod | 0 .../doc/man3/X509_sign.pod | 0 .../doc/man3/X509_verify_cert.pod | 0 .../doc/man3/X509v3_get_ext_by_NID.pod | 0 .../doc/man3/d2i_DHparams.pod | 0 .../doc/man3/d2i_PKCS8PrivateKey_bio.pod | 0 .../doc/man3/d2i_PrivateKey.pod | 0 .../doc/man3/d2i_SSL_SESSION.pod | 0 .../doc/man3/d2i_X509.pod | 0 .../doc/man3/i2d_CMS_bio_stream.pod | 0 .../doc/man3/i2d_PKCS7_bio_stream.pod | 0 .../doc/man3/i2d_re_X509_tbs.pod | 0 .../doc/man3/o2i_SCT_LIST.pod | 0 .../doc/man5/config.pod | 0 .../doc/man5/x509v3_config.pod | 0 .../doc/man7/Ed25519.pod | 0 .../doc/man7/RAND.pod | 0 .../doc/man7/RAND_DRBG.pod | 0 .../doc/man7/RSA-PSS.pod | 0 .../doc/man7/SM2.pod | 0 .../doc/man7/X25519.pod | 0 .../doc/man7/bio.pod | 0 .../doc/man7/crypto.pod | 0 .../doc/man7/ct.pod | 0 .../doc/man7/des_modes.pod | 0 .../doc/man7/evp.pod | 0 .../doc/man7/ossl_store-file.pod | 0 .../doc/man7/ossl_store.pod | 0 .../doc/man7/passphrase-encoding.pod | 0 .../doc/man7/proxy-certificates.pod | 0 .../doc/man7/scrypt.pod | 0 .../doc/man7/ssl.pod | 0 .../doc/man7/x509.pod | 0 .../doc/openssl-c-indent.el | 0 .../{openssl-1.1.1t => openssl-1.1.1w}/e_os.h | 0 .../engines/asm/e_padlock-x86.pl | 0 .../engines/asm/e_padlock-x86_64.pl | 0 .../engines/build.info | 0 .../engines/e_afalg.c | 0 .../engines/e_afalg.ec | 0 .../engines/e_afalg.h | 0 .../engines/e_afalg.txt | 0 .../engines/e_afalg_err.c | 0 .../engines/e_afalg_err.h | 0 .../engines/e_capi.c | 0 .../engines/e_capi.ec | 0 .../engines/e_capi.txt | 0 .../engines/e_capi_err.c | 0 .../engines/e_capi_err.h | 0 .../engines/e_dasync.c | 0 .../engines/e_dasync.ec | 0 .../engines/e_dasync.txt | 0 .../engines/e_dasync_err.c | 0 .../engines/e_dasync_err.h | 0 .../engines/e_ossltest.c | 0 .../engines/e_ossltest.ec | 0 .../engines/e_ossltest.txt | 0 .../engines/e_ossltest_err.c | 0 .../engines/e_ossltest_err.h | 0 .../engines/e_padlock.c | 17 +- .../external/perl/Downloaded.txt | 0 .../external/perl/Text-Template-1.46/Artistic | 0 .../external/perl/Text-Template-1.46/COPYING | 0 .../external/perl/Text-Template-1.46/INSTALL | 0 .../external/perl/Text-Template-1.46/MANIFEST | 0 .../perl/Text-Template-1.46/META.json | 0 .../external/perl/Text-Template-1.46/META.yml | 0 .../perl/Text-Template-1.46/Makefile.PL | 0 .../external/perl/Text-Template-1.46/README | 0 .../Text-Template-1.46/lib/Text/Template.pm | 0 .../lib/Text/Template/Preprocess.pm | 0 .../perl/Text-Template-1.46/t/00-version.t | 0 .../perl/Text-Template-1.46/t/01-basic.t | 0 .../perl/Text-Template-1.46/t/02-hash.t | 0 .../perl/Text-Template-1.46/t/03-out.t | 0 .../perl/Text-Template-1.46/t/04-safe.t | 0 .../perl/Text-Template-1.46/t/05-safe2.t | 0 .../perl/Text-Template-1.46/t/06-ofh.t | 0 .../perl/Text-Template-1.46/t/07-safe3.t | 0 .../perl/Text-Template-1.46/t/08-exported.t | 0 .../perl/Text-Template-1.46/t/09-error.t | 0 .../perl/Text-Template-1.46/t/10-delimiters.t | 0 .../perl/Text-Template-1.46/t/11-prepend.t | 0 .../perl/Text-Template-1.46/t/12-preprocess.t | 0 .../perl/Text-Template-1.46/t/13-taint.t | 0 .../perl/Text-Template-1.46/t/14-broken.t | 0 .../external/perl/transfer/Text/Template.pm | 0 .../fuzz/README.md | 0 .../fuzz/asn1.c | 0 .../fuzz/asn1parse.c | 0 .../fuzz/bignum.c | 0 .../fuzz/bndiv.c | 0 .../fuzz/build.info | 0 .../fuzz/client.c | 0 .../fuzz/cms.c | 0 .../fuzz/conf.c | 0 .../fuzz/crl.c | 0 .../fuzz/ct.c | 0 .../fuzz/driver.c | 0 .../fuzz/fuzzer.h | 0 .../fuzz/helper.py | 0 .../fuzz/mkfuzzoids.pl | 0 .../fuzz/oids.txt | 0 .../fuzz/rand.inc | 0 .../fuzz/server.c | 0 .../fuzz/test-corpus.c | 0 .../fuzz/x509.c | 0 .../include/crypto/__DECC_INCLUDE_EPILOGUE.H | 0 .../include/crypto/__DECC_INCLUDE_PROLOGUE.H | 0 .../include/crypto/aria.h | 0 .../include/crypto/asn1.h | 0 .../include/crypto/async.h | 0 .../include/crypto/bn.h | 5 - .../include/crypto/bn_conf.h.in | 0 .../include/crypto/bn_dh.h | 0 .../include/crypto/bn_srp.h | 0 .../include/crypto/chacha.h | 0 .../include/crypto/cryptlib.h | 0 .../include/crypto/ctype.h | 0 .../include/crypto/dso_conf.h.in | 0 .../include/crypto/ec.h | 0 .../include/crypto/engine.h | 0 .../include/crypto/err.h | 0 .../include/crypto/evp.h | 0 .../include/crypto/lhash.h | 0 .../include/crypto/md32_common.h | 0 .../include/crypto/objects.h | 0 .../include/crypto/poly1305.h | 0 .../include/crypto/rand.h | 0 .../include/crypto/sha.h | 0 .../include/crypto/siphash.h | 0 .../include/crypto/sm2.h | 0 .../include/crypto/sm2err.h | 0 .../include/crypto/sm3.h | 0 .../include/crypto/sm4.h | 0 .../include/crypto/store.h | 0 .../include/crypto/x509.h | 0 .../internal/__DECC_INCLUDE_EPILOGUE.H | 0 .../internal/__DECC_INCLUDE_PROLOGUE.H | 0 .../include/internal/bio.h | 0 .../include/internal/comp.h | 0 .../include/internal/conf.h | 0 .../include/internal/constant_time.h | 0 .../include/internal/cryptlib.h | 0 .../include/internal/dane.h | 0 .../include/internal/dso.h | 0 .../include/internal/dsoerr.h | 0 .../include/internal/err.h | 0 .../include/internal/nelem.h | 0 .../include/internal/numbers.h | 0 .../include/internal/o_dir.h | 0 .../include/internal/o_str.h | 0 .../include/internal/refcount.h | 0 .../include/internal/sockets.h | 0 .../include/internal/sslconf.h | 0 .../include/internal/thread_once.h | 0 .../include/internal/tsan_assist.h | 0 .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 0 .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 0 .../include/openssl/aes.h | 0 .../include/openssl/asn1.h | 0 .../include/openssl/asn1_mac.h | 0 .../include/openssl/asn1err.h | 0 .../include/openssl/asn1t.h | 0 .../include/openssl/async.h | 0 .../include/openssl/asyncerr.h | 0 .../include/openssl/bio.h | 0 .../include/openssl/bioerr.h | 0 .../include/openssl/blowfish.h | 0 .../include/openssl/bn.h | 0 .../include/openssl/bnerr.h | 0 .../include/openssl/buffer.h | 0 .../include/openssl/buffererr.h | 0 .../include/openssl/camellia.h | 0 .../include/openssl/cast.h | 0 .../include/openssl/cmac.h | 0 .../include/openssl/cms.h | 0 .../include/openssl/cmserr.h | 0 .../include/openssl/comp.h | 0 .../include/openssl/comperr.h | 0 .../include/openssl/conf.h | 0 .../include/openssl/conf_api.h | 0 .../include/openssl/conferr.h | 0 .../include/openssl/crypto.h | 0 .../include/openssl/cryptoerr.h | 0 .../include/openssl/ct.h | 0 .../include/openssl/cterr.h | 0 .../include/openssl/des.h | 0 .../include/openssl/dh.h | 5 +- .../include/openssl/dherr.h | 3 +- .../include/openssl/dsa.h | 0 .../include/openssl/dsaerr.h | 0 .../include/openssl/dtls1.h | 0 .../include/openssl/e_os2.h | 0 .../include/openssl/ebcdic.h | 0 .../include/openssl/ec.h | 0 .../include/openssl/ecdh.h | 0 .../include/openssl/ecdsa.h | 0 .../include/openssl/ecerr.h | 0 .../include/openssl/engine.h | 0 .../include/openssl/engineerr.h | 0 .../include/openssl/err.h | 0 .../include/openssl/evp.h | 0 .../include/openssl/evperr.h | 0 .../include/openssl/hmac.h | 0 .../include/openssl/idea.h | 0 .../include/openssl/kdf.h | 0 .../include/openssl/kdferr.h | 0 .../include/openssl/lhash.h | 0 .../include/openssl/md2.h | 0 .../include/openssl/md4.h | 0 .../include/openssl/md5.h | 0 .../include/openssl/mdc2.h | 0 .../include/openssl/modes.h | 0 .../include/openssl/obj_mac.h | 0 .../include/openssl/objects.h | 0 .../include/openssl/objectserr.h | 0 .../include/openssl/ocsp.h | 0 .../include/openssl/ocsperr.h | 0 .../include/openssl/opensslconf.h.in | 0 .../include/openssl/opensslv.h | 6 +- .../include/openssl/ossl_typ.h | 0 .../include/openssl/pem.h | 0 .../include/openssl/pem2.h | 0 .../include/openssl/pemerr.h | 0 .../include/openssl/pkcs12.h | 0 .../include/openssl/pkcs12err.h | 0 .../include/openssl/pkcs7.h | 0 .../include/openssl/pkcs7err.h | 0 .../include/openssl/rand.h | 0 .../include/openssl/rand_drbg.h | 0 .../include/openssl/randerr.h | 0 .../include/openssl/rc2.h | 0 .../include/openssl/rc4.h | 0 .../include/openssl/rc5.h | 0 .../include/openssl/ripemd.h | 0 .../include/openssl/rsa.h | 0 .../include/openssl/rsaerr.h | 0 .../include/openssl/safestack.h | 0 .../include/openssl/seed.h | 0 .../include/openssl/sha.h | 0 .../include/openssl/srp.h | 0 .../include/openssl/srtp.h | 0 .../include/openssl/ssl.h | 0 .../include/openssl/ssl2.h | 0 .../include/openssl/ssl3.h | 0 .../include/openssl/sslerr.h | 0 .../include/openssl/stack.h | 0 .../include/openssl/store.h | 0 .../include/openssl/storeerr.h | 0 .../include/openssl/symhacks.h | 0 .../include/openssl/tls1.h | 0 .../include/openssl/ts.h | 0 .../include/openssl/tserr.h | 0 .../include/openssl/txt_db.h | 0 .../include/openssl/ui.h | 0 .../include/openssl/uierr.h | 0 .../include/openssl/whrlpool.h | 0 .../include/openssl/x509.h | 0 .../include/openssl/x509_vfy.h | 0 .../include/openssl/x509err.h | 0 .../include/openssl/x509v3.h | 0 .../include/openssl/x509v3err.h | 0 .../ms/applink.c | 0 .../ms/cmp.pl | 0 .../ms/uplink-common.pl | 0 .../ms/uplink-ia64.pl | 0 .../ms/uplink-x86.pl | 0 .../ms/uplink-x86_64.pl | 0 .../ms/uplink.c | 0 .../ms/uplink.h | 0 .../os-dep/haiku.h | 0 .../ssl/bio_ssl.c | 0 .../ssl/build.info | 0 .../ssl/d1_lib.c | 0 .../ssl/d1_msg.c | 0 .../ssl/d1_srtp.c | 0 .../ssl/methods.c | 0 .../ssl/packet.c | 0 .../ssl/packet_local.h | 0 .../ssl/pqueue.c | 0 .../ssl/record/README | 0 .../ssl/record/dtls1_bitmap.c | 0 .../ssl/record/rec_layer_d1.c | 0 .../ssl/record/rec_layer_s3.c | 0 .../ssl/record/record.h | 0 .../ssl/record/record_local.h | 0 .../ssl/record/ssl3_buffer.c | 0 .../ssl/record/ssl3_record.c | 0 .../ssl/record/ssl3_record_tls13.c | 0 .../ssl/s3_cbc.c | 0 .../ssl/s3_enc.c | 0 .../ssl/s3_lib.c | 0 .../ssl/s3_msg.c | 0 .../ssl/ssl_asn1.c | 0 .../ssl/ssl_cert.c | 0 .../ssl/ssl_cert_table.h | 0 .../ssl/ssl_ciph.c | 0 .../ssl/ssl_conf.c | 0 .../ssl/ssl_err.c | 0 .../ssl/ssl_init.c | 0 .../ssl/ssl_lib.c | 0 .../ssl/ssl_local.h | 0 .../ssl/ssl_mcnf.c | 0 .../ssl/ssl_rsa.c | 0 .../ssl/ssl_sess.c | 7 +- .../ssl/ssl_stat.c | 0 .../ssl/ssl_txt.c | 0 .../ssl/ssl_utst.c | 0 .../ssl/statem/README | 0 .../ssl/statem/extensions.c | 0 .../ssl/statem/extensions_clnt.c | 0 .../ssl/statem/extensions_cust.c | 0 .../ssl/statem/extensions_srvr.c | 0 .../ssl/statem/statem.c | 0 .../ssl/statem/statem.h | 0 .../ssl/statem/statem_clnt.c | 0 .../ssl/statem/statem_dtls.c | 0 .../ssl/statem/statem_lib.c | 0 .../ssl/statem/statem_local.h | 0 .../ssl/statem/statem_srvr.c | 0 .../ssl/t1_enc.c | 0 .../ssl/t1_lib.c | 0 .../ssl/t1_trce.c | 0 .../ssl/tls13_enc.c | 0 .../ssl/tls_srp.c | 0 .../test/CAss.cnf | 0 .../test/CAssdh.cnf | 0 .../test/CAssdsa.cnf | 0 .../test/CAssrsa.cnf | 0 .../test/CAtsa.cnf | 0 .../test/P1ss.cnf | 0 .../test/P2ss.cnf | 0 .../test/README | 0 .../test/README.external | 0 .../test/README.ssltest.md | 0 .../test/Sssdsa.cnf | 0 .../test/Sssrsa.cnf | 0 .../test/Uss.cnf | 0 .../test/aborttest.c | 0 .../test/afalgtest.c | 0 .../test/asn1_decode_test.c | 0 .../test/asn1_encode_test.c | 0 .../test/asn1_internal_test.c | 0 .../test/asn1_string_table_test.c | 0 .../test/asn1_time_test.c | 0 .../test/asynciotest.c | 0 .../test/asynctest.c | 0 .../test/bad_dtls_test.c | 0 .../test/bftest.c | 0 .../test/bio_callback_test.c | 0 .../test/bio_enc_test.c | 0 .../test/bio_memleak_test.c | 0 .../test/bioprinttest.c | 0 .../test/bntest.c | 0 .../test/bntests.pl | 0 .../test/build.info | 0 .../test/casttest.c | 0 .../test/certs/alt1-cert.pem | 0 .../test/certs/alt1-key.pem | 0 .../test/certs/alt2-cert.pem | 0 .../test/certs/alt2-key.pem | 0 .../test/certs/alt3-cert.pem | 0 .../test/certs/alt3-key.pem | 0 .../test/certs/bad-pc3-cert.pem | 0 .../test/certs/bad-pc3-key.pem | 0 .../test/certs/bad-pc4-cert.pem | 0 .../test/certs/bad-pc4-key.pem | 0 .../test/certs/bad-pc6-cert.pem | 0 .../test/certs/bad-pc6-key.pem | 0 .../test/certs/bad.key | 0 .../test/certs/bad.pem | 0 .../test/certs/badalt1-cert.pem | 0 .../test/certs/badalt1-key.pem | 0 .../test/certs/badalt10-cert.pem | 0 .../test/certs/badalt10-key.pem | 0 .../test/certs/badalt2-cert.pem | 0 .../test/certs/badalt2-key.pem | 0 .../test/certs/badalt3-cert.pem | 0 .../test/certs/badalt3-key.pem | 0 .../test/certs/badalt4-cert.pem | 0 .../test/certs/badalt4-key.pem | 0 .../test/certs/badalt5-cert.pem | 0 .../test/certs/badalt5-key.pem | 0 .../test/certs/badalt6-cert.pem | 0 .../test/certs/badalt6-key.pem | 0 .../test/certs/badalt7-cert.pem | 0 .../test/certs/badalt7-key.pem | 0 .../test/certs/badalt8-cert.pem | 0 .../test/certs/badalt8-key.pem | 0 .../test/certs/badalt9-cert.pem | 0 .../test/certs/badalt9-key.pem | 0 .../test/certs/badcn1-cert.pem | 0 .../test/certs/badcn1-key.pem | 0 .../test/certs/ca+anyEKU.pem | 0 .../test/certs/ca+clientAuth.pem | 0 .../test/certs/ca+serverAuth.pem | 0 .../test/certs/ca-anyEKU.pem | 0 .../test/certs/ca-cert-768.pem | 0 .../test/certs/ca-cert-768i.pem | 0 .../test/certs/ca-cert-ec-explicit.pem | 0 .../test/certs/ca-cert-ec-named.pem | 0 .../test/certs/ca-cert-md5-any.pem | 0 .../test/certs/ca-cert-md5.pem | 0 .../test/certs/ca-cert.pem | 0 .../test/certs/ca-cert2.pem | 0 .../test/certs/ca-clientAuth.pem | 0 .../test/certs/ca-expired.pem | 0 .../test/certs/ca-key-768.pem | 0 .../test/certs/ca-key-ec-explicit.pem | 0 .../test/certs/ca-key-ec-named.pem | 0 .../test/certs/ca-key.pem | 0 .../test/certs/ca-key2.pem | 0 .../test/certs/ca-name2.pem | 0 .../test/certs/ca-nonbc.pem | 0 .../test/certs/ca-nonca.pem | 0 .../openssl-1.1.1w/test/certs/ca-pol-cert.pem | 19 + .../test/certs/ca-pss-cert.pem | 0 .../test/certs/ca-pss-key.pem | 0 .../test/certs/ca-root2.pem | 0 .../test/certs/ca-serverAuth.pem | 0 .../test/certs/cca+anyEKU.pem | 0 .../test/certs/cca+clientAuth.pem | 0 .../test/certs/cca+serverAuth.pem | 0 .../test/certs/cca-anyEKU.pem | 0 .../test/certs/cca-cert.pem | 0 .../test/certs/cca-clientAuth.pem | 0 .../test/certs/cca-serverAuth.pem | 0 .../test/certs/client-ed25519-cert.pem | 0 .../test/certs/client-ed25519-key.pem | 0 .../test/certs/client-ed448-cert.pem | 0 .../test/certs/client-ed448-key.pem | 0 .../test/certs/croot+anyEKU.pem | 0 .../test/certs/croot+clientAuth.pem | 0 .../test/certs/croot+serverAuth.pem | 0 .../test/certs/croot-anyEKU.pem | 0 .../test/certs/croot-cert.pem | 0 .../test/certs/croot-clientAuth.pem | 0 .../test/certs/croot-serverAuth.pem | 0 .../test/certs/cross-key.pem | 0 .../test/certs/cross-root.pem | 0 .../test/certs/cyrillic.msb | 0 .../test/certs/cyrillic.pem | 0 .../test/certs/cyrillic.utf8 | 0 .../test/certs/cyrillic_crl.pem | 0 .../test/certs/cyrillic_crl.utf8 | 0 .../test/certs/dhp2048.pem | 0 .../test/certs/ee+clientAuth.pem | 0 .../test/certs/ee+serverAuth.pem | 0 .../test/certs/ee-cert-768.pem | 0 .../test/certs/ee-cert-768i.pem | 0 .../test/certs/ee-cert-ec-explicit.pem | 0 .../test/certs/ee-cert-ec-named-explicit.pem | 0 .../test/certs/ee-cert-ec-named-named.pem | 0 .../test/certs/ee-cert-md5.pem | 0 .../test/certs/ee-cert-policies-bad.pem | 20 + .../test/certs/ee-cert-policies.pem | 20 + .../test/certs/ee-cert.pem | 0 .../test/certs/ee-cert2.pem | 0 .../test/certs/ee-client-chain.pem | 0 .../test/certs/ee-client.pem | 0 .../test/certs/ee-clientAuth.pem | 0 .../test/certs/ee-ecdsa-client-chain.pem | 0 .../test/certs/ee-ecdsa-key.pem | 0 .../test/certs/ee-ed25519.pem | 0 .../test/certs/ee-expired.pem | 0 .../test/certs/ee-key-768.pem | 0 .../test/certs/ee-key-ec-explicit.pem | 0 .../test/certs/ee-key-ec-named-explicit.pem | 0 .../test/certs/ee-key-ec-named-named.pem | 0 .../test/certs/ee-key.pem | 0 .../test/certs/ee-name2.pem | 0 .../test/certs/ee-pathlen.pem | 0 .../test/certs/ee-pss-cert.pem | 0 .../test/certs/ee-pss-sha1-cert.pem | 0 .../test/certs/ee-pss-sha256-cert.pem | 0 .../test/certs/ee-self-signed.pem | 0 .../test/certs/ee-serverAuth.pem | 0 .../test/certs/embeddedSCTs1-key.pem | 0 .../test/certs/embeddedSCTs1.pem | 0 .../test/certs/embeddedSCTs1.sct | 0 .../test/certs/embeddedSCTs1_issuer-key.pem | 0 .../test/certs/embeddedSCTs1_issuer.pem | 0 .../test/certs/embeddedSCTs3.pem | 0 .../test/certs/embeddedSCTs3.sct | 0 .../test/certs/embeddedSCTs3_issuer.pem | 0 .../test/certs/goodcn1-cert.pem | 0 .../test/certs/goodcn1-key.pem | 0 .../test/certs/interCA.key | 0 .../test/certs/interCA.pem | 0 .../test/certs/invalid-cert.pem | 0 .../test/certs/leaf.key | 0 .../test/certs/leaf.pem | 0 .../test/certs/many-constraints.pem | 0 .../test/certs/many-names1.pem | 0 .../test/certs/many-names2.pem | 0 .../test/certs/many-names3.pem | 0 .../test/certs/mkcert.sh | 11 +- .../test/certs/nca+anyEKU.pem | 0 .../test/certs/nca+serverAuth.pem | 0 .../test/certs/ncca-cert.pem | 0 .../test/certs/ncca-key.pem | 0 .../test/certs/ncca1-cert.pem | 0 .../test/certs/ncca1-key.pem | 0 .../test/certs/ncca2-cert.pem | 0 .../test/certs/ncca2-key.pem | 0 .../test/certs/ncca3-cert.pem | 0 .../test/certs/ncca3-key.pem | 0 .../test/certs/nroot+anyEKU.pem | 0 .../test/certs/nroot+serverAuth.pem | 0 .../test/certs/p256-server-cert.pem | 0 .../test/certs/p256-server-key.pem | 0 .../test/certs/p384-root-key.pem | 0 .../test/certs/p384-root.pem | 0 .../test/certs/p384-server-cert.pem | 0 .../test/certs/p384-server-key.pem | 0 .../test/certs/pathlen.pem | 0 .../test/certs/pc1-cert.pem | 0 .../test/certs/pc1-key.pem | 0 .../test/certs/pc2-cert.pem | 0 .../test/certs/pc2-key.pem | 0 .../test/certs/pc5-cert.pem | 0 .../test/certs/pc5-key.pem | 0 .../test/certs/root+anyEKU.pem | 0 .../test/certs/root+clientAuth.pem | 0 .../test/certs/root+serverAuth.pem | 0 .../test/certs/root-anyEKU.pem | 0 .../test/certs/root-cert-768.pem | 0 .../test/certs/root-cert-md5.pem | 0 .../test/certs/root-cert-rsa2.pem | 0 .../test/certs/root-cert.pem | 0 .../test/certs/root-cert2.pem | 0 .../test/certs/root-clientAuth.pem | 0 .../test/certs/root-cross-cert.pem | 0 .../test/certs/root-ed25519.pem | 0 .../test/certs/root-ed448-cert.pem | 0 .../test/certs/root-ed448-key.pem | 0 .../test/certs/root-expired.pem | 0 .../test/certs/root-key-768.pem | 0 .../test/certs/root-key.pem | 0 .../test/certs/root-key2.pem | 0 .../test/certs/root-name2.pem | 0 .../test/certs/root-nonca.pem | 0 .../test/certs/root-noserver.pem | 0 .../test/certs/root-serverAuth.pem | 0 .../test/certs/root2+clientAuth.pem | 0 .../test/certs/root2+serverAuth.pem | 0 .../test/certs/root2-serverAuth.pem | 0 .../test/certs/rootCA.key | 0 .../test/certs/rootCA.pem | 0 .../test/certs/rootcert.pem | 0 .../test/certs/rootkey.pem | 0 .../test/certs/roots.pem | 0 .../test/certs/sca+anyEKU.pem | 0 .../test/certs/sca+clientAuth.pem | 0 .../test/certs/sca+serverAuth.pem | 0 .../test/certs/sca-anyEKU.pem | 0 .../test/certs/sca-cert.pem | 0 .../test/certs/sca-clientAuth.pem | 0 .../test/certs/sca-serverAuth.pem | 0 .../test/certs/server-cecdsa-cert.pem | 0 .../test/certs/server-cecdsa-key.pem | 0 .../test/certs/server-dsa-cert.pem | 0 .../test/certs/server-dsa-key.pem | 0 .../server-ecdsa-brainpoolP256r1-cert.pem | 0 .../server-ecdsa-brainpoolP256r1-key.pem | 0 .../test/certs/server-ecdsa-cert.pem | 0 .../test/certs/server-ecdsa-key.pem | 0 .../test/certs/server-ed25519-cert.pem | 0 .../test/certs/server-ed25519-key.pem | 0 .../test/certs/server-ed448-cert.pem | 0 .../test/certs/server-ed448-key.pem | 0 .../test/certs/server-pss-cert.pem | 0 .../test/certs/server-pss-key.pem | 0 .../test/certs/server-pss-restrict-cert.pem | 0 .../test/certs/server-pss-restrict-key.pem | 0 .../test/certs/server-trusted.pem | 0 .../test/certs/servercert.pem | 0 .../test/certs/serverkey.pem | 0 .../test/certs/setup.sh | 6 + .../test/certs/some-names1.pem | 0 .../test/certs/some-names2.pem | 0 .../test/certs/some-names3.pem | 0 .../test/certs/sroot+anyEKU.pem | 0 .../test/certs/sroot+clientAuth.pem | 0 .../test/certs/sroot+serverAuth.pem | 0 .../test/certs/sroot-anyEKU.pem | 0 .../test/certs/sroot-cert.pem | 0 .../test/certs/sroot-clientAuth.pem | 0 .../test/certs/sroot-serverAuth.pem | 0 .../test/certs/subinterCA-ss.pem | 0 .../test/certs/subinterCA.key | 0 .../test/certs/subinterCA.pem | 0 .../test/certs/untrusted.pem | 0 .../test/certs/wrongcert.pem | 0 .../test/certs/wrongkey.pem | 0 .../test/certs/x509-check-key.pem | 0 .../test/certs/x509-check.csr | 0 .../test/chacha_internal_test.c | 0 .../test/cipher_overhead_test.c | 0 .../test/cipherbytes_test.c | 0 .../test/cipherlist_test.c | 0 .../test/ciphername_test.c | 0 .../test/clienthellotest.c | 0 .../test/cmactest.c | 0 .../test/cms-examples.pl | 0 .../test/cmsapitest.c | 0 .../test/conf_include_test.c | 0 .../test/constant_time_test.c | 0 .../test/crltest.c | 0 .../test/ct/log_list.conf | 0 .../test/ct/tls1.sct | 0 .../test/ct_test.c | 0 .../test/ctype_internal_test.c | 0 .../test/curve448_internal_test.c | 0 .../test/d2i-tests/bad-cms.der | 0 .../test/d2i-tests/bad-int-pad0.der | Bin .../test/d2i-tests/bad-int-padminus1.der | 0 .../test/d2i-tests/bad_bio.der | Bin .../test/d2i-tests/bad_cert.der | Bin .../test/d2i-tests/bad_generalname.der | 0 .../test/d2i-tests/high_tag.der | Bin .../test/d2i-tests/int0.der | Bin .../test/d2i-tests/int1.der | 0 .../test/d2i-tests/intminus1.der | 0 .../test/d2i_test.c | 0 .../test/dane-cross.in | 0 .../test/danetest.c | 0 .../test/danetest.in | 0 .../test/danetest.pem | 0 .../test/data.bin | 0 .../test/destest.c | 0 .../test/dhtest.c | 29 +- .../test/drbg_cavs_data.c | 0 .../test/drbg_cavs_data.h | 0 .../test/drbg_cavs_test.c | 0 .../test/drbgtest.c | 0 .../test/drbgtest.h | 0 .../test/dsa_no_digest_size_test.c | 0 .../test/dsatest.c | 0 .../test/dtls_mtu_test.c | 0 .../test/dtlstest.c | 0 .../test/dtlsv1listentest.c | 0 .../test/ec_internal_test.c | 0 .../test/ecdsatest.c | 0 .../test/ecdsatest.h | 0 .../test/ecstresstest.c | 0 .../test/ectest.c | 0 .../test/enginetest.c | 0 .../test/errtest.c | 0 .../test/evp_extra_test.c | 0 .../test/evp_test.c | 0 .../test/evp_test.h | 0 .../test/exdatatest.c | 0 .../test/exptest.c | 0 .../test/fatalerrtest.c | 0 .../test/generate_buildtest.pl | 0 .../test/generate_ssl_tests.pl | 0 .../test/gmdifftest.c | 0 .../test/gosttest.c | 0 .../test/handshake_helper.c | 0 .../test/handshake_helper.h | 0 .../test/hmactest.c | 0 .../test/ideatest.c | 0 .../test/igetest.c | 0 .../test/lhash_test.c | 0 .../test/md2test.c | 0 .../test/mdc2_internal_test.c | 0 .../test/mdc2test.c | 0 .../test/memleaktest.c | 0 .../test/modes_internal_test.c | 0 .../test/ocsp-tests/D1.ors | 0 .../test/ocsp-tests/D1_Cert_EE.pem | 0 .../test/ocsp-tests/D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/D2.ors | 0 .../test/ocsp-tests/D2_Cert_ICA.pem | 0 .../test/ocsp-tests/D2_Issuer_Root.pem | 0 .../test/ocsp-tests/D3.ors | 0 .../test/ocsp-tests/D3_Cert_EE.pem | 0 .../test/ocsp-tests/D3_Issuer_Root.pem | 0 .../test/ocsp-tests/ISDOSC_D1.ors | 0 .../test/ocsp-tests/ISDOSC_D2.ors | 0 .../test/ocsp-tests/ISDOSC_D3.ors | 0 .../test/ocsp-tests/ISIC_D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/ISIC_D2_Issuer_Root.pem | 0 .../test/ocsp-tests/ISIC_D3_Issuer_Root.pem | 0 .../test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/ISIC_ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/ISIC_ND3_Issuer_Root.pem | 0 .../test/ocsp-tests/ISOP_D1.ors | 0 .../test/ocsp-tests/ISOP_D2.ors | 0 .../test/ocsp-tests/ISOP_D3.ors | 0 .../test/ocsp-tests/ISOP_ND1.ors | 0 .../test/ocsp-tests/ISOP_ND2.ors | 0 .../test/ocsp-tests/ISOP_ND3.ors | 0 .../test/ocsp-tests/ND1.ors | 0 .../test/ocsp-tests/ND1_Cert_EE.pem | 0 .../test/ocsp-tests/ND1_Cross_Root.pem | 0 .../test/ocsp-tests/ND1_Issuer_ICA-Cross.pem | 0 .../test/ocsp-tests/ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/ND2.ors | 0 .../test/ocsp-tests/ND2_Cert_ICA.pem | 0 .../test/ocsp-tests/ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/ND3.ors | 0 .../test/ocsp-tests/ND3_Cert_EE.pem | 0 .../test/ocsp-tests/ND3_Issuer_Root.pem | 0 .../test/ocsp-tests/WIKH_D1.ors | 0 .../test/ocsp-tests/WIKH_D2.ors | 0 .../test/ocsp-tests/WIKH_D3.ors | 0 .../test/ocsp-tests/WIKH_ND1.ors | 0 .../test/ocsp-tests/WIKH_ND2.ors | 0 .../test/ocsp-tests/WIKH_ND3.ors | 0 .../test/ocsp-tests/WINH_D1.ors | 0 .../test/ocsp-tests/WINH_D2.ors | 0 .../test/ocsp-tests/WINH_D3.ors | 0 .../test/ocsp-tests/WINH_ND1.ors | 0 .../test/ocsp-tests/WINH_ND2.ors | 0 .../test/ocsp-tests/WINH_ND3.ors | 0 .../test/ocsp-tests/WKDOSC_D1.ors | 0 .../test/ocsp-tests/WKDOSC_D2.ors | 0 .../test/ocsp-tests/WKDOSC_D3.ors | 0 .../test/ocsp-tests/WKIC_D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WKIC_D2_Issuer_Root.pem | 0 .../test/ocsp-tests/WKIC_D3_Issuer_Root.pem | 0 .../test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WKIC_ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/WKIC_ND3_Issuer_Root.pem | 0 .../test/ocsp-tests/WRID_D1.ors | 0 .../test/ocsp-tests/WRID_D2.ors | 0 .../test/ocsp-tests/WRID_D3.ors | 0 .../test/ocsp-tests/WRID_ND1.ors | 0 .../test/ocsp-tests/WRID_ND2.ors | 0 .../test/ocsp-tests/WRID_ND3.ors | 0 .../test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WSNIC_D2_Issuer_Root.pem | 0 .../test/ocsp-tests/WSNIC_D3_Issuer_Root.pem | 0 .../test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem | 0 .../test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem | 0 .../test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem | 0 .../test/ocspapitest.c | 0 .../test/ossl_shim/async_bio.cc | 0 .../test/ossl_shim/async_bio.h | 0 .../test/ossl_shim/build.info | 0 .../test/ossl_shim/include/openssl/base.h | 0 .../test/ossl_shim/ossl_config.json | 0 .../test/ossl_shim/ossl_shim.cc | 0 .../test/ossl_shim/packeted_bio.cc | 0 .../test/ossl_shim/packeted_bio.h | 0 .../test/ossl_shim/test_config.cc | 0 .../test/ossl_shim/test_config.h | 0 .../test/packettest.c | 0 .../test/pbelutest.c | 0 .../test/pemtest.c | 0 .../test/pkcs7-1.pem | 0 .../test/pkcs7.pem | 0 .../test/pkey_meth_kdf_test.c | 0 .../test/pkey_meth_test.c | 0 .../test/pkits-test.pl | 0 .../test/poly1305_internal_test.c | 0 .../test/rc2test.c | 0 .../test/rc4test.c | 0 .../test/rc5test.c | 0 .../test/rdrand_sanitytest.c | 0 .../test/recipes/01-test_abort.t | 0 .../test/recipes/01-test_sanity.t | 0 .../test/recipes/01-test_symbol_presence.t | 0 .../test/recipes/01-test_test.t | 0 .../test/recipes/02-test_errstr.t | 0 .../test/recipes/02-test_internal_ctype.t | 0 .../test/recipes/02-test_lhash.t | 0 .../test/recipes/02-test_ordinals.t | 0 .../test/recipes/02-test_stack.t | 0 .../test/recipes/03-test_exdata.t | 0 .../test/recipes/03-test_internal_asn1.t | 0 .../test/recipes/03-test_internal_chacha.t | 0 .../test/recipes/03-test_internal_curve448.t | 0 .../test/recipes/03-test_internal_ec.t | 0 .../test/recipes/03-test_internal_mdc2.t | 0 .../test/recipes/03-test_internal_modes.t | 0 .../test/recipes/03-test_internal_poly1305.t | 0 .../test/recipes/03-test_internal_siphash.t | 0 .../test/recipes/03-test_internal_sm2.t | 0 .../test/recipes/03-test_internal_sm4.t | 0 .../recipes/03-test_internal_ssl_cert_table.t | 0 .../test/recipes/03-test_internal_x509.t | 0 .../test/recipes/03-test_ui.t | 0 .../test/recipes/04-test_asn1_decode.t | 0 .../test/recipes/04-test_asn1_encode.t | 0 .../test/recipes/04-test_asn1_string_table.t | 0 .../test/recipes/04-test_bio_callback.t | 0 .../test/recipes/04-test_bioprint.t | 0 .../test/recipes/04-test_err.t | 0 .../test/recipes/04-test_pem.t | 0 .../test/recipes/04-test_pem_data/NOTES | 0 .../test/recipes/04-test_pem_data/beermug.pem | 0 .../04-test_pem_data/cert-1023line.pem | 0 .../04-test_pem_data/cert-1024line.pem | 0 .../04-test_pem_data/cert-1025line.pem | 0 .../cert-254-chars-at-the-end.pem | 0 .../cert-254-chars-in-the-middle.pem | 0 .../recipes/04-test_pem_data/cert-255line.pem | 0 .../recipes/04-test_pem_data/cert-256line.pem | 0 .../recipes/04-test_pem_data/cert-257line.pem | 0 .../04-test_pem_data/cert-blankline.pem | 0 .../recipes/04-test_pem_data/cert-comment.pem | 0 .../04-test_pem_data/cert-earlypad.pem | 0 .../04-test_pem_data/cert-extrapad.pem | 0 .../04-test_pem_data/cert-infixwhitespace.pem | 0 .../recipes/04-test_pem_data/cert-junk.pem | 0 .../cert-leadingwhitespace.pem | 0 .../04-test_pem_data/cert-longline.pem | 0 .../04-test_pem_data/cert-misalignedpad.pem | 0 .../04-test_pem_data/cert-onecolumn.pem | 0 .../cert-oneline-multiple-of-254.pem | 0 .../recipes/04-test_pem_data/cert-oneline.pem | 0 .../cert-shortandlongline.pem | 0 .../04-test_pem_data/cert-shortline.pem | 0 .../04-test_pem_data/cert-threecolumn.pem | 0 .../cert-trailingwhitespace.pem | 0 .../test/recipes/04-test_pem_data/cert.pem | 0 .../test/recipes/04-test_pem_data/csr.pem | 0 .../recipes/04-test_pem_data/dsa-1023line.pem | 0 .../recipes/04-test_pem_data/dsa-1024line.pem | 0 .../recipes/04-test_pem_data/dsa-1025line.pem | 0 .../recipes/04-test_pem_data/dsa-255line.pem | 0 .../recipes/04-test_pem_data/dsa-256line.pem | 0 .../recipes/04-test_pem_data/dsa-257line.pem | 0 .../04-test_pem_data/dsa-blankline.pem | 0 .../recipes/04-test_pem_data/dsa-comment.pem | 0 .../04-test_pem_data/dsa-corruptedheader.pem | 0 .../04-test_pem_data/dsa-corruptiv.pem | 0 .../recipes/04-test_pem_data/dsa-earlypad.pem | 0 .../recipes/04-test_pem_data/dsa-extrapad.pem | 0 .../04-test_pem_data/dsa-infixwhitespace.pem | 0 .../recipes/04-test_pem_data/dsa-junk.pem | 0 .../dsa-leadingwhitespace.pem | 0 .../recipes/04-test_pem_data/dsa-longline.pem | 0 .../04-test_pem_data/dsa-misalignedpad.pem | 0 .../04-test_pem_data/dsa-onecolumn.pem | 0 .../recipes/04-test_pem_data/dsa-oneline.pem | 0 .../04-test_pem_data/dsa-onelineheader.pem | 0 .../04-test_pem_data/dsa-shortandlongline.pem | 0 .../04-test_pem_data/dsa-shortline.pem | 0 .../04-test_pem_data/dsa-threecolumn.pem | 0 .../dsa-trailingwhitespace.pem | 0 .../test/recipes/04-test_pem_data/dsa.pem | 0 .../recipes/04-test_pem_data/dsaparam.pem | 0 .../test/recipes/04-test_pem_data/key.pem | 0 .../test/recipes/04-test_pem_data/wellknown | 0 .../test/recipes/05-test_bf.t | 0 .../test/recipes/05-test_cast.t | 0 .../test/recipes/05-test_cmac.t | 0 .../test/recipes/05-test_des.t | 0 .../test/recipes/05-test_hmac.t | 0 .../test/recipes/05-test_idea.t | 0 .../test/recipes/05-test_md2.t | 0 .../test/recipes/05-test_mdc2.t | 0 .../test/recipes/05-test_rand.t | 0 .../test/recipes/05-test_rc2.t | 0 .../test/recipes/05-test_rc4.t | 0 .../test/recipes/05-test_rc5.t | 0 .../test/recipes/06-test-rdrand.t | 0 .../test/recipes/10-test_bn.t | 0 .../test/recipes/10-test_bn_data/bnexp.txt | 0 .../test/recipes/10-test_bn_data/bngcd.txt | 0 .../test/recipes/10-test_bn_data/bnmod.txt | 0 .../test/recipes/10-test_bn_data/bnmul.txt | 0 .../test/recipes/10-test_bn_data/bnshift.txt | 0 .../test/recipes/10-test_bn_data/bnsum.txt | 0 .../test/recipes/10-test_exp.t | 0 .../test/recipes/15-test_dh.t | 0 .../test/recipes/15-test_dsa.t | 0 .../test/recipes/15-test_ec.t | 0 .../test/recipes/15-test_ecdsa.t | 0 .../test/recipes/15-test_ecparam.t | 0 .../invalid/c2pnb208w1-reducible.pem | 0 .../invalid/nistp256-nonprime.pem | 0 .../invalid/nistp256-offcurve.pem | 0 .../invalid/nistp256-wrongorder.pem | 0 .../valid/c2pnb163v1-explicit.pem | 0 .../valid/c2pnb163v1-named.pem | 0 .../valid/c2pnb163v2-explicit.pem | 0 .../valid/c2pnb163v2-named.pem | 0 .../valid/c2pnb163v3-explicit.pem | 0 .../valid/c2pnb163v3-named.pem | 0 .../valid/c2pnb176v1-explicit.pem | 0 .../valid/c2pnb176v1-named.pem | 0 .../valid/c2pnb208w1-explicit.pem | 0 .../valid/c2pnb208w1-named.pem | 0 .../valid/c2pnb272w1-explicit.pem | 0 .../valid/c2pnb272w1-named.pem | 0 .../valid/c2pnb304w1-explicit.pem | 0 .../valid/c2pnb304w1-named.pem | 0 .../valid/c2pnb368w1-explicit.pem | 0 .../valid/c2pnb368w1-named.pem | 0 .../valid/c2tnb191v1-explicit.pem | 0 .../valid/c2tnb191v1-named.pem | 0 .../valid/c2tnb191v2-explicit.pem | 0 .../valid/c2tnb191v2-named.pem | 0 .../valid/c2tnb191v3-explicit.pem | 0 .../valid/c2tnb191v3-named.pem | 0 .../valid/c2tnb239v1-explicit.pem | 0 .../valid/c2tnb239v1-named.pem | 0 .../valid/c2tnb239v2-explicit.pem | 0 .../valid/c2tnb239v2-named.pem | 0 .../valid/c2tnb239v3-explicit.pem | 0 .../valid/c2tnb239v3-named.pem | 0 .../valid/c2tnb359v1-explicit.pem | 0 .../valid/c2tnb359v1-named.pem | 0 .../valid/c2tnb431r1-explicit.pem | 0 .../valid/c2tnb431r1-named.pem | 0 .../valid/prime192v1-explicit.pem | 0 .../valid/prime192v1-named.pem | 0 .../valid/prime192v2-explicit.pem | 0 .../valid/prime192v2-named.pem | 0 .../valid/prime192v3-explicit.pem | 0 .../valid/prime192v3-named.pem | 0 .../valid/prime239v1-explicit.pem | 0 .../valid/prime239v1-named.pem | 0 .../valid/prime239v2-explicit.pem | 0 .../valid/prime239v2-named.pem | 0 .../valid/prime239v3-explicit.pem | 0 .../valid/prime239v3-named.pem | 0 .../valid/prime256v1-explicit.pem | 0 .../valid/prime256v1-named.pem | 0 .../valid/secp112r1-explicit.pem | 0 .../valid/secp112r1-named.pem | 0 .../valid/secp112r2-explicit.pem | 0 .../valid/secp112r2-named.pem | 0 .../valid/secp128r1-explicit.pem | 0 .../valid/secp128r1-named.pem | 0 .../valid/secp128r2-explicit.pem | 0 .../valid/secp128r2-named.pem | 0 .../valid/secp160k1-explicit.pem | 0 .../valid/secp160k1-named.pem | 0 .../valid/secp160r1-explicit.pem | 0 .../valid/secp160r1-named.pem | 0 .../valid/secp160r2-explicit.pem | 0 .../valid/secp160r2-named.pem | 0 .../valid/secp192k1-explicit.pem | 0 .../valid/secp192k1-named.pem | 0 .../valid/secp224k1-explicit.pem | 0 .../valid/secp224k1-named.pem | 0 .../valid/secp224r1-explicit.pem | 0 .../valid/secp224r1-named.pem | 0 .../valid/secp256k1-explicit.pem | 0 .../valid/secp256k1-named.pem | 0 .../valid/secp384r1-explicit.pem | 0 .../valid/secp384r1-named.pem | 0 .../valid/secp521r1-explicit.pem | 0 .../valid/secp521r1-named.pem | 0 .../valid/sect113r1-explicit.pem | 0 .../valid/sect113r1-named.pem | 0 .../valid/sect113r2-explicit.pem | 0 .../valid/sect113r2-named.pem | 0 .../valid/sect131r1-explicit.pem | 0 .../valid/sect131r1-named.pem | 0 .../valid/sect131r2-explicit.pem | 0 .../valid/sect131r2-named.pem | 0 .../valid/sect163k1-explicit.pem | 0 .../valid/sect163k1-named.pem | 0 .../valid/sect163r1-explicit.pem | 0 .../valid/sect163r1-named.pem | 0 .../valid/sect163r2-explicit.pem | 0 .../valid/sect163r2-named.pem | 0 .../valid/sect193r1-explicit.pem | 0 .../valid/sect193r1-named.pem | 0 .../valid/sect193r2-explicit.pem | 0 .../valid/sect193r2-named.pem | 0 .../valid/sect233k1-explicit.pem | 0 .../valid/sect233k1-named.pem | 0 .../valid/sect233r1-explicit.pem | 0 .../valid/sect233r1-named.pem | 0 .../valid/sect239k1-explicit.pem | 0 .../valid/sect239k1-named.pem | 0 .../valid/sect283k1-explicit.pem | 0 .../valid/sect283k1-named.pem | 0 .../valid/sect283r1-explicit.pem | 0 .../valid/sect283r1-named.pem | 0 .../valid/sect409k1-explicit.pem | 0 .../valid/sect409k1-named.pem | 0 .../valid/sect409r1-explicit.pem | 0 .../valid/sect409r1-named.pem | 0 .../valid/sect571k1-explicit.pem | 0 .../valid/sect571k1-named.pem | 0 .../valid/sect571r1-explicit.pem | 0 .../valid/sect571r1-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls1-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls1-named.pem | 0 .../wap-wsg-idm-ecid-wtls10-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls10-named.pem | 0 .../wap-wsg-idm-ecid-wtls11-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls11-named.pem | 0 .../wap-wsg-idm-ecid-wtls12-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls12-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls3-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls3-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls4-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls4-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls5-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls5-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls6-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls6-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls7-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls7-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls8-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls8-named.pem | 0 .../valid/wap-wsg-idm-ecid-wtls9-explicit.pem | 0 .../valid/wap-wsg-idm-ecid-wtls9-named.pem | 0 .../test/recipes/15-test_genec.t | 0 .../test/recipes/15-test_genrsa.t | 0 .../test/recipes/15-test_mp_rsa.t | 0 .../recipes/15-test_mp_rsa_data/plain_text | 0 .../test/recipes/15-test_out_option.t | 0 .../test/recipes/15-test_rsa.t | 0 .../test/recipes/15-test_rsapss.t | 12 +- .../test/recipes/20-test_dgst.t | 0 .../test/recipes/20-test_enc.t | 0 .../test/recipes/20-test_enc_more.t | 0 .../test/recipes/20-test_passwd.t | 0 .../test/recipes/25-test_crl.t | 0 .../test/recipes/25-test_d2i.t | 0 .../test/recipes/25-test_pkcs7.t | 0 .../test/recipes/25-test_req.t | 0 .../test/recipes/25-test_sid.t | 0 .../test/recipes/25-test_verify.t | 15 +- .../test/recipes/25-test_x509.t | 0 .../test/recipes/30-test_afalg.t | 0 .../test/recipes/30-test_engine.t | 0 .../test/recipes/30-test_evp.t | 0 .../test/recipes/30-test_evp_data/evpcase.txt | 0 .../recipes/30-test_evp_data/evpccmcavs.txt | 0 .../test/recipes/30-test_evp_data/evpciph.txt | 0 .../recipes/30-test_evp_data/evpdigest.txt | 0 .../recipes/30-test_evp_data/evpencod.txt | 0 .../test/recipes/30-test_evp_data/evpkdf.txt | 0 .../test/recipes/30-test_evp_data/evpmac.txt | 0 .../test/recipes/30-test_evp_data/evppbe.txt | 0 .../test/recipes/30-test_evp_data/evppkey.txt | 0 .../recipes/30-test_evp_data/evppkey_ecc.txt | 0 .../test/recipes/30-test_evp_extra.t | 0 .../test/recipes/30-test_pbelu.t | 0 .../test/recipes/30-test_pkey_meth.t | 0 .../test/recipes/30-test_pkey_meth_kdf.t | 0 .../test/recipes/40-test_rehash.t | 0 .../recipes/60-test_x509_check_cert_pkey.t | 0 .../test/recipes/60-test_x509_dup_cert.t | 0 .../test/recipes/60-test_x509_store.t | 0 .../test/recipes/60-test_x509_time.t | 0 .../test/recipes/70-test_asyncio.t | 0 .../test/recipes/70-test_bad_dtls.t | 0 .../test/recipes/70-test_clienthello.t | 0 .../test/recipes/70-test_comp.t | 0 .../test/recipes/70-test_key_share.t | 0 .../test/recipes/70-test_packet.t | 0 .../test/recipes/70-test_recordlen.t | 0 .../test/recipes/70-test_renegotiation.t | 0 .../test/recipes/70-test_servername.t | 0 .../test/recipes/70-test_sslcbcpadding.t | 0 .../test/recipes/70-test_sslcertstatus.t | 0 .../test/recipes/70-test_sslextension.t | 0 .../test/recipes/70-test_sslmessages.t | 0 .../test/recipes/70-test_sslrecords.t | 0 .../test/recipes/70-test_sslsessiontick.t | 0 .../test/recipes/70-test_sslsigalgs.t | 0 .../test/recipes/70-test_sslsignature.t | 0 .../test/recipes/70-test_sslskewith0p.t | 0 .../test/recipes/70-test_sslversions.t | 0 .../test/recipes/70-test_sslvertol.t | 0 .../test/recipes/70-test_tls13alerts.t | 0 .../test/recipes/70-test_tls13cookie.t | 0 .../test/recipes/70-test_tls13downgrade.t | 0 .../test/recipes/70-test_tls13hrr.t | 0 .../test/recipes/70-test_tls13kexmodes.t | 0 .../test/recipes/70-test_tls13messages.t | 0 .../test/recipes/70-test_tls13psk.t | 0 .../test/recipes/70-test_tlsextms.t | 0 .../test/recipes/70-test_verify_extra.t | 0 .../test/recipes/70-test_wpacket.t | 0 .../test/recipes/80-test_ca.t | 0 .../test/recipes/80-test_cipherbytes.t | 0 .../test/recipes/80-test_cipherlist.t | 0 .../test/recipes/80-test_ciphername.t | 0 .../test/recipes/80-test_cms.t | 9 +- .../80-test_cms_data/bad_signtime_attr.cms | Bin .../80-test_cms_data/ct_multiple_attr.cms | Bin .../recipes/80-test_cms_data/no_ct_attr.cms | Bin .../recipes/80-test_cms_data/no_md_attr.cms | Bin .../test/recipes/80-test_cmsapi.t | 0 .../test/recipes/80-test_ct.t | 0 .../test/recipes/80-test_dane.t | 0 .../test/recipes/80-test_dtls.t | 0 .../test/recipes/80-test_dtls_mtu.t | 0 .../test/recipes/80-test_dtlsv1listen.t | 0 .../test/recipes/80-test_ocsp.t | 0 .../test/recipes/80-test_ocsp_data/cert.pem | 0 .../test/recipes/80-test_ocsp_data/key.pem | 0 .../test/recipes/80-test_pkcs12.t | 0 .../test/recipes/80-test_policy_tree.t | 43 + .../80-test_policy_tree_data/large_leaf.pem | 11 + .../large_policy_tree.pem | 434 + .../80-test_policy_tree_data/small_leaf.pem | 11 + .../small_policy_tree.pem | 70 + .../test/recipes/80-test_ssl_new.t | 0 .../test/recipes/80-test_ssl_old.t | 0 .../test/recipes/80-test_ssl_test_ctx.t | 0 .../test/recipes/80-test_sslcorrupt.t | 0 .../test/recipes/80-test_tsa.t | 0 .../test/recipes/80-test_x509aux.t | 0 .../test/recipes/90-test_asn1_time.t | 0 .../test/recipes/90-test_async.t | 0 .../test/recipes/90-test_bio_enc.t | 0 .../test/recipes/90-test_bio_memleak.t | 0 .../test/recipes/90-test_constant_time.t | 0 .../test/recipes/90-test_fatalerr.t | 0 .../test/recipes/90-test_gmdiff.t | 0 .../test/recipes/90-test_gost.t | 0 .../test/recipes/90-test_gost_data/gost.conf | 0 .../90-test_gost_data/server-cert2001.pem | 0 .../90-test_gost_data/server-cert2012.pem | 0 .../90-test_gost_data/server-key2001.pem | 0 .../90-test_gost_data/server-key2012.pem | 0 .../test/recipes/90-test_ige.t | 0 .../test/recipes/90-test_includes.t | 0 .../conf-includes/includes1.cnf | 0 .../conf-includes/includes2.cnf | 0 .../90-test_includes_data/includes-broken.cnf | 0 .../90-test_includes_data/includes-eq-ws.cnf | 0 .../90-test_includes_data/includes-eq.cnf | 0 .../90-test_includes_data/includes-file.cnf | 0 .../90-test_includes_data/includes.cnf | 0 .../vms-includes-file.cnf | 0 .../90-test_includes_data/vms-includes.cnf | 0 .../test/recipes/90-test_memleak.t | 0 .../test/recipes/90-test_overhead.t | 0 .../test/recipes/90-test_secmem.t | 0 .../test/recipes/90-test_shlibload.t | 0 .../test/recipes/90-test_srp.t | 0 .../test/recipes/90-test_sslapi.t | 0 .../recipes/90-test_sslapi_data/passwd.txt | 0 .../test/recipes/90-test_sslbuffers.t | 0 .../test/recipes/90-test_store.t | 0 .../test/recipes/90-test_store_data/ca.cnf | 0 .../test/recipes/90-test_store_data/user.cnf | 0 .../test/recipes/90-test_sysdefault.t | 0 .../test/recipes/90-test_threads.t | 0 .../test/recipes/90-test_time_offset.t | 0 .../test/recipes/90-test_tls13ccs.t | 0 .../test/recipes/90-test_tls13encryption.t | 0 .../test/recipes/90-test_tls13secrets.t | 0 .../test/recipes/90-test_v3name.t | 0 .../test/recipes/95-test_external_boringssl.t | 0 .../test/recipes/95-test_external_krb5.t | 0 .../95-test_external_krb5_data/krb5.sh | 0 .../test/recipes/95-test_external_pyca.t | 0 .../cryptography.sh | 0 .../test/recipes/99-test_ecstress.t | 0 .../test/recipes/99-test_fuzz.t | 0 .../test/recipes/ocsp-response.der | Bin .../test/recipes/tconversion.pl | 0 .../test/recordlentest.c | 0 .../test/rsa_complex.c | 0 .../test/rsa_mp_test.c | 0 .../test/rsa_test.c | 0 .../test/run_tests.pl | 0 .../test/sanitytest.c | 0 .../test/secmemtest.c | 0 .../test/serverinfo.pem | 0 .../test/serverinfo2.pem | 0 .../test/servername_test.c | 0 .../test/session.pem | 0 .../test/shibboleth.pfx | Bin .../test/shlibloadtest.c | 0 .../test/siphash_internal_test.c | 0 .../test/sm2_internal_test.c | 0 .../test/sm4_internal_test.c | 0 .../test/smcont.txt | 0 .../test/smime-certs/badrsa.pem | 0 .../test/smime-certs/ca.cnf | 0 .../test/smime-certs/mksmime-certs.sh | 0 .../test/smime-certs/smdh.pem | 0 .../test/smime-certs/smdsa1.pem | 0 .../test/smime-certs/smdsa2.pem | 0 .../test/smime-certs/smdsa3.pem | 0 .../test/smime-certs/smdsap.pem | 0 .../test/smime-certs/smec1.pem | 0 .../test/smime-certs/smec2.pem | 0 .../test/smime-certs/smec3.pem | 0 .../test/smime-certs/smroot.pem | 0 .../test/smime-certs/smrsa1.pem | 0 .../test/smime-certs/smrsa2.pem | 0 .../test/smime-certs/smrsa3.pem | 0 .../test/srptest.c | 0 .../test/ssl-tests/01-simple.conf | 0 .../test/ssl-tests/01-simple.conf.in | 0 .../test/ssl-tests/02-protocol-version.conf | 0 .../ssl-tests/02-protocol-version.conf.in | 0 .../test/ssl-tests/03-custom_verify.conf | 0 .../test/ssl-tests/03-custom_verify.conf.in | 0 .../test/ssl-tests/04-client_auth.conf | 0 .../test/ssl-tests/04-client_auth.conf.in | 0 .../test/ssl-tests/05-sni.conf | 0 .../test/ssl-tests/05-sni.conf.in | 0 .../test/ssl-tests/06-sni-ticket.conf | 0 .../test/ssl-tests/06-sni-ticket.conf.in | 0 .../ssl-tests/07-dtls-protocol-version.conf | 0 .../07-dtls-protocol-version.conf.in | 0 .../test/ssl-tests/08-npn.conf | 0 .../test/ssl-tests/08-npn.conf.in | 0 .../test/ssl-tests/09-alpn.conf | 0 .../test/ssl-tests/09-alpn.conf.in | 0 .../test/ssl-tests/10-resumption.conf | 0 .../test/ssl-tests/10-resumption.conf.in | 0 .../test/ssl-tests/11-dtls_resumption.conf | 0 .../test/ssl-tests/11-dtls_resumption.conf.in | 0 .../test/ssl-tests/12-ct.conf | 0 .../test/ssl-tests/12-ct.conf.in | 0 .../test/ssl-tests/13-fragmentation.conf | 0 .../test/ssl-tests/13-fragmentation.conf.in | 0 .../test/ssl-tests/14-curves.conf | 0 .../test/ssl-tests/14-curves.conf.in | 0 .../test/ssl-tests/15-certstatus.conf | 0 .../test/ssl-tests/15-certstatus.conf.in | 0 .../test/ssl-tests/16-dtls-certstatus.conf | 0 .../test/ssl-tests/16-dtls-certstatus.conf.in | 0 .../test/ssl-tests/17-renegotiate.conf | 0 .../test/ssl-tests/17-renegotiate.conf.in | 0 .../test/ssl-tests/18-dtls-renegotiate.conf | 0 .../ssl-tests/18-dtls-renegotiate.conf.in | 0 .../test/ssl-tests/19-mac-then-encrypt.conf | 0 .../ssl-tests/19-mac-then-encrypt.conf.in | 0 .../test/ssl-tests/20-cert-select.conf | 0 .../test/ssl-tests/20-cert-select.conf.in | 0 .../test/ssl-tests/21-key-update.conf | 0 .../test/ssl-tests/21-key-update.conf.in | 0 .../test/ssl-tests/22-compression.conf | 0 .../test/ssl-tests/22-compression.conf.in | 0 .../test/ssl-tests/23-srp.conf | 0 .../test/ssl-tests/23-srp.conf.in | 0 .../test/ssl-tests/24-padding.conf | 0 .../test/ssl-tests/24-padding.conf.in | 0 .../test/ssl-tests/25-cipher.conf | 0 .../test/ssl-tests/25-cipher.conf.in | 0 .../test/ssl-tests/26-tls13_client_auth.conf | 0 .../ssl-tests/26-tls13_client_auth.conf.in | 0 .../test/ssl-tests/27-ticket-appdata.conf | 0 .../test/ssl-tests/27-ticket-appdata.conf.in | 0 .../test/ssl-tests/28-seclevel.conf | 0 .../test/ssl-tests/28-seclevel.conf.in | 0 .../ssl-tests/29-dtls-sctp-label-bug.conf | 0 .../ssl-tests/29-dtls-sctp-label-bug.conf.in | 0 .../test/ssl-tests/30-supported-groups.conf | 0 .../ssl-tests/30-supported-groups.conf.in | 0 .../test/ssl-tests/protocol_version.pm | 0 .../test/ssl-tests/ssltests_base.pm | 0 .../test/ssl_cert_table_internal_test.c | 0 .../test/ssl_ctx_test.c | 0 .../test/ssl_test.c | 0 .../test/ssl_test.tmpl | 0 .../test/ssl_test_ctx.c | 0 .../test/ssl_test_ctx.h | 0 .../test/ssl_test_ctx_test.c | 0 .../test/ssl_test_ctx_test.conf | 0 .../test/sslapitest.c | 0 .../test/sslbuffertest.c | 0 .../test/sslcorrupttest.c | 0 .../test/ssltest_old.c | 0 .../test/ssltestlib.c | 0 .../test/ssltestlib.h | 0 .../test/stack_test.c | 0 .../test/sysdefault.cnf | 0 .../test/sysdefaulttest.c | 0 .../test/test.cnf | 0 .../test/test_test.c | 0 .../test/testcrl.pem | 0 .../test/testdsa.pem | 0 .../test/testdsapub.pem | 0 .../test/testec-p256.pem | 0 .../test/testecpub-p256.pem | 0 .../test/tested25519.pem | 0 .../test/tested25519pub.pem | 0 .../test/tested448.pem | 0 .../test/tested448pub.pem | 0 .../test/testp7.pem | 0 .../test/testreq2.pem | 0 .../test/testrsa.pem | 0 .../test/testrsa_withattrs.der | Bin .../test/testrsa_withattrs.pem | 0 .../test/testrsapub.pem | 0 .../test/testsid.pem | 0 .../test/testutil.h | 0 .../test/testutil/basic_output.c | 0 .../test/testutil/cb.c | 0 .../test/testutil/driver.c | 0 .../test/testutil/format_output.c | 0 .../test/testutil/main.c | 0 .../test/testutil/output.h | 0 .../test/testutil/output_helpers.c | 0 .../test/testutil/random.c | 0 .../test/testutil/stanza.c | 0 .../test/testutil/tap_bio.c | 0 .../test/testutil/test_cleanup.c | 0 .../test/testutil/tests.c | 0 .../test/testutil/testutil_init.c | 0 .../test/testutil/tu_local.h | 0 .../test/testx509.pem | 0 .../test/threadstest.c | 0 .../test/time_offset_test.c | 0 .../test/tls13ccstest.c | 0 .../test/tls13encryptiontest.c | 0 .../test/tls13secretstest.c | 0 .../test/uitest.c | 0 .../test/v3-cert1.pem | 0 .../test/v3-cert2.pem | 0 .../test/v3ext.c | 0 .../test/v3nametest.c | 0 .../test/verify_extra_test.c | 0 .../test/versions.c | 0 .../test/wpackettest.c | 0 .../test/x509_check_cert_pkey_test.c | 0 .../test/x509_dup_cert_test.c | 0 .../test/x509_internal_test.c | 0 .../test/x509_time_test.c | 0 .../test/x509aux.c | 0 .../tools/build.info | 0 .../tools/c_rehash.in | 0 .../util/add-depends.pl | 0 .../util/build.info | 0 .../util/cavs-to-evptest.pl | 0 .../util/check-malloc-errs | 0 .../util/ck_errf.pl | 0 .../util/copy.pl | 0 .../util/dofile.pl | 0 .../util/echo.pl | 0 .../util/find-doc-nits | 0 .../util/find-unused-errs | 0 .../util/fix-includes | 0 .../util/fix-includes.sed | 0 .../util/indent.pro | 0 .../util/libcrypto.num | 0 .../util/libssl.num | 0 .../util/local_shlib.com.in | 0 .../util/mkbuildinf.pl | 0 .../util/mkdef.pl | 3 +- .../util/mkdir-p.pl | 0 .../util/mkerr.pl | 0 .../util/mkrc.pl | 0 .../util/openssl-format-source | 0 .../util/openssl-update-copyright | 0 .../util/opensslwrap.sh | 0 .../util/perl/OpenSSL/Glob.pm | 0 .../util/perl/OpenSSL/Test.pm | 0 .../util/perl/OpenSSL/Test/Simple.pm | 0 .../util/perl/OpenSSL/Test/Utils.pm | 0 .../util/perl/OpenSSL/Util/Pod.pm | 0 .../util/perl/OpenSSL/copyright.pm | 0 .../util/perl/TLSProxy/Alert.pm | 0 .../util/perl/TLSProxy/Certificate.pm | 0 .../util/perl/TLSProxy/CertificateRequest.pm | 0 .../util/perl/TLSProxy/CertificateVerify.pm | 0 .../util/perl/TLSProxy/ClientHello.pm | 0 .../util/perl/TLSProxy/EncryptedExtensions.pm | 0 .../util/perl/TLSProxy/Message.pm | 0 .../util/perl/TLSProxy/NewSessionTicket.pm | 0 .../util/perl/TLSProxy/Proxy.pm | 0 .../util/perl/TLSProxy/Record.pm | 0 .../util/perl/TLSProxy/ServerHello.pm | 0 .../util/perl/TLSProxy/ServerKeyExchange.pm | 0 .../util/perl/checkhandshake.pm | 0 .../util/perl/with_fallback.pm | 0 .../util/private.num | 0 .../util/process_docs.pl | 0 .../util/shlib_wrap.sh.in | 0 .../util/su-filter.pl | 0 .../util/unlocal_shlib.com.in | 0 src/python/CVE-2023-24329.diff | 104 + .../Lib/ctypes/test/test_parameters.py | 43 + .../Python-2.7.18/Lib/test/test_urlparse.py | 58 + src/python/Python-2.7.18/Lib/urlparse.py | 10 + .../Python-2.7.18/Modules/_ctypes/callproc.c | 65 +- src/python/README | 4 +- src/sqlite/SQLite-3.40.1/sqlite3.1 | 286 - .../{SQLite-3.40.1 => SQLite-3.43.1}/INSTALL | 0 .../Makefile.am | 2 +- .../Makefile.fallback | 0 .../Makefile.in | 2 +- .../Makefile.msc | 28 + .../README.txt | 0 .../Replace.cs | 0 .../aclocal.m4 | 0 .../{SQLite-3.40.1 => SQLite-3.43.1}/compile | 0 .../config.guess | 0 .../config.sub | 0 .../configure | 20 +- .../configure.ac | 2 +- .../{SQLite-3.40.1 => SQLite-3.43.1}/depcomp | 0 .../install-sh | 0 .../ltmain.sh | 0 .../{SQLite-3.40.1 => SQLite-3.43.1}/missing | 0 .../{SQLite-3.40.1 => SQLite-3.43.1}/shell.c | 4141 +++- src/sqlite/SQLite-3.43.1/sqlite3.1 | 161 + .../sqlite3.c | 17018 +++++++++++----- .../sqlite3.h | 530 +- .../sqlite3.pc.in | 0 .../sqlite3.rc | 0 .../sqlite3ext.h | 8 + .../sqlite3rc.h | 2 +- .../tea/Makefile.in | 0 .../tea/README | 0 .../tea/aclocal.m4 | 0 .../tea/configure | 20 +- .../tea/configure.ac | 2 +- .../tea/doc/sqlite3.n | 0 .../tea/generic/tclsqlite3.c | 36 +- .../tea/license.terms | 0 .../tea/pkgIndex.tcl.in | 0 .../tea/tclconfig/install-sh | 0 .../tea/tclconfig/tcl.m4 | 0 .../tea/win/makefile.vc | 0 .../tea/win/nmakehlp.c | 0 .../tea/win/rules.vc | 0 src/sqlite/sqlite3-3.40.1-x64.dll | Bin 2165760 -> 0 bytes src/sqlite/sqlite3-3.40.1-x86.dll | Bin 1111883 -> 0 bytes src/sqlite/sqlite3-3.43.1-x64.dll | Bin 0 -> 2973696 bytes src/sqlite/sqlite3-3.43.1-x86.dll | Bin 0 -> 1147327 bytes .../contrib/minizip/MiniZip64_Changes.txt | 6 - src/zlib/zlib-1.2.13/contrib/minizip/zip.h | 367 - .../zlib-1.2.13/contrib/vstudio/vc9/zlib.rc | 32 - .../contrib/vstudio/vc9/zlibvc.def | 158 - src/zlib/zlib-1.2.13/examples/zran.c | 479 - src/zlib/zlib-1.2.13/examples/zran.h | 40 - src/zlib/zlib-1.2.13/zlib.3.pdf | Bin 19366 -> 0 bytes src/zlib/zlib-1.2.13/zlib2ansi | 152 - .../{zlib-1.2.13 => zlib-1.3}/CMakeLists.txt | 4 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/ChangeLog | 20 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/FAQ | 2 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/INDEX | 0 src/zlib/{zlib-1.2.13 => zlib-1.3}/LICENSE | 0 src/zlib/{zlib-1.2.13 => zlib-1.3}/Makefile | 0 .../{zlib-1.2.13 => zlib-1.3}/Makefile.in | 10 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/README | 19 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/adler32.c | 32 +- .../amiga/Makefile.pup | 0 .../amiga/Makefile.sas | 0 src/zlib/{zlib-1.2.13 => zlib-1.3}/compress.c | 21 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/configure | 26 +- .../contrib/README.contrib | 0 .../contrib/ada/buffer_demo.adb | 0 .../contrib/ada/mtest.adb | 0 .../contrib/ada/read.adb | 0 .../contrib/ada/readme.txt | 4 +- .../contrib/ada/test.adb | 4 +- .../contrib/ada/zlib-streams.adb | 0 .../contrib/ada/zlib-streams.ads | 2 +- .../contrib/ada/zlib-thin.adb | 0 .../contrib/ada/zlib-thin.ads | 0 .../contrib/ada/zlib.adb | 2 +- .../contrib/ada/zlib.ads | 2 +- .../contrib/ada/zlib.gpr | 0 .../contrib/blast/Makefile | 0 .../contrib/blast/README | 0 .../contrib/blast/blast.c | 0 .../contrib/blast/blast.h | 0 .../contrib/blast/test.pk | Bin .../contrib/blast/test.txt | 0 .../contrib/delphi/ZLib.pas | 2 +- .../contrib/delphi/ZLibConst.pas | 0 .../contrib/delphi/readme.txt | 0 .../contrib/delphi/zlibd32.mak | 0 .../contrib/dotzlib/DotZLib.build | 0 .../contrib/dotzlib/DotZLib.chm | Bin .../contrib/dotzlib/DotZLib.sln | 0 .../contrib/dotzlib/DotZLib/AssemblyInfo.cs | 0 .../contrib/dotzlib/DotZLib/ChecksumImpl.cs | 2 +- .../contrib/dotzlib/DotZLib/CircularBuffer.cs | 0 .../contrib/dotzlib/DotZLib/CodecBase.cs | 4 +- .../contrib/dotzlib/DotZLib/Deflater.cs | 0 .../contrib/dotzlib/DotZLib/DotZLib.cs | 0 .../contrib/dotzlib/DotZLib/DotZLib.csproj | 0 .../contrib/dotzlib/DotZLib/GZipStream.cs | 6 +- .../contrib/dotzlib/DotZLib/Inflater.cs | 0 .../contrib/dotzlib/DotZLib/UnitTests.cs | 2 +- .../contrib/dotzlib/LICENSE_1_0.txt | 0 .../contrib/dotzlib/readme.txt | 2 +- .../contrib/gcc_gvmat64/gvmat64.S | 0 .../contrib/infback9/README | 0 .../contrib/infback9/infback9.c | 24 +- .../contrib/infback9/infback9.h | 16 +- .../contrib/infback9/inffix9.h | 0 .../contrib/infback9/inflate9.h | 0 .../contrib/infback9/inftree9.c | 17 +- .../contrib/infback9/inftree9.h | 6 +- .../contrib/iostream/test.cpp | 0 .../contrib/iostream/zfstream.cpp | 0 .../contrib/iostream/zfstream.h | 0 .../contrib/iostream2/zstream.h | 0 .../contrib/iostream2/zstream_test.cpp | 0 .../contrib/iostream3/README | 0 .../contrib/iostream3/TODO | 0 .../contrib/iostream3/test.cc | 0 .../contrib/iostream3/zfstream.cc | 0 .../contrib/iostream3/zfstream.h | 0 .../contrib/minizip/Makefile | 0 .../contrib/minizip/Makefile.am | 0 .../contrib/minizip/MiniZip64_Changes.txt | 6 + .../contrib/minizip/MiniZip64_info.txt | 0 .../contrib/minizip/configure.ac | 2 +- .../contrib/minizip/crypt.h | 12 +- .../contrib/minizip/ioapi.c | 62 +- .../contrib/minizip/ioapi.h | 36 +- .../contrib/minizip/iowin32.c | 65 +- .../contrib/minizip/iowin32.h | 8 +- .../contrib/minizip/make_vms.com | 0 .../contrib/minizip/miniunz.c | 70 +- .../contrib/minizip/miniunzip.1 | 0 .../contrib/minizip/minizip.1 | 0 .../contrib/minizip/minizip.c | 60 +- .../contrib/minizip/minizip.pc.in | 0 .../contrib/minizip/mztools.c | 8 +- .../contrib/minizip/mztools.h | 0 .../contrib/minizip/unzip.c | 515 +- .../contrib/minizip/unzip.h | 136 +- .../contrib/minizip/zip.c | 315 +- src/zlib/zlib-1.3/contrib/minizip/zip.h | 364 + .../contrib/pascal/example.pas | 0 .../contrib/pascal/readme.txt | 0 .../contrib/pascal/zlibd32.mak | 0 .../contrib/pascal/zlibpas.pas | 2 +- .../contrib/puff/Makefile | 0 .../contrib/puff/README | 0 .../contrib/puff/puff.c | 0 .../contrib/puff/puff.h | 0 .../contrib/puff/pufftest.c | 0 .../contrib/puff/zeros.raw | Bin .../contrib/testzlib/testzlib.c | 2 +- .../contrib/testzlib/testzlib.txt | 0 .../contrib/untgz/Makefile | 0 .../contrib/untgz/Makefile.msc | 0 .../contrib/untgz/untgz.c | 63 +- .../contrib/vstudio/readme.txt | 2 +- .../contrib/vstudio/vc10/miniunz.vcxproj | 0 .../vstudio/vc10/miniunz.vcxproj.filters | 0 .../contrib/vstudio/vc10/minizip.vcxproj | 0 .../vstudio/vc10/minizip.vcxproj.filters | 0 .../contrib/vstudio/vc10/testzlib.vcxproj | 0 .../vstudio/vc10/testzlib.vcxproj.filters | 0 .../contrib/vstudio/vc10/testzlibdll.vcxproj | 0 .../vstudio/vc10/testzlibdll.vcxproj.filters | 0 .../contrib/vstudio/vc10}/zlib.rc | 8 +- .../contrib/vstudio/vc10/zlibstat.vcxproj | 0 .../vstudio/vc10/zlibstat.vcxproj.filters | 0 .../contrib/vstudio/vc10}/zlibvc.def | 2 +- .../contrib/vstudio/vc10/zlibvc.sln | 0 .../contrib/vstudio/vc10/zlibvc.vcxproj | 0 .../vstudio/vc10/zlibvc.vcxproj.filters | 0 .../contrib/vstudio/vc11/miniunz.vcxproj | 0 .../contrib/vstudio/vc11/minizip.vcxproj | 0 .../contrib/vstudio/vc11/testzlib.vcxproj | 0 .../contrib/vstudio/vc11/testzlibdll.vcxproj | 0 .../contrib/vstudio/vc11}/zlib.rc | 8 +- .../contrib/vstudio/vc11/zlibstat.vcxproj | 0 .../contrib/vstudio/vc11}/zlibvc.def | 2 +- .../contrib/vstudio/vc11/zlibvc.sln | 0 .../contrib/vstudio/vc11/zlibvc.vcxproj | 0 .../contrib/vstudio/vc12/miniunz.vcxproj | 0 .../contrib/vstudio/vc12/minizip.vcxproj | 0 .../contrib/vstudio/vc12/testzlib.vcxproj | 0 .../contrib/vstudio/vc12/testzlibdll.vcxproj | 0 .../contrib/vstudio/vc12/zlib.rc | 8 +- .../contrib/vstudio/vc12/zlibstat.vcxproj | 0 .../contrib/vstudio/vc12/zlibvc.def | 2 +- .../contrib/vstudio/vc12/zlibvc.sln | 0 .../contrib/vstudio/vc12/zlibvc.vcxproj | 0 .../contrib/vstudio/vc14/miniunz.vcxproj | 0 .../contrib/vstudio/vc14/minizip.vcxproj | 0 .../contrib/vstudio/vc14/testzlib.vcxproj | 0 .../contrib/vstudio/vc14/testzlibdll.vcxproj | 0 .../contrib/vstudio/vc14/zlib.rc | 8 +- .../contrib/vstudio/vc14/zlibstat.vcxproj | 0 .../contrib/vstudio/vc14}/zlibvc.def | 2 +- .../contrib/vstudio/vc14/zlibvc.sln | 0 .../contrib/vstudio/vc14/zlibvc.vcxproj | 0 .../contrib/vstudio/vc9/miniunz.vcproj | 0 .../contrib/vstudio/vc9/minizip.vcproj | 0 .../contrib/vstudio/vc9/testzlib.vcproj | 0 .../contrib/vstudio/vc9/testzlibdll.vcproj | 0 src/zlib/zlib-1.3/contrib/vstudio/vc9/zlib.rc | 32 + .../contrib/vstudio/vc9/zlibstat.vcproj | 0 .../zlib-1.3/contrib/vstudio/vc9/zlibvc.def | 158 + .../contrib/vstudio/vc9/zlibvc.sln | 0 .../contrib/vstudio/vc9/zlibvc.vcproj | 0 src/zlib/{zlib-1.2.13 => zlib-1.3}/crc32.c | 248 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/crc32.h | 0 src/zlib/{zlib-1.2.13 => zlib-1.3}/deflate.c | 569 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/deflate.h | 16 +- .../doc/algorithm.txt | 0 .../doc/crc-doc.1.0.pdf | Bin .../{zlib-1.2.13 => zlib-1.3}/doc/rfc1950.txt | 0 .../{zlib-1.2.13 => zlib-1.3}/doc/rfc1951.txt | 0 .../{zlib-1.2.13 => zlib-1.3}/doc/rfc1952.txt | 0 .../doc/txtvsbin.txt | 0 .../examples/README.examples | 0 .../examples/enough.c | 0 .../examples/fitblk.c | 2 +- .../{zlib-1.2.13 => zlib-1.3}/examples/gun.c | 0 .../examples/gzappend.c | 0 .../examples/gzjoin.c | 0 .../examples/gzlog.c | 0 .../examples/gzlog.h | 0 .../examples/gznorm.c | 0 .../examples/zlib_how.html | 26 +- .../examples/zpipe.c | 0 src/zlib/zlib-1.3/examples/zran.c | 533 + src/zlib/zlib-1.3/examples/zran.h | 51 + src/zlib/{zlib-1.2.13 => zlib-1.3}/gzclose.c | 4 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/gzguts.h | 23 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/gzlib.c | 101 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/gzread.c | 88 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/gzwrite.c | 84 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/infback.c | 30 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/inffast.c | 5 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/inffast.h | 2 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/inffixed.h | 0 src/zlib/{zlib-1.2.13 => zlib-1.3}/inflate.c | 129 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/inflate.h | 0 src/zlib/{zlib-1.2.13 => zlib-1.3}/inftrees.c | 17 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/inftrees.h | 6 +- .../{zlib-1.2.13 => zlib-1.3}/make_vms.com | 0 .../msdos/Makefile.bor | 0 .../msdos/Makefile.dj2 | 0 .../msdos/Makefile.emx | 0 .../msdos/Makefile.msc | 0 .../msdos/Makefile.tc | 0 .../nintendods/Makefile | 0 .../nintendods/README | 0 .../old/Makefile.emx | 0 .../old/Makefile.riscos | 0 src/zlib/{zlib-1.2.13 => zlib-1.3}/old/README | 0 .../{zlib-1.2.13 => zlib-1.3}/old/descrip.mms | 0 .../old/os2/Makefile.os2 | 0 .../old/os2/zlib.def | 0 .../old/visual-basic.txt | 0 .../{zlib-1.2.13 => zlib-1.3}/os400/README400 | 2 +- .../{zlib-1.2.13 => zlib-1.3}/os400/bndsrc | 0 .../{zlib-1.2.13 => zlib-1.3}/os400/make.sh | 0 .../{zlib-1.2.13 => zlib-1.3}/os400/zlib.inc | 8 +- .../{zlib-1.2.13 => zlib-1.3}/qnx/package.qpg | 10 +- .../{zlib-1.2.13 => zlib-1.3}/test/example.c | 103 +- .../{zlib-1.2.13 => zlib-1.3}/test/infcover.c | 5 +- .../{zlib-1.2.13 => zlib-1.3}/test/minigzip.c | 172 +- .../{zlib-1.2.13 => zlib-1.3}/treebuild.xml | 4 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/trees.c | 526 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/trees.h | 0 src/zlib/{zlib-1.2.13 => zlib-1.3}/uncompr.c | 16 +- .../watcom/watcom_f.mak | 0 .../watcom/watcom_l.mak | 0 .../win32/DLL_FAQ.txt | 0 .../win32/Makefile.bor | 0 .../win32/Makefile.gcc | 0 .../win32/Makefile.msc | 0 .../win32/README-WIN32.txt | 4 +- .../win32/VisualC.txt | 0 .../{zlib-1.2.13 => zlib-1.3}/win32/zlib.def | 0 .../{zlib-1.2.13 => zlib-1.3}/win32/zlib1.rc | 0 src/zlib/{zlib-1.2.13 => zlib-1.3}/zconf.h | 8 +- .../{zlib-1.2.13 => zlib-1.3}/zconf.h.cmakein | 8 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/zconf.h.in | 8 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/zlib.3 | 6 +- src/zlib/zlib-1.3/zlib.3.pdf | Bin 0 -> 19505 bytes src/zlib/{zlib-1.2.13 => zlib-1.3}/zlib.h | 379 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/zlib.map | 0 .../{zlib-1.2.13 => zlib-1.3}/zlib.pc.cmakein | 0 src/zlib/{zlib-1.2.13 => zlib-1.3}/zlib.pc.in | 0 src/zlib/{zlib-1.2.13 => zlib-1.3}/zutil.c | 60 +- src/zlib/{zlib-1.2.13 => zlib-1.3}/zutil.h | 20 +- 5702 files changed, 21581 insertions(+), 12645 deletions(-) create mode 100644 python-modules/cryptography-3.2.1-patches/CVE-2023-23931.patch rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/.travis-create-release.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ACKNOWLEDGMENTS (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/CHANGES (99%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/CHANGES.SSLeay (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/CONTRIBUTING (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/Configure (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/FAQ (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/GitConfigure (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/GitMake (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/INSTALL (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/INSTALL.DJGPP (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/INSTALL.MacOS (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/INSTALL.NW (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/INSTALL.OS2 (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/INSTALL.VMS (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/INSTALL.W32 (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/INSTALL.W64 (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/INSTALL.WCE (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/LICENSE (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/GUSI_Init.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/GetHTTPS.src/CPStringUtils.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/GetHTTPS.src/CPStringUtils.hpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/GetHTTPS.src/ErrorHandling.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/GetHTTPS.src/ErrorHandling.hpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/GetHTTPS.src/GetHTTPS.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/GetHTTPS.src/MacSocket.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/GetHTTPS.src/MacSocket.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/OpenSSL.mcp.hqx (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/Randomizer.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/Randomizer.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/TODO (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/_MWERKS_GUSI_prefix.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/_MWERKS_prefix.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/buildinf.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/mklinks.as.hqx (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/MacOS/opensslconf.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/Makefile.org (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/Makefile.shared (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/NEWS (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/Netware/build.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/Netware/cpy_tests.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/Netware/do_tests.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/Netware/globals.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/Netware/readme.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/Netware/set_env.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/PROBLEMS (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/README.ASN1 (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/README.ENGINE (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/TABLE (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/VMS/TODO (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/VMS/VMSify-conf.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/VMS/WISHLIST.TXT (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/VMS/install-vms.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/VMS/mkshared.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/VMS/multinet_shr.opt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/VMS/openssl_startup.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/VMS/openssl_undo.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/VMS/openssl_utils.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/VMS/socketshr_shr.opt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/VMS/tcpip_shr_decc.opt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/VMS/test-includes.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/VMS/ucx_shr_decc.opt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/VMS/ucx_shr_decc_log.opt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/VMS/ucx_shr_vaxc.opt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/CA.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/CA.pl.in (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/CA.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/app_rand.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/apps.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/apps.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/asn1pars.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/ca-cert.srl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/ca-key.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/ca-req.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/ca.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/cert.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/ciphers.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/client.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/cms.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/crl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/crl2p7.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/demoCA/cacert.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/demoCA/index.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/demoCA/private/cakey.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/demoCA/serial (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/demoSRP/srp_verifier.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/demoSRP/srp_verifier.txt.attr (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/dgst.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/dh.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/dh1024.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/dh2048.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/dh4096.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/dh512.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/dhparam.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/dsa-ca.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/dsa-pca.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/dsa.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/dsa1024.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/dsa512.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/dsap.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/dsaparam.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/ec.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/ecparam.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/engine.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/errstr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/gendh.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/gendsa.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/genpkey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/genrsa.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/install-apps.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/makeapps.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/nseq.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/ocsp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/oid.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/openssl-vms.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/openssl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/openssl.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/passwd.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/pca-cert.srl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/pca-key.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/pca-req.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/pkcs12.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/pkcs7.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/pkcs8.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/pkey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/pkeyparam.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/pkeyutl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/prime.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/privkey.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/progs.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/progs.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/rand.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/req.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/req.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/rsa.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/rsa8192.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/rsautl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/s1024key.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/s1024req.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/s512-key.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/s512-req.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/s_apps.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/s_cb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/s_client.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/s_server.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/s_socket.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/s_time.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/server.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/server.srl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/server2.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/sess_id.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/set/set-g-ca.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/set/set-m-ca.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/set/set_b_ca.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/set/set_c_ca.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/set/set_d_ct.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/set/set_root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/smime.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/speed.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/spkac.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/srp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/testCA.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/testdsa.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/testrsa.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/timeouts.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/ts.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/tsget (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/verify.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/version.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/vms_decc_init.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/vms_term_sock.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/vms_term_sock.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/winrand.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/apps/x509.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/appveyor.yml (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/bugs/MS (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/bugs/SSLv3 (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/bugs/alpha.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/bugs/dggccbug.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/bugs/sgiccbug.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/bugs/sslref.dif (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/bugs/stream.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/bugs/ultrixcc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/certs/README.RootCerts (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/certs/demo/ca-cert.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/certs/demo/dsa-ca.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/certs/demo/dsa-pca.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/certs/demo/pca-cert.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/certs/expired/ICE.crl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/config (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/LPdir_nyi.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/LPdir_unix.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/LPdir_vms.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/LPdir_win.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/LPdir_win32.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/LPdir_wince.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/aes.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/aes_cbc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/aes_cfb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/aes_core.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/aes_ctr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/aes_ecb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/aes_ige.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/aes_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/aes_misc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/aes_ofb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/aes_wrap.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/aes_x86core.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aes-586.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aes-armv4.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aes-ia64.S (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aes-mips.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aes-parisc.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aes-ppc.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aes-s390x.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aes-sparcv9.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aes-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aesni-mb-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aesni-sha1-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aesni-sha256-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aesni-x86.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aesni-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aesp8-ppc.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aest4-sparcv9.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/aesv8-armx.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/bsaes-armv7.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/bsaes-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/vpaes-ppc.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/vpaes-x86.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/aes/asm/vpaes-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/alphacpuid.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/arm64cpuid.S (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/arm_arch.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/armcap.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/armv4cpuid.S (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_bitstr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_bool.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_bytes.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_d2i_fp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_digest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_dup.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_enum.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_gentm.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_i2d_fp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_int.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_mbstr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_object.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_octet.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_print.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_set.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_sign.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_strex.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_strnid.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_time.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_type.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_utctm.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_utf8.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/a_verify.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/ameth_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/asn1.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/asn1_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/asn1_gen.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/asn1_int.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/asn1_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/asn1_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/asn1_mac.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/asn1_par.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/asn1t.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/asn_mime.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/asn_moid.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/asn_pack.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/bio_asn1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/bio_ndef.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/charmap.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/charmap.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/d2i_pr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/d2i_pu.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/evp_asn1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/f_enum.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/f_int.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/f_string.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/i2d_pr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/i2d_pu.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/n_pkey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/nsseq.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/p5_pbe.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/p5_pbev2.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/p8_pkey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/t_bitst.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/t_crl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/t_pkey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/t_req.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/t_spki.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/t_x509.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/t_x509a.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/tasn_dec.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/tasn_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/tasn_fre.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/tasn_new.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/tasn_prn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/tasn_typ.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/tasn_utl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_algor.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_attrib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_bignum.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_crl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_exten.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_info.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_long.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_name.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_nx509.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_pkey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_pubkey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_req.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_sig.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_spki.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_val.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_x509.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/asn1/x_x509a.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/COPYRIGHT (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/INSTALL (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/VERSION (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/asm/bf-586.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/asm/bf-686.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/asm/readme (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/bf_cbc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/bf_cfb64.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/bf_ecb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/bf_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/bf_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/bf_ofb64.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/bf_opts.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/bf_pi.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/bf_skey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/bfs.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/bfspeed.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/bftest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bf/blowfish.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/b_dump.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/b_print.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/b_sock.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bf_buff.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bf_lbuf.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bf_nbio.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bf_null.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bio.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bio_cb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bio_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bio_lcl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bio_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bss_acpt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bss_bio.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bss_conn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bss_dgram.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bss_fd.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bss_file.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bss_log.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bss_mem.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bss_null.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bss_rtcp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bio/bss_sock.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/alpha-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/armv4-gf2m.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/armv4-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/bn-586.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/co-586.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/ia64-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/ia64.S (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/mips-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/mips.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/mips3-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/mips3.s (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/pa-risc2.s (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/pa-risc2W.s (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/parisc-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/ppc-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/ppc.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/ppc64-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/rsaz-avx2.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/rsaz-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/s390x-gf2m.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/s390x-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/s390x.S (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/sparct4-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/sparcv8.S (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/sparcv8plus.S (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/sparcv9-gf2m.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/sparcv9-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/sparcv9a-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/via-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/vis3-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/vms.mar (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/x86-gf2m.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/x86-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/x86.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/x86/add.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/x86/comba.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/x86/div.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/x86/f (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/x86/mul.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/x86/mul_add.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/x86/sqr.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/x86/sub.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/x86_64-gcc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/x86_64-gf2m.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/x86_64-mont.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/asm/x86_64-mont5.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn.mul (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_add.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_asm.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_blind.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_const.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_ctx.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_depr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_div.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_exp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_exp2.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_gcd.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_gf2m.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_kron.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_lcl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_mod.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_mont.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_mpi.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_mul.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_nist.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_prime.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_prime.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_prime.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_print.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_rand.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_recp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_shift.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_sqr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_sqrt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_word.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bn_x931p.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bnspeed.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/bntest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/divtest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/exp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/expspeed.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/exptest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/rsaz_exp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/rsaz_exp.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/todo (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn/vms-helper.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/bn_int.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/buffer/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/buffer/buf_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/buffer/buf_str.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/buffer/buffer.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/buffer/buffer.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/camellia/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/camellia/asm/cmll-x86.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/camellia/asm/cmll-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/camellia/asm/cmllt4-sparcv9.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/camellia/camellia.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/camellia/camellia.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/camellia/cmll_cbc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/camellia/cmll_cfb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/camellia/cmll_ctr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/camellia/cmll_ecb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/camellia/cmll_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/camellia/cmll_misc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/camellia/cmll_ofb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/camellia/cmll_utl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cast/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cast/asm/cast-586.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cast/asm/readme (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cast/c_cfb64.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cast/c_ecb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cast/c_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cast/c_ofb64.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cast/c_skey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cast/cast.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cast/cast_lcl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cast/cast_s.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cast/cast_spd.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cast/castopts.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cast/casts.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cast/casttest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cmac/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cmac/cm_ameth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cmac/cm_pmeth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cmac/cmac.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cmac/cmac.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms_asn1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms_att.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms_cd.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms_dd.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms_env.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms_ess.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms_io.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms_kari.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms_lcl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms_pwri.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms_sd.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cms/cms_smime.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/comp/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/comp/c_rle.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/comp/c_zlib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/comp/comp.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/comp/comp_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/comp/comp_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/cnf_save.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/conf.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/conf_api.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/conf_api.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/conf_def.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/conf_def.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/conf_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/conf_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/conf_mall.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/conf_mod.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/conf_sap.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/keysets.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/ssleay.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/conf/test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/constant_time_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/constant_time_test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cpt_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cryptlib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cryptlib.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/crypto-lib.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/crypto.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/cversion.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/COPYRIGHT (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/DES.pm (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/DES.xs (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/FILES0 (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/INSTALL (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/Imakefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/KERBEROS (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/VERSION (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/asm/crypt586.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/asm/des-586.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/asm/des_enc.m4 (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/asm/desboth.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/asm/dest4-sparcv9.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/asm/readme (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/cbc3_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/cbc_cksm.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/cbc_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/cfb64ede.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/cfb64enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/cfb_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/des-lib.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/des.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/des.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/des.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/des3s.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/des_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/des_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/des_old.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/des_old.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/des_old2.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/des_opts.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/des_ver.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/dess.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/destest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/ecb3_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/ecb_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/ede_cbcm_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/enc_read.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/enc_writ.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/fcrypt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/fcrypt_b.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/makefile.bc (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/ncbc_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/ofb64ede.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/ofb64enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/ofb_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/options.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/pcbc_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/qud_cksm.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/rand_key.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/read2pwd.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/read_pwd.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/rpc_des.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/rpc_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/rpw.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/set_key.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/speed.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/spr.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/str2key.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/t/test (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/times/486-50.sol (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/times/586-100.lnx (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/times/686-200.fre (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/times/aix.cc (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/times/alpha.cc (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/times/hpux.cc (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/times/sparc.gcc (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/times/usparc.cc (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/typemap (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/des/xcbc_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh1024.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh192.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh2048.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh4096.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh512.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh_ameth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh_asn1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh_check.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh_depr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh_gen.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh_kdf.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh_key.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh_pmeth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh_prn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dh_rfc5114.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/dhtest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/example (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/generate (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/p1024.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/p192.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dh/p512.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsa.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsa_ameth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsa_asn1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsa_depr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsa_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsa_gen.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsa_key.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsa_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsa_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsa_ossl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsa_pmeth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsa_prn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsa_sign.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsa_vrf.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsagen.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/dsatest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dsa/fips186a.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dso/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dso/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dso/dso.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dso/dso_beos.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dso/dso_dl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dso/dso_dlfcn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dso/dso_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dso/dso_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dso/dso_null.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dso/dso_openssl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dso/dso_vms.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/dso/dso_win32.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ebcdic.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ebcdic.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/asm/ecp_nistz256-avx2.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/asm/ecp_nistz256-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec2_mult.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec2_oct.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec2_smpl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec_ameth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec_asn1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec_check.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec_curve.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec_cvt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec_key.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec_lcl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec_mult.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec_oct.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec_pmeth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ec_print.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/eck_prn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ecp_mont.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ecp_nist.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ecp_nistp224.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ecp_nistp256.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ecp_nistp521.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ecp_nistputil.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ecp_nistz256.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ecp_nistz256_table.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ecp_oct.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ecp_smpl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ec/ectest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdh/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdh/ecdh.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdh/ecdhtest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdh/ech_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdh/ech_kdf.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdh/ech_key.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdh/ech_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdh/ech_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdh/ech_ossl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdsa/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdsa/ecdsa.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdsa/ecdsatest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdsa/ecs_asn1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdsa/ecs_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdsa/ecs_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdsa/ecs_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdsa/ecs_ossl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdsa/ecs_sign.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ecdsa/ecs_vrf.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/eng_all.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/eng_cnf.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/eng_cryptodev.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/eng_ctrl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/eng_dyn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/eng_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/eng_fat.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/eng_init.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/eng_int.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/eng_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/eng_list.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/eng_openssl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/eng_pkey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/eng_rdrand.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/eng_table.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/engine.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/enginetest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/tb_asnmth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/tb_cipher.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/tb_dh.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/tb_digest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/tb_dsa.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/tb_ecdh.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/tb_ecdsa.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/tb_pkmeth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/tb_rand.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/tb_rsa.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/engine/tb_store.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/err/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/err/err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/err/err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/err/err_all.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/err/err_prn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/err/openssl.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/bio_b64.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/bio_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/bio_md.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/bio_ok.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/c_all.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/c_allc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/c_alld.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/digest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_aes.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_aes_cbc_hmac_sha1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_aes_cbc_hmac_sha256.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_bf.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_camellia.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_cast.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_des.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_des3.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_dsa.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_idea.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_null.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_old.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_rc2.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_rc4.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_rc4_hmac_md5.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_rc5.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_seed.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/e_xcbc_d.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/encode.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/evp.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/evp_acnf.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/evp_cnf.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/evp_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/evp_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/evp_extra_test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/evp_key.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/evp_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/evp_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/evp_pbe.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/evp_pkey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/evp_test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/evptests.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/m_dss.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/m_dss1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/m_ecdsa.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/m_md2.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/m_md4.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/m_md5.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/m_mdc2.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/m_null.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/m_ripemd.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/m_sha.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/m_sha1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/m_sigver.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/m_wp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/names.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/openbsd_hw.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/p5_crpt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/p5_crpt2.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/p_dec.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/p_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/p_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/p_open.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/p_seal.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/p_sign.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/p_verify.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/pmeth_fn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/pmeth_gn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/evp/pmeth_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ex_data.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/fips_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/fips_ers.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/getenv.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/hmac/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/hmac/hm_ameth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/hmac/hm_pmeth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/hmac/hmac.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/hmac/hmac.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/hmac/hmactest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ia64cpuid.S (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/idea/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/idea/i_cbc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/idea/i_cfb64.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/idea/i_ecb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/idea/i_ofb64.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/idea/i_skey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/idea/idea.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/idea/idea_lcl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/idea/idea_spd.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/idea/ideatest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/idea/version (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/install-crypto.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/jpake/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/jpake/jpake.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/jpake/jpake.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/jpake/jpake_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/jpake/jpaketest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/krb5/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/krb5/krb5_asn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/krb5/krb5_asn.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/lhash/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/lhash/lh_stats.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/lhash/lh_test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/lhash/lhash.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/lhash/lhash.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/lhash/num.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md2/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md2/md2.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md2/md2.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md2/md2_dgst.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md2/md2_one.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md2/md2test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md32_common.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md4/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md4/md4.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md4/md4.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md4/md4_dgst.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md4/md4_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md4/md4_one.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md4/md4s.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md4/md4test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md5/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md5/asm/md5-586.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md5/asm/md5-ia64.S (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md5/asm/md5-sparcv9.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md5/asm/md5-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md5/md5.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md5/md5.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md5/md5_dgst.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md5/md5_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md5/md5_one.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md5/md5s.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/md5/md5test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/mdc2/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/mdc2/mdc2.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/mdc2/mdc2_one.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/mdc2/mdc2dgst.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/mdc2/mdc2test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/mem.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/mem_clr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/mem_dbg.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/asm/aesni-gcm-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/asm/ghash-alpha.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/asm/ghash-armv4.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/asm/ghash-ia64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/asm/ghash-parisc.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/asm/ghash-s390x.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/asm/ghash-sparcv9.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/asm/ghash-x86.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/asm/ghash-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/asm/ghashp8-ppc.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/asm/ghashv8-armx.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/cbc128.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/ccm128.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/cfb128.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/ctr128.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/cts128.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/gcm128.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/modes.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/modes_lcl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/ofb128.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/wrap128.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/modes/xts128.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/o_dir.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/o_dir.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/o_dir_test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/o_fips.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/o_init.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/o_str.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/o_str.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/o_time.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/o_time.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/o_names.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/obj_dat.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/obj_dat.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/obj_dat.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/obj_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/obj_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/obj_mac.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/obj_mac.num (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/obj_xref.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/obj_xref.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/obj_xref.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/objects.README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/objects.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/objects.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/objects.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/objects/objxref.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ocsp/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ocsp/ocsp.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ocsp/ocsp_asn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ocsp/ocsp_cl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ocsp/ocsp_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ocsp/ocsp_ext.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ocsp/ocsp_ht.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ocsp/ocsp_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ocsp/ocsp_prn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ocsp/ocsp_srv.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ocsp/ocsp_vfy.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/opensslconf.h.in (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/opensslv.h (96%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ossl_typ.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pariscid.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/message (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/pem.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/pem2.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/pem_all.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/pem_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/pem_info.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/pem_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/pem_oth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/pem_pk8.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/pem_pkey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/pem_seal.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/pem_sign.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/pem_x509.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/pem_xaux.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/pkcs7.lis (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pem/pvkfmt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/perlasm/cbc.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/perlasm/ppc-xlate.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/perlasm/readme (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/perlasm/sparcv9_modes.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/perlasm/x86_64-xlate.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/perlasm/x86asm.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/perlasm/x86gas.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/perlasm/x86masm.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/perlasm/x86nasm.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/p12_add.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/p12_asn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/p12_attr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/p12_crpt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/p12_crt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/p12_decr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/p12_init.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/p12_key.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/p12_kiss.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/p12_mutl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/p12_npas.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/p12_p8d.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/p12_p8e.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/p12_utl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/pk12err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs12/pkcs12.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs7/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs7/bio_pk7.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs7/pk7_asn1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs7/pk7_attr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs7/pk7_dgst.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs7/pk7_doit.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs7/pk7_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs7/pk7_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs7/pk7_mime.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs7/pk7_smime.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs7/pkcs7.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pkcs7/pkcs7err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ppc_arch.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ppccap.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ppccpuid.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pqueue/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pqueue/pq_test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pqueue/pqueue.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/pqueue/pqueue.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rand/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rand/md_rand.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rand/rand.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rand/rand_egd.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rand/rand_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rand/rand_lcl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rand/rand_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rand/rand_nw.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rand/rand_os2.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rand/rand_unix.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rand/rand_vms.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rand/rand_win.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rand/randfile.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rand/randtest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc2/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc2/rc2.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc2/rc2_cbc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc2/rc2_ecb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc2/rc2_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc2/rc2_skey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc2/rc2cfb64.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc2/rc2ofb64.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc2/rc2speed.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc2/rc2test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc2/rrc2.doc (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc2/tab.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc2/version (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/asm/rc4-586.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/asm/rc4-ia64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/asm/rc4-md5-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/asm/rc4-parisc.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/asm/rc4-s390x.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/asm/rc4-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/rc4.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/rc4.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/rc4_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/rc4_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/rc4_skey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/rc4_utl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/rc4s.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/rc4speed.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/rc4test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc4/rrc4.doc (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc5/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc5/asm/rc5-586.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc5/rc5.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc5/rc5_ecb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc5/rc5_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc5/rc5_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc5/rc5_skey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc5/rc5cfb64.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc5/rc5ofb64.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc5/rc5s.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc5/rc5speed.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rc5/rc5test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ripemd/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ripemd/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ripemd/asm/rips.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ripemd/asm/rmd-586.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ripemd/ripemd.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ripemd/rmd160.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ripemd/rmd_dgst.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ripemd/rmd_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ripemd/rmd_one.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ripemd/rmdconst.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ripemd/rmdtest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_ameth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_asn1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_chk.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_crpt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_depr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_eay.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_gen.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_none.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_null.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_oaep.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_pk1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_pmeth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_prn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_pss.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_saos.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_sign.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_ssl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/rsa/rsa_x931.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/s390xcap.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/s390xcpuid.S (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/seed/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/seed/seed.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/seed/seed.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/seed/seed_cbc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/seed/seed_cfb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/seed/seed_ecb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/seed/seed_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/seed/seed_ofb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha1-586.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha1-alpha.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha1-armv4-large.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha1-armv8.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha1-ia64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha1-mb-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha1-mips.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha1-parisc.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha1-ppc.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha1-s390x.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha1-sparcv9.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha1-sparcv9a.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha1-thumb.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha1-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha256-586.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha256-armv4.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha256-mb-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha512-586.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha512-armv4.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha512-armv8.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha512-ia64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha512-mips.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha512-parisc.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha512-ppc.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha512-s390x.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha512-sparcv9.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha512-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/asm/sha512p8-ppc.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/sha.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/sha.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/sha1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/sha1_one.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/sha1dgst.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/sha1test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/sha256.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/sha256t.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/sha512.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/sha512t.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/sha_dgst.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/sha_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/sha_one.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sha/shatest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sparc_arch.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sparccpuid.S (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/sparcv9cap.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/srp/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/srp/srp.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/srp/srp_grps.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/srp/srp_lcl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/srp/srp_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/srp/srp_vfy.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/srp/srptest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/stack/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/stack/safestack.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/stack/stack.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/stack/stack.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/store/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/store/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/store/store.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/store/str_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/store/str_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/store/str_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/store/str_mem.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/store/str_meth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/symhacks.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/threads/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/threads/mttest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/threads/netware.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/threads/profile.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/threads/ptest.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/threads/pthread.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/threads/pthread2.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/threads/pthreads-vms.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/threads/purify.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/threads/solaris.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/threads/th-lock.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/threads/win32.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ts/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ts/ts.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ts/ts_asn1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ts/ts_conf.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ts/ts_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ts/ts_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ts/ts_req_print.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ts/ts_req_utils.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ts/ts_rsp_print.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ts/ts_rsp_sign.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ts/ts_rsp_utils.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ts/ts_rsp_verify.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ts/ts_verify_ctx.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/txt_db/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/txt_db/txt_db.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/txt_db/txt_db.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ui/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ui/ui.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ui/ui_compat.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ui/ui_compat.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ui/ui_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ui/ui_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ui/ui_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ui/ui_openssl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/ui/ui_util.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/uid.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/vms_rms.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/whrlpool/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/whrlpool/asm/wp-mmx.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/whrlpool/asm/wp-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/whrlpool/whrlpool.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/whrlpool/wp_block.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/whrlpool/wp_dgst.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/whrlpool/wp_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/whrlpool/wp_test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/by_dir.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/by_file.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/verify_extra_test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/vpm_int.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_att.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_cmp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_d2.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_def.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_ext.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_lu.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_obj.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_r2x.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_req.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_set.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_trs.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_txt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_v3.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_vfy.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_vfy.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509_vpm.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509cset.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509name.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509rset.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509spki.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x509type.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509/x_all.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/ext_dat.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/pcy_cache.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/pcy_data.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/pcy_int.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/pcy_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/pcy_map.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/pcy_node.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/pcy_tree.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/tabtest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_addr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_akey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_akeya.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_alt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_asid.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_bcons.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_bitst.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_conf.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_cpols.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_crld.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_enum.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_extku.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_genn.c (99%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_ia5.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_info.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_int.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_ncons.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_ocsp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_pci.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_pcia.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_pcons.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_pku.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_pmaps.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_prn.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_purp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_scts.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_skey.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_sxnet.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3_utl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3conf.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3nametest.c (99%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/v3prin.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x509v3/x509v3.h (99%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x86_64cpuid.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/crypto/x86cpuid.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/asn1/README.ASN1 (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/asn1/ocsp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/b64.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/b64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/bio/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/bio/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/bio/accept.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/bio/client-arg.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/bio/client-conf.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/bio/connect.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/bio/saccept.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/bio/sconnect.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/bio/server-arg.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/bio/server-conf.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/bio/server.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/cacert.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/cakey.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/cms_comp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/cms_ddec.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/cms_dec.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/cms_denc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/cms_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/cms_sign.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/cms_sign2.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/cms_uncomp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/cms_ver.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/comp.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/encr.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/sign.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/signer.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/cms/signer2.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/easy_tls/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/easy_tls/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/easy_tls/cacerts.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/easy_tls/cert.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/easy_tls/easy-tls.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/easy_tls/easy-tls.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/easy_tls/test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/easy_tls/test.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/cluster_labs/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/cluster_labs/cluster_labs.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/cluster_labs/hw_cluster_labs.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/cluster_labs/hw_cluster_labs.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/cluster_labs/hw_cluster_labs_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/cluster_labs/hw_cluster_labs_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/ibmca/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/ibmca/hw_ibmca.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/ibmca/hw_ibmca.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/ibmca/hw_ibmca_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/ibmca/hw_ibmca_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/ibmca/ica_openssl_api.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/rsaref/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/rsaref/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/rsaref/build.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/rsaref/rsaref.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/rsaref/rsaref.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/rsaref/rsaref_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/rsaref/rsaref_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/zencod/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/zencod/hw_zencod.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/zencod/hw_zencod.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/zencod/hw_zencod.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/zencod/hw_zencod_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/engines/zencod/hw_zencod_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/pkcs12/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/pkcs12/pkread.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/pkcs12/pkwrite.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/prime/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/prime/prime.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/privkey.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/selfsign.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/sign/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/sign/cert.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/sign/key.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/sign/sig.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/sign/sign.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/sign/sign.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/smime/cacert.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/smime/cakey.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/smime/encr.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/smime/sign.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/smime/signer.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/smime/signer2.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/smime/smdec.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/smime/smenc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/smime/smsign.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/smime/smsign2.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/smime/smver.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/spkigen.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/ssl/cli.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/ssl/inetdsrv.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/ssl/serv.cpp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/ssltest-ecc/ECC-RSAcertgen.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/ssltest-ecc/ECCcertgen.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/ssltest-ecc/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/ssltest-ecc/RSAcertgen.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/ssltest-ecc/ssltest.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/state_machine/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/state_machine/state_machine.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/A-client.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/A-server.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/CA.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/INSTALL (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/Makefile.am (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/autogunk.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/autoungunk.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/breakage.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/buffer.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/cb.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/configure.in (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/ip.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/sm.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/test.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/tunala.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/tunala/tunala.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/x509/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/x509/mkcert.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/demos/x509/mkreq.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/HOWTO/certificates.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/HOWTO/keys.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/HOWTO/proxy_certificates.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/CA.pl.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/asn1parse.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/c_rehash.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/ca.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/ciphers.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/cms.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/config.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/crl.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/crl2pkcs7.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/dgst.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/dhparam.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/dsa.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/dsaparam.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/ec.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/ecparam.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/enc.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/errstr.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/gendsa.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/genpkey.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/genrsa.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/nseq.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/ocsp.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/openssl.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/passwd.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/pkcs12.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/pkcs7.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/pkcs8.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/pkey.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/pkeyparam.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/pkeyutl.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/rand.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/req.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/rsa.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/rsautl.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/s_client.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/s_server.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/s_time.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/sess_id.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/smime.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/speed.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/spkac.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/ts.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/tsget.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/verify.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/version.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/x509.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/apps/x509v3_config.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/c-indentation.el (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ASN1_OBJECT_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ASN1_STRING_length.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ASN1_STRING_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ASN1_STRING_print_ex.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ASN1_TIME_set.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ASN1_generate_nconf.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_ctrl.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_f_base64.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_f_buffer.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_f_cipher.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_f_md.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_f_null.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_f_ssl.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_find_type.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_new_CMS.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_push.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_read.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_s_accept.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_s_bio.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_s_connect.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_s_fd.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_s_file.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_s_mem.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_s_null.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_s_socket.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_set_callback.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BIO_should_retry.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_BLINDING_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_CTX_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_CTX_start.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_add.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_add_word.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_bn2bin.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_cmp.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_copy.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_generate_prime.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_mod_inverse.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_mod_mul_montgomery.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_mod_mul_reciprocal.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_num_bytes.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_rand.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_set_bit.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_swap.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/BN_zero.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_add0_cert.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_add1_recipient_cert.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_add1_signer.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_compress.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_decrypt.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_encrypt.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_final.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_get0_RecipientInfos.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_get0_SignerInfos.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_get0_type.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_get1_ReceiptRequest.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_sign.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_sign_receipt.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_uncompress.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_verify.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CMS_verify_receipt.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CONF_modules_free.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CONF_modules_load_file.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/CRYPTO_set_ex_data.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DH_generate_key.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DH_generate_parameters.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DH_get_ex_new_index.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DH_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DH_set_method.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DH_size.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DSA_SIG_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DSA_do_sign.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DSA_dup_DH.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DSA_generate_key.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DSA_generate_parameters.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DSA_get_ex_new_index.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DSA_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DSA_set_method.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DSA_sign.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/DSA_size.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EC_GFp_simple_method.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EC_GROUP_copy.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EC_GROUP_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EC_KEY_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EC_POINT_add.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EC_POINT_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ERR_GET_LIB.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ERR_clear_error.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ERR_error_string.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ERR_get_error.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ERR_load_crypto_strings.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ERR_load_strings.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ERR_print_errors.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ERR_put_error.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ERR_remove_state.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ERR_set_mark.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_BytesToKey.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_DigestInit.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_DigestSignInit.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_DigestVerifyInit.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_EncodeInit.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_EncryptInit.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_OpenInit.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_PKEY_CTX_ctrl.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_PKEY_CTX_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_PKEY_cmp.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_PKEY_decrypt.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_PKEY_derive.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_PKEY_encrypt.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_PKEY_get_default_digest.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_PKEY_keygen.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_PKEY_meth_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_PKEY_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_PKEY_print_private.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_PKEY_set1_RSA.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_PKEY_sign.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_PKEY_verify.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_PKEY_verify_recover.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_SealInit.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_SignInit.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/EVP_VerifyInit.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/OBJ_nid2obj.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/OPENSSL_Applink.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/OPENSSL_VERSION_NUMBER.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/OPENSSL_config.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/OPENSSL_ia32cap.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/OPENSSL_instrument_bus.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/OPENSSL_load_builtin_modules.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/OpenSSL_add_all_algorithms.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/PEM_write_bio_CMS_stream.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/PEM_write_bio_PKCS7_stream.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/PKCS12_create.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/PKCS12_parse.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/PKCS7_decrypt.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/PKCS7_encrypt.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/PKCS7_sign.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/PKCS7_sign_add_signer.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/PKCS7_verify.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RAND_add.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RAND_bytes.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RAND_cleanup.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RAND_egd.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RAND_load_file.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RAND_set_rand_method.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RSA_blinding_on.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RSA_check_key.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RSA_generate_key.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RSA_get_ex_new_index.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RSA_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RSA_padding_add_PKCS1_type_1.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RSA_print.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RSA_private_encrypt.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RSA_public_encrypt.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RSA_set_method.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RSA_sign.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RSA_sign_ASN1_OCTET_STRING.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/RSA_size.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/SMIME_read_CMS.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/SMIME_read_PKCS7.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/SMIME_write_CMS.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/SMIME_write_PKCS7.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/SSLeay_version.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/X509_NAME_ENTRY_get_object.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/X509_NAME_add_entry_by_txt.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/X509_NAME_get_index_by_NID.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/X509_NAME_print_ex.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/X509_STORE_CTX_get_error.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/X509_STORE_CTX_get_ex_new_index.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/X509_STORE_CTX_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/X509_STORE_CTX_set_verify_cb.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/X509_STORE_set_verify_cb_func.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/X509_VERIFY_PARAM_set_flags.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/X509_check_host.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/X509_check_private_key.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/X509_cmp_time.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/X509_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/X509_verify_cert.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/bio.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/blowfish.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/bn.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/bn_internal.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/buffer.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/crypto.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/d2i_ASN1_OBJECT.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/d2i_CMS_ContentInfo.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/d2i_DHparams.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/d2i_DSAPublicKey.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/d2i_ECPKParameters.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/d2i_ECPrivateKey.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/d2i_PKCS8PrivateKey.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/d2i_PrivateKey.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/d2i_RSAPublicKey.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/d2i_X509.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/d2i_X509_ALGOR.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/d2i_X509_CRL.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/d2i_X509_NAME.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/d2i_X509_REQ.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/d2i_X509_SIG.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/des.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/des_modes.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/dh.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/dsa.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ec.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ecdsa.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/engine.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/err.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/evp.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/hmac.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/i2d_CMS_bio_stream.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/i2d_PKCS7_bio_stream.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/lh_stats.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/lhash.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/md5.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/mdc2.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/pem.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/rand.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/rc4.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ripemd.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/rsa.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/sha.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/threads.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ui.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/ui_compat.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/crypto/x509.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/dir-locals.example.el (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/fingerprints.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/openssl-c-indent.el (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/openssl-shared.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/openssl.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CIPHER_get_name.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_COMP_add_compression_method.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CONF_CTX_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CONF_CTX_set1_prefix.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CONF_CTX_set_flags.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CONF_CTX_set_ssl_ctx.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CONF_cmd.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CONF_cmd_argv.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_add1_chain_cert.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_add_extra_chain_cert.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_add_session.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_ctrl.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_flush_sessions.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_free.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_get0_param.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_get_ex_new_index.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_get_verify_mode.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_load_verify_locations.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_sess_number.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_sess_set_cache_size.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_sess_set_get_cb.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_sessions.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set1_curves.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set1_verify_cert_store.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_alpn_select_cb.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_cert_cb.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_cert_store.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_cert_verify_callback.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_cipher_list.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_client_CA_list.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_client_cert_cb.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_custom_cli_ext.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_default_passwd_cb.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_generate_session_id.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_info_callback.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_max_cert_list.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_mode.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_msg_callback.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_options.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_psk_client_callback.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_quiet_shutdown.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_read_ahead.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_session_cache_mode.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_session_id_context.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_ssl_version.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_timeout.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_tlsext_servername_callback.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_tlsext_status_cb.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_tlsext_ticket_key_cb.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_tmp_dh_callback.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_tmp_rsa_callback.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_set_verify.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_use_certificate.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_use_psk_identity_hint.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_CTX_use_serverinfo.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_SESSION_free.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_SESSION_get_ex_new_index.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_SESSION_get_time.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_accept.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_alert_type_string.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_check_chain.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_clear.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_connect.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_do_handshake.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_export_keying_material.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_free.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_SSL_CTX.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_ciphers.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_client_CA_list.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_current_cipher.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_default_timeout.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_error.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_ex_data_X509_STORE_CTX_idx.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_ex_new_index.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_fd.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_peer_cert_chain.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_peer_certificate.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_psk_identity.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_rbio.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_session.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_verify_result.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_get_version.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_library_init.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_load_client_CA_file.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_new.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_pending.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_read.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_rstate_string.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_session_reused.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_set_bio.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_set_connect_state.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_set_fd.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_set_session.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_set_shutdown.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_set_verify_result.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_shutdown.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_state_string.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_want.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/SSL_write.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/d2i_SSL_SESSION.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssl/ssl.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/ssleay.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/doc/standards.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/e_os.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/e_os2.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/alpha.opt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/axp.opt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/capierr.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/README.gost (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/e_gost_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/e_gost_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/e_gost_err.proto (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost2001.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost2001_keyx.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost2001_keyx.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost89.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost89.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost94_keyx.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost_ameth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost_asn1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost_crypt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost_ctl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost_eng.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost_keywrap.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost_keywrap.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost_lcl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost_md.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost_params.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost_params.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost_pmeth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gost_sign.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gosthash.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gosthash.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ccgost/gostsum.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_4758cca.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_4758cca.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_4758cca_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_4758cca_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_aep.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_aep.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_aep_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_aep_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_atalla.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_atalla.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_atalla_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_atalla_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_capi.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_capi.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_capi_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_capi_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_chil.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_chil.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_chil_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_chil_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_cswift.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_cswift.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_cswift_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_cswift_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_gmp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_gmp.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_gmp_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_gmp_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_nuron.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_nuron.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_nuron_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_nuron_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_padlock.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_padlock.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_sureware.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_sureware.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_sureware_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_sureware_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_ubsec.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_ubsec.ec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_ubsec_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/e_ubsec_err.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/engine_vector.mar (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/ia64.opt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/makeengines.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/vax.opt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/vendor_defns/aep.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/vendor_defns/atalla.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/vendor_defns/cswift.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/vendor_defns/hw_4758_cca.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/vendor_defns/hw_ubsec.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/vendor_defns/hwcryptohook.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/engines/vendor_defns/sureware.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/install.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/makevms.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/.rnd (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/32all.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/applink.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/bcb4.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/certCA.srl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/certCA.ss (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/certU.ss (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/cmp.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/do_ms.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/do_nasm.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/do_nt.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/do_win64a.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/do_win64i.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/keyCA.ss (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/keyU.ss (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/mingw32.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/mw.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/req2CA.ss (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/reqCA.ss (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/reqU.ss (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/speed32.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/tenc.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/tencce.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/test.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/testce.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/testce2.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/testenc.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/testencce.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/testpem.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/testpemce.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/testss.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/testssce.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/tlhelp32.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/tpem.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/tpemce.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/uplink-common.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/uplink-ia64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/uplink-x86.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/uplink-x86_64.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/uplink.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/uplink.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/uplink.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ms/x86asm.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/openssl.doxy (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/openssl.spec (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/os2/OS2-EMX.cmd (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/os2/backwardify.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/shlib/Makefile.hpux10-cc (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/shlib/README (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/shlib/hpux10-cc.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/shlib/irix.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/shlib/sco5-shared-gcc.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/shlib/sco5-shared-installed (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/shlib/sco5-shared.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/shlib/solaris-sc4.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/shlib/solaris.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/shlib/sun.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/shlib/svr5-shared-gcc.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/shlib/svr5-shared-installed (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/shlib/svr5-shared.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/shlib/win32.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/shlib/win32dll.bat (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/bad_dtls_test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/bio_ssl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/clienthellotest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/d1_both.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/d1_clnt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/d1_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/d1_meth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/d1_pkt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/d1_srtp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/d1_srvr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/dtls1.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/dtlstest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/fatalerrtest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/heartbeat_test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/install-ssl.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/kssl.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/kssl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/kssl_lcl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s23_clnt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s23_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s23_meth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s23_pkt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s23_srvr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s2_clnt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s2_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s2_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s2_meth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s2_pkt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s2_srvr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s3_both.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s3_cbc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s3_clnt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s3_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s3_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s3_meth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s3_pkt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/s3_srvr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/srtp.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl-lib.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl2.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl23.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl3.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl_algs.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl_asn1.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl_cert.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl_ciph.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl_conf.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl_err.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl_err2.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl_locl.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl_rsa.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl_sess.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl_stat.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl_task.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl_txt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssl_utst.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/ssltest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/sslv2conftest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/t1_clnt.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/t1_enc.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/t1_ext.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/t1_lib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/t1_meth.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/t1_reneg.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/t1_srvr.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/t1_trce.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/tls1.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/ssl/tls_srp.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/CAss.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/CAssdh.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/CAssdsa.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/CAssrsa.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/CAtsa.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/P1ss.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/P2ss.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/Sssdsa.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/Sssrsa.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/Uss.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/VMSca-response.1 (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/VMSca-response.2 (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/asn1test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/bctest (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/bctest.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/bntest.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/certs/bad.key (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/certs/bad.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/certs/interCA.key (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/certs/interCA.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/certs/leaf.key (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/certs/leaf.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/certs/pss1.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/certs/rootCA.key (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/certs/rootCA.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/certs/roots.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/certs/subinterCA-ss.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/certs/subinterCA.key (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/certs/subinterCA.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/certs/untrusted.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/clean_test.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/cms-examples.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/cms-test.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/dummytest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/igetest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/maketests.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/methtest.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/D1.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/D1_Cert_EE.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/D2.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/D2_Cert_ICA.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/D3.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/D3_Cert_EE.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ISDOSC_D1.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ISDOSC_D2.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ISDOSC_D3.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ISIC_D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ISIC_D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ISOP_D1.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ISOP_D2.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ISOP_D3.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ISOP_ND1.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ISOP_ND2.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ISOP_ND3.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ND1.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ND1_Cert_EE.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ND2.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ND2_Cert_ICA.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ND3.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ND3_Cert_EE.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WIKH_D1.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WIKH_D2.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WIKH_D3.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WIKH_ND1.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WIKH_ND2.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WIKH_ND3.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WINH_D1.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WINH_D2.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WINH_D3.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WINH_ND1.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WINH_ND2.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WINH_ND3.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WKDOSC_D1.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WKDOSC_D2.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WKDOSC_D3.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WKIC_D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WKIC_D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WRID_D1.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WRID_D2.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WRID_D3.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WRID_ND1.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WRID_ND2.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WRID_ND3.ors (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/pkcs7-1.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/pkcs7.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/pkits-test.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/r160test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/recipes/60-test_x509_time.t (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/serverinfo.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/smcont.txt (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/smime-certs/ca.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/smime-certs/mksmime-certs.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/smime-certs/smdh.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/smime-certs/smdsa1.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/smime-certs/smdsa2.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/smime-certs/smdsa3.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/smime-certs/smdsap.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/smime-certs/smec1.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/smime-certs/smec2.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/smime-certs/smroot.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/smime-certs/smrsa1.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/smime-certs/smrsa2.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/smime-certs/smrsa3.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ssltestlib.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/ssltestlib.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/tcrl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/tcrl.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/test.cnf (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/test_padlock (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testca (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testca.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testcrl.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testenc (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testenc.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testfipsssl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testgen (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testgen.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testp7.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testreq2.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testrsa.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/tests.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testsid.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testss (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testss.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testssl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testssl.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testsslproxy (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testtsa (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testtsa.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testutil.h (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/testx509.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/times (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/tocsp (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/tocsp.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/tpkcs7 (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/tpkcs7.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/tpkcs7d (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/tpkcs7d.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/treq (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/treq.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/trsa (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/trsa.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/tsid (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/tsid.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/tverify.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/tx509 (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/tx509.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/v3-cert1.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/v3-cert2.pem (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/test/x509_time_test.c (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/tools/Makefile (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/tools/c89.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/tools/c_hash (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/tools/c_info (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/tools/c_issuer (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/tools/c_name (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/tools/c_rehash.in (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/FreeBSD.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/add_cr.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/bat.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/ck_errf.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/clean-depend.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/copy-if-different.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/copy.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/cygwin.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/deleof.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/deltree.com (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/dirname.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/do_ms.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/domd (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/err-ins.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/extract-names.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/extract-section.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/files.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/fixNT.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/indent.pro (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/install.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/libeay.num (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/mk1mf.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/mkbuildinf.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/mkcerts.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/mkdef.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/mkdir-p.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/mkerr.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/mkfiles.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/mklink.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/mkrc.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/mkstack.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/openssl-format-source (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/opensslwrap.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/perlpath.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/pl/BC-32.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/pl/Mingw32.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/pl/OS2-EMX.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/pl/VC-32.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/pl/linux.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/pl/netware.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/pl/ultrix.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/pl/unix.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/pod2man.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/pod2mantest (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/pod2mantest.pod (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/point.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/selftest.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/shlib_wrap.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/sp-diff.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/speed.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/src-dep.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/ssleay.num (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/su-filter.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/tab_num.pl (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/toutf8.sh (100%) rename src/openssl/{openssl-1.0.2v-chevah4 => openssl-1.0.2v-chevah5}/util/x86asm.sh (100%) delete mode 100644 src/openssl/openssl-1.1.1t/appveyor.yml delete mode 100644 src/openssl/openssl-1.1.1t/crypto/bn/rsa_sup_mul.c rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ACKNOWLEDGEMENTS (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/AUTHORS (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/CHANGES (99%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/CONTRIBUTING (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/00-base-templates.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/10-main.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/15-android.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/15-ios.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/50-djgpp.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/50-haiku.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/50-masm.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/50-win-onecore.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/INTERNALS.Configure (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/README (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/README.design (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/common.tmpl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/common0.tmpl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/descrip.mms.tmpl (99%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/shared-info.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/unix-Makefile.tmpl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/unix-checker.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/windows-checker.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configurations/windows-makefile.tmpl (99%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/Configure (99%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/FAQ (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/INSTALL (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/LICENSE (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/NEWS (98%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/NOTES.ANDROID (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/NOTES.DJGPP (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/NOTES.PERL (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/NOTES.UNIX (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/NOTES.VMS (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/NOTES.WIN (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/README (97%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/README.ENGINE (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/README.FIPS (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/VMS/VMSify-conf.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/VMS/engine.opt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/VMS/msg_install.com (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/VMS/msg_staging.com (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/VMS/openssl_ivp.com.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/VMS/openssl_shutdown.com.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/VMS/openssl_startup.com.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/VMS/openssl_utils.com.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/VMS/test-includes.com (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/VMS/translatesyms.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/CA.pl.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/app_rand.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/apps.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/apps.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/asn1pars.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/bf_prefix.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/ca-cert.srl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/ca-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/ca-req.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/ca.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/ciphers.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/client.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/cms.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/crl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/crl2p7.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/ct_log_list.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/demoSRP/srp_verifier.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/demoSRP/srp_verifier.txt.attr (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/dgst.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/dh1024.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/dh2048.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/dh4096.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/dhparam.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/dsa-ca.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/dsa-pca.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/dsa.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/dsa1024.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/dsa512.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/dsap.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/dsaparam.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/ec.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/ecparam.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/engine.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/errstr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/gendsa.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/genpkey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/genrsa.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/nseq.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/ocsp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/openssl-vms.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/openssl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/openssl.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/opt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/passwd.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/pca-cert.srl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/pca-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/pca-req.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/pkcs12.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/pkcs7.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/pkcs8.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/pkey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/pkeyparam.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/pkeyutl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/prime.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/privkey.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/progs.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/rand.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/rehash.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/req.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/req.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/rsa.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/rsa8192.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/rsautl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/s1024key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/s1024req.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/s512-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/s512-req.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/s_apps.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/s_cb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/s_client.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/s_server.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/s_socket.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/s_time.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/server.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/server.srl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/server2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/sess_id.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/smime.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/speed.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/spkac.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/srp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/storeutl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/testCA.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/testdsa.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/testrsa.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/timeouts.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/ts.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/tsget.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/verify.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/version.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/vms_decc_argv.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/vms_decc_init.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/vms_term_sock.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/vms_term_sock.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/win32_init.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/apps/x509.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/config (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/config.com (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/LPdir_nyi.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/LPdir_unix.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/LPdir_vms.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/LPdir_win.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/LPdir_win32.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/LPdir_wince.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/aes_cbc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/aes_cfb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/aes_core.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/aes_ecb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/aes_ige.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/aes_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/aes_misc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/aes_ofb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/aes_wrap.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/aes_x86core.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aes-armv4.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aes-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aes-ia64.S (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aes-mips.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aes-parisc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aes-ppc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aes-s390x.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aes-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aesfx-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aesni-mb-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aesni-sha1-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aesni-sha256-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aesni-x86.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aesni-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aesp8-ppc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aest4-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/aesv8-armx.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/bsaes-armv7.pl (99%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/vpaes-armv8.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/vpaes-ppc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/vpaes-x86.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/asm/vpaes-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aes/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/alphacpuid.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aria/aria.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/aria/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/arm64cpuid.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/arm_arch.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/armcap.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/armv4cpuid.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_bitstr.c (97%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_d2i_fp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_digest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_dup.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_gentm.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_i2d_fp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_int.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_mbstr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_object.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_octet.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_print.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_sign.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_strex.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_strnid.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_time.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_type.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_utctm.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_utf8.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/a_verify.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/ameth_lib.c (97%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/asn1_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/asn1_gen.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/asn1_item_list.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/asn1_item_list.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/asn1_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/asn1_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/asn1_par.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/asn_mime.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/asn_moid.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/asn_mstbl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/asn_pack.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/bio_asn1.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/bio_ndef.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/charmap.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/charmap.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/d2i_pr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/d2i_pu.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/evp_asn1.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/f_int.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/f_string.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/i2d_pr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/i2d_pu.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/n_pkey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/nsseq.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/p5_pbe.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/p5_pbev2.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/p5_scrypt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/p8_pkey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/standard_methods.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/t_bitst.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/t_pkey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/t_spki.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/tasn_dec.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/tasn_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/tasn_fre.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/tasn_new.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/tasn_prn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/tasn_scn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/tasn_typ.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/tasn_utl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/tbl_standard.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/x_algor.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/x_bignum.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/x_info.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/x_int64.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/x_long.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/x_pkey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/x_sig.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/x_spki.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/asn1/x_val.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/async/arch/async_null.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/async/arch/async_null.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/async/arch/async_posix.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/async/arch/async_posix.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/async/arch/async_win.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/async/arch/async_win.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/async/async.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/async/async_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/async/async_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/async/async_wait.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/async/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bf/asm/bf-586.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bf/bf_cfb64.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bf/bf_ecb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bf/bf_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bf/bf_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bf/bf_ofb64.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bf/bf_pi.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bf/bf_skey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bf/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/b_addr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/b_dump.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/b_print.c (99%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/b_sock.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/b_sock2.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bf_buff.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bf_lbuf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bf_nbio.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bf_null.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bio_cb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bio_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bio_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bio_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bio_meth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bss_acpt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bss_bio.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bss_conn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bss_dgram.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bss_fd.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bss_file.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bss_log.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bss_mem.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bss_null.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/bss_sock.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bio/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/blake2/blake2_impl.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/blake2/blake2_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/blake2/blake2b.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/blake2/blake2s.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/blake2/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/blake2/m_blake2b.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/blake2/m_blake2s.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/README.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/alpha-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/armv4-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/armv4-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/armv8-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/bn-586.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/bn-c64xplus.asm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/c64xplus-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/co-586.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/ia64-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/ia64.S (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/mips-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/mips.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/parisc-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/ppc-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/ppc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/ppc64-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/rsaz-avx2.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/rsaz-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/s390x-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/s390x-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/s390x.S (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/sparct4-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/sparcv8.S (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/sparcv8plus.S (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/sparcv9-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/sparcv9-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/sparcv9a-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/via-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/vis3-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/x86-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/x86-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/x86_64-gcc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/x86_64-gf2m.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/x86_64-mont.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/asm/x86_64-mont5.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_add.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_asm.c (91%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_blind.c (94%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_const.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_ctx.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_depr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_dh.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_div.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_err.c (98%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_exp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_exp2.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_gcd.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_gf2m.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_intern.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_kron.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_lib.c (97%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_local.h (96%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_mod.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_mont.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_mpi.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_mul.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_nist.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_prime.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_prime.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_prime.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_print.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_rand.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_recp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_shift.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_sqr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_sqrt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_srp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_word.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/bn_x931p.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/build.info (98%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/rsaz_exp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/bn/rsaz_exp.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/buffer/buf_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/buffer/buffer.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/buffer/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/c64xpluscpuid.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/camellia/asm/cmll-x86.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/camellia/asm/cmll-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/camellia/asm/cmllt4-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/camellia/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/camellia/camellia.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/camellia/cmll_cbc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/camellia/cmll_cfb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/camellia/cmll_ctr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/camellia/cmll_ecb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/camellia/cmll_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/camellia/cmll_misc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/camellia/cmll_ofb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cast/asm/cast-586.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cast/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cast/c_cfb64.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cast/c_ecb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cast/c_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cast/c_ofb64.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cast/c_skey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cast/cast_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cast/cast_s.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/chacha/asm/chacha-armv4.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/chacha/asm/chacha-armv8.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/chacha/asm/chacha-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/chacha/asm/chacha-ppc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/chacha/asm/chacha-s390x.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/chacha/asm/chacha-x86.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/chacha/asm/chacha-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/chacha/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/chacha/chacha_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cmac/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cmac/cm_ameth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cmac/cm_pmeth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cmac/cmac.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/cms_asn1.c (97%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/cms_att.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/cms_cd.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/cms_dd.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/cms_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/cms_env.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/cms_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/cms_ess.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/cms_io.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/cms_kari.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/cms_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/cms_local.h (99%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/cms_pwri.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/cms_sd.c (98%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cms/cms_smime.c (99%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/comp/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/comp/c_zlib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/comp/comp_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/comp/comp_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/comp/comp_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/conf/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/conf/conf_api.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/conf/conf_def.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/conf/conf_def.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/conf/conf_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/conf/conf_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/conf/conf_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/conf/conf_mall.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/conf/conf_mod.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/conf/conf_sap.c (90%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/conf/conf_ssl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/conf/keysets.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cpt_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cryptlib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ct/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ct/ct_b64.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ct/ct_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ct/ct_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ct/ct_log.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ct/ct_oct.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ct/ct_policy.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ct/ct_prn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ct/ct_sct.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ct/ct_sct_ctx.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ct/ct_vfy.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ct/ct_x509v3.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ctype.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/cversion.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/asm/crypt586.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/asm/des-586.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/asm/des_enc.m4 (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/asm/desboth.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/asm/dest4-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/cbc_cksm.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/cbc_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/cfb64ede.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/cfb64enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/cfb_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/des_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/des_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/ecb3_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/ecb_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/fcrypt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/fcrypt_b.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/ncbc_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/ofb64ede.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/ofb64enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/ofb_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/pcbc_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/qud_cksm.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/rand_key.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/set_key.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/spr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/str2key.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/des/xcbc_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh1024.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh192.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh2048.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh4096.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh512.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh_ameth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh_asn1.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh_check.c (91%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh_depr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh_err.c (97%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh_gen.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh_kdf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh_key.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh_meth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh_pmeth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh_prn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh_rfc5114.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dh/dh_rfc7919.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dllmain.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dsa/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dsa/dsa_ameth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dsa/dsa_asn1.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dsa/dsa_depr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dsa/dsa_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dsa/dsa_gen.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dsa/dsa_key.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dsa/dsa_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dsa/dsa_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dsa/dsa_meth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dsa/dsa_ossl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dsa/dsa_pmeth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dsa/dsa_prn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dsa/dsa_sign.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dsa/dsa_vrf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dso/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dso/dso_dl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dso/dso_dlfcn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dso/dso_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dso/dso_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dso/dso_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dso/dso_openssl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dso/dso_vms.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/dso/dso_win32.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ebcdic.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/asm/ecp_nistz256-armv4.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/asm/ecp_nistz256-armv8.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/asm/ecp_nistz256-ppc64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/asm/ecp_nistz256-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/asm/ecp_nistz256-x86.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/asm/ecp_nistz256-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/asm/x25519-ppc64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/asm/x25519-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/curve25519.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/curve448/arch_32/arch_intrinsics.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/curve448/arch_32/f_impl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/curve448/arch_32/f_impl.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/curve448/curve448.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/curve448/curve448_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/curve448/curve448_tables.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/curve448/curve448utils.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/curve448/ed448.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/curve448/eddsa.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/curve448/f_generic.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/curve448/field.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/curve448/point_448.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/curve448/scalar.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/curve448/word.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec2_oct.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec2_smpl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec_ameth.c (98%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec_asn1.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec_check.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec_curve.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec_cvt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec_key.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec_kmeth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec_mult.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec_oct.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec_pmeth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ec_print.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecdh_kdf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecdh_ossl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecdsa_ossl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecdsa_sign.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecdsa_vrf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/eck_prn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecp_mont.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecp_nist.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecp_nistp224.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecp_nistp256.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecp_nistp521.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecp_nistputil.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecp_nistz256.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecp_nistz256_table.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecp_oct.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecp_smpl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ec/ecx_meth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/README (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/eng_all.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/eng_cnf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/eng_ctrl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/eng_devcrypto.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/eng_dyn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/eng_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/eng_fat.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/eng_init.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/eng_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/eng_list.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/eng_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/eng_openssl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/eng_pkey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/eng_rdrand.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/eng_table.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/tb_asnmth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/tb_cipher.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/tb_dh.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/tb_digest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/tb_dsa.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/tb_eckey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/tb_pkmeth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/tb_rand.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/engine/tb_rsa.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/err/README (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/err/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/err/err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/err/err_all.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/err/err_prn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/err/openssl.ec (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/err/openssl.txt (99%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/bio_b64.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/bio_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/bio_md.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/bio_ok.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/c_allc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/c_alld.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/cmeth_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/digest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_aes.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_aes_cbc_hmac_sha1.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_aes_cbc_hmac_sha256.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_aria.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_bf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_camellia.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_cast.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_chacha20_poly1305.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_des.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_des3.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_idea.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_null.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_old.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_rc2.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_rc4.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_rc4_hmac_md5.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_rc5.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_seed.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_sm4.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/e_xcbc_d.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/encode.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/evp_cnf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/evp_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/evp_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/evp_key.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/evp_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/evp_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/evp_pbe.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/evp_pkey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/m_md2.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/m_md4.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/m_md5.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/m_md5_sha1.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/m_mdc2.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/m_null.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/m_ripemd.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/m_sha1.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/m_sha3.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/m_sigver.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/m_wp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/names.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/p5_crpt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/p5_crpt2.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/p_dec.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/p_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/p_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/p_open.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/p_seal.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/p_sign.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/p_verify.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/pbe_scrypt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/pmeth_fn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/pmeth_gn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/evp/pmeth_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ex_data.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/getenv.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/hmac/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/hmac/hm_ameth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/hmac/hm_pmeth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/hmac/hmac.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/hmac/hmac_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ia64cpuid.S (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/idea/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/idea/i_cbc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/idea/i_cfb64.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/idea/i_ecb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/idea/i_ofb64.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/idea/i_skey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/idea/idea_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/init.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/kdf/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/kdf/hkdf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/kdf/kdf_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/kdf/scrypt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/kdf/tls1_prf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/lhash/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/lhash/lh_stats.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/lhash/lhash.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/lhash/lhash_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/md2/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/md2/md2_dgst.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/md2/md2_one.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/md4/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/md4/md4_dgst.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/md4/md4_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/md4/md4_one.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/md5/asm/md5-586.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/md5/asm/md5-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/md5/asm/md5-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/md5/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/md5/md5_dgst.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/md5/md5_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/md5/md5_one.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/mdc2/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/mdc2/mdc2_one.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/mdc2/mdc2dgst.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/mem.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/mem_clr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/mem_dbg.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/mem_sec.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/mips_arch.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/asm/aesni-gcm-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/asm/ghash-alpha.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/asm/ghash-armv4.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/asm/ghash-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/asm/ghash-ia64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/asm/ghash-parisc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/asm/ghash-s390x.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/asm/ghash-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/asm/ghash-x86.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/asm/ghash-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/asm/ghashp8-ppc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/asm/ghashv8-armx.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/cbc128.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/ccm128.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/cfb128.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/ctr128.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/cts128.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/gcm128.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/modes_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/ocb128.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/ofb128.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/wrap128.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/modes/xts128.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/o_dir.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/o_fips.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/o_fopen.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/o_init.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/o_str.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/o_time.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/README (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/o_names.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/obj_dat.c (96%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/obj_dat.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/obj_dat.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/obj_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/obj_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/obj_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/obj_mac.num (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/obj_xref.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/obj_xref.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/obj_xref.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/objects.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/objects.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/objects/objxref.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ocsp/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ocsp/ocsp_asn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ocsp/ocsp_cl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ocsp/ocsp_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ocsp/ocsp_ext.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ocsp/ocsp_ht.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ocsp/ocsp_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ocsp/ocsp_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ocsp/ocsp_prn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ocsp/ocsp_srv.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ocsp/ocsp_vfy.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ocsp/v3_ocsp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pariscid.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pem/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pem/pem_all.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pem/pem_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pem/pem_info.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pem/pem_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pem/pem_oth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pem/pem_pk8.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pem/pem_pkey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pem/pem_sign.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pem/pem_x509.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pem/pem_xaux.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pem/pvkfmt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/perlasm/README (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/perlasm/arm-xlate.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/perlasm/cbc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/perlasm/ppc-xlate.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/perlasm/sparcv9_modes.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/perlasm/x86_64-xlate.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/perlasm/x86asm.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/perlasm/x86gas.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/perlasm/x86masm.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/perlasm/x86nasm.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_add.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_asn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_attr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_crpt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_crt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_decr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_init.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_key.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_kiss.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_mutl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_npas.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_p8d.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_p8e.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_sbag.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/p12_utl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs12/pk12err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs7/bio_pk7.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs7/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs7/pk7_asn1.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs7/pk7_attr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs7/pk7_doit.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs7/pk7_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs7/pk7_mime.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs7/pk7_smime.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/pkcs7/pkcs7err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/asm/poly1305-armv4.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/asm/poly1305-armv8.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/asm/poly1305-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/asm/poly1305-mips.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/asm/poly1305-ppc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/asm/poly1305-ppcfp.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/asm/poly1305-s390x.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/asm/poly1305-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/asm/poly1305-x86.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/asm/poly1305-x86_64.pl (99%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/poly1305.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/poly1305_ameth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/poly1305_base2_44.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/poly1305_ieee754.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/poly1305_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/poly1305/poly1305_pmeth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ppc_arch.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ppccap.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ppccpuid.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rand/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rand/drbg_ctr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rand/drbg_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rand/rand_egd.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rand/rand_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rand/rand_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rand/rand_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rand/rand_unix.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rand/rand_vms.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rand/rand_win.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rand/randfile.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc2/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc2/rc2_cbc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc2/rc2_ecb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc2/rc2_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc2/rc2_skey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc2/rc2cfb64.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc2/rc2ofb64.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc4/asm/rc4-586.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc4/asm/rc4-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc4/asm/rc4-md5-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc4/asm/rc4-parisc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc4/asm/rc4-s390x.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc4/asm/rc4-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc4/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc4/rc4_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc4/rc4_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc4/rc4_skey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc5/asm/rc5-586.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc5/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc5/rc5_ecb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc5/rc5_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc5/rc5_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc5/rc5_skey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc5/rc5cfb64.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rc5/rc5ofb64.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ripemd/asm/rmd-586.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ripemd/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ripemd/rmd_dgst.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ripemd/rmd_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ripemd/rmd_one.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ripemd/rmdconst.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_ameth.c (99%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_asn1.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_chk.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_crpt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_depr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_gen.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_meth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_mp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_none.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_oaep.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_ossl.c (97%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_pk1.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_pmeth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_prn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_pss.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_saos.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_sign.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_ssl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_x931.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/rsa/rsa_x931g.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/s390x_arch.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/s390xcap.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/s390xcpuid.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/seed/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/seed/seed.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/seed/seed_cbc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/seed/seed_cfb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/seed/seed_ecb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/seed/seed_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/seed/seed_ofb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/keccak1600-armv4.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/keccak1600-armv8.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/keccak1600-avx2.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/keccak1600-avx512.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/keccak1600-avx512vl.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/keccak1600-c64x.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/keccak1600-mmx.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/keccak1600-ppc64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/keccak1600-s390x.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/keccak1600-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/keccak1600p8-ppc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha1-586.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha1-alpha.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha1-armv4-large.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha1-armv8.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha1-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha1-ia64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha1-mb-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha1-mips.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha1-parisc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha1-ppc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha1-s390x.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha1-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha1-sparcv9a.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha1-thumb.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha1-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha256-586.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha256-armv4.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha256-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha256-mb-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha512-586.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha512-armv4.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha512-armv8.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha512-c64xplus.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha512-ia64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha512-mips.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha512-parisc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha512-ppc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha512-s390x.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha512-sparcv9.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha512-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/asm/sha512p8-ppc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/keccak1600.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/sha1_one.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/sha1dgst.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/sha256.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/sha512.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sha/sha_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/siphash/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/siphash/siphash.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/siphash/siphash_ameth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/siphash/siphash_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/siphash/siphash_pmeth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sm2/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sm2/sm2_crypt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sm2/sm2_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sm2/sm2_pmeth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sm2/sm2_sign.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sm3/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sm3/m_sm3.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sm3/sm3.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sm3/sm3_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sm4/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sm4/sm4.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sparc_arch.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sparccpuid.S (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/sparcv9cap.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/srp/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/srp/srp_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/srp/srp_vfy.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/stack/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/stack/stack.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/store/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/store/loader_file.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/store/store_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/store/store_init.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/store/store_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/store/store_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/store/store_register.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/store/store_strings.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/threads_none.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/threads_pthread.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/threads_win.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ts/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ts/ts_asn1.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ts/ts_conf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ts/ts_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ts/ts_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ts/ts_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ts/ts_req_print.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ts/ts_req_utils.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ts/ts_rsp_print.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ts/ts_rsp_sign.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ts/ts_rsp_utils.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ts/ts_rsp_verify.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ts/ts_verify_ctx.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/txt_db/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/txt_db/txt_db.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ui/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ui/ui_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ui/ui_lib.c (99%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ui/ui_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ui/ui_null.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ui/ui_openssl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/ui/ui_util.c (97%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/uid.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/vms_rms.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/whrlpool/asm/wp-mmx.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/whrlpool/asm/wp-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/whrlpool/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/whrlpool/wp_block.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/whrlpool/wp_dgst.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/whrlpool/wp_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/by_dir.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/by_file.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/t_crl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/t_req.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/t_x509.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_att.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_cmp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_d2.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_def.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_ext.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_lu.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_meth.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_obj.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_r2x.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_req.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_set.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_trs.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_txt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_v3.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_vfy.c (99%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509_vpm.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509cset.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509name.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509rset.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509spki.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x509type.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x_all.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x_attrib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x_crl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x_exten.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x_name.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x_pubkey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x_req.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x_x509.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509/x_x509a.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/ext_dat.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/pcy_cache.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/pcy_data.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/pcy_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/pcy_local.h (94%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/pcy_map.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/pcy_node.c (85%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/pcy_tree.c (93%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/standard_exts.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_addr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_admis.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_admis.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_akey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_akeya.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_alt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_asid.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_bcons.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_bitst.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_conf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_cpols.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_crld.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_enum.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_extku.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_genn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_ia5.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_info.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_int.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_ncons.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_pci.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_pcia.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_pcons.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_pku.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_pmaps.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_prn.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_purp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_skey.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_sxnet.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_tlsf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3_utl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x509v3/v3err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x86_64cpuid.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/crypto/x86cpuid.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/README (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/Makefile (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/README (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/accept.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/client-arg.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/client-conf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/cmod.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/connect.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/descrip.mms (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/intca.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/saccept.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/sconnect.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/server-arg.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/server-cmod.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/server-conf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/server-ec.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/server.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/shared.opt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/bio/static.opt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/certs/README (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/certs/apps/apps.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/certs/apps/ckey.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/certs/apps/intkey.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/certs/apps/mkacerts.sh (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/certs/apps/mkxcerts.sh (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/certs/apps/rootkey.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/certs/apps/skey.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/certs/apps/skey2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/certs/ca.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/certs/mkcerts.sh (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/certs/ocspquery.sh (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/certs/ocsprun.sh (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/cacert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/cakey.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/cms_comp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/cms_ddec.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/cms_dec.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/cms_denc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/cms_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/cms_sign.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/cms_sign2.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/cms_uncomp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/cms_ver.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/comp.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/encr.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/sign.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/signer.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/cms/signer2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/engines/e_chil.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/evp/Makefile (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/evp/aesccm.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/evp/aesgcm.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/pkcs12/pkread.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/pkcs12/pkwrite.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/smime/cacert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/smime/cakey.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/smime/encr.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/smime/sign.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/smime/signer.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/smime/signer2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/smime/smdec.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/smime/smenc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/smime/smsign.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/smime/smsign2.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/demos/smime/smver.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/HOWTO/certificates.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/HOWTO/keys.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/README (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/dir-locals.example.el (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/fingerprints.txt (86%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/CA.pl.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/asn1parse.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/ca.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/ciphers.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/cms.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/crl.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/crl2pkcs7.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/dgst.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/dhparam.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/dsa.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/dsaparam.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/ec.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/ecparam.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/enc.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/engine.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/errstr.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/gendsa.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/genpkey.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/genrsa.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/list.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/nseq.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/ocsp.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/openssl.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/passwd.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/pkcs12.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/pkcs7.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/pkcs8.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/pkey.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/pkeyparam.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/pkeyutl.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/prime.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/rand.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/rehash.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/req.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/rsa.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/rsautl.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/s_client.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/s_server.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/s_time.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/sess_id.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/smime.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/speed.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/spkac.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/srp.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/storeutl.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/ts.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/tsget.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/verify.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/version.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man1/x509.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ADMISSIONS.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ASN1_INTEGER_get_int64.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ASN1_ITEM_lookup.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ASN1_OBJECT_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ASN1_STRING_TABLE_add.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ASN1_STRING_length.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ASN1_STRING_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ASN1_STRING_print_ex.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ASN1_TIME_set.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ASN1_TYPE_get.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ASN1_generate_nconf.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ASYNC_WAIT_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ASYNC_start_job.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BF_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_ADDR.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_ADDRINFO.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_connect.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_ctrl.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_f_base64.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_f_buffer.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_f_cipher.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_f_md.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_f_null.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_f_ssl.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_find_type.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_get_data.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_get_ex_new_index.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_new_CMS.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_parse_hostserv.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_printf.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_push.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_read.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_s_accept.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_s_bio.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_s_connect.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_s_fd.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_s_file.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_s_mem.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_s_null.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_s_socket.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_set_callback.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BIO_should_retry.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_BLINDING_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_CTX_start.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_add.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_add_word.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_bn2bin.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_cmp.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_copy.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_generate_prime.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_mod_inverse.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_mod_mul_montgomery.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_mod_mul_reciprocal.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_num_bytes.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_rand.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_security_bits.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_set_bit.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_swap.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BN_zero.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/BUF_MEM_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_add0_cert.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_add1_recipient_cert.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_add1_signer.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_compress.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_decrypt.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_final.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_get0_RecipientInfos.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_get0_SignerInfos.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_get0_type.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_get1_ReceiptRequest.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_sign.pod (97%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_sign_receipt.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_uncompress.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_verify.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CMS_verify_receipt.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CONF_modules_free.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CONF_modules_load_file.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CRYPTO_THREAD_run_once.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CRYPTO_get_ex_new_index.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CRYPTO_memcmp.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CTLOG_STORE_get0_log_by_id.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CTLOG_STORE_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CTLOG_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/CT_POLICY_EVAL_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DEFINE_STACK_OF.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DES_random_key.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DH_generate_key.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DH_generate_parameters.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DH_get0_pqg.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DH_get_1024_160.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DH_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DH_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DH_new_by_nid.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DH_set_method.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DH_size.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DSA_SIG_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DSA_do_sign.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DSA_dup_DH.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DSA_generate_key.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DSA_generate_parameters.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DSA_get0_pqg.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DSA_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DSA_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DSA_set_method.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DSA_sign.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DSA_size.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DTLS_get_data_mtu.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DTLS_set_timer_cb.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/DTLSv1_listen.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ECDSA_SIG_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ECPKParameters_print.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EC_GFp_simple_method.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EC_GROUP_copy.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EC_GROUP_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EC_KEY_get_enc_flags.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EC_KEY_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EC_POINT_add.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EC_POINT_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ENGINE_add.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ERR_GET_LIB.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ERR_clear_error.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ERR_error_string.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ERR_get_error.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ERR_load_crypto_strings.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ERR_load_strings.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ERR_print_errors.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ERR_put_error.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ERR_remove_state.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/ERR_set_mark.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_BytesToKey.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_CIPHER_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_DigestInit.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_DigestSignInit.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_DigestVerifyInit.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_EncodeInit.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_EncryptInit.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_MD_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_OpenInit.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_ASN1_METHOD.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_CTX_ctrl.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_asn1_get_count.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_cmp.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_decrypt.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_derive.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_get_default_digest_nid.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_keygen.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_meth_get_count.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_print_private.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_set1_RSA.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_sign.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_size.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_verify.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_PKEY_verify_recover.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_SealInit.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_SignInit.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_VerifyInit.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_aes.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_aria.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_bf_cbc.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_blake2b512.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_camellia.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_cast5_cbc.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_chacha20.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_des.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_desx_cbc.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_idea_cbc.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_md2.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_md4.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_md5.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_mdc2.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_rc2_cbc.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_rc4.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_rc5_32_12_16_cbc.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_ripemd160.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_seed_cbc.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_sha1.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_sha224.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_sha3_224.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_sm3.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_sm4_cbc.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/EVP_whirlpool.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/HMAC.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/MD5.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/MDC2_Init.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OBJ_nid2obj.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OCSP_REQUEST_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OCSP_cert_to_id.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OCSP_request_add1_nonce.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OCSP_resp_find_status.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OCSP_response_status.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OCSP_sendreq_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OPENSSL_Applink.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OPENSSL_LH_COMPFUNC.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OPENSSL_LH_stats.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OPENSSL_VERSION_NUMBER.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OPENSSL_config.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OPENSSL_fork_prepare.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OPENSSL_ia32cap.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OPENSSL_init_crypto.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OPENSSL_init_ssl.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OPENSSL_instrument_bus.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OPENSSL_load_builtin_modules.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OPENSSL_malloc.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OPENSSL_secure_malloc.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OSSL_STORE_INFO.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OSSL_STORE_LOADER.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OSSL_STORE_SEARCH.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OSSL_STORE_expect.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OSSL_STORE_open.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/OpenSSL_add_all_algorithms.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PEM_bytes_read_bio.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PEM_read.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PEM_read_CMS.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PEM_read_bio_PrivateKey.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PEM_read_bio_ex.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PEM_write_bio_CMS_stream.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PEM_write_bio_PKCS7_stream.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PKCS12_create.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PKCS12_newpass.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PKCS12_parse.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PKCS5_PBKDF2_HMAC.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PKCS7_decrypt.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PKCS7_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PKCS7_sign.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PKCS7_sign_add_signer.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/PKCS7_verify.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RAND_DRBG_generate.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RAND_DRBG_get0_master.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RAND_DRBG_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RAND_DRBG_reseed.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RAND_DRBG_set_callbacks.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RAND_DRBG_set_ex_data.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RAND_add.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RAND_bytes.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RAND_cleanup.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RAND_egd.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RAND_load_file.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RAND_set_rand_method.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RC4_set_key.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RIPEMD160_Init.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RSA_blinding_on.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RSA_check_key.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RSA_generate_key.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RSA_get0_key.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RSA_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RSA_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RSA_padding_add_PKCS1_type_1.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RSA_print.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RSA_private_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RSA_public_encrypt.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RSA_set_method.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RSA_sign.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/RSA_size.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SCT_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SCT_print.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SCT_validate.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SHA256_Init.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SMIME_read_CMS.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SMIME_read_PKCS7.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SMIME_write_CMS.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SMIME_write_PKCS7.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CIPHER_get_name.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_COMP_add_compression_method.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CONF_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CONF_CTX_set1_prefix.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CONF_CTX_set_flags.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CONF_cmd.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CONF_cmd_argv.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_add1_chain_cert.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_add_extra_chain_cert.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_add_session.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_config.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_ctrl.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_dane_enable.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_flush_sessions.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_free.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_get0_param.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_get_verify_mode.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_has_client_custom_ext.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_load_verify_locations.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_sess_number.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_sess_set_cache_size.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_sess_set_get_cb.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_sessions.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set0_CA_list.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set1_curves.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set1_sigalgs.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set1_verify_cert_store.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_alpn_select_cb.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_cert_cb.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_cert_store.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_cert_verify_callback.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_cipher_list.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_client_cert_cb.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_client_hello_cb.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_ct_validation_callback.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_ctlog_list_file.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_default_passwd_cb.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_ex_data.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_generate_session_id.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_info_callback.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_keylog_callback.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_max_cert_list.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_min_proto_version.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_mode.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_msg_callback.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_num_tickets.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_options.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_psk_client_callback.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_quiet_shutdown.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_read_ahead.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_record_padding_callback.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_security_level.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_session_cache_mode.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_session_id_context.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_session_ticket_cb.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_split_send_fragment.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_ssl_version.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_stateless_cookie_generate_cb.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_timeout.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_tlsext_status_cb.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_tmp_dh_callback.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_set_verify.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_use_certificate.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_use_psk_identity_hint.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_CTX_use_serverinfo.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_SESSION_free.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_SESSION_get0_cipher.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_SESSION_get0_hostname.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_SESSION_get0_id_context.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_SESSION_get0_peer.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_SESSION_get_compress_id.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_SESSION_get_ex_data.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_SESSION_get_protocol_version.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_SESSION_get_time.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_SESSION_has_ticket.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_SESSION_is_resumable.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_SESSION_print.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_SESSION_set1_id.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_accept.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_alert_type_string.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_alloc_buffers.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_check_chain.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_clear.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_connect.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_do_handshake.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_export_keying_material.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_extension_supported.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_free.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get0_peer_scts.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_SSL_CTX.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_all_async_fds.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_ciphers.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_client_random.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_current_cipher.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_default_timeout.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_error.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_extms_support.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_fd.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_peer_cert_chain.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_peer_certificate.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_peer_signature_nid.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_peer_tmp_key.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_psk_identity.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_rbio.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_session.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_shared_sigalgs.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_verify_result.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_get_version.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_in_init.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_key_update.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_library_init.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_load_client_CA_file.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_pending.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_read.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_read_early_data.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_rstate_string.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_session_reused.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_set1_host.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_set_bio.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_set_connect_state.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_set_fd.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_set_session.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_set_shutdown.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_set_verify_result.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_shutdown.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_state_string.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_want.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/SSL_write.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/UI_STRING.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/UI_UTIL_read_pw.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/UI_create_method.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/UI_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509V3_get_d2i.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_ALGOR_dup.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_CRL_get0_by_serial.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_EXTENSION_set_object.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_LOOKUP.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_LOOKUP_hash_dir.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_LOOKUP_meth_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_NAME_ENTRY_get_object.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_NAME_add_entry_by_txt.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_NAME_get0_der.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_NAME_get_index_by_NID.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_NAME_print_ex.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_PUBKEY_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_SIG_get0.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_STORE_CTX_get_error.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_STORE_CTX_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_STORE_CTX_set_verify_cb.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_STORE_add_cert.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_STORE_get0_param.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_STORE_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_STORE_set_verify_cb_func.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_VERIFY_PARAM_set_flags.pod (97%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_check_ca.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_check_host.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_check_issued.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_check_private_key.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_check_purpose.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_cmp.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_cmp_time.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_digest.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_dup.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_get0_notBefore.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_get0_signature.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_get0_uids.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_get_extension_flags.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_get_pubkey.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_get_serialNumber.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_get_subject_name.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_get_version.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_new.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_sign.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509_verify_cert.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/X509v3_get_ext_by_NID.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/d2i_DHparams.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/d2i_PKCS8PrivateKey_bio.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/d2i_PrivateKey.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/d2i_SSL_SESSION.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/d2i_X509.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/i2d_CMS_bio_stream.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/i2d_PKCS7_bio_stream.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/i2d_re_X509_tbs.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man3/o2i_SCT_LIST.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man5/config.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man5/x509v3_config.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/Ed25519.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/RAND.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/RAND_DRBG.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/RSA-PSS.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/SM2.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/X25519.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/bio.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/crypto.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/ct.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/des_modes.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/evp.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/ossl_store-file.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/ossl_store.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/passphrase-encoding.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/proxy-certificates.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/scrypt.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/ssl.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/man7/x509.pod (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/doc/openssl-c-indent.el (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/e_os.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/asm/e_padlock-x86.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/asm/e_padlock-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_afalg.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_afalg.ec (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_afalg.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_afalg.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_afalg_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_afalg_err.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_capi.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_capi.ec (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_capi.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_capi_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_capi_err.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_dasync.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_dasync.ec (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_dasync.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_dasync_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_dasync_err.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_ossltest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_ossltest.ec (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_ossltest.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_ossltest_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_ossltest_err.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/engines/e_padlock.c (97%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Downloaded.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/Artistic (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/COPYING (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/INSTALL (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/MANIFEST (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/META.json (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/META.yml (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/Makefile.PL (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/README (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/lib/Text/Template.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/lib/Text/Template/Preprocess.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/t/00-version.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/t/01-basic.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/t/02-hash.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/t/03-out.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/t/04-safe.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/t/05-safe2.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/t/06-ofh.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/t/07-safe3.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/t/08-exported.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/t/09-error.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/t/10-delimiters.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/t/11-prepend.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/t/12-preprocess.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/t/13-taint.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/Text-Template-1.46/t/14-broken.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/external/perl/transfer/Text/Template.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/README.md (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/asn1.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/asn1parse.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/bignum.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/bndiv.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/client.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/cms.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/conf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/crl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/ct.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/driver.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/fuzzer.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/helper.py (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/mkfuzzoids.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/oids.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/rand.inc (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/server.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/test-corpus.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/fuzz/x509.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/__DECC_INCLUDE_EPILOGUE.H (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/__DECC_INCLUDE_PROLOGUE.H (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/aria.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/asn1.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/async.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/bn.h (92%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/bn_conf.h.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/bn_dh.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/bn_srp.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/chacha.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/cryptlib.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/ctype.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/dso_conf.h.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/ec.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/engine.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/err.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/evp.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/lhash.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/md32_common.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/objects.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/poly1305.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/rand.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/sha.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/siphash.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/sm2.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/sm2err.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/sm3.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/sm4.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/store.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/crypto/x509.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/__DECC_INCLUDE_EPILOGUE.H (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/__DECC_INCLUDE_PROLOGUE.H (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/bio.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/comp.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/conf.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/constant_time.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/cryptlib.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/dane.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/dso.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/dsoerr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/err.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/nelem.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/numbers.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/o_dir.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/o_str.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/refcount.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/sockets.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/sslconf.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/thread_once.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/internal/tsan_assist.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/__DECC_INCLUDE_EPILOGUE.H (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/__DECC_INCLUDE_PROLOGUE.H (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/aes.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/asn1.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/asn1_mac.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/asn1err.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/asn1t.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/async.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/asyncerr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/bio.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/bioerr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/blowfish.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/bn.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/bnerr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/buffer.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/buffererr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/camellia.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/cast.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/cmac.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/cms.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/cmserr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/comp.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/comperr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/conf.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/conf_api.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/conferr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/crypto.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/cryptoerr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/ct.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/cterr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/des.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/dh.h (98%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/dherr.h (96%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/dsa.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/dsaerr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/dtls1.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/e_os2.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/ebcdic.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/ec.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/ecdh.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/ecdsa.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/ecerr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/engine.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/engineerr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/err.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/evp.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/evperr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/hmac.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/idea.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/kdf.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/kdferr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/lhash.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/md2.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/md4.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/md5.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/mdc2.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/modes.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/obj_mac.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/objects.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/objectserr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/ocsp.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/ocsperr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/opensslconf.h.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/opensslv.h (95%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/ossl_typ.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/pem.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/pem2.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/pemerr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/pkcs12.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/pkcs12err.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/pkcs7.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/pkcs7err.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/rand.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/rand_drbg.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/randerr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/rc2.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/rc4.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/rc5.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/ripemd.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/rsa.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/rsaerr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/safestack.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/seed.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/sha.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/srp.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/srtp.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/ssl.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/ssl2.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/ssl3.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/sslerr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/stack.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/store.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/storeerr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/symhacks.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/tls1.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/ts.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/tserr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/txt_db.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/ui.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/uierr.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/whrlpool.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/x509.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/x509_vfy.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/x509err.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/x509v3.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/include/openssl/x509v3err.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ms/applink.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ms/cmp.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ms/uplink-common.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ms/uplink-ia64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ms/uplink-x86.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ms/uplink-x86_64.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ms/uplink.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ms/uplink.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/os-dep/haiku.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/bio_ssl.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/d1_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/d1_msg.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/d1_srtp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/methods.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/packet.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/packet_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/pqueue.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/record/README (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/record/dtls1_bitmap.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/record/rec_layer_d1.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/record/rec_layer_s3.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/record/record.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/record/record_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/record/ssl3_buffer.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/record/ssl3_record.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/record/ssl3_record_tls13.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/s3_cbc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/s3_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/s3_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/s3_msg.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/ssl_asn1.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/ssl_cert.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/ssl_cert_table.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/ssl_ciph.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/ssl_conf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/ssl_err.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/ssl_init.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/ssl_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/ssl_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/ssl_mcnf.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/ssl_rsa.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/ssl_sess.c (99%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/ssl_stat.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/ssl_txt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/ssl_utst.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/statem/README (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/statem/extensions.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/statem/extensions_clnt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/statem/extensions_cust.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/statem/extensions_srvr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/statem/statem.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/statem/statem.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/statem/statem_clnt.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/statem/statem_dtls.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/statem/statem_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/statem/statem_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/statem/statem_srvr.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/t1_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/t1_lib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/t1_trce.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/tls13_enc.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/ssl/tls_srp.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/CAss.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/CAssdh.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/CAssdsa.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/CAssrsa.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/CAtsa.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/P1ss.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/P2ss.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/README (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/README.external (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/README.ssltest.md (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/Sssdsa.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/Sssrsa.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/Uss.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/aborttest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/afalgtest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/asn1_decode_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/asn1_encode_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/asn1_internal_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/asn1_string_table_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/asn1_time_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/asynciotest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/asynctest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/bad_dtls_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/bftest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/bio_callback_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/bio_enc_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/bio_memleak_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/bioprinttest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/bntest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/bntests.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/casttest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/alt1-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/alt1-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/alt2-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/alt2-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/alt3-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/alt3-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/bad-pc3-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/bad-pc3-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/bad-pc4-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/bad-pc4-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/bad-pc6-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/bad-pc6-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/bad.key (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/bad.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt1-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt1-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt10-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt10-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt2-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt2-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt3-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt3-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt4-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt4-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt5-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt5-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt6-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt6-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt7-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt7-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt8-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt8-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt9-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badalt9-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badcn1-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/badcn1-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-cert-768.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-cert-768i.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-cert-ec-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-cert-ec-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-cert-md5-any.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-cert-md5.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-cert2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-expired.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-key-768.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-key-ec-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-key-ec-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-key2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-name2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-nonbc.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-nonca.pem (100%) create mode 100644 src/openssl/openssl-1.1.1w/test/certs/ca-pol-cert.pem rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-pss-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-pss-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-root2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ca-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/cca+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/cca+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/cca+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/cca-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/cca-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/cca-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/cca-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/client-ed25519-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/client-ed25519-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/client-ed448-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/client-ed448-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/croot+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/croot+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/croot+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/croot-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/croot-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/croot-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/croot-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/cross-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/cross-root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/cyrillic.msb (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/cyrillic.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/cyrillic.utf8 (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/cyrillic_crl.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/cyrillic_crl.utf8 (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/dhp2048.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-cert-768.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-cert-768i.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-cert-ec-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-cert-ec-named-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-cert-ec-named-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-cert-md5.pem (100%) create mode 100644 src/openssl/openssl-1.1.1w/test/certs/ee-cert-policies-bad.pem create mode 100644 src/openssl/openssl-1.1.1w/test/certs/ee-cert-policies.pem rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-cert2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-client-chain.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-client.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-ecdsa-client-chain.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-ecdsa-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-ed25519.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-expired.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-key-768.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-key-ec-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-key-ec-named-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-key-ec-named-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-name2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-pathlen.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-pss-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-pss-sha1-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-pss-sha256-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-self-signed.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ee-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/embeddedSCTs1-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/embeddedSCTs1.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/embeddedSCTs1.sct (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/embeddedSCTs1_issuer-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/embeddedSCTs1_issuer.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/embeddedSCTs3.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/embeddedSCTs3.sct (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/embeddedSCTs3_issuer.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/goodcn1-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/goodcn1-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/interCA.key (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/interCA.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/invalid-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/leaf.key (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/leaf.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/many-constraints.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/many-names1.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/many-names2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/many-names3.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/mkcert.sh (96%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/nca+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/nca+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ncca-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ncca-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ncca1-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ncca1-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ncca2-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ncca2-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ncca3-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/ncca3-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/nroot+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/nroot+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/p256-server-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/p256-server-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/p384-root-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/p384-root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/p384-server-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/p384-server-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/pathlen.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/pc1-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/pc1-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/pc2-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/pc2-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/pc5-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/pc5-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-cert-768.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-cert-md5.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-cert-rsa2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-cert2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-cross-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-ed25519.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-ed448-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-ed448-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-expired.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-key-768.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-key2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-name2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-nonca.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-noserver.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root2+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root2+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/root2-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/rootCA.key (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/rootCA.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/rootcert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/rootkey.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/roots.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/sca+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/sca+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/sca+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/sca-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/sca-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/sca-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/sca-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-cecdsa-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-cecdsa-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-dsa-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-dsa-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-ecdsa-brainpoolP256r1-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-ecdsa-brainpoolP256r1-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-ecdsa-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-ecdsa-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-ed25519-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-ed25519-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-ed448-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-ed448-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-pss-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-pss-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-pss-restrict-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-pss-restrict-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/server-trusted.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/servercert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/serverkey.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/setup.sh (97%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/some-names1.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/some-names2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/some-names3.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/sroot+anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/sroot+clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/sroot+serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/sroot-anyEKU.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/sroot-cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/sroot-clientAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/sroot-serverAuth.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/subinterCA-ss.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/subinterCA.key (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/subinterCA.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/untrusted.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/wrongcert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/wrongkey.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/x509-check-key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/certs/x509-check.csr (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/chacha_internal_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/cipher_overhead_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/cipherbytes_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/cipherlist_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ciphername_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/clienthellotest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/cmactest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/cms-examples.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/cmsapitest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/conf_include_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/constant_time_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/crltest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ct/log_list.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ct/tls1.sct (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ct_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ctype_internal_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/curve448_internal_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/d2i-tests/bad-cms.der (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/d2i-tests/bad-int-pad0.der (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/d2i-tests/bad-int-padminus1.der (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/d2i-tests/bad_bio.der (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/d2i-tests/bad_cert.der (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/d2i-tests/bad_generalname.der (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/d2i-tests/high_tag.der (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/d2i-tests/int0.der (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/d2i-tests/int1.der (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/d2i-tests/intminus1.der (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/d2i_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/dane-cross.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/danetest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/danetest.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/danetest.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/data.bin (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/destest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/dhtest.c (97%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/drbg_cavs_data.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/drbg_cavs_data.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/drbg_cavs_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/drbgtest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/drbgtest.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/dsa_no_digest_size_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/dsatest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/dtls_mtu_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/dtlstest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/dtlsv1listentest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ec_internal_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ecdsatest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ecdsatest.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ecstresstest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ectest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/enginetest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/errtest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/evp_extra_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/evp_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/evp_test.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/exdatatest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/exptest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/fatalerrtest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/generate_buildtest.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/generate_ssl_tests.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/gmdifftest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/gosttest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/handshake_helper.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/handshake_helper.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/hmactest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ideatest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/igetest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/lhash_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/md2test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/mdc2_internal_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/mdc2test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/memleaktest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/modes_internal_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/D1.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/D1_Cert_EE.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/D2.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/D2_Cert_ICA.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/D3.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/D3_Cert_EE.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ISDOSC_D1.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ISDOSC_D2.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ISDOSC_D3.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ISIC_D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ISIC_D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ISOP_D1.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ISOP_D2.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ISOP_D3.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ISOP_ND1.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ISOP_ND2.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ISOP_ND3.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ND1.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ND1_Cert_EE.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ND1_Cross_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ND2.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ND2_Cert_ICA.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ND3.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ND3_Cert_EE.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WIKH_D1.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WIKH_D2.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WIKH_D3.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WIKH_ND1.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WIKH_ND2.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WIKH_ND3.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WINH_D1.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WINH_D2.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WINH_D3.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WINH_ND1.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WINH_ND2.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WINH_ND3.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WKDOSC_D1.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WKDOSC_D2.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WKDOSC_D3.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WKIC_D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WKIC_D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WRID_D1.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WRID_D2.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WRID_D3.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WRID_ND1.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WRID_ND2.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WRID_ND3.ors (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ocspapitest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ossl_shim/async_bio.cc (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ossl_shim/async_bio.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ossl_shim/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ossl_shim/include/openssl/base.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ossl_shim/ossl_config.json (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ossl_shim/ossl_shim.cc (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ossl_shim/packeted_bio.cc (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ossl_shim/packeted_bio.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ossl_shim/test_config.cc (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ossl_shim/test_config.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/packettest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/pbelutest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/pemtest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/pkcs7-1.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/pkcs7.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/pkey_meth_kdf_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/pkey_meth_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/pkits-test.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/poly1305_internal_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/rc2test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/rc4test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/rc5test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/rdrand_sanitytest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/01-test_abort.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/01-test_sanity.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/01-test_symbol_presence.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/01-test_test.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/02-test_errstr.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/02-test_internal_ctype.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/02-test_lhash.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/02-test_ordinals.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/02-test_stack.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/03-test_exdata.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/03-test_internal_asn1.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/03-test_internal_chacha.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/03-test_internal_curve448.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/03-test_internal_ec.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/03-test_internal_mdc2.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/03-test_internal_modes.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/03-test_internal_poly1305.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/03-test_internal_siphash.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/03-test_internal_sm2.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/03-test_internal_sm4.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/03-test_internal_ssl_cert_table.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/03-test_internal_x509.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/03-test_ui.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_asn1_decode.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_asn1_encode.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_asn1_string_table.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_bio_callback.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_bioprint.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_err.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/NOTES (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/beermug.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-1023line.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-1024line.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-1025line.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-254-chars-at-the-end.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-254-chars-in-the-middle.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-255line.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-256line.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-257line.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-blankline.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-comment.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-earlypad.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-extrapad.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-infixwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-junk.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-leadingwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-longline.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-misalignedpad.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-onecolumn.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-oneline-multiple-of-254.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-oneline.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-shortandlongline.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-shortline.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-threecolumn.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert-trailingwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/csr.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-1023line.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-1024line.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-1025line.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-255line.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-256line.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-257line.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-blankline.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-comment.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-corruptedheader.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-corruptiv.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-earlypad.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-extrapad.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-junk.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-leadingwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-longline.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-misalignedpad.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-onecolumn.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-oneline.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-onelineheader.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-shortandlongline.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-shortline.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-threecolumn.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsa.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/dsaparam.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/04-test_pem_data/wellknown (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/05-test_bf.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/05-test_cast.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/05-test_cmac.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/05-test_des.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/05-test_hmac.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/05-test_idea.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/05-test_md2.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/05-test_mdc2.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/05-test_rand.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/05-test_rc2.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/05-test_rc4.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/05-test_rc5.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/06-test-rdrand.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/10-test_bn.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/10-test_bn_data/bnexp.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/10-test_bn_data/bngcd.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/10-test_bn_data/bnmod.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/10-test_bn_data/bnmul.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/10-test_bn_data/bnshift.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/10-test_bn_data/bnsum.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/10-test_exp.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_dh.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_dsa.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ec.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecdsa.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_genec.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_genrsa.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_mp_rsa.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_mp_rsa_data/plain_text (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_out_option.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_rsa.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/15-test_rsapss.t (81%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/20-test_dgst.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/20-test_enc.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/20-test_enc_more.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/20-test_passwd.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/25-test_crl.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/25-test_d2i.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/25-test_pkcs7.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/25-test_req.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/25-test_sid.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/25-test_verify.t (97%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/25-test_x509.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_afalg.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_engine.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_evp.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_evp_data/evpcase.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_evp_data/evpccmcavs.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_evp_data/evpciph.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_evp_data/evpdigest.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_evp_data/evpencod.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_evp_data/evpkdf.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_evp_data/evpmac.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_evp_data/evppbe.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_evp_data/evppkey.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_evp_data/evppkey_ecc.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_evp_extra.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_pbelu.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_pkey_meth.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/30-test_pkey_meth_kdf.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/40-test_rehash.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/60-test_x509_check_cert_pkey.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/60-test_x509_dup_cert.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/60-test_x509_store.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/60-test_x509_time.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_asyncio.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_bad_dtls.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_clienthello.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_comp.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_key_share.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_packet.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_recordlen.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_renegotiation.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_servername.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_sslcbcpadding.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_sslcertstatus.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_sslextension.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_sslmessages.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_sslrecords.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_sslsessiontick.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_sslsigalgs.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_sslsignature.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_sslskewith0p.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_sslversions.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_sslvertol.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_tls13alerts.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_tls13cookie.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_tls13downgrade.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_tls13hrr.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_tls13kexmodes.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_tls13messages.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_tls13psk.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_tlsextms.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_verify_extra.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/70-test_wpacket.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_ca.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_cipherbytes.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_cipherlist.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_ciphername.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_cms.t (98%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_cms_data/bad_signtime_attr.cms (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_cms_data/ct_multiple_attr.cms (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_cms_data/no_ct_attr.cms (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_cms_data/no_md_attr.cms (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_cmsapi.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_ct.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_dane.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_dtls.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_dtls_mtu.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_dtlsv1listen.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_ocsp.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_ocsp_data/cert.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_ocsp_data/key.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_pkcs12.t (100%) create mode 100644 src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree.t create mode 100644 src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/large_leaf.pem create mode 100644 src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/large_policy_tree.pem create mode 100644 src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/small_leaf.pem create mode 100644 src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/small_policy_tree.pem rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_ssl_new.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_ssl_old.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_ssl_test_ctx.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_sslcorrupt.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_tsa.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/80-test_x509aux.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_asn1_time.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_async.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_bio_enc.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_bio_memleak.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_constant_time.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_fatalerr.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_gmdiff.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_gost.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_gost_data/gost.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_gost_data/server-cert2001.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_gost_data/server-cert2012.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_gost_data/server-key2001.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_gost_data/server-key2012.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_ige.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_includes.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_includes_data/conf-includes/includes1.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_includes_data/conf-includes/includes2.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_includes_data/includes-broken.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_includes_data/includes-eq-ws.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_includes_data/includes-eq.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_includes_data/includes-file.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_includes_data/includes.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_includes_data/vms-includes-file.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_includes_data/vms-includes.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_memleak.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_overhead.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_secmem.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_shlibload.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_srp.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_sslapi.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_sslapi_data/passwd.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_sslbuffers.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_store.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_store_data/ca.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_store_data/user.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_sysdefault.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_threads.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_time_offset.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_tls13ccs.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_tls13encryption.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_tls13secrets.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/90-test_v3name.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/95-test_external_boringssl.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/95-test_external_krb5.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/95-test_external_krb5_data/krb5.sh (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/95-test_external_pyca.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/95-test_external_pyca_data/cryptography.sh (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/99-test_ecstress.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/99-test_fuzz.t (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/ocsp-response.der (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recipes/tconversion.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/recordlentest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/rsa_complex.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/rsa_mp_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/rsa_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/run_tests.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/sanitytest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/secmemtest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/serverinfo.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/serverinfo2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/servername_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/session.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/shibboleth.pfx (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/shlibloadtest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/siphash_internal_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/sm2_internal_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/sm4_internal_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smcont.txt (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smime-certs/badrsa.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smime-certs/ca.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smime-certs/mksmime-certs.sh (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smime-certs/smdh.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smime-certs/smdsa1.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smime-certs/smdsa2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smime-certs/smdsa3.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smime-certs/smdsap.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smime-certs/smec1.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smime-certs/smec2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smime-certs/smec3.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smime-certs/smroot.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smime-certs/smrsa1.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smime-certs/smrsa2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/smime-certs/smrsa3.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/srptest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/01-simple.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/01-simple.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/02-protocol-version.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/02-protocol-version.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/03-custom_verify.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/03-custom_verify.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/04-client_auth.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/04-client_auth.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/05-sni.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/05-sni.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/06-sni-ticket.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/06-sni-ticket.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/07-dtls-protocol-version.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/07-dtls-protocol-version.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/08-npn.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/08-npn.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/09-alpn.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/09-alpn.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/10-resumption.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/10-resumption.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/11-dtls_resumption.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/11-dtls_resumption.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/12-ct.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/12-ct.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/13-fragmentation.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/13-fragmentation.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/14-curves.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/14-curves.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/15-certstatus.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/15-certstatus.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/16-dtls-certstatus.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/16-dtls-certstatus.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/17-renegotiate.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/17-renegotiate.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/18-dtls-renegotiate.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/18-dtls-renegotiate.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/19-mac-then-encrypt.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/19-mac-then-encrypt.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/20-cert-select.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/20-cert-select.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/21-key-update.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/21-key-update.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/22-compression.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/22-compression.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/23-srp.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/23-srp.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/24-padding.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/24-padding.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/25-cipher.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/25-cipher.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/26-tls13_client_auth.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/26-tls13_client_auth.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/27-ticket-appdata.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/27-ticket-appdata.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/28-seclevel.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/28-seclevel.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/29-dtls-sctp-label-bug.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/29-dtls-sctp-label-bug.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/30-supported-groups.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/30-supported-groups.conf.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/protocol_version.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl-tests/ssltests_base.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl_cert_table_internal_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl_ctx_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl_test.tmpl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl_test_ctx.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl_test_ctx.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl_test_ctx_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssl_test_ctx_test.conf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/sslapitest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/sslbuffertest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/sslcorrupttest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssltest_old.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssltestlib.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/ssltestlib.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/stack_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/sysdefault.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/sysdefaulttest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/test.cnf (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/test_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testcrl.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testdsa.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testdsapub.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testec-p256.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testecpub-p256.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/tested25519.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/tested25519pub.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/tested448.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/tested448pub.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testp7.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testreq2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testrsa.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testrsa_withattrs.der (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testrsa_withattrs.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testrsapub.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testsid.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testutil.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testutil/basic_output.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testutil/cb.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testutil/driver.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testutil/format_output.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testutil/main.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testutil/output.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testutil/output_helpers.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testutil/random.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testutil/stanza.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testutil/tap_bio.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testutil/test_cleanup.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testutil/tests.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testutil/testutil_init.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testutil/tu_local.h (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/testx509.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/threadstest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/time_offset_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/tls13ccstest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/tls13encryptiontest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/tls13secretstest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/uitest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/v3-cert1.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/v3-cert2.pem (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/v3ext.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/v3nametest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/verify_extra_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/versions.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/wpackettest.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/x509_check_cert_pkey_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/x509_dup_cert_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/x509_internal_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/x509_time_test.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/test/x509aux.c (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/tools/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/tools/c_rehash.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/add-depends.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/build.info (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/cavs-to-evptest.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/check-malloc-errs (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/ck_errf.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/copy.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/dofile.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/echo.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/find-doc-nits (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/find-unused-errs (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/fix-includes (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/fix-includes.sed (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/indent.pro (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/libcrypto.num (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/libssl.num (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/local_shlib.com.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/mkbuildinf.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/mkdef.pl (99%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/mkdir-p.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/mkerr.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/mkrc.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/openssl-format-source (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/openssl-update-copyright (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/opensslwrap.sh (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/OpenSSL/Glob.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/OpenSSL/Test.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/OpenSSL/Test/Simple.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/OpenSSL/Test/Utils.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/OpenSSL/Util/Pod.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/OpenSSL/copyright.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/TLSProxy/Alert.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/TLSProxy/Certificate.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/TLSProxy/CertificateRequest.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/TLSProxy/CertificateVerify.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/TLSProxy/ClientHello.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/TLSProxy/EncryptedExtensions.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/TLSProxy/Message.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/TLSProxy/NewSessionTicket.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/TLSProxy/Proxy.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/TLSProxy/Record.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/TLSProxy/ServerHello.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/TLSProxy/ServerKeyExchange.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/checkhandshake.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/perl/with_fallback.pm (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/private.num (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/process_docs.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/shlib_wrap.sh.in (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/su-filter.pl (100%) rename src/openssl/{openssl-1.1.1t => openssl-1.1.1w}/util/unlocal_shlib.com.in (100%) create mode 100644 src/python/CVE-2023-24329.diff delete mode 100644 src/sqlite/SQLite-3.40.1/sqlite3.1 rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/INSTALL (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/Makefile.am (85%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/Makefile.fallback (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/Makefile.in (99%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/Makefile.msc (98%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/README.txt (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/Replace.cs (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/aclocal.m4 (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/compile (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/config.guess (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/config.sub (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/configure (99%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/configure.ac (99%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/depcomp (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/install-sh (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/ltmain.sh (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/missing (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/shell.c (90%) create mode 100644 src/sqlite/SQLite-3.43.1/sqlite3.1 rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/sqlite3.c (95%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/sqlite3.h (96%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/sqlite3.pc.in (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/sqlite3.rc (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/sqlite3ext.h (99%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/sqlite3rc.h (50%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/tea/Makefile.in (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/tea/README (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/tea/aclocal.m4 (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/tea/configure (99%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/tea/configure.ac (99%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/tea/doc/sqlite3.n (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/tea/generic/tclsqlite3.c (99%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/tea/license.terms (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/tea/pkgIndex.tcl.in (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/tea/tclconfig/install-sh (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/tea/tclconfig/tcl.m4 (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/tea/win/makefile.vc (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/tea/win/nmakehlp.c (100%) rename src/sqlite/{SQLite-3.40.1 => SQLite-3.43.1}/tea/win/rules.vc (100%) delete mode 100644 src/sqlite/sqlite3-3.40.1-x64.dll delete mode 100755 src/sqlite/sqlite3-3.40.1-x86.dll create mode 100644 src/sqlite/sqlite3-3.43.1-x64.dll create mode 100755 src/sqlite/sqlite3-3.43.1-x86.dll delete mode 100644 src/zlib/zlib-1.2.13/contrib/minizip/MiniZip64_Changes.txt delete mode 100644 src/zlib/zlib-1.2.13/contrib/minizip/zip.h delete mode 100644 src/zlib/zlib-1.2.13/contrib/vstudio/vc9/zlib.rc delete mode 100644 src/zlib/zlib-1.2.13/contrib/vstudio/vc9/zlibvc.def delete mode 100644 src/zlib/zlib-1.2.13/examples/zran.c delete mode 100644 src/zlib/zlib-1.2.13/examples/zran.h delete mode 100644 src/zlib/zlib-1.2.13/zlib.3.pdf delete mode 100755 src/zlib/zlib-1.2.13/zlib2ansi rename src/zlib/{zlib-1.2.13 => zlib-1.3}/CMakeLists.txt (99%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/ChangeLog (98%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/FAQ (99%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/INDEX (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/LICENSE (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/Makefile (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/Makefile.in (98%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/README (87%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/adler32.c (88%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/amiga/Makefile.pup (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/amiga/Makefile.sas (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/compress.c (86%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/configure (97%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/README.contrib (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/ada/buffer_demo.adb (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/ada/mtest.adb (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/ada/read.adb (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/ada/readme.txt (93%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/ada/test.adb (99%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/ada/zlib-streams.adb (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/ada/zlib-streams.ads (98%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/ada/zlib-thin.adb (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/ada/zlib-thin.ads (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/ada/zlib.adb (99%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/ada/zlib.ads (99%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/ada/zlib.gpr (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/blast/Makefile (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/blast/README (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/blast/blast.c (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/blast/blast.h (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/blast/test.pk (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/blast/test.txt (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/delphi/ZLib.pas (99%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/delphi/ZLibConst.pas (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/delphi/readme.txt (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/delphi/zlibd32.mak (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/dotzlib/DotZLib.build (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/dotzlib/DotZLib.chm (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/dotzlib/DotZLib.sln (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/dotzlib/DotZLib/AssemblyInfo.cs (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/dotzlib/DotZLib/ChecksumImpl.cs (97%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/dotzlib/DotZLib/CircularBuffer.cs (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/dotzlib/DotZLib/CodecBase.cs (96%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/dotzlib/DotZLib/Deflater.cs (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/dotzlib/DotZLib/DotZLib.cs (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/dotzlib/DotZLib/DotZLib.csproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/dotzlib/DotZLib/GZipStream.cs (96%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/dotzlib/DotZLib/Inflater.cs (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/dotzlib/DotZLib/UnitTests.cs (95%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/dotzlib/LICENSE_1_0.txt (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/dotzlib/readme.txt (94%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/gcc_gvmat64/gvmat64.S (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/infback9/README (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/infback9/infback9.c (98%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/infback9/infback9.h (68%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/infback9/inffix9.h (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/infback9/inflate9.h (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/infback9/inftree9.c (97%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/infback9/inftree9.h (92%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/iostream/test.cpp (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/iostream/zfstream.cpp (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/iostream/zfstream.h (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/iostream2/zstream.h (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/iostream2/zstream_test.cpp (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/iostream3/README (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/iostream3/TODO (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/iostream3/test.cc (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/iostream3/zfstream.cc (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/iostream3/zfstream.h (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/Makefile (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/Makefile.am (100%) create mode 100644 src/zlib/zlib-1.3/contrib/minizip/MiniZip64_Changes.txt rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/MiniZip64_info.txt (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/configure.ac (93%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/crypt.h (94%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/ioapi.c (74%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/ioapi.h (77%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/iowin32.c (87%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/iowin32.h (65%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/make_vms.com (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/miniunz.c (92%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/miniunzip.1 (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/minizip.1 (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/minizip.c (91%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/minizip.pc.in (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/mztools.c (97%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/mztools.h (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/unzip.c (81%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/unzip.h (76%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/minizip/zip.c (85%) create mode 100644 src/zlib/zlib-1.3/contrib/minizip/zip.h rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/pascal/example.pas (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/pascal/readme.txt (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/pascal/zlibd32.mak (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/pascal/zlibpas.pas (99%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/puff/Makefile (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/puff/README (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/puff/puff.c (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/puff/puff.h (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/puff/pufftest.c (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/puff/zeros.raw (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/testzlib/testzlib.c (95%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/testzlib/testzlib.txt (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/untgz/Makefile (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/untgz/Makefile.msc (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/untgz/untgz.c (94%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/readme.txt (95%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc10/miniunz.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc10/miniunz.vcxproj.filters (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc10/minizip.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc10/minizip.vcxproj.filters (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc10/testzlib.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc10/testzlib.vcxproj.filters (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc10/testzlibdll.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc10/testzlibdll.vcxproj.filters (100%) rename src/zlib/{zlib-1.2.13/contrib/vstudio/vc11 => zlib-1.3/contrib/vstudio/vc10}/zlib.rc (80%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc10/zlibstat.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc10/zlibstat.vcxproj.filters (100%) rename src/zlib/{zlib-1.2.13/contrib/vstudio/vc11 => zlib-1.3/contrib/vstudio/vc10}/zlibvc.def (97%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc10/zlibvc.sln (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc10/zlibvc.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc10/zlibvc.vcxproj.filters (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc11/miniunz.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc11/minizip.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc11/testzlib.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc11/testzlibdll.vcxproj (100%) rename src/zlib/{zlib-1.2.13/contrib/vstudio/vc10 => zlib-1.3/contrib/vstudio/vc11}/zlib.rc (80%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc11/zlibstat.vcxproj (100%) rename src/zlib/{zlib-1.2.13/contrib/vstudio/vc14 => zlib-1.3/contrib/vstudio/vc11}/zlibvc.def (97%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc11/zlibvc.sln (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc11/zlibvc.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc12/miniunz.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc12/minizip.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc12/testzlib.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc12/testzlibdll.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc12/zlib.rc (82%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc12/zlibstat.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc12/zlibvc.def (97%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc12/zlibvc.sln (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc12/zlibvc.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc14/miniunz.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc14/minizip.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc14/testzlib.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc14/testzlibdll.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc14/zlib.rc (82%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc14/zlibstat.vcxproj (100%) rename src/zlib/{zlib-1.2.13/contrib/vstudio/vc10 => zlib-1.3/contrib/vstudio/vc14}/zlibvc.def (97%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc14/zlibvc.sln (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc14/zlibvc.vcxproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc9/miniunz.vcproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc9/minizip.vcproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc9/testzlib.vcproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc9/testzlibdll.vcproj (100%) create mode 100644 src/zlib/zlib-1.3/contrib/vstudio/vc9/zlib.rc rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc9/zlibstat.vcproj (100%) create mode 100644 src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.def rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc9/zlibvc.sln (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/contrib/vstudio/vc9/zlibvc.vcproj (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/crc32.c (91%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/crc32.h (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/deflate.c (94%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/deflate.h (96%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/doc/algorithm.txt (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/doc/crc-doc.1.0.pdf (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/doc/rfc1950.txt (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/doc/rfc1951.txt (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/doc/rfc1952.txt (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/doc/txtvsbin.txt (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/examples/README.examples (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/examples/enough.c (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/examples/fitblk.c (99%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/examples/gun.c (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/examples/gzappend.c (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/examples/gzjoin.c (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/examples/gzlog.c (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/examples/gzlog.h (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/examples/gznorm.c (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/examples/zlib_how.html (96%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/examples/zpipe.c (100%) create mode 100644 src/zlib/zlib-1.3/examples/zran.c create mode 100644 src/zlib/zlib-1.3/examples/zran.h rename src/zlib/{zlib-1.2.13 => zlib-1.3}/gzclose.c (93%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/gzguts.h (91%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/gzlib.c (90%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/gzread.c (93%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/gzwrite.c (92%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/infback.c (97%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/inffast.c (98%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/inffast.h (83%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/inffixed.h (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/inflate.c (96%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/inflate.h (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/inftrees.c (97%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/inftrees.h (92%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/make_vms.com (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/msdos/Makefile.bor (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/msdos/Makefile.dj2 (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/msdos/Makefile.emx (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/msdos/Makefile.msc (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/msdos/Makefile.tc (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/nintendods/Makefile (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/nintendods/README (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/old/Makefile.emx (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/old/Makefile.riscos (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/old/README (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/old/descrip.mms (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/old/os2/Makefile.os2 (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/old/os2/zlib.def (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/old/visual-basic.txt (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/os400/README400 (96%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/os400/bndsrc (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/os400/make.sh (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/os400/zlib.inc (99%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/qnx/package.qpg (94%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/test/example.c (84%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/test/infcover.c (99%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/test/minigzip.c (88%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/treebuild.xml (96%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/trees.c (90%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/trees.h (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/uncompr.c (90%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/watcom/watcom_f.mak (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/watcom/watcom_l.mak (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/win32/DLL_FAQ.txt (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/win32/Makefile.bor (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/win32/Makefile.gcc (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/win32/Makefile.msc (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/win32/README-WIN32.txt (96%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/win32/VisualC.txt (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/win32/zlib.def (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/win32/zlib1.rc (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/zconf.h (99%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/zconf.h.cmakein (99%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/zconf.h.in (99%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/zlib.3 (97%) create mode 100644 src/zlib/zlib-1.3/zlib.3.pdf rename src/zlib/{zlib-1.2.13 => zlib-1.3}/zlib.h (88%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/zlib.map (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/zlib.pc.cmakein (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/zlib.pc.in (100%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/zutil.c (87%) rename src/zlib/{zlib-1.2.13 => zlib-1.3}/zutil.h (90%) diff --git a/.github/workflows/bare.yaml b/.github/workflows/bare.yaml index c54d58762..fe8ecb728 100644 --- a/.github/workflows/bare.yaml +++ b/.github/workflows/bare.yaml @@ -29,8 +29,8 @@ jobs: strategy: fail-fast: false matrix: - # ARM64 is currently our virtualized Ubuntu 16.04 image. - runs-on: [ ubuntu-20.04, ubuntu-18.04, ARM64 ] + # The ARM64 build actually runs on an Amazon Docker container on Laja. + runs-on: [ ubuntu-20.04, ubuntu-18.04, amzn-2-arm64 ] timeout-minutes: 120 steps: - name: Prepare OS @@ -96,13 +96,14 @@ jobs: strategy: fail-fast: false matrix: - runs-on: [ macos-10.15 ] + runs-on: [ macos-11 ] timeout-minutes: 60 steps: # Avoid linking to Homebrew's libintl during build. # Needed tools are to be used from /usr/bin. - name: Hack Homebrew run: | + sleep 10 sudo find /usr/local -name 'libffi*' -exec chmod a-r {} + sudo find /usr/local -name 'libintl*' -exec chmod a-r {} + sudo rm -f /usr/local/bin/{wget,curl,git} @@ -173,7 +174,7 @@ jobs: - name: Prepare OS shell: powershell run: | - chocolatey install --yes --no-progress make nasm 7zip curl + choco install --yes --no-progress make nasm 7zip curl # There's no vcpython27 choco pkg since Microsoft removed the installer. Start-BitsTransfer https://bin.chevah.com:20443/third-party-stuff/VCForPython27.msi msiexec /quiet /i VCForPython27.msi diff --git a/brink.conf b/brink.conf index 493380b80..63d75fc57 100644 --- a/brink.conf +++ b/brink.conf @@ -1,5 +1,5 @@ -BASE_REQUIREMENTS='pip==20.3.4chevah chevah-brink==0.79.0 paver==1.2.4' -PYTHON_CONFIGURATION='default@2.7.18.90dc4a6' +BASE_REQUIREMENTS='pip==20.3.4chevah1 chevah-brink==0.79.0 paver==1.2.4' +PYTHON_CONFIGURATION='default@2.7.18.52fb2f5' # For production packages there are 2 options: BINARY_DIST_URI='https://github.com/chevah/python-package/releases/download' #BINARY_DIST_URI='https://bin.chevah.com:20443/production' diff --git a/brink.sh b/brink.sh index 02aefff2d..021f551d0 100755 --- a/brink.sh +++ b/brink.sh @@ -640,14 +640,14 @@ check_glibc_version(){ # Supported minimum minor glibc 2.X versions for various arches. # For x64, we build on CentOS 5.11 (Final) with glibc 2.5. - # For arm64, we build on Ubuntu 16.04 with glibc 2.23. + # For arm64, we build on Amazon Linux 2 with glibc 2.26. # Beware we haven't normalized arch names yet. case "$ARCH" in "amd64"|"x86_64"|"x64") supported_glibc2_version=5 ;; "aarch64"|"arm64") - supported_glibc2_version=23 + supported_glibc2_version=26 ;; *) (>&2 echo "$ARCH is an unsupported arch for generic Linux!") @@ -658,7 +658,7 @@ check_glibc_version(){ echo "No specific runtime for the current distribution / version / arch." echo "Minimum glibc version for this arch: 2.${supported_glibc2_version}." - # Tested with glibc 2.5/2.11.3/2.12/2.23/2.28-31 and eglibc 2.13/2.19. + # Tested with glibc 2.5/2.11.3/2.12/2.23/2.26/2.28-31 and eglibc 2.13/2.19. glibc_version=$(head -n 1 $ldd_output_file | rev | cut -d\ -f1 | rev) rm $ldd_output_file diff --git a/chevah_build b/chevah_build index 6ac42790b..777bc93fa 100755 --- a/chevah_build +++ b/chevah_build @@ -14,19 +14,19 @@ set -o pipefail # don't ignore exit codes when piping output PYTHON_BUILD_VERSION="2.7.18" LIBFFI_VERSION="3.4.4" -ZLIB_VERSION="1.2.13" +ZLIB_VERSION="1.3" BZIP2_VERSION="1.0.8" # We statically build the BSD libedit on selected platforms to get the # readline module available without linking to the GPL-only readline libs. LIBEDIT_VERSION="20170329-3.1" -OPENSSL_VERSION="1.1.1t" -SQLITE_VERSION="3.40.1" +OPENSSL_VERSION="1.1.1w" +SQLITE_VERSION="3.43.1" # Python modules versions to be used everywhere possible. PYSQLITE_VERSION="2.8.3" CFFI_VERSION="1.15.1" SCANDIR_VERSION="1.10.0" -PSUTIL_VERSION="5.9.3" +PSUTIL_VERSION="5.9.5" SUBPROCESS32_VERSION="3.5.4" # Versions no longer upgradable because of Python 2 deprecation. @@ -35,14 +35,29 @@ PYOPENSSL_VERSION="21.0.0" # Backported fix for https://github.com/pypa/pip/issues/9827 # at https://github.com/chevah/pip/tree/20.3.4chevah. PIP_VERSION="20.3.4chevah1" -# For pip <21.1, click <8.0.0, dparse <0.5.2, wheel <0.38.0, safety <2.2.0, -# setuptools <65.5.1, certifi <2022.12.07. -SAFETY_IGNORED_OPTS="-i 40291 -i 47833 -i 50571 -i 51499 -i 51358 -i 52495 -i 52365" +# For safety alerts, we need to ignore some vulnerabilities which are either: +# * not present in the final tarball, e.g. for wheel, safety, etc., +# * not at all relevant, e.g. those for cryptography's bundled openssl, +# * not actually relevant for these old versions, e.g. 53048 for cryptography, +# * patched by us, e.g. 40291 for pip, 53048 for cryptography, +# * not patched: 52495 for setuptools. +# pip <21.1, click <8, dparse <0.5.2, wheel <0.38, safety <2.2, pywin32 <301. +SAFETY_IGNORED_OPTS="-i 40291 -i 47833 -i 50571 -i 51499 -i 51358 -i 54687" +# setuptools <65.5.1, requests <2.31.0, certifi <2023.07.22. +SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 52495 -i 58755 -i 52365 -i 59956" +# These are related to cryptography's bundled OpenSSL libs. We don't use those. +SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53306 -i 53298 -i 53305 -i 53301" +SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53307 -i 53304 -i 53302 -i 53299" +SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53303 -i 59062 -i 60225 -i 60223" +SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 60224" +# Other cryptography vulnerabilities, see a few lines above for more details. +SAFETY_IGNORED_OPTS="$SAFETY_IGNORED_OPTS -i 53048 -i 59473" # setuptools 44.x is the last series to support Python 2.7. # More at https://github.com/pypa/setuptools/pull/1955. SETUPTOOLS_VERSION="44.1.1" -# Version 3.2.1 is used with OpenSSL 1.0.2 libs. -CRYPTOGRAPHY_VERSION="3.3.2" +# Version 3.2.1 (with patches) from python-modules/ is used with OpenSSL 1.0.2. +# Our patched versions fix CVE-2023-23931. +CRYPTOGRAPHY_VERSION="3.3.2chevah" # bcrypt 3.2.0 requires at least Python 3.6. BCRYPT_VERSION="3.1.7" # setproctitle 1.2.x requires at least Python 3.6. @@ -164,7 +179,7 @@ case $OS in # MSYS2's Perl is not good enough for building OpenSSL. export PATH="/c/Strawberry/perl/bin/:$PATH:/c/Program Files/NASM/" export BUILD_OPENSSL="yes" - # Extra libraries are installed only using PIP. + # Python modules are installed only using PIP. EXTRA_LIBRARIES="" PIP_LIBRARIES="$PIP_LIBRARIES \ pywin32==${PYWIN32_VERSION} \ @@ -202,8 +217,8 @@ case $OS in export BUILD_LIBEDIT="no" # As of January 2021, OpenSSL 1.0.2u is the latest version from IBM. export BUILD_OPENSSL="yes" - # 1.1.1 tests fail on AIX, use 1.0.2 with patches from Ubuntu 16.04 LTS. - OPENSSL_VERSION="1.0.2v-chevah4" + # 1.1.1 tests fail on AIX, use 1.0.2 with patches from CentOS 7. + OPENSSL_VERSION="1.0.2v-chevah5" # Perl's Test::Simple and its deps are required for building OpenSSL. execute perl -MTest::Simple -e 1 # cryptography 3.2.x, last version to support OpenSSL 1.0.2. @@ -236,9 +251,13 @@ case $OS in export BUILD_LIBFFI="yes" # OpenSSL 1.0.2 has extended support: https://tinyurl.com/2ck2sm6s. export CRYPTOGRAPHY_ALLOW_OPENSSL_102="yes" - # Put cryptography back, to build it against system OpenSSL. + # Build cryptography against system OpenSSL with our patches. # cryptography 3.2.1, last version working with OpenSSL 1.0.2. - PIP_LIBRARIES="cryptography==3.2.1 $PIP_LIBRARIES_OPENSSL_102" + EXTRA_LIBRARIES="$EXTRA_LIBRARIES \ + python-modules/cryptography-3.2.1 \ + " + # Use the appropriate PIP_LIBRARIES env var. + PIP_LIBRARIES="$PIP_LIBRARIES_OPENSSL_102" add_ignored_safety_ids_for_cryptography32 ;; macos) @@ -250,8 +269,12 @@ case $OS in # setup.py skips building readline by default, as it sets this to # "10.4", and then tries to avoid the broken readline in OS X 10.4. export MACOSX_DEPLOYMENT_TARGET=10.12 - # System includes bzip2 libs by default. - export BUILD_BZIP2="no" + # System included bzip2 libs by default up to and including macOS 10.15. + export BUILD_BZIP2="yes" + # Apparently, macOS 11 doesn't include zlib libraries either. + export BUILD_ZLIB="yes" + # Building readline fails on macOS 11, didn't look into it. + export BUILD_LIBEDIT="no" # 10.13 and newer come with LibreSSL instead of the old OpenSSL libs. # But 10.13 has version 2.2.7, while cryptography 2.9 requires 2.7. # Therefore, we build OpenSSL for both stdlib and cryptography. @@ -302,18 +325,6 @@ case $OS in export PATH="/usr/local/bin:$PATH" # In particular, Perl's Test::Simple and its deps are required. execute perl -MTest::Simple -e 1 - # Version 5.9.2-5.9.4 of psutil not working properly on CentOS 5. - # More at https://github.com/giampaolo/psutil/issues/2164. - # Should be fixed with the 5.9.5 release. - PIP_LIBRARIES="\ - cryptography==${CRYPTOGRAPHY_VERSION} \ - pyOpenSSL==${PYOPENSSL_VERSION} \ - scandir==${SCANDIR_VERSION} \ - subprocess32==${SUBPROCESS32_VERSION} \ - bcrypt==${BCRYPT_VERSION} \ - psutil=="5.9.1" \ - setproctitle==${SETPROCTITLE_VERSION} - " ;; *) # Only supported Linux distributions should be left. @@ -706,6 +717,10 @@ command_test() { echo '##### Testing for outdated packages and security issues... #####' execute $PYTHON_BIN -m pip list --outdated --format=columns + # Install wheel back for better collection of needed dependencies. + execute $PYTHON_BIN -m pip install $PIP_ARGS wheel + # Move include/ back for building some deps, like Cython on ARM64. + execute mv $INSTALL_FOLDER/lib/include $INSTALL_FOLDER/ # Safety needs PyYAML, which needs Cython, which needs to be built on AIX. aix_ld_hack init # This is the newest version that still works with Python 2.7.x. @@ -742,8 +757,8 @@ command_test() { (>&2 echo -e "\tSkipping because of upstream issues.") ;; lnx*) - if [ x${CHEVAH_CONTAINER-} = x"yes" ]; then - (>&2 echo -e "\tSkipping as it fails under Docker on CentOS 5.") + if [ -f /.dockerenv ]; then + (>&2 echo -e "\tSkipping as it fails under Docker.") else execute $PYTHON_BIN ${SCANDIR_FOLDER}/test/run_tests.py fi @@ -771,7 +786,7 @@ command_compat() { execute pushd build echo '##### Running chevah.compat tests... #####' execute rm -rf compat - execute git clone https://github.com/chevah/compat.git --depth=1 -b master + execute git clone https://github.com/chevah/compat.git --depth=1 -b py2-support execute pushd compat # Copy over current brink stuff, as some changes might require it. execute cp ../../brink.{conf,sh} ./ @@ -784,8 +799,6 @@ command_compat() { execute cp -r ../$LOCAL_PYTHON_BINARY_DIST cache/ # Make sure everything is done from scratch in the current dir. unset CHEVAH_CACHE CHEVAH_BUILD - # Install wheel back for the compat tests. - execute $PYTHON_BIN -m pip install $PIP_ARGS wheel # Some tests might fail due to causes which are not related to python. execute ./brink.sh deps if [ "${CHEVAH_CONTAINER:-}" = "yes" ]; then diff --git a/external_deps.csv b/external_deps.csv index 6978487e5..415065297 100644 --- a/external_deps.csv +++ b/external_deps.csv @@ -1,36 +1,35 @@ OS,AIX,,,Amazon,Alpine,Debian,FreeBSD,,HP-UX,macOS,OS X,RHEL,,,SLES,Solaris,,,,Ubuntu Server,,,,Windows, OS Version,5.3³,6.1³,7.1+¹,2+¹,3.12+¹,5.0+²,11.4³,12.2+³,11.31³,10.13+¹,10.8³,5.11-7.x¹,8.x¹,9.x¹,11SP4+²,10u8+³,11.0/11.1³,11.2³,11.4³,14.04/16.04¹,18.04¹,20.04¹,22.04¹,"XP, 2003, 2008³","2012r2, 2016, 2019, 2022¹" OpenSSL⁶,"1.0.2v-chevah2 (statically linked with stdlib “ssl”) -1.0.2v-chevah2 (statically linked with cryptography)",1.0.2k (from AIX Web Download Pack Programs),"1.0.2v-chevah4 (statically linked with stdlib “ssl”) -1.0.2v-chevah4 (statically linked with cryptography)","1.1.1t (statically linked with stdlib “ssl”) -1.1.1t (statically linked with cryptography)","1.1.1t (statically linked with stdlib “ssl”) -1.1.1t (statically linked with cryptography)","1.1.1t (statically linked with stdlib “ssl”) -1.1.1t (statically linked with cryptography)",1.0.1u,1.0.2s,1.0.2h,"1.1.1t (statically linked with stdlib “ssl”) -1.1.1t (statically linked with cryptography)","1.1.1g (statically built for stdlib “ssl”) -1.1.1g (bundled with upstream cryptography 2.9.1)","1.1.1t (statically linked with stdlib “ssl”) -1.1.1t (statically linked with cryptography)","1.1.1cFIPS / -1.1.1k FIPS","1.1.1t (statically linked with stdlib “ssl”) -1.1.1t (statically linked with cryptography)","1.1.1t (statically linked with stdlib “ssl”) -1.1.1t (statically linked with cryptography)",1.0.2n (from upstream Oracle patches),1.0.0x,1.0.1h," -1.0.2o","1.1.1t (statically linked with stdlib “ssl”) -1.1.1t (statically linked with cryptography)",1.1.0g,1.1.1f,"1.1.1t (statically linked with stdlib “ssl”) -1.1.1t (statically linked with cryptography)","1.0.2t (bundled with upstream Python 2.7.18) +1.0.2v-chevah2 (statically linked with cryptography)",1.0.2k (from AIX Web Download Pack Programs),"1.0.2v-chevah5¹⁵ (statically linked with stdlib “ssl”) +1.0.2v-chevah5¹⁵ (statically linked with cryptography)","1.1.1w (statically linked with stdlib “ssl”) +1.1.1w (statically linked with cryptography)","1.1.1w (statically linked with stdlib “ssl”) +1.1.1w (statically linked with cryptography)","1.1.1w (statically linked with stdlib “ssl”) +1.1.1w (statically linked with cryptography)",1.0.1u,1.0.2s,1.0.2h,"1.1.1w (statically linked with stdlib “ssl”) +1.1.1w (statically linked with cryptography)","1.1.1g (statically built for stdlib “ssl”) +1.1.1g (bundled with upstream cryptography 2.9.1)","1.1.1w (statically linked with stdlib “ssl”) +1.1.1w (statically linked with cryptography)","1.1.1cFIPS / +1.1.1k FIPS","1.1.1w (statically linked with stdlib “ssl”) +1.1.1w (statically linked with cryptography)","1.1.1w (statically linked with stdlib “ssl”) +1.1.1w (statically linked with cryptography)",1.0.2n (from upstream Oracle patches),1.0.0x,1.0.1h," +1.0.2o","1.1.1w (statically linked with stdlib “ssl”) +1.1.1w (statically linked with cryptography)",1.1.0g,1.1.1f,"1.1.1w (statically linked with stdlib “ssl”) +1.1.1w (statically linked with cryptography)","1.0.2t (bundled with upstream Python 2.7.18) 1.1.1g (bundled with upstream cryptography 2.9.1)","1.0.2t⁹ (bundled with upstream Python 2.7.18) -1.1.1t (built from upstream sources for cryptography)" +1.1.1w (built from upstream sources for cryptography)" Python,2.7.18+patches,2.7.18¹¹,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18¹¹,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18¹¹,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.8⁴,2.7.18¹¹,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18+patches,2.7.18¹¹,2.7.18¹³ -SQLite,3.34.1,3.34.1,3.40.1,3.40.1,3.40.1,3.40.1,3.30.1,3.34.1,3.34.1,3.40.1,3.30.1,3.40.1,3.40.1,3.40.1,3.40.1,3.34.1,3.30.1,3.34.1,3.34.1,3.40.1,3.40.1,3.40.1,3.40.1,3.30.1 (we overwrite version from upstream Python at build time),3.40.1 (we overwrite version from upstream Python at build time) +SQLite,3.34.1,3.34.1,3.43.1,3.43.1,3.43.1,3.43.1,3.30.1,3.34.1,3.34.1,3.43.1,3.30.1,3.43.1,3.43.1,3.43.1,3.43.1,3.34.1,3.30.1,3.34.1,3.34.1,3.43.1,3.43.1,3.43.1,3.43.1,3.30.1 (we overwrite version from upstream Python at build time),3.43.1 (we overwrite version from upstream Python at build time) Expat,2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.1.0⁵ (bundled with Python 2.7.8),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python),2.2.8 (bundled with Python) -zlib,1.2.12,p/o,1.2.13,1.2.13,p/o,1.2.13,p/o,p/o,1.2.12,p/o,p/o,1.2.13,p/o,1.2.13,1.2.13,p/o,p/o,p/o,p/o,1.2.13,p/o,p/o,1.2.13,1.2.11⁸ (bundled with Python),1.2.11⁸ (bundled with Python) +zlib,1.2.12,p/o,1.3,1.3,p/o,1.3,p/o,p/o,1.2.12,1.3,p/o,1.3,p/o,1.3,1.3,p/o,p/o,p/o,p/o,1.3,p/o,p/o,1.3,1.2.11⁸ (bundled with Python),1.2.11⁸ (bundled with Python) bzip2,1.0.8,1.0.8,1.0.8,1.0.8,1.0.8,1.0.8,p/o,p/o,1.0.8,p/o,p/o,1.0.8,1.0.8,1.0.8,1.0.8,p/o,p/o,p/o,p/o,1.0.8,1.0.8,1.0.8,1.0.8,1.0.6 (bundled with Python),1.0.6 (bundled with Python) libffi,3.4.4,3.4.2,3.4.4,p/o,3.4.4,3.4.4,3.4.2,3.4.2,3.4.2,p/o,p/o,3.4.4,p/o,3.4.4,3.4.4,n/a,n/a,3.4.2,3.4.2,p/o,p/o,p/o,p/o,n/a,n/a -libedit,n/a,n/a,n/a,n/a,20170329-3.1,n/a,20170329-3.1,20170329-3.1,n/a,20170329-3.1,20170329-3.1,n/a,20170329-3.1,n/a,n/a,n/a,20170329-3.1,20170329-3.1,20170329-3.1,n/a,20170329-3.1,20170329-3.1,n/a,n/a,n/a +libedit,n/a,n/a,n/a,n/a,20170329-3.1,n/a,20170329-3.1,20170329-3.1,n/a,n/a,20170329-3.1,n/a,20170329-3.1,n/a,n/a,n/a,20170329-3.1,20170329-3.1,20170329-3.1,n/a,20170329-3.1,20170329-3.1,n/a,n/a,n/a pysqlite,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,2.8.3,"n/a, upstream sqlite3 is used","n/a, upstream sqlite3 is used" pip,20.3.4¹⁴,9.0.3¹⁴,20.3.4chevah1,20.3.4chevah1,20.3.4chevah1,20.3.4chevah1,9.0.3¹⁴,20.3.4chevah1,20.3.4¹⁴,20.3.4chevah1,9.0.3¹⁴,20.3.4chevah1,20.3.4chevah1,20.3.4chevah1,20.3.4chevah1,20.3.4¹⁴,9.0.3¹⁴,20.3.4¹⁴,20.3.4chevah1,20.3.4chevah1,20.3.4chevah1,20.3.4chevah1,20.3.4chevah1,20.3.4¹⁴,20.3.4chevah1 -setuptools,44.1.1,44.1.1,44.1.1,44.1.1,44.1.1,44.1.1,44.1.1,44.1.1,44.1.1,44.1.1,44.1.1,44.1.1,44.1.1,44.1.1,44.1.1,41.6.0,41.6.0,41.6.0,44.1.1,44.1.1,44.1.1,44.1.1,44.1.1,44.1.1,44.1.1 -wheel,0.36.2,0.33.6,0.37.0,0.37.0,0.37.0,0.37.0,0.33.6,0.37.0,0.36.2,0.37.0,0.33.6,0.37.0,0.37.0,0.37.0,0.37.0,0.36.2,0.33.6,0.36.2,0.37.0,0.37.0,0.37.0,0.37.0,0.37.0,0.36.2,0.37.0 +setuptools,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,41.6.0¹⁷,41.6.0¹⁷,41.6.0¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷,44.1.1¹⁷ pycparser,2.20,2.20,2.21,2.21,2.21,2.21,2.20,2.21,2.20,2.21,2.20,2.21,2.21,2.21,2.21,2.20,2.20,2.20,2.21,2.21,2.21,2.21,2.21,2.20,2.21 setproctitle,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10,1.1.10 -cryptography,3.2.1¹²,2.9.2¹²,3.2.1¹²,3.3.2,3.3.2,3.3.2,2.9.2¹²,3.3.2,n/a,3.3.2,2.9.2¹² (wheel includes OpenSSL),3.3.2,3.3.2,3.3.2,3.3.2,n/a,n/a,n/a,3.2.1¹²,3.3.2,3.3.2,3.3.2,3.3.2,2.9.2¹² (wheel includes OpenSSL),3.3.2 +cryptography,3.2.1¹²,2.9.2¹²,3.2.1¹⁶,3.3.2¹⁶,3.3.2¹⁶,3.3.2¹⁶,2.9.2¹²,3.3.2¹⁶,n/a,3.3.2¹⁶,2.9.2¹² (wheel includes OpenSSL),3.3.2¹⁶,3.3.2¹⁶,3.3.2¹⁶,3.3.2¹⁶,n/a,n/a,n/a,3.2.1¹²,3.3.2¹⁶,3.3.2¹⁶,3.3.2¹⁶,3.3.2¹⁶,2.9.2¹² (wheel includes OpenSSL),3.3.2¹⁶ six,1.15.0,1.13.0,1.15.0,1.15.0,1.15.0,1.15.0,1.11.0,1.15.0,1.15.0,1.15.0,1.11.0,1.15.0,1.15.0,1.15.0,1.15.0,1.15.0,1.11.0,1.15.0,1.15.0,1.11.0,1.11.0,1.11.0,1.11.0,1.11.0,1.11.0 ipaddress,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,n/a,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,n/a,n/a,n/a,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23,1.0.23 cffi,1.14.5,1.14.0,1.15.1,1.15.1,1.15.1,1.15.1,1.14.0,1.15.1,n/a,1.15.1,1.14.0,1.15.1,1.15.1,1.15.1,1.15.1,n/a,1.14.0,1.14.5,1.15.1,1.15.1,1.15.1,1.15.1,1.15.1,1.14.0,1.15.1 @@ -39,7 +38,7 @@ enum34,1.1.10,1.1.6,1.1.10,1.1.10,1.1.10,1.1.10,1.1.6,1.1.10,n/a,1.1.10,1.1.6,1. idna,n/a,2.6,n/a,n/a,n/a,n/a,2.6,n/a,n/a,n/a,2.6,n/a,n/a,n/a,n/a,n/a,2.6,n/a,n/a,n/a,n/a,n/a,n/a,2.6,n/a pyOpenSSL,19.1.0,19.1.0,19.1.0,21.0.0,21.0.0,21.0.0,19.1.0,21.0.0,0.13.1⁷,21.0.0,19.1.0,21.0.0,21.0.0,21.0.0,21.0.0,0.13.1⁷,0.13.1⁷,0.13.1⁷,19.1.0,21.0.0,21.0.0,21.0.0,21.0.0,19.1.0,21.0.0 scandir,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0,1.10.0 -psutil,n/a,5.6.5,5.9.3,5.9.3,5.9.3,5.9.3,n/a,5.9.2,n/a,5.9.3,5.6.5,5.9.3,5.9.3,5.9.3,5.9.3,n/a,n/a,n/a,5.9.2,5.9.3,5.9.3,5.9.3,5.9.3,n/a,5.9.3 +psutil,n/a,5.6.5,5.9.5,5.9.5,5.9.5,5.9.5,n/a,5.9.2,n/a,5.9.5,5.6.5,5.9.5,5.9.5,5.9.5,5.9.5,n/a,n/a,n/a,5.9.2,5.9.5,5.9.5,5.9.5,5.9.5,n/a,5.9.5 subprocess32,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4,3.5.4 bcrypt,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,n/a,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7,3.1.7 pywin32,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,n/a,,n/a,227,228 @@ -57,5 +56,8 @@ Colour codes:,DARKGREY: Tier 2 platforms and their problematic dependencies,,,,, ,,,,,,,,,,,,10. https://www.openssl.org/news/openssl-1.1.1-notes.html,,,,,,,,,,,,, ,,,,,,,,,,,,11. https://github.com/ActiveState/cpython/tags,,,,,,,,,,,,, ,,,,,,,,,,,,12. https://cryptography.io/en/latest/changelog.html,,,,,,,,,,,,, -,,,,,,,,,,,,"13. On Windows, the upstream Python 2.7.18 packages are hot patched with all the ActivePython fixes except CVE-2021-3177 and CVE-2020-10735",,,,,,,,,,,,, +,,,,,,,,,,,,"13. On Windows, the upstream Python 2.7.18 packages are hot patched for all known issues except CVE-2021-3177 and CVE-2020-10735",,,,,,,,,,,,, ,,,,,,,,,,,,14. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3572,,,,,,,,,,,,, +,,,,,,,,,,,,15. Corresponds to upstream OpenSSL version 1.0.2zg from 07 Feb 2023.,,,,,,,,,,,,, +,,,,,,,,,,,,"16. Both cryptography 3.2.1 and version 3.3.2 have been patched for CVE-2023-23931, but not for CVE-2023-38325.",,,,,,,,,,,,, +,,,,,,,,,,,,17. Versions older than 65.5.1 are vulnerable to CVE-2022-40897.,,,,,,,,,,,,, diff --git a/external_deps.fods b/external_deps.fods index bea79aa2b..3752d24ba 100644 --- a/external_deps.fods +++ b/external_deps.fods @@ -1,20 +1,20 @@ - LibreOffice/7.4.3.2$Linux_X86_64 LibreOffice_project/40$Build-2139PT8H33M6Spython-package - external dependencies and associated vulnerabilities2023-02-08T13:01:47.997122665 + LibreOffice/7.6.2.1$Linux_X86_64 LibreOffice_project/56f7684011345957bbf33a7ee678afaf4d2ba333151PT9H17M48Spython-package - external dependencies and associated vulnerabilities2023-10-10T11:39:47.776983843 0 0 - 46625 - 22571 + 49331 + 24070 view1 - 25 - 5 + 3 + 2 2 2 1 @@ -29,21 +29,25 @@ 60 true false + false + false + false Sheet1 - 1847 + 1906 0 100 60 false true true + false true 12632256 true - true 1 + true true false false @@ -54,6 +58,9 @@ 1 true false + false + false + false @@ -96,7 +103,7 @@ false Generic Printer false - oAH+/0dlbmVyaWMgUHJpbnRlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU0dFTlBSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAMAwQAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9R2VuZXJpYyBQcmludGVyCm9yaWVudGF0aW9uPVBvcnRyYWl0CmNvcGllcz0xCmNvbGxhdGU9ZmFsc2UKbWFyZ2luYWRqdXN0bWVudD0wLDAsMCwwCmNvbG9yZGVwdGg9MjQKcHNsZXZlbD0wCnBkZmRldmljZT0xCmNvbG9yZGV2aWNlPTAKUFBEQ29udGV4dERhdGEKRHVwbGV4Ok5vbmUAUGFnZVNpemU6QTQAABIAQ09NUEFUX0RVUExFWF9NT0RFDwBEdXBsZXhNb2RlOjpPZmY= + 1gH+/0dlbmVyaWMgUHJpbnRlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU0dFTlBSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAMAwgAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9R2VuZXJpYyBQcmludGVyCm9yaWVudGF0aW9uPVBvcnRyYWl0CmNvcGllcz0xCmNvbGxhdGU9ZmFsc2UKbWFyZ2luYWRqdXN0bWVudD0wLDAsJzAsMApjb2xvcmRlcHRoPTI0CnBzbGV2ZWw9MApwZGZkZXZpY2U9MQpjb2xvcmRldmljZT0wClBQRENvbnRleHREYXRhClBhZ2VTaXplOkE0AER1cGxleDpOb25lAAASAENPTVBBVF9EVVBMRVhfTU9ERQ8ARHVwbGV4TW9kZTo6T2ZmDABQUklOVEVSX05BTUUPAEdlbmVyaWMgUHJpbnRlcgsARFJJVkVSX05BTUUHAFNHRU5QUlQ= false 1000 1000 @@ -104,6 +111,7 @@ 1 true false + false true true true @@ -126,213 +134,227 @@ + + - + + + + + + + + + + + + + - + $ - + - $ - + - + : - + : : - + : - + - + - + - - + - + lei - + - lei - + - + - + - - + - - + - - - + + + - + lei - + - lei - + - lei - + - - - + + + - + - + - - + - + lei - + - lei - + - lei - + - - - + + + - + . . - + lei - + - lei - + - + - + - - + - + . - + - + - - + - + : - + lei - + - lei - + - + : @@ -341,40 +363,40 @@ - + lei - + - lei - + - + - + - - + - - + - - - + + + - + . @@ -440,591 +462,604 @@ - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + - - + + - + - - + + - + - - + + - + - - + + - + - - + + + + + + + + + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + + + + + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - - - - - - + - - + + - + - - + + - + - - + + - + - + - + - - + + - + - - + + - + + + + + + - - + + + + + + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - - - - - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - - - - - - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - - + + - - - - - - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - - - - - - + - - - - - - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - - - - - - + + - + - - + + - + - - - - - - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - - - - - - + + - + - - + + + + + + + + + + + - + + + + + + + + + + - + + + - + + + + + + + + + + + + @@ -1058,122 +1093,178 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + ??? + + + + + Page 1 + + + + + + + + ???(???) + + + 00/00/0000, 00:00:00 + + + + + + Page 1/ 99 + + + + + @@ -1196,11 +1287,11 @@ - + + - @@ -1220,11 +1311,11 @@ OS - + AIX - - + + Amazon @@ -1266,2113 +1357,2042 @@ Windows - - + + - + OS Version - 5.3³ + 5.3³ - 6.1³ + 6.1³ - + 7.1+¹ - + 2+¹ - + 3.12+¹ - 5.0+² + 5.0+² - 11.4³ + 11.4³ - 12.2+³ + 12.2+³ - 11.31³ + 11.31³ - + 10.13+¹ - 10.8³ + 10.8³ - + 5.11-7.x¹ - + 8.x¹ - + 9.x¹ - 11SP4+² + 11SP4+² - 10u8+³ + 10u8+³ - 11.0/11.1³ + 11.0/11.1³ - 11.2³ + 11.2³ - 11.4³ + 11.4³ - + 14.04/16.04¹ - + 18.04¹ - + 20.04¹ - + 22.04¹ - XP, 2003, 2008³ + XP, 2003, 2008³ - + 2012r2, 2016, 2019, 2022¹ - OpenSSL + OpenSSL - 1.0.2v-chevah2 (statically linked with stdlib “ssl”)1.0.2v-chevah2 (statically linked with cryptography) + 1.0.2v-chevah2 (statically linked with stdlib “ssl”)1.0.2v-chevah2 (statically linked with cryptography) - 1.0.2k (from AIX Web Download Pack Programs) + 1.0.2k (from AIX Web Download Pack Programs) - 1.0.2v-chevah4 (statically linked with stdlib “ssl”)1.0.2v-chevah4 (statically linked with cryptography) + 1.0.2v-chevah5¹⁵ (statically linked with stdlib “ssl”)1.0.2v-chevah5¹⁵ (statically linked with cryptography) - 1.1.1t (statically linked with stdlib “ssl”)1.1.1t (statically linked with cryptography) + 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) - 1.1.1t (statically linked with stdlib “ssl”)1.1.1t (statically linked with cryptography) + 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) - 1.1.1t (statically linked with stdlib “ssl”)1.1.1t (statically linked with cryptography) + 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) - + 1.0.1u - + 1.0.2s - + 1.0.2h - 1.1.1t (statically linked with stdlib “ssl”)1.1.1t (statically linked with cryptography) + 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) - 1.1.1g (statically built for stdlib “ssl”)1.1.1g (bundled with upstream cryptography 2.9.1) + 1.1.1g (statically built for stdlib “ssl”)1.1.1g (bundled with upstream cryptography 2.9.1) - 1.1.1t (statically linked with stdlib “ssl”)1.1.1t (statically linked with cryptography) + 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) - 1.1.1cFIPS /1.1.1k FIPS + 1.1.1cFIPS /1.1.1k FIPS - 1.1.1t (statically linked with stdlib “ssl”)1.1.1t (statically linked with cryptography) + 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) - 1.1.1t (statically linked with stdlib “ssl”)1.1.1t (statically linked with cryptography) + 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) - 1.0.2n (from upstream Oracle patches) + 1.0.2n (from upstream Oracle patches) - + 1.0.0x - + 1.0.1h - 1.0.2o + 1.0.2o - 1.1.1t (statically linked with stdlib “ssl”)1.1.1t (statically linked with cryptography) + 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) - + 1.1.0g - + 1.1.1f - 1.1.1t (statically linked with stdlib “ssl”)1.1.1t (statically linked with cryptography) + 1.1.1w (statically linked with stdlib “ssl”)1.1.1w (statically linked with cryptography) - 1.0.2t (bundled with upstream Python 2.7.18)1.1.1g (bundled with upstream cryptography 2.9.1) + 1.0.2t (bundled with upstream Python 2.7.18)1.1.1g (bundled with upstream cryptography 2.9.1) - 1.0.2t⁹ (bundled with upstream Python 2.7.18)1.1.1t (built from upstream sources for cryptography) + 1.0.2t⁹ (bundled with upstream Python 2.7.18)1.1.1w (built from upstream sources for cryptography) - + Python - + 2.7.18+patches - 2.7.18¹¹ + 2.7.18¹¹ - + 2.7.18+patches - + 2.7.18+patches - 2.7.18¹¹ + 2.7.18¹¹ - + 2.7.18+patches - + 2.7.18+patches - 2.7.18¹¹ + 2.7.18¹¹ - + 2.7.18+patches - + 2.7.18+patches - + 2.7.18+patches - + 2.7.18+patches - 2.7.8 + 2.7.8 - 2.7.18¹¹ + 2.7.18¹¹ - + 2.7.18+patches - + 2.7.18+patches - + 2.7.18+patches - + 2.7.18+patches - + 2.7.18+patches - 2.7.18¹¹ + 2.7.18¹¹ - 2.7.18¹³ + 2.7.18¹³ - + SQLite - + 3.34.1 - + 3.34.1 - - 3.40.1 + + 3.43.1 - - 3.40.1 + + 3.43.1 - + 3.30.1 - + 3.34.1 - - 3.40.1 + + 3.43.1 - + 3.30.1 - - 3.40.1 + + 3.43.1 - - 3.40.1 + + 3.43.1 - - 3.40.1 + + 3.43.1 - + 3.34.1 - + 3.30.1 - + 3.34.1 - - 3.40.1 + + 3.43.1 - - 3.40.1 + + 3.43.1 - 3.30.1 (we overwrite version from upstream Python at build time) + 3.30.1 (we overwrite version from upstream Python at build time) - 3.40.1 (we overwrite version from upstream Python at build time) + 3.43.1 (we overwrite version from upstream Python at build time) - - + + Expat - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.1.0⁵ (bundled with Python 2.7.8) + 2.1.0⁵ (bundled with Python 2.7.8) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - 2.2.8 (bundled with Python) + 2.2.8 (bundled with Python) - - + + zlib - + 1.2.12 - + p/o - - 1.2.13 - - - 1.2.13 + + 1.3 - + p/o - - 1.2.13 + + 1.3 - + p/o - + p/o - + 1.2.12 - - p/o + + 1.3 - + p/o - - 1.2.13 + + 1.3 - + p/o - - 1.2.13 - - - 1.2.13 + + 1.3 - + p/o - + p/o - + p/o - - 1.2.13 + + 1.3 - + p/o - - 1.2.13 + + 1.3 - 1.2.11 (bundled with Python) + 1.2.11 (bundled with Python) - 1.2.11 (bundled with Python) + 1.2.11 (bundled with Python) - + bzip2 - + 1.0.8 - + 1.0.8 - + 1.0.8 - + 1.0.8 - + 1.0.8 - + 1.0.8 - + p/o - + p/o - + 1.0.8 - + p/o - + p/o - + 1.0.8 - + 1.0.8 - + 1.0.8 - + 1.0.8 - + p/o - + p/o - + p/o - + 1.0.8 - + 1.0.8 - + 1.0.8 - 1.0.6 (bundled with Python) + 1.0.6 (bundled with Python) - 1.0.6 (bundled with Python) + 1.0.6 (bundled with Python) - + libffi - + 3.4.4 - + 3.4.2 - + 3.4.4 - + p/o - + 3.4.4 - + 3.4.4 - + 3.4.2 - + 3.4.2 - + 3.4.2 - + p/o - + p/o - + 3.4.4 - + p/o - + 3.4.4 - + 3.4.4 - + n/a - + n/a - + 3.4.2 - + 3.4.2 - + p/o - + p/o - + p/o - + n/a - + n/a - + libedit - + n/a - + n/a - + n/a - + n/a - + 20170329-3.1 - + n/a - + 20170329-3.1 - + 20170329-3.1 - + n/a - - 20170329-3.1 - - + 20170329-3.1 - + n/a - + 20170329-3.1 - + n/a - + n/a - + 20170329-3.1 - + 20170329-3.1 - + n/a - + 20170329-3.1 - + 20170329-3.1 - + n/a - + n/a - + n/a - + pysqlite - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + 2.8.3 - + n/a, upstream sqlite3 is used - - + + pip - 20.3.4¹⁴ + 20.3.4¹⁴ - 9.0.3¹⁴ + 9.0.3¹⁴ - + 20.3.4chevah1 - + 20.3.4chevah1 - + 20.3.4chevah1 - + 20.3.4chevah1 - 9.0.3¹⁴ + 9.0.3¹⁴ - + 20.3.4chevah1 - 20.3.4¹⁴ + 20.3.4¹⁴ - + 20.3.4chevah1 - 9.0.3¹⁴ + 9.0.3¹⁴ - + 20.3.4chevah1 - + 20.3.4chevah1 - + 20.3.4chevah1 - + 20.3.4chevah1 - 20.3.4¹⁴ + 20.3.4¹⁴ - 9.0.3¹⁴ + 9.0.3¹⁴ - 20.3.4¹⁴ + 20.3.4¹⁴ - + 20.3.4chevah1 - + 20.3.4chevah1 - + 20.3.4chevah1 - + 20.3.4chevah1 - 20.3.4¹⁴ + 20.3.4¹⁴ - + 20.3.4chevah1 - - + + setuptools - - 44.1.1 - - - 44.1.1 - - - 44.1.1 - - - 44.1.1 - - - 44.1.1 - - - 44.1.1 - - - 44.1.1 - - - 44.1.1 - - - 44.1.1 - - - 44.1.1 - - - 44.1.1 - - - 44.1.1 - - - 44.1.1 - - - 41.6.0 - - - 41.6.0 - - - 44.1.1 - - - 44.1.1 - - - 44.1.1 - - - 44.1.1 + 44.1.1¹⁷ - - 44.1.1 + 44.1.1¹⁷ - - 44.1.1 + 44.1.1¹⁷ - - - - - wheel - - - 0.36.2 - - - 0.33.6 + 44.1.1¹⁷ - - 0.37.0 + 44.1.1¹⁷ - - 0.37.0 + 44.1.1¹⁷ - - 0.37.0 + 44.1.1¹⁷ - - 0.37.0 + 44.1.1¹⁷ - - 0.33.6 + 44.1.1¹⁷ - - 0.37.0 + 44.1.1¹⁷ - - 0.36.2 + 44.1.1¹⁷ - - 0.37.0 + 44.1.1¹⁷ - - 0.33.6 + 44.1.1¹⁷ - - 0.37.0 + 44.1.1¹⁷ - - 0.37.0 + 44.1.1¹⁷ - - 0.37.0 + 41.6.0¹⁷ - - 0.37.0 + 41.6.0¹⁷ - - 0.36.2 + 41.6.0¹⁷ - - 0.33.6 + 44.1.1¹⁷ - - 0.36.2 + 44.1.1¹⁷ - - 0.37.0 + 44.1.1¹⁷ - - 0.37.0 + 44.1.1¹⁷ - - 0.37.0 + 44.1.1¹⁷ - - 0.37.0 + 44.1.1¹⁷ - - 0.36.2 - - - 0.37.0 + 44.1.1¹⁷ - + pycparser - + 2.20 - + 2.21 - + 2.21 - + 2.20 - + 2.21 - + 2.20 - + 2.21 - + 2.20 - + 2.21 - + 2.21 - + 2.21 - + 2.20 - + 2.21 - + 2.21 - + 2.21 - + 2.20 - + 2.21 - + setproctitle - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + cryptography - 3.2.1¹² + 3.2.1¹² - 2.9.2¹² + 2.9.2¹² - 3.2.1¹² + 3.2.1¹⁶ - - 3.3.2 + 3.3.2¹⁶ - - 3.3.2 + 3.3.2¹⁶ - - 3.3.2 + 3.3.2¹⁶ - 2.9.2¹² + 2.9.2¹² - - 3.3.2 + 3.3.2¹⁶ - + n/a - - 3.3.2 + 3.3.2¹⁶ - 2.9.2¹² (wheel includes OpenSSL) + 2.9.2¹² (wheel includes OpenSSL) - - 3.3.2 + 3.3.2¹⁶ - - 3.3.2 + 3.3.2¹⁶ - - 3.3.2 + 3.3.2¹⁶ - - 3.3.2 + 3.3.2¹⁶ - + n/a - + n/a - 3.2.1¹² + 3.2.1¹² - - 3.3.2 + 3.3.2¹⁶ - - 3.3.2 + 3.3.2¹⁶ - - 3.3.2 + 3.3.2¹⁶ + + 3.3.2¹⁶ - 2.9.2¹² (wheel includes OpenSSL) + 2.9.2¹² (wheel includes OpenSSL) - - 3.3.2 + 3.3.2¹⁶ - + six - + 1.15.0 - + 1.13.0 - + 1.15.0 - + 1.15.0 - + 1.15.0 - + 1.15.0 - + 1.11.0 - + 1.15.0 - + 1.15.0 - + 1.15.0 - + 1.11.0 - + 1.15.0 - + 1.15.0 - + 1.15.0 - + 1.15.0 - + 1.11.0 - + 1.15.0 - + 1.15.0 - + 1.11.0 - + 1.11.0 - + 1.11.0 - + 1.11.0 - + 1.11.0 - + ipaddress - + 1.0.23 - + 1.0.23 - + 1.0.23 - + 1.0.23 - + 1.0.23 - + 1.0.23 - + 1.0.23 - + n/a - + 1.0.23 - + 1.0.23 - + 1.0.23 - + 1.0.23 - + 1.0.23 - + 1.0.23 - + n/a - + n/a - + 1.0.23 - + 1.0.23 - + 1.0.23 - + 1.0.23 - + 1.0.23 - + 1.0.23 - + cffi - + 1.14.5 - + 1.14.0 - + 1.15.1 - + 1.15.1 - + 1.15.1 - + 1.15.1 - + 1.14.0 - + 1.15.1 - + n/a - + 1.15.1 - + 1.14.0 - + 1.15.1 - + 1.15.1 - + 1.15.1 - + 1.15.1 - + n/a - + 1.14.0 - + 1.14.5 - + 1.15.1 - + 1.15.1 - + 1.15.1 - + 1.15.1 - + 1.14.0 - + 1.15.1 - + asn1crypto - + n/a - + 1.2.0 - + n/a - + 1.2.0 - + n/a - + n/a - + 1.2.0 - + n/a - + n/a - + n/a - + n/a - + 1.2.0 - + n/a - + n/a - + n/a - + n/a - + n/a - + 1.2.0 - + n/a - + enum34 - + 1.1.10 - + 1.1.6 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.6 - + 1.1.10 - + n/a - + 1.1.10 - + 1.1.6 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - - - + + + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.10 - + 1.1.6 - + 1.1.10 - + idna - + n/a - + 2.6 - + n/a - + 2.6 - + n/a - + n/a - + 2.6 - + n/a - + n/a - + n/a - + n/a - + 2.6 - + n/a - + n/a - + n/a - + n/a - + n/a - + 2.6 - + n/a - - + + pyOpenSSL - + 19.1.0 - + 19.1.0 - + 19.1.0 - + 21.0.0 - + 21.0.0 - + 21.0.0 - + 19.1.0 - + 21.0.0 - 0.13.1 + 0.13.1 - + 21.0.0 - + 19.1.0 - + 21.0.0 - + 21.0.0 - + 21.0.0 - + 21.0.0 - 0.13.1 + 0.13.1 - 0.13.1 + 0.13.1 - 0.13.1 + 0.13.1 - + 19.1.0 - + 21.0.0 - + 21.0.0 - + 21.0.0 - + 19.1.0 - + 21.0.0 - + scandir - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + 1.10.0 - + psutil - + n/a - + 5.6.5 - - 5.9.3 + + 5.9.5 - - 5.9.3 + + 5.9.5 - - 5.9.3 + + 5.9.5 - - 5.9.3 + + 5.9.5 - + n/a - + 5.9.2 - + n/a - - 5.9.3 + + 5.9.5 - + 5.6.5 - - 5.9.3 + + 5.9.5 - - 5.9.3 + + 5.9.5 - - 5.9.3 + + 5.9.5 - - 5.9.3 + + 5.9.5 - + n/a - + n/a - + 5.9.2 - - 5.9.3 + + 5.9.5 - - 5.9.3 + + 5.9.5 - - 5.9.3 + + 5.9.5 - + n/a - - 5.9.3 + + 5.9.5 - + subprocess32 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + 3.5.4 - + bcrypt - + 3.1.7 - + 3.1.7 - + 3.1.7 - + 3.1.7 - + 3.1.7 - + 3.1.7 - + 3.1.7 - + n/a - + 3.1.7 - + 3.1.7 - + 3.1.7 - + 3.1.7 - + 3.1.7 - + 3.1.7 - + 3.1.7 - + 3.1.7 - + 3.1.7 - + 3.1.7 - + 3.1.7 - + 3.1.7 - + 3.1.7 - + pywin32 - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - + n/a - - + + n/a - + 227 - + 228 - - + + - + Abbreviations: - + n/a: not applicable - - - + + + Notes: - + 0. Dependencies above are listed as per the current build process, not necessarily for the latest released versions of python-package. - + + - - + + p/o: provided with OS - - - - + + + + 1. Tier 1 platforms, fully supported and tested - + + - - + + Colour codes: - DARKGREY: Tier 2 platforms and their problematic dependencies + DARKGREY: Tier 2 platforms and their problematic dependencies - - - - + + + + 2. Tier 2 platforms, partially supported, still built - + + - - - LIGHT GREY: Tier 3 platforms and their problematic dependencies + + + LIGHT GREY: Tier 3 platforms and their problematic dependencies - - - - + + + + 3. Tier 3 platforms, supported at some point, not built any more - + + - - - GREEN: no known vulnerabilities for Tier 1 platforms + + + GREEN: no known vulnerabilities for Tier 1 platforms - - - - + + + + 4. https://www.cvedetails.com/vulnerability-list/vendor_id-10210/product_id-18230/version_id-92056/Python-Python-2.7.html - + + - - - BLUE: possible vulnerabilities found upstream, but no released version has them yet + + + BLUE: possible vulnerabilities found upstream, but no released version has them yet - - - - + + + + 5. https://github.com/libexpat/libexpat/blob/master/expat/Changes - + + - - - ORANGE: minor vulnerabilities found + + + ORANGE: minor vulnerabilities found - - - - + + + + 6. Unless specified otherwise, OpenSSL libs are linked against dynamically - + + - - - RED: major vulnerabilities found + + + RED: major vulnerabilities found - - - - + + + + 7. pyOpenSSL 0.14 and newer is a major rewrite, so it's not clear to what extent their vulnerabilities do apply - + + - - - MAGENTA: vulnerability status could not be established + + + MAGENTA: vulnerability status could not be established - - - + + + 8. https://cve.report/CVE-2018-25032 and https://cve.report/CVE-2022-37434 - + + - - - + + + DEFAULT COLOUR: maintained upstream or not applicable - - - 9. https://www.openssl.org/news/openssl-1.0.2-notes.html + + + 9. https://www.openssl.org/news/openssl-1.0.2-notes.html - + + - - 10. https://www.openssl.org/news/openssl-1.1.1-notes.html + + 10. https://www.openssl.org/news/openssl-1.1.1-notes.html - + + - - 11. https://github.com/ActiveState/cpython/tags + + 11. https://github.com/ActiveState/cpython/tags - + + - - - - + + + + 12. https://cryptography.io/en/latest/changelog.html - + + - - - - 13. On Windows, the upstream Python 2.7.18 packages are hot patched with all the ActivePython fixes except CVE-2021-3177 and CVE-2020-10735 + + + + 13. On Windows, the upstream Python 2.7.18 packages are hot patched for all known issues except CVE-2021-3177 and CVE-2020-10735 - + + - - - - + + + + 14. https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3572 - + + + + + + + + + 15. Corresponds to upstream OpenSSL version 1.0.2zg from 07 Feb 2023. + + + - - - - + + + + + + 16. Both cryptography 3.2.1 and version 3.3.2 have been patched for CVE-2023-23931, but not for CVE-2023-38325. + + + + + + + + + + 17. Versions older than 65.5.1 are vulnerable to CVE-2022-40897. + + + @@ -3381,7 +3401,7 @@ - + diff --git a/python-modules/README b/python-modules/README index e1580d936..abbc3e866 100644 --- a/python-modules/README +++ b/python-modules/README @@ -4,7 +4,7 @@ through the EXTRA_LIBRARIES variable in the "chevah_build" shell script. Patches for these modules should reside in a sub-directory named "lib-${LIB_VERSION}-patches", to be applied when needed during the build. -See the patches for PyCrypto 2.6.1 for an example involving multiple patches +See the patches for `scandir` for an example involving multiple patches to be applied in a predetermined order. For some modules built through PIP we keep source here as well because diff --git a/python-modules/chevah-python-test/test_python_binary_dist.py b/python-modules/chevah-python-test/test_python_binary_dist.py index 59f217cf3..ebcc64795 100644 --- a/python-modules/chevah-python-test/test_python_binary_dist.py +++ b/python-modules/chevah-python-test/test_python_binary_dist.py @@ -433,10 +433,10 @@ def main(): openssl_version = backend.openssl_version_text() if CHEVAH_OS.startswith(("win", "lnx", "macos", "aix")): # On some OS'es we build against our own OpenSSL. - expecting = u'OpenSSL 1.1.1t 7 Feb 2023' + expecting = u'OpenSSL 1.1.1w 11 Sep 2023' if CHEVAH_OS.startswith("aix"): # On AIX we are stuck with a patched 1.0.2. - expecting = u'OpenSSL 1.0.2v-chevah4 06 Apr 2022' + expecting = u'OpenSSL 1.0.2v-chevah5 21 Sep 2023' if openssl_version != expecting: sys.stderr.write('Expecting %s, got %s.\n' % ( expecting, openssl_version)) diff --git a/python-modules/cryptography-3.2.1-patches/CVE-2023-23931.patch b/python-modules/cryptography-3.2.1-patches/CVE-2023-23931.patch new file mode 100644 index 000000000..69a3a32f4 --- /dev/null +++ b/python-modules/cryptography-3.2.1-patches/CVE-2023-23931.patch @@ -0,0 +1,32 @@ +diff --git src/cryptography/hazmat/backends/openssl/ciphers.py src/cryptography/hazmat/backends/openssl/ciphers.py +index 286583f9325..075d68fb905 100644 +--- src/cryptography/hazmat/backends/openssl/ciphers.py ++++ src/cryptography/hazmat/backends/openssl/ciphers.py +@@ -156,7 +156,7 @@ def update_into(self, data: bytes, buf: bytes) -> int: + data_processed = 0 + total_out = 0 + outlen = self._backend._ffi.new("int *") +- baseoutbuf = self._backend._ffi.from_buffer(buf) ++ baseoutbuf = self._backend._ffi.from_buffer(buf, require_writable=True) + baseinbuf = self._backend._ffi.from_buffer(data) + + while data_processed != total_data_len: +diff --git tests/hazmat/primitives/test_ciphers.py tests/hazmat/primitives/test_ciphers.py +index 02127dd9cab..bf3b047dec2 100644 +--- tests/hazmat/primitives/test_ciphers.py ++++ tests/hazmat/primitives/test_ciphers.py +@@ -318,6 +318,14 @@ def test_update_into_buffer_too_small(self, backend): + with pytest.raises(ValueError): + encryptor.update_into(b"testing", buf) + ++ def test_update_into_immutable(self, backend): ++ key = b"\x00" * 16 ++ c = ciphers.Cipher(AES(key), modes.ECB(), backend) ++ encryptor = c.encryptor() ++ buf = b"\x00" * 32 ++ with pytest.raises((TypeError, BufferError)): ++ encryptor.update_into(b"testing", buf) ++ + @pytest.mark.supported( + only_if=lambda backend: backend.cipher_supported( + AES(b"\x00" * 16), modes.GCM(b"\x00" * 12) diff --git a/src/openssl/openssl-1.0.2v-chevah4/.travis-create-release.sh b/src/openssl/openssl-1.0.2v-chevah5/.travis-create-release.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/.travis-create-release.sh rename to src/openssl/openssl-1.0.2v-chevah5/.travis-create-release.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/ACKNOWLEDGMENTS b/src/openssl/openssl-1.0.2v-chevah5/ACKNOWLEDGMENTS similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ACKNOWLEDGMENTS rename to src/openssl/openssl-1.0.2v-chevah5/ACKNOWLEDGMENTS diff --git a/src/openssl/openssl-1.0.2v-chevah4/CHANGES b/src/openssl/openssl-1.0.2v-chevah5/CHANGES similarity index 99% rename from src/openssl/openssl-1.0.2v-chevah4/CHANGES rename to src/openssl/openssl-1.0.2v-chevah5/CHANGES index ae703712c..5788fa096 100644 --- a/src/openssl/openssl-1.0.2v-chevah4/CHANGES +++ b/src/openssl/openssl-1.0.2v-chevah5/CHANGES @@ -7,6 +7,10 @@ https://github.com/openssl/openssl/commits/ and pick the appropriate release branch. + Changes between 1.0.2v-chevah4 and 1.0.2v-chevah5 [21 Sep 2023] + + *) Fixed address type confusion in X.509 GeneralName (CVE-2023-0286). + Changes between 1.0.2v-chevah3 and 1.0.2v-chevah4 [06 Apr 2022] *) Fixed infinite loop in BN_mod_sqrt() (CVE-2022-0778). diff --git a/src/openssl/openssl-1.0.2v-chevah4/CHANGES.SSLeay b/src/openssl/openssl-1.0.2v-chevah5/CHANGES.SSLeay similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/CHANGES.SSLeay rename to src/openssl/openssl-1.0.2v-chevah5/CHANGES.SSLeay diff --git a/src/openssl/openssl-1.0.2v-chevah4/CONTRIBUTING b/src/openssl/openssl-1.0.2v-chevah5/CONTRIBUTING similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/CONTRIBUTING rename to src/openssl/openssl-1.0.2v-chevah5/CONTRIBUTING diff --git a/src/openssl/openssl-1.0.2v-chevah4/Configure b/src/openssl/openssl-1.0.2v-chevah5/Configure similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/Configure rename to src/openssl/openssl-1.0.2v-chevah5/Configure diff --git a/src/openssl/openssl-1.0.2v-chevah4/FAQ b/src/openssl/openssl-1.0.2v-chevah5/FAQ similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/FAQ rename to src/openssl/openssl-1.0.2v-chevah5/FAQ diff --git a/src/openssl/openssl-1.0.2v-chevah4/GitConfigure b/src/openssl/openssl-1.0.2v-chevah5/GitConfigure similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/GitConfigure rename to src/openssl/openssl-1.0.2v-chevah5/GitConfigure diff --git a/src/openssl/openssl-1.0.2v-chevah4/GitMake b/src/openssl/openssl-1.0.2v-chevah5/GitMake similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/GitMake rename to src/openssl/openssl-1.0.2v-chevah5/GitMake diff --git a/src/openssl/openssl-1.0.2v-chevah4/INSTALL b/src/openssl/openssl-1.0.2v-chevah5/INSTALL similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/INSTALL rename to src/openssl/openssl-1.0.2v-chevah5/INSTALL diff --git a/src/openssl/openssl-1.0.2v-chevah4/INSTALL.DJGPP b/src/openssl/openssl-1.0.2v-chevah5/INSTALL.DJGPP similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/INSTALL.DJGPP rename to src/openssl/openssl-1.0.2v-chevah5/INSTALL.DJGPP diff --git a/src/openssl/openssl-1.0.2v-chevah4/INSTALL.MacOS b/src/openssl/openssl-1.0.2v-chevah5/INSTALL.MacOS similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/INSTALL.MacOS rename to src/openssl/openssl-1.0.2v-chevah5/INSTALL.MacOS diff --git a/src/openssl/openssl-1.0.2v-chevah4/INSTALL.NW b/src/openssl/openssl-1.0.2v-chevah5/INSTALL.NW similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/INSTALL.NW rename to src/openssl/openssl-1.0.2v-chevah5/INSTALL.NW diff --git a/src/openssl/openssl-1.0.2v-chevah4/INSTALL.OS2 b/src/openssl/openssl-1.0.2v-chevah5/INSTALL.OS2 similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/INSTALL.OS2 rename to src/openssl/openssl-1.0.2v-chevah5/INSTALL.OS2 diff --git a/src/openssl/openssl-1.0.2v-chevah4/INSTALL.VMS b/src/openssl/openssl-1.0.2v-chevah5/INSTALL.VMS similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/INSTALL.VMS rename to src/openssl/openssl-1.0.2v-chevah5/INSTALL.VMS diff --git a/src/openssl/openssl-1.0.2v-chevah4/INSTALL.W32 b/src/openssl/openssl-1.0.2v-chevah5/INSTALL.W32 similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/INSTALL.W32 rename to src/openssl/openssl-1.0.2v-chevah5/INSTALL.W32 diff --git a/src/openssl/openssl-1.0.2v-chevah4/INSTALL.W64 b/src/openssl/openssl-1.0.2v-chevah5/INSTALL.W64 similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/INSTALL.W64 rename to src/openssl/openssl-1.0.2v-chevah5/INSTALL.W64 diff --git a/src/openssl/openssl-1.0.2v-chevah4/INSTALL.WCE b/src/openssl/openssl-1.0.2v-chevah5/INSTALL.WCE similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/INSTALL.WCE rename to src/openssl/openssl-1.0.2v-chevah5/INSTALL.WCE diff --git a/src/openssl/openssl-1.0.2v-chevah4/LICENSE b/src/openssl/openssl-1.0.2v-chevah5/LICENSE similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/LICENSE rename to src/openssl/openssl-1.0.2v-chevah5/LICENSE diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/GUSI_Init.cpp b/src/openssl/openssl-1.0.2v-chevah5/MacOS/GUSI_Init.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/GUSI_Init.cpp rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/GUSI_Init.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/GetHTTPS.src/CPStringUtils.cpp b/src/openssl/openssl-1.0.2v-chevah5/MacOS/GetHTTPS.src/CPStringUtils.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/GetHTTPS.src/CPStringUtils.cpp rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/GetHTTPS.src/CPStringUtils.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/GetHTTPS.src/CPStringUtils.hpp b/src/openssl/openssl-1.0.2v-chevah5/MacOS/GetHTTPS.src/CPStringUtils.hpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/GetHTTPS.src/CPStringUtils.hpp rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/GetHTTPS.src/CPStringUtils.hpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/GetHTTPS.src/ErrorHandling.cpp b/src/openssl/openssl-1.0.2v-chevah5/MacOS/GetHTTPS.src/ErrorHandling.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/GetHTTPS.src/ErrorHandling.cpp rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/GetHTTPS.src/ErrorHandling.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/GetHTTPS.src/ErrorHandling.hpp b/src/openssl/openssl-1.0.2v-chevah5/MacOS/GetHTTPS.src/ErrorHandling.hpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/GetHTTPS.src/ErrorHandling.hpp rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/GetHTTPS.src/ErrorHandling.hpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/GetHTTPS.src/GetHTTPS.cpp b/src/openssl/openssl-1.0.2v-chevah5/MacOS/GetHTTPS.src/GetHTTPS.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/GetHTTPS.src/GetHTTPS.cpp rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/GetHTTPS.src/GetHTTPS.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/GetHTTPS.src/MacSocket.cpp b/src/openssl/openssl-1.0.2v-chevah5/MacOS/GetHTTPS.src/MacSocket.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/GetHTTPS.src/MacSocket.cpp rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/GetHTTPS.src/MacSocket.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/GetHTTPS.src/MacSocket.h b/src/openssl/openssl-1.0.2v-chevah5/MacOS/GetHTTPS.src/MacSocket.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/GetHTTPS.src/MacSocket.h rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/GetHTTPS.src/MacSocket.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/OpenSSL.mcp.hqx b/src/openssl/openssl-1.0.2v-chevah5/MacOS/OpenSSL.mcp.hqx similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/OpenSSL.mcp.hqx rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/OpenSSL.mcp.hqx diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/Randomizer.cpp b/src/openssl/openssl-1.0.2v-chevah5/MacOS/Randomizer.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/Randomizer.cpp rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/Randomizer.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/Randomizer.h b/src/openssl/openssl-1.0.2v-chevah5/MacOS/Randomizer.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/Randomizer.h rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/Randomizer.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/TODO b/src/openssl/openssl-1.0.2v-chevah5/MacOS/TODO similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/TODO rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/TODO diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/_MWERKS_GUSI_prefix.h b/src/openssl/openssl-1.0.2v-chevah5/MacOS/_MWERKS_GUSI_prefix.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/_MWERKS_GUSI_prefix.h rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/_MWERKS_GUSI_prefix.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/_MWERKS_prefix.h b/src/openssl/openssl-1.0.2v-chevah5/MacOS/_MWERKS_prefix.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/_MWERKS_prefix.h rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/_MWERKS_prefix.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/buildinf.h b/src/openssl/openssl-1.0.2v-chevah5/MacOS/buildinf.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/buildinf.h rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/buildinf.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/mklinks.as.hqx b/src/openssl/openssl-1.0.2v-chevah5/MacOS/mklinks.as.hqx similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/mklinks.as.hqx rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/mklinks.as.hqx diff --git a/src/openssl/openssl-1.0.2v-chevah4/MacOS/opensslconf.h b/src/openssl/openssl-1.0.2v-chevah5/MacOS/opensslconf.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/MacOS/opensslconf.h rename to src/openssl/openssl-1.0.2v-chevah5/MacOS/opensslconf.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/Makefile.org b/src/openssl/openssl-1.0.2v-chevah5/Makefile.org similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/Makefile.org rename to src/openssl/openssl-1.0.2v-chevah5/Makefile.org diff --git a/src/openssl/openssl-1.0.2v-chevah4/Makefile.shared b/src/openssl/openssl-1.0.2v-chevah5/Makefile.shared similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/Makefile.shared rename to src/openssl/openssl-1.0.2v-chevah5/Makefile.shared diff --git a/src/openssl/openssl-1.0.2v-chevah4/NEWS b/src/openssl/openssl-1.0.2v-chevah5/NEWS similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/NEWS rename to src/openssl/openssl-1.0.2v-chevah5/NEWS diff --git a/src/openssl/openssl-1.0.2v-chevah4/Netware/build.bat b/src/openssl/openssl-1.0.2v-chevah5/Netware/build.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/Netware/build.bat rename to src/openssl/openssl-1.0.2v-chevah5/Netware/build.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/Netware/cpy_tests.bat b/src/openssl/openssl-1.0.2v-chevah5/Netware/cpy_tests.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/Netware/cpy_tests.bat rename to src/openssl/openssl-1.0.2v-chevah5/Netware/cpy_tests.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/Netware/do_tests.pl b/src/openssl/openssl-1.0.2v-chevah5/Netware/do_tests.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/Netware/do_tests.pl rename to src/openssl/openssl-1.0.2v-chevah5/Netware/do_tests.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/Netware/globals.txt b/src/openssl/openssl-1.0.2v-chevah5/Netware/globals.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/Netware/globals.txt rename to src/openssl/openssl-1.0.2v-chevah5/Netware/globals.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/Netware/readme.txt b/src/openssl/openssl-1.0.2v-chevah5/Netware/readme.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/Netware/readme.txt rename to src/openssl/openssl-1.0.2v-chevah5/Netware/readme.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/Netware/set_env.bat b/src/openssl/openssl-1.0.2v-chevah5/Netware/set_env.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/Netware/set_env.bat rename to src/openssl/openssl-1.0.2v-chevah5/Netware/set_env.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/PROBLEMS b/src/openssl/openssl-1.0.2v-chevah5/PROBLEMS similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/PROBLEMS rename to src/openssl/openssl-1.0.2v-chevah5/PROBLEMS diff --git a/src/openssl/openssl-1.0.2v-chevah4/README b/src/openssl/openssl-1.0.2v-chevah5/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/README rename to src/openssl/openssl-1.0.2v-chevah5/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/README.ASN1 b/src/openssl/openssl-1.0.2v-chevah5/README.ASN1 similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/README.ASN1 rename to src/openssl/openssl-1.0.2v-chevah5/README.ASN1 diff --git a/src/openssl/openssl-1.0.2v-chevah4/README.ENGINE b/src/openssl/openssl-1.0.2v-chevah5/README.ENGINE similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/README.ENGINE rename to src/openssl/openssl-1.0.2v-chevah5/README.ENGINE diff --git a/src/openssl/openssl-1.0.2v-chevah4/TABLE b/src/openssl/openssl-1.0.2v-chevah5/TABLE similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/TABLE rename to src/openssl/openssl-1.0.2v-chevah5/TABLE diff --git a/src/openssl/openssl-1.0.2v-chevah4/VMS/TODO b/src/openssl/openssl-1.0.2v-chevah5/VMS/TODO similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/VMS/TODO rename to src/openssl/openssl-1.0.2v-chevah5/VMS/TODO diff --git a/src/openssl/openssl-1.0.2v-chevah4/VMS/VMSify-conf.pl b/src/openssl/openssl-1.0.2v-chevah5/VMS/VMSify-conf.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/VMS/VMSify-conf.pl rename to src/openssl/openssl-1.0.2v-chevah5/VMS/VMSify-conf.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/VMS/WISHLIST.TXT b/src/openssl/openssl-1.0.2v-chevah5/VMS/WISHLIST.TXT similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/VMS/WISHLIST.TXT rename to src/openssl/openssl-1.0.2v-chevah5/VMS/WISHLIST.TXT diff --git a/src/openssl/openssl-1.0.2v-chevah4/VMS/install-vms.com b/src/openssl/openssl-1.0.2v-chevah5/VMS/install-vms.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/VMS/install-vms.com rename to src/openssl/openssl-1.0.2v-chevah5/VMS/install-vms.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/VMS/mkshared.com b/src/openssl/openssl-1.0.2v-chevah5/VMS/mkshared.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/VMS/mkshared.com rename to src/openssl/openssl-1.0.2v-chevah5/VMS/mkshared.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/VMS/multinet_shr.opt b/src/openssl/openssl-1.0.2v-chevah5/VMS/multinet_shr.opt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/VMS/multinet_shr.opt rename to src/openssl/openssl-1.0.2v-chevah5/VMS/multinet_shr.opt diff --git a/src/openssl/openssl-1.0.2v-chevah4/VMS/openssl_startup.com b/src/openssl/openssl-1.0.2v-chevah5/VMS/openssl_startup.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/VMS/openssl_startup.com rename to src/openssl/openssl-1.0.2v-chevah5/VMS/openssl_startup.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/VMS/openssl_undo.com b/src/openssl/openssl-1.0.2v-chevah5/VMS/openssl_undo.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/VMS/openssl_undo.com rename to src/openssl/openssl-1.0.2v-chevah5/VMS/openssl_undo.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/VMS/openssl_utils.com b/src/openssl/openssl-1.0.2v-chevah5/VMS/openssl_utils.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/VMS/openssl_utils.com rename to src/openssl/openssl-1.0.2v-chevah5/VMS/openssl_utils.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/VMS/socketshr_shr.opt b/src/openssl/openssl-1.0.2v-chevah5/VMS/socketshr_shr.opt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/VMS/socketshr_shr.opt rename to src/openssl/openssl-1.0.2v-chevah5/VMS/socketshr_shr.opt diff --git a/src/openssl/openssl-1.0.2v-chevah4/VMS/tcpip_shr_decc.opt b/src/openssl/openssl-1.0.2v-chevah5/VMS/tcpip_shr_decc.opt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/VMS/tcpip_shr_decc.opt rename to src/openssl/openssl-1.0.2v-chevah5/VMS/tcpip_shr_decc.opt diff --git a/src/openssl/openssl-1.0.2v-chevah4/VMS/test-includes.com b/src/openssl/openssl-1.0.2v-chevah5/VMS/test-includes.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/VMS/test-includes.com rename to src/openssl/openssl-1.0.2v-chevah5/VMS/test-includes.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/VMS/ucx_shr_decc.opt b/src/openssl/openssl-1.0.2v-chevah5/VMS/ucx_shr_decc.opt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/VMS/ucx_shr_decc.opt rename to src/openssl/openssl-1.0.2v-chevah5/VMS/ucx_shr_decc.opt diff --git a/src/openssl/openssl-1.0.2v-chevah4/VMS/ucx_shr_decc_log.opt b/src/openssl/openssl-1.0.2v-chevah5/VMS/ucx_shr_decc_log.opt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/VMS/ucx_shr_decc_log.opt rename to src/openssl/openssl-1.0.2v-chevah5/VMS/ucx_shr_decc_log.opt diff --git a/src/openssl/openssl-1.0.2v-chevah4/VMS/ucx_shr_vaxc.opt b/src/openssl/openssl-1.0.2v-chevah5/VMS/ucx_shr_vaxc.opt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/VMS/ucx_shr_vaxc.opt rename to src/openssl/openssl-1.0.2v-chevah5/VMS/ucx_shr_vaxc.opt diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/CA.com b/src/openssl/openssl-1.0.2v-chevah5/apps/CA.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/CA.com rename to src/openssl/openssl-1.0.2v-chevah5/apps/CA.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/CA.pl.in b/src/openssl/openssl-1.0.2v-chevah5/apps/CA.pl.in similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/CA.pl.in rename to src/openssl/openssl-1.0.2v-chevah5/apps/CA.pl.in diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/CA.sh b/src/openssl/openssl-1.0.2v-chevah5/apps/CA.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/CA.sh rename to src/openssl/openssl-1.0.2v-chevah5/apps/CA.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/Makefile b/src/openssl/openssl-1.0.2v-chevah5/apps/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/apps/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/app_rand.c b/src/openssl/openssl-1.0.2v-chevah5/apps/app_rand.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/app_rand.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/app_rand.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/apps.c b/src/openssl/openssl-1.0.2v-chevah5/apps/apps.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/apps.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/apps.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/apps.h b/src/openssl/openssl-1.0.2v-chevah5/apps/apps.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/apps.h rename to src/openssl/openssl-1.0.2v-chevah5/apps/apps.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/asn1pars.c b/src/openssl/openssl-1.0.2v-chevah5/apps/asn1pars.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/asn1pars.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/asn1pars.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/ca-cert.srl b/src/openssl/openssl-1.0.2v-chevah5/apps/ca-cert.srl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/ca-cert.srl rename to src/openssl/openssl-1.0.2v-chevah5/apps/ca-cert.srl diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/ca-key.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/ca-key.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/ca-key.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/ca-key.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/ca-req.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/ca-req.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/ca-req.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/ca-req.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/ca.c b/src/openssl/openssl-1.0.2v-chevah5/apps/ca.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/ca.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/ca.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/cert.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/cert.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/cert.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/cert.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/ciphers.c b/src/openssl/openssl-1.0.2v-chevah5/apps/ciphers.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/ciphers.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/ciphers.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/client.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/client.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/client.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/client.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/cms.c b/src/openssl/openssl-1.0.2v-chevah5/apps/cms.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/cms.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/cms.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/crl.c b/src/openssl/openssl-1.0.2v-chevah5/apps/crl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/crl.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/crl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/crl2p7.c b/src/openssl/openssl-1.0.2v-chevah5/apps/crl2p7.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/crl2p7.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/crl2p7.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/demoCA/cacert.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/demoCA/cacert.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/demoCA/cacert.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/demoCA/cacert.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/demoCA/index.txt b/src/openssl/openssl-1.0.2v-chevah5/apps/demoCA/index.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/demoCA/index.txt rename to src/openssl/openssl-1.0.2v-chevah5/apps/demoCA/index.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/demoCA/private/cakey.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/demoCA/private/cakey.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/demoCA/private/cakey.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/demoCA/private/cakey.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/demoCA/serial b/src/openssl/openssl-1.0.2v-chevah5/apps/demoCA/serial similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/demoCA/serial rename to src/openssl/openssl-1.0.2v-chevah5/apps/demoCA/serial diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/demoSRP/srp_verifier.txt b/src/openssl/openssl-1.0.2v-chevah5/apps/demoSRP/srp_verifier.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/demoSRP/srp_verifier.txt rename to src/openssl/openssl-1.0.2v-chevah5/apps/demoSRP/srp_verifier.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/demoSRP/srp_verifier.txt.attr b/src/openssl/openssl-1.0.2v-chevah5/apps/demoSRP/srp_verifier.txt.attr similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/demoSRP/srp_verifier.txt.attr rename to src/openssl/openssl-1.0.2v-chevah5/apps/demoSRP/srp_verifier.txt.attr diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/dgst.c b/src/openssl/openssl-1.0.2v-chevah5/apps/dgst.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/dgst.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/dgst.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/dh.c b/src/openssl/openssl-1.0.2v-chevah5/apps/dh.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/dh.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/dh.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/dh1024.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/dh1024.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/dh1024.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/dh1024.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/dh2048.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/dh2048.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/dh2048.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/dh2048.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/dh4096.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/dh4096.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/dh4096.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/dh4096.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/dh512.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/dh512.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/dh512.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/dh512.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/dhparam.c b/src/openssl/openssl-1.0.2v-chevah5/apps/dhparam.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/dhparam.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/dhparam.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/dsa-ca.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/dsa-ca.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/dsa-ca.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/dsa-ca.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/dsa-pca.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/dsa-pca.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/dsa-pca.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/dsa-pca.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/dsa.c b/src/openssl/openssl-1.0.2v-chevah5/apps/dsa.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/dsa.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/dsa.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/dsa1024.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/dsa1024.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/dsa1024.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/dsa1024.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/dsa512.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/dsa512.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/dsa512.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/dsa512.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/dsap.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/dsap.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/dsap.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/dsap.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/dsaparam.c b/src/openssl/openssl-1.0.2v-chevah5/apps/dsaparam.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/dsaparam.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/dsaparam.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/ec.c b/src/openssl/openssl-1.0.2v-chevah5/apps/ec.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/ec.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/ec.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/ecparam.c b/src/openssl/openssl-1.0.2v-chevah5/apps/ecparam.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/ecparam.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/ecparam.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/enc.c b/src/openssl/openssl-1.0.2v-chevah5/apps/enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/enc.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/engine.c b/src/openssl/openssl-1.0.2v-chevah5/apps/engine.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/engine.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/engine.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/errstr.c b/src/openssl/openssl-1.0.2v-chevah5/apps/errstr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/errstr.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/errstr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/gendh.c b/src/openssl/openssl-1.0.2v-chevah5/apps/gendh.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/gendh.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/gendh.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/gendsa.c b/src/openssl/openssl-1.0.2v-chevah5/apps/gendsa.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/gendsa.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/gendsa.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/genpkey.c b/src/openssl/openssl-1.0.2v-chevah5/apps/genpkey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/genpkey.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/genpkey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/genrsa.c b/src/openssl/openssl-1.0.2v-chevah5/apps/genrsa.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/genrsa.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/genrsa.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/install-apps.com b/src/openssl/openssl-1.0.2v-chevah5/apps/install-apps.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/install-apps.com rename to src/openssl/openssl-1.0.2v-chevah5/apps/install-apps.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/makeapps.com b/src/openssl/openssl-1.0.2v-chevah5/apps/makeapps.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/makeapps.com rename to src/openssl/openssl-1.0.2v-chevah5/apps/makeapps.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/nseq.c b/src/openssl/openssl-1.0.2v-chevah5/apps/nseq.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/nseq.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/nseq.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/ocsp.c b/src/openssl/openssl-1.0.2v-chevah5/apps/ocsp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/ocsp.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/ocsp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/oid.cnf b/src/openssl/openssl-1.0.2v-chevah5/apps/oid.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/oid.cnf rename to src/openssl/openssl-1.0.2v-chevah5/apps/oid.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/openssl-vms.cnf b/src/openssl/openssl-1.0.2v-chevah5/apps/openssl-vms.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/openssl-vms.cnf rename to src/openssl/openssl-1.0.2v-chevah5/apps/openssl-vms.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/openssl.c b/src/openssl/openssl-1.0.2v-chevah5/apps/openssl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/openssl.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/openssl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/openssl.cnf b/src/openssl/openssl-1.0.2v-chevah5/apps/openssl.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/openssl.cnf rename to src/openssl/openssl-1.0.2v-chevah5/apps/openssl.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/passwd.c b/src/openssl/openssl-1.0.2v-chevah5/apps/passwd.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/passwd.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/passwd.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/pca-cert.srl b/src/openssl/openssl-1.0.2v-chevah5/apps/pca-cert.srl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/pca-cert.srl rename to src/openssl/openssl-1.0.2v-chevah5/apps/pca-cert.srl diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/pca-key.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/pca-key.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/pca-key.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/pca-key.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/pca-req.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/pca-req.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/pca-req.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/pca-req.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/pkcs12.c b/src/openssl/openssl-1.0.2v-chevah5/apps/pkcs12.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/pkcs12.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/pkcs12.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/pkcs7.c b/src/openssl/openssl-1.0.2v-chevah5/apps/pkcs7.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/pkcs7.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/pkcs7.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/pkcs8.c b/src/openssl/openssl-1.0.2v-chevah5/apps/pkcs8.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/pkcs8.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/pkcs8.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/pkey.c b/src/openssl/openssl-1.0.2v-chevah5/apps/pkey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/pkey.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/pkey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/pkeyparam.c b/src/openssl/openssl-1.0.2v-chevah5/apps/pkeyparam.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/pkeyparam.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/pkeyparam.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/pkeyutl.c b/src/openssl/openssl-1.0.2v-chevah5/apps/pkeyutl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/pkeyutl.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/pkeyutl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/prime.c b/src/openssl/openssl-1.0.2v-chevah5/apps/prime.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/prime.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/prime.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/privkey.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/privkey.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/privkey.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/privkey.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/progs.h b/src/openssl/openssl-1.0.2v-chevah5/apps/progs.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/progs.h rename to src/openssl/openssl-1.0.2v-chevah5/apps/progs.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/progs.pl b/src/openssl/openssl-1.0.2v-chevah5/apps/progs.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/progs.pl rename to src/openssl/openssl-1.0.2v-chevah5/apps/progs.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/rand.c b/src/openssl/openssl-1.0.2v-chevah5/apps/rand.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/rand.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/rand.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/req.c b/src/openssl/openssl-1.0.2v-chevah5/apps/req.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/req.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/req.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/req.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/req.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/req.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/req.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/rsa.c b/src/openssl/openssl-1.0.2v-chevah5/apps/rsa.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/rsa.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/rsa.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/rsa8192.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/rsa8192.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/rsa8192.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/rsa8192.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/rsautl.c b/src/openssl/openssl-1.0.2v-chevah5/apps/rsautl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/rsautl.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/rsautl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/s1024key.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/s1024key.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/s1024key.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/s1024key.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/s1024req.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/s1024req.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/s1024req.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/s1024req.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/s512-key.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/s512-key.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/s512-key.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/s512-key.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/s512-req.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/s512-req.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/s512-req.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/s512-req.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/s_apps.h b/src/openssl/openssl-1.0.2v-chevah5/apps/s_apps.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/s_apps.h rename to src/openssl/openssl-1.0.2v-chevah5/apps/s_apps.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/s_cb.c b/src/openssl/openssl-1.0.2v-chevah5/apps/s_cb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/s_cb.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/s_cb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/s_client.c b/src/openssl/openssl-1.0.2v-chevah5/apps/s_client.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/s_client.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/s_client.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/s_server.c b/src/openssl/openssl-1.0.2v-chevah5/apps/s_server.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/s_server.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/s_server.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/s_socket.c b/src/openssl/openssl-1.0.2v-chevah5/apps/s_socket.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/s_socket.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/s_socket.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/s_time.c b/src/openssl/openssl-1.0.2v-chevah5/apps/s_time.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/s_time.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/s_time.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/server.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/server.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/server.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/server.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/server.srl b/src/openssl/openssl-1.0.2v-chevah5/apps/server.srl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/server.srl rename to src/openssl/openssl-1.0.2v-chevah5/apps/server.srl diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/server2.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/server2.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/server2.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/server2.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/sess_id.c b/src/openssl/openssl-1.0.2v-chevah5/apps/sess_id.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/sess_id.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/sess_id.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/set/set-g-ca.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/set/set-g-ca.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/set/set-g-ca.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/set/set-g-ca.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/set/set-m-ca.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/set/set-m-ca.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/set/set-m-ca.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/set/set-m-ca.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/set/set_b_ca.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/set/set_b_ca.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/set/set_b_ca.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/set/set_b_ca.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/set/set_c_ca.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/set/set_c_ca.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/set/set_c_ca.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/set/set_c_ca.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/set/set_d_ct.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/set/set_d_ct.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/set/set_d_ct.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/set/set_d_ct.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/set/set_root.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/set/set_root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/set/set_root.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/set/set_root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/smime.c b/src/openssl/openssl-1.0.2v-chevah5/apps/smime.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/smime.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/smime.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/speed.c b/src/openssl/openssl-1.0.2v-chevah5/apps/speed.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/speed.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/speed.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/spkac.c b/src/openssl/openssl-1.0.2v-chevah5/apps/spkac.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/spkac.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/spkac.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/srp.c b/src/openssl/openssl-1.0.2v-chevah5/apps/srp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/srp.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/srp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/testCA.pem b/src/openssl/openssl-1.0.2v-chevah5/apps/testCA.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/testCA.pem rename to src/openssl/openssl-1.0.2v-chevah5/apps/testCA.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/testdsa.h b/src/openssl/openssl-1.0.2v-chevah5/apps/testdsa.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/testdsa.h rename to src/openssl/openssl-1.0.2v-chevah5/apps/testdsa.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/testrsa.h b/src/openssl/openssl-1.0.2v-chevah5/apps/testrsa.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/testrsa.h rename to src/openssl/openssl-1.0.2v-chevah5/apps/testrsa.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/timeouts.h b/src/openssl/openssl-1.0.2v-chevah5/apps/timeouts.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/timeouts.h rename to src/openssl/openssl-1.0.2v-chevah5/apps/timeouts.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/ts.c b/src/openssl/openssl-1.0.2v-chevah5/apps/ts.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/ts.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/ts.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/tsget b/src/openssl/openssl-1.0.2v-chevah5/apps/tsget similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/tsget rename to src/openssl/openssl-1.0.2v-chevah5/apps/tsget diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/verify.c b/src/openssl/openssl-1.0.2v-chevah5/apps/verify.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/verify.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/verify.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/version.c b/src/openssl/openssl-1.0.2v-chevah5/apps/version.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/version.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/version.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/vms_decc_init.c b/src/openssl/openssl-1.0.2v-chevah5/apps/vms_decc_init.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/vms_decc_init.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/vms_decc_init.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/vms_term_sock.c b/src/openssl/openssl-1.0.2v-chevah5/apps/vms_term_sock.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/vms_term_sock.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/vms_term_sock.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/vms_term_sock.h b/src/openssl/openssl-1.0.2v-chevah5/apps/vms_term_sock.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/vms_term_sock.h rename to src/openssl/openssl-1.0.2v-chevah5/apps/vms_term_sock.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/winrand.c b/src/openssl/openssl-1.0.2v-chevah5/apps/winrand.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/winrand.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/winrand.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/apps/x509.c b/src/openssl/openssl-1.0.2v-chevah5/apps/x509.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/apps/x509.c rename to src/openssl/openssl-1.0.2v-chevah5/apps/x509.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/appveyor.yml b/src/openssl/openssl-1.0.2v-chevah5/appveyor.yml similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/appveyor.yml rename to src/openssl/openssl-1.0.2v-chevah5/appveyor.yml diff --git a/src/openssl/openssl-1.0.2v-chevah4/bugs/MS b/src/openssl/openssl-1.0.2v-chevah5/bugs/MS similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/bugs/MS rename to src/openssl/openssl-1.0.2v-chevah5/bugs/MS diff --git a/src/openssl/openssl-1.0.2v-chevah4/bugs/SSLv3 b/src/openssl/openssl-1.0.2v-chevah5/bugs/SSLv3 similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/bugs/SSLv3 rename to src/openssl/openssl-1.0.2v-chevah5/bugs/SSLv3 diff --git a/src/openssl/openssl-1.0.2v-chevah4/bugs/alpha.c b/src/openssl/openssl-1.0.2v-chevah5/bugs/alpha.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/bugs/alpha.c rename to src/openssl/openssl-1.0.2v-chevah5/bugs/alpha.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/bugs/dggccbug.c b/src/openssl/openssl-1.0.2v-chevah5/bugs/dggccbug.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/bugs/dggccbug.c rename to src/openssl/openssl-1.0.2v-chevah5/bugs/dggccbug.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/bugs/sgiccbug.c b/src/openssl/openssl-1.0.2v-chevah5/bugs/sgiccbug.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/bugs/sgiccbug.c rename to src/openssl/openssl-1.0.2v-chevah5/bugs/sgiccbug.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/bugs/sslref.dif b/src/openssl/openssl-1.0.2v-chevah5/bugs/sslref.dif similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/bugs/sslref.dif rename to src/openssl/openssl-1.0.2v-chevah5/bugs/sslref.dif diff --git a/src/openssl/openssl-1.0.2v-chevah4/bugs/stream.c b/src/openssl/openssl-1.0.2v-chevah5/bugs/stream.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/bugs/stream.c rename to src/openssl/openssl-1.0.2v-chevah5/bugs/stream.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/bugs/ultrixcc.c b/src/openssl/openssl-1.0.2v-chevah5/bugs/ultrixcc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/bugs/ultrixcc.c rename to src/openssl/openssl-1.0.2v-chevah5/bugs/ultrixcc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/certs/README.RootCerts b/src/openssl/openssl-1.0.2v-chevah5/certs/README.RootCerts similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/certs/README.RootCerts rename to src/openssl/openssl-1.0.2v-chevah5/certs/README.RootCerts diff --git a/src/openssl/openssl-1.0.2v-chevah4/certs/demo/ca-cert.pem b/src/openssl/openssl-1.0.2v-chevah5/certs/demo/ca-cert.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/certs/demo/ca-cert.pem rename to src/openssl/openssl-1.0.2v-chevah5/certs/demo/ca-cert.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/certs/demo/dsa-ca.pem b/src/openssl/openssl-1.0.2v-chevah5/certs/demo/dsa-ca.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/certs/demo/dsa-ca.pem rename to src/openssl/openssl-1.0.2v-chevah5/certs/demo/dsa-ca.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/certs/demo/dsa-pca.pem b/src/openssl/openssl-1.0.2v-chevah5/certs/demo/dsa-pca.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/certs/demo/dsa-pca.pem rename to src/openssl/openssl-1.0.2v-chevah5/certs/demo/dsa-pca.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/certs/demo/pca-cert.pem b/src/openssl/openssl-1.0.2v-chevah5/certs/demo/pca-cert.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/certs/demo/pca-cert.pem rename to src/openssl/openssl-1.0.2v-chevah5/certs/demo/pca-cert.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/certs/expired/ICE.crl b/src/openssl/openssl-1.0.2v-chevah5/certs/expired/ICE.crl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/certs/expired/ICE.crl rename to src/openssl/openssl-1.0.2v-chevah5/certs/expired/ICE.crl diff --git a/src/openssl/openssl-1.0.2v-chevah4/config b/src/openssl/openssl-1.0.2v-chevah5/config similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/config rename to src/openssl/openssl-1.0.2v-chevah5/config diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/LPdir_nyi.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/LPdir_nyi.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/LPdir_nyi.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/LPdir_nyi.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/LPdir_unix.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/LPdir_unix.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/LPdir_unix.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/LPdir_unix.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/LPdir_vms.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/LPdir_vms.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/LPdir_vms.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/LPdir_vms.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/LPdir_win.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/LPdir_win.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/LPdir_win.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/LPdir_win.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/LPdir_win32.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/LPdir_win32.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/LPdir_win32.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/LPdir_win32.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/LPdir_wince.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/LPdir_wince.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/LPdir_wince.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/LPdir_wince.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/README b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/README rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_cbc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_cbc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_cbc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_cbc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_cfb.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_cfb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_cfb.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_cfb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_core.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_core.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_core.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_core.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_ctr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_ctr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_ctr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_ctr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_ecb.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_ecb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_ecb.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_ecb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_ige.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_ige.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_ige.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_ige.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_misc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_misc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_misc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_misc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_ofb.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_ofb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_ofb.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_ofb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_wrap.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_wrap.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_wrap.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_wrap.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_x86core.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_x86core.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/aes_x86core.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/aes_x86core.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-586.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-586.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-586.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-586.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-armv4.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-armv4.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-armv4.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-armv4.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-ia64.S b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-ia64.S similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-ia64.S rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-ia64.S diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-mips.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-mips.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-mips.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-mips.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-parisc.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-parisc.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-parisc.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-parisc.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-ppc.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-ppc.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-ppc.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-ppc.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-s390x.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-s390x.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-s390x.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-s390x.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-sparcv9.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-sparcv9.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-sparcv9.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aes-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aes-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aesni-mb-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aesni-mb-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aesni-mb-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aesni-mb-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aesni-sha1-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aesni-sha1-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aesni-sha1-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aesni-sha1-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aesni-sha256-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aesni-sha256-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aesni-sha256-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aesni-sha256-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aesni-x86.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aesni-x86.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aesni-x86.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aesni-x86.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aesni-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aesni-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aesni-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aesni-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aesp8-ppc.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aesp8-ppc.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aesp8-ppc.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aesp8-ppc.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aest4-sparcv9.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aest4-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aest4-sparcv9.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aest4-sparcv9.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aesv8-armx.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aesv8-armx.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/aesv8-armx.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/aesv8-armx.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/bsaes-armv7.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/bsaes-armv7.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/bsaes-armv7.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/bsaes-armv7.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/bsaes-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/bsaes-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/bsaes-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/bsaes-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/vpaes-ppc.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/vpaes-ppc.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/vpaes-ppc.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/vpaes-ppc.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/vpaes-x86.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/vpaes-x86.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/vpaes-x86.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/vpaes-x86.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/vpaes-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/vpaes-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/aes/asm/vpaes-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/aes/asm/vpaes-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/alphacpuid.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/alphacpuid.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/alphacpuid.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/alphacpuid.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/arm64cpuid.S b/src/openssl/openssl-1.0.2v-chevah5/crypto/arm64cpuid.S similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/arm64cpuid.S rename to src/openssl/openssl-1.0.2v-chevah5/crypto/arm64cpuid.S diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/arm_arch.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/arm_arch.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/arm_arch.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/arm_arch.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/armcap.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/armcap.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/armcap.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/armcap.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/armv4cpuid.S b/src/openssl/openssl-1.0.2v-chevah5/crypto/armv4cpuid.S similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/armv4cpuid.S rename to src/openssl/openssl-1.0.2v-chevah5/crypto/armv4cpuid.S diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_bitstr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_bitstr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_bitstr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_bitstr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_bool.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_bool.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_bool.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_bool.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_bytes.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_bytes.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_bytes.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_bytes.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_d2i_fp.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_d2i_fp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_d2i_fp.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_d2i_fp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_digest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_digest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_digest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_digest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_dup.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_dup.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_dup.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_dup.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_enum.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_enum.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_enum.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_enum.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_gentm.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_gentm.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_gentm.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_gentm.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_i2d_fp.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_i2d_fp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_i2d_fp.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_i2d_fp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_int.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_int.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_int.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_int.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_mbstr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_mbstr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_mbstr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_mbstr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_object.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_object.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_object.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_object.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_octet.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_octet.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_octet.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_octet.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_print.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_print.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_print.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_print.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_set.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_set.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_set.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_set.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_sign.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_sign.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_sign.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_sign.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_strex.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_strex.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_strex.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_strex.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_strnid.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_strnid.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_strnid.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_strnid.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_time.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_time.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_time.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_time.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_type.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_type.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_type.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_type.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_utctm.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_utctm.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_utctm.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_utctm.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_utf8.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_utf8.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_utf8.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_utf8.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_verify.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_verify.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/a_verify.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/a_verify.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/ameth_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/ameth_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/ameth_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/ameth_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1_gen.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1_gen.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1_gen.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1_gen.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1_int.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1_int.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1_int.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1_int.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1_mac.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1_mac.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1_mac.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1_mac.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1_par.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1_par.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1_par.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1_par.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1t.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1t.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn1t.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn1t.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn_mime.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn_mime.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn_mime.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn_mime.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn_moid.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn_moid.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn_moid.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn_moid.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn_pack.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn_pack.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/asn_pack.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/asn_pack.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/bio_asn1.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/bio_asn1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/bio_asn1.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/bio_asn1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/bio_ndef.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/bio_ndef.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/bio_ndef.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/bio_ndef.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/charmap.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/charmap.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/charmap.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/charmap.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/charmap.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/charmap.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/charmap.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/charmap.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/d2i_pr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/d2i_pr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/d2i_pr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/d2i_pr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/d2i_pu.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/d2i_pu.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/d2i_pu.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/d2i_pu.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/evp_asn1.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/evp_asn1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/evp_asn1.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/evp_asn1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/f_enum.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/f_enum.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/f_enum.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/f_enum.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/f_int.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/f_int.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/f_int.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/f_int.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/f_string.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/f_string.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/f_string.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/f_string.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/i2d_pr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/i2d_pr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/i2d_pr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/i2d_pr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/i2d_pu.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/i2d_pu.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/i2d_pu.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/i2d_pu.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/n_pkey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/n_pkey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/n_pkey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/n_pkey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/nsseq.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/nsseq.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/nsseq.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/nsseq.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/p5_pbe.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/p5_pbe.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/p5_pbe.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/p5_pbe.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/p5_pbev2.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/p5_pbev2.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/p5_pbev2.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/p5_pbev2.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/p8_pkey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/p8_pkey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/p8_pkey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/p8_pkey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/t_bitst.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/t_bitst.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/t_bitst.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/t_bitst.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/t_crl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/t_crl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/t_crl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/t_crl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/t_pkey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/t_pkey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/t_pkey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/t_pkey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/t_req.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/t_req.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/t_req.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/t_req.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/t_spki.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/t_spki.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/t_spki.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/t_spki.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/t_x509.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/t_x509.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/t_x509.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/t_x509.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/t_x509a.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/t_x509a.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/t_x509a.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/t_x509a.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/tasn_dec.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/tasn_dec.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/tasn_dec.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/tasn_dec.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/tasn_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/tasn_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/tasn_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/tasn_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/tasn_fre.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/tasn_fre.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/tasn_fre.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/tasn_fre.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/tasn_new.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/tasn_new.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/tasn_new.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/tasn_new.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/tasn_prn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/tasn_prn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/tasn_prn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/tasn_prn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/tasn_typ.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/tasn_typ.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/tasn_typ.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/tasn_typ.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/tasn_utl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/tasn_utl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/tasn_utl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/tasn_utl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_algor.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_algor.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_algor.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_algor.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_attrib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_attrib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_attrib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_attrib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_bignum.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_bignum.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_bignum.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_bignum.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_crl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_crl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_crl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_crl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_exten.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_exten.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_exten.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_exten.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_info.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_info.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_info.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_info.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_long.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_long.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_long.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_long.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_name.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_name.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_name.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_name.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_nx509.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_nx509.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_nx509.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_nx509.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_pkey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_pkey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_pkey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_pkey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_pubkey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_pubkey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_pubkey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_pubkey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_req.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_req.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_req.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_req.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_sig.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_sig.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_sig.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_sig.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_spki.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_spki.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_spki.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_spki.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_val.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_val.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_val.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_val.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_x509.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_x509.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_x509.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_x509.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_x509a.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_x509a.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/asn1/x_x509a.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/asn1/x_x509a.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/COPYRIGHT b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/COPYRIGHT similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/COPYRIGHT rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/COPYRIGHT diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/INSTALL b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/INSTALL similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/INSTALL rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/INSTALL diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/README b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/README rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/VERSION b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/VERSION similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/VERSION rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/VERSION diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/asm/bf-586.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/asm/bf-586.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/asm/bf-586.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/asm/bf-586.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/asm/bf-686.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/asm/bf-686.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/asm/bf-686.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/asm/bf-686.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/asm/readme b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/asm/readme similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/asm/readme rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/asm/readme diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_cbc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_cbc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_cbc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_cbc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_cfb64.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_cfb64.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_cfb64.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_cfb64.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_ecb.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_ecb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_ecb.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_ecb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_ofb64.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_ofb64.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_ofb64.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_ofb64.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_opts.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_opts.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_opts.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_opts.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_pi.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_pi.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_pi.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_pi.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_skey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_skey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bf_skey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bf_skey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bfs.cpp b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bfs.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bfs.cpp rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bfs.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bfspeed.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bfspeed.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bfspeed.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bfspeed.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bftest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bftest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/bftest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/bftest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bf/blowfish.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/bf/blowfish.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bf/blowfish.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bf/blowfish.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/b_dump.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/b_dump.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/b_dump.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/b_dump.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/b_print.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/b_print.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/b_print.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/b_print.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/b_sock.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/b_sock.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/b_sock.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/b_sock.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bf_buff.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bf_buff.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bf_buff.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bf_buff.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bf_lbuf.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bf_lbuf.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bf_lbuf.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bf_lbuf.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bf_nbio.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bf_nbio.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bf_nbio.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bf_nbio.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bf_null.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bf_null.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bf_null.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bf_null.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bio.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bio.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bio.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bio.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bio_cb.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bio_cb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bio_cb.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bio_cb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bio_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bio_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bio_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bio_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bio_lcl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bio_lcl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bio_lcl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bio_lcl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bio_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bio_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bio_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bio_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_acpt.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_acpt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_acpt.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_acpt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_bio.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_bio.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_bio.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_bio.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_conn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_conn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_conn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_conn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_dgram.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_dgram.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_dgram.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_dgram.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_fd.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_fd.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_fd.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_fd.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_file.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_file.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_file.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_file.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_log.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_log.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_log.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_log.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_mem.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_mem.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_mem.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_mem.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_null.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_null.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_null.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_null.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_rtcp.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_rtcp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_rtcp.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_rtcp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_sock.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_sock.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bio/bss_sock.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bio/bss_sock.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/README b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/README rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/alpha-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/alpha-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/alpha-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/alpha-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/armv4-gf2m.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/armv4-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/armv4-gf2m.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/armv4-gf2m.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/armv4-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/armv4-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/armv4-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/armv4-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/bn-586.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/bn-586.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/bn-586.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/bn-586.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/co-586.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/co-586.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/co-586.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/co-586.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/ia64-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/ia64-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/ia64-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/ia64-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/ia64.S b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/ia64.S similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/ia64.S rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/ia64.S diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/mips-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/mips-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/mips-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/mips-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/mips.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/mips.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/mips.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/mips.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/mips3-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/mips3-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/mips3-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/mips3-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/mips3.s b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/mips3.s similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/mips3.s rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/mips3.s diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/pa-risc2.s b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/pa-risc2.s similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/pa-risc2.s rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/pa-risc2.s diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/pa-risc2W.s b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/pa-risc2W.s similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/pa-risc2W.s rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/pa-risc2W.s diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/parisc-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/parisc-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/parisc-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/parisc-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/ppc-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/ppc-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/ppc-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/ppc-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/ppc.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/ppc.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/ppc.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/ppc.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/ppc64-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/ppc64-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/ppc64-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/ppc64-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/rsaz-avx2.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/rsaz-avx2.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/rsaz-avx2.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/rsaz-avx2.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/rsaz-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/rsaz-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/rsaz-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/rsaz-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/s390x-gf2m.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/s390x-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/s390x-gf2m.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/s390x-gf2m.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/s390x-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/s390x-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/s390x-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/s390x-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/s390x.S b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/s390x.S similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/s390x.S rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/s390x.S diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/sparct4-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/sparct4-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/sparct4-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/sparct4-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/sparcv8.S b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/sparcv8.S similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/sparcv8.S rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/sparcv8.S diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/sparcv8plus.S b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/sparcv8plus.S similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/sparcv8plus.S rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/sparcv8plus.S diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/sparcv9-gf2m.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/sparcv9-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/sparcv9-gf2m.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/sparcv9-gf2m.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/sparcv9-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/sparcv9-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/sparcv9-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/sparcv9-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/sparcv9a-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/sparcv9a-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/sparcv9a-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/sparcv9a-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/via-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/via-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/via-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/via-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/vis3-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/vis3-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/vis3-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/vis3-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/vms.mar b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/vms.mar similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/vms.mar rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/vms.mar diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86-gf2m.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86-gf2m.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86-gf2m.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/add.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/add.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/add.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/add.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/comba.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/comba.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/comba.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/comba.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/div.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/div.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/div.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/div.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/f b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/f similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/f rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/f diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/mul.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/mul.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/mul.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/mul.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/mul_add.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/mul_add.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/mul_add.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/mul_add.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/sqr.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/sqr.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/sqr.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/sqr.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/sub.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/sub.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86/sub.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86/sub.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86_64-gcc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86_64-gcc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86_64-gcc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86_64-gcc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86_64-gf2m.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86_64-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86_64-gf2m.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86_64-gf2m.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86_64-mont.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86_64-mont.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86_64-mont.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86_64-mont.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86_64-mont5.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86_64-mont5.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/asm/x86_64-mont5.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/asm/x86_64-mont5.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn.mul b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn.mul similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn.mul rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn.mul diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_add.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_add.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_add.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_add.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_asm.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_asm.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_asm.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_asm.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_blind.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_blind.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_blind.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_blind.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_const.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_const.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_const.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_const.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_ctx.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_ctx.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_ctx.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_ctx.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_depr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_depr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_depr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_depr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_div.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_div.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_div.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_div.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_exp.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_exp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_exp.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_exp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_exp2.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_exp2.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_exp2.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_exp2.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_gcd.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_gcd.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_gcd.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_gcd.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_gf2m.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_gf2m.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_gf2m.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_gf2m.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_kron.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_kron.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_kron.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_kron.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_lcl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_lcl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_lcl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_lcl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_mod.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_mod.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_mod.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_mod.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_mont.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_mont.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_mont.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_mont.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_mpi.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_mpi.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_mpi.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_mpi.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_mul.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_mul.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_mul.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_mul.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_nist.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_nist.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_nist.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_nist.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_prime.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_prime.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_prime.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_prime.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_prime.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_prime.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_prime.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_prime.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_prime.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_prime.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_prime.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_prime.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_print.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_print.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_print.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_print.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_rand.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_rand.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_rand.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_rand.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_recp.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_recp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_recp.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_recp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_shift.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_shift.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_shift.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_shift.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_sqr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_sqr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_sqr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_sqr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_sqrt.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_sqrt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_sqrt.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_sqrt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_word.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_word.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_word.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_word.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_x931p.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_x931p.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bn_x931p.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bn_x931p.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bnspeed.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bnspeed.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bnspeed.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bnspeed.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bntest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bntest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/bntest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/bntest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/divtest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/divtest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/divtest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/divtest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/exp.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/exp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/exp.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/exp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/expspeed.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/expspeed.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/expspeed.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/expspeed.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/exptest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/exptest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/exptest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/exptest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/rsaz_exp.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/rsaz_exp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/rsaz_exp.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/rsaz_exp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/rsaz_exp.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/rsaz_exp.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/rsaz_exp.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/rsaz_exp.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/todo b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/todo similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/todo rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/todo diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn/vms-helper.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn/vms-helper.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn/vms-helper.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn/vms-helper.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/bn_int.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/bn_int.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/bn_int.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/bn_int.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/buffer/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/buffer/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/buffer/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/buffer/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/buffer/buf_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/buffer/buf_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/buffer/buf_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/buffer/buf_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/buffer/buf_str.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/buffer/buf_str.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/buffer/buf_str.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/buffer/buf_str.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/buffer/buffer.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/buffer/buffer.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/buffer/buffer.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/buffer/buffer.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/buffer/buffer.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/buffer/buffer.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/buffer/buffer.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/buffer/buffer.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/asm/cmll-x86.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/asm/cmll-x86.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/asm/cmll-x86.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/asm/cmll-x86.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/asm/cmll-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/asm/cmll-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/asm/cmll-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/asm/cmll-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/asm/cmllt4-sparcv9.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/asm/cmllt4-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/asm/cmllt4-sparcv9.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/asm/cmllt4-sparcv9.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/camellia.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/camellia.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/camellia.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/camellia.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/camellia.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/camellia.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/camellia.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/camellia.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_cbc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_cbc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_cbc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_cbc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_cfb.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_cfb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_cfb.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_cfb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_ctr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_ctr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_ctr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_ctr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_ecb.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_ecb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_ecb.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_ecb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_misc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_misc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_misc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_misc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_ofb.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_ofb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_ofb.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_ofb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_utl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_utl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/camellia/cmll_utl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/camellia/cmll_utl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cast/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/cast/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cast/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cast/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cast/asm/cast-586.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/cast/asm/cast-586.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cast/asm/cast-586.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cast/asm/cast-586.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cast/asm/readme b/src/openssl/openssl-1.0.2v-chevah5/crypto/cast/asm/readme similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cast/asm/readme rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cast/asm/readme diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cast/c_cfb64.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cast/c_cfb64.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cast/c_cfb64.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cast/c_cfb64.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cast/c_ecb.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cast/c_ecb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cast/c_ecb.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cast/c_ecb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cast/c_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cast/c_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cast/c_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cast/c_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cast/c_ofb64.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cast/c_ofb64.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cast/c_ofb64.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cast/c_ofb64.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cast/c_skey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cast/c_skey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cast/c_skey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cast/c_skey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cast/cast.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/cast/cast.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cast/cast.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cast/cast.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cast/cast_lcl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/cast/cast_lcl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cast/cast_lcl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cast/cast_lcl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cast/cast_s.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/cast/cast_s.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cast/cast_s.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cast/cast_s.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cast/cast_spd.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cast/cast_spd.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cast/cast_spd.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cast/cast_spd.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cast/castopts.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cast/castopts.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cast/castopts.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cast/castopts.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cast/casts.cpp b/src/openssl/openssl-1.0.2v-chevah5/crypto/cast/casts.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cast/casts.cpp rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cast/casts.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cast/casttest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cast/casttest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cast/casttest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cast/casttest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cmac/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/cmac/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cmac/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cmac/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cmac/cm_ameth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cmac/cm_ameth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cmac/cm_ameth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cmac/cm_ameth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cmac/cm_pmeth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cmac/cm_pmeth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cmac/cm_pmeth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cmac/cm_pmeth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cmac/cmac.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cmac/cmac.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cmac/cmac.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cmac/cmac.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cmac/cmac.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/cmac/cmac.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cmac/cmac.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cmac/cmac.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_asn1.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_asn1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_asn1.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_asn1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_att.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_att.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_att.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_att.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_cd.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_cd.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_cd.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_cd.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_dd.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_dd.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_dd.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_dd.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_env.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_env.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_env.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_env.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_ess.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_ess.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_ess.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_ess.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_io.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_io.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_io.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_io.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_kari.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_kari.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_kari.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_kari.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_lcl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_lcl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_lcl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_lcl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_pwri.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_pwri.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_pwri.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_pwri.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_sd.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_sd.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_sd.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_sd.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_smime.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_smime.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cms/cms_smime.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cms/cms_smime.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/comp/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/comp/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/comp/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/comp/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/comp/c_rle.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/comp/c_rle.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/comp/c_rle.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/comp/c_rle.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/comp/c_zlib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/comp/c_zlib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/comp/c_zlib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/comp/c_zlib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/comp/comp.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/comp/comp.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/comp/comp.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/comp/comp.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/comp/comp_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/comp/comp_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/comp/comp_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/comp/comp_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/comp/comp_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/comp/comp_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/comp/comp_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/comp/comp_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/README b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/README rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/cnf_save.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/cnf_save.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/cnf_save.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/cnf_save.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_api.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_api.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_api.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_api.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_api.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_api.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_api.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_api.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_def.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_def.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_def.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_def.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_def.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_def.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_def.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_def.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_mall.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_mall.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_mall.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_mall.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_mod.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_mod.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_mod.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_mod.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_sap.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_sap.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/conf_sap.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/conf_sap.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/keysets.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/keysets.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/keysets.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/keysets.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/ssleay.cnf b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/ssleay.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/ssleay.cnf rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/ssleay.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/conf/test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/conf/test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/conf/test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/conf/test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/constant_time_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/constant_time_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/constant_time_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/constant_time_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/constant_time_test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/constant_time_test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/constant_time_test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/constant_time_test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cpt_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cpt_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cpt_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cpt_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cryptlib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cryptlib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cryptlib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cryptlib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cryptlib.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/cryptlib.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cryptlib.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cryptlib.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/crypto-lib.com b/src/openssl/openssl-1.0.2v-chevah5/crypto/crypto-lib.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/crypto-lib.com rename to src/openssl/openssl-1.0.2v-chevah5/crypto/crypto-lib.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/crypto.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/crypto.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/crypto.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/crypto.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/cversion.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/cversion.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/cversion.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/cversion.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/COPYRIGHT b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/COPYRIGHT similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/COPYRIGHT rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/COPYRIGHT diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/DES.pm b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/DES.pm similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/DES.pm rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/DES.pm diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/DES.xs b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/DES.xs similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/DES.xs rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/DES.xs diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/FILES0 b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/FILES0 similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/FILES0 rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/FILES0 diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/INSTALL b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/INSTALL similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/INSTALL rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/INSTALL diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/Imakefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/Imakefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/Imakefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/Imakefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/KERBEROS b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/KERBEROS similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/KERBEROS rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/KERBEROS diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/README b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/README rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/VERSION b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/VERSION similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/VERSION rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/VERSION diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/asm/crypt586.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/asm/crypt586.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/asm/crypt586.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/asm/crypt586.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/asm/des-586.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/asm/des-586.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/asm/des-586.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/asm/des-586.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/asm/des_enc.m4 b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/asm/des_enc.m4 similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/asm/des_enc.m4 rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/asm/des_enc.m4 diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/asm/desboth.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/asm/desboth.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/asm/desboth.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/asm/desboth.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/asm/dest4-sparcv9.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/asm/dest4-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/asm/dest4-sparcv9.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/asm/dest4-sparcv9.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/asm/readme b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/asm/readme similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/asm/readme rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/asm/readme diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/cbc3_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/cbc3_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/cbc3_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/cbc3_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/cbc_cksm.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/cbc_cksm.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/cbc_cksm.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/cbc_cksm.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/cbc_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/cbc_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/cbc_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/cbc_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/cfb64ede.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/cfb64ede.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/cfb64ede.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/cfb64ede.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/cfb64enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/cfb64enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/cfb64enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/cfb64enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/cfb_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/cfb_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/cfb_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/cfb_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/des-lib.com b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/des-lib.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/des-lib.com rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/des-lib.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/des.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/des.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/des.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/des.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/des.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/des.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/des.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/des.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/des.pod b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/des.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/des.pod rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/des.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/des3s.cpp b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/des3s.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/des3s.cpp rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/des3s.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/des_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/des_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/des_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/des_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/des_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/des_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/des_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/des_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/des_old.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/des_old.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/des_old.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/des_old.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/des_old.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/des_old.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/des_old.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/des_old.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/des_old2.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/des_old2.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/des_old2.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/des_old2.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/des_opts.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/des_opts.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/des_opts.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/des_opts.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/des_ver.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/des_ver.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/des_ver.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/des_ver.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/dess.cpp b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/dess.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/dess.cpp rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/dess.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/destest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/destest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/destest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/destest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/ecb3_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/ecb3_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/ecb3_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/ecb3_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/ecb_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/ecb_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/ecb_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/ecb_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/ede_cbcm_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/ede_cbcm_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/ede_cbcm_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/ede_cbcm_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/enc_read.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/enc_read.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/enc_read.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/enc_read.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/enc_writ.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/enc_writ.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/enc_writ.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/enc_writ.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/fcrypt.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/fcrypt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/fcrypt.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/fcrypt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/fcrypt_b.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/fcrypt_b.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/fcrypt_b.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/fcrypt_b.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/makefile.bc b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/makefile.bc similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/makefile.bc rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/makefile.bc diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/ncbc_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/ncbc_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/ncbc_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/ncbc_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/ofb64ede.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/ofb64ede.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/ofb64ede.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/ofb64ede.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/ofb64enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/ofb64enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/ofb64enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/ofb64enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/ofb_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/ofb_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/ofb_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/ofb_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/options.txt b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/options.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/options.txt rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/options.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/pcbc_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/pcbc_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/pcbc_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/pcbc_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/qud_cksm.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/qud_cksm.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/qud_cksm.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/qud_cksm.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/rand_key.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/rand_key.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/rand_key.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/rand_key.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/read2pwd.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/read2pwd.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/read2pwd.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/read2pwd.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/read_pwd.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/read_pwd.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/read_pwd.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/read_pwd.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/rpc_des.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/rpc_des.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/rpc_des.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/rpc_des.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/rpc_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/rpc_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/rpc_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/rpc_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/rpw.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/rpw.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/rpw.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/rpw.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/set_key.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/set_key.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/set_key.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/set_key.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/speed.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/speed.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/speed.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/speed.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/spr.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/spr.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/spr.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/spr.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/str2key.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/str2key.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/str2key.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/str2key.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/t/test b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/t/test similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/t/test rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/t/test diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/486-50.sol b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/486-50.sol similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/486-50.sol rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/486-50.sol diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/586-100.lnx b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/586-100.lnx similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/586-100.lnx rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/586-100.lnx diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/686-200.fre b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/686-200.fre similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/686-200.fre rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/686-200.fre diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/aix.cc b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/aix.cc similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/aix.cc rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/aix.cc diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/alpha.cc b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/alpha.cc similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/alpha.cc rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/alpha.cc diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/hpux.cc b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/hpux.cc similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/hpux.cc rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/hpux.cc diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/sparc.gcc b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/sparc.gcc similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/sparc.gcc rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/sparc.gcc diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/usparc.cc b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/usparc.cc similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/times/usparc.cc rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/times/usparc.cc diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/typemap b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/typemap similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/typemap rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/typemap diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/des/xcbc_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/des/xcbc_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/des/xcbc_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/des/xcbc_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh1024.pem b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh1024.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh1024.pem rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh1024.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh192.pem b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh192.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh192.pem rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh192.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh2048.pem b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh2048.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh2048.pem rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh2048.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh4096.pem b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh4096.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh4096.pem rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh4096.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh512.pem b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh512.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh512.pem rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh512.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_ameth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_ameth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_ameth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_ameth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_asn1.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_asn1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_asn1.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_asn1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_check.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_check.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_check.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_check.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_depr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_depr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_depr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_depr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_gen.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_gen.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_gen.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_gen.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_kdf.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_kdf.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_kdf.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_kdf.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_key.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_key.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_key.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_key.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_pmeth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_pmeth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_pmeth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_pmeth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_prn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_prn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_prn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_prn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_rfc5114.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_rfc5114.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dh_rfc5114.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dh_rfc5114.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dhtest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dhtest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/dhtest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/dhtest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/example b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/example similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/example rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/example diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/generate b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/generate similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/generate rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/generate diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/p1024.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/p1024.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/p1024.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/p1024.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/p192.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/p192.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/p192.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/p192.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dh/p512.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dh/p512.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dh/p512.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dh/p512.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/README b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/README rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_ameth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_ameth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_ameth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_ameth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_asn1.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_asn1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_asn1.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_asn1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_depr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_depr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_depr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_depr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_gen.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_gen.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_gen.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_gen.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_key.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_key.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_key.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_key.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_ossl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_ossl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_ossl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_ossl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_pmeth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_pmeth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_pmeth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_pmeth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_prn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_prn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_prn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_prn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_sign.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_sign.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_sign.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_sign.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_vrf.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_vrf.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsa_vrf.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsa_vrf.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsagen.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsagen.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsagen.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsagen.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsatest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsatest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/dsatest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/dsatest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/fips186a.txt b/src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/fips186a.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dsa/fips186a.txt rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dsa/fips186a.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dso/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/dso/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dso/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dso/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dso/README b/src/openssl/openssl-1.0.2v-chevah5/crypto/dso/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dso/README rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dso/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_beos.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_beos.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_beos.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_beos.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_dl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_dl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_dl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_dl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_dlfcn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_dlfcn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_dlfcn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_dlfcn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_null.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_null.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_null.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_null.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_openssl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_openssl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_openssl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_openssl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_vms.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_vms.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_vms.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_vms.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_win32.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_win32.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/dso/dso_win32.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/dso/dso_win32.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ebcdic.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ebcdic.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ebcdic.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ebcdic.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ebcdic.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ebcdic.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ebcdic.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ebcdic.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/asm/ecp_nistz256-avx2.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/asm/ecp_nistz256-avx2.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/asm/ecp_nistz256-avx2.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/asm/ecp_nistz256-avx2.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/asm/ecp_nistz256-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/asm/ecp_nistz256-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/asm/ecp_nistz256-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/asm/ecp_nistz256-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec2_mult.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec2_mult.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec2_mult.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec2_mult.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec2_oct.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec2_oct.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec2_oct.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec2_oct.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec2_smpl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec2_smpl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec2_smpl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec2_smpl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_ameth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_ameth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_ameth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_ameth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_asn1.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_asn1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_asn1.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_asn1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_check.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_check.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_check.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_check.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_curve.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_curve.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_curve.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_curve.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_cvt.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_cvt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_cvt.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_cvt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_key.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_key.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_key.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_key.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_lcl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_lcl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_lcl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_lcl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_mult.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_mult.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_mult.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_mult.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_oct.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_oct.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_oct.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_oct.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_pmeth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_pmeth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_pmeth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_pmeth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_print.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_print.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ec_print.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ec_print.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/eck_prn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/eck_prn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/eck_prn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/eck_prn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_mont.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_mont.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_mont.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_mont.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_nist.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_nist.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_nist.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_nist.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_nistp224.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_nistp224.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_nistp224.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_nistp224.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_nistp256.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_nistp256.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_nistp256.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_nistp256.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_nistp521.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_nistp521.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_nistp521.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_nistp521.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_nistputil.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_nistputil.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_nistputil.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_nistputil.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_nistz256.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_nistz256.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_nistz256.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_nistz256.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_nistz256_table.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_nistz256_table.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_nistz256_table.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_nistz256_table.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_oct.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_oct.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_oct.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_oct.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_smpl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_smpl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ecp_smpl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ecp_smpl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ectest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ectest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ec/ectest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ec/ectest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ecdh.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ecdh.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ecdh.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ecdh.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ecdhtest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ecdhtest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ecdhtest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ecdhtest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ech_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ech_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ech_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ech_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ech_kdf.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ech_kdf.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ech_kdf.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ech_kdf.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ech_key.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ech_key.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ech_key.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ech_key.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ech_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ech_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ech_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ech_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ech_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ech_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ech_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ech_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ech_ossl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ech_ossl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdh/ech_ossl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdh/ech_ossl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecdsa.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecdsa.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecdsa.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecdsa.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecdsatest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecdsatest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecdsatest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecdsatest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecs_asn1.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecs_asn1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecs_asn1.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecs_asn1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecs_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecs_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecs_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecs_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecs_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecs_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecs_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecs_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecs_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecs_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecs_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecs_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecs_ossl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecs_ossl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecs_ossl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecs_ossl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecs_sign.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecs_sign.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecs_sign.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecs_sign.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecs_vrf.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecs_vrf.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ecdsa/ecs_vrf.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ecdsa/ecs_vrf.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/README b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/README rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_all.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_all.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_all.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_all.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_cnf.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_cnf.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_cnf.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_cnf.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_cryptodev.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_cryptodev.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_cryptodev.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_cryptodev.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_ctrl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_ctrl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_ctrl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_ctrl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_dyn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_dyn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_dyn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_dyn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_fat.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_fat.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_fat.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_fat.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_init.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_init.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_init.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_init.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_int.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_int.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_int.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_int.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_list.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_list.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_list.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_list.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_openssl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_openssl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_openssl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_openssl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_pkey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_pkey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_pkey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_pkey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_rdrand.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_rdrand.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_rdrand.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_rdrand.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_table.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_table.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/eng_table.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/eng_table.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/engine.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/engine.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/engine.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/engine.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/enginetest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/enginetest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/enginetest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/enginetest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_asnmth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_asnmth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_asnmth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_asnmth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_cipher.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_cipher.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_cipher.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_cipher.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_dh.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_dh.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_dh.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_dh.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_digest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_digest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_digest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_digest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_dsa.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_dsa.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_dsa.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_dsa.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_ecdh.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_ecdh.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_ecdh.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_ecdh.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_ecdsa.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_ecdsa.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_ecdsa.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_ecdsa.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_pkmeth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_pkmeth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_pkmeth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_pkmeth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_rand.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_rand.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_rand.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_rand.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_rsa.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_rsa.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_rsa.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_rsa.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_store.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_store.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/engine/tb_store.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/engine/tb_store.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/err/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/err/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/err/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/err/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/err/err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/err/err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/err/err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/err/err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/err/err.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/err/err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/err/err.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/err/err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/err/err_all.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/err/err_all.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/err/err_all.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/err/err_all.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/err/err_prn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/err/err_prn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/err/err_prn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/err/err_prn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/err/openssl.ec b/src/openssl/openssl-1.0.2v-chevah5/crypto/err/openssl.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/err/openssl.ec rename to src/openssl/openssl-1.0.2v-chevah5/crypto/err/openssl.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/bio_b64.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/bio_b64.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/bio_b64.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/bio_b64.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/bio_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/bio_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/bio_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/bio_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/bio_md.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/bio_md.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/bio_md.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/bio_md.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/bio_ok.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/bio_ok.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/bio_ok.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/bio_ok.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/c_all.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/c_all.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/c_all.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/c_all.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/c_allc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/c_allc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/c_allc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/c_allc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/c_alld.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/c_alld.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/c_alld.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/c_alld.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/digest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/digest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/digest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/digest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_aes.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_aes.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_aes.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_aes.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_aes_cbc_hmac_sha1.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_aes_cbc_hmac_sha1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_aes_cbc_hmac_sha1.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_aes_cbc_hmac_sha1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_aes_cbc_hmac_sha256.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_aes_cbc_hmac_sha256.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_aes_cbc_hmac_sha256.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_aes_cbc_hmac_sha256.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_bf.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_bf.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_bf.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_bf.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_camellia.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_camellia.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_camellia.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_camellia.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_cast.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_cast.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_cast.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_cast.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_des.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_des.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_des.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_des.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_des3.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_des3.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_des3.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_des3.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_dsa.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_dsa.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_dsa.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_dsa.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_idea.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_idea.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_idea.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_idea.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_null.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_null.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_null.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_null.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_old.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_old.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_old.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_old.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_rc2.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_rc2.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_rc2.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_rc2.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_rc4.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_rc4.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_rc4.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_rc4.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_rc4_hmac_md5.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_rc4_hmac_md5.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_rc4_hmac_md5.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_rc4_hmac_md5.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_rc5.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_rc5.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_rc5.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_rc5.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_seed.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_seed.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_seed.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_seed.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_xcbc_d.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_xcbc_d.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/e_xcbc_d.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/e_xcbc_d.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/encode.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/encode.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/encode.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/encode.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_acnf.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_acnf.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_acnf.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_acnf.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_cnf.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_cnf.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_cnf.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_cnf.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_extra_test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_extra_test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_extra_test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_extra_test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_key.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_key.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_key.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_key.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_pbe.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_pbe.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_pbe.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_pbe.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_pkey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_pkey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_pkey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_pkey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evp_test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evp_test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evptests.txt b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evptests.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/evptests.txt rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/evptests.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_dss.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_dss.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_dss.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_dss.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_dss1.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_dss1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_dss1.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_dss1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_ecdsa.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_ecdsa.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_ecdsa.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_ecdsa.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_md2.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_md2.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_md2.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_md2.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_md4.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_md4.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_md4.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_md4.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_md5.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_md5.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_md5.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_md5.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_mdc2.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_mdc2.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_mdc2.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_mdc2.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_null.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_null.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_null.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_null.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_ripemd.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_ripemd.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_ripemd.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_ripemd.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_sha.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_sha.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_sha.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_sha.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_sha1.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_sha1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_sha1.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_sha1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_sigver.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_sigver.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_sigver.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_sigver.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_wp.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_wp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/m_wp.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/m_wp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/names.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/names.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/names.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/names.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/openbsd_hw.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/openbsd_hw.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/openbsd_hw.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/openbsd_hw.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p5_crpt.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p5_crpt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p5_crpt.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p5_crpt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p5_crpt2.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p5_crpt2.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p5_crpt2.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p5_crpt2.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p_dec.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p_dec.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p_dec.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p_dec.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p_open.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p_open.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p_open.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p_open.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p_seal.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p_seal.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p_seal.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p_seal.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p_sign.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p_sign.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p_sign.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p_sign.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p_verify.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p_verify.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/p_verify.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/p_verify.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/pmeth_fn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/pmeth_fn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/pmeth_fn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/pmeth_fn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/pmeth_gn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/pmeth_gn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/pmeth_gn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/pmeth_gn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/evp/pmeth_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/evp/pmeth_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/evp/pmeth_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/evp/pmeth_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ex_data.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ex_data.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ex_data.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ex_data.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/fips_err.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/fips_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/fips_err.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/fips_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/fips_ers.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/fips_ers.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/fips_ers.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/fips_ers.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/getenv.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/getenv.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/getenv.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/getenv.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/hmac/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/hmac/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/hmac/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/hmac/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/hmac/hm_ameth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/hmac/hm_ameth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/hmac/hm_ameth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/hmac/hm_ameth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/hmac/hm_pmeth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/hmac/hm_pmeth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/hmac/hm_pmeth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/hmac/hm_pmeth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/hmac/hmac.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/hmac/hmac.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/hmac/hmac.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/hmac/hmac.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/hmac/hmac.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/hmac/hmac.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/hmac/hmac.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/hmac/hmac.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/hmac/hmactest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/hmac/hmactest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/hmac/hmactest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/hmac/hmactest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ia64cpuid.S b/src/openssl/openssl-1.0.2v-chevah5/crypto/ia64cpuid.S similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ia64cpuid.S rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ia64cpuid.S diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/idea/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/idea/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/idea/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/idea/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/idea/i_cbc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/idea/i_cbc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/idea/i_cbc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/idea/i_cbc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/idea/i_cfb64.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/idea/i_cfb64.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/idea/i_cfb64.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/idea/i_cfb64.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/idea/i_ecb.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/idea/i_ecb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/idea/i_ecb.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/idea/i_ecb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/idea/i_ofb64.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/idea/i_ofb64.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/idea/i_ofb64.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/idea/i_ofb64.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/idea/i_skey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/idea/i_skey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/idea/i_skey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/idea/i_skey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/idea/idea.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/idea/idea.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/idea/idea.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/idea/idea.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/idea/idea_lcl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/idea/idea_lcl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/idea/idea_lcl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/idea/idea_lcl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/idea/idea_spd.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/idea/idea_spd.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/idea/idea_spd.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/idea/idea_spd.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/idea/ideatest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/idea/ideatest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/idea/ideatest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/idea/ideatest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/idea/version b/src/openssl/openssl-1.0.2v-chevah5/crypto/idea/version similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/idea/version rename to src/openssl/openssl-1.0.2v-chevah5/crypto/idea/version diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/install-crypto.com b/src/openssl/openssl-1.0.2v-chevah5/crypto/install-crypto.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/install-crypto.com rename to src/openssl/openssl-1.0.2v-chevah5/crypto/install-crypto.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/jpake/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/jpake/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/jpake/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/jpake/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/jpake/jpake.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/jpake/jpake.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/jpake/jpake.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/jpake/jpake.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/jpake/jpake.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/jpake/jpake.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/jpake/jpake.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/jpake/jpake.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/jpake/jpake_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/jpake/jpake_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/jpake/jpake_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/jpake/jpake_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/jpake/jpaketest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/jpake/jpaketest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/jpake/jpaketest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/jpake/jpaketest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/krb5/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/krb5/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/krb5/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/krb5/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/krb5/krb5_asn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/krb5/krb5_asn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/krb5/krb5_asn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/krb5/krb5_asn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/krb5/krb5_asn.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/krb5/krb5_asn.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/krb5/krb5_asn.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/krb5/krb5_asn.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/lhash/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/lhash/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/lhash/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/lhash/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/lhash/lh_stats.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/lhash/lh_stats.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/lhash/lh_stats.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/lhash/lh_stats.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/lhash/lh_test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/lhash/lh_test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/lhash/lh_test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/lhash/lh_test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/lhash/lhash.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/lhash/lhash.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/lhash/lhash.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/lhash/lhash.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/lhash/lhash.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/lhash/lhash.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/lhash/lhash.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/lhash/lhash.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/lhash/num.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/lhash/num.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/lhash/num.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/lhash/num.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md2/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/md2/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md2/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md2/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md2/md2.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/md2/md2.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md2/md2.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md2/md2.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md2/md2.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/md2/md2.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md2/md2.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md2/md2.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md2/md2_dgst.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/md2/md2_dgst.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md2/md2_dgst.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md2/md2_dgst.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md2/md2_one.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/md2/md2_one.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md2/md2_one.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md2/md2_one.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md2/md2test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/md2/md2test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md2/md2test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md2/md2test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md32_common.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/md32_common.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md32_common.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md32_common.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md4/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/md4/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md4/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md4/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md4/md4.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/md4/md4.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md4/md4.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md4/md4.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md4/md4.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/md4/md4.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md4/md4.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md4/md4.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md4/md4_dgst.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/md4/md4_dgst.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md4/md4_dgst.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md4/md4_dgst.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md4/md4_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/md4/md4_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md4/md4_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md4/md4_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md4/md4_one.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/md4/md4_one.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md4/md4_one.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md4/md4_one.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md4/md4s.cpp b/src/openssl/openssl-1.0.2v-chevah5/crypto/md4/md4s.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md4/md4s.cpp rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md4/md4s.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md4/md4test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/md4/md4test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md4/md4test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md4/md4test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md5/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/md5/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md5/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md5/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md5/asm/md5-586.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/md5/asm/md5-586.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md5/asm/md5-586.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md5/asm/md5-586.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md5/asm/md5-ia64.S b/src/openssl/openssl-1.0.2v-chevah5/crypto/md5/asm/md5-ia64.S similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md5/asm/md5-ia64.S rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md5/asm/md5-ia64.S diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md5/asm/md5-sparcv9.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/md5/asm/md5-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md5/asm/md5-sparcv9.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md5/asm/md5-sparcv9.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md5/asm/md5-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/md5/asm/md5-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md5/asm/md5-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md5/asm/md5-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md5/md5.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/md5/md5.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md5/md5.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md5/md5.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md5/md5.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/md5/md5.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md5/md5.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md5/md5.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md5/md5_dgst.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/md5/md5_dgst.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md5/md5_dgst.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md5/md5_dgst.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md5/md5_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/md5/md5_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md5/md5_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md5/md5_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md5/md5_one.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/md5/md5_one.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md5/md5_one.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md5/md5_one.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md5/md5s.cpp b/src/openssl/openssl-1.0.2v-chevah5/crypto/md5/md5s.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md5/md5s.cpp rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md5/md5s.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/md5/md5test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/md5/md5test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/md5/md5test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/md5/md5test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/mdc2/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/mdc2/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/mdc2/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/mdc2/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/mdc2/mdc2.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/mdc2/mdc2.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/mdc2/mdc2.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/mdc2/mdc2.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/mdc2/mdc2_one.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/mdc2/mdc2_one.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/mdc2/mdc2_one.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/mdc2/mdc2_one.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/mdc2/mdc2dgst.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/mdc2/mdc2dgst.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/mdc2/mdc2dgst.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/mdc2/mdc2dgst.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/mdc2/mdc2test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/mdc2/mdc2test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/mdc2/mdc2test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/mdc2/mdc2test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/mem.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/mem.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/mem.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/mem.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/mem_clr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/mem_clr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/mem_clr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/mem_clr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/mem_dbg.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/mem_dbg.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/mem_dbg.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/mem_dbg.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/aesni-gcm-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/aesni-gcm-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/aesni-gcm-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/aesni-gcm-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-alpha.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-alpha.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-alpha.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-alpha.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-armv4.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-armv4.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-armv4.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-armv4.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-ia64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-ia64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-ia64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-ia64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-parisc.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-parisc.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-parisc.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-parisc.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-s390x.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-s390x.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-s390x.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-s390x.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-sparcv9.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-sparcv9.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-sparcv9.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-x86.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-x86.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-x86.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-x86.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghash-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghash-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghashp8-ppc.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghashp8-ppc.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghashp8-ppc.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghashp8-ppc.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghashv8-armx.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghashv8-armx.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/asm/ghashv8-armx.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/asm/ghashv8-armx.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/cbc128.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/cbc128.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/cbc128.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/cbc128.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/ccm128.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/ccm128.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/ccm128.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/ccm128.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/cfb128.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/cfb128.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/cfb128.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/cfb128.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/ctr128.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/ctr128.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/ctr128.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/ctr128.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/cts128.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/cts128.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/cts128.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/cts128.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/gcm128.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/gcm128.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/gcm128.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/gcm128.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/modes.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/modes.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/modes.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/modes.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/modes_lcl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/modes_lcl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/modes_lcl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/modes_lcl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/ofb128.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/ofb128.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/ofb128.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/ofb128.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/wrap128.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/wrap128.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/wrap128.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/wrap128.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/modes/xts128.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/modes/xts128.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/modes/xts128.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/modes/xts128.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/o_dir.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/o_dir.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/o_dir.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/o_dir.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/o_dir.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/o_dir.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/o_dir.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/o_dir.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/o_dir_test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/o_dir_test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/o_dir_test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/o_dir_test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/o_fips.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/o_fips.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/o_fips.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/o_fips.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/o_init.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/o_init.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/o_init.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/o_init.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/o_str.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/o_str.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/o_str.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/o_str.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/o_str.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/o_str.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/o_str.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/o_str.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/o_time.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/o_time.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/o_time.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/o_time.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/o_time.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/o_time.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/o_time.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/o_time.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/o_names.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/o_names.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/o_names.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/o_names.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_dat.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_dat.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_dat.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_dat.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_dat.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_dat.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_dat.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_dat.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_dat.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_dat.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_dat.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_dat.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_mac.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_mac.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_mac.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_mac.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_mac.num b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_mac.num similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_mac.num rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_mac.num diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_xref.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_xref.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_xref.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_xref.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_xref.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_xref.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_xref.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_xref.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_xref.txt b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_xref.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/obj_xref.txt rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/obj_xref.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/objects.README b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/objects.README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/objects.README rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/objects.README diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/objects.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/objects.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/objects.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/objects.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/objects.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/objects.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/objects.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/objects.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/objects.txt b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/objects.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/objects.txt rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/objects.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/objects/objxref.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/objects/objxref.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/objects/objxref.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/objects/objxref.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_asn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_asn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_asn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_asn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_cl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_cl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_cl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_cl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_ext.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_ext.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_ext.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_ext.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_ht.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_ht.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_ht.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_ht.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_prn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_prn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_prn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_prn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_srv.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_srv.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_srv.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_srv.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_vfy.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_vfy.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ocsp/ocsp_vfy.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ocsp/ocsp_vfy.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/opensslconf.h.in b/src/openssl/openssl-1.0.2v-chevah5/crypto/opensslconf.h.in similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/opensslconf.h.in rename to src/openssl/openssl-1.0.2v-chevah5/crypto/opensslconf.h.in diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/opensslv.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/opensslv.h similarity index 96% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/opensslv.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/opensslv.h index 9f81ff653..56fdfd171 100644 --- a/src/openssl/openssl-1.0.2v-chevah4/crypto/opensslv.h +++ b/src/openssl/openssl-1.0.2v-chevah5/crypto/opensslv.h @@ -32,9 +32,9 @@ extern "C" { */ # define OPENSSL_VERSION_NUMBER 0x10002160L # ifdef OPENSSL_FIPS -# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2v-fips-chevah4 06 Apr 2022" +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2v-fips-chevah5 21 Sep 2023" # else -# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2v-chevah4 06 Apr 2022" +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2v-chevah5 21 Sep 2023" # endif # define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ossl_typ.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ossl_typ.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ossl_typ.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ossl_typ.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pariscid.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/pariscid.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pariscid.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pariscid.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/message b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/message similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/message rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/message diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem2.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem2.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem2.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem2.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_all.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_all.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_all.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_all.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_info.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_info.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_info.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_info.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_oth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_oth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_oth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_oth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_pk8.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_pk8.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_pk8.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_pk8.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_pkey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_pkey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_pkey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_pkey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_seal.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_seal.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_seal.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_seal.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_sign.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_sign.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_sign.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_sign.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_x509.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_x509.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_x509.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_x509.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_xaux.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_xaux.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pem_xaux.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pem_xaux.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pkcs7.lis b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pkcs7.lis similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pkcs7.lis rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pkcs7.lis diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pvkfmt.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pvkfmt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pem/pvkfmt.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pem/pvkfmt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/cbc.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/cbc.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/cbc.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/cbc.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/ppc-xlate.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/ppc-xlate.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/ppc-xlate.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/ppc-xlate.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/readme b/src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/readme similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/readme rename to src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/readme diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/sparcv9_modes.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/sparcv9_modes.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/sparcv9_modes.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/sparcv9_modes.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/x86_64-xlate.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/x86_64-xlate.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/x86_64-xlate.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/x86_64-xlate.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/x86asm.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/x86asm.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/x86asm.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/x86asm.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/x86gas.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/x86gas.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/x86gas.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/x86gas.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/x86masm.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/x86masm.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/x86masm.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/x86masm.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/x86nasm.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/x86nasm.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/perlasm/x86nasm.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/perlasm/x86nasm.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_add.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_add.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_add.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_add.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_asn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_asn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_asn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_asn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_attr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_attr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_attr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_attr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_crpt.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_crpt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_crpt.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_crpt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_crt.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_crt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_crt.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_crt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_decr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_decr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_decr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_decr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_init.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_init.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_init.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_init.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_key.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_key.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_key.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_key.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_kiss.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_kiss.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_kiss.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_kiss.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_mutl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_mutl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_mutl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_mutl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_npas.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_npas.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_npas.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_npas.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_p8d.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_p8d.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_p8d.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_p8d.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_p8e.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_p8e.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_p8e.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_p8e.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_utl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_utl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/p12_utl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/p12_utl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/pk12err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/pk12err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/pk12err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/pk12err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/pkcs12.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/pkcs12.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs12/pkcs12.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs12/pkcs12.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/bio_pk7.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/bio_pk7.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/bio_pk7.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/bio_pk7.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_asn1.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_asn1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_asn1.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_asn1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_attr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_attr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_attr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_attr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_dgst.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_dgst.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_dgst.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_dgst.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_doit.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_doit.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_doit.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_doit.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_mime.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_mime.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_mime.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_mime.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_smime.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_smime.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pk7_smime.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pk7_smime.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pkcs7.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pkcs7.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pkcs7.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pkcs7.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pkcs7err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pkcs7err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pkcs7/pkcs7err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pkcs7/pkcs7err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ppc_arch.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ppc_arch.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ppc_arch.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ppc_arch.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ppccap.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ppccap.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ppccap.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ppccap.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ppccpuid.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/ppccpuid.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ppccpuid.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ppccpuid.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pqueue/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/pqueue/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pqueue/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pqueue/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pqueue/pq_test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pqueue/pq_test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pqueue/pq_test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pqueue/pq_test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pqueue/pqueue.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/pqueue/pqueue.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pqueue/pqueue.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pqueue/pqueue.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/pqueue/pqueue.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/pqueue/pqueue.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/pqueue/pqueue.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/pqueue/pqueue.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rand/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/rand/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rand/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rand/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rand/md_rand.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rand/md_rand.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rand/md_rand.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rand/md_rand.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_egd.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_egd.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_egd.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_egd.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_lcl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_lcl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_lcl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_lcl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_nw.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_nw.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_nw.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_nw.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_os2.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_os2.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_os2.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_os2.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_unix.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_unix.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_unix.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_unix.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_vms.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_vms.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_vms.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_vms.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_win.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_win.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rand/rand_win.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rand/rand_win.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rand/randfile.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rand/randfile.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rand/randfile.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rand/randfile.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rand/randtest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rand/randtest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rand/randtest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rand/randtest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2_cbc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2_cbc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2_cbc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2_cbc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2_ecb.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2_ecb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2_ecb.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2_ecb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2_skey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2_skey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2_skey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2_skey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2cfb64.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2cfb64.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2cfb64.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2cfb64.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2ofb64.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2ofb64.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2ofb64.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2ofb64.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2speed.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2speed.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2speed.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2speed.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rc2test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rc2test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rrc2.doc b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rrc2.doc similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/rrc2.doc rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/rrc2.doc diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/tab.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/tab.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/tab.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/tab.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/version b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/version similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc2/version rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc2/version diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/asm/rc4-586.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/asm/rc4-586.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/asm/rc4-586.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/asm/rc4-586.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/asm/rc4-ia64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/asm/rc4-ia64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/asm/rc4-ia64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/asm/rc4-ia64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/asm/rc4-md5-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/asm/rc4-md5-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/asm/rc4-md5-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/asm/rc4-md5-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/asm/rc4-parisc.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/asm/rc4-parisc.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/asm/rc4-parisc.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/asm/rc4-parisc.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/asm/rc4-s390x.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/asm/rc4-s390x.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/asm/rc4-s390x.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/asm/rc4-s390x.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/asm/rc4-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/asm/rc4-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/asm/rc4-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/asm/rc4-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4_skey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4_skey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4_skey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4_skey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4_utl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4_utl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4_utl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4_utl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4s.cpp b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4s.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4s.cpp rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4s.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4speed.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4speed.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4speed.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4speed.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rc4test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rc4test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rrc4.doc b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rrc4.doc similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc4/rrc4.doc rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc4/rrc4.doc diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/asm/rc5-586.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/asm/rc5-586.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/asm/rc5-586.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/asm/rc5-586.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5_ecb.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5_ecb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5_ecb.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5_ecb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5_enc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5_skey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5_skey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5_skey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5_skey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5cfb64.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5cfb64.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5cfb64.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5cfb64.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5ofb64.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5ofb64.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5ofb64.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5ofb64.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5s.cpp b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5s.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5s.cpp rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5s.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5speed.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5speed.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5speed.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5speed.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rc5/rc5test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rc5/rc5test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/README b/src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/README rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/asm/rips.cpp b/src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/asm/rips.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/asm/rips.cpp rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/asm/rips.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/asm/rmd-586.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/asm/rmd-586.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/asm/rmd-586.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/asm/rmd-586.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/ripemd.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/ripemd.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/ripemd.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/ripemd.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/rmd160.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/rmd160.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/rmd160.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/rmd160.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/rmd_dgst.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/rmd_dgst.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/rmd_dgst.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/rmd_dgst.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/rmd_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/rmd_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/rmd_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/rmd_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/rmd_one.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/rmd_one.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/rmd_one.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/rmd_one.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/rmdconst.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/rmdconst.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/rmdconst.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/rmdconst.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/rmdtest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/rmdtest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ripemd/rmdtest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ripemd/rmdtest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_ameth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_ameth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_ameth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_ameth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_asn1.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_asn1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_asn1.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_asn1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_chk.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_chk.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_chk.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_chk.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_crpt.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_crpt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_crpt.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_crpt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_depr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_depr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_depr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_depr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_eay.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_eay.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_eay.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_eay.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_gen.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_gen.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_gen.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_gen.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_none.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_none.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_none.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_none.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_null.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_null.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_null.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_null.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_oaep.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_oaep.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_oaep.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_oaep.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_pk1.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_pk1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_pk1.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_pk1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_pmeth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_pmeth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_pmeth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_pmeth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_prn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_prn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_prn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_prn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_pss.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_pss.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_pss.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_pss.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_saos.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_saos.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_saos.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_saos.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_sign.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_sign.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_sign.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_sign.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_ssl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_ssl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_ssl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_ssl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_x931.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_x931.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/rsa/rsa_x931.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/rsa/rsa_x931.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/s390xcap.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/s390xcap.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/s390xcap.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/s390xcap.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/s390xcpuid.S b/src/openssl/openssl-1.0.2v-chevah5/crypto/s390xcpuid.S similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/s390xcpuid.S rename to src/openssl/openssl-1.0.2v-chevah5/crypto/s390xcpuid.S diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/seed/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/seed/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/seed/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/seed/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/seed/seed.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/seed/seed.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/seed/seed.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/seed/seed.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/seed/seed.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/seed/seed.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/seed/seed.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/seed/seed.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/seed/seed_cbc.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/seed/seed_cbc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/seed/seed_cbc.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/seed/seed_cbc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/seed/seed_cfb.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/seed/seed_cfb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/seed/seed_cfb.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/seed/seed_cfb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/seed/seed_ecb.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/seed/seed_ecb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/seed/seed_ecb.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/seed/seed_ecb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/seed/seed_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/seed/seed_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/seed/seed_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/seed/seed_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/seed/seed_ofb.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/seed/seed_ofb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/seed/seed_ofb.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/seed/seed_ofb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/README b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/README rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-586.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-586.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-586.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-586.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-alpha.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-alpha.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-alpha.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-alpha.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-armv4-large.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-armv4-large.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-armv4-large.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-armv4-large.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-armv8.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-armv8.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-armv8.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-armv8.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-ia64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-ia64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-ia64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-ia64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-mb-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-mb-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-mb-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-mb-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-mips.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-mips.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-mips.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-mips.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-parisc.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-parisc.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-parisc.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-parisc.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-ppc.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-ppc.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-ppc.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-ppc.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-s390x.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-s390x.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-s390x.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-s390x.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-sparcv9.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-sparcv9.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-sparcv9.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-sparcv9a.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-sparcv9a.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-sparcv9a.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-sparcv9a.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-thumb.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-thumb.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-thumb.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-thumb.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha1-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha1-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha256-586.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha256-586.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha256-586.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha256-586.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha256-armv4.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha256-armv4.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha256-armv4.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha256-armv4.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha256-mb-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha256-mb-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha256-mb-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha256-mb-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-586.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-586.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-586.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-586.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-armv4.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-armv4.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-armv4.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-armv4.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-armv8.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-armv8.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-armv8.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-armv8.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-ia64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-ia64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-ia64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-ia64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-mips.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-mips.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-mips.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-mips.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-parisc.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-parisc.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-parisc.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-parisc.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-ppc.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-ppc.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-ppc.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-ppc.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-s390x.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-s390x.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-s390x.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-s390x.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-sparcv9.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-sparcv9.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-sparcv9.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512p8-ppc.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512p8-ppc.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/asm/sha512p8-ppc.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/asm/sha512p8-ppc.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha1.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha1.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha1_one.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha1_one.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha1_one.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha1_one.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha1dgst.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha1dgst.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha1dgst.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha1dgst.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha1test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha1test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha1test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha1test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha256.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha256.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha256.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha256.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha256t.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha256t.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha256t.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha256t.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha512.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha512.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha512.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha512.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha512t.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha512t.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha512t.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha512t.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha_dgst.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha_dgst.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha_dgst.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha_dgst.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha_one.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha_one.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/sha_one.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/sha_one.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sha/shatest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/sha/shatest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sha/shatest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sha/shatest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sparc_arch.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/sparc_arch.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sparc_arch.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sparc_arch.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sparccpuid.S b/src/openssl/openssl-1.0.2v-chevah5/crypto/sparccpuid.S similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sparccpuid.S rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sparccpuid.S diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/sparcv9cap.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/sparcv9cap.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/sparcv9cap.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/sparcv9cap.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/srp/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/srp/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/srp/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/srp/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/srp/srp.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/srp/srp.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/srp/srp.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/srp/srp.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/srp/srp_grps.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/srp/srp_grps.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/srp/srp_grps.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/srp/srp_grps.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/srp/srp_lcl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/srp/srp_lcl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/srp/srp_lcl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/srp/srp_lcl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/srp/srp_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/srp/srp_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/srp/srp_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/srp/srp_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/srp/srp_vfy.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/srp/srp_vfy.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/srp/srp_vfy.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/srp/srp_vfy.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/srp/srptest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/srp/srptest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/srp/srptest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/srp/srptest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/stack/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/stack/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/stack/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/stack/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/stack/safestack.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/stack/safestack.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/stack/safestack.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/stack/safestack.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/stack/stack.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/stack/stack.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/stack/stack.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/stack/stack.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/stack/stack.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/stack/stack.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/stack/stack.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/stack/stack.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/store/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/store/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/store/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/store/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/store/README b/src/openssl/openssl-1.0.2v-chevah5/crypto/store/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/store/README rename to src/openssl/openssl-1.0.2v-chevah5/crypto/store/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/store/store.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/store/store.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/store/store.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/store/store.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/store/str_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/store/str_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/store/str_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/store/str_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/store/str_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/store/str_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/store/str_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/store/str_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/store/str_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/store/str_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/store/str_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/store/str_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/store/str_mem.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/store/str_mem.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/store/str_mem.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/store/str_mem.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/store/str_meth.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/store/str_meth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/store/str_meth.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/store/str_meth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/symhacks.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/symhacks.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/symhacks.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/symhacks.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/threads/README b/src/openssl/openssl-1.0.2v-chevah5/crypto/threads/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/threads/README rename to src/openssl/openssl-1.0.2v-chevah5/crypto/threads/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/threads/mttest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/threads/mttest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/threads/mttest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/threads/mttest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/threads/netware.bat b/src/openssl/openssl-1.0.2v-chevah5/crypto/threads/netware.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/threads/netware.bat rename to src/openssl/openssl-1.0.2v-chevah5/crypto/threads/netware.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/threads/profile.sh b/src/openssl/openssl-1.0.2v-chevah5/crypto/threads/profile.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/threads/profile.sh rename to src/openssl/openssl-1.0.2v-chevah5/crypto/threads/profile.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/threads/ptest.bat b/src/openssl/openssl-1.0.2v-chevah5/crypto/threads/ptest.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/threads/ptest.bat rename to src/openssl/openssl-1.0.2v-chevah5/crypto/threads/ptest.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/threads/pthread.sh b/src/openssl/openssl-1.0.2v-chevah5/crypto/threads/pthread.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/threads/pthread.sh rename to src/openssl/openssl-1.0.2v-chevah5/crypto/threads/pthread.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/threads/pthread2.sh b/src/openssl/openssl-1.0.2v-chevah5/crypto/threads/pthread2.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/threads/pthread2.sh rename to src/openssl/openssl-1.0.2v-chevah5/crypto/threads/pthread2.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/threads/pthreads-vms.com b/src/openssl/openssl-1.0.2v-chevah5/crypto/threads/pthreads-vms.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/threads/pthreads-vms.com rename to src/openssl/openssl-1.0.2v-chevah5/crypto/threads/pthreads-vms.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/threads/purify.sh b/src/openssl/openssl-1.0.2v-chevah5/crypto/threads/purify.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/threads/purify.sh rename to src/openssl/openssl-1.0.2v-chevah5/crypto/threads/purify.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/threads/solaris.sh b/src/openssl/openssl-1.0.2v-chevah5/crypto/threads/solaris.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/threads/solaris.sh rename to src/openssl/openssl-1.0.2v-chevah5/crypto/threads/solaris.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/threads/th-lock.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/threads/th-lock.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/threads/th-lock.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/threads/th-lock.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/threads/win32.bat b/src/openssl/openssl-1.0.2v-chevah5/crypto/threads/win32.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/threads/win32.bat rename to src/openssl/openssl-1.0.2v-chevah5/crypto/threads/win32.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ts/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/ts/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ts/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ts/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_asn1.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_asn1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_asn1.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_asn1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_conf.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_conf.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_conf.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_conf.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_req_print.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_req_print.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_req_print.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_req_print.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_req_utils.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_req_utils.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_req_utils.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_req_utils.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_rsp_print.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_rsp_print.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_rsp_print.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_rsp_print.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_rsp_sign.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_rsp_sign.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_rsp_sign.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_rsp_sign.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_rsp_utils.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_rsp_utils.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_rsp_utils.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_rsp_utils.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_rsp_verify.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_rsp_verify.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_rsp_verify.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_rsp_verify.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_verify_ctx.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_verify_ctx.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ts/ts_verify_ctx.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ts/ts_verify_ctx.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/txt_db/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/txt_db/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/txt_db/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/txt_db/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/txt_db/txt_db.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/txt_db/txt_db.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/txt_db/txt_db.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/txt_db/txt_db.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/txt_db/txt_db.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/txt_db/txt_db.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/txt_db/txt_db.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/txt_db/txt_db.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ui/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/ui/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ui/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ui/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui_compat.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui_compat.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui_compat.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui_compat.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui_compat.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui_compat.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui_compat.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui_compat.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui_openssl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui_openssl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui_openssl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui_openssl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui_util.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui_util.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/ui/ui_util.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/ui/ui_util.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/uid.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/uid.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/uid.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/uid.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/vms_rms.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/vms_rms.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/vms_rms.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/vms_rms.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/asm/wp-mmx.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/asm/wp-mmx.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/asm/wp-mmx.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/asm/wp-mmx.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/asm/wp-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/asm/wp-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/asm/wp-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/asm/wp-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/whrlpool.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/whrlpool.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/whrlpool.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/whrlpool.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/wp_block.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/wp_block.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/wp_block.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/wp_block.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/wp_dgst.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/wp_dgst.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/wp_dgst.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/wp_dgst.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/wp_locl.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/wp_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/wp_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/wp_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/wp_test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/wp_test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/whrlpool/wp_test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/whrlpool/wp_test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/by_dir.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/by_dir.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/by_dir.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/by_dir.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/by_file.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/by_file.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/by_file.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/by_file.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/verify_extra_test.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/verify_extra_test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/verify_extra_test.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/verify_extra_test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/vpm_int.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/vpm_int.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/vpm_int.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/vpm_int.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_att.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_att.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_att.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_att.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_cmp.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_cmp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_cmp.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_cmp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_d2.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_d2.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_d2.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_d2.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_def.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_def.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_def.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_def.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_ext.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_ext.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_ext.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_ext.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_lu.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_lu.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_lu.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_lu.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_obj.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_obj.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_obj.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_obj.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_r2x.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_r2x.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_r2x.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_r2x.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_req.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_req.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_req.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_req.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_set.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_set.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_set.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_set.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_trs.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_trs.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_trs.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_trs.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_txt.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_txt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_txt.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_txt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_v3.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_v3.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_v3.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_v3.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_vfy.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_vfy.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_vfy.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_vfy.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_vfy.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_vfy.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_vfy.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_vfy.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_vpm.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_vpm.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509_vpm.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509_vpm.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509cset.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509cset.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509cset.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509cset.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509name.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509name.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509name.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509name.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509rset.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509rset.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509rset.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509rset.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509spki.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509spki.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509spki.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509spki.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509type.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509type.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x509type.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x509type.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x_all.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x_all.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509/x_all.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509/x_all.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/Makefile b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/ext_dat.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/ext_dat.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/ext_dat.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/ext_dat.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/pcy_cache.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/pcy_cache.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/pcy_cache.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/pcy_cache.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/pcy_data.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/pcy_data.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/pcy_data.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/pcy_data.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/pcy_int.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/pcy_int.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/pcy_int.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/pcy_int.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/pcy_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/pcy_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/pcy_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/pcy_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/pcy_map.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/pcy_map.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/pcy_map.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/pcy_map.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/pcy_node.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/pcy_node.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/pcy_node.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/pcy_node.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/pcy_tree.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/pcy_tree.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/pcy_tree.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/pcy_tree.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/tabtest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/tabtest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/tabtest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/tabtest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_addr.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_addr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_addr.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_addr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_akey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_akey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_akey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_akey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_akeya.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_akeya.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_akeya.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_akeya.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_alt.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_alt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_alt.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_alt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_asid.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_asid.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_asid.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_asid.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_bcons.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_bcons.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_bcons.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_bcons.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_bitst.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_bitst.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_bitst.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_bitst.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_conf.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_conf.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_conf.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_conf.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_cpols.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_cpols.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_cpols.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_cpols.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_crld.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_crld.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_crld.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_crld.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_enum.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_enum.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_enum.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_enum.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_extku.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_extku.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_extku.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_extku.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_genn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_genn.c similarity index 99% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_genn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_genn.c index b96ed5eb1..b9b17caf2 100644 --- a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_genn.c +++ b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_genn.c @@ -148,7 +148,7 @@ int GENERAL_NAME_cmp(GENERAL_NAME *a, GENERAL_NAME *b) return -1; switch (a->type) { case GEN_X400: - result = ASN1_TYPE_cmp(a->d.x400Address, b->d.x400Address); + result = ASN1_STRING_cmp(a->d.x400Address, b->d.x400Address); break; case GEN_EDIPARTY: diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_ia5.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_ia5.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_ia5.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_ia5.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_info.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_info.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_info.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_info.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_int.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_int.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_int.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_int.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_lib.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_ncons.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_ncons.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_ncons.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_ncons.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_ocsp.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_ocsp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_ocsp.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_ocsp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_pci.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_pci.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_pci.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_pci.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_pcia.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_pcia.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_pcia.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_pcia.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_pcons.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_pcons.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_pcons.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_pcons.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_pku.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_pku.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_pku.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_pku.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_pmaps.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_pmaps.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_pmaps.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_pmaps.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_prn.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_prn.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_prn.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_prn.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_purp.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_purp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_purp.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_purp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_scts.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_scts.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_scts.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_scts.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_skey.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_skey.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_skey.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_skey.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_sxnet.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_sxnet.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_sxnet.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_sxnet.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_utl.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_utl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3_utl.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3_utl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3conf.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3conf.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3conf.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3conf.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3err.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3err.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3nametest.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3nametest.c similarity index 99% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3nametest.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3nametest.c index 4c7f5d899..d64996db3 100644 --- a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3nametest.c +++ b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3nametest.c @@ -610,6 +610,14 @@ struct gennamedata { 0xb7, 0x09, 0x02, 0x02 }, 15 + }, { + /* + * Regression test for CVE-2023-0286. + */ + { + 0xa3, 0x00 + }, + 2 } }; diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3prin.c b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3prin.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/v3prin.c rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/v3prin.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/x509v3.h b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/x509v3.h similarity index 99% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/x509v3.h rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/x509v3.h index 1160a7ca8..9cb2d339c 100644 --- a/src/openssl/openssl-1.0.2v-chevah4/crypto/x509v3/x509v3.h +++ b/src/openssl/openssl-1.0.2v-chevah5/crypto/x509v3/x509v3.h @@ -190,7 +190,7 @@ typedef struct GENERAL_NAME_st { OTHERNAME *otherName; /* otherName */ ASN1_IA5STRING *rfc822Name; ASN1_IA5STRING *dNSName; - ASN1_TYPE *x400Address; + ASN1_STRING *x400Address; X509_NAME *directoryName; EDIPARTYNAME *ediPartyName; ASN1_IA5STRING *uniformResourceIdentifier; diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x86_64cpuid.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/x86_64cpuid.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x86_64cpuid.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x86_64cpuid.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/crypto/x86cpuid.pl b/src/openssl/openssl-1.0.2v-chevah5/crypto/x86cpuid.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/crypto/x86cpuid.pl rename to src/openssl/openssl-1.0.2v-chevah5/crypto/x86cpuid.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/README b/src/openssl/openssl-1.0.2v-chevah5/demos/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/README rename to src/openssl/openssl-1.0.2v-chevah5/demos/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/asn1/README.ASN1 b/src/openssl/openssl-1.0.2v-chevah5/demos/asn1/README.ASN1 similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/asn1/README.ASN1 rename to src/openssl/openssl-1.0.2v-chevah5/demos/asn1/README.ASN1 diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/asn1/ocsp.c b/src/openssl/openssl-1.0.2v-chevah5/demos/asn1/ocsp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/asn1/ocsp.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/asn1/ocsp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/b64.c b/src/openssl/openssl-1.0.2v-chevah5/demos/b64.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/b64.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/b64.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/b64.pl b/src/openssl/openssl-1.0.2v-chevah5/demos/b64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/b64.pl rename to src/openssl/openssl-1.0.2v-chevah5/demos/b64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/bio/Makefile b/src/openssl/openssl-1.0.2v-chevah5/demos/bio/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/bio/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/demos/bio/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/bio/README b/src/openssl/openssl-1.0.2v-chevah5/demos/bio/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/bio/README rename to src/openssl/openssl-1.0.2v-chevah5/demos/bio/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/bio/accept.cnf b/src/openssl/openssl-1.0.2v-chevah5/demos/bio/accept.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/bio/accept.cnf rename to src/openssl/openssl-1.0.2v-chevah5/demos/bio/accept.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/bio/client-arg.c b/src/openssl/openssl-1.0.2v-chevah5/demos/bio/client-arg.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/bio/client-arg.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/bio/client-arg.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/bio/client-conf.c b/src/openssl/openssl-1.0.2v-chevah5/demos/bio/client-conf.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/bio/client-conf.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/bio/client-conf.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/bio/connect.cnf b/src/openssl/openssl-1.0.2v-chevah5/demos/bio/connect.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/bio/connect.cnf rename to src/openssl/openssl-1.0.2v-chevah5/demos/bio/connect.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/bio/saccept.c b/src/openssl/openssl-1.0.2v-chevah5/demos/bio/saccept.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/bio/saccept.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/bio/saccept.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/bio/sconnect.c b/src/openssl/openssl-1.0.2v-chevah5/demos/bio/sconnect.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/bio/sconnect.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/bio/sconnect.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/bio/server-arg.c b/src/openssl/openssl-1.0.2v-chevah5/demos/bio/server-arg.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/bio/server-arg.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/bio/server-arg.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/bio/server-conf.c b/src/openssl/openssl-1.0.2v-chevah5/demos/bio/server-conf.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/bio/server-conf.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/bio/server-conf.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/bio/server.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/bio/server.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/bio/server.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/bio/server.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/cacert.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/cacert.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/cacert.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/cacert.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/cakey.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/cakey.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/cakey.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/cakey.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_comp.c b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_comp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_comp.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_comp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_ddec.c b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_ddec.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_ddec.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_ddec.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_dec.c b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_dec.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_dec.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_dec.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_denc.c b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_denc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_denc.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_denc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_enc.c b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_sign.c b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_sign.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_sign.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_sign.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_sign2.c b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_sign2.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_sign2.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_sign2.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_uncomp.c b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_uncomp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_uncomp.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_uncomp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_ver.c b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_ver.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/cms_ver.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/cms_ver.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/comp.txt b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/comp.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/comp.txt rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/comp.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/encr.txt b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/encr.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/encr.txt rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/encr.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/sign.txt b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/sign.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/sign.txt rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/sign.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/signer.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/signer.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/signer.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/signer.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/cms/signer2.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/cms/signer2.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/cms/signer2.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/cms/signer2.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/Makefile b/src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/README b/src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/README rename to src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/cacerts.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/cacerts.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/cacerts.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/cacerts.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/cert.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/cert.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/cert.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/cert.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/easy-tls.c b/src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/easy-tls.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/easy-tls.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/easy-tls.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/easy-tls.h b/src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/easy-tls.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/easy-tls.h rename to src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/easy-tls.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/test.c b/src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/test.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/test.h b/src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/test.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/easy_tls/test.h rename to src/openssl/openssl-1.0.2v-chevah5/demos/easy_tls/test.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/cluster_labs/Makefile b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/cluster_labs/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/cluster_labs/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/cluster_labs/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/cluster_labs/cluster_labs.h b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/cluster_labs/cluster_labs.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/cluster_labs/cluster_labs.h rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/cluster_labs/cluster_labs.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/cluster_labs/hw_cluster_labs.c b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/cluster_labs/hw_cluster_labs.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/cluster_labs/hw_cluster_labs.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/cluster_labs/hw_cluster_labs.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/cluster_labs/hw_cluster_labs.ec b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/cluster_labs/hw_cluster_labs.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/cluster_labs/hw_cluster_labs.ec rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/cluster_labs/hw_cluster_labs.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/cluster_labs/hw_cluster_labs_err.c b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/cluster_labs/hw_cluster_labs_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/cluster_labs/hw_cluster_labs_err.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/cluster_labs/hw_cluster_labs_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/cluster_labs/hw_cluster_labs_err.h b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/cluster_labs/hw_cluster_labs_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/cluster_labs/hw_cluster_labs_err.h rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/cluster_labs/hw_cluster_labs_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/ibmca/Makefile b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/ibmca/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/ibmca/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/ibmca/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/ibmca/hw_ibmca.c b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/ibmca/hw_ibmca.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/ibmca/hw_ibmca.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/ibmca/hw_ibmca.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/ibmca/hw_ibmca.ec b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/ibmca/hw_ibmca.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/ibmca/hw_ibmca.ec rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/ibmca/hw_ibmca.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/ibmca/hw_ibmca_err.c b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/ibmca/hw_ibmca_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/ibmca/hw_ibmca_err.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/ibmca/hw_ibmca_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/ibmca/hw_ibmca_err.h b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/ibmca/hw_ibmca_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/ibmca/hw_ibmca_err.h rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/ibmca/hw_ibmca_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/ibmca/ica_openssl_api.h b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/ibmca/ica_openssl_api.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/ibmca/ica_openssl_api.h rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/ibmca/ica_openssl_api.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/rsaref/Makefile b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/rsaref/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/rsaref/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/rsaref/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/rsaref/README b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/rsaref/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/rsaref/README rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/rsaref/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/rsaref/build.com b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/rsaref/build.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/rsaref/build.com rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/rsaref/build.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/rsaref/rsaref.c b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/rsaref/rsaref.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/rsaref/rsaref.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/rsaref/rsaref.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/rsaref/rsaref.ec b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/rsaref/rsaref.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/rsaref/rsaref.ec rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/rsaref/rsaref.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/rsaref/rsaref_err.c b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/rsaref/rsaref_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/rsaref/rsaref_err.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/rsaref/rsaref_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/rsaref/rsaref_err.h b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/rsaref/rsaref_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/rsaref/rsaref_err.h rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/rsaref/rsaref_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/zencod/Makefile b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/zencod/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/zencod/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/zencod/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/zencod/hw_zencod.c b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/zencod/hw_zencod.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/zencod/hw_zencod.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/zencod/hw_zencod.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/zencod/hw_zencod.ec b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/zencod/hw_zencod.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/zencod/hw_zencod.ec rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/zencod/hw_zencod.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/zencod/hw_zencod.h b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/zencod/hw_zencod.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/zencod/hw_zencod.h rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/zencod/hw_zencod.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/zencod/hw_zencod_err.c b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/zencod/hw_zencod_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/zencod/hw_zencod_err.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/zencod/hw_zencod_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/engines/zencod/hw_zencod_err.h b/src/openssl/openssl-1.0.2v-chevah5/demos/engines/zencod/hw_zencod_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/engines/zencod/hw_zencod_err.h rename to src/openssl/openssl-1.0.2v-chevah5/demos/engines/zencod/hw_zencod_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/pkcs12/README b/src/openssl/openssl-1.0.2v-chevah5/demos/pkcs12/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/pkcs12/README rename to src/openssl/openssl-1.0.2v-chevah5/demos/pkcs12/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/pkcs12/pkread.c b/src/openssl/openssl-1.0.2v-chevah5/demos/pkcs12/pkread.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/pkcs12/pkread.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/pkcs12/pkread.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/pkcs12/pkwrite.c b/src/openssl/openssl-1.0.2v-chevah5/demos/pkcs12/pkwrite.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/pkcs12/pkwrite.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/pkcs12/pkwrite.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/prime/Makefile b/src/openssl/openssl-1.0.2v-chevah5/demos/prime/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/prime/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/demos/prime/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/prime/prime.c b/src/openssl/openssl-1.0.2v-chevah5/demos/prime/prime.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/prime/prime.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/prime/prime.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/privkey.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/privkey.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/privkey.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/privkey.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/selfsign.c b/src/openssl/openssl-1.0.2v-chevah5/demos/selfsign.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/selfsign.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/selfsign.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/sign/Makefile b/src/openssl/openssl-1.0.2v-chevah5/demos/sign/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/sign/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/demos/sign/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/sign/cert.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/sign/cert.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/sign/cert.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/sign/cert.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/sign/key.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/sign/key.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/sign/key.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/sign/key.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/sign/sig.txt b/src/openssl/openssl-1.0.2v-chevah5/demos/sign/sig.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/sign/sig.txt rename to src/openssl/openssl-1.0.2v-chevah5/demos/sign/sig.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/sign/sign.c b/src/openssl/openssl-1.0.2v-chevah5/demos/sign/sign.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/sign/sign.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/sign/sign.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/sign/sign.txt b/src/openssl/openssl-1.0.2v-chevah5/demos/sign/sign.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/sign/sign.txt rename to src/openssl/openssl-1.0.2v-chevah5/demos/sign/sign.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/smime/cacert.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/smime/cacert.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/smime/cacert.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/smime/cacert.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/smime/cakey.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/smime/cakey.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/smime/cakey.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/smime/cakey.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/smime/encr.txt b/src/openssl/openssl-1.0.2v-chevah5/demos/smime/encr.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/smime/encr.txt rename to src/openssl/openssl-1.0.2v-chevah5/demos/smime/encr.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/smime/sign.txt b/src/openssl/openssl-1.0.2v-chevah5/demos/smime/sign.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/smime/sign.txt rename to src/openssl/openssl-1.0.2v-chevah5/demos/smime/sign.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/smime/signer.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/smime/signer.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/smime/signer.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/smime/signer.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/smime/signer2.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/smime/signer2.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/smime/signer2.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/smime/signer2.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/smime/smdec.c b/src/openssl/openssl-1.0.2v-chevah5/demos/smime/smdec.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/smime/smdec.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/smime/smdec.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/smime/smenc.c b/src/openssl/openssl-1.0.2v-chevah5/demos/smime/smenc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/smime/smenc.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/smime/smenc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/smime/smsign.c b/src/openssl/openssl-1.0.2v-chevah5/demos/smime/smsign.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/smime/smsign.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/smime/smsign.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/smime/smsign2.c b/src/openssl/openssl-1.0.2v-chevah5/demos/smime/smsign2.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/smime/smsign2.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/smime/smsign2.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/smime/smver.c b/src/openssl/openssl-1.0.2v-chevah5/demos/smime/smver.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/smime/smver.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/smime/smver.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/spkigen.c b/src/openssl/openssl-1.0.2v-chevah5/demos/spkigen.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/spkigen.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/spkigen.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/ssl/cli.cpp b/src/openssl/openssl-1.0.2v-chevah5/demos/ssl/cli.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/ssl/cli.cpp rename to src/openssl/openssl-1.0.2v-chevah5/demos/ssl/cli.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/ssl/inetdsrv.cpp b/src/openssl/openssl-1.0.2v-chevah5/demos/ssl/inetdsrv.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/ssl/inetdsrv.cpp rename to src/openssl/openssl-1.0.2v-chevah5/demos/ssl/inetdsrv.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/ssl/serv.cpp b/src/openssl/openssl-1.0.2v-chevah5/demos/ssl/serv.cpp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/ssl/serv.cpp rename to src/openssl/openssl-1.0.2v-chevah5/demos/ssl/serv.cpp diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/ssltest-ecc/ECC-RSAcertgen.sh b/src/openssl/openssl-1.0.2v-chevah5/demos/ssltest-ecc/ECC-RSAcertgen.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/ssltest-ecc/ECC-RSAcertgen.sh rename to src/openssl/openssl-1.0.2v-chevah5/demos/ssltest-ecc/ECC-RSAcertgen.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/ssltest-ecc/ECCcertgen.sh b/src/openssl/openssl-1.0.2v-chevah5/demos/ssltest-ecc/ECCcertgen.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/ssltest-ecc/ECCcertgen.sh rename to src/openssl/openssl-1.0.2v-chevah5/demos/ssltest-ecc/ECCcertgen.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/ssltest-ecc/README b/src/openssl/openssl-1.0.2v-chevah5/demos/ssltest-ecc/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/ssltest-ecc/README rename to src/openssl/openssl-1.0.2v-chevah5/demos/ssltest-ecc/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/ssltest-ecc/RSAcertgen.sh b/src/openssl/openssl-1.0.2v-chevah5/demos/ssltest-ecc/RSAcertgen.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/ssltest-ecc/RSAcertgen.sh rename to src/openssl/openssl-1.0.2v-chevah5/demos/ssltest-ecc/RSAcertgen.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/ssltest-ecc/ssltest.sh b/src/openssl/openssl-1.0.2v-chevah5/demos/ssltest-ecc/ssltest.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/ssltest-ecc/ssltest.sh rename to src/openssl/openssl-1.0.2v-chevah5/demos/ssltest-ecc/ssltest.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/state_machine/Makefile b/src/openssl/openssl-1.0.2v-chevah5/demos/state_machine/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/state_machine/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/demos/state_machine/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/state_machine/state_machine.c b/src/openssl/openssl-1.0.2v-chevah5/demos/state_machine/state_machine.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/state_machine/state_machine.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/state_machine/state_machine.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/A-client.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/A-client.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/A-client.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/A-client.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/A-server.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/A-server.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/A-server.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/A-server.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/CA.pem b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/CA.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/CA.pem rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/CA.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/INSTALL b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/INSTALL similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/INSTALL rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/INSTALL diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/Makefile b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/Makefile.am b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/Makefile.am similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/Makefile.am rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/Makefile.am diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/README b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/README rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/autogunk.sh b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/autogunk.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/autogunk.sh rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/autogunk.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/autoungunk.sh b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/autoungunk.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/autoungunk.sh rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/autoungunk.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/breakage.c b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/breakage.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/breakage.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/breakage.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/buffer.c b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/buffer.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/buffer.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/buffer.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/cb.c b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/cb.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/cb.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/cb.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/configure.in b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/configure.in similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/configure.in rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/configure.in diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/ip.c b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/ip.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/ip.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/ip.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/sm.c b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/sm.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/sm.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/sm.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/test.sh b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/test.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/test.sh rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/test.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/tunala.c b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/tunala.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/tunala.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/tunala.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/tunala/tunala.h b/src/openssl/openssl-1.0.2v-chevah5/demos/tunala/tunala.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/tunala/tunala.h rename to src/openssl/openssl-1.0.2v-chevah5/demos/tunala/tunala.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/x509/README b/src/openssl/openssl-1.0.2v-chevah5/demos/x509/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/x509/README rename to src/openssl/openssl-1.0.2v-chevah5/demos/x509/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/x509/mkcert.c b/src/openssl/openssl-1.0.2v-chevah5/demos/x509/mkcert.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/x509/mkcert.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/x509/mkcert.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/demos/x509/mkreq.c b/src/openssl/openssl-1.0.2v-chevah5/demos/x509/mkreq.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/demos/x509/mkreq.c rename to src/openssl/openssl-1.0.2v-chevah5/demos/x509/mkreq.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/HOWTO/certificates.txt b/src/openssl/openssl-1.0.2v-chevah5/doc/HOWTO/certificates.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/HOWTO/certificates.txt rename to src/openssl/openssl-1.0.2v-chevah5/doc/HOWTO/certificates.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/HOWTO/keys.txt b/src/openssl/openssl-1.0.2v-chevah5/doc/HOWTO/keys.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/HOWTO/keys.txt rename to src/openssl/openssl-1.0.2v-chevah5/doc/HOWTO/keys.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/HOWTO/proxy_certificates.txt b/src/openssl/openssl-1.0.2v-chevah5/doc/HOWTO/proxy_certificates.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/HOWTO/proxy_certificates.txt rename to src/openssl/openssl-1.0.2v-chevah5/doc/HOWTO/proxy_certificates.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/README b/src/openssl/openssl-1.0.2v-chevah5/doc/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/README rename to src/openssl/openssl-1.0.2v-chevah5/doc/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/CA.pl.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/CA.pl.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/CA.pl.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/CA.pl.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/asn1parse.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/asn1parse.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/asn1parse.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/asn1parse.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/c_rehash.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/c_rehash.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/c_rehash.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/c_rehash.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/ca.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/ca.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/ca.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/ca.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/ciphers.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/ciphers.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/ciphers.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/ciphers.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/cms.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/cms.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/cms.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/cms.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/config.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/config.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/config.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/config.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/crl.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/crl.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/crl.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/crl.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/crl2pkcs7.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/crl2pkcs7.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/crl2pkcs7.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/crl2pkcs7.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/dgst.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/dgst.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/dgst.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/dgst.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/dhparam.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/dhparam.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/dhparam.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/dhparam.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/dsa.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/dsa.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/dsa.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/dsa.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/dsaparam.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/dsaparam.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/dsaparam.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/dsaparam.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/ec.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/ec.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/ec.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/ec.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/ecparam.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/ecparam.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/ecparam.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/ecparam.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/enc.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/enc.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/enc.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/enc.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/errstr.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/errstr.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/errstr.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/errstr.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/gendsa.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/gendsa.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/gendsa.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/gendsa.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/genpkey.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/genpkey.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/genpkey.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/genpkey.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/genrsa.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/genrsa.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/genrsa.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/genrsa.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/nseq.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/nseq.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/nseq.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/nseq.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/ocsp.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/ocsp.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/ocsp.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/ocsp.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/openssl.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/openssl.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/openssl.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/openssl.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/passwd.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/passwd.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/passwd.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/passwd.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/pkcs12.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/pkcs12.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/pkcs12.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/pkcs12.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/pkcs7.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/pkcs7.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/pkcs7.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/pkcs7.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/pkcs8.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/pkcs8.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/pkcs8.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/pkcs8.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/pkey.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/pkey.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/pkey.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/pkey.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/pkeyparam.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/pkeyparam.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/pkeyparam.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/pkeyparam.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/pkeyutl.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/pkeyutl.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/pkeyutl.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/pkeyutl.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/rand.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/rand.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/rand.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/rand.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/req.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/req.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/req.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/req.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/rsa.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/rsa.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/rsa.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/rsa.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/rsautl.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/rsautl.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/rsautl.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/rsautl.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/s_client.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/s_client.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/s_client.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/s_client.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/s_server.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/s_server.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/s_server.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/s_server.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/s_time.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/s_time.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/s_time.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/s_time.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/sess_id.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/sess_id.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/sess_id.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/sess_id.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/smime.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/smime.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/smime.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/smime.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/speed.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/speed.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/speed.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/speed.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/spkac.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/spkac.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/spkac.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/spkac.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/ts.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/ts.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/ts.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/ts.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/tsget.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/tsget.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/tsget.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/tsget.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/verify.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/verify.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/verify.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/verify.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/version.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/version.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/version.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/version.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/x509.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/x509.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/x509.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/x509.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/apps/x509v3_config.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/apps/x509v3_config.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/apps/x509v3_config.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/apps/x509v3_config.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/c-indentation.el b/src/openssl/openssl-1.0.2v-chevah5/doc/c-indentation.el similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/c-indentation.el rename to src/openssl/openssl-1.0.2v-chevah5/doc/c-indentation.el diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ASN1_OBJECT_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ASN1_OBJECT_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ASN1_OBJECT_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ASN1_OBJECT_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ASN1_STRING_length.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ASN1_STRING_length.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ASN1_STRING_length.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ASN1_STRING_length.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ASN1_STRING_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ASN1_STRING_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ASN1_STRING_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ASN1_STRING_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ASN1_STRING_print_ex.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ASN1_STRING_print_ex.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ASN1_STRING_print_ex.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ASN1_STRING_print_ex.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ASN1_TIME_set.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ASN1_TIME_set.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ASN1_TIME_set.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ASN1_TIME_set.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ASN1_generate_nconf.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ASN1_generate_nconf.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ASN1_generate_nconf.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ASN1_generate_nconf.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_ctrl.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_ctrl.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_ctrl.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_ctrl.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_f_base64.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_f_base64.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_f_base64.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_f_base64.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_f_buffer.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_f_buffer.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_f_buffer.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_f_buffer.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_f_cipher.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_f_cipher.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_f_cipher.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_f_cipher.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_f_md.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_f_md.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_f_md.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_f_md.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_f_null.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_f_null.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_f_null.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_f_null.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_f_ssl.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_f_ssl.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_f_ssl.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_f_ssl.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_find_type.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_find_type.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_find_type.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_find_type.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_new_CMS.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_new_CMS.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_new_CMS.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_new_CMS.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_push.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_push.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_push.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_push.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_read.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_read.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_read.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_read.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_accept.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_accept.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_accept.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_accept.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_bio.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_bio.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_bio.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_bio.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_connect.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_connect.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_connect.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_connect.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_fd.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_fd.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_fd.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_fd.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_file.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_file.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_file.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_file.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_mem.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_mem.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_mem.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_mem.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_null.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_null.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_null.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_null.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_socket.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_socket.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_s_socket.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_s_socket.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_set_callback.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_set_callback.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_set_callback.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_set_callback.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_should_retry.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_should_retry.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BIO_should_retry.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BIO_should_retry.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_BLINDING_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_BLINDING_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_BLINDING_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_BLINDING_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_CTX_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_CTX_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_CTX_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_CTX_start.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_CTX_start.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_CTX_start.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_CTX_start.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_add.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_add.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_add.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_add.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_add_word.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_add_word.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_add_word.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_add_word.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_bn2bin.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_bn2bin.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_bn2bin.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_bn2bin.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_cmp.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_cmp.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_cmp.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_cmp.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_copy.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_copy.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_copy.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_copy.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_generate_prime.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_generate_prime.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_generate_prime.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_generate_prime.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_mod_inverse.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_mod_inverse.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_mod_inverse.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_mod_inverse.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_mod_mul_montgomery.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_mod_mul_montgomery.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_mod_mul_montgomery.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_mod_mul_montgomery.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_mod_mul_reciprocal.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_mod_mul_reciprocal.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_mod_mul_reciprocal.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_mod_mul_reciprocal.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_num_bytes.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_num_bytes.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_num_bytes.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_num_bytes.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_rand.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_rand.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_rand.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_rand.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_set_bit.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_set_bit.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_set_bit.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_set_bit.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_swap.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_swap.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_swap.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_swap.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_zero.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_zero.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/BN_zero.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/BN_zero.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_add0_cert.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_add0_cert.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_add0_cert.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_add0_cert.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_add1_recipient_cert.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_add1_recipient_cert.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_add1_recipient_cert.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_add1_recipient_cert.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_add1_signer.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_add1_signer.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_add1_signer.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_add1_signer.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_compress.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_compress.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_compress.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_compress.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_decrypt.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_decrypt.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_decrypt.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_decrypt.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_encrypt.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_encrypt.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_encrypt.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_final.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_final.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_final.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_final.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_get0_RecipientInfos.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_get0_RecipientInfos.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_get0_RecipientInfos.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_get0_RecipientInfos.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_get0_SignerInfos.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_get0_SignerInfos.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_get0_SignerInfos.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_get0_SignerInfos.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_get0_type.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_get0_type.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_get0_type.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_get0_type.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_get1_ReceiptRequest.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_get1_ReceiptRequest.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_get1_ReceiptRequest.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_get1_ReceiptRequest.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_sign.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_sign.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_sign.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_sign.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_sign_receipt.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_sign_receipt.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_sign_receipt.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_sign_receipt.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_uncompress.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_uncompress.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_uncompress.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_uncompress.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_verify.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_verify.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_verify.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_verify.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_verify_receipt.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_verify_receipt.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CMS_verify_receipt.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CMS_verify_receipt.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CONF_modules_free.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CONF_modules_free.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CONF_modules_free.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CONF_modules_free.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CONF_modules_load_file.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CONF_modules_load_file.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CONF_modules_load_file.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CONF_modules_load_file.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CRYPTO_set_ex_data.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CRYPTO_set_ex_data.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/CRYPTO_set_ex_data.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/CRYPTO_set_ex_data.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DH_generate_key.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DH_generate_key.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DH_generate_key.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DH_generate_key.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DH_generate_parameters.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DH_generate_parameters.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DH_generate_parameters.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DH_generate_parameters.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DH_get_ex_new_index.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DH_get_ex_new_index.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DH_get_ex_new_index.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DH_get_ex_new_index.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DH_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DH_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DH_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DH_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DH_set_method.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DH_set_method.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DH_set_method.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DH_set_method.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DH_size.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DH_size.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DH_size.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DH_size.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_SIG_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_SIG_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_SIG_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_SIG_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_do_sign.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_do_sign.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_do_sign.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_do_sign.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_dup_DH.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_dup_DH.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_dup_DH.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_dup_DH.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_generate_key.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_generate_key.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_generate_key.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_generate_key.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_generate_parameters.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_generate_parameters.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_generate_parameters.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_generate_parameters.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_get_ex_new_index.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_get_ex_new_index.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_get_ex_new_index.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_get_ex_new_index.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_set_method.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_set_method.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_set_method.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_set_method.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_sign.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_sign.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_sign.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_sign.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_size.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_size.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/DSA_size.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/DSA_size.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EC_GFp_simple_method.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EC_GFp_simple_method.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EC_GFp_simple_method.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EC_GFp_simple_method.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EC_GROUP_copy.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EC_GROUP_copy.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EC_GROUP_copy.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EC_GROUP_copy.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EC_GROUP_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EC_GROUP_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EC_GROUP_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EC_GROUP_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EC_KEY_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EC_KEY_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EC_KEY_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EC_KEY_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EC_POINT_add.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EC_POINT_add.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EC_POINT_add.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EC_POINT_add.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EC_POINT_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EC_POINT_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EC_POINT_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EC_POINT_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_GET_LIB.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_GET_LIB.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_GET_LIB.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_GET_LIB.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_clear_error.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_clear_error.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_clear_error.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_clear_error.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_error_string.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_error_string.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_error_string.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_error_string.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_get_error.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_get_error.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_get_error.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_get_error.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_load_crypto_strings.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_load_crypto_strings.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_load_crypto_strings.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_load_crypto_strings.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_load_strings.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_load_strings.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_load_strings.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_load_strings.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_print_errors.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_print_errors.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_print_errors.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_print_errors.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_put_error.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_put_error.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_put_error.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_put_error.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_remove_state.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_remove_state.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_remove_state.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_remove_state.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_set_mark.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_set_mark.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ERR_set_mark.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ERR_set_mark.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_BytesToKey.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_BytesToKey.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_BytesToKey.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_BytesToKey.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_DigestInit.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_DigestInit.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_DigestInit.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_DigestInit.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_DigestSignInit.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_DigestSignInit.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_DigestSignInit.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_DigestSignInit.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_DigestVerifyInit.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_DigestVerifyInit.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_DigestVerifyInit.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_DigestVerifyInit.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_EncodeInit.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_EncodeInit.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_EncodeInit.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_EncodeInit.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_EncryptInit.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_EncryptInit.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_EncryptInit.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_EncryptInit.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_OpenInit.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_OpenInit.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_OpenInit.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_OpenInit.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_CTX_ctrl.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_CTX_ctrl.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_CTX_ctrl.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_CTX_ctrl.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_CTX_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_CTX_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_CTX_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_cmp.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_cmp.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_cmp.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_cmp.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_decrypt.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_decrypt.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_decrypt.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_decrypt.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_derive.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_derive.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_derive.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_derive.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_encrypt.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_encrypt.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_encrypt.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_get_default_digest.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_get_default_digest.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_get_default_digest.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_get_default_digest.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_keygen.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_keygen.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_keygen.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_keygen.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_meth_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_meth_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_meth_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_print_private.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_print_private.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_print_private.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_print_private.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_set1_RSA.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_set1_RSA.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_set1_RSA.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_set1_RSA.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_sign.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_sign.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_sign.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_sign.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_verify.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_verify.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_verify.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_verify.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_verify_recover.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_verify_recover.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_PKEY_verify_recover.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_PKEY_verify_recover.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_SealInit.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_SealInit.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_SealInit.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_SealInit.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_SignInit.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_SignInit.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_SignInit.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_SignInit.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_VerifyInit.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_VerifyInit.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/EVP_VerifyInit.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/EVP_VerifyInit.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OBJ_nid2obj.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OBJ_nid2obj.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OBJ_nid2obj.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OBJ_nid2obj.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OPENSSL_Applink.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OPENSSL_Applink.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OPENSSL_Applink.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OPENSSL_Applink.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OPENSSL_VERSION_NUMBER.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OPENSSL_VERSION_NUMBER.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OPENSSL_VERSION_NUMBER.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OPENSSL_VERSION_NUMBER.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OPENSSL_config.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OPENSSL_config.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OPENSSL_config.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OPENSSL_config.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OPENSSL_ia32cap.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OPENSSL_ia32cap.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OPENSSL_ia32cap.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OPENSSL_ia32cap.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OPENSSL_instrument_bus.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OPENSSL_instrument_bus.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OPENSSL_instrument_bus.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OPENSSL_instrument_bus.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OPENSSL_load_builtin_modules.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OPENSSL_load_builtin_modules.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OPENSSL_load_builtin_modules.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OPENSSL_load_builtin_modules.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OpenSSL_add_all_algorithms.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OpenSSL_add_all_algorithms.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/OpenSSL_add_all_algorithms.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/OpenSSL_add_all_algorithms.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PEM_write_bio_CMS_stream.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PEM_write_bio_CMS_stream.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PEM_write_bio_CMS_stream.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PEM_write_bio_CMS_stream.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PEM_write_bio_PKCS7_stream.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PEM_write_bio_PKCS7_stream.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PEM_write_bio_PKCS7_stream.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PEM_write_bio_PKCS7_stream.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PKCS12_create.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PKCS12_create.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PKCS12_create.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PKCS12_create.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PKCS12_parse.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PKCS12_parse.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PKCS12_parse.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PKCS12_parse.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PKCS7_decrypt.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PKCS7_decrypt.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PKCS7_decrypt.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PKCS7_decrypt.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PKCS7_encrypt.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PKCS7_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PKCS7_encrypt.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PKCS7_encrypt.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PKCS7_sign.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PKCS7_sign.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PKCS7_sign.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PKCS7_sign.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PKCS7_sign_add_signer.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PKCS7_sign_add_signer.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PKCS7_sign_add_signer.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PKCS7_sign_add_signer.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PKCS7_verify.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PKCS7_verify.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/PKCS7_verify.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/PKCS7_verify.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RAND_add.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RAND_add.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RAND_add.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RAND_add.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RAND_bytes.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RAND_bytes.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RAND_bytes.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RAND_bytes.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RAND_cleanup.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RAND_cleanup.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RAND_cleanup.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RAND_cleanup.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RAND_egd.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RAND_egd.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RAND_egd.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RAND_egd.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RAND_load_file.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RAND_load_file.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RAND_load_file.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RAND_load_file.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RAND_set_rand_method.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RAND_set_rand_method.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RAND_set_rand_method.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RAND_set_rand_method.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_blinding_on.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_blinding_on.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_blinding_on.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_blinding_on.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_check_key.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_check_key.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_check_key.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_check_key.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_generate_key.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_generate_key.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_generate_key.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_generate_key.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_get_ex_new_index.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_get_ex_new_index.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_get_ex_new_index.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_get_ex_new_index.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_padding_add_PKCS1_type_1.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_padding_add_PKCS1_type_1.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_padding_add_PKCS1_type_1.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_padding_add_PKCS1_type_1.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_print.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_print.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_print.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_print.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_private_encrypt.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_private_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_private_encrypt.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_private_encrypt.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_public_encrypt.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_public_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_public_encrypt.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_public_encrypt.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_set_method.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_set_method.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_set_method.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_set_method.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_sign.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_sign.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_sign.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_sign.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_sign_ASN1_OCTET_STRING.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_sign_ASN1_OCTET_STRING.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_sign_ASN1_OCTET_STRING.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_sign_ASN1_OCTET_STRING.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_size.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_size.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/RSA_size.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/RSA_size.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/SMIME_read_CMS.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/SMIME_read_CMS.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/SMIME_read_CMS.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/SMIME_read_CMS.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/SMIME_read_PKCS7.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/SMIME_read_PKCS7.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/SMIME_read_PKCS7.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/SMIME_read_PKCS7.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/SMIME_write_CMS.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/SMIME_write_CMS.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/SMIME_write_CMS.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/SMIME_write_CMS.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/SMIME_write_PKCS7.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/SMIME_write_PKCS7.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/SMIME_write_PKCS7.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/SMIME_write_PKCS7.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/SSLeay_version.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/SSLeay_version.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/SSLeay_version.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/SSLeay_version.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_NAME_ENTRY_get_object.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_NAME_ENTRY_get_object.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_NAME_ENTRY_get_object.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_NAME_ENTRY_get_object.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_NAME_add_entry_by_txt.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_NAME_add_entry_by_txt.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_NAME_add_entry_by_txt.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_NAME_add_entry_by_txt.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_NAME_get_index_by_NID.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_NAME_get_index_by_NID.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_NAME_get_index_by_NID.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_NAME_get_index_by_NID.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_NAME_print_ex.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_NAME_print_ex.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_NAME_print_ex.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_NAME_print_ex.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_STORE_CTX_get_error.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_STORE_CTX_get_error.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_STORE_CTX_get_error.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_STORE_CTX_get_error.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_STORE_CTX_get_ex_new_index.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_STORE_CTX_get_ex_new_index.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_STORE_CTX_get_ex_new_index.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_STORE_CTX_get_ex_new_index.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_STORE_CTX_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_STORE_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_STORE_CTX_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_STORE_CTX_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_STORE_CTX_set_verify_cb.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_STORE_CTX_set_verify_cb.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_STORE_CTX_set_verify_cb.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_STORE_CTX_set_verify_cb.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_STORE_set_verify_cb_func.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_STORE_set_verify_cb_func.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_STORE_set_verify_cb_func.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_STORE_set_verify_cb_func.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_VERIFY_PARAM_set_flags.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_VERIFY_PARAM_set_flags.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_VERIFY_PARAM_set_flags.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_VERIFY_PARAM_set_flags.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_check_host.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_check_host.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_check_host.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_check_host.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_check_private_key.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_check_private_key.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_check_private_key.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_check_private_key.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_cmp_time.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_cmp_time.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_cmp_time.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_cmp_time.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_verify_cert.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_verify_cert.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/X509_verify_cert.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/X509_verify_cert.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/bio.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/bio.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/bio.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/bio.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/blowfish.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/blowfish.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/blowfish.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/blowfish.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/bn.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/bn.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/bn.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/bn.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/bn_internal.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/bn_internal.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/bn_internal.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/bn_internal.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/buffer.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/buffer.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/buffer.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/buffer.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/crypto.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/crypto.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/crypto.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/crypto.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_ASN1_OBJECT.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_ASN1_OBJECT.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_ASN1_OBJECT.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_ASN1_OBJECT.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_CMS_ContentInfo.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_CMS_ContentInfo.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_CMS_ContentInfo.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_CMS_ContentInfo.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_DHparams.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_DHparams.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_DHparams.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_DHparams.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_DSAPublicKey.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_DSAPublicKey.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_DSAPublicKey.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_DSAPublicKey.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_ECPKParameters.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_ECPKParameters.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_ECPKParameters.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_ECPKParameters.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_ECPrivateKey.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_ECPrivateKey.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_ECPrivateKey.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_ECPrivateKey.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_PKCS8PrivateKey.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_PKCS8PrivateKey.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_PKCS8PrivateKey.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_PKCS8PrivateKey.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_PrivateKey.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_PrivateKey.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_PrivateKey.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_PrivateKey.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_RSAPublicKey.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_RSAPublicKey.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_RSAPublicKey.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_RSAPublicKey.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_X509.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_X509.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_X509.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_X509.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_X509_ALGOR.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_X509_ALGOR.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_X509_ALGOR.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_X509_ALGOR.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_X509_CRL.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_X509_CRL.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_X509_CRL.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_X509_CRL.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_X509_NAME.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_X509_NAME.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_X509_NAME.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_X509_NAME.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_X509_REQ.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_X509_REQ.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_X509_REQ.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_X509_REQ.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_X509_SIG.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_X509_SIG.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/d2i_X509_SIG.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/d2i_X509_SIG.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/des.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/des.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/des.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/des.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/des_modes.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/des_modes.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/des_modes.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/des_modes.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/dh.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/dh.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/dh.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/dh.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/dsa.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/dsa.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/dsa.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/dsa.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ec.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ec.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ec.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ec.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ecdsa.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ecdsa.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ecdsa.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ecdsa.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/engine.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/engine.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/engine.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/engine.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/err.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/err.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/err.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/err.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/evp.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/evp.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/evp.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/evp.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/hmac.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/hmac.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/hmac.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/hmac.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/i2d_CMS_bio_stream.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/i2d_CMS_bio_stream.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/i2d_CMS_bio_stream.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/i2d_CMS_bio_stream.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/i2d_PKCS7_bio_stream.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/i2d_PKCS7_bio_stream.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/i2d_PKCS7_bio_stream.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/i2d_PKCS7_bio_stream.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/lh_stats.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/lh_stats.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/lh_stats.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/lh_stats.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/lhash.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/lhash.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/lhash.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/lhash.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/md5.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/md5.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/md5.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/md5.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/mdc2.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/mdc2.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/mdc2.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/mdc2.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/pem.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/pem.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/pem.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/pem.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/rand.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/rand.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/rand.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/rand.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/rc4.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/rc4.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/rc4.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/rc4.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ripemd.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ripemd.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ripemd.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ripemd.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/rsa.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/rsa.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/rsa.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/rsa.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/sha.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/sha.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/sha.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/sha.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/threads.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/threads.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/threads.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/threads.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ui.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ui.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ui.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ui.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ui_compat.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ui_compat.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/ui_compat.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/ui_compat.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/crypto/x509.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/crypto/x509.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/crypto/x509.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/crypto/x509.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/dir-locals.example.el b/src/openssl/openssl-1.0.2v-chevah5/doc/dir-locals.example.el similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/dir-locals.example.el rename to src/openssl/openssl-1.0.2v-chevah5/doc/dir-locals.example.el diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/fingerprints.txt b/src/openssl/openssl-1.0.2v-chevah5/doc/fingerprints.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/fingerprints.txt rename to src/openssl/openssl-1.0.2v-chevah5/doc/fingerprints.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/openssl-c-indent.el b/src/openssl/openssl-1.0.2v-chevah5/doc/openssl-c-indent.el similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/openssl-c-indent.el rename to src/openssl/openssl-1.0.2v-chevah5/doc/openssl-c-indent.el diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/openssl-shared.txt b/src/openssl/openssl-1.0.2v-chevah5/doc/openssl-shared.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/openssl-shared.txt rename to src/openssl/openssl-1.0.2v-chevah5/doc/openssl-shared.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/openssl.txt b/src/openssl/openssl-1.0.2v-chevah5/doc/openssl.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/openssl.txt rename to src/openssl/openssl-1.0.2v-chevah5/doc/openssl.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CIPHER_get_name.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CIPHER_get_name.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CIPHER_get_name.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CIPHER_get_name.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_COMP_add_compression_method.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_COMP_add_compression_method.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_COMP_add_compression_method.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_COMP_add_compression_method.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CONF_CTX_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CONF_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CONF_CTX_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CONF_CTX_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CONF_CTX_set1_prefix.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CONF_CTX_set1_prefix.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CONF_CTX_set1_prefix.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CONF_CTX_set1_prefix.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CONF_CTX_set_flags.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CONF_CTX_set_flags.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CONF_CTX_set_flags.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CONF_CTX_set_flags.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CONF_CTX_set_ssl_ctx.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CONF_CTX_set_ssl_ctx.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CONF_CTX_set_ssl_ctx.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CONF_CTX_set_ssl_ctx.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CONF_cmd.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CONF_cmd.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CONF_cmd.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CONF_cmd.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CONF_cmd_argv.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CONF_cmd_argv.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CONF_cmd_argv.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CONF_cmd_argv.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_add1_chain_cert.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_add1_chain_cert.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_add1_chain_cert.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_add1_chain_cert.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_add_extra_chain_cert.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_add_extra_chain_cert.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_add_extra_chain_cert.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_add_extra_chain_cert.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_add_session.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_add_session.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_add_session.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_add_session.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_ctrl.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_ctrl.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_ctrl.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_ctrl.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_flush_sessions.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_flush_sessions.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_flush_sessions.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_flush_sessions.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_free.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_free.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_free.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_free.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_get0_param.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_get0_param.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_get0_param.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_get0_param.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_get_ex_new_index.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_get_ex_new_index.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_get_ex_new_index.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_get_ex_new_index.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_get_verify_mode.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_get_verify_mode.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_get_verify_mode.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_get_verify_mode.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_load_verify_locations.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_load_verify_locations.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_load_verify_locations.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_load_verify_locations.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_sess_number.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_sess_number.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_sess_number.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_sess_number.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_sess_set_cache_size.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_sess_set_cache_size.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_sess_set_cache_size.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_sess_set_cache_size.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_sess_set_get_cb.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_sess_set_get_cb.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_sess_set_get_cb.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_sess_set_get_cb.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_sessions.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_sessions.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_sessions.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_sessions.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set1_curves.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set1_curves.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set1_curves.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set1_curves.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set1_verify_cert_store.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set1_verify_cert_store.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set1_verify_cert_store.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set1_verify_cert_store.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_alpn_select_cb.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_alpn_select_cb.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_alpn_select_cb.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_alpn_select_cb.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_cert_cb.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_cert_cb.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_cert_cb.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_cert_cb.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_cert_store.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_cert_store.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_cert_store.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_cert_store.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_cert_verify_callback.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_cert_verify_callback.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_cert_verify_callback.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_cert_verify_callback.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_cipher_list.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_cipher_list.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_cipher_list.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_cipher_list.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_client_CA_list.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_client_CA_list.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_client_CA_list.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_client_CA_list.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_client_cert_cb.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_client_cert_cb.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_client_cert_cb.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_client_cert_cb.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_custom_cli_ext.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_custom_cli_ext.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_custom_cli_ext.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_custom_cli_ext.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_default_passwd_cb.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_default_passwd_cb.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_default_passwd_cb.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_default_passwd_cb.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_generate_session_id.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_generate_session_id.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_generate_session_id.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_generate_session_id.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_info_callback.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_info_callback.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_info_callback.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_info_callback.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_max_cert_list.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_max_cert_list.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_max_cert_list.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_max_cert_list.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_mode.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_mode.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_mode.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_mode.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_msg_callback.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_msg_callback.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_msg_callback.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_msg_callback.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_options.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_options.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_options.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_options.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_psk_client_callback.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_psk_client_callback.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_psk_client_callback.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_psk_client_callback.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_quiet_shutdown.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_quiet_shutdown.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_quiet_shutdown.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_quiet_shutdown.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_read_ahead.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_read_ahead.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_read_ahead.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_read_ahead.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_session_cache_mode.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_session_cache_mode.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_session_cache_mode.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_session_cache_mode.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_session_id_context.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_session_id_context.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_session_id_context.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_session_id_context.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_ssl_version.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_ssl_version.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_ssl_version.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_ssl_version.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_timeout.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_timeout.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_timeout.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_timeout.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_tlsext_servername_callback.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_tlsext_servername_callback.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_tlsext_servername_callback.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_tlsext_servername_callback.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_tlsext_status_cb.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_tlsext_status_cb.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_tlsext_status_cb.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_tlsext_status_cb.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_tlsext_ticket_key_cb.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_tlsext_ticket_key_cb.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_tlsext_ticket_key_cb.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_tlsext_ticket_key_cb.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_tmp_dh_callback.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_tmp_dh_callback.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_tmp_dh_callback.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_tmp_dh_callback.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_tmp_rsa_callback.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_tmp_rsa_callback.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_tmp_rsa_callback.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_tmp_rsa_callback.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_verify.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_verify.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_set_verify.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_set_verify.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_use_certificate.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_use_certificate.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_use_certificate.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_use_certificate.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_use_psk_identity_hint.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_use_psk_identity_hint.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_use_psk_identity_hint.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_use_psk_identity_hint.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_use_serverinfo.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_use_serverinfo.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_CTX_use_serverinfo.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_CTX_use_serverinfo.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_SESSION_free.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_SESSION_free.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_SESSION_free.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_SESSION_free.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_SESSION_get_ex_new_index.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_SESSION_get_ex_new_index.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_SESSION_get_ex_new_index.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_SESSION_get_ex_new_index.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_SESSION_get_time.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_SESSION_get_time.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_SESSION_get_time.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_SESSION_get_time.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_accept.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_accept.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_accept.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_accept.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_alert_type_string.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_alert_type_string.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_alert_type_string.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_alert_type_string.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_check_chain.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_check_chain.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_check_chain.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_check_chain.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_clear.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_clear.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_clear.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_clear.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_connect.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_connect.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_connect.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_connect.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_do_handshake.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_do_handshake.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_do_handshake.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_do_handshake.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_export_keying_material.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_export_keying_material.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_export_keying_material.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_export_keying_material.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_free.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_free.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_free.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_free.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_SSL_CTX.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_SSL_CTX.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_SSL_CTX.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_SSL_CTX.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_ciphers.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_ciphers.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_ciphers.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_ciphers.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_client_CA_list.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_client_CA_list.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_client_CA_list.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_client_CA_list.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_current_cipher.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_current_cipher.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_current_cipher.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_current_cipher.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_default_timeout.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_default_timeout.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_default_timeout.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_default_timeout.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_error.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_error.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_error.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_error.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_ex_data_X509_STORE_CTX_idx.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_ex_data_X509_STORE_CTX_idx.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_ex_data_X509_STORE_CTX_idx.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_ex_data_X509_STORE_CTX_idx.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_ex_new_index.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_ex_new_index.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_ex_new_index.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_ex_new_index.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_fd.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_fd.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_fd.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_fd.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_peer_cert_chain.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_peer_cert_chain.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_peer_cert_chain.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_peer_cert_chain.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_peer_certificate.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_peer_certificate.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_peer_certificate.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_peer_certificate.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_psk_identity.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_psk_identity.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_psk_identity.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_psk_identity.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_rbio.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_rbio.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_rbio.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_rbio.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_session.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_session.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_session.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_session.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_verify_result.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_verify_result.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_verify_result.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_verify_result.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_version.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_version.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_get_version.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_get_version.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_library_init.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_library_init.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_library_init.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_library_init.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_load_client_CA_file.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_load_client_CA_file.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_load_client_CA_file.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_load_client_CA_file.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_new.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_new.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_new.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_new.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_pending.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_pending.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_pending.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_pending.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_read.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_read.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_read.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_read.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_rstate_string.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_rstate_string.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_rstate_string.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_rstate_string.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_session_reused.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_session_reused.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_session_reused.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_session_reused.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_set_bio.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_set_bio.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_set_bio.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_set_bio.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_set_connect_state.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_set_connect_state.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_set_connect_state.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_set_connect_state.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_set_fd.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_set_fd.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_set_fd.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_set_fd.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_set_session.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_set_session.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_set_session.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_set_session.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_set_shutdown.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_set_shutdown.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_set_shutdown.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_set_shutdown.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_set_verify_result.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_set_verify_result.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_set_verify_result.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_set_verify_result.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_shutdown.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_shutdown.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_shutdown.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_shutdown.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_state_string.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_state_string.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_state_string.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_state_string.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_want.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_want.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_want.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_want.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_write.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_write.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/SSL_write.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/SSL_write.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/d2i_SSL_SESSION.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/d2i_SSL_SESSION.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/d2i_SSL_SESSION.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/d2i_SSL_SESSION.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssl/ssl.pod b/src/openssl/openssl-1.0.2v-chevah5/doc/ssl/ssl.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssl/ssl.pod rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssl/ssl.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/ssleay.txt b/src/openssl/openssl-1.0.2v-chevah5/doc/ssleay.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/ssleay.txt rename to src/openssl/openssl-1.0.2v-chevah5/doc/ssleay.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/doc/standards.txt b/src/openssl/openssl-1.0.2v-chevah5/doc/standards.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/doc/standards.txt rename to src/openssl/openssl-1.0.2v-chevah5/doc/standards.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/e_os.h b/src/openssl/openssl-1.0.2v-chevah5/e_os.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/e_os.h rename to src/openssl/openssl-1.0.2v-chevah5/e_os.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/e_os2.h b/src/openssl/openssl-1.0.2v-chevah5/e_os2.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/e_os2.h rename to src/openssl/openssl-1.0.2v-chevah5/e_os2.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/Makefile b/src/openssl/openssl-1.0.2v-chevah5/engines/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/engines/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/alpha.opt b/src/openssl/openssl-1.0.2v-chevah5/engines/alpha.opt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/alpha.opt rename to src/openssl/openssl-1.0.2v-chevah5/engines/alpha.opt diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/axp.opt b/src/openssl/openssl-1.0.2v-chevah5/engines/axp.opt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/axp.opt rename to src/openssl/openssl-1.0.2v-chevah5/engines/axp.opt diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/capierr.bat b/src/openssl/openssl-1.0.2v-chevah5/engines/capierr.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/capierr.bat rename to src/openssl/openssl-1.0.2v-chevah5/engines/capierr.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/Makefile b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/README.gost b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/README.gost similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/README.gost rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/README.gost diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/e_gost_err.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/e_gost_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/e_gost_err.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/e_gost_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/e_gost_err.h b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/e_gost_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/e_gost_err.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/e_gost_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/e_gost_err.proto b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/e_gost_err.proto similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/e_gost_err.proto rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/e_gost_err.proto diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost.ec b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost.ec rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost2001.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost2001.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost2001.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost2001.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost2001_keyx.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost2001_keyx.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost2001_keyx.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost2001_keyx.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost2001_keyx.h b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost2001_keyx.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost2001_keyx.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost2001_keyx.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost89.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost89.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost89.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost89.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost89.h b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost89.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost89.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost89.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost94_keyx.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost94_keyx.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost94_keyx.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost94_keyx.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_ameth.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_ameth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_ameth.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_ameth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_asn1.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_asn1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_asn1.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_asn1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_crypt.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_crypt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_crypt.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_crypt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_ctl.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_ctl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_ctl.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_ctl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_eng.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_eng.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_eng.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_eng.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_keywrap.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_keywrap.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_keywrap.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_keywrap.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_keywrap.h b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_keywrap.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_keywrap.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_keywrap.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_lcl.h b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_lcl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_lcl.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_lcl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_md.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_md.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_md.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_md.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_params.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_params.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_params.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_params.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_params.h b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_params.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_params.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_params.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_pmeth.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_pmeth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_pmeth.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_pmeth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_sign.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_sign.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gost_sign.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gost_sign.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gosthash.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gosthash.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gosthash.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gosthash.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gosthash.h b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gosthash.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gosthash.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gosthash.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gostsum.c b/src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gostsum.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ccgost/gostsum.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/ccgost/gostsum.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_4758cca.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_4758cca.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_4758cca.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_4758cca.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_4758cca.ec b/src/openssl/openssl-1.0.2v-chevah5/engines/e_4758cca.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_4758cca.ec rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_4758cca.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_4758cca_err.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_4758cca_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_4758cca_err.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_4758cca_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_4758cca_err.h b/src/openssl/openssl-1.0.2v-chevah5/engines/e_4758cca_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_4758cca_err.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_4758cca_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_aep.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_aep.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_aep.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_aep.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_aep.ec b/src/openssl/openssl-1.0.2v-chevah5/engines/e_aep.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_aep.ec rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_aep.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_aep_err.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_aep_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_aep_err.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_aep_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_aep_err.h b/src/openssl/openssl-1.0.2v-chevah5/engines/e_aep_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_aep_err.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_aep_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_atalla.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_atalla.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_atalla.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_atalla.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_atalla.ec b/src/openssl/openssl-1.0.2v-chevah5/engines/e_atalla.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_atalla.ec rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_atalla.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_atalla_err.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_atalla_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_atalla_err.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_atalla_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_atalla_err.h b/src/openssl/openssl-1.0.2v-chevah5/engines/e_atalla_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_atalla_err.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_atalla_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_capi.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_capi.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_capi.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_capi.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_capi.ec b/src/openssl/openssl-1.0.2v-chevah5/engines/e_capi.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_capi.ec rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_capi.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_capi_err.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_capi_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_capi_err.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_capi_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_capi_err.h b/src/openssl/openssl-1.0.2v-chevah5/engines/e_capi_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_capi_err.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_capi_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_chil.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_chil.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_chil.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_chil.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_chil.ec b/src/openssl/openssl-1.0.2v-chevah5/engines/e_chil.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_chil.ec rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_chil.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_chil_err.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_chil_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_chil_err.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_chil_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_chil_err.h b/src/openssl/openssl-1.0.2v-chevah5/engines/e_chil_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_chil_err.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_chil_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_cswift.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_cswift.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_cswift.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_cswift.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_cswift.ec b/src/openssl/openssl-1.0.2v-chevah5/engines/e_cswift.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_cswift.ec rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_cswift.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_cswift_err.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_cswift_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_cswift_err.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_cswift_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_cswift_err.h b/src/openssl/openssl-1.0.2v-chevah5/engines/e_cswift_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_cswift_err.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_cswift_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_gmp.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_gmp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_gmp.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_gmp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_gmp.ec b/src/openssl/openssl-1.0.2v-chevah5/engines/e_gmp.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_gmp.ec rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_gmp.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_gmp_err.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_gmp_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_gmp_err.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_gmp_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_gmp_err.h b/src/openssl/openssl-1.0.2v-chevah5/engines/e_gmp_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_gmp_err.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_gmp_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_nuron.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_nuron.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_nuron.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_nuron.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_nuron.ec b/src/openssl/openssl-1.0.2v-chevah5/engines/e_nuron.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_nuron.ec rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_nuron.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_nuron_err.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_nuron_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_nuron_err.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_nuron_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_nuron_err.h b/src/openssl/openssl-1.0.2v-chevah5/engines/e_nuron_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_nuron_err.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_nuron_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_padlock.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_padlock.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_padlock.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_padlock.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_padlock.ec b/src/openssl/openssl-1.0.2v-chevah5/engines/e_padlock.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_padlock.ec rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_padlock.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_sureware.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_sureware.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_sureware.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_sureware.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_sureware.ec b/src/openssl/openssl-1.0.2v-chevah5/engines/e_sureware.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_sureware.ec rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_sureware.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_sureware_err.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_sureware_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_sureware_err.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_sureware_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_sureware_err.h b/src/openssl/openssl-1.0.2v-chevah5/engines/e_sureware_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_sureware_err.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_sureware_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_ubsec.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_ubsec.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_ubsec.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_ubsec.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_ubsec.ec b/src/openssl/openssl-1.0.2v-chevah5/engines/e_ubsec.ec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_ubsec.ec rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_ubsec.ec diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_ubsec_err.c b/src/openssl/openssl-1.0.2v-chevah5/engines/e_ubsec_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_ubsec_err.c rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_ubsec_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/e_ubsec_err.h b/src/openssl/openssl-1.0.2v-chevah5/engines/e_ubsec_err.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/e_ubsec_err.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/e_ubsec_err.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/engine_vector.mar b/src/openssl/openssl-1.0.2v-chevah5/engines/engine_vector.mar similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/engine_vector.mar rename to src/openssl/openssl-1.0.2v-chevah5/engines/engine_vector.mar diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/ia64.opt b/src/openssl/openssl-1.0.2v-chevah5/engines/ia64.opt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/ia64.opt rename to src/openssl/openssl-1.0.2v-chevah5/engines/ia64.opt diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/makeengines.com b/src/openssl/openssl-1.0.2v-chevah5/engines/makeengines.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/makeengines.com rename to src/openssl/openssl-1.0.2v-chevah5/engines/makeengines.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/vax.opt b/src/openssl/openssl-1.0.2v-chevah5/engines/vax.opt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/vax.opt rename to src/openssl/openssl-1.0.2v-chevah5/engines/vax.opt diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/vendor_defns/aep.h b/src/openssl/openssl-1.0.2v-chevah5/engines/vendor_defns/aep.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/vendor_defns/aep.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/vendor_defns/aep.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/vendor_defns/atalla.h b/src/openssl/openssl-1.0.2v-chevah5/engines/vendor_defns/atalla.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/vendor_defns/atalla.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/vendor_defns/atalla.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/vendor_defns/cswift.h b/src/openssl/openssl-1.0.2v-chevah5/engines/vendor_defns/cswift.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/vendor_defns/cswift.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/vendor_defns/cswift.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/vendor_defns/hw_4758_cca.h b/src/openssl/openssl-1.0.2v-chevah5/engines/vendor_defns/hw_4758_cca.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/vendor_defns/hw_4758_cca.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/vendor_defns/hw_4758_cca.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/vendor_defns/hw_ubsec.h b/src/openssl/openssl-1.0.2v-chevah5/engines/vendor_defns/hw_ubsec.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/vendor_defns/hw_ubsec.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/vendor_defns/hw_ubsec.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/vendor_defns/hwcryptohook.h b/src/openssl/openssl-1.0.2v-chevah5/engines/vendor_defns/hwcryptohook.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/vendor_defns/hwcryptohook.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/vendor_defns/hwcryptohook.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/engines/vendor_defns/sureware.h b/src/openssl/openssl-1.0.2v-chevah5/engines/vendor_defns/sureware.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/engines/vendor_defns/sureware.h rename to src/openssl/openssl-1.0.2v-chevah5/engines/vendor_defns/sureware.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/install.com b/src/openssl/openssl-1.0.2v-chevah5/install.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/install.com rename to src/openssl/openssl-1.0.2v-chevah5/install.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/makevms.com b/src/openssl/openssl-1.0.2v-chevah5/makevms.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/makevms.com rename to src/openssl/openssl-1.0.2v-chevah5/makevms.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/.rnd b/src/openssl/openssl-1.0.2v-chevah5/ms/.rnd similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/.rnd rename to src/openssl/openssl-1.0.2v-chevah5/ms/.rnd diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/32all.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/32all.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/32all.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/32all.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/README b/src/openssl/openssl-1.0.2v-chevah5/ms/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/README rename to src/openssl/openssl-1.0.2v-chevah5/ms/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/applink.c b/src/openssl/openssl-1.0.2v-chevah5/ms/applink.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/applink.c rename to src/openssl/openssl-1.0.2v-chevah5/ms/applink.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/bcb4.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/bcb4.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/bcb4.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/bcb4.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/certCA.srl b/src/openssl/openssl-1.0.2v-chevah5/ms/certCA.srl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/certCA.srl rename to src/openssl/openssl-1.0.2v-chevah5/ms/certCA.srl diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/certCA.ss b/src/openssl/openssl-1.0.2v-chevah5/ms/certCA.ss similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/certCA.ss rename to src/openssl/openssl-1.0.2v-chevah5/ms/certCA.ss diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/certU.ss b/src/openssl/openssl-1.0.2v-chevah5/ms/certU.ss similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/certU.ss rename to src/openssl/openssl-1.0.2v-chevah5/ms/certU.ss diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/cmp.pl b/src/openssl/openssl-1.0.2v-chevah5/ms/cmp.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/cmp.pl rename to src/openssl/openssl-1.0.2v-chevah5/ms/cmp.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/do_ms.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/do_ms.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/do_ms.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/do_ms.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/do_nasm.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/do_nasm.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/do_nasm.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/do_nasm.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/do_nt.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/do_nt.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/do_nt.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/do_nt.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/do_win64a.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/do_win64a.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/do_win64a.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/do_win64a.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/do_win64i.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/do_win64i.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/do_win64i.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/do_win64i.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/keyCA.ss b/src/openssl/openssl-1.0.2v-chevah5/ms/keyCA.ss similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/keyCA.ss rename to src/openssl/openssl-1.0.2v-chevah5/ms/keyCA.ss diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/keyU.ss b/src/openssl/openssl-1.0.2v-chevah5/ms/keyU.ss similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/keyU.ss rename to src/openssl/openssl-1.0.2v-chevah5/ms/keyU.ss diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/mingw32.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/mingw32.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/mingw32.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/mingw32.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/mw.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/mw.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/mw.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/mw.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/req2CA.ss b/src/openssl/openssl-1.0.2v-chevah5/ms/req2CA.ss similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/req2CA.ss rename to src/openssl/openssl-1.0.2v-chevah5/ms/req2CA.ss diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/reqCA.ss b/src/openssl/openssl-1.0.2v-chevah5/ms/reqCA.ss similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/reqCA.ss rename to src/openssl/openssl-1.0.2v-chevah5/ms/reqCA.ss diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/reqU.ss b/src/openssl/openssl-1.0.2v-chevah5/ms/reqU.ss similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/reqU.ss rename to src/openssl/openssl-1.0.2v-chevah5/ms/reqU.ss diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/speed32.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/speed32.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/speed32.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/speed32.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/tenc.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/tenc.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/tenc.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/tenc.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/tencce.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/tencce.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/tencce.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/tencce.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/test.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/test.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/test.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/test.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/testce.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/testce.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/testce.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/testce.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/testce2.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/testce2.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/testce2.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/testce2.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/testenc.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/testenc.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/testenc.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/testenc.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/testencce.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/testencce.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/testencce.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/testencce.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/testpem.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/testpem.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/testpem.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/testpem.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/testpemce.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/testpemce.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/testpemce.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/testpemce.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/testss.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/testss.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/testss.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/testss.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/testssce.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/testssce.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/testssce.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/testssce.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/tlhelp32.h b/src/openssl/openssl-1.0.2v-chevah5/ms/tlhelp32.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/tlhelp32.h rename to src/openssl/openssl-1.0.2v-chevah5/ms/tlhelp32.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/tpem.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/tpem.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/tpem.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/tpem.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/tpemce.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/tpemce.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/tpemce.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/tpemce.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/uplink-common.pl b/src/openssl/openssl-1.0.2v-chevah5/ms/uplink-common.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/uplink-common.pl rename to src/openssl/openssl-1.0.2v-chevah5/ms/uplink-common.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/uplink-ia64.pl b/src/openssl/openssl-1.0.2v-chevah5/ms/uplink-ia64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/uplink-ia64.pl rename to src/openssl/openssl-1.0.2v-chevah5/ms/uplink-ia64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/uplink-x86.pl b/src/openssl/openssl-1.0.2v-chevah5/ms/uplink-x86.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/uplink-x86.pl rename to src/openssl/openssl-1.0.2v-chevah5/ms/uplink-x86.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/uplink-x86_64.pl b/src/openssl/openssl-1.0.2v-chevah5/ms/uplink-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/uplink-x86_64.pl rename to src/openssl/openssl-1.0.2v-chevah5/ms/uplink-x86_64.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/uplink.c b/src/openssl/openssl-1.0.2v-chevah5/ms/uplink.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/uplink.c rename to src/openssl/openssl-1.0.2v-chevah5/ms/uplink.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/uplink.h b/src/openssl/openssl-1.0.2v-chevah5/ms/uplink.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/uplink.h rename to src/openssl/openssl-1.0.2v-chevah5/ms/uplink.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/uplink.pl b/src/openssl/openssl-1.0.2v-chevah5/ms/uplink.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/uplink.pl rename to src/openssl/openssl-1.0.2v-chevah5/ms/uplink.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/ms/x86asm.bat b/src/openssl/openssl-1.0.2v-chevah5/ms/x86asm.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ms/x86asm.bat rename to src/openssl/openssl-1.0.2v-chevah5/ms/x86asm.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/openssl.doxy b/src/openssl/openssl-1.0.2v-chevah5/openssl.doxy similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/openssl.doxy rename to src/openssl/openssl-1.0.2v-chevah5/openssl.doxy diff --git a/src/openssl/openssl-1.0.2v-chevah4/openssl.spec b/src/openssl/openssl-1.0.2v-chevah5/openssl.spec similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/openssl.spec rename to src/openssl/openssl-1.0.2v-chevah5/openssl.spec diff --git a/src/openssl/openssl-1.0.2v-chevah4/os2/OS2-EMX.cmd b/src/openssl/openssl-1.0.2v-chevah5/os2/OS2-EMX.cmd similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/os2/OS2-EMX.cmd rename to src/openssl/openssl-1.0.2v-chevah5/os2/OS2-EMX.cmd diff --git a/src/openssl/openssl-1.0.2v-chevah4/os2/backwardify.pl b/src/openssl/openssl-1.0.2v-chevah5/os2/backwardify.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/os2/backwardify.pl rename to src/openssl/openssl-1.0.2v-chevah5/os2/backwardify.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/shlib/Makefile.hpux10-cc b/src/openssl/openssl-1.0.2v-chevah5/shlib/Makefile.hpux10-cc similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/shlib/Makefile.hpux10-cc rename to src/openssl/openssl-1.0.2v-chevah5/shlib/Makefile.hpux10-cc diff --git a/src/openssl/openssl-1.0.2v-chevah4/shlib/README b/src/openssl/openssl-1.0.2v-chevah5/shlib/README similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/shlib/README rename to src/openssl/openssl-1.0.2v-chevah5/shlib/README diff --git a/src/openssl/openssl-1.0.2v-chevah4/shlib/hpux10-cc.sh b/src/openssl/openssl-1.0.2v-chevah5/shlib/hpux10-cc.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/shlib/hpux10-cc.sh rename to src/openssl/openssl-1.0.2v-chevah5/shlib/hpux10-cc.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/shlib/irix.sh b/src/openssl/openssl-1.0.2v-chevah5/shlib/irix.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/shlib/irix.sh rename to src/openssl/openssl-1.0.2v-chevah5/shlib/irix.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/shlib/sco5-shared-gcc.sh b/src/openssl/openssl-1.0.2v-chevah5/shlib/sco5-shared-gcc.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/shlib/sco5-shared-gcc.sh rename to src/openssl/openssl-1.0.2v-chevah5/shlib/sco5-shared-gcc.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/shlib/sco5-shared-installed b/src/openssl/openssl-1.0.2v-chevah5/shlib/sco5-shared-installed similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/shlib/sco5-shared-installed rename to src/openssl/openssl-1.0.2v-chevah5/shlib/sco5-shared-installed diff --git a/src/openssl/openssl-1.0.2v-chevah4/shlib/sco5-shared.sh b/src/openssl/openssl-1.0.2v-chevah5/shlib/sco5-shared.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/shlib/sco5-shared.sh rename to src/openssl/openssl-1.0.2v-chevah5/shlib/sco5-shared.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/shlib/solaris-sc4.sh b/src/openssl/openssl-1.0.2v-chevah5/shlib/solaris-sc4.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/shlib/solaris-sc4.sh rename to src/openssl/openssl-1.0.2v-chevah5/shlib/solaris-sc4.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/shlib/solaris.sh b/src/openssl/openssl-1.0.2v-chevah5/shlib/solaris.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/shlib/solaris.sh rename to src/openssl/openssl-1.0.2v-chevah5/shlib/solaris.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/shlib/sun.sh b/src/openssl/openssl-1.0.2v-chevah5/shlib/sun.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/shlib/sun.sh rename to src/openssl/openssl-1.0.2v-chevah5/shlib/sun.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/shlib/svr5-shared-gcc.sh b/src/openssl/openssl-1.0.2v-chevah5/shlib/svr5-shared-gcc.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/shlib/svr5-shared-gcc.sh rename to src/openssl/openssl-1.0.2v-chevah5/shlib/svr5-shared-gcc.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/shlib/svr5-shared-installed b/src/openssl/openssl-1.0.2v-chevah5/shlib/svr5-shared-installed similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/shlib/svr5-shared-installed rename to src/openssl/openssl-1.0.2v-chevah5/shlib/svr5-shared-installed diff --git a/src/openssl/openssl-1.0.2v-chevah4/shlib/svr5-shared.sh b/src/openssl/openssl-1.0.2v-chevah5/shlib/svr5-shared.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/shlib/svr5-shared.sh rename to src/openssl/openssl-1.0.2v-chevah5/shlib/svr5-shared.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/shlib/win32.bat b/src/openssl/openssl-1.0.2v-chevah5/shlib/win32.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/shlib/win32.bat rename to src/openssl/openssl-1.0.2v-chevah5/shlib/win32.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/shlib/win32dll.bat b/src/openssl/openssl-1.0.2v-chevah5/shlib/win32dll.bat similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/shlib/win32dll.bat rename to src/openssl/openssl-1.0.2v-chevah5/shlib/win32dll.bat diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/Makefile b/src/openssl/openssl-1.0.2v-chevah5/ssl/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/ssl/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/bad_dtls_test.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/bad_dtls_test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/bad_dtls_test.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/bad_dtls_test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/bio_ssl.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/bio_ssl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/bio_ssl.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/bio_ssl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/clienthellotest.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/clienthellotest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/clienthellotest.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/clienthellotest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/d1_both.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/d1_both.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/d1_both.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/d1_both.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/d1_clnt.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/d1_clnt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/d1_clnt.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/d1_clnt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/d1_lib.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/d1_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/d1_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/d1_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/d1_meth.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/d1_meth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/d1_meth.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/d1_meth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/d1_pkt.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/d1_pkt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/d1_pkt.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/d1_pkt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/d1_srtp.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/d1_srtp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/d1_srtp.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/d1_srtp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/d1_srvr.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/d1_srvr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/d1_srvr.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/d1_srvr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/dtls1.h b/src/openssl/openssl-1.0.2v-chevah5/ssl/dtls1.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/dtls1.h rename to src/openssl/openssl-1.0.2v-chevah5/ssl/dtls1.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/dtlstest.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/dtlstest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/dtlstest.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/dtlstest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/fatalerrtest.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/fatalerrtest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/fatalerrtest.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/fatalerrtest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/heartbeat_test.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/heartbeat_test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/heartbeat_test.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/heartbeat_test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/install-ssl.com b/src/openssl/openssl-1.0.2v-chevah5/ssl/install-ssl.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/install-ssl.com rename to src/openssl/openssl-1.0.2v-chevah5/ssl/install-ssl.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/kssl.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/kssl.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/kssl.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/kssl.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/kssl.h b/src/openssl/openssl-1.0.2v-chevah5/ssl/kssl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/kssl.h rename to src/openssl/openssl-1.0.2v-chevah5/ssl/kssl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/kssl_lcl.h b/src/openssl/openssl-1.0.2v-chevah5/ssl/kssl_lcl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/kssl_lcl.h rename to src/openssl/openssl-1.0.2v-chevah5/ssl/kssl_lcl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s23_clnt.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s23_clnt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s23_clnt.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s23_clnt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s23_lib.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s23_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s23_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s23_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s23_meth.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s23_meth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s23_meth.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s23_meth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s23_pkt.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s23_pkt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s23_pkt.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s23_pkt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s23_srvr.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s23_srvr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s23_srvr.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s23_srvr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s2_clnt.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s2_clnt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s2_clnt.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s2_clnt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s2_enc.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s2_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s2_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s2_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s2_lib.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s2_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s2_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s2_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s2_meth.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s2_meth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s2_meth.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s2_meth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s2_pkt.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s2_pkt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s2_pkt.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s2_pkt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s2_srvr.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s2_srvr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s2_srvr.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s2_srvr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s3_both.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s3_both.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s3_both.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s3_both.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s3_cbc.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s3_cbc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s3_cbc.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s3_cbc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s3_clnt.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s3_clnt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s3_clnt.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s3_clnt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s3_enc.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s3_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s3_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s3_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s3_lib.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s3_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s3_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s3_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s3_meth.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s3_meth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s3_meth.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s3_meth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s3_pkt.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s3_pkt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s3_pkt.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s3_pkt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/s3_srvr.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/s3_srvr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/s3_srvr.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/s3_srvr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/srtp.h b/src/openssl/openssl-1.0.2v-chevah5/ssl/srtp.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/srtp.h rename to src/openssl/openssl-1.0.2v-chevah5/ssl/srtp.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl-lib.com b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl-lib.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl-lib.com rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl-lib.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl.h b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl.h rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl2.h b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl2.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl2.h rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl2.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl23.h b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl23.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl23.h rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl23.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl3.h b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl3.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl3.h rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl3.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_algs.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_algs.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_algs.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_algs.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_asn1.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_asn1.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_asn1.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_asn1.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_cert.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_cert.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_cert.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_cert.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_ciph.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_ciph.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_ciph.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_ciph.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_conf.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_conf.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_conf.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_conf.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_err.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_err.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_err.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_err.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_err2.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_err2.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_err2.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_err2.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_lib.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_locl.h b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_locl.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_locl.h rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_locl.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_rsa.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_rsa.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_rsa.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_rsa.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_sess.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_sess.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_sess.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_sess.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_stat.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_stat.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_stat.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_stat.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_task.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_task.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_task.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_task.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_txt.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_txt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_txt.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_txt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_utst.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_utst.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssl_utst.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssl_utst.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/ssltest.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/ssltest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/ssltest.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/ssltest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/sslv2conftest.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/sslv2conftest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/sslv2conftest.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/sslv2conftest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/t1_clnt.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/t1_clnt.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/t1_clnt.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/t1_clnt.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/t1_enc.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/t1_enc.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/t1_enc.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/t1_enc.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/t1_ext.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/t1_ext.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/t1_ext.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/t1_ext.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/t1_lib.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/t1_lib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/t1_lib.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/t1_lib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/t1_meth.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/t1_meth.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/t1_meth.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/t1_meth.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/t1_reneg.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/t1_reneg.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/t1_reneg.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/t1_reneg.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/t1_srvr.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/t1_srvr.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/t1_srvr.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/t1_srvr.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/t1_trce.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/t1_trce.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/t1_trce.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/t1_trce.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/tls1.h b/src/openssl/openssl-1.0.2v-chevah5/ssl/tls1.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/tls1.h rename to src/openssl/openssl-1.0.2v-chevah5/ssl/tls1.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/ssl/tls_srp.c b/src/openssl/openssl-1.0.2v-chevah5/ssl/tls_srp.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/ssl/tls_srp.c rename to src/openssl/openssl-1.0.2v-chevah5/ssl/tls_srp.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/CAss.cnf b/src/openssl/openssl-1.0.2v-chevah5/test/CAss.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/CAss.cnf rename to src/openssl/openssl-1.0.2v-chevah5/test/CAss.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/CAssdh.cnf b/src/openssl/openssl-1.0.2v-chevah5/test/CAssdh.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/CAssdh.cnf rename to src/openssl/openssl-1.0.2v-chevah5/test/CAssdh.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/CAssdsa.cnf b/src/openssl/openssl-1.0.2v-chevah5/test/CAssdsa.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/CAssdsa.cnf rename to src/openssl/openssl-1.0.2v-chevah5/test/CAssdsa.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/CAssrsa.cnf b/src/openssl/openssl-1.0.2v-chevah5/test/CAssrsa.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/CAssrsa.cnf rename to src/openssl/openssl-1.0.2v-chevah5/test/CAssrsa.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/CAtsa.cnf b/src/openssl/openssl-1.0.2v-chevah5/test/CAtsa.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/CAtsa.cnf rename to src/openssl/openssl-1.0.2v-chevah5/test/CAtsa.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/Makefile b/src/openssl/openssl-1.0.2v-chevah5/test/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/test/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/P1ss.cnf b/src/openssl/openssl-1.0.2v-chevah5/test/P1ss.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/P1ss.cnf rename to src/openssl/openssl-1.0.2v-chevah5/test/P1ss.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/P2ss.cnf b/src/openssl/openssl-1.0.2v-chevah5/test/P2ss.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/P2ss.cnf rename to src/openssl/openssl-1.0.2v-chevah5/test/P2ss.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/Sssdsa.cnf b/src/openssl/openssl-1.0.2v-chevah5/test/Sssdsa.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/Sssdsa.cnf rename to src/openssl/openssl-1.0.2v-chevah5/test/Sssdsa.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/Sssrsa.cnf b/src/openssl/openssl-1.0.2v-chevah5/test/Sssrsa.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/Sssrsa.cnf rename to src/openssl/openssl-1.0.2v-chevah5/test/Sssrsa.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/Uss.cnf b/src/openssl/openssl-1.0.2v-chevah5/test/Uss.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/Uss.cnf rename to src/openssl/openssl-1.0.2v-chevah5/test/Uss.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/VMSca-response.1 b/src/openssl/openssl-1.0.2v-chevah5/test/VMSca-response.1 similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/VMSca-response.1 rename to src/openssl/openssl-1.0.2v-chevah5/test/VMSca-response.1 diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/VMSca-response.2 b/src/openssl/openssl-1.0.2v-chevah5/test/VMSca-response.2 similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/VMSca-response.2 rename to src/openssl/openssl-1.0.2v-chevah5/test/VMSca-response.2 diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/asn1test.c b/src/openssl/openssl-1.0.2v-chevah5/test/asn1test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/asn1test.c rename to src/openssl/openssl-1.0.2v-chevah5/test/asn1test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/bctest b/src/openssl/openssl-1.0.2v-chevah5/test/bctest similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/bctest rename to src/openssl/openssl-1.0.2v-chevah5/test/bctest diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/bctest.com b/src/openssl/openssl-1.0.2v-chevah5/test/bctest.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/bctest.com rename to src/openssl/openssl-1.0.2v-chevah5/test/bctest.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/bntest.com b/src/openssl/openssl-1.0.2v-chevah5/test/bntest.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/bntest.com rename to src/openssl/openssl-1.0.2v-chevah5/test/bntest.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/certs/bad.key b/src/openssl/openssl-1.0.2v-chevah5/test/certs/bad.key similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/certs/bad.key rename to src/openssl/openssl-1.0.2v-chevah5/test/certs/bad.key diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/certs/bad.pem b/src/openssl/openssl-1.0.2v-chevah5/test/certs/bad.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/certs/bad.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/certs/bad.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/certs/interCA.key b/src/openssl/openssl-1.0.2v-chevah5/test/certs/interCA.key similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/certs/interCA.key rename to src/openssl/openssl-1.0.2v-chevah5/test/certs/interCA.key diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/certs/interCA.pem b/src/openssl/openssl-1.0.2v-chevah5/test/certs/interCA.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/certs/interCA.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/certs/interCA.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/certs/leaf.key b/src/openssl/openssl-1.0.2v-chevah5/test/certs/leaf.key similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/certs/leaf.key rename to src/openssl/openssl-1.0.2v-chevah5/test/certs/leaf.key diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/certs/leaf.pem b/src/openssl/openssl-1.0.2v-chevah5/test/certs/leaf.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/certs/leaf.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/certs/leaf.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/certs/pss1.pem b/src/openssl/openssl-1.0.2v-chevah5/test/certs/pss1.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/certs/pss1.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/certs/pss1.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/certs/rootCA.key b/src/openssl/openssl-1.0.2v-chevah5/test/certs/rootCA.key similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/certs/rootCA.key rename to src/openssl/openssl-1.0.2v-chevah5/test/certs/rootCA.key diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/certs/rootCA.pem b/src/openssl/openssl-1.0.2v-chevah5/test/certs/rootCA.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/certs/rootCA.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/certs/rootCA.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/certs/roots.pem b/src/openssl/openssl-1.0.2v-chevah5/test/certs/roots.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/certs/roots.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/certs/roots.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/certs/subinterCA-ss.pem b/src/openssl/openssl-1.0.2v-chevah5/test/certs/subinterCA-ss.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/certs/subinterCA-ss.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/certs/subinterCA-ss.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/certs/subinterCA.key b/src/openssl/openssl-1.0.2v-chevah5/test/certs/subinterCA.key similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/certs/subinterCA.key rename to src/openssl/openssl-1.0.2v-chevah5/test/certs/subinterCA.key diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/certs/subinterCA.pem b/src/openssl/openssl-1.0.2v-chevah5/test/certs/subinterCA.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/certs/subinterCA.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/certs/subinterCA.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/certs/untrusted.pem b/src/openssl/openssl-1.0.2v-chevah5/test/certs/untrusted.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/certs/untrusted.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/certs/untrusted.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/clean_test.com b/src/openssl/openssl-1.0.2v-chevah5/test/clean_test.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/clean_test.com rename to src/openssl/openssl-1.0.2v-chevah5/test/clean_test.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/cms-examples.pl b/src/openssl/openssl-1.0.2v-chevah5/test/cms-examples.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/cms-examples.pl rename to src/openssl/openssl-1.0.2v-chevah5/test/cms-examples.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/cms-test.pl b/src/openssl/openssl-1.0.2v-chevah5/test/cms-test.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/cms-test.pl rename to src/openssl/openssl-1.0.2v-chevah5/test/cms-test.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/dummytest.c b/src/openssl/openssl-1.0.2v-chevah5/test/dummytest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/dummytest.c rename to src/openssl/openssl-1.0.2v-chevah5/test/dummytest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/igetest.c b/src/openssl/openssl-1.0.2v-chevah5/test/igetest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/igetest.c rename to src/openssl/openssl-1.0.2v-chevah5/test/igetest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/maketests.com b/src/openssl/openssl-1.0.2v-chevah5/test/maketests.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/maketests.com rename to src/openssl/openssl-1.0.2v-chevah5/test/maketests.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/methtest.c b/src/openssl/openssl-1.0.2v-chevah5/test/methtest.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/methtest.c rename to src/openssl/openssl-1.0.2v-chevah5/test/methtest.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D1.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D1.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D1.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D1.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D1_Cert_EE.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D1_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D1_Cert_EE.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D1_Cert_EE.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D1_Issuer_ICA.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D1_Issuer_ICA.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D2.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D2.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D2.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D2.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D2_Cert_ICA.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D2_Cert_ICA.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D2_Cert_ICA.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D2_Cert_ICA.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D2_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D2_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D3.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D3.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D3.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D3.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D3_Cert_EE.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D3_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D3_Cert_EE.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D3_Cert_EE.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D3_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/D3_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISDOSC_D1.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISDOSC_D1.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISDOSC_D1.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISDOSC_D1.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISDOSC_D2.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISDOSC_D2.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISDOSC_D2.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISDOSC_D2.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISDOSC_D3.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISDOSC_D3.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISDOSC_D3.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISDOSC_D3.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISIC_D2_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISIC_D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISIC_D2_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISIC_D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISIC_D3_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISIC_D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISIC_D3_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISIC_D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISOP_D1.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISOP_D1.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISOP_D1.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISOP_D1.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISOP_D2.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISOP_D2.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISOP_D2.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISOP_D2.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISOP_D3.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISOP_D3.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISOP_D3.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISOP_D3.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISOP_ND1.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISOP_ND1.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISOP_ND1.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISOP_ND1.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISOP_ND2.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISOP_ND2.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISOP_ND2.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISOP_ND2.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISOP_ND3.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISOP_ND3.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ISOP_ND3.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ISOP_ND3.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND1.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND1.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND1.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND1.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND1_Cert_EE.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND1_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND1_Cert_EE.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND1_Cert_EE.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND1_Issuer_ICA.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND2.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND2.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND2.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND2.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND2_Cert_ICA.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND2_Cert_ICA.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND2_Cert_ICA.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND2_Cert_ICA.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND2_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND2_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND3.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND3.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND3.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND3.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND3_Cert_EE.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND3_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND3_Cert_EE.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND3_Cert_EE.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND3_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/ND3_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WIKH_D1.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WIKH_D1.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WIKH_D1.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WIKH_D1.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WIKH_D2.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WIKH_D2.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WIKH_D2.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WIKH_D2.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WIKH_D3.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WIKH_D3.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WIKH_D3.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WIKH_D3.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WIKH_ND1.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WIKH_ND1.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WIKH_ND1.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WIKH_ND1.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WIKH_ND2.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WIKH_ND2.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WIKH_ND2.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WIKH_ND2.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WIKH_ND3.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WIKH_ND3.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WIKH_ND3.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WIKH_ND3.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WINH_D1.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WINH_D1.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WINH_D1.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WINH_D1.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WINH_D2.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WINH_D2.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WINH_D2.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WINH_D2.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WINH_D3.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WINH_D3.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WINH_D3.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WINH_D3.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WINH_ND1.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WINH_ND1.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WINH_ND1.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WINH_ND1.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WINH_ND2.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WINH_ND2.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WINH_ND2.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WINH_ND2.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WINH_ND3.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WINH_ND3.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WINH_ND3.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WINH_ND3.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKDOSC_D1.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKDOSC_D1.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKDOSC_D1.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKDOSC_D1.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKDOSC_D2.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKDOSC_D2.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKDOSC_D2.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKDOSC_D2.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKDOSC_D3.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKDOSC_D3.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKDOSC_D3.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKDOSC_D3.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKIC_D2_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKIC_D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKIC_D2_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKIC_D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKIC_D3_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKIC_D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKIC_D3_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKIC_D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WRID_D1.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WRID_D1.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WRID_D1.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WRID_D1.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WRID_D2.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WRID_D2.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WRID_D2.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WRID_D2.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WRID_D3.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WRID_D3.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WRID_D3.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WRID_D3.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WRID_ND1.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WRID_ND1.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WRID_ND1.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WRID_ND1.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WRID_ND2.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WRID_ND2.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WRID_ND2.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WRID_ND2.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WRID_ND3.ors b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WRID_ND3.ors similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WRID_ND3.ors rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WRID_ND3.ors diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem b/src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/pkcs7-1.pem b/src/openssl/openssl-1.0.2v-chevah5/test/pkcs7-1.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/pkcs7-1.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/pkcs7-1.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/pkcs7.pem b/src/openssl/openssl-1.0.2v-chevah5/test/pkcs7.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/pkcs7.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/pkcs7.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/pkits-test.pl b/src/openssl/openssl-1.0.2v-chevah5/test/pkits-test.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/pkits-test.pl rename to src/openssl/openssl-1.0.2v-chevah5/test/pkits-test.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/r160test.c b/src/openssl/openssl-1.0.2v-chevah5/test/r160test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/r160test.c rename to src/openssl/openssl-1.0.2v-chevah5/test/r160test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/recipes/60-test_x509_time.t b/src/openssl/openssl-1.0.2v-chevah5/test/recipes/60-test_x509_time.t similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/recipes/60-test_x509_time.t rename to src/openssl/openssl-1.0.2v-chevah5/test/recipes/60-test_x509_time.t diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/serverinfo.pem b/src/openssl/openssl-1.0.2v-chevah5/test/serverinfo.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/serverinfo.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/serverinfo.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/smcont.txt b/src/openssl/openssl-1.0.2v-chevah5/test/smcont.txt similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/smcont.txt rename to src/openssl/openssl-1.0.2v-chevah5/test/smcont.txt diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/ca.cnf b/src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/ca.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/ca.cnf rename to src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/ca.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/mksmime-certs.sh b/src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/mksmime-certs.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/mksmime-certs.sh rename to src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/mksmime-certs.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smdh.pem b/src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smdh.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smdh.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smdh.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smdsa1.pem b/src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smdsa1.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smdsa1.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smdsa1.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smdsa2.pem b/src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smdsa2.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smdsa2.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smdsa2.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smdsa3.pem b/src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smdsa3.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smdsa3.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smdsa3.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smdsap.pem b/src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smdsap.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smdsap.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smdsap.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smec1.pem b/src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smec1.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smec1.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smec1.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smec2.pem b/src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smec2.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smec2.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smec2.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smroot.pem b/src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smroot.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smroot.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smroot.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smrsa1.pem b/src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smrsa1.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smrsa1.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smrsa1.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smrsa2.pem b/src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smrsa2.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smrsa2.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smrsa2.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smrsa3.pem b/src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smrsa3.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/smime-certs/smrsa3.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/smime-certs/smrsa3.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ssltestlib.c b/src/openssl/openssl-1.0.2v-chevah5/test/ssltestlib.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ssltestlib.c rename to src/openssl/openssl-1.0.2v-chevah5/test/ssltestlib.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/ssltestlib.h b/src/openssl/openssl-1.0.2v-chevah5/test/ssltestlib.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/ssltestlib.h rename to src/openssl/openssl-1.0.2v-chevah5/test/ssltestlib.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/tcrl b/src/openssl/openssl-1.0.2v-chevah5/test/tcrl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/tcrl rename to src/openssl/openssl-1.0.2v-chevah5/test/tcrl diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/tcrl.com b/src/openssl/openssl-1.0.2v-chevah5/test/tcrl.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/tcrl.com rename to src/openssl/openssl-1.0.2v-chevah5/test/tcrl.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/test.cnf b/src/openssl/openssl-1.0.2v-chevah5/test/test.cnf similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/test.cnf rename to src/openssl/openssl-1.0.2v-chevah5/test/test.cnf diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/test_padlock b/src/openssl/openssl-1.0.2v-chevah5/test/test_padlock similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/test_padlock rename to src/openssl/openssl-1.0.2v-chevah5/test/test_padlock diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testca b/src/openssl/openssl-1.0.2v-chevah5/test/testca similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testca rename to src/openssl/openssl-1.0.2v-chevah5/test/testca diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testca.com b/src/openssl/openssl-1.0.2v-chevah5/test/testca.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testca.com rename to src/openssl/openssl-1.0.2v-chevah5/test/testca.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testcrl.pem b/src/openssl/openssl-1.0.2v-chevah5/test/testcrl.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testcrl.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/testcrl.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testenc b/src/openssl/openssl-1.0.2v-chevah5/test/testenc similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testenc rename to src/openssl/openssl-1.0.2v-chevah5/test/testenc diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testenc.com b/src/openssl/openssl-1.0.2v-chevah5/test/testenc.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testenc.com rename to src/openssl/openssl-1.0.2v-chevah5/test/testenc.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testfipsssl b/src/openssl/openssl-1.0.2v-chevah5/test/testfipsssl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testfipsssl rename to src/openssl/openssl-1.0.2v-chevah5/test/testfipsssl diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testgen b/src/openssl/openssl-1.0.2v-chevah5/test/testgen similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testgen rename to src/openssl/openssl-1.0.2v-chevah5/test/testgen diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testgen.com b/src/openssl/openssl-1.0.2v-chevah5/test/testgen.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testgen.com rename to src/openssl/openssl-1.0.2v-chevah5/test/testgen.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testp7.pem b/src/openssl/openssl-1.0.2v-chevah5/test/testp7.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testp7.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/testp7.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testreq2.pem b/src/openssl/openssl-1.0.2v-chevah5/test/testreq2.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testreq2.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/testreq2.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testrsa.pem b/src/openssl/openssl-1.0.2v-chevah5/test/testrsa.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testrsa.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/testrsa.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/tests.com b/src/openssl/openssl-1.0.2v-chevah5/test/tests.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/tests.com rename to src/openssl/openssl-1.0.2v-chevah5/test/tests.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testsid.pem b/src/openssl/openssl-1.0.2v-chevah5/test/testsid.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testsid.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/testsid.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testss b/src/openssl/openssl-1.0.2v-chevah5/test/testss similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testss rename to src/openssl/openssl-1.0.2v-chevah5/test/testss diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testss.com b/src/openssl/openssl-1.0.2v-chevah5/test/testss.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testss.com rename to src/openssl/openssl-1.0.2v-chevah5/test/testss.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testssl b/src/openssl/openssl-1.0.2v-chevah5/test/testssl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testssl rename to src/openssl/openssl-1.0.2v-chevah5/test/testssl diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testssl.com b/src/openssl/openssl-1.0.2v-chevah5/test/testssl.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testssl.com rename to src/openssl/openssl-1.0.2v-chevah5/test/testssl.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testsslproxy b/src/openssl/openssl-1.0.2v-chevah5/test/testsslproxy similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testsslproxy rename to src/openssl/openssl-1.0.2v-chevah5/test/testsslproxy diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testtsa b/src/openssl/openssl-1.0.2v-chevah5/test/testtsa similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testtsa rename to src/openssl/openssl-1.0.2v-chevah5/test/testtsa diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testtsa.com b/src/openssl/openssl-1.0.2v-chevah5/test/testtsa.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testtsa.com rename to src/openssl/openssl-1.0.2v-chevah5/test/testtsa.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testutil.h b/src/openssl/openssl-1.0.2v-chevah5/test/testutil.h similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testutil.h rename to src/openssl/openssl-1.0.2v-chevah5/test/testutil.h diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/testx509.pem b/src/openssl/openssl-1.0.2v-chevah5/test/testx509.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/testx509.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/testx509.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/times b/src/openssl/openssl-1.0.2v-chevah5/test/times similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/times rename to src/openssl/openssl-1.0.2v-chevah5/test/times diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/tocsp b/src/openssl/openssl-1.0.2v-chevah5/test/tocsp similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/tocsp rename to src/openssl/openssl-1.0.2v-chevah5/test/tocsp diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/tocsp.com b/src/openssl/openssl-1.0.2v-chevah5/test/tocsp.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/tocsp.com rename to src/openssl/openssl-1.0.2v-chevah5/test/tocsp.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/tpkcs7 b/src/openssl/openssl-1.0.2v-chevah5/test/tpkcs7 similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/tpkcs7 rename to src/openssl/openssl-1.0.2v-chevah5/test/tpkcs7 diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/tpkcs7.com b/src/openssl/openssl-1.0.2v-chevah5/test/tpkcs7.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/tpkcs7.com rename to src/openssl/openssl-1.0.2v-chevah5/test/tpkcs7.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/tpkcs7d b/src/openssl/openssl-1.0.2v-chevah5/test/tpkcs7d similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/tpkcs7d rename to src/openssl/openssl-1.0.2v-chevah5/test/tpkcs7d diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/tpkcs7d.com b/src/openssl/openssl-1.0.2v-chevah5/test/tpkcs7d.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/tpkcs7d.com rename to src/openssl/openssl-1.0.2v-chevah5/test/tpkcs7d.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/treq b/src/openssl/openssl-1.0.2v-chevah5/test/treq similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/treq rename to src/openssl/openssl-1.0.2v-chevah5/test/treq diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/treq.com b/src/openssl/openssl-1.0.2v-chevah5/test/treq.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/treq.com rename to src/openssl/openssl-1.0.2v-chevah5/test/treq.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/trsa b/src/openssl/openssl-1.0.2v-chevah5/test/trsa similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/trsa rename to src/openssl/openssl-1.0.2v-chevah5/test/trsa diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/trsa.com b/src/openssl/openssl-1.0.2v-chevah5/test/trsa.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/trsa.com rename to src/openssl/openssl-1.0.2v-chevah5/test/trsa.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/tsid b/src/openssl/openssl-1.0.2v-chevah5/test/tsid similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/tsid rename to src/openssl/openssl-1.0.2v-chevah5/test/tsid diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/tsid.com b/src/openssl/openssl-1.0.2v-chevah5/test/tsid.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/tsid.com rename to src/openssl/openssl-1.0.2v-chevah5/test/tsid.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/tverify.com b/src/openssl/openssl-1.0.2v-chevah5/test/tverify.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/tverify.com rename to src/openssl/openssl-1.0.2v-chevah5/test/tverify.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/tx509 b/src/openssl/openssl-1.0.2v-chevah5/test/tx509 similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/tx509 rename to src/openssl/openssl-1.0.2v-chevah5/test/tx509 diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/tx509.com b/src/openssl/openssl-1.0.2v-chevah5/test/tx509.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/tx509.com rename to src/openssl/openssl-1.0.2v-chevah5/test/tx509.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/v3-cert1.pem b/src/openssl/openssl-1.0.2v-chevah5/test/v3-cert1.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/v3-cert1.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/v3-cert1.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/v3-cert2.pem b/src/openssl/openssl-1.0.2v-chevah5/test/v3-cert2.pem similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/v3-cert2.pem rename to src/openssl/openssl-1.0.2v-chevah5/test/v3-cert2.pem diff --git a/src/openssl/openssl-1.0.2v-chevah4/test/x509_time_test.c b/src/openssl/openssl-1.0.2v-chevah5/test/x509_time_test.c similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/test/x509_time_test.c rename to src/openssl/openssl-1.0.2v-chevah5/test/x509_time_test.c diff --git a/src/openssl/openssl-1.0.2v-chevah4/tools/Makefile b/src/openssl/openssl-1.0.2v-chevah5/tools/Makefile similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/tools/Makefile rename to src/openssl/openssl-1.0.2v-chevah5/tools/Makefile diff --git a/src/openssl/openssl-1.0.2v-chevah4/tools/c89.sh b/src/openssl/openssl-1.0.2v-chevah5/tools/c89.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/tools/c89.sh rename to src/openssl/openssl-1.0.2v-chevah5/tools/c89.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/tools/c_hash b/src/openssl/openssl-1.0.2v-chevah5/tools/c_hash similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/tools/c_hash rename to src/openssl/openssl-1.0.2v-chevah5/tools/c_hash diff --git a/src/openssl/openssl-1.0.2v-chevah4/tools/c_info b/src/openssl/openssl-1.0.2v-chevah5/tools/c_info similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/tools/c_info rename to src/openssl/openssl-1.0.2v-chevah5/tools/c_info diff --git a/src/openssl/openssl-1.0.2v-chevah4/tools/c_issuer b/src/openssl/openssl-1.0.2v-chevah5/tools/c_issuer similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/tools/c_issuer rename to src/openssl/openssl-1.0.2v-chevah5/tools/c_issuer diff --git a/src/openssl/openssl-1.0.2v-chevah4/tools/c_name b/src/openssl/openssl-1.0.2v-chevah5/tools/c_name similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/tools/c_name rename to src/openssl/openssl-1.0.2v-chevah5/tools/c_name diff --git a/src/openssl/openssl-1.0.2v-chevah4/tools/c_rehash.in b/src/openssl/openssl-1.0.2v-chevah5/tools/c_rehash.in similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/tools/c_rehash.in rename to src/openssl/openssl-1.0.2v-chevah5/tools/c_rehash.in diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/FreeBSD.sh b/src/openssl/openssl-1.0.2v-chevah5/util/FreeBSD.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/FreeBSD.sh rename to src/openssl/openssl-1.0.2v-chevah5/util/FreeBSD.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/add_cr.pl b/src/openssl/openssl-1.0.2v-chevah5/util/add_cr.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/add_cr.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/add_cr.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/bat.sh b/src/openssl/openssl-1.0.2v-chevah5/util/bat.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/bat.sh rename to src/openssl/openssl-1.0.2v-chevah5/util/bat.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/ck_errf.pl b/src/openssl/openssl-1.0.2v-chevah5/util/ck_errf.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/ck_errf.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/ck_errf.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/clean-depend.pl b/src/openssl/openssl-1.0.2v-chevah5/util/clean-depend.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/clean-depend.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/clean-depend.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/copy-if-different.pl b/src/openssl/openssl-1.0.2v-chevah5/util/copy-if-different.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/copy-if-different.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/copy-if-different.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/copy.pl b/src/openssl/openssl-1.0.2v-chevah5/util/copy.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/copy.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/copy.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/cygwin.sh b/src/openssl/openssl-1.0.2v-chevah5/util/cygwin.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/cygwin.sh rename to src/openssl/openssl-1.0.2v-chevah5/util/cygwin.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/deleof.pl b/src/openssl/openssl-1.0.2v-chevah5/util/deleof.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/deleof.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/deleof.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/deltree.com b/src/openssl/openssl-1.0.2v-chevah5/util/deltree.com similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/deltree.com rename to src/openssl/openssl-1.0.2v-chevah5/util/deltree.com diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/dirname.pl b/src/openssl/openssl-1.0.2v-chevah5/util/dirname.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/dirname.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/dirname.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/do_ms.sh b/src/openssl/openssl-1.0.2v-chevah5/util/do_ms.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/do_ms.sh rename to src/openssl/openssl-1.0.2v-chevah5/util/do_ms.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/domd b/src/openssl/openssl-1.0.2v-chevah5/util/domd similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/domd rename to src/openssl/openssl-1.0.2v-chevah5/util/domd diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/err-ins.pl b/src/openssl/openssl-1.0.2v-chevah5/util/err-ins.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/err-ins.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/err-ins.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/extract-names.pl b/src/openssl/openssl-1.0.2v-chevah5/util/extract-names.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/extract-names.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/extract-names.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/extract-section.pl b/src/openssl/openssl-1.0.2v-chevah5/util/extract-section.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/extract-section.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/extract-section.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/files.pl b/src/openssl/openssl-1.0.2v-chevah5/util/files.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/files.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/files.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/fixNT.sh b/src/openssl/openssl-1.0.2v-chevah5/util/fixNT.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/fixNT.sh rename to src/openssl/openssl-1.0.2v-chevah5/util/fixNT.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/indent.pro b/src/openssl/openssl-1.0.2v-chevah5/util/indent.pro similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/indent.pro rename to src/openssl/openssl-1.0.2v-chevah5/util/indent.pro diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/install.sh b/src/openssl/openssl-1.0.2v-chevah5/util/install.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/install.sh rename to src/openssl/openssl-1.0.2v-chevah5/util/install.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/libeay.num b/src/openssl/openssl-1.0.2v-chevah5/util/libeay.num similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/libeay.num rename to src/openssl/openssl-1.0.2v-chevah5/util/libeay.num diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/mk1mf.pl b/src/openssl/openssl-1.0.2v-chevah5/util/mk1mf.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/mk1mf.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/mk1mf.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/mkbuildinf.pl b/src/openssl/openssl-1.0.2v-chevah5/util/mkbuildinf.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/mkbuildinf.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/mkbuildinf.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/mkcerts.sh b/src/openssl/openssl-1.0.2v-chevah5/util/mkcerts.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/mkcerts.sh rename to src/openssl/openssl-1.0.2v-chevah5/util/mkcerts.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/mkdef.pl b/src/openssl/openssl-1.0.2v-chevah5/util/mkdef.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/mkdef.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/mkdef.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/mkdir-p.pl b/src/openssl/openssl-1.0.2v-chevah5/util/mkdir-p.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/mkdir-p.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/mkdir-p.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/mkerr.pl b/src/openssl/openssl-1.0.2v-chevah5/util/mkerr.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/mkerr.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/mkerr.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/mkfiles.pl b/src/openssl/openssl-1.0.2v-chevah5/util/mkfiles.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/mkfiles.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/mkfiles.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/mklink.pl b/src/openssl/openssl-1.0.2v-chevah5/util/mklink.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/mklink.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/mklink.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/mkrc.pl b/src/openssl/openssl-1.0.2v-chevah5/util/mkrc.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/mkrc.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/mkrc.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/mkstack.pl b/src/openssl/openssl-1.0.2v-chevah5/util/mkstack.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/mkstack.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/mkstack.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/openssl-format-source b/src/openssl/openssl-1.0.2v-chevah5/util/openssl-format-source similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/openssl-format-source rename to src/openssl/openssl-1.0.2v-chevah5/util/openssl-format-source diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/opensslwrap.sh b/src/openssl/openssl-1.0.2v-chevah5/util/opensslwrap.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/opensslwrap.sh rename to src/openssl/openssl-1.0.2v-chevah5/util/opensslwrap.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/perlpath.pl b/src/openssl/openssl-1.0.2v-chevah5/util/perlpath.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/perlpath.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/perlpath.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/pl/BC-32.pl b/src/openssl/openssl-1.0.2v-chevah5/util/pl/BC-32.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/pl/BC-32.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/pl/BC-32.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/pl/Mingw32.pl b/src/openssl/openssl-1.0.2v-chevah5/util/pl/Mingw32.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/pl/Mingw32.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/pl/Mingw32.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/pl/OS2-EMX.pl b/src/openssl/openssl-1.0.2v-chevah5/util/pl/OS2-EMX.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/pl/OS2-EMX.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/pl/OS2-EMX.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/pl/VC-32.pl b/src/openssl/openssl-1.0.2v-chevah5/util/pl/VC-32.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/pl/VC-32.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/pl/VC-32.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/pl/linux.pl b/src/openssl/openssl-1.0.2v-chevah5/util/pl/linux.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/pl/linux.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/pl/linux.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/pl/netware.pl b/src/openssl/openssl-1.0.2v-chevah5/util/pl/netware.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/pl/netware.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/pl/netware.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/pl/ultrix.pl b/src/openssl/openssl-1.0.2v-chevah5/util/pl/ultrix.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/pl/ultrix.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/pl/ultrix.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/pl/unix.pl b/src/openssl/openssl-1.0.2v-chevah5/util/pl/unix.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/pl/unix.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/pl/unix.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/pod2man.pl b/src/openssl/openssl-1.0.2v-chevah5/util/pod2man.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/pod2man.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/pod2man.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/pod2mantest b/src/openssl/openssl-1.0.2v-chevah5/util/pod2mantest similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/pod2mantest rename to src/openssl/openssl-1.0.2v-chevah5/util/pod2mantest diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/pod2mantest.pod b/src/openssl/openssl-1.0.2v-chevah5/util/pod2mantest.pod similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/pod2mantest.pod rename to src/openssl/openssl-1.0.2v-chevah5/util/pod2mantest.pod diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/point.sh b/src/openssl/openssl-1.0.2v-chevah5/util/point.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/point.sh rename to src/openssl/openssl-1.0.2v-chevah5/util/point.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/selftest.pl b/src/openssl/openssl-1.0.2v-chevah5/util/selftest.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/selftest.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/selftest.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/shlib_wrap.sh b/src/openssl/openssl-1.0.2v-chevah5/util/shlib_wrap.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/shlib_wrap.sh rename to src/openssl/openssl-1.0.2v-chevah5/util/shlib_wrap.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/sp-diff.pl b/src/openssl/openssl-1.0.2v-chevah5/util/sp-diff.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/sp-diff.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/sp-diff.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/speed.sh b/src/openssl/openssl-1.0.2v-chevah5/util/speed.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/speed.sh rename to src/openssl/openssl-1.0.2v-chevah5/util/speed.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/src-dep.pl b/src/openssl/openssl-1.0.2v-chevah5/util/src-dep.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/src-dep.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/src-dep.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/ssleay.num b/src/openssl/openssl-1.0.2v-chevah5/util/ssleay.num similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/ssleay.num rename to src/openssl/openssl-1.0.2v-chevah5/util/ssleay.num diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/su-filter.pl b/src/openssl/openssl-1.0.2v-chevah5/util/su-filter.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/su-filter.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/su-filter.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/tab_num.pl b/src/openssl/openssl-1.0.2v-chevah5/util/tab_num.pl similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/tab_num.pl rename to src/openssl/openssl-1.0.2v-chevah5/util/tab_num.pl diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/toutf8.sh b/src/openssl/openssl-1.0.2v-chevah5/util/toutf8.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/toutf8.sh rename to src/openssl/openssl-1.0.2v-chevah5/util/toutf8.sh diff --git a/src/openssl/openssl-1.0.2v-chevah4/util/x86asm.sh b/src/openssl/openssl-1.0.2v-chevah5/util/x86asm.sh similarity index 100% rename from src/openssl/openssl-1.0.2v-chevah4/util/x86asm.sh rename to src/openssl/openssl-1.0.2v-chevah5/util/x86asm.sh diff --git a/src/openssl/openssl-1.1.1t/appveyor.yml b/src/openssl/openssl-1.1.1t/appveyor.yml deleted file mode 100644 index 6210391f2..000000000 --- a/src/openssl/openssl-1.1.1t/appveyor.yml +++ /dev/null @@ -1,78 +0,0 @@ -image: - - Visual Studio 2017 - -platform: - - x64 - - x86 - -environment: - fast_finish: true - matrix: - - VSVER: 15 - -configuration: - - shared - - plain - - minimal - -before_build: - - ps: >- - Install-Module VSSetup -Scope CurrentUser - - ps: >- - Get-VSSetupInstance -All - - ps: >- - gci env:* | sort-object name - - ps: >- - If ($env:Platform -Match "x86") { - $env:VCVARS_PLATFORM="x86" - $env:TARGET="VC-WIN32 no-asm --strict-warnings" - } Else { - $env:VCVARS_PLATFORM="amd64" - $env:TARGET="VC-WIN64A-masm" - } - - ps: >- - If ($env:Configuration -Match "shared") { - $env:SHARED="no-makedepend" - } ElseIf ($env:Configuration -Match "minimal") { - $env:SHARED="no-shared no-dso no-makedepend no-aria no-async no-autoload-config no-blake2 no-bf no-camellia no-cast no-chacha no-cmac no-cms no-comp no-ct no-des no-dgram no-dh no-dsa no-dtls no-ec2m no-engine no-filenames no-gost no-idea no-mdc2 no-md4 no-multiblock no-nextprotoneg no-ocsp no-ocb no-poly1305 no-psk no-rc2 no-rc4 no-rmd160 no-seed no-siphash no-sm2 no-sm3 no-sm4 no-srp no-srtp no-ssl3 no-ssl3-method no-ts no-ui-console no-whirlpool no-asm -DOPENSSL_SMALL_FOOTPRINT" - } Else { - $env:SHARED="no-shared no-makedepend" - } - - call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" %VCVARS_PLATFORM% - - mkdir _build - - cd _build - - perl ..\Configure %TARGET% %SHARED% - - perl configdata.pm --dump - - cd .. - - ps: >- - if (-not $env:APPVEYOR_PULL_REQUEST_NUMBER` - -or (&git log -1 $env:APPVEYOR_PULL_REQUEST_HEAD_COMMIT | - Select-String "\[extended tests\]") ) { - $env:EXTENDED_TESTS="yes" - } - -build_script: - - cd _build - - ps: >- - If ($env:Configuration -Match "shared" -or $env:EXTENDED_TESTS) { - cmd /c "nmake build_all_generated 2>&1" - cmd /c "nmake PERL=no-perl 2>&1" - } - - cd .. - -test_script: - - cd _build - - ps: >- - If ($env:Configuration -Match "shared" -or $env:EXTENDED_TESTS) { - if ($env:EXTENDED_TESTS) { - cmd /c "nmake test V=1 2>&1" - } Else { - cmd /c "nmake test V=1 TESTS=-test_fuzz 2>&1" - } - } - - ps: >- - if ($env:EXTENDED_TESTS) { - mkdir ..\_install - cmd /c "nmake install DESTDIR=..\_install 2>&1" - } - - cd .. diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/rsa_sup_mul.c b/src/openssl/openssl-1.1.1t/crypto/bn/rsa_sup_mul.c deleted file mode 100644 index acafefd5f..000000000 --- a/src/openssl/openssl-1.1.1t/crypto/bn/rsa_sup_mul.c +++ /dev/null @@ -1,614 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "internal/numbers.h" -#include "internal/constant_time.h" -#include "bn_local.h" - -# if BN_BYTES == 8 -typedef uint64_t limb_t; -# if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__ == 16 -/* nonstandard; implemented by gcc on 64-bit platforms */ -typedef __uint128_t limb2_t; -# define HAVE_LIMB2_T -# endif -# define LIMB_BIT_SIZE 64 -# define LIMB_BYTE_SIZE 8 -# elif BN_BYTES == 4 -typedef uint32_t limb_t; -typedef uint64_t limb2_t; -# define LIMB_BIT_SIZE 32 -# define LIMB_BYTE_SIZE 4 -# define HAVE_LIMB2_T -# else -# error "Not supported" -# endif - -/* - * For multiplication we're using schoolbook multiplication, - * so if we have two numbers, each with 6 "digits" (words) - * the multiplication is calculated as follows: - * A B C D E F - * x I J K L M N - * -------------- - * N*F - * N*E - * N*D - * N*C - * N*B - * N*A - * M*F - * M*E - * M*D - * M*C - * M*B - * M*A - * L*F - * L*E - * L*D - * L*C - * L*B - * L*A - * K*F - * K*E - * K*D - * K*C - * K*B - * K*A - * J*F - * J*E - * J*D - * J*C - * J*B - * J*A - * I*F - * I*E - * I*D - * I*C - * I*B - * + I*A - * ========================== - * N*B N*D N*F - * + N*A N*C N*E - * + M*B M*D M*F - * + M*A M*C M*E - * + L*B L*D L*F - * + L*A L*C L*E - * + K*B K*D K*F - * + K*A K*C K*E - * + J*B J*D J*F - * + J*A J*C J*E - * + I*B I*D I*F - * + I*A I*C I*E - * - * 1+1 1+3 1+5 - * 1+0 1+2 1+4 - * 0+1 0+3 0+5 - * 0+0 0+2 0+4 - * - * 0 1 2 3 4 5 6 - * which requires n^2 multiplications and 2n full length additions - * as we can keep every other result of limb multiplication in two separate - * limbs - */ - -#if defined HAVE_LIMB2_T -static ossl_inline void _mul_limb(limb_t *hi, limb_t *lo, limb_t a, limb_t b) -{ - limb2_t t; - /* - * this is idiomatic code to tell compiler to use the native mul - * those three lines will actually compile to single instruction - */ - - t = (limb2_t)a * b; - *hi = t >> LIMB_BIT_SIZE; - *lo = (limb_t)t; -} -#elif (BN_BYTES == 8) && (defined _MSC_VER) -/* https://learn.microsoft.com/en-us/cpp/intrinsics/umul128?view=msvc-170 */ -#pragma intrinsic(_umul128) -static ossl_inline void _mul_limb(limb_t *hi, limb_t *lo, limb_t a, limb_t b) -{ - *lo = _umul128(a, b, hi); -} -#else -/* - * if the compiler doesn't have either a 128bit data type nor a "return - * high 64 bits of multiplication" - */ -static ossl_inline void _mul_limb(limb_t *hi, limb_t *lo, limb_t a, limb_t b) -{ - limb_t a_low = (limb_t)(uint32_t)a; - limb_t a_hi = a >> 32; - limb_t b_low = (limb_t)(uint32_t)b; - limb_t b_hi = b >> 32; - - limb_t p0 = a_low * b_low; - limb_t p1 = a_low * b_hi; - limb_t p2 = a_hi * b_low; - limb_t p3 = a_hi * b_hi; - - uint32_t cy = (uint32_t)(((p0 >> 32) + (uint32_t)p1 + (uint32_t)p2) >> 32); - - *lo = p0 + (p1 << 32) + (p2 << 32); - *hi = p3 + (p1 >> 32) + (p2 >> 32) + cy; -} -#endif - -/* add two limbs with carry in, return carry out */ -static ossl_inline limb_t _add_limb(limb_t *ret, limb_t a, limb_t b, limb_t carry) -{ - limb_t carry1, carry2, t; - /* - * `c = a + b; if (c < a)` is idiomatic code that makes compilers - * use add with carry on assembly level - */ - - *ret = a + carry; - if (*ret < a) - carry1 = 1; - else - carry1 = 0; - - t = *ret; - *ret = t + b; - if (*ret < t) - carry2 = 1; - else - carry2 = 0; - - return carry1 + carry2; -} - -/* - * add two numbers of the same size, return overflow - * - * add a to b, place result in ret; all arrays need to be n limbs long - * return overflow from addition (0 or 1) - */ -static ossl_inline limb_t add(limb_t *ret, limb_t *a, limb_t *b, size_t n) -{ - limb_t c = 0; - ossl_ssize_t i; - - for(i = n - 1; i > -1; i--) - c = _add_limb(&ret[i], a[i], b[i], c); - - return c; -} - -/* - * return number of limbs necessary for temporary values - * when multiplying numbers n limbs large - */ -static ossl_inline size_t mul_limb_numb(size_t n) -{ - return 2 * n * 2; -} - -/* - * multiply two numbers of the same size - * - * multiply a by b, place result in ret; a and b need to be n limbs long - * ret needs to be 2*n limbs long, tmp needs to be mul_limb_numb(n) limbs - * long - */ -static void limb_mul(limb_t *ret, limb_t *a, limb_t *b, size_t n, limb_t *tmp) -{ - limb_t *r_odd, *r_even; - size_t i, j, k; - - r_odd = tmp; - r_even = &tmp[2 * n]; - - memset(ret, 0, 2 * n * sizeof(limb_t)); - - for (i = 0; i < n; i++) { - for (k = 0; k < i + n + 1; k++) { - r_even[k] = 0; - r_odd[k] = 0; - } - for (j = 0; j < n; j++) { - /* - * place results from even and odd limbs in separate arrays so that - * we don't have to calculate overflow every time we get individual - * limb multiplication result - */ - if (j % 2 == 0) - _mul_limb(&r_even[i + j], &r_even[i + j + 1], a[i], b[j]); - else - _mul_limb(&r_odd[i + j], &r_odd[i + j + 1], a[i], b[j]); - } - /* - * skip the least significant limbs when adding multiples of - * more significant limbs (they're zero anyway) - */ - add(ret, ret, r_even, n + i + 1); - add(ret, ret, r_odd, n + i + 1); - } -} - -/* modifies the value in place by performing a right shift by one bit */ -static ossl_inline void rshift1(limb_t *val, size_t n) -{ - limb_t shift_in = 0, shift_out = 0; - size_t i; - - for (i = 0; i < n; i++) { - shift_out = val[i] & 1; - val[i] = shift_in << (LIMB_BIT_SIZE - 1) | (val[i] >> 1); - shift_in = shift_out; - } -} - -/* extend the LSB of flag to all bits of limb */ -static ossl_inline limb_t mk_mask(limb_t flag) -{ - flag |= flag << 1; - flag |= flag << 2; - flag |= flag << 4; - flag |= flag << 8; - flag |= flag << 16; -#if (LIMB_BYTE_SIZE == 8) - flag |= flag << 32; -#endif - return flag; -} - -/* - * copy from either a or b to ret based on flag - * when flag == 0, then copies from b - * when flag == 1, then copies from a - */ -static ossl_inline void cselect(limb_t flag, limb_t *ret, limb_t *a, limb_t *b, size_t n) -{ - /* - * would be more efficient with non volatile mask, but then gcc - * generates code with jumps - */ - volatile limb_t mask; - size_t i; - - mask = mk_mask(flag); - for (i = 0; i < n; i++) { -#if (LIMB_BYTE_SIZE == 8) - ret[i] = constant_time_select_64(mask, a[i], b[i]); -#else - ret[i] = constant_time_select_32(mask, a[i], b[i]); -#endif - } -} - -static limb_t _sub_limb(limb_t *ret, limb_t a, limb_t b, limb_t borrow) -{ - limb_t borrow1, borrow2, t; - /* - * while it doesn't look constant-time, this is idiomatic code - * to tell compilers to use the carry bit from subtraction - */ - - *ret = a - borrow; - if (*ret > a) - borrow1 = 1; - else - borrow1 = 0; - - t = *ret; - *ret = t - b; - if (*ret > t) - borrow2 = 1; - else - borrow2 = 0; - - return borrow1 + borrow2; -} - -/* - * place the result of a - b into ret, return the borrow bit. - * All arrays need to be n limbs long - */ -static limb_t sub(limb_t *ret, limb_t *a, limb_t *b, size_t n) -{ - limb_t borrow = 0; - ossl_ssize_t i; - - for (i = n - 1; i > -1; i--) - borrow = _sub_limb(&ret[i], a[i], b[i], borrow); - - return borrow; -} - -/* return the number of limbs necessary to allocate for the mod() tmp operand */ -static ossl_inline size_t mod_limb_numb(size_t anum, size_t modnum) -{ - return (anum + modnum) * 3; -} - -/* - * calculate a % mod, place the result in ret - * size of a is defined by anum, size of ret and mod is modnum, - * size of tmp is returned by mod_limb_numb() - */ -static void mod(limb_t *ret, limb_t *a, size_t anum, limb_t *mod, - size_t modnum, limb_t *tmp) -{ - limb_t *atmp, *modtmp, *rettmp; - limb_t res; - size_t i; - - memset(tmp, 0, mod_limb_numb(anum, modnum) * LIMB_BYTE_SIZE); - - atmp = tmp; - modtmp = &tmp[anum + modnum]; - rettmp = &tmp[(anum + modnum) * 2]; - - for (i = modnum; i 0; i--, rp--) { - v = _mul_add_limb(rp, mod, modnum, rp[modnum - 1] * ni0, tmp2); - v = v + carry + rp[-1]; - carry |= (v != rp[-1]); - carry &= (v <= rp[-1]); - rp[-1] = v; - } - - /* perform the final reduction by mod... */ - carry -= sub(ret, rp, mod, modnum); - - /* ...conditionally */ - cselect(carry, ret, rp, ret, modnum); -} - -/* allocated buffer should be freed afterwards */ -static void BN_to_limb(const BIGNUM *bn, limb_t *buf, size_t limbs) -{ - int i; - int real_limbs = (BN_num_bytes(bn) + LIMB_BYTE_SIZE - 1) / LIMB_BYTE_SIZE; - limb_t *ptr = buf + (limbs - real_limbs); - - for (i = 0; i < real_limbs; i++) - ptr[i] = bn->d[real_limbs - i - 1]; -} - -#if LIMB_BYTE_SIZE == 8 -static ossl_inline uint64_t be64(uint64_t host) -{ - const union { - long one; - char little; - } is_endian = { 1 }; - - if (is_endian.little) { - uint64_t big = 0; - - big |= (host & 0xff00000000000000) >> 56; - big |= (host & 0x00ff000000000000) >> 40; - big |= (host & 0x0000ff0000000000) >> 24; - big |= (host & 0x000000ff00000000) >> 8; - big |= (host & 0x00000000ff000000) << 8; - big |= (host & 0x0000000000ff0000) << 24; - big |= (host & 0x000000000000ff00) << 40; - big |= (host & 0x00000000000000ff) << 56; - return big; - } else { - return host; - } -} - -#else -/* Not all platforms have htobe32(). */ -static ossl_inline uint32_t be32(uint32_t host) -{ - const union { - long one; - char little; - } is_endian = { 1 }; - - if (is_endian.little) { - uint32_t big = 0; - - big |= (host & 0xff000000) >> 24; - big |= (host & 0x00ff0000) >> 8; - big |= (host & 0x0000ff00) << 8; - big |= (host & 0x000000ff) << 24; - return big; - } else { - return host; - } -} -#endif - -/* - * We assume that intermediate, possible_arg2, blinding, and ctx are used - * similar to BN_BLINDING_invert_ex() arguments. - * to_mod is RSA modulus. - * buf and num is the serialization buffer and its length. - * - * Here we use classic/Montgomery multiplication and modulo. After the calculation finished - * we serialize the new structure instead of BIGNUMs taking endianness into account. - */ -int ossl_bn_rsa_do_unblind(const BIGNUM *intermediate, - const BN_BLINDING *blinding, - const BIGNUM *possible_arg2, - const BIGNUM *to_mod, BN_CTX *ctx, - unsigned char *buf, int num) -{ - limb_t *l_im = NULL, *l_mul = NULL, *l_mod = NULL; - limb_t *l_ret = NULL, *l_tmp = NULL, l_buf; - size_t l_im_count = 0, l_mul_count = 0, l_size = 0, l_mod_count = 0; - size_t l_tmp_count = 0; - int ret = 0; - size_t i; - unsigned char *tmp; - const BIGNUM *arg1 = intermediate; - const BIGNUM *arg2 = (possible_arg2 == NULL) ? blinding->Ai : possible_arg2; - - l_im_count = (BN_num_bytes(arg1) + LIMB_BYTE_SIZE - 1) / LIMB_BYTE_SIZE; - l_mul_count = (BN_num_bytes(arg2) + LIMB_BYTE_SIZE - 1) / LIMB_BYTE_SIZE; - l_mod_count = (BN_num_bytes(to_mod) + LIMB_BYTE_SIZE - 1) / LIMB_BYTE_SIZE; - - l_size = l_im_count > l_mul_count ? l_im_count : l_mul_count; - l_im = OPENSSL_zalloc(l_size * LIMB_BYTE_SIZE); - l_mul = OPENSSL_zalloc(l_size * LIMB_BYTE_SIZE); - l_mod = OPENSSL_zalloc(l_mod_count * LIMB_BYTE_SIZE); - - if ((l_im == NULL) || (l_mul == NULL) || (l_mod == NULL)) - goto err; - - BN_to_limb(arg1, l_im, l_size); - BN_to_limb(arg2, l_mul, l_size); - BN_to_limb(to_mod, l_mod, l_mod_count); - - l_ret = OPENSSL_malloc(2 * l_size * LIMB_BYTE_SIZE); - - if (blinding->m_ctx != NULL) { - l_tmp_count = mul_limb_numb(l_size) > mod_montgomery_limb_numb(l_mod_count) ? - mul_limb_numb(l_size) : mod_montgomery_limb_numb(l_mod_count); - l_tmp = OPENSSL_malloc(l_tmp_count * LIMB_BYTE_SIZE); - } else { - l_tmp_count = mul_limb_numb(l_size) > mod_limb_numb(2 * l_size, l_mod_count) ? - mul_limb_numb(l_size) : mod_limb_numb(2 * l_size, l_mod_count); - l_tmp = OPENSSL_malloc(l_tmp_count * LIMB_BYTE_SIZE); - } - - if ((l_ret == NULL) || (l_tmp == NULL)) - goto err; - - if (blinding->m_ctx != NULL) { - limb_mul(l_ret, l_im, l_mul, l_size, l_tmp); - mod_montgomery(l_ret, l_ret, 2 * l_size, l_mod, l_mod_count, - blinding->m_ctx->n0[0], l_tmp); - } else { - limb_mul(l_ret, l_im, l_mul, l_size, l_tmp); - mod(l_ret, l_ret, 2 * l_size, l_mod, l_mod_count, l_tmp); - } - - /* modulus size in bytes can be equal to num but after limbs conversion it becomes bigger */ - if (num < BN_num_bytes(to_mod)) { - BNerr(BN_F_OSSL_BN_RSA_DO_UNBLIND, ERR_R_PASSED_INVALID_ARGUMENT); - goto err; - } - - memset(buf, 0, num); - tmp = buf + num - BN_num_bytes(to_mod); - for (i = 0; i < l_mod_count; i++) { -#if LIMB_BYTE_SIZE == 8 - l_buf = be64(l_ret[i]); -#else - l_buf = be32(l_ret[i]); -#endif - if (i == 0) { - int delta = LIMB_BYTE_SIZE - ((l_mod_count * LIMB_BYTE_SIZE) - num); - - memcpy(tmp, ((char *)&l_buf) + LIMB_BYTE_SIZE - delta, delta); - tmp += delta; - } else { - memcpy(tmp, &l_buf, LIMB_BYTE_SIZE); - tmp += LIMB_BYTE_SIZE; - } - } - ret = num; - - err: - OPENSSL_free(l_im); - OPENSSL_free(l_mul); - OPENSSL_free(l_mod); - OPENSSL_free(l_tmp); - OPENSSL_free(l_ret); - - return ret; -} diff --git a/src/openssl/openssl-1.1.1t/ACKNOWLEDGEMENTS b/src/openssl/openssl-1.1.1w/ACKNOWLEDGEMENTS similarity index 100% rename from src/openssl/openssl-1.1.1t/ACKNOWLEDGEMENTS rename to src/openssl/openssl-1.1.1w/ACKNOWLEDGEMENTS diff --git a/src/openssl/openssl-1.1.1t/AUTHORS b/src/openssl/openssl-1.1.1w/AUTHORS similarity index 100% rename from src/openssl/openssl-1.1.1t/AUTHORS rename to src/openssl/openssl-1.1.1w/AUTHORS diff --git a/src/openssl/openssl-1.1.1t/CHANGES b/src/openssl/openssl-1.1.1w/CHANGES similarity index 99% rename from src/openssl/openssl-1.1.1t/CHANGES rename to src/openssl/openssl-1.1.1w/CHANGES index 1e2d651b7..c4409489e 100644 --- a/src/openssl/openssl-1.1.1t/CHANGES +++ b/src/openssl/openssl-1.1.1w/CHANGES @@ -7,6 +7,123 @@ https://github.com/openssl/openssl/commits/ and pick the appropriate release branch. + Changes between 1.1.1v and 1.1.1w [11 Sep 2023] + + *) Fix POLY1305 MAC implementation corrupting XMM registers on Windows. + + The POLY1305 MAC (message authentication code) implementation in OpenSSL + does not save the contents of non-volatile XMM registers on Windows 64 + platform when calculating the MAC of data larger than 64 bytes. Before + returning to the caller all the XMM registers are set to zero rather than + restoring their previous content. The vulnerable code is used only on newer + x86_64 processors supporting the AVX512-IFMA instructions. + + The consequences of this kind of internal application state corruption can + be various - from no consequences, if the calling application does not + depend on the contents of non-volatile XMM registers at all, to the worst + consequences, where the attacker could get complete control of the + application process. However given the contents of the registers are just + zeroized so the attacker cannot put arbitrary values inside, the most likely + consequence, if any, would be an incorrect result of some application + dependent calculations or a crash leading to a denial of service. + + (CVE-2023-4807) + [Bernd Edlinger] + + + Changes between 1.1.1u and 1.1.1v [1 Aug 2023] + + *) Fix excessive time spent checking DH q parameter value. + + The function DH_check() performs various checks on DH parameters. After + fixing CVE-2023-3446 it was discovered that a large q parameter value can + also trigger an overly long computation during some of these checks. + A correct q value, if present, cannot be larger than the modulus p + parameter, thus it is unnecessary to perform these checks if q is larger + than p. + + If DH_check() is called with such q parameter value, + DH_CHECK_INVALID_Q_VALUE return flag is set and the computationally + intensive checks are skipped. + + (CVE-2023-3817) + [Tomáš Mráz] + + *) Fix DH_check() excessive time with over sized modulus + + The function DH_check() performs various checks on DH parameters. One of + those checks confirms that the modulus ("p" parameter) is not too large. + Trying to use a very large modulus is slow and OpenSSL will not normally use + a modulus which is over 10,000 bits in length. + + However the DH_check() function checks numerous aspects of the key or + parameters that have been supplied. Some of those checks use the supplied + modulus value even if it has already been found to be too large. + + A new limit has been added to DH_check of 32,768 bits. Supplying a + key/parameters with a modulus over this size will simply cause DH_check() + to fail. + (CVE-2023-3446) + [Matt Caswell] + + Changes between 1.1.1t and 1.1.1u [30 May 2023] + + *) Mitigate for the time it takes for `OBJ_obj2txt` to translate gigantic + OBJECT IDENTIFIER sub-identifiers to canonical numeric text form. + + OBJ_obj2txt() would translate any size OBJECT IDENTIFIER to canonical + numeric text form. For gigantic sub-identifiers, this would take a very + long time, the time complexity being O(n^2) where n is the size of that + sub-identifier. (CVE-2023-2650) + + To mitigitate this, `OBJ_obj2txt()` will only translate an OBJECT + IDENTIFIER to canonical numeric text form if the size of that OBJECT + IDENTIFIER is 586 bytes or less, and fail otherwise. + + The basis for this restriction is RFC 2578 (STD 58), section 3.5. OBJECT + IDENTIFIER values, which stipulates that OBJECT IDENTIFIERS may have at + most 128 sub-identifiers, and that the maximum value that each sub- + identifier may have is 2^32-1 (4294967295 decimal). + + For each byte of every sub-identifier, only the 7 lower bits are part of + the value, so the maximum amount of bytes that an OBJECT IDENTIFIER with + these restrictions may occupy is 32 * 128 / 7, which is approximately 586 + bytes. + + Ref: https://datatracker.ietf.org/doc/html/rfc2578#section-3.5 + + [Richard Levitte] + + *) Reworked the Fix for the Timing Oracle in RSA Decryption (CVE-2022-4304). + The previous fix for this timing side channel turned out to cause + a severe 2-3x performance regression in the typical use case + compared to 1.1.1s. The new fix uses existing constant time + code paths, and restores the previous performance level while + fully eliminating all existing timing side channels. + The fix was developed by Bernd Edlinger with testing support + by Hubert Kario. + [Bernd Edlinger] + + *) Corrected documentation of X509_VERIFY_PARAM_add0_policy() to mention + that it does not enable policy checking. Thanks to + David Benjamin for discovering this issue. (CVE-2023-0466) + [Tomas Mraz] + + *) Fixed an issue where invalid certificate policies in leaf certificates are + silently ignored by OpenSSL and other certificate policy checks are skipped + for that certificate. A malicious CA could use this to deliberately assert + invalid certificate policies in order to circumvent policy checking on the + certificate altogether. (CVE-2023-0465) + [Matt Caswell] + + *) Limited the number of nodes created in a policy tree to mitigate + against CVE-2023-0464. The default limit is set to 1000 nodes, which + should be sufficient for most installations. If required, the limit + can be adjusted by setting the OPENSSL_POLICY_TREE_NODES_MAX build + time define to a desired maximum number of nodes or zero to allow + unlimited growth. (CVE-2023-0464) + [Paul Dale] + Changes between 1.1.1s and 1.1.1t [7 Feb 2023] *) Fixed X.400 address type confusion in X.509 GeneralName. diff --git a/src/openssl/openssl-1.1.1t/CONTRIBUTING b/src/openssl/openssl-1.1.1w/CONTRIBUTING similarity index 100% rename from src/openssl/openssl-1.1.1t/CONTRIBUTING rename to src/openssl/openssl-1.1.1w/CONTRIBUTING diff --git a/src/openssl/openssl-1.1.1t/Configurations/00-base-templates.conf b/src/openssl/openssl-1.1.1w/Configurations/00-base-templates.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/00-base-templates.conf rename to src/openssl/openssl-1.1.1w/Configurations/00-base-templates.conf diff --git a/src/openssl/openssl-1.1.1t/Configurations/10-main.conf b/src/openssl/openssl-1.1.1w/Configurations/10-main.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/10-main.conf rename to src/openssl/openssl-1.1.1w/Configurations/10-main.conf diff --git a/src/openssl/openssl-1.1.1t/Configurations/15-android.conf b/src/openssl/openssl-1.1.1w/Configurations/15-android.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/15-android.conf rename to src/openssl/openssl-1.1.1w/Configurations/15-android.conf diff --git a/src/openssl/openssl-1.1.1t/Configurations/15-ios.conf b/src/openssl/openssl-1.1.1w/Configurations/15-ios.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/15-ios.conf rename to src/openssl/openssl-1.1.1w/Configurations/15-ios.conf diff --git a/src/openssl/openssl-1.1.1t/Configurations/50-djgpp.conf b/src/openssl/openssl-1.1.1w/Configurations/50-djgpp.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/50-djgpp.conf rename to src/openssl/openssl-1.1.1w/Configurations/50-djgpp.conf diff --git a/src/openssl/openssl-1.1.1t/Configurations/50-haiku.conf b/src/openssl/openssl-1.1.1w/Configurations/50-haiku.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/50-haiku.conf rename to src/openssl/openssl-1.1.1w/Configurations/50-haiku.conf diff --git a/src/openssl/openssl-1.1.1t/Configurations/50-masm.conf b/src/openssl/openssl-1.1.1w/Configurations/50-masm.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/50-masm.conf rename to src/openssl/openssl-1.1.1w/Configurations/50-masm.conf diff --git a/src/openssl/openssl-1.1.1t/Configurations/50-win-onecore.conf b/src/openssl/openssl-1.1.1w/Configurations/50-win-onecore.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/50-win-onecore.conf rename to src/openssl/openssl-1.1.1w/Configurations/50-win-onecore.conf diff --git a/src/openssl/openssl-1.1.1t/Configurations/INTERNALS.Configure b/src/openssl/openssl-1.1.1w/Configurations/INTERNALS.Configure similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/INTERNALS.Configure rename to src/openssl/openssl-1.1.1w/Configurations/INTERNALS.Configure diff --git a/src/openssl/openssl-1.1.1t/Configurations/README b/src/openssl/openssl-1.1.1w/Configurations/README similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/README rename to src/openssl/openssl-1.1.1w/Configurations/README diff --git a/src/openssl/openssl-1.1.1t/Configurations/README.design b/src/openssl/openssl-1.1.1w/Configurations/README.design similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/README.design rename to src/openssl/openssl-1.1.1w/Configurations/README.design diff --git a/src/openssl/openssl-1.1.1t/Configurations/common.tmpl b/src/openssl/openssl-1.1.1w/Configurations/common.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/common.tmpl rename to src/openssl/openssl-1.1.1w/Configurations/common.tmpl diff --git a/src/openssl/openssl-1.1.1t/Configurations/common0.tmpl b/src/openssl/openssl-1.1.1w/Configurations/common0.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/common0.tmpl rename to src/openssl/openssl-1.1.1w/Configurations/common0.tmpl diff --git a/src/openssl/openssl-1.1.1t/Configurations/descrip.mms.tmpl b/src/openssl/openssl-1.1.1w/Configurations/descrip.mms.tmpl similarity index 99% rename from src/openssl/openssl-1.1.1t/Configurations/descrip.mms.tmpl rename to src/openssl/openssl-1.1.1w/Configurations/descrip.mms.tmpl index e1aecfafb..1685941e8 100644 --- a/src/openssl/openssl-1.1.1t/Configurations/descrip.mms.tmpl +++ b/src/openssl/openssl-1.1.1w/Configurations/descrip.mms.tmpl @@ -13,6 +13,8 @@ our $sover_dirname = sprintf "%02d%02d", split(/\./, $config{shlib_version_number}); our $osslver = sprintf "%02d%02d", split(/\./, $config{version}); + our $shlibvariant = $target{shlib_variant} || ""; + our $sourcedir = $config{sourcedir}; our $builddir = $config{builddir}; sub sourcefile { @@ -47,13 +49,13 @@ map { (my $x = $_) =~ s/\.a$//; $x } @{$unified_info{libraries}}; our @shlibs = - map { $unified_info{sharednames}->{$_} || () } + map { $unified_info{sharednames}->{$_}.$shlibvariant || () } grep(!/\.a$/, @{$unified_info{libraries}}); our @install_libs = map { (my $x = $_) =~ s/\.a$//; $x } @{$unified_info{install}->{libraries}}; our @install_shlibs = - map { $unified_info{sharednames}->{$_} || () } + map { $unified_info{sharednames}->{$_}.$shlibvariant || () } grep(!/\.a$/, @{$unified_info{install}->{libraries}}); # This is a horrible hack, but is needed because recursive inclusion of files @@ -695,7 +697,7 @@ reconfigure reconf : } return map { $_ =~ /\.a$/ ? $`.".OLB" - : $unified_info{sharednames}->{$_}.".EXE" } @_; + : $unified_info{sharednames}->{$_}.$shlibvariant.".EXE" } @_; } # Helper function to deal with inclusion directory specs. @@ -912,7 +914,7 @@ EOF sub libobj2shlib { my %args = @_; my $lib = $args{lib}; - my $shlib = $args{shlib}; + my $shlib = $args{shlib}.$shlibvariant; my $libd = dirname($lib); my $libn = basename($lib); my @objs = map { (my $x = $_) =~ s|\.o$|.OBJ|; $x } diff --git a/src/openssl/openssl-1.1.1t/Configurations/shared-info.pl b/src/openssl/openssl-1.1.1w/Configurations/shared-info.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/shared-info.pl rename to src/openssl/openssl-1.1.1w/Configurations/shared-info.pl diff --git a/src/openssl/openssl-1.1.1t/Configurations/unix-Makefile.tmpl b/src/openssl/openssl-1.1.1w/Configurations/unix-Makefile.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/unix-Makefile.tmpl rename to src/openssl/openssl-1.1.1w/Configurations/unix-Makefile.tmpl diff --git a/src/openssl/openssl-1.1.1t/Configurations/unix-checker.pm b/src/openssl/openssl-1.1.1w/Configurations/unix-checker.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/unix-checker.pm rename to src/openssl/openssl-1.1.1w/Configurations/unix-checker.pm diff --git a/src/openssl/openssl-1.1.1t/Configurations/windows-checker.pm b/src/openssl/openssl-1.1.1w/Configurations/windows-checker.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/Configurations/windows-checker.pm rename to src/openssl/openssl-1.1.1w/Configurations/windows-checker.pm diff --git a/src/openssl/openssl-1.1.1t/Configurations/windows-makefile.tmpl b/src/openssl/openssl-1.1.1w/Configurations/windows-makefile.tmpl similarity index 99% rename from src/openssl/openssl-1.1.1t/Configurations/windows-makefile.tmpl rename to src/openssl/openssl-1.1.1w/Configurations/windows-makefile.tmpl index 13716e064..f7a665299 100644 --- a/src/openssl/openssl-1.1.1t/Configurations/windows-makefile.tmpl +++ b/src/openssl/openssl-1.1.1w/Configurations/windows-makefile.tmpl @@ -9,6 +9,7 @@ our $exeext = $target{exe_extension} || ".exe"; our $libext = $target{lib_extension} || ".lib"; our $shlibext = $target{shared_extension} || ".dll"; + our $shlibvariant = $target{shlib_variant} || ""; our $shlibextimport = $target{shared_import_extension} || ".lib"; our $dsoext = $target{dso_extension} || ".dll"; @@ -35,7 +36,7 @@ my $lib = shift; return () if $disabled{shared} || $lib =~ /\.a$/; return () unless defined $unified_info{sharednames}->{$lib}; - return $unified_info{sharednames}->{$lib} . $shlibext; + return $unified_info{sharednames}->{$lib} . $shlibvariant . $shlibext; } sub lib { diff --git a/src/openssl/openssl-1.1.1t/Configure b/src/openssl/openssl-1.1.1w/Configure similarity index 99% rename from src/openssl/openssl-1.1.1t/Configure rename to src/openssl/openssl-1.1.1w/Configure index 6cb1a84f4..78cc15d18 100755 --- a/src/openssl/openssl-1.1.1t/Configure +++ b/src/openssl/openssl-1.1.1w/Configure @@ -1244,7 +1244,7 @@ if ($target =~ /^mingw/ && `$config{CC} --target-help 2>&1` =~ m/-mno-cygwin/m) } if ($target =~ /linux.*-mips/ && !$disabled{asm} - && !grep { $_ !~ /-m(ips|arch=)/ } (@{$config{CFLAGS}})) { + && !grep { $_ =~ /-m(ips|arch=)/ } (@{$config{CFLAGS}})) { # minimally required architecture flags for assembly modules my $value; $value = '-mips2' if ($target =~ /mips32/); diff --git a/src/openssl/openssl-1.1.1t/FAQ b/src/openssl/openssl-1.1.1w/FAQ similarity index 100% rename from src/openssl/openssl-1.1.1t/FAQ rename to src/openssl/openssl-1.1.1w/FAQ diff --git a/src/openssl/openssl-1.1.1t/INSTALL b/src/openssl/openssl-1.1.1w/INSTALL similarity index 100% rename from src/openssl/openssl-1.1.1t/INSTALL rename to src/openssl/openssl-1.1.1w/INSTALL diff --git a/src/openssl/openssl-1.1.1t/LICENSE b/src/openssl/openssl-1.1.1w/LICENSE similarity index 100% rename from src/openssl/openssl-1.1.1t/LICENSE rename to src/openssl/openssl-1.1.1w/LICENSE diff --git a/src/openssl/openssl-1.1.1t/NEWS b/src/openssl/openssl-1.1.1w/NEWS similarity index 98% rename from src/openssl/openssl-1.1.1t/NEWS rename to src/openssl/openssl-1.1.1w/NEWS index 2724fc4d8..1b849cdf7 100644 --- a/src/openssl/openssl-1.1.1t/NEWS +++ b/src/openssl/openssl-1.1.1w/NEWS @@ -5,6 +5,25 @@ This file gives a brief overview of the major changes between each OpenSSL release. For more details please read the CHANGES file. + Major changes between OpenSSL 1.1.1v and OpenSSL 1.1.1w [11 Sep 2023] + + o Fix POLY1305 MAC implementation corrupting XMM registers on Windows + (CVE-2023-4807) + + Major changes between OpenSSL 1.1.1u and OpenSSL 1.1.1v [1 Aug 2023] + + o Fix excessive time spent checking DH q parameter value (CVE-2023-3817) + o Fix DH_check() excessive time with over sized modulus (CVE-2023-3446) + + Major changes between OpenSSL 1.1.1t and OpenSSL 1.1.1u [30 May 2023] + + o Mitigate for very slow `OBJ_obj2txt()` performance with gigantic + OBJECT IDENTIFIER sub-identities. (CVE-2023-2650) + o Fixed documentation of X509_VERIFY_PARAM_add0_policy() (CVE-2023-0466) + o Fixed handling of invalid certificate policies in leaf certificates + (CVE-2023-0465) + o Limited the number of nodes created in a policy tree ([CVE-2023-0464]) + Major changes between OpenSSL 1.1.1s and OpenSSL 1.1.1t [7 Feb 2023] o Fixed X.400 address type confusion in X.509 GeneralName (CVE-2023-0286) diff --git a/src/openssl/openssl-1.1.1t/NOTES.ANDROID b/src/openssl/openssl-1.1.1w/NOTES.ANDROID similarity index 100% rename from src/openssl/openssl-1.1.1t/NOTES.ANDROID rename to src/openssl/openssl-1.1.1w/NOTES.ANDROID diff --git a/src/openssl/openssl-1.1.1t/NOTES.DJGPP b/src/openssl/openssl-1.1.1w/NOTES.DJGPP similarity index 100% rename from src/openssl/openssl-1.1.1t/NOTES.DJGPP rename to src/openssl/openssl-1.1.1w/NOTES.DJGPP diff --git a/src/openssl/openssl-1.1.1t/NOTES.PERL b/src/openssl/openssl-1.1.1w/NOTES.PERL similarity index 100% rename from src/openssl/openssl-1.1.1t/NOTES.PERL rename to src/openssl/openssl-1.1.1w/NOTES.PERL diff --git a/src/openssl/openssl-1.1.1t/NOTES.UNIX b/src/openssl/openssl-1.1.1w/NOTES.UNIX similarity index 100% rename from src/openssl/openssl-1.1.1t/NOTES.UNIX rename to src/openssl/openssl-1.1.1w/NOTES.UNIX diff --git a/src/openssl/openssl-1.1.1t/NOTES.VMS b/src/openssl/openssl-1.1.1w/NOTES.VMS similarity index 100% rename from src/openssl/openssl-1.1.1t/NOTES.VMS rename to src/openssl/openssl-1.1.1w/NOTES.VMS diff --git a/src/openssl/openssl-1.1.1t/NOTES.WIN b/src/openssl/openssl-1.1.1w/NOTES.WIN similarity index 100% rename from src/openssl/openssl-1.1.1t/NOTES.WIN rename to src/openssl/openssl-1.1.1w/NOTES.WIN diff --git a/src/openssl/openssl-1.1.1t/README b/src/openssl/openssl-1.1.1w/README similarity index 97% rename from src/openssl/openssl-1.1.1t/README rename to src/openssl/openssl-1.1.1w/README index b2f806be3..e924e1529 100644 --- a/src/openssl/openssl-1.1.1t/README +++ b/src/openssl/openssl-1.1.1w/README @@ -1,7 +1,7 @@ - OpenSSL 1.1.1t 7 Feb 2023 + OpenSSL 1.1.1w 11 Sep 2023 - Copyright (c) 1998-2022 The OpenSSL Project + Copyright (c) 1998-2023 The OpenSSL Project Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson All rights reserved. diff --git a/src/openssl/openssl-1.1.1t/README.ENGINE b/src/openssl/openssl-1.1.1w/README.ENGINE similarity index 100% rename from src/openssl/openssl-1.1.1t/README.ENGINE rename to src/openssl/openssl-1.1.1w/README.ENGINE diff --git a/src/openssl/openssl-1.1.1t/README.FIPS b/src/openssl/openssl-1.1.1w/README.FIPS similarity index 100% rename from src/openssl/openssl-1.1.1t/README.FIPS rename to src/openssl/openssl-1.1.1w/README.FIPS diff --git a/src/openssl/openssl-1.1.1t/VMS/VMSify-conf.pl b/src/openssl/openssl-1.1.1w/VMS/VMSify-conf.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/VMS/VMSify-conf.pl rename to src/openssl/openssl-1.1.1w/VMS/VMSify-conf.pl diff --git a/src/openssl/openssl-1.1.1t/VMS/engine.opt b/src/openssl/openssl-1.1.1w/VMS/engine.opt similarity index 100% rename from src/openssl/openssl-1.1.1t/VMS/engine.opt rename to src/openssl/openssl-1.1.1w/VMS/engine.opt diff --git a/src/openssl/openssl-1.1.1t/VMS/msg_install.com b/src/openssl/openssl-1.1.1w/VMS/msg_install.com similarity index 100% rename from src/openssl/openssl-1.1.1t/VMS/msg_install.com rename to src/openssl/openssl-1.1.1w/VMS/msg_install.com diff --git a/src/openssl/openssl-1.1.1t/VMS/msg_staging.com b/src/openssl/openssl-1.1.1w/VMS/msg_staging.com similarity index 100% rename from src/openssl/openssl-1.1.1t/VMS/msg_staging.com rename to src/openssl/openssl-1.1.1w/VMS/msg_staging.com diff --git a/src/openssl/openssl-1.1.1t/VMS/openssl_ivp.com.in b/src/openssl/openssl-1.1.1w/VMS/openssl_ivp.com.in similarity index 100% rename from src/openssl/openssl-1.1.1t/VMS/openssl_ivp.com.in rename to src/openssl/openssl-1.1.1w/VMS/openssl_ivp.com.in diff --git a/src/openssl/openssl-1.1.1t/VMS/openssl_shutdown.com.in b/src/openssl/openssl-1.1.1w/VMS/openssl_shutdown.com.in similarity index 100% rename from src/openssl/openssl-1.1.1t/VMS/openssl_shutdown.com.in rename to src/openssl/openssl-1.1.1w/VMS/openssl_shutdown.com.in diff --git a/src/openssl/openssl-1.1.1t/VMS/openssl_startup.com.in b/src/openssl/openssl-1.1.1w/VMS/openssl_startup.com.in similarity index 100% rename from src/openssl/openssl-1.1.1t/VMS/openssl_startup.com.in rename to src/openssl/openssl-1.1.1w/VMS/openssl_startup.com.in diff --git a/src/openssl/openssl-1.1.1t/VMS/openssl_utils.com.in b/src/openssl/openssl-1.1.1w/VMS/openssl_utils.com.in similarity index 100% rename from src/openssl/openssl-1.1.1t/VMS/openssl_utils.com.in rename to src/openssl/openssl-1.1.1w/VMS/openssl_utils.com.in diff --git a/src/openssl/openssl-1.1.1t/VMS/test-includes.com b/src/openssl/openssl-1.1.1w/VMS/test-includes.com similarity index 100% rename from src/openssl/openssl-1.1.1t/VMS/test-includes.com rename to src/openssl/openssl-1.1.1w/VMS/test-includes.com diff --git a/src/openssl/openssl-1.1.1t/VMS/translatesyms.pl b/src/openssl/openssl-1.1.1w/VMS/translatesyms.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/VMS/translatesyms.pl rename to src/openssl/openssl-1.1.1w/VMS/translatesyms.pl diff --git a/src/openssl/openssl-1.1.1t/apps/CA.pl.in b/src/openssl/openssl-1.1.1w/apps/CA.pl.in similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/CA.pl.in rename to src/openssl/openssl-1.1.1w/apps/CA.pl.in diff --git a/src/openssl/openssl-1.1.1t/apps/app_rand.c b/src/openssl/openssl-1.1.1w/apps/app_rand.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/app_rand.c rename to src/openssl/openssl-1.1.1w/apps/app_rand.c diff --git a/src/openssl/openssl-1.1.1t/apps/apps.c b/src/openssl/openssl-1.1.1w/apps/apps.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/apps.c rename to src/openssl/openssl-1.1.1w/apps/apps.c diff --git a/src/openssl/openssl-1.1.1t/apps/apps.h b/src/openssl/openssl-1.1.1w/apps/apps.h similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/apps.h rename to src/openssl/openssl-1.1.1w/apps/apps.h diff --git a/src/openssl/openssl-1.1.1t/apps/asn1pars.c b/src/openssl/openssl-1.1.1w/apps/asn1pars.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/asn1pars.c rename to src/openssl/openssl-1.1.1w/apps/asn1pars.c diff --git a/src/openssl/openssl-1.1.1t/apps/bf_prefix.c b/src/openssl/openssl-1.1.1w/apps/bf_prefix.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/bf_prefix.c rename to src/openssl/openssl-1.1.1w/apps/bf_prefix.c diff --git a/src/openssl/openssl-1.1.1t/apps/build.info b/src/openssl/openssl-1.1.1w/apps/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/build.info rename to src/openssl/openssl-1.1.1w/apps/build.info diff --git a/src/openssl/openssl-1.1.1t/apps/ca-cert.srl b/src/openssl/openssl-1.1.1w/apps/ca-cert.srl similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/ca-cert.srl rename to src/openssl/openssl-1.1.1w/apps/ca-cert.srl diff --git a/src/openssl/openssl-1.1.1t/apps/ca-key.pem b/src/openssl/openssl-1.1.1w/apps/ca-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/ca-key.pem rename to src/openssl/openssl-1.1.1w/apps/ca-key.pem diff --git a/src/openssl/openssl-1.1.1t/apps/ca-req.pem b/src/openssl/openssl-1.1.1w/apps/ca-req.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/ca-req.pem rename to src/openssl/openssl-1.1.1w/apps/ca-req.pem diff --git a/src/openssl/openssl-1.1.1t/apps/ca.c b/src/openssl/openssl-1.1.1w/apps/ca.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/ca.c rename to src/openssl/openssl-1.1.1w/apps/ca.c diff --git a/src/openssl/openssl-1.1.1t/apps/cert.pem b/src/openssl/openssl-1.1.1w/apps/cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/cert.pem rename to src/openssl/openssl-1.1.1w/apps/cert.pem diff --git a/src/openssl/openssl-1.1.1t/apps/ciphers.c b/src/openssl/openssl-1.1.1w/apps/ciphers.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/ciphers.c rename to src/openssl/openssl-1.1.1w/apps/ciphers.c diff --git a/src/openssl/openssl-1.1.1t/apps/client.pem b/src/openssl/openssl-1.1.1w/apps/client.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/client.pem rename to src/openssl/openssl-1.1.1w/apps/client.pem diff --git a/src/openssl/openssl-1.1.1t/apps/cms.c b/src/openssl/openssl-1.1.1w/apps/cms.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/cms.c rename to src/openssl/openssl-1.1.1w/apps/cms.c diff --git a/src/openssl/openssl-1.1.1t/apps/crl.c b/src/openssl/openssl-1.1.1w/apps/crl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/crl.c rename to src/openssl/openssl-1.1.1w/apps/crl.c diff --git a/src/openssl/openssl-1.1.1t/apps/crl2p7.c b/src/openssl/openssl-1.1.1w/apps/crl2p7.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/crl2p7.c rename to src/openssl/openssl-1.1.1w/apps/crl2p7.c diff --git a/src/openssl/openssl-1.1.1t/apps/ct_log_list.cnf b/src/openssl/openssl-1.1.1w/apps/ct_log_list.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/ct_log_list.cnf rename to src/openssl/openssl-1.1.1w/apps/ct_log_list.cnf diff --git a/src/openssl/openssl-1.1.1t/apps/demoSRP/srp_verifier.txt b/src/openssl/openssl-1.1.1w/apps/demoSRP/srp_verifier.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/demoSRP/srp_verifier.txt rename to src/openssl/openssl-1.1.1w/apps/demoSRP/srp_verifier.txt diff --git a/src/openssl/openssl-1.1.1t/apps/demoSRP/srp_verifier.txt.attr b/src/openssl/openssl-1.1.1w/apps/demoSRP/srp_verifier.txt.attr similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/demoSRP/srp_verifier.txt.attr rename to src/openssl/openssl-1.1.1w/apps/demoSRP/srp_verifier.txt.attr diff --git a/src/openssl/openssl-1.1.1t/apps/dgst.c b/src/openssl/openssl-1.1.1w/apps/dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/dgst.c rename to src/openssl/openssl-1.1.1w/apps/dgst.c diff --git a/src/openssl/openssl-1.1.1t/apps/dh1024.pem b/src/openssl/openssl-1.1.1w/apps/dh1024.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/dh1024.pem rename to src/openssl/openssl-1.1.1w/apps/dh1024.pem diff --git a/src/openssl/openssl-1.1.1t/apps/dh2048.pem b/src/openssl/openssl-1.1.1w/apps/dh2048.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/dh2048.pem rename to src/openssl/openssl-1.1.1w/apps/dh2048.pem diff --git a/src/openssl/openssl-1.1.1t/apps/dh4096.pem b/src/openssl/openssl-1.1.1w/apps/dh4096.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/dh4096.pem rename to src/openssl/openssl-1.1.1w/apps/dh4096.pem diff --git a/src/openssl/openssl-1.1.1t/apps/dhparam.c b/src/openssl/openssl-1.1.1w/apps/dhparam.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/dhparam.c rename to src/openssl/openssl-1.1.1w/apps/dhparam.c diff --git a/src/openssl/openssl-1.1.1t/apps/dsa-ca.pem b/src/openssl/openssl-1.1.1w/apps/dsa-ca.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/dsa-ca.pem rename to src/openssl/openssl-1.1.1w/apps/dsa-ca.pem diff --git a/src/openssl/openssl-1.1.1t/apps/dsa-pca.pem b/src/openssl/openssl-1.1.1w/apps/dsa-pca.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/dsa-pca.pem rename to src/openssl/openssl-1.1.1w/apps/dsa-pca.pem diff --git a/src/openssl/openssl-1.1.1t/apps/dsa.c b/src/openssl/openssl-1.1.1w/apps/dsa.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/dsa.c rename to src/openssl/openssl-1.1.1w/apps/dsa.c diff --git a/src/openssl/openssl-1.1.1t/apps/dsa1024.pem b/src/openssl/openssl-1.1.1w/apps/dsa1024.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/dsa1024.pem rename to src/openssl/openssl-1.1.1w/apps/dsa1024.pem diff --git a/src/openssl/openssl-1.1.1t/apps/dsa512.pem b/src/openssl/openssl-1.1.1w/apps/dsa512.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/dsa512.pem rename to src/openssl/openssl-1.1.1w/apps/dsa512.pem diff --git a/src/openssl/openssl-1.1.1t/apps/dsap.pem b/src/openssl/openssl-1.1.1w/apps/dsap.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/dsap.pem rename to src/openssl/openssl-1.1.1w/apps/dsap.pem diff --git a/src/openssl/openssl-1.1.1t/apps/dsaparam.c b/src/openssl/openssl-1.1.1w/apps/dsaparam.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/dsaparam.c rename to src/openssl/openssl-1.1.1w/apps/dsaparam.c diff --git a/src/openssl/openssl-1.1.1t/apps/ec.c b/src/openssl/openssl-1.1.1w/apps/ec.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/ec.c rename to src/openssl/openssl-1.1.1w/apps/ec.c diff --git a/src/openssl/openssl-1.1.1t/apps/ecparam.c b/src/openssl/openssl-1.1.1w/apps/ecparam.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/ecparam.c rename to src/openssl/openssl-1.1.1w/apps/ecparam.c diff --git a/src/openssl/openssl-1.1.1t/apps/enc.c b/src/openssl/openssl-1.1.1w/apps/enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/enc.c rename to src/openssl/openssl-1.1.1w/apps/enc.c diff --git a/src/openssl/openssl-1.1.1t/apps/engine.c b/src/openssl/openssl-1.1.1w/apps/engine.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/engine.c rename to src/openssl/openssl-1.1.1w/apps/engine.c diff --git a/src/openssl/openssl-1.1.1t/apps/errstr.c b/src/openssl/openssl-1.1.1w/apps/errstr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/errstr.c rename to src/openssl/openssl-1.1.1w/apps/errstr.c diff --git a/src/openssl/openssl-1.1.1t/apps/gendsa.c b/src/openssl/openssl-1.1.1w/apps/gendsa.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/gendsa.c rename to src/openssl/openssl-1.1.1w/apps/gendsa.c diff --git a/src/openssl/openssl-1.1.1t/apps/genpkey.c b/src/openssl/openssl-1.1.1w/apps/genpkey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/genpkey.c rename to src/openssl/openssl-1.1.1w/apps/genpkey.c diff --git a/src/openssl/openssl-1.1.1t/apps/genrsa.c b/src/openssl/openssl-1.1.1w/apps/genrsa.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/genrsa.c rename to src/openssl/openssl-1.1.1w/apps/genrsa.c diff --git a/src/openssl/openssl-1.1.1t/apps/nseq.c b/src/openssl/openssl-1.1.1w/apps/nseq.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/nseq.c rename to src/openssl/openssl-1.1.1w/apps/nseq.c diff --git a/src/openssl/openssl-1.1.1t/apps/ocsp.c b/src/openssl/openssl-1.1.1w/apps/ocsp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/ocsp.c rename to src/openssl/openssl-1.1.1w/apps/ocsp.c diff --git a/src/openssl/openssl-1.1.1t/apps/openssl-vms.cnf b/src/openssl/openssl-1.1.1w/apps/openssl-vms.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/openssl-vms.cnf rename to src/openssl/openssl-1.1.1w/apps/openssl-vms.cnf diff --git a/src/openssl/openssl-1.1.1t/apps/openssl.c b/src/openssl/openssl-1.1.1w/apps/openssl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/openssl.c rename to src/openssl/openssl-1.1.1w/apps/openssl.c diff --git a/src/openssl/openssl-1.1.1t/apps/openssl.cnf b/src/openssl/openssl-1.1.1w/apps/openssl.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/openssl.cnf rename to src/openssl/openssl-1.1.1w/apps/openssl.cnf diff --git a/src/openssl/openssl-1.1.1t/apps/opt.c b/src/openssl/openssl-1.1.1w/apps/opt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/opt.c rename to src/openssl/openssl-1.1.1w/apps/opt.c diff --git a/src/openssl/openssl-1.1.1t/apps/passwd.c b/src/openssl/openssl-1.1.1w/apps/passwd.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/passwd.c rename to src/openssl/openssl-1.1.1w/apps/passwd.c diff --git a/src/openssl/openssl-1.1.1t/apps/pca-cert.srl b/src/openssl/openssl-1.1.1w/apps/pca-cert.srl similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/pca-cert.srl rename to src/openssl/openssl-1.1.1w/apps/pca-cert.srl diff --git a/src/openssl/openssl-1.1.1t/apps/pca-key.pem b/src/openssl/openssl-1.1.1w/apps/pca-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/pca-key.pem rename to src/openssl/openssl-1.1.1w/apps/pca-key.pem diff --git a/src/openssl/openssl-1.1.1t/apps/pca-req.pem b/src/openssl/openssl-1.1.1w/apps/pca-req.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/pca-req.pem rename to src/openssl/openssl-1.1.1w/apps/pca-req.pem diff --git a/src/openssl/openssl-1.1.1t/apps/pkcs12.c b/src/openssl/openssl-1.1.1w/apps/pkcs12.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/pkcs12.c rename to src/openssl/openssl-1.1.1w/apps/pkcs12.c diff --git a/src/openssl/openssl-1.1.1t/apps/pkcs7.c b/src/openssl/openssl-1.1.1w/apps/pkcs7.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/pkcs7.c rename to src/openssl/openssl-1.1.1w/apps/pkcs7.c diff --git a/src/openssl/openssl-1.1.1t/apps/pkcs8.c b/src/openssl/openssl-1.1.1w/apps/pkcs8.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/pkcs8.c rename to src/openssl/openssl-1.1.1w/apps/pkcs8.c diff --git a/src/openssl/openssl-1.1.1t/apps/pkey.c b/src/openssl/openssl-1.1.1w/apps/pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/pkey.c rename to src/openssl/openssl-1.1.1w/apps/pkey.c diff --git a/src/openssl/openssl-1.1.1t/apps/pkeyparam.c b/src/openssl/openssl-1.1.1w/apps/pkeyparam.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/pkeyparam.c rename to src/openssl/openssl-1.1.1w/apps/pkeyparam.c diff --git a/src/openssl/openssl-1.1.1t/apps/pkeyutl.c b/src/openssl/openssl-1.1.1w/apps/pkeyutl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/pkeyutl.c rename to src/openssl/openssl-1.1.1w/apps/pkeyutl.c diff --git a/src/openssl/openssl-1.1.1t/apps/prime.c b/src/openssl/openssl-1.1.1w/apps/prime.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/prime.c rename to src/openssl/openssl-1.1.1w/apps/prime.c diff --git a/src/openssl/openssl-1.1.1t/apps/privkey.pem b/src/openssl/openssl-1.1.1w/apps/privkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/privkey.pem rename to src/openssl/openssl-1.1.1w/apps/privkey.pem diff --git a/src/openssl/openssl-1.1.1t/apps/progs.pl b/src/openssl/openssl-1.1.1w/apps/progs.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/progs.pl rename to src/openssl/openssl-1.1.1w/apps/progs.pl diff --git a/src/openssl/openssl-1.1.1t/apps/rand.c b/src/openssl/openssl-1.1.1w/apps/rand.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/rand.c rename to src/openssl/openssl-1.1.1w/apps/rand.c diff --git a/src/openssl/openssl-1.1.1t/apps/rehash.c b/src/openssl/openssl-1.1.1w/apps/rehash.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/rehash.c rename to src/openssl/openssl-1.1.1w/apps/rehash.c diff --git a/src/openssl/openssl-1.1.1t/apps/req.c b/src/openssl/openssl-1.1.1w/apps/req.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/req.c rename to src/openssl/openssl-1.1.1w/apps/req.c diff --git a/src/openssl/openssl-1.1.1t/apps/req.pem b/src/openssl/openssl-1.1.1w/apps/req.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/req.pem rename to src/openssl/openssl-1.1.1w/apps/req.pem diff --git a/src/openssl/openssl-1.1.1t/apps/rsa.c b/src/openssl/openssl-1.1.1w/apps/rsa.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/rsa.c rename to src/openssl/openssl-1.1.1w/apps/rsa.c diff --git a/src/openssl/openssl-1.1.1t/apps/rsa8192.pem b/src/openssl/openssl-1.1.1w/apps/rsa8192.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/rsa8192.pem rename to src/openssl/openssl-1.1.1w/apps/rsa8192.pem diff --git a/src/openssl/openssl-1.1.1t/apps/rsautl.c b/src/openssl/openssl-1.1.1w/apps/rsautl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/rsautl.c rename to src/openssl/openssl-1.1.1w/apps/rsautl.c diff --git a/src/openssl/openssl-1.1.1t/apps/s1024key.pem b/src/openssl/openssl-1.1.1w/apps/s1024key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/s1024key.pem rename to src/openssl/openssl-1.1.1w/apps/s1024key.pem diff --git a/src/openssl/openssl-1.1.1t/apps/s1024req.pem b/src/openssl/openssl-1.1.1w/apps/s1024req.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/s1024req.pem rename to src/openssl/openssl-1.1.1w/apps/s1024req.pem diff --git a/src/openssl/openssl-1.1.1t/apps/s512-key.pem b/src/openssl/openssl-1.1.1w/apps/s512-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/s512-key.pem rename to src/openssl/openssl-1.1.1w/apps/s512-key.pem diff --git a/src/openssl/openssl-1.1.1t/apps/s512-req.pem b/src/openssl/openssl-1.1.1w/apps/s512-req.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/s512-req.pem rename to src/openssl/openssl-1.1.1w/apps/s512-req.pem diff --git a/src/openssl/openssl-1.1.1t/apps/s_apps.h b/src/openssl/openssl-1.1.1w/apps/s_apps.h similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/s_apps.h rename to src/openssl/openssl-1.1.1w/apps/s_apps.h diff --git a/src/openssl/openssl-1.1.1t/apps/s_cb.c b/src/openssl/openssl-1.1.1w/apps/s_cb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/s_cb.c rename to src/openssl/openssl-1.1.1w/apps/s_cb.c diff --git a/src/openssl/openssl-1.1.1t/apps/s_client.c b/src/openssl/openssl-1.1.1w/apps/s_client.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/s_client.c rename to src/openssl/openssl-1.1.1w/apps/s_client.c diff --git a/src/openssl/openssl-1.1.1t/apps/s_server.c b/src/openssl/openssl-1.1.1w/apps/s_server.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/s_server.c rename to src/openssl/openssl-1.1.1w/apps/s_server.c diff --git a/src/openssl/openssl-1.1.1t/apps/s_socket.c b/src/openssl/openssl-1.1.1w/apps/s_socket.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/s_socket.c rename to src/openssl/openssl-1.1.1w/apps/s_socket.c diff --git a/src/openssl/openssl-1.1.1t/apps/s_time.c b/src/openssl/openssl-1.1.1w/apps/s_time.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/s_time.c rename to src/openssl/openssl-1.1.1w/apps/s_time.c diff --git a/src/openssl/openssl-1.1.1t/apps/server.pem b/src/openssl/openssl-1.1.1w/apps/server.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/server.pem rename to src/openssl/openssl-1.1.1w/apps/server.pem diff --git a/src/openssl/openssl-1.1.1t/apps/server.srl b/src/openssl/openssl-1.1.1w/apps/server.srl similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/server.srl rename to src/openssl/openssl-1.1.1w/apps/server.srl diff --git a/src/openssl/openssl-1.1.1t/apps/server2.pem b/src/openssl/openssl-1.1.1w/apps/server2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/server2.pem rename to src/openssl/openssl-1.1.1w/apps/server2.pem diff --git a/src/openssl/openssl-1.1.1t/apps/sess_id.c b/src/openssl/openssl-1.1.1w/apps/sess_id.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/sess_id.c rename to src/openssl/openssl-1.1.1w/apps/sess_id.c diff --git a/src/openssl/openssl-1.1.1t/apps/smime.c b/src/openssl/openssl-1.1.1w/apps/smime.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/smime.c rename to src/openssl/openssl-1.1.1w/apps/smime.c diff --git a/src/openssl/openssl-1.1.1t/apps/speed.c b/src/openssl/openssl-1.1.1w/apps/speed.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/speed.c rename to src/openssl/openssl-1.1.1w/apps/speed.c diff --git a/src/openssl/openssl-1.1.1t/apps/spkac.c b/src/openssl/openssl-1.1.1w/apps/spkac.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/spkac.c rename to src/openssl/openssl-1.1.1w/apps/spkac.c diff --git a/src/openssl/openssl-1.1.1t/apps/srp.c b/src/openssl/openssl-1.1.1w/apps/srp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/srp.c rename to src/openssl/openssl-1.1.1w/apps/srp.c diff --git a/src/openssl/openssl-1.1.1t/apps/storeutl.c b/src/openssl/openssl-1.1.1w/apps/storeutl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/storeutl.c rename to src/openssl/openssl-1.1.1w/apps/storeutl.c diff --git a/src/openssl/openssl-1.1.1t/apps/testCA.pem b/src/openssl/openssl-1.1.1w/apps/testCA.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/testCA.pem rename to src/openssl/openssl-1.1.1w/apps/testCA.pem diff --git a/src/openssl/openssl-1.1.1t/apps/testdsa.h b/src/openssl/openssl-1.1.1w/apps/testdsa.h similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/testdsa.h rename to src/openssl/openssl-1.1.1w/apps/testdsa.h diff --git a/src/openssl/openssl-1.1.1t/apps/testrsa.h b/src/openssl/openssl-1.1.1w/apps/testrsa.h similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/testrsa.h rename to src/openssl/openssl-1.1.1w/apps/testrsa.h diff --git a/src/openssl/openssl-1.1.1t/apps/timeouts.h b/src/openssl/openssl-1.1.1w/apps/timeouts.h similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/timeouts.h rename to src/openssl/openssl-1.1.1w/apps/timeouts.h diff --git a/src/openssl/openssl-1.1.1t/apps/ts.c b/src/openssl/openssl-1.1.1w/apps/ts.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/ts.c rename to src/openssl/openssl-1.1.1w/apps/ts.c diff --git a/src/openssl/openssl-1.1.1t/apps/tsget.in b/src/openssl/openssl-1.1.1w/apps/tsget.in similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/tsget.in rename to src/openssl/openssl-1.1.1w/apps/tsget.in diff --git a/src/openssl/openssl-1.1.1t/apps/verify.c b/src/openssl/openssl-1.1.1w/apps/verify.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/verify.c rename to src/openssl/openssl-1.1.1w/apps/verify.c diff --git a/src/openssl/openssl-1.1.1t/apps/version.c b/src/openssl/openssl-1.1.1w/apps/version.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/version.c rename to src/openssl/openssl-1.1.1w/apps/version.c diff --git a/src/openssl/openssl-1.1.1t/apps/vms_decc_argv.c b/src/openssl/openssl-1.1.1w/apps/vms_decc_argv.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/vms_decc_argv.c rename to src/openssl/openssl-1.1.1w/apps/vms_decc_argv.c diff --git a/src/openssl/openssl-1.1.1t/apps/vms_decc_init.c b/src/openssl/openssl-1.1.1w/apps/vms_decc_init.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/vms_decc_init.c rename to src/openssl/openssl-1.1.1w/apps/vms_decc_init.c diff --git a/src/openssl/openssl-1.1.1t/apps/vms_term_sock.c b/src/openssl/openssl-1.1.1w/apps/vms_term_sock.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/vms_term_sock.c rename to src/openssl/openssl-1.1.1w/apps/vms_term_sock.c diff --git a/src/openssl/openssl-1.1.1t/apps/vms_term_sock.h b/src/openssl/openssl-1.1.1w/apps/vms_term_sock.h similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/vms_term_sock.h rename to src/openssl/openssl-1.1.1w/apps/vms_term_sock.h diff --git a/src/openssl/openssl-1.1.1t/apps/win32_init.c b/src/openssl/openssl-1.1.1w/apps/win32_init.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/win32_init.c rename to src/openssl/openssl-1.1.1w/apps/win32_init.c diff --git a/src/openssl/openssl-1.1.1t/apps/x509.c b/src/openssl/openssl-1.1.1w/apps/x509.c similarity index 100% rename from src/openssl/openssl-1.1.1t/apps/x509.c rename to src/openssl/openssl-1.1.1w/apps/x509.c diff --git a/src/openssl/openssl-1.1.1t/build.info b/src/openssl/openssl-1.1.1w/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/build.info rename to src/openssl/openssl-1.1.1w/build.info diff --git a/src/openssl/openssl-1.1.1t/config b/src/openssl/openssl-1.1.1w/config similarity index 100% rename from src/openssl/openssl-1.1.1t/config rename to src/openssl/openssl-1.1.1w/config diff --git a/src/openssl/openssl-1.1.1t/config.com b/src/openssl/openssl-1.1.1w/config.com similarity index 100% rename from src/openssl/openssl-1.1.1t/config.com rename to src/openssl/openssl-1.1.1w/config.com diff --git a/src/openssl/openssl-1.1.1t/crypto/LPdir_nyi.c b/src/openssl/openssl-1.1.1w/crypto/LPdir_nyi.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/LPdir_nyi.c rename to src/openssl/openssl-1.1.1w/crypto/LPdir_nyi.c diff --git a/src/openssl/openssl-1.1.1t/crypto/LPdir_unix.c b/src/openssl/openssl-1.1.1w/crypto/LPdir_unix.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/LPdir_unix.c rename to src/openssl/openssl-1.1.1w/crypto/LPdir_unix.c diff --git a/src/openssl/openssl-1.1.1t/crypto/LPdir_vms.c b/src/openssl/openssl-1.1.1w/crypto/LPdir_vms.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/LPdir_vms.c rename to src/openssl/openssl-1.1.1w/crypto/LPdir_vms.c diff --git a/src/openssl/openssl-1.1.1t/crypto/LPdir_win.c b/src/openssl/openssl-1.1.1w/crypto/LPdir_win.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/LPdir_win.c rename to src/openssl/openssl-1.1.1w/crypto/LPdir_win.c diff --git a/src/openssl/openssl-1.1.1t/crypto/LPdir_win32.c b/src/openssl/openssl-1.1.1w/crypto/LPdir_win32.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/LPdir_win32.c rename to src/openssl/openssl-1.1.1w/crypto/LPdir_win32.c diff --git a/src/openssl/openssl-1.1.1t/crypto/LPdir_wince.c b/src/openssl/openssl-1.1.1w/crypto/LPdir_wince.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/LPdir_wince.c rename to src/openssl/openssl-1.1.1w/crypto/LPdir_wince.c diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/aes_cbc.c b/src/openssl/openssl-1.1.1w/crypto/aes/aes_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/aes_cbc.c rename to src/openssl/openssl-1.1.1w/crypto/aes/aes_cbc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/aes_cfb.c b/src/openssl/openssl-1.1.1w/crypto/aes/aes_cfb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/aes_cfb.c rename to src/openssl/openssl-1.1.1w/crypto/aes/aes_cfb.c diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/aes_core.c b/src/openssl/openssl-1.1.1w/crypto/aes/aes_core.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/aes_core.c rename to src/openssl/openssl-1.1.1w/crypto/aes/aes_core.c diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/aes_ecb.c b/src/openssl/openssl-1.1.1w/crypto/aes/aes_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/aes_ecb.c rename to src/openssl/openssl-1.1.1w/crypto/aes/aes_ecb.c diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/aes_ige.c b/src/openssl/openssl-1.1.1w/crypto/aes/aes_ige.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/aes_ige.c rename to src/openssl/openssl-1.1.1w/crypto/aes/aes_ige.c diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/aes_local.h b/src/openssl/openssl-1.1.1w/crypto/aes/aes_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/aes_local.h rename to src/openssl/openssl-1.1.1w/crypto/aes/aes_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/aes_misc.c b/src/openssl/openssl-1.1.1w/crypto/aes/aes_misc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/aes_misc.c rename to src/openssl/openssl-1.1.1w/crypto/aes/aes_misc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/aes_ofb.c b/src/openssl/openssl-1.1.1w/crypto/aes/aes_ofb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/aes_ofb.c rename to src/openssl/openssl-1.1.1w/crypto/aes/aes_ofb.c diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/aes_wrap.c b/src/openssl/openssl-1.1.1w/crypto/aes/aes_wrap.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/aes_wrap.c rename to src/openssl/openssl-1.1.1w/crypto/aes/aes_wrap.c diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/aes_x86core.c b/src/openssl/openssl-1.1.1w/crypto/aes/aes_x86core.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/aes_x86core.c rename to src/openssl/openssl-1.1.1w/crypto/aes/aes_x86core.c diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-armv4.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-armv4.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-armv4.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-c64xplus.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-c64xplus.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-ia64.S b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-ia64.S similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-ia64.S rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-ia64.S diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-mips.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-mips.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-mips.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-mips.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-parisc.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-parisc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-parisc.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-parisc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-ppc.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-ppc.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-ppc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-s390x.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-s390x.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-s390x.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-sparcv9.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aes-sparcv9.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aes-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aesfx-sparcv9.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesfx-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aesfx-sparcv9.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aesfx-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aesni-mb-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-mb-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aesni-mb-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-mb-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aesni-sha1-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-sha1-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aesni-sha1-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-sha1-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aesni-sha256-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-sha256-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aesni-sha256-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-sha256-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aesni-x86.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aesni-x86.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-x86.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aesni-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aesni-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aesni-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aesp8-ppc.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesp8-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aesp8-ppc.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aesp8-ppc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aest4-sparcv9.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aest4-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aest4-sparcv9.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aest4-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/aesv8-armx.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/aesv8-armx.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/aesv8-armx.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/aesv8-armx.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/bsaes-armv7.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/bsaes-armv7.pl similarity index 99% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/bsaes-armv7.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/bsaes-armv7.pl index 2b9f241ce..b22db37d4 100644 --- a/src/openssl/openssl-1.1.1t/crypto/aes/asm/bsaes-armv7.pl +++ b/src/openssl/openssl-1.1.1w/crypto/aes/asm/bsaes-armv7.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2012-2020 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 2012-2023 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy @@ -14,7 +14,7 @@ # details see http://www.openssl.org/~appro/cryptogams/. # # Specific modes and adaptation for Linux kernel by Ard Biesheuvel -# of Linaro. Permission to use under GPL terms is granted. +# of Linaro. # ==================================================================== # Bit-sliced AES for ARM NEON diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/vpaes-armv8.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/vpaes-armv8.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-armv8.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/vpaes-ppc.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/vpaes-ppc.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-ppc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/vpaes-x86.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/vpaes-x86.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-x86.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/asm/vpaes-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/asm/vpaes-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/aes/asm/vpaes-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aes/build.info b/src/openssl/openssl-1.1.1w/crypto/aes/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aes/build.info rename to src/openssl/openssl-1.1.1w/crypto/aes/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/alphacpuid.pl b/src/openssl/openssl-1.1.1w/crypto/alphacpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/alphacpuid.pl rename to src/openssl/openssl-1.1.1w/crypto/alphacpuid.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/aria/aria.c b/src/openssl/openssl-1.1.1w/crypto/aria/aria.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aria/aria.c rename to src/openssl/openssl-1.1.1w/crypto/aria/aria.c diff --git a/src/openssl/openssl-1.1.1t/crypto/aria/build.info b/src/openssl/openssl-1.1.1w/crypto/aria/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/aria/build.info rename to src/openssl/openssl-1.1.1w/crypto/aria/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/arm64cpuid.pl b/src/openssl/openssl-1.1.1w/crypto/arm64cpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/arm64cpuid.pl rename to src/openssl/openssl-1.1.1w/crypto/arm64cpuid.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/arm_arch.h b/src/openssl/openssl-1.1.1w/crypto/arm_arch.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/arm_arch.h rename to src/openssl/openssl-1.1.1w/crypto/arm_arch.h diff --git a/src/openssl/openssl-1.1.1t/crypto/armcap.c b/src/openssl/openssl-1.1.1w/crypto/armcap.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/armcap.c rename to src/openssl/openssl-1.1.1w/crypto/armcap.c diff --git a/src/openssl/openssl-1.1.1t/crypto/armv4cpuid.pl b/src/openssl/openssl-1.1.1w/crypto/armv4cpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/armv4cpuid.pl rename to src/openssl/openssl-1.1.1w/crypto/armv4cpuid.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_bitstr.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_bitstr.c similarity index 97% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_bitstr.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_bitstr.c index f462dd107..14b57265d 100644 --- a/src/openssl/openssl-1.1.1t/crypto/asn1/a_bitstr.c +++ b/src/openssl/openssl-1.1.1w/crypto/asn1/a_bitstr.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -148,6 +148,9 @@ int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value) int w, v, iv; unsigned char *c; + if (n < 0) + return 0; + w = n / 8; v = 1 << (7 - (n & 0x07)); iv = ~v; @@ -182,6 +185,9 @@ int ASN1_BIT_STRING_get_bit(const ASN1_BIT_STRING *a, int n) { int w, v; + if (n < 0) + return 0; + w = n / 8; v = 1 << (7 - (n & 0x07)); if ((a == NULL) || (a->length < (w + 1)) || (a->data == NULL)) diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_d2i_fp.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_d2i_fp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_d2i_fp.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_d2i_fp.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_digest.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_digest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_digest.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_digest.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_dup.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_dup.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_dup.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_dup.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_gentm.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_gentm.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_gentm.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_gentm.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_i2d_fp.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_i2d_fp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_i2d_fp.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_i2d_fp.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_int.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_int.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_int.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_int.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_mbstr.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_mbstr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_mbstr.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_mbstr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_object.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_object.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_object.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_object.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_octet.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_octet.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_octet.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_octet.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_print.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_print.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_print.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_print.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_sign.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_sign.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_sign.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_strex.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_strex.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_strex.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_strex.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_strnid.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_strnid.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_strnid.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_strnid.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_time.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_time.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_time.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_time.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_type.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_type.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_type.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_type.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_utctm.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_utctm.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_utctm.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_utctm.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_utf8.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_utf8.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_utf8.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_utf8.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/a_verify.c b/src/openssl/openssl-1.1.1w/crypto/asn1/a_verify.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/a_verify.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/a_verify.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/ameth_lib.c b/src/openssl/openssl-1.1.1w/crypto/asn1/ameth_lib.c similarity index 97% rename from src/openssl/openssl-1.1.1t/crypto/asn1/ameth_lib.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/ameth_lib.c index 5e8c3ed1d..4ab246e98 100644 --- a/src/openssl/openssl-1.1.1t/crypto/asn1/ameth_lib.c +++ b/src/openssl/openssl-1.1.1w/crypto/asn1/ameth_lib.c @@ -1,5 +1,5 @@ /* - * Copyright 2006-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -264,6 +264,7 @@ void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, dst->pkey_size = src->pkey_size; dst->pkey_bits = src->pkey_bits; + dst->pkey_security_bits = src->pkey_security_bits; dst->param_decode = src->param_decode; dst->param_encode = src->param_encode; @@ -271,6 +272,7 @@ void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, dst->param_copy = src->param_copy; dst->param_cmp = src->param_cmp; dst->param_print = src->param_print; + dst->sig_print = src->sig_print; dst->pkey_free = src->pkey_free; dst->pkey_ctrl = src->pkey_ctrl; @@ -281,6 +283,13 @@ void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, dst->siginf_set = src->siginf_set; dst->pkey_check = src->pkey_check; + dst->pkey_public_check = src->pkey_public_check; + dst->pkey_param_check = src->pkey_param_check; + + dst->set_priv_key = src->set_priv_key; + dst->set_pub_key = src->set_pub_key; + dst->get_priv_key = src->get_priv_key; + dst->get_pub_key = src->get_pub_key; } diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/asn1_err.c b/src/openssl/openssl-1.1.1w/crypto/asn1/asn1_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/asn1_err.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/asn1_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/asn1_gen.c b/src/openssl/openssl-1.1.1w/crypto/asn1/asn1_gen.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/asn1_gen.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/asn1_gen.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/asn1_item_list.c b/src/openssl/openssl-1.1.1w/crypto/asn1/asn1_item_list.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/asn1_item_list.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/asn1_item_list.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/asn1_item_list.h b/src/openssl/openssl-1.1.1w/crypto/asn1/asn1_item_list.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/asn1_item_list.h rename to src/openssl/openssl-1.1.1w/crypto/asn1/asn1_item_list.h diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/asn1_lib.c b/src/openssl/openssl-1.1.1w/crypto/asn1/asn1_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/asn1_lib.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/asn1_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/asn1_local.h b/src/openssl/openssl-1.1.1w/crypto/asn1/asn1_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/asn1_local.h rename to src/openssl/openssl-1.1.1w/crypto/asn1/asn1_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/asn1_par.c b/src/openssl/openssl-1.1.1w/crypto/asn1/asn1_par.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/asn1_par.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/asn1_par.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/asn_mime.c b/src/openssl/openssl-1.1.1w/crypto/asn1/asn_mime.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/asn_mime.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/asn_mime.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/asn_moid.c b/src/openssl/openssl-1.1.1w/crypto/asn1/asn_moid.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/asn_moid.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/asn_moid.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/asn_mstbl.c b/src/openssl/openssl-1.1.1w/crypto/asn1/asn_mstbl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/asn_mstbl.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/asn_mstbl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/asn_pack.c b/src/openssl/openssl-1.1.1w/crypto/asn1/asn_pack.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/asn_pack.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/asn_pack.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/bio_asn1.c b/src/openssl/openssl-1.1.1w/crypto/asn1/bio_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/bio_asn1.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/bio_asn1.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/bio_ndef.c b/src/openssl/openssl-1.1.1w/crypto/asn1/bio_ndef.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/bio_ndef.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/bio_ndef.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/build.info b/src/openssl/openssl-1.1.1w/crypto/asn1/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/build.info rename to src/openssl/openssl-1.1.1w/crypto/asn1/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/charmap.h b/src/openssl/openssl-1.1.1w/crypto/asn1/charmap.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/charmap.h rename to src/openssl/openssl-1.1.1w/crypto/asn1/charmap.h diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/charmap.pl b/src/openssl/openssl-1.1.1w/crypto/asn1/charmap.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/charmap.pl rename to src/openssl/openssl-1.1.1w/crypto/asn1/charmap.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/d2i_pr.c b/src/openssl/openssl-1.1.1w/crypto/asn1/d2i_pr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/d2i_pr.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/d2i_pr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/d2i_pu.c b/src/openssl/openssl-1.1.1w/crypto/asn1/d2i_pu.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/d2i_pu.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/d2i_pu.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/evp_asn1.c b/src/openssl/openssl-1.1.1w/crypto/asn1/evp_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/evp_asn1.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/evp_asn1.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/f_int.c b/src/openssl/openssl-1.1.1w/crypto/asn1/f_int.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/f_int.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/f_int.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/f_string.c b/src/openssl/openssl-1.1.1w/crypto/asn1/f_string.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/f_string.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/f_string.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/i2d_pr.c b/src/openssl/openssl-1.1.1w/crypto/asn1/i2d_pr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/i2d_pr.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/i2d_pr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/i2d_pu.c b/src/openssl/openssl-1.1.1w/crypto/asn1/i2d_pu.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/i2d_pu.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/i2d_pu.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/n_pkey.c b/src/openssl/openssl-1.1.1w/crypto/asn1/n_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/n_pkey.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/n_pkey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/nsseq.c b/src/openssl/openssl-1.1.1w/crypto/asn1/nsseq.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/nsseq.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/nsseq.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/p5_pbe.c b/src/openssl/openssl-1.1.1w/crypto/asn1/p5_pbe.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/p5_pbe.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/p5_pbe.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/p5_pbev2.c b/src/openssl/openssl-1.1.1w/crypto/asn1/p5_pbev2.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/p5_pbev2.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/p5_pbev2.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/p5_scrypt.c b/src/openssl/openssl-1.1.1w/crypto/asn1/p5_scrypt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/p5_scrypt.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/p5_scrypt.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/p8_pkey.c b/src/openssl/openssl-1.1.1w/crypto/asn1/p8_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/p8_pkey.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/p8_pkey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/standard_methods.h b/src/openssl/openssl-1.1.1w/crypto/asn1/standard_methods.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/standard_methods.h rename to src/openssl/openssl-1.1.1w/crypto/asn1/standard_methods.h diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/t_bitst.c b/src/openssl/openssl-1.1.1w/crypto/asn1/t_bitst.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/t_bitst.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/t_bitst.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/t_pkey.c b/src/openssl/openssl-1.1.1w/crypto/asn1/t_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/t_pkey.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/t_pkey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/t_spki.c b/src/openssl/openssl-1.1.1w/crypto/asn1/t_spki.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/t_spki.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/t_spki.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/tasn_dec.c b/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_dec.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/tasn_dec.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/tasn_dec.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/tasn_enc.c b/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/tasn_enc.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/tasn_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/tasn_fre.c b/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_fre.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/tasn_fre.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/tasn_fre.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/tasn_new.c b/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_new.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/tasn_new.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/tasn_new.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/tasn_prn.c b/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/tasn_prn.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/tasn_prn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/tasn_scn.c b/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_scn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/tasn_scn.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/tasn_scn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/tasn_typ.c b/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_typ.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/tasn_typ.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/tasn_typ.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/tasn_utl.c b/src/openssl/openssl-1.1.1w/crypto/asn1/tasn_utl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/tasn_utl.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/tasn_utl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/tbl_standard.h b/src/openssl/openssl-1.1.1w/crypto/asn1/tbl_standard.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/tbl_standard.h rename to src/openssl/openssl-1.1.1w/crypto/asn1/tbl_standard.h diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/x_algor.c b/src/openssl/openssl-1.1.1w/crypto/asn1/x_algor.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/x_algor.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/x_algor.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/x_bignum.c b/src/openssl/openssl-1.1.1w/crypto/asn1/x_bignum.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/x_bignum.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/x_bignum.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/x_info.c b/src/openssl/openssl-1.1.1w/crypto/asn1/x_info.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/x_info.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/x_info.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/x_int64.c b/src/openssl/openssl-1.1.1w/crypto/asn1/x_int64.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/x_int64.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/x_int64.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/x_long.c b/src/openssl/openssl-1.1.1w/crypto/asn1/x_long.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/x_long.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/x_long.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/x_pkey.c b/src/openssl/openssl-1.1.1w/crypto/asn1/x_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/x_pkey.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/x_pkey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/x_sig.c b/src/openssl/openssl-1.1.1w/crypto/asn1/x_sig.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/x_sig.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/x_sig.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/x_spki.c b/src/openssl/openssl-1.1.1w/crypto/asn1/x_spki.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/x_spki.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/x_spki.c diff --git a/src/openssl/openssl-1.1.1t/crypto/asn1/x_val.c b/src/openssl/openssl-1.1.1w/crypto/asn1/x_val.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/asn1/x_val.c rename to src/openssl/openssl-1.1.1w/crypto/asn1/x_val.c diff --git a/src/openssl/openssl-1.1.1t/crypto/async/arch/async_null.c b/src/openssl/openssl-1.1.1w/crypto/async/arch/async_null.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/async/arch/async_null.c rename to src/openssl/openssl-1.1.1w/crypto/async/arch/async_null.c diff --git a/src/openssl/openssl-1.1.1t/crypto/async/arch/async_null.h b/src/openssl/openssl-1.1.1w/crypto/async/arch/async_null.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/async/arch/async_null.h rename to src/openssl/openssl-1.1.1w/crypto/async/arch/async_null.h diff --git a/src/openssl/openssl-1.1.1t/crypto/async/arch/async_posix.c b/src/openssl/openssl-1.1.1w/crypto/async/arch/async_posix.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/async/arch/async_posix.c rename to src/openssl/openssl-1.1.1w/crypto/async/arch/async_posix.c diff --git a/src/openssl/openssl-1.1.1t/crypto/async/arch/async_posix.h b/src/openssl/openssl-1.1.1w/crypto/async/arch/async_posix.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/async/arch/async_posix.h rename to src/openssl/openssl-1.1.1w/crypto/async/arch/async_posix.h diff --git a/src/openssl/openssl-1.1.1t/crypto/async/arch/async_win.c b/src/openssl/openssl-1.1.1w/crypto/async/arch/async_win.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/async/arch/async_win.c rename to src/openssl/openssl-1.1.1w/crypto/async/arch/async_win.c diff --git a/src/openssl/openssl-1.1.1t/crypto/async/arch/async_win.h b/src/openssl/openssl-1.1.1w/crypto/async/arch/async_win.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/async/arch/async_win.h rename to src/openssl/openssl-1.1.1w/crypto/async/arch/async_win.h diff --git a/src/openssl/openssl-1.1.1t/crypto/async/async.c b/src/openssl/openssl-1.1.1w/crypto/async/async.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/async/async.c rename to src/openssl/openssl-1.1.1w/crypto/async/async.c diff --git a/src/openssl/openssl-1.1.1t/crypto/async/async_err.c b/src/openssl/openssl-1.1.1w/crypto/async/async_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/async/async_err.c rename to src/openssl/openssl-1.1.1w/crypto/async/async_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/async/async_local.h b/src/openssl/openssl-1.1.1w/crypto/async/async_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/async/async_local.h rename to src/openssl/openssl-1.1.1w/crypto/async/async_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/async/async_wait.c b/src/openssl/openssl-1.1.1w/crypto/async/async_wait.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/async/async_wait.c rename to src/openssl/openssl-1.1.1w/crypto/async/async_wait.c diff --git a/src/openssl/openssl-1.1.1t/crypto/async/build.info b/src/openssl/openssl-1.1.1w/crypto/async/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/async/build.info rename to src/openssl/openssl-1.1.1w/crypto/async/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/bf/asm/bf-586.pl b/src/openssl/openssl-1.1.1w/crypto/bf/asm/bf-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bf/asm/bf-586.pl rename to src/openssl/openssl-1.1.1w/crypto/bf/asm/bf-586.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bf/bf_cfb64.c b/src/openssl/openssl-1.1.1w/crypto/bf/bf_cfb64.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bf/bf_cfb64.c rename to src/openssl/openssl-1.1.1w/crypto/bf/bf_cfb64.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bf/bf_ecb.c b/src/openssl/openssl-1.1.1w/crypto/bf/bf_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bf/bf_ecb.c rename to src/openssl/openssl-1.1.1w/crypto/bf/bf_ecb.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bf/bf_enc.c b/src/openssl/openssl-1.1.1w/crypto/bf/bf_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bf/bf_enc.c rename to src/openssl/openssl-1.1.1w/crypto/bf/bf_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bf/bf_local.h b/src/openssl/openssl-1.1.1w/crypto/bf/bf_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bf/bf_local.h rename to src/openssl/openssl-1.1.1w/crypto/bf/bf_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/bf/bf_ofb64.c b/src/openssl/openssl-1.1.1w/crypto/bf/bf_ofb64.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bf/bf_ofb64.c rename to src/openssl/openssl-1.1.1w/crypto/bf/bf_ofb64.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bf/bf_pi.h b/src/openssl/openssl-1.1.1w/crypto/bf/bf_pi.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bf/bf_pi.h rename to src/openssl/openssl-1.1.1w/crypto/bf/bf_pi.h diff --git a/src/openssl/openssl-1.1.1t/crypto/bf/bf_skey.c b/src/openssl/openssl-1.1.1w/crypto/bf/bf_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bf/bf_skey.c rename to src/openssl/openssl-1.1.1w/crypto/bf/bf_skey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bf/build.info b/src/openssl/openssl-1.1.1w/crypto/bf/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bf/build.info rename to src/openssl/openssl-1.1.1w/crypto/bf/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/b_addr.c b/src/openssl/openssl-1.1.1w/crypto/bio/b_addr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/b_addr.c rename to src/openssl/openssl-1.1.1w/crypto/bio/b_addr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/b_dump.c b/src/openssl/openssl-1.1.1w/crypto/bio/b_dump.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/b_dump.c rename to src/openssl/openssl-1.1.1w/crypto/bio/b_dump.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/b_print.c b/src/openssl/openssl-1.1.1w/crypto/bio/b_print.c similarity index 99% rename from src/openssl/openssl-1.1.1t/crypto/bio/b_print.c rename to src/openssl/openssl-1.1.1w/crypto/bio/b_print.c index 45d4e9f00..c4ed364d7 100644 --- a/src/openssl/openssl-1.1.1t/crypto/bio/b_print.c +++ b/src/openssl/openssl-1.1.1w/crypto/bio/b_print.c @@ -305,7 +305,6 @@ _dopr(char **sbuffer, case 'G': case 'g': /* not implemented for UEFI */ - ERR_raise(ERR_LIB_BIO, ERR_R_UNSUPPORTED); return 0; #endif case 'c': diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/b_sock.c b/src/openssl/openssl-1.1.1w/crypto/bio/b_sock.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/b_sock.c rename to src/openssl/openssl-1.1.1w/crypto/bio/b_sock.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/b_sock2.c b/src/openssl/openssl-1.1.1w/crypto/bio/b_sock2.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/b_sock2.c rename to src/openssl/openssl-1.1.1w/crypto/bio/b_sock2.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bf_buff.c b/src/openssl/openssl-1.1.1w/crypto/bio/bf_buff.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bf_buff.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bf_buff.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bf_lbuf.c b/src/openssl/openssl-1.1.1w/crypto/bio/bf_lbuf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bf_lbuf.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bf_lbuf.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bf_nbio.c b/src/openssl/openssl-1.1.1w/crypto/bio/bf_nbio.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bf_nbio.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bf_nbio.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bf_null.c b/src/openssl/openssl-1.1.1w/crypto/bio/bf_null.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bf_null.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bf_null.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bio_cb.c b/src/openssl/openssl-1.1.1w/crypto/bio/bio_cb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bio_cb.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bio_cb.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bio_err.c b/src/openssl/openssl-1.1.1w/crypto/bio/bio_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bio_err.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bio_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bio_lib.c b/src/openssl/openssl-1.1.1w/crypto/bio/bio_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bio_lib.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bio_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bio_local.h b/src/openssl/openssl-1.1.1w/crypto/bio/bio_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bio_local.h rename to src/openssl/openssl-1.1.1w/crypto/bio/bio_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bio_meth.c b/src/openssl/openssl-1.1.1w/crypto/bio/bio_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bio_meth.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bio_meth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bss_acpt.c b/src/openssl/openssl-1.1.1w/crypto/bio/bss_acpt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bss_acpt.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bss_acpt.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bss_bio.c b/src/openssl/openssl-1.1.1w/crypto/bio/bss_bio.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bss_bio.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bss_bio.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bss_conn.c b/src/openssl/openssl-1.1.1w/crypto/bio/bss_conn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bss_conn.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bss_conn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bss_dgram.c b/src/openssl/openssl-1.1.1w/crypto/bio/bss_dgram.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bss_dgram.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bss_dgram.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bss_fd.c b/src/openssl/openssl-1.1.1w/crypto/bio/bss_fd.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bss_fd.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bss_fd.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bss_file.c b/src/openssl/openssl-1.1.1w/crypto/bio/bss_file.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bss_file.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bss_file.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bss_log.c b/src/openssl/openssl-1.1.1w/crypto/bio/bss_log.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bss_log.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bss_log.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bss_mem.c b/src/openssl/openssl-1.1.1w/crypto/bio/bss_mem.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bss_mem.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bss_mem.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bss_null.c b/src/openssl/openssl-1.1.1w/crypto/bio/bss_null.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bss_null.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bss_null.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/bss_sock.c b/src/openssl/openssl-1.1.1w/crypto/bio/bss_sock.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/bss_sock.c rename to src/openssl/openssl-1.1.1w/crypto/bio/bss_sock.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bio/build.info b/src/openssl/openssl-1.1.1w/crypto/bio/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bio/build.info rename to src/openssl/openssl-1.1.1w/crypto/bio/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/blake2/blake2_impl.h b/src/openssl/openssl-1.1.1w/crypto/blake2/blake2_impl.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/blake2/blake2_impl.h rename to src/openssl/openssl-1.1.1w/crypto/blake2/blake2_impl.h diff --git a/src/openssl/openssl-1.1.1t/crypto/blake2/blake2_local.h b/src/openssl/openssl-1.1.1w/crypto/blake2/blake2_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/blake2/blake2_local.h rename to src/openssl/openssl-1.1.1w/crypto/blake2/blake2_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/blake2/blake2b.c b/src/openssl/openssl-1.1.1w/crypto/blake2/blake2b.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/blake2/blake2b.c rename to src/openssl/openssl-1.1.1w/crypto/blake2/blake2b.c diff --git a/src/openssl/openssl-1.1.1t/crypto/blake2/blake2s.c b/src/openssl/openssl-1.1.1w/crypto/blake2/blake2s.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/blake2/blake2s.c rename to src/openssl/openssl-1.1.1w/crypto/blake2/blake2s.c diff --git a/src/openssl/openssl-1.1.1t/crypto/blake2/build.info b/src/openssl/openssl-1.1.1w/crypto/blake2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/blake2/build.info rename to src/openssl/openssl-1.1.1w/crypto/blake2/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/blake2/m_blake2b.c b/src/openssl/openssl-1.1.1w/crypto/blake2/m_blake2b.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/blake2/m_blake2b.c rename to src/openssl/openssl-1.1.1w/crypto/blake2/m_blake2b.c diff --git a/src/openssl/openssl-1.1.1t/crypto/blake2/m_blake2s.c b/src/openssl/openssl-1.1.1w/crypto/blake2/m_blake2s.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/blake2/m_blake2s.c rename to src/openssl/openssl-1.1.1w/crypto/blake2/m_blake2s.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/README.pod b/src/openssl/openssl-1.1.1w/crypto/bn/README.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/README.pod rename to src/openssl/openssl-1.1.1w/crypto/bn/README.pod diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/alpha-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/alpha-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/alpha-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/alpha-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/armv4-gf2m.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/armv4-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/armv4-gf2m.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/armv4-gf2m.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/armv4-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/armv4-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/armv4-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/armv4-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/armv8-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/armv8-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/armv8-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/armv8-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/bn-586.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/bn-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/bn-586.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/bn-586.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/bn-c64xplus.asm b/src/openssl/openssl-1.1.1w/crypto/bn/asm/bn-c64xplus.asm similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/bn-c64xplus.asm rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/bn-c64xplus.asm diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/c64xplus-gf2m.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/c64xplus-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/c64xplus-gf2m.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/c64xplus-gf2m.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/co-586.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/co-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/co-586.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/co-586.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/ia64-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/ia64-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/ia64-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/ia64-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/ia64.S b/src/openssl/openssl-1.1.1w/crypto/bn/asm/ia64.S similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/ia64.S rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/ia64.S diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/mips-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/mips-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/mips-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/mips-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/mips.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/mips.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/mips.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/mips.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/parisc-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/parisc-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/parisc-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/parisc-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/ppc-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/ppc-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/ppc-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/ppc-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/ppc.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/ppc.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/ppc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/ppc64-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/ppc64-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/ppc64-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/ppc64-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/rsaz-avx2.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/rsaz-avx2.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/rsaz-avx2.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/rsaz-avx2.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/rsaz-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/rsaz-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/rsaz-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/rsaz-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/s390x-gf2m.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/s390x-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/s390x-gf2m.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/s390x-gf2m.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/s390x-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/s390x-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/s390x-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/s390x-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/s390x.S b/src/openssl/openssl-1.1.1w/crypto/bn/asm/s390x.S similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/s390x.S rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/s390x.S diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/sparct4-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/sparct4-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/sparct4-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/sparct4-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/sparcv8.S b/src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv8.S similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/sparcv8.S rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv8.S diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/sparcv8plus.S b/src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv8plus.S similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/sparcv8plus.S rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv8plus.S diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/sparcv9-gf2m.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv9-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/sparcv9-gf2m.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv9-gf2m.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/sparcv9-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv9-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/sparcv9-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv9-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/sparcv9a-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv9a-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/sparcv9a-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/sparcv9a-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/via-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/via-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/via-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/via-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/vis3-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/vis3-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/vis3-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/vis3-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/x86-gf2m.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/x86-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/x86-gf2m.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/x86-gf2m.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/x86-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/x86-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/x86-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/x86-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/x86_64-gcc.c b/src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-gcc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/x86_64-gcc.c rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-gcc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/x86_64-gf2m.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-gf2m.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/x86_64-gf2m.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-gf2m.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/x86_64-mont.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-mont.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/x86_64-mont.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-mont.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/asm/x86_64-mont5.pl b/src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-mont5.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/asm/x86_64-mont5.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/asm/x86_64-mont5.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_add.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_add.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_add.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_add.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_asm.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_asm.c similarity index 91% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_asm.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_asm.c index 4d83a8cf1..e5fa81b3a 100644 --- a/src/openssl/openssl-1.1.1t/crypto/bn/bn_asm.c +++ b/src/openssl/openssl-1.1.1w/crypto/bn/bn_asm.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -381,25 +381,33 @@ BN_ULONG bn_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, #ifndef OPENSSL_SMALL_FOOTPRINT while (n & ~3) { t1 = a[0]; - t2 = b[0]; - r[0] = (t1 - t2 - c) & BN_MASK2; - if (t1 != t2) - c = (t1 < t2); + t2 = (t1 - c) & BN_MASK2; + c = (t2 > t1); + t1 = b[0]; + t1 = (t2 - t1) & BN_MASK2; + r[0] = t1; + c += (t1 > t2); t1 = a[1]; - t2 = b[1]; - r[1] = (t1 - t2 - c) & BN_MASK2; - if (t1 != t2) - c = (t1 < t2); + t2 = (t1 - c) & BN_MASK2; + c = (t2 > t1); + t1 = b[1]; + t1 = (t2 - t1) & BN_MASK2; + r[1] = t1; + c += (t1 > t2); t1 = a[2]; - t2 = b[2]; - r[2] = (t1 - t2 - c) & BN_MASK2; - if (t1 != t2) - c = (t1 < t2); + t2 = (t1 - c) & BN_MASK2; + c = (t2 > t1); + t1 = b[2]; + t1 = (t2 - t1) & BN_MASK2; + r[2] = t1; + c += (t1 > t2); t1 = a[3]; - t2 = b[3]; - r[3] = (t1 - t2 - c) & BN_MASK2; - if (t1 != t2) - c = (t1 < t2); + t2 = (t1 - c) & BN_MASK2; + c = (t2 > t1); + t1 = b[3]; + t1 = (t2 - t1) & BN_MASK2; + r[3] = t1; + c += (t1 > t2); a += 4; b += 4; r += 4; @@ -408,10 +416,12 @@ BN_ULONG bn_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, #endif while (n) { t1 = a[0]; - t2 = b[0]; - r[0] = (t1 - t2 - c) & BN_MASK2; - if (t1 != t2) - c = (t1 < t2); + t2 = (t1 - c) & BN_MASK2; + c = (t2 > t1); + t1 = b[0]; + t1 = (t2 - t1) & BN_MASK2; + r[0] = t1; + c += (t1 > t2); a++; b++; r++; @@ -446,7 +456,7 @@ BN_ULONG bn_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, t += c0; /* no carry */ \ c0 = (BN_ULONG)Lw(t); \ hi = (BN_ULONG)Hw(t); \ - c1 = (c1+hi)&BN_MASK2; if (c1top = (int)(rtop & ~mask) | (ntop & mask); n->flags |= (BN_FLG_FIXED_TOP & ~mask); } - ret = BN_mod_mul_montgomery(n, n, r, b->m_ctx, ctx); + ret = bn_mul_mont_fixed_top(n, n, r, b->m_ctx, ctx); + bn_correct_top_consttime(n); } else { ret = BN_mod_mul(n, n, r, b->mod, ctx); } diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_const.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_const.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_const.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_const.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_ctx.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_ctx.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_ctx.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_ctx.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_depr.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_depr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_depr.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_depr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_dh.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_dh.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_dh.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_dh.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_div.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_div.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_div.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_div.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_err.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_err.c similarity index 98% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_err.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_err.c index 6f5464b54..6ea5fc3d5 100644 --- a/src/openssl/openssl-1.1.1t/crypto/bn/bn_err.c +++ b/src/openssl/openssl-1.1.1w/crypto/bn/bn_err.c @@ -73,8 +73,6 @@ static const ERR_STRING_DATA BN_str_functs[] = { {ERR_PACK(ERR_LIB_BN, BN_F_BN_SET_WORDS, 0), "bn_set_words"}, {ERR_PACK(ERR_LIB_BN, BN_F_BN_STACK_PUSH, 0), "BN_STACK_push"}, {ERR_PACK(ERR_LIB_BN, BN_F_BN_USUB, 0), "BN_usub"}, - {ERR_PACK(ERR_LIB_BN, BN_F_OSSL_BN_RSA_DO_UNBLIND, 0), - "ossl_bn_rsa_do_unblind"}, {0, NULL} }; diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_exp.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_exp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_exp.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_exp.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_exp2.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_exp2.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_exp2.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_exp2.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_gcd.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_gcd.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_gcd.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_gcd.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_gf2m.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_gf2m.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_gf2m.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_gf2m.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_intern.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_intern.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_intern.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_intern.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_kron.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_kron.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_kron.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_kron.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_lib.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_lib.c similarity index 97% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_lib.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_lib.c index eb4a31849..cd6aa3448 100644 --- a/src/openssl/openssl-1.1.1t/crypto/bn/bn_lib.c +++ b/src/openssl/openssl-1.1.1w/crypto/bn/bn_lib.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -1001,6 +1001,28 @@ BIGNUM *bn_wexpand(BIGNUM *a, int words) return (words <= a->dmax) ? a : bn_expand2(a, words); } +void bn_correct_top_consttime(BIGNUM *a) +{ + int j, atop; + BN_ULONG limb; + unsigned int mask; + + for (j = 0, atop = 0; j < a->dmax; j++) { + limb = a->d[j]; + limb |= 0 - limb; + limb >>= BN_BITS2 - 1; + limb = 0 - limb; + mask = (unsigned int)limb; + mask &= constant_time_msb(j - a->top); + atop = constant_time_select_int(mask, j + 1, atop); + } + + mask = constant_time_eq_int(atop, 0); + a->top = atop; + a->neg = constant_time_select_int(mask, 0, a->neg); + a->flags &= ~BN_FLG_FIXED_TOP; +} + void bn_correct_top(BIGNUM *a) { BN_ULONG *ftl; diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_local.h b/src/openssl/openssl-1.1.1w/crypto/bn/bn_local.h similarity index 96% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_local.h rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_local.h index 30b7614fd..818e34348 100644 --- a/src/openssl/openssl-1.1.1t/crypto/bn/bn_local.h +++ b/src/openssl/openssl-1.1.1w/crypto/bn/bn_local.h @@ -283,20 +283,6 @@ struct bn_gencb_st { } cb; }; -struct bn_blinding_st { - BIGNUM *A; - BIGNUM *Ai; - BIGNUM *e; - BIGNUM *mod; /* just a reference */ - CRYPTO_THREAD_ID tid; - int counter; - unsigned long flags; - BN_MONT_CTX *m_ctx; - int (*bn_mod_exp) (BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); - CRYPTO_RWLOCK *lock; -}; - /*- * BN_window_bits_for_exponent_size -- macro for sliding window mod_exp functions * @@ -529,10 +515,10 @@ unsigned __int64 _umul128(unsigned __int64 a, unsigned __int64 b, ret = (r); \ BN_UMULT_LOHI(low,high,w,tmp); \ ret += (c); \ - (c) = (ret<(c))?1:0; \ + (c) = (ret<(c)); \ (c) += high; \ ret += low; \ - (c) += (ret>(BN_BITS4-1); \ m =(m&BN_MASK2l)<<(BN_BITS4+1); \ - l=(l+m)&BN_MASK2; if (l < m) h++; \ + l=(l+m)&BN_MASK2; h += (l < m); \ (lo)=l; \ (ho)=h; \ } @@ -637,9 +623,9 @@ unsigned __int64 _umul128(unsigned __int64 a, unsigned __int64 b, mul64(l,h,(bl),(bh)); \ \ /* non-multiply part */ \ - l=(l+(c))&BN_MASK2; if (l < (c)) h++; \ + l=(l+(c))&BN_MASK2; h += (l < (c)); \ (c)=(r); \ - l=(l+(c))&BN_MASK2; if (l < (c)) h++; \ + l=(l+(c))&BN_MASK2; h += (l < (c)); \ (c)=h&BN_MASK2; \ (r)=l; \ } @@ -653,7 +639,7 @@ unsigned __int64 _umul128(unsigned __int64 a, unsigned __int64 b, mul64(l,h,(bl),(bh)); \ \ /* non-multiply part */ \ - l+=(c); if ((l&BN_MASK2) < (c)) h++; \ + l+=(c); h += ((l&BN_MASK2) < (c)); \ (c)=h&BN_MASK2; \ (r)=l&BN_MASK2; \ } @@ -683,7 +669,7 @@ BN_ULONG bn_sub_part_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b, int cl, int dl); int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, const BN_ULONG *np, const BN_ULONG *n0, int num); - +void bn_correct_top_consttime(BIGNUM *a); BIGNUM *int_bn_mod_inverse(BIGNUM *in, const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx, int *noinv); diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_mod.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_mod.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_mod.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_mod.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_mont.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_mont.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_mont.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_mont.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_mpi.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_mpi.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_mpi.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_mpi.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_mul.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_mul.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_mul.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_mul.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_nist.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_nist.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_nist.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_nist.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_prime.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_prime.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_prime.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_prime.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_prime.h b/src/openssl/openssl-1.1.1w/crypto/bn/bn_prime.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_prime.h rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_prime.h diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_prime.pl b/src/openssl/openssl-1.1.1w/crypto/bn/bn_prime.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_prime.pl rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_prime.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_print.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_print.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_print.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_print.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_rand.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_rand.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_rand.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_rand.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_recp.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_recp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_recp.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_recp.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_shift.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_shift.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_shift.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_shift.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_sqr.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_sqr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_sqr.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_sqr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_sqrt.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_sqrt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_sqrt.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_sqrt.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_srp.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_srp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_srp.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_srp.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_word.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_word.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_word.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_word.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/bn_x931p.c b/src/openssl/openssl-1.1.1w/crypto/bn/bn_x931p.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/bn_x931p.c rename to src/openssl/openssl-1.1.1w/crypto/bn/bn_x931p.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/build.info b/src/openssl/openssl-1.1.1w/crypto/bn/build.info similarity index 98% rename from src/openssl/openssl-1.1.1t/crypto/bn/build.info rename to src/openssl/openssl-1.1.1w/crypto/bn/build.info index c9fe2fdad..b9ed5322f 100644 --- a/src/openssl/openssl-1.1.1t/crypto/bn/build.info +++ b/src/openssl/openssl-1.1.1w/crypto/bn/build.info @@ -5,8 +5,7 @@ SOURCE[../../libcrypto]=\ bn_kron.c bn_sqrt.c bn_gcd.c bn_prime.c bn_err.c bn_sqr.c \ {- $target{bn_asm_src} -} \ bn_recp.c bn_mont.c bn_mpi.c bn_exp2.c bn_gf2m.c bn_nist.c \ - bn_depr.c bn_const.c bn_x931p.c bn_intern.c bn_dh.c bn_srp.c \ - rsa_sup_mul.c + bn_depr.c bn_const.c bn_x931p.c bn_intern.c bn_dh.c bn_srp.c INCLUDE[bn_exp.o]=.. diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/rsaz_exp.c b/src/openssl/openssl-1.1.1w/crypto/bn/rsaz_exp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/rsaz_exp.c rename to src/openssl/openssl-1.1.1w/crypto/bn/rsaz_exp.c diff --git a/src/openssl/openssl-1.1.1t/crypto/bn/rsaz_exp.h b/src/openssl/openssl-1.1.1w/crypto/bn/rsaz_exp.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/bn/rsaz_exp.h rename to src/openssl/openssl-1.1.1w/crypto/bn/rsaz_exp.h diff --git a/src/openssl/openssl-1.1.1t/crypto/buffer/buf_err.c b/src/openssl/openssl-1.1.1w/crypto/buffer/buf_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/buffer/buf_err.c rename to src/openssl/openssl-1.1.1w/crypto/buffer/buf_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/buffer/buffer.c b/src/openssl/openssl-1.1.1w/crypto/buffer/buffer.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/buffer/buffer.c rename to src/openssl/openssl-1.1.1w/crypto/buffer/buffer.c diff --git a/src/openssl/openssl-1.1.1t/crypto/buffer/build.info b/src/openssl/openssl-1.1.1w/crypto/buffer/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/buffer/build.info rename to src/openssl/openssl-1.1.1w/crypto/buffer/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/build.info b/src/openssl/openssl-1.1.1w/crypto/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/build.info rename to src/openssl/openssl-1.1.1w/crypto/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/c64xpluscpuid.pl b/src/openssl/openssl-1.1.1w/crypto/c64xpluscpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/c64xpluscpuid.pl rename to src/openssl/openssl-1.1.1w/crypto/c64xpluscpuid.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/camellia/asm/cmll-x86.pl b/src/openssl/openssl-1.1.1w/crypto/camellia/asm/cmll-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/camellia/asm/cmll-x86.pl rename to src/openssl/openssl-1.1.1w/crypto/camellia/asm/cmll-x86.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/camellia/asm/cmll-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/camellia/asm/cmll-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/camellia/asm/cmll-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/camellia/asm/cmll-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/camellia/asm/cmllt4-sparcv9.pl b/src/openssl/openssl-1.1.1w/crypto/camellia/asm/cmllt4-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/camellia/asm/cmllt4-sparcv9.pl rename to src/openssl/openssl-1.1.1w/crypto/camellia/asm/cmllt4-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/camellia/build.info b/src/openssl/openssl-1.1.1w/crypto/camellia/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/camellia/build.info rename to src/openssl/openssl-1.1.1w/crypto/camellia/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/camellia/camellia.c b/src/openssl/openssl-1.1.1w/crypto/camellia/camellia.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/camellia/camellia.c rename to src/openssl/openssl-1.1.1w/crypto/camellia/camellia.c diff --git a/src/openssl/openssl-1.1.1t/crypto/camellia/cmll_cbc.c b/src/openssl/openssl-1.1.1w/crypto/camellia/cmll_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/camellia/cmll_cbc.c rename to src/openssl/openssl-1.1.1w/crypto/camellia/cmll_cbc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/camellia/cmll_cfb.c b/src/openssl/openssl-1.1.1w/crypto/camellia/cmll_cfb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/camellia/cmll_cfb.c rename to src/openssl/openssl-1.1.1w/crypto/camellia/cmll_cfb.c diff --git a/src/openssl/openssl-1.1.1t/crypto/camellia/cmll_ctr.c b/src/openssl/openssl-1.1.1w/crypto/camellia/cmll_ctr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/camellia/cmll_ctr.c rename to src/openssl/openssl-1.1.1w/crypto/camellia/cmll_ctr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/camellia/cmll_ecb.c b/src/openssl/openssl-1.1.1w/crypto/camellia/cmll_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/camellia/cmll_ecb.c rename to src/openssl/openssl-1.1.1w/crypto/camellia/cmll_ecb.c diff --git a/src/openssl/openssl-1.1.1t/crypto/camellia/cmll_local.h b/src/openssl/openssl-1.1.1w/crypto/camellia/cmll_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/camellia/cmll_local.h rename to src/openssl/openssl-1.1.1w/crypto/camellia/cmll_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/camellia/cmll_misc.c b/src/openssl/openssl-1.1.1w/crypto/camellia/cmll_misc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/camellia/cmll_misc.c rename to src/openssl/openssl-1.1.1w/crypto/camellia/cmll_misc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/camellia/cmll_ofb.c b/src/openssl/openssl-1.1.1w/crypto/camellia/cmll_ofb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/camellia/cmll_ofb.c rename to src/openssl/openssl-1.1.1w/crypto/camellia/cmll_ofb.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cast/asm/cast-586.pl b/src/openssl/openssl-1.1.1w/crypto/cast/asm/cast-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cast/asm/cast-586.pl rename to src/openssl/openssl-1.1.1w/crypto/cast/asm/cast-586.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/cast/build.info b/src/openssl/openssl-1.1.1w/crypto/cast/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cast/build.info rename to src/openssl/openssl-1.1.1w/crypto/cast/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/cast/c_cfb64.c b/src/openssl/openssl-1.1.1w/crypto/cast/c_cfb64.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cast/c_cfb64.c rename to src/openssl/openssl-1.1.1w/crypto/cast/c_cfb64.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cast/c_ecb.c b/src/openssl/openssl-1.1.1w/crypto/cast/c_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cast/c_ecb.c rename to src/openssl/openssl-1.1.1w/crypto/cast/c_ecb.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cast/c_enc.c b/src/openssl/openssl-1.1.1w/crypto/cast/c_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cast/c_enc.c rename to src/openssl/openssl-1.1.1w/crypto/cast/c_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cast/c_ofb64.c b/src/openssl/openssl-1.1.1w/crypto/cast/c_ofb64.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cast/c_ofb64.c rename to src/openssl/openssl-1.1.1w/crypto/cast/c_ofb64.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cast/c_skey.c b/src/openssl/openssl-1.1.1w/crypto/cast/c_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cast/c_skey.c rename to src/openssl/openssl-1.1.1w/crypto/cast/c_skey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cast/cast_local.h b/src/openssl/openssl-1.1.1w/crypto/cast/cast_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cast/cast_local.h rename to src/openssl/openssl-1.1.1w/crypto/cast/cast_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/cast/cast_s.h b/src/openssl/openssl-1.1.1w/crypto/cast/cast_s.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cast/cast_s.h rename to src/openssl/openssl-1.1.1w/crypto/cast/cast_s.h diff --git a/src/openssl/openssl-1.1.1t/crypto/chacha/asm/chacha-armv4.pl b/src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/chacha/asm/chacha-armv4.pl rename to src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-armv4.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/chacha/asm/chacha-armv8.pl b/src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/chacha/asm/chacha-armv8.pl rename to src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-armv8.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/chacha/asm/chacha-c64xplus.pl b/src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/chacha/asm/chacha-c64xplus.pl rename to src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/chacha/asm/chacha-ppc.pl b/src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/chacha/asm/chacha-ppc.pl rename to src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-ppc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/chacha/asm/chacha-s390x.pl b/src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/chacha/asm/chacha-s390x.pl rename to src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-s390x.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/chacha/asm/chacha-x86.pl b/src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/chacha/asm/chacha-x86.pl rename to src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-x86.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/chacha/asm/chacha-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/chacha/asm/chacha-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/chacha/asm/chacha-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/chacha/build.info b/src/openssl/openssl-1.1.1w/crypto/chacha/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/chacha/build.info rename to src/openssl/openssl-1.1.1w/crypto/chacha/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/chacha/chacha_enc.c b/src/openssl/openssl-1.1.1w/crypto/chacha/chacha_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/chacha/chacha_enc.c rename to src/openssl/openssl-1.1.1w/crypto/chacha/chacha_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cmac/build.info b/src/openssl/openssl-1.1.1w/crypto/cmac/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cmac/build.info rename to src/openssl/openssl-1.1.1w/crypto/cmac/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/cmac/cm_ameth.c b/src/openssl/openssl-1.1.1w/crypto/cmac/cm_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cmac/cm_ameth.c rename to src/openssl/openssl-1.1.1w/crypto/cmac/cm_ameth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cmac/cm_pmeth.c b/src/openssl/openssl-1.1.1w/crypto/cmac/cm_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cmac/cm_pmeth.c rename to src/openssl/openssl-1.1.1w/crypto/cmac/cm_pmeth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cmac/cmac.c b/src/openssl/openssl-1.1.1w/crypto/cmac/cmac.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cmac/cmac.c rename to src/openssl/openssl-1.1.1w/crypto/cmac/cmac.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/build.info b/src/openssl/openssl-1.1.1w/crypto/cms/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cms/build.info rename to src/openssl/openssl-1.1.1w/crypto/cms/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/cms_asn1.c b/src/openssl/openssl-1.1.1w/crypto/cms/cms_asn1.c similarity index 97% rename from src/openssl/openssl-1.1.1t/crypto/cms/cms_asn1.c rename to src/openssl/openssl-1.1.1w/crypto/cms/cms_asn1.c index 08069d72a..a62e11ecb 100644 --- a/src/openssl/openssl-1.1.1t/crypto/cms/cms_asn1.c +++ b/src/openssl/openssl-1.1.1w/crypto/cms/cms_asn1.c @@ -1,5 +1,5 @@ /* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -51,6 +51,7 @@ static int cms_si_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, EVP_PKEY_free(si->pkey); X509_free(si->signer); EVP_MD_CTX_free(si->mctx); + EVP_PKEY_CTX_free(si->pctx); } return 1; } @@ -89,11 +90,21 @@ ASN1_SEQUENCE(CMS_OriginatorInfo) = { ASN1_IMP_SET_OF_OPT(CMS_OriginatorInfo, crls, CMS_RevocationInfoChoice, 1) } static_ASN1_SEQUENCE_END(CMS_OriginatorInfo) -ASN1_NDEF_SEQUENCE(CMS_EncryptedContentInfo) = { +static int cms_ec_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it, + void *exarg) +{ + CMS_EncryptedContentInfo *ec = (CMS_EncryptedContentInfo *)*pval; + + if (operation == ASN1_OP_FREE_POST) + OPENSSL_clear_free(ec->key, ec->keylen); + return 1; +} + +ASN1_NDEF_SEQUENCE_cb(CMS_EncryptedContentInfo, cms_ec_cb) = { ASN1_SIMPLE(CMS_EncryptedContentInfo, contentType, ASN1_OBJECT), ASN1_SIMPLE(CMS_EncryptedContentInfo, contentEncryptionAlgorithm, X509_ALGOR), ASN1_IMP_OPT(CMS_EncryptedContentInfo, encryptedContent, ASN1_OCTET_STRING_NDEF, 0) -} static_ASN1_NDEF_SEQUENCE_END(CMS_EncryptedContentInfo) +} ASN1_NDEF_SEQUENCE_END_cb(CMS_EncryptedContentInfo, CMS_EncryptedContentInfo) ASN1_SEQUENCE(CMS_KeyTransRecipientInfo) = { ASN1_EMBED(CMS_KeyTransRecipientInfo, version, INT32), diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/cms_att.c b/src/openssl/openssl-1.1.1w/crypto/cms/cms_att.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cms/cms_att.c rename to src/openssl/openssl-1.1.1w/crypto/cms/cms_att.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/cms_cd.c b/src/openssl/openssl-1.1.1w/crypto/cms/cms_cd.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cms/cms_cd.c rename to src/openssl/openssl-1.1.1w/crypto/cms/cms_cd.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/cms_dd.c b/src/openssl/openssl-1.1.1w/crypto/cms/cms_dd.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cms/cms_dd.c rename to src/openssl/openssl-1.1.1w/crypto/cms/cms_dd.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/cms_enc.c b/src/openssl/openssl-1.1.1w/crypto/cms/cms_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cms/cms_enc.c rename to src/openssl/openssl-1.1.1w/crypto/cms/cms_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/cms_env.c b/src/openssl/openssl-1.1.1w/crypto/cms/cms_env.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cms/cms_env.c rename to src/openssl/openssl-1.1.1w/crypto/cms/cms_env.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/cms_err.c b/src/openssl/openssl-1.1.1w/crypto/cms/cms_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cms/cms_err.c rename to src/openssl/openssl-1.1.1w/crypto/cms/cms_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/cms_ess.c b/src/openssl/openssl-1.1.1w/crypto/cms/cms_ess.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cms/cms_ess.c rename to src/openssl/openssl-1.1.1w/crypto/cms/cms_ess.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/cms_io.c b/src/openssl/openssl-1.1.1w/crypto/cms/cms_io.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cms/cms_io.c rename to src/openssl/openssl-1.1.1w/crypto/cms/cms_io.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/cms_kari.c b/src/openssl/openssl-1.1.1w/crypto/cms/cms_kari.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cms/cms_kari.c rename to src/openssl/openssl-1.1.1w/crypto/cms/cms_kari.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/cms_lib.c b/src/openssl/openssl-1.1.1w/crypto/cms/cms_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cms/cms_lib.c rename to src/openssl/openssl-1.1.1w/crypto/cms/cms_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/cms_local.h b/src/openssl/openssl-1.1.1w/crypto/cms/cms_local.h similarity index 99% rename from src/openssl/openssl-1.1.1t/crypto/cms/cms_local.h rename to src/openssl/openssl-1.1.1w/crypto/cms/cms_local.h index a0ce4448f..09c0bdfe5 100644 --- a/src/openssl/openssl-1.1.1t/crypto/cms/cms_local.h +++ b/src/openssl/openssl-1.1.1w/crypto/cms/cms_local.h @@ -1,5 +1,5 @@ /* - * Copyright 2008-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -342,6 +342,7 @@ struct CMS_Receipt_st { DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo) DECLARE_ASN1_ITEM(CMS_SignerInfo) +DECLARE_ASN1_ITEM(CMS_EncryptedContentInfo) DECLARE_ASN1_ITEM(CMS_IssuerAndSerialNumber) DECLARE_ASN1_ITEM(CMS_Attributes_Sign) DECLARE_ASN1_ITEM(CMS_Attributes_Verify) diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/cms_pwri.c b/src/openssl/openssl-1.1.1w/crypto/cms/cms_pwri.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cms/cms_pwri.c rename to src/openssl/openssl-1.1.1w/crypto/cms/cms_pwri.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/cms_sd.c b/src/openssl/openssl-1.1.1w/crypto/cms/cms_sd.c similarity index 98% rename from src/openssl/openssl-1.1.1t/crypto/cms/cms_sd.c rename to src/openssl/openssl-1.1.1w/crypto/cms/cms_sd.c index 3f2a78256..9f67f9129 100644 --- a/src/openssl/openssl-1.1.1t/crypto/cms/cms_sd.c +++ b/src/openssl/openssl-1.1.1w/crypto/cms/cms_sd.c @@ -1,5 +1,5 @@ /* - * Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -375,6 +375,8 @@ CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms, } else if (EVP_DigestSignInit(si->mctx, &si->pctx, md, NULL, pk) <= 0) goto err; + else + EVP_MD_CTX_set_flags(si->mctx, EVP_MD_CTX_FLAG_KEEP_PKEY_CTX); } if (!sd->signerInfos) @@ -600,6 +602,7 @@ static int cms_SignerInfo_content_sign(CMS_ContentInfo *cms, unsigned char md[EVP_MAX_MD_SIZE]; unsigned int mdlen; pctx = si->pctx; + si->pctx = NULL; if (!EVP_DigestFinal_ex(mctx, md, &mdlen)) goto err; siglen = EVP_PKEY_size(si->pkey); @@ -680,6 +683,7 @@ int CMS_SignerInfo_sign(CMS_SignerInfo *si) EVP_MD_CTX_reset(mctx); if (EVP_DigestSignInit(mctx, &pctx, md, NULL, si->pkey) <= 0) goto err; + EVP_MD_CTX_set_flags(mctx, EVP_MD_CTX_FLAG_KEEP_PKEY_CTX); si->pctx = pctx; } @@ -745,8 +749,13 @@ int CMS_SignerInfo_verify(CMS_SignerInfo *si) return -1; } mctx = si->mctx; + if (si->pctx != NULL) { + EVP_PKEY_CTX_free(si->pctx); + si->pctx = NULL; + } if (EVP_DigestVerifyInit(mctx, &si->pctx, md, NULL, si->pkey) <= 0) goto err; + EVP_MD_CTX_set_flags(mctx, EVP_MD_CTX_FLAG_KEEP_PKEY_CTX); if (!cms_sd_asn1_ctrl(si, 1)) goto err; @@ -859,8 +868,11 @@ int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain) if (EVP_PKEY_CTX_set_signature_md(pkctx, md) <= 0) goto err; si->pctx = pkctx; - if (!cms_sd_asn1_ctrl(si, 1)) + if (!cms_sd_asn1_ctrl(si, 1)) { + si->pctx = NULL; goto err; + } + si->pctx = NULL; r = EVP_PKEY_verify(pkctx, si->signature->data, si->signature->length, mval, mlen); if (r <= 0) { diff --git a/src/openssl/openssl-1.1.1t/crypto/cms/cms_smime.c b/src/openssl/openssl-1.1.1w/crypto/cms/cms_smime.c similarity index 99% rename from src/openssl/openssl-1.1.1t/crypto/cms/cms_smime.c rename to src/openssl/openssl-1.1.1w/crypto/cms/cms_smime.c index 6e7dbc4da..f6c1c7d17 100644 --- a/src/openssl/openssl-1.1.1t/crypto/cms/cms_smime.c +++ b/src/openssl/openssl-1.1.1w/crypto/cms/cms_smime.c @@ -1,5 +1,5 @@ /* - * Copyright 2008-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2008-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -211,7 +211,7 @@ CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, if (cms == NULL) return NULL; if (!CMS_EncryptedData_set1_key(cms, cipher, key, keylen)) - return NULL; + goto err; if (!(flags & CMS_DETACHED)) CMS_set_detached(cms, 0); @@ -220,6 +220,7 @@ CMS_ContentInfo *CMS_EncryptedData_encrypt(BIO *in, const EVP_CIPHER *cipher, || CMS_final(cms, in, NULL, flags)) return cms; + err: CMS_ContentInfo_free(cms); return NULL; } diff --git a/src/openssl/openssl-1.1.1t/crypto/comp/build.info b/src/openssl/openssl-1.1.1w/crypto/comp/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/comp/build.info rename to src/openssl/openssl-1.1.1w/crypto/comp/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/comp/c_zlib.c b/src/openssl/openssl-1.1.1w/crypto/comp/c_zlib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/comp/c_zlib.c rename to src/openssl/openssl-1.1.1w/crypto/comp/c_zlib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/comp/comp_err.c b/src/openssl/openssl-1.1.1w/crypto/comp/comp_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/comp/comp_err.c rename to src/openssl/openssl-1.1.1w/crypto/comp/comp_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/comp/comp_lib.c b/src/openssl/openssl-1.1.1w/crypto/comp/comp_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/comp/comp_lib.c rename to src/openssl/openssl-1.1.1w/crypto/comp/comp_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/comp/comp_local.h b/src/openssl/openssl-1.1.1w/crypto/comp/comp_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/comp/comp_local.h rename to src/openssl/openssl-1.1.1w/crypto/comp/comp_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/conf/build.info b/src/openssl/openssl-1.1.1w/crypto/conf/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/conf/build.info rename to src/openssl/openssl-1.1.1w/crypto/conf/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/conf/conf_api.c b/src/openssl/openssl-1.1.1w/crypto/conf/conf_api.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/conf/conf_api.c rename to src/openssl/openssl-1.1.1w/crypto/conf/conf_api.c diff --git a/src/openssl/openssl-1.1.1t/crypto/conf/conf_def.c b/src/openssl/openssl-1.1.1w/crypto/conf/conf_def.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/conf/conf_def.c rename to src/openssl/openssl-1.1.1w/crypto/conf/conf_def.c diff --git a/src/openssl/openssl-1.1.1t/crypto/conf/conf_def.h b/src/openssl/openssl-1.1.1w/crypto/conf/conf_def.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/conf/conf_def.h rename to src/openssl/openssl-1.1.1w/crypto/conf/conf_def.h diff --git a/src/openssl/openssl-1.1.1t/crypto/conf/conf_err.c b/src/openssl/openssl-1.1.1w/crypto/conf/conf_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/conf/conf_err.c rename to src/openssl/openssl-1.1.1w/crypto/conf/conf_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/conf/conf_lib.c b/src/openssl/openssl-1.1.1w/crypto/conf/conf_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/conf/conf_lib.c rename to src/openssl/openssl-1.1.1w/crypto/conf/conf_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/conf/conf_local.h b/src/openssl/openssl-1.1.1w/crypto/conf/conf_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/conf/conf_local.h rename to src/openssl/openssl-1.1.1w/crypto/conf/conf_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/conf/conf_mall.c b/src/openssl/openssl-1.1.1w/crypto/conf/conf_mall.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/conf/conf_mall.c rename to src/openssl/openssl-1.1.1w/crypto/conf/conf_mall.c diff --git a/src/openssl/openssl-1.1.1t/crypto/conf/conf_mod.c b/src/openssl/openssl-1.1.1w/crypto/conf/conf_mod.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/conf/conf_mod.c rename to src/openssl/openssl-1.1.1w/crypto/conf/conf_mod.c diff --git a/src/openssl/openssl-1.1.1t/crypto/conf/conf_sap.c b/src/openssl/openssl-1.1.1w/crypto/conf/conf_sap.c similarity index 90% rename from src/openssl/openssl-1.1.1t/crypto/conf/conf_sap.c rename to src/openssl/openssl-1.1.1w/crypto/conf/conf_sap.c index 82105de74..db4f94ed9 100644 --- a/src/openssl/openssl-1.1.1t/crypto/conf/conf_sap.c +++ b/src/openssl/openssl-1.1.1w/crypto/conf/conf_sap.c @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -43,16 +43,19 @@ void OPENSSL_config(const char *appname) int openssl_config_int(const OPENSSL_INIT_SETTINGS *settings) { int ret = 0; +#if defined(OPENSSL_INIT_DEBUG) || !defined(OPENSSL_SYS_UEFI) const char *filename; const char *appname; unsigned long flags; +#endif if (openssl_configured) return 1; - +#if defined(OPENSSL_INIT_DEBUG) || !defined(OPENSSL_SYS_UEFI) filename = settings ? settings->filename : NULL; appname = settings ? settings->appname : NULL; flags = settings ? settings->flags : DEFAULT_CONF_MFLAGS; +#endif #ifdef OPENSSL_INIT_DEBUG fprintf(stderr, "OPENSSL_INIT: openssl_config_int(%s, %s, %lu)\n", diff --git a/src/openssl/openssl-1.1.1t/crypto/conf/conf_ssl.c b/src/openssl/openssl-1.1.1w/crypto/conf/conf_ssl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/conf/conf_ssl.c rename to src/openssl/openssl-1.1.1w/crypto/conf/conf_ssl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/conf/keysets.pl b/src/openssl/openssl-1.1.1w/crypto/conf/keysets.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/conf/keysets.pl rename to src/openssl/openssl-1.1.1w/crypto/conf/keysets.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/cpt_err.c b/src/openssl/openssl-1.1.1w/crypto/cpt_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cpt_err.c rename to src/openssl/openssl-1.1.1w/crypto/cpt_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cryptlib.c b/src/openssl/openssl-1.1.1w/crypto/cryptlib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cryptlib.c rename to src/openssl/openssl-1.1.1w/crypto/cryptlib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ct/build.info b/src/openssl/openssl-1.1.1w/crypto/ct/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ct/build.info rename to src/openssl/openssl-1.1.1w/crypto/ct/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/ct/ct_b64.c b/src/openssl/openssl-1.1.1w/crypto/ct/ct_b64.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ct/ct_b64.c rename to src/openssl/openssl-1.1.1w/crypto/ct/ct_b64.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ct/ct_err.c b/src/openssl/openssl-1.1.1w/crypto/ct/ct_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ct/ct_err.c rename to src/openssl/openssl-1.1.1w/crypto/ct/ct_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ct/ct_local.h b/src/openssl/openssl-1.1.1w/crypto/ct/ct_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ct/ct_local.h rename to src/openssl/openssl-1.1.1w/crypto/ct/ct_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ct/ct_log.c b/src/openssl/openssl-1.1.1w/crypto/ct/ct_log.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ct/ct_log.c rename to src/openssl/openssl-1.1.1w/crypto/ct/ct_log.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ct/ct_oct.c b/src/openssl/openssl-1.1.1w/crypto/ct/ct_oct.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ct/ct_oct.c rename to src/openssl/openssl-1.1.1w/crypto/ct/ct_oct.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ct/ct_policy.c b/src/openssl/openssl-1.1.1w/crypto/ct/ct_policy.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ct/ct_policy.c rename to src/openssl/openssl-1.1.1w/crypto/ct/ct_policy.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ct/ct_prn.c b/src/openssl/openssl-1.1.1w/crypto/ct/ct_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ct/ct_prn.c rename to src/openssl/openssl-1.1.1w/crypto/ct/ct_prn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ct/ct_sct.c b/src/openssl/openssl-1.1.1w/crypto/ct/ct_sct.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ct/ct_sct.c rename to src/openssl/openssl-1.1.1w/crypto/ct/ct_sct.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ct/ct_sct_ctx.c b/src/openssl/openssl-1.1.1w/crypto/ct/ct_sct_ctx.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ct/ct_sct_ctx.c rename to src/openssl/openssl-1.1.1w/crypto/ct/ct_sct_ctx.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ct/ct_vfy.c b/src/openssl/openssl-1.1.1w/crypto/ct/ct_vfy.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ct/ct_vfy.c rename to src/openssl/openssl-1.1.1w/crypto/ct/ct_vfy.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ct/ct_x509v3.c b/src/openssl/openssl-1.1.1w/crypto/ct/ct_x509v3.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ct/ct_x509v3.c rename to src/openssl/openssl-1.1.1w/crypto/ct/ct_x509v3.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ctype.c b/src/openssl/openssl-1.1.1w/crypto/ctype.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ctype.c rename to src/openssl/openssl-1.1.1w/crypto/ctype.c diff --git a/src/openssl/openssl-1.1.1t/crypto/cversion.c b/src/openssl/openssl-1.1.1w/crypto/cversion.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/cversion.c rename to src/openssl/openssl-1.1.1w/crypto/cversion.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/asm/crypt586.pl b/src/openssl/openssl-1.1.1w/crypto/des/asm/crypt586.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/asm/crypt586.pl rename to src/openssl/openssl-1.1.1w/crypto/des/asm/crypt586.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/des/asm/des-586.pl b/src/openssl/openssl-1.1.1w/crypto/des/asm/des-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/asm/des-586.pl rename to src/openssl/openssl-1.1.1w/crypto/des/asm/des-586.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/des/asm/des_enc.m4 b/src/openssl/openssl-1.1.1w/crypto/des/asm/des_enc.m4 similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/asm/des_enc.m4 rename to src/openssl/openssl-1.1.1w/crypto/des/asm/des_enc.m4 diff --git a/src/openssl/openssl-1.1.1t/crypto/des/asm/desboth.pl b/src/openssl/openssl-1.1.1w/crypto/des/asm/desboth.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/asm/desboth.pl rename to src/openssl/openssl-1.1.1w/crypto/des/asm/desboth.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/des/asm/dest4-sparcv9.pl b/src/openssl/openssl-1.1.1w/crypto/des/asm/dest4-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/asm/dest4-sparcv9.pl rename to src/openssl/openssl-1.1.1w/crypto/des/asm/dest4-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/des/build.info b/src/openssl/openssl-1.1.1w/crypto/des/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/build.info rename to src/openssl/openssl-1.1.1w/crypto/des/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/des/cbc_cksm.c b/src/openssl/openssl-1.1.1w/crypto/des/cbc_cksm.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/cbc_cksm.c rename to src/openssl/openssl-1.1.1w/crypto/des/cbc_cksm.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/cbc_enc.c b/src/openssl/openssl-1.1.1w/crypto/des/cbc_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/cbc_enc.c rename to src/openssl/openssl-1.1.1w/crypto/des/cbc_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/cfb64ede.c b/src/openssl/openssl-1.1.1w/crypto/des/cfb64ede.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/cfb64ede.c rename to src/openssl/openssl-1.1.1w/crypto/des/cfb64ede.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/cfb64enc.c b/src/openssl/openssl-1.1.1w/crypto/des/cfb64enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/cfb64enc.c rename to src/openssl/openssl-1.1.1w/crypto/des/cfb64enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/cfb_enc.c b/src/openssl/openssl-1.1.1w/crypto/des/cfb_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/cfb_enc.c rename to src/openssl/openssl-1.1.1w/crypto/des/cfb_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/des_enc.c b/src/openssl/openssl-1.1.1w/crypto/des/des_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/des_enc.c rename to src/openssl/openssl-1.1.1w/crypto/des/des_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/des_local.h b/src/openssl/openssl-1.1.1w/crypto/des/des_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/des_local.h rename to src/openssl/openssl-1.1.1w/crypto/des/des_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/des/ecb3_enc.c b/src/openssl/openssl-1.1.1w/crypto/des/ecb3_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/ecb3_enc.c rename to src/openssl/openssl-1.1.1w/crypto/des/ecb3_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/ecb_enc.c b/src/openssl/openssl-1.1.1w/crypto/des/ecb_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/ecb_enc.c rename to src/openssl/openssl-1.1.1w/crypto/des/ecb_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/fcrypt.c b/src/openssl/openssl-1.1.1w/crypto/des/fcrypt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/fcrypt.c rename to src/openssl/openssl-1.1.1w/crypto/des/fcrypt.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/fcrypt_b.c b/src/openssl/openssl-1.1.1w/crypto/des/fcrypt_b.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/fcrypt_b.c rename to src/openssl/openssl-1.1.1w/crypto/des/fcrypt_b.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/ncbc_enc.c b/src/openssl/openssl-1.1.1w/crypto/des/ncbc_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/ncbc_enc.c rename to src/openssl/openssl-1.1.1w/crypto/des/ncbc_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/ofb64ede.c b/src/openssl/openssl-1.1.1w/crypto/des/ofb64ede.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/ofb64ede.c rename to src/openssl/openssl-1.1.1w/crypto/des/ofb64ede.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/ofb64enc.c b/src/openssl/openssl-1.1.1w/crypto/des/ofb64enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/ofb64enc.c rename to src/openssl/openssl-1.1.1w/crypto/des/ofb64enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/ofb_enc.c b/src/openssl/openssl-1.1.1w/crypto/des/ofb_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/ofb_enc.c rename to src/openssl/openssl-1.1.1w/crypto/des/ofb_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/pcbc_enc.c b/src/openssl/openssl-1.1.1w/crypto/des/pcbc_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/pcbc_enc.c rename to src/openssl/openssl-1.1.1w/crypto/des/pcbc_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/qud_cksm.c b/src/openssl/openssl-1.1.1w/crypto/des/qud_cksm.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/qud_cksm.c rename to src/openssl/openssl-1.1.1w/crypto/des/qud_cksm.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/rand_key.c b/src/openssl/openssl-1.1.1w/crypto/des/rand_key.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/rand_key.c rename to src/openssl/openssl-1.1.1w/crypto/des/rand_key.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/set_key.c b/src/openssl/openssl-1.1.1w/crypto/des/set_key.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/set_key.c rename to src/openssl/openssl-1.1.1w/crypto/des/set_key.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/spr.h b/src/openssl/openssl-1.1.1w/crypto/des/spr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/spr.h rename to src/openssl/openssl-1.1.1w/crypto/des/spr.h diff --git a/src/openssl/openssl-1.1.1t/crypto/des/str2key.c b/src/openssl/openssl-1.1.1w/crypto/des/str2key.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/str2key.c rename to src/openssl/openssl-1.1.1w/crypto/des/str2key.c diff --git a/src/openssl/openssl-1.1.1t/crypto/des/xcbc_enc.c b/src/openssl/openssl-1.1.1w/crypto/des/xcbc_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/des/xcbc_enc.c rename to src/openssl/openssl-1.1.1w/crypto/des/xcbc_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/build.info b/src/openssl/openssl-1.1.1w/crypto/dh/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/build.info rename to src/openssl/openssl-1.1.1w/crypto/dh/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh1024.pem b/src/openssl/openssl-1.1.1w/crypto/dh/dh1024.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh1024.pem rename to src/openssl/openssl-1.1.1w/crypto/dh/dh1024.pem diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh192.pem b/src/openssl/openssl-1.1.1w/crypto/dh/dh192.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh192.pem rename to src/openssl/openssl-1.1.1w/crypto/dh/dh192.pem diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh2048.pem b/src/openssl/openssl-1.1.1w/crypto/dh/dh2048.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh2048.pem rename to src/openssl/openssl-1.1.1w/crypto/dh/dh2048.pem diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh4096.pem b/src/openssl/openssl-1.1.1w/crypto/dh/dh4096.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh4096.pem rename to src/openssl/openssl-1.1.1w/crypto/dh/dh4096.pem diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh512.pem b/src/openssl/openssl-1.1.1w/crypto/dh/dh512.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh512.pem rename to src/openssl/openssl-1.1.1w/crypto/dh/dh512.pem diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh_ameth.c b/src/openssl/openssl-1.1.1w/crypto/dh/dh_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh_ameth.c rename to src/openssl/openssl-1.1.1w/crypto/dh/dh_ameth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh_asn1.c b/src/openssl/openssl-1.1.1w/crypto/dh/dh_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh_asn1.c rename to src/openssl/openssl-1.1.1w/crypto/dh/dh_asn1.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh_check.c b/src/openssl/openssl-1.1.1w/crypto/dh/dh_check.c similarity index 91% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh_check.c rename to src/openssl/openssl-1.1.1w/crypto/dh/dh_check.c index 4ac169e75..ae1b03bc9 100644 --- a/src/openssl/openssl-1.1.1t/crypto/dh/dh_check.c +++ b/src/openssl/openssl-1.1.1w/crypto/dh/dh_check.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -97,10 +97,17 @@ int DH_check_ex(const DH *dh) int DH_check(const DH *dh, int *ret) { - int ok = 0, r; + int ok = 0, r, q_good = 0; BN_CTX *ctx = NULL; BIGNUM *t1 = NULL, *t2 = NULL; + /* Don't do any checks at all with an excessively large modulus */ + if (BN_num_bits(dh->p) > OPENSSL_DH_CHECK_MAX_MODULUS_BITS) { + DHerr(DH_F_DH_CHECK, DH_R_MODULUS_TOO_LARGE); + *ret = DH_CHECK_P_NOT_PRIME; + return 0; + } + if (!DH_check_params(dh, ret)) return 0; @@ -113,7 +120,14 @@ int DH_check(const DH *dh, int *ret) if (t2 == NULL) goto err; - if (dh->q) { + if (dh->q != NULL) { + if (BN_ucmp(dh->p, dh->q) > 0) + q_good = 1; + else + *ret |= DH_CHECK_INVALID_Q_VALUE; + } + + if (q_good) { if (BN_cmp(dh->g, BN_value_one()) <= 0) *ret |= DH_NOT_SUITABLE_GENERATOR; else if (BN_cmp(dh->g, dh->p) >= 0) diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh_depr.c b/src/openssl/openssl-1.1.1w/crypto/dh/dh_depr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh_depr.c rename to src/openssl/openssl-1.1.1w/crypto/dh/dh_depr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh_err.c b/src/openssl/openssl-1.1.1w/crypto/dh/dh_err.c similarity index 97% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh_err.c rename to src/openssl/openssl-1.1.1w/crypto/dh/dh_err.c index 7285587b4..92800d3fc 100644 --- a/src/openssl/openssl-1.1.1t/crypto/dh/dh_err.c +++ b/src/openssl/openssl-1.1.1w/crypto/dh/dh_err.c @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -18,6 +18,7 @@ static const ERR_STRING_DATA DH_str_functs[] = { {ERR_PACK(ERR_LIB_DH, DH_F_DHPARAMS_PRINT_FP, 0), "DHparams_print_fp"}, {ERR_PACK(ERR_LIB_DH, DH_F_DH_BUILTIN_GENPARAMS, 0), "dh_builtin_genparams"}, + {ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK, 0), "DH_check"}, {ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK_EX, 0), "DH_check_ex"}, {ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK_PARAMS_EX, 0), "DH_check_params_ex"}, {ERR_PACK(ERR_LIB_DH, DH_F_DH_CHECK_PUB_KEY_EX, 0), "DH_check_pub_key_ex"}, diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh_gen.c b/src/openssl/openssl-1.1.1w/crypto/dh/dh_gen.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh_gen.c rename to src/openssl/openssl-1.1.1w/crypto/dh/dh_gen.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh_kdf.c b/src/openssl/openssl-1.1.1w/crypto/dh/dh_kdf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh_kdf.c rename to src/openssl/openssl-1.1.1w/crypto/dh/dh_kdf.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh_key.c b/src/openssl/openssl-1.1.1w/crypto/dh/dh_key.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh_key.c rename to src/openssl/openssl-1.1.1w/crypto/dh/dh_key.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh_lib.c b/src/openssl/openssl-1.1.1w/crypto/dh/dh_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh_lib.c rename to src/openssl/openssl-1.1.1w/crypto/dh/dh_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh_local.h b/src/openssl/openssl-1.1.1w/crypto/dh/dh_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh_local.h rename to src/openssl/openssl-1.1.1w/crypto/dh/dh_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh_meth.c b/src/openssl/openssl-1.1.1w/crypto/dh/dh_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh_meth.c rename to src/openssl/openssl-1.1.1w/crypto/dh/dh_meth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh_pmeth.c b/src/openssl/openssl-1.1.1w/crypto/dh/dh_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh_pmeth.c rename to src/openssl/openssl-1.1.1w/crypto/dh/dh_pmeth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh_prn.c b/src/openssl/openssl-1.1.1w/crypto/dh/dh_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh_prn.c rename to src/openssl/openssl-1.1.1w/crypto/dh/dh_prn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh_rfc5114.c b/src/openssl/openssl-1.1.1w/crypto/dh/dh_rfc5114.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh_rfc5114.c rename to src/openssl/openssl-1.1.1w/crypto/dh/dh_rfc5114.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dh/dh_rfc7919.c b/src/openssl/openssl-1.1.1w/crypto/dh/dh_rfc7919.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dh/dh_rfc7919.c rename to src/openssl/openssl-1.1.1w/crypto/dh/dh_rfc7919.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dllmain.c b/src/openssl/openssl-1.1.1w/crypto/dllmain.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dllmain.c rename to src/openssl/openssl-1.1.1w/crypto/dllmain.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dsa/build.info b/src/openssl/openssl-1.1.1w/crypto/dsa/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dsa/build.info rename to src/openssl/openssl-1.1.1w/crypto/dsa/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/dsa/dsa_ameth.c b/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dsa/dsa_ameth.c rename to src/openssl/openssl-1.1.1w/crypto/dsa/dsa_ameth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dsa/dsa_asn1.c b/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dsa/dsa_asn1.c rename to src/openssl/openssl-1.1.1w/crypto/dsa/dsa_asn1.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dsa/dsa_depr.c b/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_depr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dsa/dsa_depr.c rename to src/openssl/openssl-1.1.1w/crypto/dsa/dsa_depr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dsa/dsa_err.c b/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dsa/dsa_err.c rename to src/openssl/openssl-1.1.1w/crypto/dsa/dsa_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dsa/dsa_gen.c b/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_gen.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dsa/dsa_gen.c rename to src/openssl/openssl-1.1.1w/crypto/dsa/dsa_gen.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dsa/dsa_key.c b/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_key.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dsa/dsa_key.c rename to src/openssl/openssl-1.1.1w/crypto/dsa/dsa_key.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dsa/dsa_lib.c b/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dsa/dsa_lib.c rename to src/openssl/openssl-1.1.1w/crypto/dsa/dsa_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dsa/dsa_local.h b/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dsa/dsa_local.h rename to src/openssl/openssl-1.1.1w/crypto/dsa/dsa_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/dsa/dsa_meth.c b/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dsa/dsa_meth.c rename to src/openssl/openssl-1.1.1w/crypto/dsa/dsa_meth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dsa/dsa_ossl.c b/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_ossl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dsa/dsa_ossl.c rename to src/openssl/openssl-1.1.1w/crypto/dsa/dsa_ossl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dsa/dsa_pmeth.c b/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dsa/dsa_pmeth.c rename to src/openssl/openssl-1.1.1w/crypto/dsa/dsa_pmeth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dsa/dsa_prn.c b/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dsa/dsa_prn.c rename to src/openssl/openssl-1.1.1w/crypto/dsa/dsa_prn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dsa/dsa_sign.c b/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dsa/dsa_sign.c rename to src/openssl/openssl-1.1.1w/crypto/dsa/dsa_sign.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dsa/dsa_vrf.c b/src/openssl/openssl-1.1.1w/crypto/dsa/dsa_vrf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dsa/dsa_vrf.c rename to src/openssl/openssl-1.1.1w/crypto/dsa/dsa_vrf.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dso/build.info b/src/openssl/openssl-1.1.1w/crypto/dso/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dso/build.info rename to src/openssl/openssl-1.1.1w/crypto/dso/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/dso/dso_dl.c b/src/openssl/openssl-1.1.1w/crypto/dso/dso_dl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dso/dso_dl.c rename to src/openssl/openssl-1.1.1w/crypto/dso/dso_dl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dso/dso_dlfcn.c b/src/openssl/openssl-1.1.1w/crypto/dso/dso_dlfcn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dso/dso_dlfcn.c rename to src/openssl/openssl-1.1.1w/crypto/dso/dso_dlfcn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dso/dso_err.c b/src/openssl/openssl-1.1.1w/crypto/dso/dso_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dso/dso_err.c rename to src/openssl/openssl-1.1.1w/crypto/dso/dso_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dso/dso_lib.c b/src/openssl/openssl-1.1.1w/crypto/dso/dso_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dso/dso_lib.c rename to src/openssl/openssl-1.1.1w/crypto/dso/dso_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dso/dso_local.h b/src/openssl/openssl-1.1.1w/crypto/dso/dso_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dso/dso_local.h rename to src/openssl/openssl-1.1.1w/crypto/dso/dso_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/dso/dso_openssl.c b/src/openssl/openssl-1.1.1w/crypto/dso/dso_openssl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dso/dso_openssl.c rename to src/openssl/openssl-1.1.1w/crypto/dso/dso_openssl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dso/dso_vms.c b/src/openssl/openssl-1.1.1w/crypto/dso/dso_vms.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dso/dso_vms.c rename to src/openssl/openssl-1.1.1w/crypto/dso/dso_vms.c diff --git a/src/openssl/openssl-1.1.1t/crypto/dso/dso_win32.c b/src/openssl/openssl-1.1.1w/crypto/dso/dso_win32.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/dso/dso_win32.c rename to src/openssl/openssl-1.1.1w/crypto/dso/dso_win32.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ebcdic.c b/src/openssl/openssl-1.1.1w/crypto/ebcdic.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ebcdic.c rename to src/openssl/openssl-1.1.1w/crypto/ebcdic.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/asm/ecp_nistz256-armv4.pl b/src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/asm/ecp_nistz256-armv4.pl rename to src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-armv4.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/asm/ecp_nistz256-armv8.pl b/src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/asm/ecp_nistz256-armv8.pl rename to src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-armv8.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/asm/ecp_nistz256-ppc64.pl b/src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-ppc64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/asm/ecp_nistz256-ppc64.pl rename to src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-ppc64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/asm/ecp_nistz256-sparcv9.pl b/src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/asm/ecp_nistz256-sparcv9.pl rename to src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/asm/ecp_nistz256-x86.pl b/src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/asm/ecp_nistz256-x86.pl rename to src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-x86.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/asm/ecp_nistz256-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/asm/ecp_nistz256-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/ec/asm/ecp_nistz256-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/asm/x25519-ppc64.pl b/src/openssl/openssl-1.1.1w/crypto/ec/asm/x25519-ppc64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/asm/x25519-ppc64.pl rename to src/openssl/openssl-1.1.1w/crypto/ec/asm/x25519-ppc64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/asm/x25519-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/ec/asm/x25519-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/asm/x25519-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/ec/asm/x25519-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/build.info b/src/openssl/openssl-1.1.1w/crypto/ec/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/build.info rename to src/openssl/openssl-1.1.1w/crypto/ec/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/curve25519.c b/src/openssl/openssl-1.1.1w/crypto/ec/curve25519.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/curve25519.c rename to src/openssl/openssl-1.1.1w/crypto/ec/curve25519.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/curve448/arch_32/arch_intrinsics.h b/src/openssl/openssl-1.1.1w/crypto/ec/curve448/arch_32/arch_intrinsics.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/curve448/arch_32/arch_intrinsics.h rename to src/openssl/openssl-1.1.1w/crypto/ec/curve448/arch_32/arch_intrinsics.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/curve448/arch_32/f_impl.c b/src/openssl/openssl-1.1.1w/crypto/ec/curve448/arch_32/f_impl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/curve448/arch_32/f_impl.c rename to src/openssl/openssl-1.1.1w/crypto/ec/curve448/arch_32/f_impl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/curve448/arch_32/f_impl.h b/src/openssl/openssl-1.1.1w/crypto/ec/curve448/arch_32/f_impl.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/curve448/arch_32/f_impl.h rename to src/openssl/openssl-1.1.1w/crypto/ec/curve448/arch_32/f_impl.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/curve448/curve448.c b/src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/curve448/curve448.c rename to src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/curve448/curve448_local.h b/src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/curve448/curve448_local.h rename to src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/curve448/curve448_tables.c b/src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448_tables.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/curve448/curve448_tables.c rename to src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448_tables.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/curve448/curve448utils.h b/src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448utils.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/curve448/curve448utils.h rename to src/openssl/openssl-1.1.1w/crypto/ec/curve448/curve448utils.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/curve448/ed448.h b/src/openssl/openssl-1.1.1w/crypto/ec/curve448/ed448.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/curve448/ed448.h rename to src/openssl/openssl-1.1.1w/crypto/ec/curve448/ed448.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/curve448/eddsa.c b/src/openssl/openssl-1.1.1w/crypto/ec/curve448/eddsa.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/curve448/eddsa.c rename to src/openssl/openssl-1.1.1w/crypto/ec/curve448/eddsa.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/curve448/f_generic.c b/src/openssl/openssl-1.1.1w/crypto/ec/curve448/f_generic.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/curve448/f_generic.c rename to src/openssl/openssl-1.1.1w/crypto/ec/curve448/f_generic.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/curve448/field.h b/src/openssl/openssl-1.1.1w/crypto/ec/curve448/field.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/curve448/field.h rename to src/openssl/openssl-1.1.1w/crypto/ec/curve448/field.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/curve448/point_448.h b/src/openssl/openssl-1.1.1w/crypto/ec/curve448/point_448.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/curve448/point_448.h rename to src/openssl/openssl-1.1.1w/crypto/ec/curve448/point_448.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/curve448/scalar.c b/src/openssl/openssl-1.1.1w/crypto/ec/curve448/scalar.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/curve448/scalar.c rename to src/openssl/openssl-1.1.1w/crypto/ec/curve448/scalar.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/curve448/word.h b/src/openssl/openssl-1.1.1w/crypto/ec/curve448/word.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/curve448/word.h rename to src/openssl/openssl-1.1.1w/crypto/ec/curve448/word.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec2_oct.c b/src/openssl/openssl-1.1.1w/crypto/ec/ec2_oct.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec2_oct.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ec2_oct.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec2_smpl.c b/src/openssl/openssl-1.1.1w/crypto/ec/ec2_smpl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec2_smpl.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ec2_smpl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec_ameth.c b/src/openssl/openssl-1.1.1w/crypto/ec/ec_ameth.c similarity index 98% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec_ameth.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ec_ameth.c index 5098bd7a6..5a63590a9 100644 --- a/src/openssl/openssl-1.1.1t/crypto/ec/ec_ameth.c +++ b/src/openssl/openssl-1.1.1w/crypto/ec/ec_ameth.c @@ -1,5 +1,5 @@ /* - * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -38,7 +38,6 @@ static int eckey_param2type(int *pptype, void **ppval, const EC_KEY *ec_key) ASN1_OBJECT *asn1obj = OBJ_nid2obj(nid); if (asn1obj == NULL || OBJ_length(asn1obj) == 0) { - ASN1_OBJECT_free(asn1obj); ECerr(EC_F_ECKEY_PARAM2TYPE, EC_R_MISSING_OID); return 0; } @@ -98,9 +97,7 @@ static int eckey_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey) ptype, pval, penc, penclen)) return 1; err: - if (ptype == V_ASN1_OBJECT) - ASN1_OBJECT_free(pval); - else + if (ptype == V_ASN1_SEQUENCE) ASN1_STRING_free(pval); OPENSSL_free(penc); return 0; @@ -256,24 +253,32 @@ static int eckey_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey) eplen = i2d_ECPrivateKey(&ec_key, NULL); if (!eplen) { + if (ptype == V_ASN1_SEQUENCE) + ASN1_STRING_free(pval); ECerr(EC_F_ECKEY_PRIV_ENCODE, ERR_R_EC_LIB); return 0; } ep = OPENSSL_malloc(eplen); if (ep == NULL) { + if (ptype == V_ASN1_SEQUENCE) + ASN1_STRING_free(pval); ECerr(EC_F_ECKEY_PRIV_ENCODE, ERR_R_MALLOC_FAILURE); return 0; } p = ep; if (!i2d_ECPrivateKey(&ec_key, &p)) { - OPENSSL_free(ep); + OPENSSL_clear_free(ep, eplen); + if (ptype == V_ASN1_SEQUENCE) + ASN1_STRING_free(pval); ECerr(EC_F_ECKEY_PRIV_ENCODE, ERR_R_EC_LIB); return 0; } if (!PKCS8_pkey_set0(p8, OBJ_nid2obj(NID_X9_62_id_ecPublicKey), 0, ptype, pval, ep, eplen)) { - OPENSSL_free(ep); + OPENSSL_clear_free(ep, eplen); + if (ptype == V_ASN1_SEQUENCE) + ASN1_STRING_free(pval); return 0; } diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec_asn1.c b/src/openssl/openssl-1.1.1w/crypto/ec/ec_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec_asn1.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ec_asn1.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec_check.c b/src/openssl/openssl-1.1.1w/crypto/ec/ec_check.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec_check.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ec_check.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec_curve.c b/src/openssl/openssl-1.1.1w/crypto/ec/ec_curve.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec_curve.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ec_curve.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec_cvt.c b/src/openssl/openssl-1.1.1w/crypto/ec/ec_cvt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec_cvt.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ec_cvt.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec_err.c b/src/openssl/openssl-1.1.1w/crypto/ec/ec_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec_err.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ec_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec_key.c b/src/openssl/openssl-1.1.1w/crypto/ec/ec_key.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec_key.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ec_key.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec_kmeth.c b/src/openssl/openssl-1.1.1w/crypto/ec/ec_kmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec_kmeth.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ec_kmeth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec_lib.c b/src/openssl/openssl-1.1.1w/crypto/ec/ec_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec_lib.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ec_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec_local.h b/src/openssl/openssl-1.1.1w/crypto/ec/ec_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec_local.h rename to src/openssl/openssl-1.1.1w/crypto/ec/ec_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec_mult.c b/src/openssl/openssl-1.1.1w/crypto/ec/ec_mult.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec_mult.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ec_mult.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec_oct.c b/src/openssl/openssl-1.1.1w/crypto/ec/ec_oct.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec_oct.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ec_oct.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec_pmeth.c b/src/openssl/openssl-1.1.1w/crypto/ec/ec_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec_pmeth.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ec_pmeth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ec_print.c b/src/openssl/openssl-1.1.1w/crypto/ec/ec_print.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ec_print.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ec_print.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecdh_kdf.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecdh_kdf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecdh_kdf.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecdh_kdf.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecdh_ossl.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecdh_ossl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecdh_ossl.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecdh_ossl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecdsa_ossl.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecdsa_ossl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecdsa_ossl.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecdsa_ossl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecdsa_sign.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecdsa_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecdsa_sign.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecdsa_sign.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecdsa_vrf.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecdsa_vrf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecdsa_vrf.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecdsa_vrf.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/eck_prn.c b/src/openssl/openssl-1.1.1w/crypto/ec/eck_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/eck_prn.c rename to src/openssl/openssl-1.1.1w/crypto/ec/eck_prn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecp_mont.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecp_mont.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecp_mont.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecp_mont.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecp_nist.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecp_nist.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecp_nist.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecp_nist.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecp_nistp224.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistp224.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecp_nistp224.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistp224.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecp_nistp256.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistp256.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecp_nistp256.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistp256.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecp_nistp521.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistp521.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecp_nistp521.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistp521.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecp_nistputil.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistputil.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecp_nistputil.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistputil.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecp_nistz256.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistz256.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecp_nistz256.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistz256.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecp_nistz256_table.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistz256_table.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecp_nistz256_table.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecp_nistz256_table.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecp_oct.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecp_oct.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecp_oct.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecp_oct.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecp_smpl.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecp_smpl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecp_smpl.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecp_smpl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ec/ecx_meth.c b/src/openssl/openssl-1.1.1w/crypto/ec/ecx_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ec/ecx_meth.c rename to src/openssl/openssl-1.1.1w/crypto/ec/ecx_meth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/README b/src/openssl/openssl-1.1.1w/crypto/engine/README similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/README rename to src/openssl/openssl-1.1.1w/crypto/engine/README diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/build.info b/src/openssl/openssl-1.1.1w/crypto/engine/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/build.info rename to src/openssl/openssl-1.1.1w/crypto/engine/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/eng_all.c b/src/openssl/openssl-1.1.1w/crypto/engine/eng_all.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/eng_all.c rename to src/openssl/openssl-1.1.1w/crypto/engine/eng_all.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/eng_cnf.c b/src/openssl/openssl-1.1.1w/crypto/engine/eng_cnf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/eng_cnf.c rename to src/openssl/openssl-1.1.1w/crypto/engine/eng_cnf.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/eng_ctrl.c b/src/openssl/openssl-1.1.1w/crypto/engine/eng_ctrl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/eng_ctrl.c rename to src/openssl/openssl-1.1.1w/crypto/engine/eng_ctrl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/eng_devcrypto.c b/src/openssl/openssl-1.1.1w/crypto/engine/eng_devcrypto.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/eng_devcrypto.c rename to src/openssl/openssl-1.1.1w/crypto/engine/eng_devcrypto.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/eng_dyn.c b/src/openssl/openssl-1.1.1w/crypto/engine/eng_dyn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/eng_dyn.c rename to src/openssl/openssl-1.1.1w/crypto/engine/eng_dyn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/eng_err.c b/src/openssl/openssl-1.1.1w/crypto/engine/eng_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/eng_err.c rename to src/openssl/openssl-1.1.1w/crypto/engine/eng_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/eng_fat.c b/src/openssl/openssl-1.1.1w/crypto/engine/eng_fat.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/eng_fat.c rename to src/openssl/openssl-1.1.1w/crypto/engine/eng_fat.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/eng_init.c b/src/openssl/openssl-1.1.1w/crypto/engine/eng_init.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/eng_init.c rename to src/openssl/openssl-1.1.1w/crypto/engine/eng_init.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/eng_lib.c b/src/openssl/openssl-1.1.1w/crypto/engine/eng_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/eng_lib.c rename to src/openssl/openssl-1.1.1w/crypto/engine/eng_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/eng_list.c b/src/openssl/openssl-1.1.1w/crypto/engine/eng_list.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/eng_list.c rename to src/openssl/openssl-1.1.1w/crypto/engine/eng_list.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/eng_local.h b/src/openssl/openssl-1.1.1w/crypto/engine/eng_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/eng_local.h rename to src/openssl/openssl-1.1.1w/crypto/engine/eng_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/eng_openssl.c b/src/openssl/openssl-1.1.1w/crypto/engine/eng_openssl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/eng_openssl.c rename to src/openssl/openssl-1.1.1w/crypto/engine/eng_openssl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/eng_pkey.c b/src/openssl/openssl-1.1.1w/crypto/engine/eng_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/eng_pkey.c rename to src/openssl/openssl-1.1.1w/crypto/engine/eng_pkey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/eng_rdrand.c b/src/openssl/openssl-1.1.1w/crypto/engine/eng_rdrand.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/eng_rdrand.c rename to src/openssl/openssl-1.1.1w/crypto/engine/eng_rdrand.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/eng_table.c b/src/openssl/openssl-1.1.1w/crypto/engine/eng_table.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/eng_table.c rename to src/openssl/openssl-1.1.1w/crypto/engine/eng_table.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/tb_asnmth.c b/src/openssl/openssl-1.1.1w/crypto/engine/tb_asnmth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/tb_asnmth.c rename to src/openssl/openssl-1.1.1w/crypto/engine/tb_asnmth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/tb_cipher.c b/src/openssl/openssl-1.1.1w/crypto/engine/tb_cipher.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/tb_cipher.c rename to src/openssl/openssl-1.1.1w/crypto/engine/tb_cipher.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/tb_dh.c b/src/openssl/openssl-1.1.1w/crypto/engine/tb_dh.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/tb_dh.c rename to src/openssl/openssl-1.1.1w/crypto/engine/tb_dh.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/tb_digest.c b/src/openssl/openssl-1.1.1w/crypto/engine/tb_digest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/tb_digest.c rename to src/openssl/openssl-1.1.1w/crypto/engine/tb_digest.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/tb_dsa.c b/src/openssl/openssl-1.1.1w/crypto/engine/tb_dsa.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/tb_dsa.c rename to src/openssl/openssl-1.1.1w/crypto/engine/tb_dsa.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/tb_eckey.c b/src/openssl/openssl-1.1.1w/crypto/engine/tb_eckey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/tb_eckey.c rename to src/openssl/openssl-1.1.1w/crypto/engine/tb_eckey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/tb_pkmeth.c b/src/openssl/openssl-1.1.1w/crypto/engine/tb_pkmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/tb_pkmeth.c rename to src/openssl/openssl-1.1.1w/crypto/engine/tb_pkmeth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/tb_rand.c b/src/openssl/openssl-1.1.1w/crypto/engine/tb_rand.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/tb_rand.c rename to src/openssl/openssl-1.1.1w/crypto/engine/tb_rand.c diff --git a/src/openssl/openssl-1.1.1t/crypto/engine/tb_rsa.c b/src/openssl/openssl-1.1.1w/crypto/engine/tb_rsa.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/engine/tb_rsa.c rename to src/openssl/openssl-1.1.1w/crypto/engine/tb_rsa.c diff --git a/src/openssl/openssl-1.1.1t/crypto/err/README b/src/openssl/openssl-1.1.1w/crypto/err/README similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/err/README rename to src/openssl/openssl-1.1.1w/crypto/err/README diff --git a/src/openssl/openssl-1.1.1t/crypto/err/build.info b/src/openssl/openssl-1.1.1w/crypto/err/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/err/build.info rename to src/openssl/openssl-1.1.1w/crypto/err/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/err/err.c b/src/openssl/openssl-1.1.1w/crypto/err/err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/err/err.c rename to src/openssl/openssl-1.1.1w/crypto/err/err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/err/err_all.c b/src/openssl/openssl-1.1.1w/crypto/err/err_all.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/err/err_all.c rename to src/openssl/openssl-1.1.1w/crypto/err/err_all.c diff --git a/src/openssl/openssl-1.1.1t/crypto/err/err_prn.c b/src/openssl/openssl-1.1.1w/crypto/err/err_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/err/err_prn.c rename to src/openssl/openssl-1.1.1w/crypto/err/err_prn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/err/openssl.ec b/src/openssl/openssl-1.1.1w/crypto/err/openssl.ec similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/err/openssl.ec rename to src/openssl/openssl-1.1.1w/crypto/err/openssl.ec diff --git a/src/openssl/openssl-1.1.1t/crypto/err/openssl.txt b/src/openssl/openssl-1.1.1w/crypto/err/openssl.txt similarity index 99% rename from src/openssl/openssl-1.1.1t/crypto/err/openssl.txt rename to src/openssl/openssl-1.1.1w/crypto/err/openssl.txt index ba3a46d5b..c0a3cd720 100644 --- a/src/openssl/openssl-1.1.1t/crypto/err/openssl.txt +++ b/src/openssl/openssl-1.1.1w/crypto/err/openssl.txt @@ -232,7 +232,6 @@ BN_F_BN_RSHIFT:146:BN_rshift BN_F_BN_SET_WORDS:144:bn_set_words BN_F_BN_STACK_PUSH:148:BN_STACK_push BN_F_BN_USUB:115:BN_usub -BN_F_OSSL_BN_RSA_DO_UNBLIND:151:ossl_bn_rsa_do_unblind BUF_F_BUF_MEM_GROW:100:BUF_MEM_grow BUF_F_BUF_MEM_GROW_CLEAN:105:BUF_MEM_grow_clean BUF_F_BUF_MEM_NEW:101:BUF_MEM_new @@ -402,6 +401,7 @@ CT_F_SCT_SET_VERSION:104:SCT_set_version DH_F_COMPUTE_KEY:102:compute_key DH_F_DHPARAMS_PRINT_FP:101:DHparams_print_fp DH_F_DH_BUILTIN_GENPARAMS:106:dh_builtin_genparams +DH_F_DH_CHECK:126:DH_check DH_F_DH_CHECK_EX:121:DH_check_ex DH_F_DH_CHECK_PARAMS_EX:122:DH_check_params_ex DH_F_DH_CHECK_PUB_KEY_EX:123:DH_check_pub_key_ex diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/bio_b64.c b/src/openssl/openssl-1.1.1w/crypto/evp/bio_b64.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/bio_b64.c rename to src/openssl/openssl-1.1.1w/crypto/evp/bio_b64.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/bio_enc.c b/src/openssl/openssl-1.1.1w/crypto/evp/bio_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/bio_enc.c rename to src/openssl/openssl-1.1.1w/crypto/evp/bio_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/bio_md.c b/src/openssl/openssl-1.1.1w/crypto/evp/bio_md.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/bio_md.c rename to src/openssl/openssl-1.1.1w/crypto/evp/bio_md.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/bio_ok.c b/src/openssl/openssl-1.1.1w/crypto/evp/bio_ok.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/bio_ok.c rename to src/openssl/openssl-1.1.1w/crypto/evp/bio_ok.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/build.info b/src/openssl/openssl-1.1.1w/crypto/evp/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/build.info rename to src/openssl/openssl-1.1.1w/crypto/evp/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/c_allc.c b/src/openssl/openssl-1.1.1w/crypto/evp/c_allc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/c_allc.c rename to src/openssl/openssl-1.1.1w/crypto/evp/c_allc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/c_alld.c b/src/openssl/openssl-1.1.1w/crypto/evp/c_alld.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/c_alld.c rename to src/openssl/openssl-1.1.1w/crypto/evp/c_alld.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/cmeth_lib.c b/src/openssl/openssl-1.1.1w/crypto/evp/cmeth_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/cmeth_lib.c rename to src/openssl/openssl-1.1.1w/crypto/evp/cmeth_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/digest.c b/src/openssl/openssl-1.1.1w/crypto/evp/digest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/digest.c rename to src/openssl/openssl-1.1.1w/crypto/evp/digest.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_aes.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_aes.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_aes.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_aes.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_aes_cbc_hmac_sha1.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_aes_cbc_hmac_sha1.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_aes_cbc_hmac_sha1.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_aes_cbc_hmac_sha1.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_aes_cbc_hmac_sha256.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_aes_cbc_hmac_sha256.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_aes_cbc_hmac_sha256.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_aes_cbc_hmac_sha256.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_aria.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_aria.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_aria.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_aria.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_bf.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_bf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_bf.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_bf.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_camellia.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_camellia.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_camellia.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_camellia.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_cast.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_cast.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_cast.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_cast.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_chacha20_poly1305.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_chacha20_poly1305.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_chacha20_poly1305.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_chacha20_poly1305.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_des.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_des.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_des.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_des.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_des3.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_des3.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_des3.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_des3.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_idea.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_idea.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_idea.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_idea.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_null.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_null.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_null.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_null.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_old.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_old.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_old.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_old.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_rc2.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_rc2.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_rc2.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_rc2.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_rc4.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_rc4.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_rc4.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_rc4.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_rc4_hmac_md5.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_rc4_hmac_md5.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_rc4_hmac_md5.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_rc4_hmac_md5.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_rc5.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_rc5.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_rc5.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_rc5.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_seed.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_seed.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_seed.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_seed.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_sm4.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_sm4.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_sm4.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_sm4.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/e_xcbc_d.c b/src/openssl/openssl-1.1.1w/crypto/evp/e_xcbc_d.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/e_xcbc_d.c rename to src/openssl/openssl-1.1.1w/crypto/evp/e_xcbc_d.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/encode.c b/src/openssl/openssl-1.1.1w/crypto/evp/encode.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/encode.c rename to src/openssl/openssl-1.1.1w/crypto/evp/encode.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/evp_cnf.c b/src/openssl/openssl-1.1.1w/crypto/evp/evp_cnf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/evp_cnf.c rename to src/openssl/openssl-1.1.1w/crypto/evp/evp_cnf.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/evp_enc.c b/src/openssl/openssl-1.1.1w/crypto/evp/evp_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/evp_enc.c rename to src/openssl/openssl-1.1.1w/crypto/evp/evp_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/evp_err.c b/src/openssl/openssl-1.1.1w/crypto/evp/evp_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/evp_err.c rename to src/openssl/openssl-1.1.1w/crypto/evp/evp_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/evp_key.c b/src/openssl/openssl-1.1.1w/crypto/evp/evp_key.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/evp_key.c rename to src/openssl/openssl-1.1.1w/crypto/evp/evp_key.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/evp_lib.c b/src/openssl/openssl-1.1.1w/crypto/evp/evp_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/evp_lib.c rename to src/openssl/openssl-1.1.1w/crypto/evp/evp_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/evp_local.h b/src/openssl/openssl-1.1.1w/crypto/evp/evp_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/evp_local.h rename to src/openssl/openssl-1.1.1w/crypto/evp/evp_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/evp_pbe.c b/src/openssl/openssl-1.1.1w/crypto/evp/evp_pbe.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/evp_pbe.c rename to src/openssl/openssl-1.1.1w/crypto/evp/evp_pbe.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/evp_pkey.c b/src/openssl/openssl-1.1.1w/crypto/evp/evp_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/evp_pkey.c rename to src/openssl/openssl-1.1.1w/crypto/evp/evp_pkey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/m_md2.c b/src/openssl/openssl-1.1.1w/crypto/evp/m_md2.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/m_md2.c rename to src/openssl/openssl-1.1.1w/crypto/evp/m_md2.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/m_md4.c b/src/openssl/openssl-1.1.1w/crypto/evp/m_md4.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/m_md4.c rename to src/openssl/openssl-1.1.1w/crypto/evp/m_md4.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/m_md5.c b/src/openssl/openssl-1.1.1w/crypto/evp/m_md5.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/m_md5.c rename to src/openssl/openssl-1.1.1w/crypto/evp/m_md5.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/m_md5_sha1.c b/src/openssl/openssl-1.1.1w/crypto/evp/m_md5_sha1.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/m_md5_sha1.c rename to src/openssl/openssl-1.1.1w/crypto/evp/m_md5_sha1.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/m_mdc2.c b/src/openssl/openssl-1.1.1w/crypto/evp/m_mdc2.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/m_mdc2.c rename to src/openssl/openssl-1.1.1w/crypto/evp/m_mdc2.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/m_null.c b/src/openssl/openssl-1.1.1w/crypto/evp/m_null.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/m_null.c rename to src/openssl/openssl-1.1.1w/crypto/evp/m_null.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/m_ripemd.c b/src/openssl/openssl-1.1.1w/crypto/evp/m_ripemd.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/m_ripemd.c rename to src/openssl/openssl-1.1.1w/crypto/evp/m_ripemd.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/m_sha1.c b/src/openssl/openssl-1.1.1w/crypto/evp/m_sha1.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/m_sha1.c rename to src/openssl/openssl-1.1.1w/crypto/evp/m_sha1.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/m_sha3.c b/src/openssl/openssl-1.1.1w/crypto/evp/m_sha3.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/m_sha3.c rename to src/openssl/openssl-1.1.1w/crypto/evp/m_sha3.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/m_sigver.c b/src/openssl/openssl-1.1.1w/crypto/evp/m_sigver.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/m_sigver.c rename to src/openssl/openssl-1.1.1w/crypto/evp/m_sigver.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/m_wp.c b/src/openssl/openssl-1.1.1w/crypto/evp/m_wp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/m_wp.c rename to src/openssl/openssl-1.1.1w/crypto/evp/m_wp.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/names.c b/src/openssl/openssl-1.1.1w/crypto/evp/names.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/names.c rename to src/openssl/openssl-1.1.1w/crypto/evp/names.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/p5_crpt.c b/src/openssl/openssl-1.1.1w/crypto/evp/p5_crpt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/p5_crpt.c rename to src/openssl/openssl-1.1.1w/crypto/evp/p5_crpt.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/p5_crpt2.c b/src/openssl/openssl-1.1.1w/crypto/evp/p5_crpt2.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/p5_crpt2.c rename to src/openssl/openssl-1.1.1w/crypto/evp/p5_crpt2.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/p_dec.c b/src/openssl/openssl-1.1.1w/crypto/evp/p_dec.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/p_dec.c rename to src/openssl/openssl-1.1.1w/crypto/evp/p_dec.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/p_enc.c b/src/openssl/openssl-1.1.1w/crypto/evp/p_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/p_enc.c rename to src/openssl/openssl-1.1.1w/crypto/evp/p_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/p_lib.c b/src/openssl/openssl-1.1.1w/crypto/evp/p_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/p_lib.c rename to src/openssl/openssl-1.1.1w/crypto/evp/p_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/p_open.c b/src/openssl/openssl-1.1.1w/crypto/evp/p_open.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/p_open.c rename to src/openssl/openssl-1.1.1w/crypto/evp/p_open.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/p_seal.c b/src/openssl/openssl-1.1.1w/crypto/evp/p_seal.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/p_seal.c rename to src/openssl/openssl-1.1.1w/crypto/evp/p_seal.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/p_sign.c b/src/openssl/openssl-1.1.1w/crypto/evp/p_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/p_sign.c rename to src/openssl/openssl-1.1.1w/crypto/evp/p_sign.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/p_verify.c b/src/openssl/openssl-1.1.1w/crypto/evp/p_verify.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/p_verify.c rename to src/openssl/openssl-1.1.1w/crypto/evp/p_verify.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/pbe_scrypt.c b/src/openssl/openssl-1.1.1w/crypto/evp/pbe_scrypt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/pbe_scrypt.c rename to src/openssl/openssl-1.1.1w/crypto/evp/pbe_scrypt.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/pmeth_fn.c b/src/openssl/openssl-1.1.1w/crypto/evp/pmeth_fn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/pmeth_fn.c rename to src/openssl/openssl-1.1.1w/crypto/evp/pmeth_fn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/pmeth_gn.c b/src/openssl/openssl-1.1.1w/crypto/evp/pmeth_gn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/pmeth_gn.c rename to src/openssl/openssl-1.1.1w/crypto/evp/pmeth_gn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/evp/pmeth_lib.c b/src/openssl/openssl-1.1.1w/crypto/evp/pmeth_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/evp/pmeth_lib.c rename to src/openssl/openssl-1.1.1w/crypto/evp/pmeth_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ex_data.c b/src/openssl/openssl-1.1.1w/crypto/ex_data.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ex_data.c rename to src/openssl/openssl-1.1.1w/crypto/ex_data.c diff --git a/src/openssl/openssl-1.1.1t/crypto/getenv.c b/src/openssl/openssl-1.1.1w/crypto/getenv.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/getenv.c rename to src/openssl/openssl-1.1.1w/crypto/getenv.c diff --git a/src/openssl/openssl-1.1.1t/crypto/hmac/build.info b/src/openssl/openssl-1.1.1w/crypto/hmac/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/hmac/build.info rename to src/openssl/openssl-1.1.1w/crypto/hmac/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/hmac/hm_ameth.c b/src/openssl/openssl-1.1.1w/crypto/hmac/hm_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/hmac/hm_ameth.c rename to src/openssl/openssl-1.1.1w/crypto/hmac/hm_ameth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/hmac/hm_pmeth.c b/src/openssl/openssl-1.1.1w/crypto/hmac/hm_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/hmac/hm_pmeth.c rename to src/openssl/openssl-1.1.1w/crypto/hmac/hm_pmeth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/hmac/hmac.c b/src/openssl/openssl-1.1.1w/crypto/hmac/hmac.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/hmac/hmac.c rename to src/openssl/openssl-1.1.1w/crypto/hmac/hmac.c diff --git a/src/openssl/openssl-1.1.1t/crypto/hmac/hmac_local.h b/src/openssl/openssl-1.1.1w/crypto/hmac/hmac_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/hmac/hmac_local.h rename to src/openssl/openssl-1.1.1w/crypto/hmac/hmac_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ia64cpuid.S b/src/openssl/openssl-1.1.1w/crypto/ia64cpuid.S similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ia64cpuid.S rename to src/openssl/openssl-1.1.1w/crypto/ia64cpuid.S diff --git a/src/openssl/openssl-1.1.1t/crypto/idea/build.info b/src/openssl/openssl-1.1.1w/crypto/idea/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/idea/build.info rename to src/openssl/openssl-1.1.1w/crypto/idea/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/idea/i_cbc.c b/src/openssl/openssl-1.1.1w/crypto/idea/i_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/idea/i_cbc.c rename to src/openssl/openssl-1.1.1w/crypto/idea/i_cbc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/idea/i_cfb64.c b/src/openssl/openssl-1.1.1w/crypto/idea/i_cfb64.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/idea/i_cfb64.c rename to src/openssl/openssl-1.1.1w/crypto/idea/i_cfb64.c diff --git a/src/openssl/openssl-1.1.1t/crypto/idea/i_ecb.c b/src/openssl/openssl-1.1.1w/crypto/idea/i_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/idea/i_ecb.c rename to src/openssl/openssl-1.1.1w/crypto/idea/i_ecb.c diff --git a/src/openssl/openssl-1.1.1t/crypto/idea/i_ofb64.c b/src/openssl/openssl-1.1.1w/crypto/idea/i_ofb64.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/idea/i_ofb64.c rename to src/openssl/openssl-1.1.1w/crypto/idea/i_ofb64.c diff --git a/src/openssl/openssl-1.1.1t/crypto/idea/i_skey.c b/src/openssl/openssl-1.1.1w/crypto/idea/i_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/idea/i_skey.c rename to src/openssl/openssl-1.1.1w/crypto/idea/i_skey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/idea/idea_local.h b/src/openssl/openssl-1.1.1w/crypto/idea/idea_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/idea/idea_local.h rename to src/openssl/openssl-1.1.1w/crypto/idea/idea_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/init.c b/src/openssl/openssl-1.1.1w/crypto/init.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/init.c rename to src/openssl/openssl-1.1.1w/crypto/init.c diff --git a/src/openssl/openssl-1.1.1t/crypto/kdf/build.info b/src/openssl/openssl-1.1.1w/crypto/kdf/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/kdf/build.info rename to src/openssl/openssl-1.1.1w/crypto/kdf/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/kdf/hkdf.c b/src/openssl/openssl-1.1.1w/crypto/kdf/hkdf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/kdf/hkdf.c rename to src/openssl/openssl-1.1.1w/crypto/kdf/hkdf.c diff --git a/src/openssl/openssl-1.1.1t/crypto/kdf/kdf_err.c b/src/openssl/openssl-1.1.1w/crypto/kdf/kdf_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/kdf/kdf_err.c rename to src/openssl/openssl-1.1.1w/crypto/kdf/kdf_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/kdf/scrypt.c b/src/openssl/openssl-1.1.1w/crypto/kdf/scrypt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/kdf/scrypt.c rename to src/openssl/openssl-1.1.1w/crypto/kdf/scrypt.c diff --git a/src/openssl/openssl-1.1.1t/crypto/kdf/tls1_prf.c b/src/openssl/openssl-1.1.1w/crypto/kdf/tls1_prf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/kdf/tls1_prf.c rename to src/openssl/openssl-1.1.1w/crypto/kdf/tls1_prf.c diff --git a/src/openssl/openssl-1.1.1t/crypto/lhash/build.info b/src/openssl/openssl-1.1.1w/crypto/lhash/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/lhash/build.info rename to src/openssl/openssl-1.1.1w/crypto/lhash/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/lhash/lh_stats.c b/src/openssl/openssl-1.1.1w/crypto/lhash/lh_stats.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/lhash/lh_stats.c rename to src/openssl/openssl-1.1.1w/crypto/lhash/lh_stats.c diff --git a/src/openssl/openssl-1.1.1t/crypto/lhash/lhash.c b/src/openssl/openssl-1.1.1w/crypto/lhash/lhash.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/lhash/lhash.c rename to src/openssl/openssl-1.1.1w/crypto/lhash/lhash.c diff --git a/src/openssl/openssl-1.1.1t/crypto/lhash/lhash_local.h b/src/openssl/openssl-1.1.1w/crypto/lhash/lhash_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/lhash/lhash_local.h rename to src/openssl/openssl-1.1.1w/crypto/lhash/lhash_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/md2/build.info b/src/openssl/openssl-1.1.1w/crypto/md2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/md2/build.info rename to src/openssl/openssl-1.1.1w/crypto/md2/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/md2/md2_dgst.c b/src/openssl/openssl-1.1.1w/crypto/md2/md2_dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/md2/md2_dgst.c rename to src/openssl/openssl-1.1.1w/crypto/md2/md2_dgst.c diff --git a/src/openssl/openssl-1.1.1t/crypto/md2/md2_one.c b/src/openssl/openssl-1.1.1w/crypto/md2/md2_one.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/md2/md2_one.c rename to src/openssl/openssl-1.1.1w/crypto/md2/md2_one.c diff --git a/src/openssl/openssl-1.1.1t/crypto/md4/build.info b/src/openssl/openssl-1.1.1w/crypto/md4/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/md4/build.info rename to src/openssl/openssl-1.1.1w/crypto/md4/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/md4/md4_dgst.c b/src/openssl/openssl-1.1.1w/crypto/md4/md4_dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/md4/md4_dgst.c rename to src/openssl/openssl-1.1.1w/crypto/md4/md4_dgst.c diff --git a/src/openssl/openssl-1.1.1t/crypto/md4/md4_local.h b/src/openssl/openssl-1.1.1w/crypto/md4/md4_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/md4/md4_local.h rename to src/openssl/openssl-1.1.1w/crypto/md4/md4_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/md4/md4_one.c b/src/openssl/openssl-1.1.1w/crypto/md4/md4_one.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/md4/md4_one.c rename to src/openssl/openssl-1.1.1w/crypto/md4/md4_one.c diff --git a/src/openssl/openssl-1.1.1t/crypto/md5/asm/md5-586.pl b/src/openssl/openssl-1.1.1w/crypto/md5/asm/md5-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/md5/asm/md5-586.pl rename to src/openssl/openssl-1.1.1w/crypto/md5/asm/md5-586.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/md5/asm/md5-sparcv9.pl b/src/openssl/openssl-1.1.1w/crypto/md5/asm/md5-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/md5/asm/md5-sparcv9.pl rename to src/openssl/openssl-1.1.1w/crypto/md5/asm/md5-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/md5/asm/md5-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/md5/asm/md5-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/md5/asm/md5-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/md5/asm/md5-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/md5/build.info b/src/openssl/openssl-1.1.1w/crypto/md5/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/md5/build.info rename to src/openssl/openssl-1.1.1w/crypto/md5/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/md5/md5_dgst.c b/src/openssl/openssl-1.1.1w/crypto/md5/md5_dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/md5/md5_dgst.c rename to src/openssl/openssl-1.1.1w/crypto/md5/md5_dgst.c diff --git a/src/openssl/openssl-1.1.1t/crypto/md5/md5_local.h b/src/openssl/openssl-1.1.1w/crypto/md5/md5_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/md5/md5_local.h rename to src/openssl/openssl-1.1.1w/crypto/md5/md5_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/md5/md5_one.c b/src/openssl/openssl-1.1.1w/crypto/md5/md5_one.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/md5/md5_one.c rename to src/openssl/openssl-1.1.1w/crypto/md5/md5_one.c diff --git a/src/openssl/openssl-1.1.1t/crypto/mdc2/build.info b/src/openssl/openssl-1.1.1w/crypto/mdc2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/mdc2/build.info rename to src/openssl/openssl-1.1.1w/crypto/mdc2/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/mdc2/mdc2_one.c b/src/openssl/openssl-1.1.1w/crypto/mdc2/mdc2_one.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/mdc2/mdc2_one.c rename to src/openssl/openssl-1.1.1w/crypto/mdc2/mdc2_one.c diff --git a/src/openssl/openssl-1.1.1t/crypto/mdc2/mdc2dgst.c b/src/openssl/openssl-1.1.1w/crypto/mdc2/mdc2dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/mdc2/mdc2dgst.c rename to src/openssl/openssl-1.1.1w/crypto/mdc2/mdc2dgst.c diff --git a/src/openssl/openssl-1.1.1t/crypto/mem.c b/src/openssl/openssl-1.1.1w/crypto/mem.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/mem.c rename to src/openssl/openssl-1.1.1w/crypto/mem.c diff --git a/src/openssl/openssl-1.1.1t/crypto/mem_clr.c b/src/openssl/openssl-1.1.1w/crypto/mem_clr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/mem_clr.c rename to src/openssl/openssl-1.1.1w/crypto/mem_clr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/mem_dbg.c b/src/openssl/openssl-1.1.1w/crypto/mem_dbg.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/mem_dbg.c rename to src/openssl/openssl-1.1.1w/crypto/mem_dbg.c diff --git a/src/openssl/openssl-1.1.1t/crypto/mem_sec.c b/src/openssl/openssl-1.1.1w/crypto/mem_sec.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/mem_sec.c rename to src/openssl/openssl-1.1.1w/crypto/mem_sec.c diff --git a/src/openssl/openssl-1.1.1t/crypto/mips_arch.h b/src/openssl/openssl-1.1.1w/crypto/mips_arch.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/mips_arch.h rename to src/openssl/openssl-1.1.1w/crypto/mips_arch.h diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/asm/aesni-gcm-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/modes/asm/aesni-gcm-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/asm/aesni-gcm-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/modes/asm/aesni-gcm-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-alpha.pl b/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-alpha.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-alpha.pl rename to src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-alpha.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-armv4.pl b/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-armv4.pl rename to src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-armv4.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-c64xplus.pl b/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-c64xplus.pl rename to src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-ia64.pl b/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-ia64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-ia64.pl rename to src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-ia64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-parisc.pl b/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-parisc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-parisc.pl rename to src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-parisc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-s390x.pl b/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-s390x.pl rename to src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-s390x.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-sparcv9.pl b/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-sparcv9.pl rename to src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-x86.pl b/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-x86.pl rename to src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-x86.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/asm/ghash-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/modes/asm/ghash-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/asm/ghashp8-ppc.pl b/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghashp8-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/asm/ghashp8-ppc.pl rename to src/openssl/openssl-1.1.1w/crypto/modes/asm/ghashp8-ppc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/asm/ghashv8-armx.pl b/src/openssl/openssl-1.1.1w/crypto/modes/asm/ghashv8-armx.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/asm/ghashv8-armx.pl rename to src/openssl/openssl-1.1.1w/crypto/modes/asm/ghashv8-armx.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/build.info b/src/openssl/openssl-1.1.1w/crypto/modes/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/build.info rename to src/openssl/openssl-1.1.1w/crypto/modes/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/cbc128.c b/src/openssl/openssl-1.1.1w/crypto/modes/cbc128.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/cbc128.c rename to src/openssl/openssl-1.1.1w/crypto/modes/cbc128.c diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/ccm128.c b/src/openssl/openssl-1.1.1w/crypto/modes/ccm128.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/ccm128.c rename to src/openssl/openssl-1.1.1w/crypto/modes/ccm128.c diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/cfb128.c b/src/openssl/openssl-1.1.1w/crypto/modes/cfb128.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/cfb128.c rename to src/openssl/openssl-1.1.1w/crypto/modes/cfb128.c diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/ctr128.c b/src/openssl/openssl-1.1.1w/crypto/modes/ctr128.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/ctr128.c rename to src/openssl/openssl-1.1.1w/crypto/modes/ctr128.c diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/cts128.c b/src/openssl/openssl-1.1.1w/crypto/modes/cts128.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/cts128.c rename to src/openssl/openssl-1.1.1w/crypto/modes/cts128.c diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/gcm128.c b/src/openssl/openssl-1.1.1w/crypto/modes/gcm128.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/gcm128.c rename to src/openssl/openssl-1.1.1w/crypto/modes/gcm128.c diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/modes_local.h b/src/openssl/openssl-1.1.1w/crypto/modes/modes_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/modes_local.h rename to src/openssl/openssl-1.1.1w/crypto/modes/modes_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/ocb128.c b/src/openssl/openssl-1.1.1w/crypto/modes/ocb128.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/ocb128.c rename to src/openssl/openssl-1.1.1w/crypto/modes/ocb128.c diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/ofb128.c b/src/openssl/openssl-1.1.1w/crypto/modes/ofb128.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/ofb128.c rename to src/openssl/openssl-1.1.1w/crypto/modes/ofb128.c diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/wrap128.c b/src/openssl/openssl-1.1.1w/crypto/modes/wrap128.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/wrap128.c rename to src/openssl/openssl-1.1.1w/crypto/modes/wrap128.c diff --git a/src/openssl/openssl-1.1.1t/crypto/modes/xts128.c b/src/openssl/openssl-1.1.1w/crypto/modes/xts128.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/modes/xts128.c rename to src/openssl/openssl-1.1.1w/crypto/modes/xts128.c diff --git a/src/openssl/openssl-1.1.1t/crypto/o_dir.c b/src/openssl/openssl-1.1.1w/crypto/o_dir.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/o_dir.c rename to src/openssl/openssl-1.1.1w/crypto/o_dir.c diff --git a/src/openssl/openssl-1.1.1t/crypto/o_fips.c b/src/openssl/openssl-1.1.1w/crypto/o_fips.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/o_fips.c rename to src/openssl/openssl-1.1.1w/crypto/o_fips.c diff --git a/src/openssl/openssl-1.1.1t/crypto/o_fopen.c b/src/openssl/openssl-1.1.1w/crypto/o_fopen.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/o_fopen.c rename to src/openssl/openssl-1.1.1w/crypto/o_fopen.c diff --git a/src/openssl/openssl-1.1.1t/crypto/o_init.c b/src/openssl/openssl-1.1.1w/crypto/o_init.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/o_init.c rename to src/openssl/openssl-1.1.1w/crypto/o_init.c diff --git a/src/openssl/openssl-1.1.1t/crypto/o_str.c b/src/openssl/openssl-1.1.1w/crypto/o_str.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/o_str.c rename to src/openssl/openssl-1.1.1w/crypto/o_str.c diff --git a/src/openssl/openssl-1.1.1t/crypto/o_time.c b/src/openssl/openssl-1.1.1w/crypto/o_time.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/o_time.c rename to src/openssl/openssl-1.1.1w/crypto/o_time.c diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/README b/src/openssl/openssl-1.1.1w/crypto/objects/README similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/objects/README rename to src/openssl/openssl-1.1.1w/crypto/objects/README diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/build.info b/src/openssl/openssl-1.1.1w/crypto/objects/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/objects/build.info rename to src/openssl/openssl-1.1.1w/crypto/objects/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/o_names.c b/src/openssl/openssl-1.1.1w/crypto/objects/o_names.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/objects/o_names.c rename to src/openssl/openssl-1.1.1w/crypto/objects/o_names.c diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/obj_dat.c b/src/openssl/openssl-1.1.1w/crypto/objects/obj_dat.c similarity index 96% rename from src/openssl/openssl-1.1.1t/crypto/objects/obj_dat.c rename to src/openssl/openssl-1.1.1w/crypto/objects/obj_dat.c index 7e8de727f..e1b4c589d 100644 --- a/src/openssl/openssl-1.1.1t/crypto/objects/obj_dat.c +++ b/src/openssl/openssl-1.1.1w/crypto/objects/obj_dat.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -428,6 +428,25 @@ int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name) first = 1; bl = NULL; + /* + * RFC 2578 (STD 58) says this about OBJECT IDENTIFIERs: + * + * > 3.5. OBJECT IDENTIFIER values + * > + * > An OBJECT IDENTIFIER value is an ordered list of non-negative + * > numbers. For the SMIv2, each number in the list is referred to as a + * > sub-identifier, there are at most 128 sub-identifiers in a value, + * > and each sub-identifier has a maximum value of 2^32-1 (4294967295 + * > decimal). + * + * So a legitimate OID according to this RFC is at most (32 * 128 / 7), + * i.e. 586 bytes long. + * + * Ref: https://datatracker.ietf.org/doc/html/rfc2578#section-3.5 + */ + if (len > 586) + goto err; + while (len > 0) { l = 0; use_bn = 0; diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/obj_dat.h b/src/openssl/openssl-1.1.1w/crypto/objects/obj_dat.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/objects/obj_dat.h rename to src/openssl/openssl-1.1.1w/crypto/objects/obj_dat.h diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/obj_dat.pl b/src/openssl/openssl-1.1.1w/crypto/objects/obj_dat.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/objects/obj_dat.pl rename to src/openssl/openssl-1.1.1w/crypto/objects/obj_dat.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/obj_err.c b/src/openssl/openssl-1.1.1w/crypto/objects/obj_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/objects/obj_err.c rename to src/openssl/openssl-1.1.1w/crypto/objects/obj_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/obj_lib.c b/src/openssl/openssl-1.1.1w/crypto/objects/obj_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/objects/obj_lib.c rename to src/openssl/openssl-1.1.1w/crypto/objects/obj_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/obj_local.h b/src/openssl/openssl-1.1.1w/crypto/objects/obj_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/objects/obj_local.h rename to src/openssl/openssl-1.1.1w/crypto/objects/obj_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/obj_mac.num b/src/openssl/openssl-1.1.1w/crypto/objects/obj_mac.num similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/objects/obj_mac.num rename to src/openssl/openssl-1.1.1w/crypto/objects/obj_mac.num diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/obj_xref.c b/src/openssl/openssl-1.1.1w/crypto/objects/obj_xref.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/objects/obj_xref.c rename to src/openssl/openssl-1.1.1w/crypto/objects/obj_xref.c diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/obj_xref.h b/src/openssl/openssl-1.1.1w/crypto/objects/obj_xref.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/objects/obj_xref.h rename to src/openssl/openssl-1.1.1w/crypto/objects/obj_xref.h diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/obj_xref.txt b/src/openssl/openssl-1.1.1w/crypto/objects/obj_xref.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/objects/obj_xref.txt rename to src/openssl/openssl-1.1.1w/crypto/objects/obj_xref.txt diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/objects.pl b/src/openssl/openssl-1.1.1w/crypto/objects/objects.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/objects/objects.pl rename to src/openssl/openssl-1.1.1w/crypto/objects/objects.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/objects.txt b/src/openssl/openssl-1.1.1w/crypto/objects/objects.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/objects/objects.txt rename to src/openssl/openssl-1.1.1w/crypto/objects/objects.txt diff --git a/src/openssl/openssl-1.1.1t/crypto/objects/objxref.pl b/src/openssl/openssl-1.1.1w/crypto/objects/objxref.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/objects/objxref.pl rename to src/openssl/openssl-1.1.1w/crypto/objects/objxref.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/ocsp/build.info b/src/openssl/openssl-1.1.1w/crypto/ocsp/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ocsp/build.info rename to src/openssl/openssl-1.1.1w/crypto/ocsp/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_asn.c b/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_asn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_asn.c rename to src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_asn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_cl.c b/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_cl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_cl.c rename to src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_cl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_err.c b/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_err.c rename to src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_ext.c b/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_ext.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_ext.c rename to src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_ext.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_ht.c b/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_ht.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_ht.c rename to src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_ht.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_lib.c b/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_lib.c rename to src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_local.h b/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_local.h rename to src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_prn.c b/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_prn.c rename to src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_prn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_srv.c b/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_srv.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_srv.c rename to src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_srv.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_vfy.c b/src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_vfy.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ocsp/ocsp_vfy.c rename to src/openssl/openssl-1.1.1w/crypto/ocsp/ocsp_vfy.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ocsp/v3_ocsp.c b/src/openssl/openssl-1.1.1w/crypto/ocsp/v3_ocsp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ocsp/v3_ocsp.c rename to src/openssl/openssl-1.1.1w/crypto/ocsp/v3_ocsp.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pariscid.pl b/src/openssl/openssl-1.1.1w/crypto/pariscid.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pariscid.pl rename to src/openssl/openssl-1.1.1w/crypto/pariscid.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/pem/build.info b/src/openssl/openssl-1.1.1w/crypto/pem/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pem/build.info rename to src/openssl/openssl-1.1.1w/crypto/pem/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/pem/pem_all.c b/src/openssl/openssl-1.1.1w/crypto/pem/pem_all.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pem/pem_all.c rename to src/openssl/openssl-1.1.1w/crypto/pem/pem_all.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pem/pem_err.c b/src/openssl/openssl-1.1.1w/crypto/pem/pem_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pem/pem_err.c rename to src/openssl/openssl-1.1.1w/crypto/pem/pem_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pem/pem_info.c b/src/openssl/openssl-1.1.1w/crypto/pem/pem_info.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pem/pem_info.c rename to src/openssl/openssl-1.1.1w/crypto/pem/pem_info.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pem/pem_lib.c b/src/openssl/openssl-1.1.1w/crypto/pem/pem_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pem/pem_lib.c rename to src/openssl/openssl-1.1.1w/crypto/pem/pem_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pem/pem_oth.c b/src/openssl/openssl-1.1.1w/crypto/pem/pem_oth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pem/pem_oth.c rename to src/openssl/openssl-1.1.1w/crypto/pem/pem_oth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pem/pem_pk8.c b/src/openssl/openssl-1.1.1w/crypto/pem/pem_pk8.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pem/pem_pk8.c rename to src/openssl/openssl-1.1.1w/crypto/pem/pem_pk8.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pem/pem_pkey.c b/src/openssl/openssl-1.1.1w/crypto/pem/pem_pkey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pem/pem_pkey.c rename to src/openssl/openssl-1.1.1w/crypto/pem/pem_pkey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pem/pem_sign.c b/src/openssl/openssl-1.1.1w/crypto/pem/pem_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pem/pem_sign.c rename to src/openssl/openssl-1.1.1w/crypto/pem/pem_sign.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pem/pem_x509.c b/src/openssl/openssl-1.1.1w/crypto/pem/pem_x509.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pem/pem_x509.c rename to src/openssl/openssl-1.1.1w/crypto/pem/pem_x509.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pem/pem_xaux.c b/src/openssl/openssl-1.1.1w/crypto/pem/pem_xaux.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pem/pem_xaux.c rename to src/openssl/openssl-1.1.1w/crypto/pem/pem_xaux.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pem/pvkfmt.c b/src/openssl/openssl-1.1.1w/crypto/pem/pvkfmt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pem/pvkfmt.c rename to src/openssl/openssl-1.1.1w/crypto/pem/pvkfmt.c diff --git a/src/openssl/openssl-1.1.1t/crypto/perlasm/README b/src/openssl/openssl-1.1.1w/crypto/perlasm/README similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/perlasm/README rename to src/openssl/openssl-1.1.1w/crypto/perlasm/README diff --git a/src/openssl/openssl-1.1.1t/crypto/perlasm/arm-xlate.pl b/src/openssl/openssl-1.1.1w/crypto/perlasm/arm-xlate.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/perlasm/arm-xlate.pl rename to src/openssl/openssl-1.1.1w/crypto/perlasm/arm-xlate.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/perlasm/cbc.pl b/src/openssl/openssl-1.1.1w/crypto/perlasm/cbc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/perlasm/cbc.pl rename to src/openssl/openssl-1.1.1w/crypto/perlasm/cbc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/perlasm/ppc-xlate.pl b/src/openssl/openssl-1.1.1w/crypto/perlasm/ppc-xlate.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/perlasm/ppc-xlate.pl rename to src/openssl/openssl-1.1.1w/crypto/perlasm/ppc-xlate.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/perlasm/sparcv9_modes.pl b/src/openssl/openssl-1.1.1w/crypto/perlasm/sparcv9_modes.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/perlasm/sparcv9_modes.pl rename to src/openssl/openssl-1.1.1w/crypto/perlasm/sparcv9_modes.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/perlasm/x86_64-xlate.pl b/src/openssl/openssl-1.1.1w/crypto/perlasm/x86_64-xlate.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/perlasm/x86_64-xlate.pl rename to src/openssl/openssl-1.1.1w/crypto/perlasm/x86_64-xlate.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/perlasm/x86asm.pl b/src/openssl/openssl-1.1.1w/crypto/perlasm/x86asm.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/perlasm/x86asm.pl rename to src/openssl/openssl-1.1.1w/crypto/perlasm/x86asm.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/perlasm/x86gas.pl b/src/openssl/openssl-1.1.1w/crypto/perlasm/x86gas.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/perlasm/x86gas.pl rename to src/openssl/openssl-1.1.1w/crypto/perlasm/x86gas.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/perlasm/x86masm.pl b/src/openssl/openssl-1.1.1w/crypto/perlasm/x86masm.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/perlasm/x86masm.pl rename to src/openssl/openssl-1.1.1w/crypto/perlasm/x86masm.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/perlasm/x86nasm.pl b/src/openssl/openssl-1.1.1w/crypto/perlasm/x86nasm.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/perlasm/x86nasm.pl rename to src/openssl/openssl-1.1.1w/crypto/perlasm/x86nasm.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/build.info b/src/openssl/openssl-1.1.1w/crypto/pkcs12/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/build.info rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_add.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_add.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_add.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_add.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_asn.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_asn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_asn.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_asn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_attr.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_attr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_attr.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_attr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_crpt.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_crpt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_crpt.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_crpt.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_crt.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_crt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_crt.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_crt.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_decr.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_decr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_decr.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_decr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_init.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_init.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_init.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_init.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_key.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_key.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_key.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_key.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_kiss.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_kiss.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_kiss.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_kiss.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_local.h b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_local.h rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_mutl.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_mutl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_mutl.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_mutl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_npas.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_npas.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_npas.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_npas.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_p8d.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_p8d.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_p8d.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_p8d.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_p8e.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_p8e.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_p8e.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_p8e.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_sbag.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_sbag.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_sbag.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_sbag.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_utl.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_utl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/p12_utl.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/p12_utl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs12/pk12err.c b/src/openssl/openssl-1.1.1w/crypto/pkcs12/pk12err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs12/pk12err.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs12/pk12err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs7/bio_pk7.c b/src/openssl/openssl-1.1.1w/crypto/pkcs7/bio_pk7.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs7/bio_pk7.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs7/bio_pk7.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs7/build.info b/src/openssl/openssl-1.1.1w/crypto/pkcs7/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs7/build.info rename to src/openssl/openssl-1.1.1w/crypto/pkcs7/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs7/pk7_asn1.c b/src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs7/pk7_asn1.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_asn1.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs7/pk7_attr.c b/src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_attr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs7/pk7_attr.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_attr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs7/pk7_doit.c b/src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_doit.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs7/pk7_doit.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_doit.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs7/pk7_lib.c b/src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs7/pk7_lib.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs7/pk7_mime.c b/src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_mime.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs7/pk7_mime.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_mime.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs7/pk7_smime.c b/src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_smime.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs7/pk7_smime.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs7/pk7_smime.c diff --git a/src/openssl/openssl-1.1.1t/crypto/pkcs7/pkcs7err.c b/src/openssl/openssl-1.1.1w/crypto/pkcs7/pkcs7err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/pkcs7/pkcs7err.c rename to src/openssl/openssl-1.1.1w/crypto/pkcs7/pkcs7err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-armv4.pl b/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-armv4.pl rename to src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-armv4.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-armv8.pl b/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-armv8.pl rename to src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-armv8.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-c64xplus.pl b/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-c64xplus.pl rename to src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-mips.pl b/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-mips.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-mips.pl rename to src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-mips.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-ppc.pl b/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-ppc.pl rename to src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-ppc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-ppcfp.pl b/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-ppcfp.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-ppcfp.pl rename to src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-ppcfp.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-s390x.pl b/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-s390x.pl rename to src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-s390x.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-sparcv9.pl b/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-sparcv9.pl rename to src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-x86.pl b/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-x86.pl rename to src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-x86.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-x86_64.pl similarity index 99% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-x86_64.pl index 5f834d8fa..5e2bb18f2 100755 --- a/src/openssl/openssl-1.1.1t/crypto/poly1305/asm/poly1305-x86_64.pl +++ b/src/openssl/openssl-1.1.1w/crypto/poly1305/asm/poly1305-x86_64.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy @@ -193,7 +193,7 @@ sub poly1305_iteration { bt \$`5+32`,%r9 # AVX2? cmovc %rax,%r10 ___ -$code.=<<___ if ($avx>3); +$code.=<<___ if ($avx>3 && !$win64); mov \$`(1<<31|1<<21|1<<16)`,%rax shr \$32,%r9 and %rax,%r9 @@ -2722,7 +2722,7 @@ sub poly1305_iteration { .cfi_endproc .size poly1305_blocks_avx512,.-poly1305_blocks_avx512 ___ -if ($avx>3) { +if ($avx>3 && !$win64) { ######################################################################## # VPMADD52 version using 2^44 radix. # diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/build.info b/src/openssl/openssl-1.1.1w/crypto/poly1305/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/build.info rename to src/openssl/openssl-1.1.1w/crypto/poly1305/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/poly1305.c b/src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/poly1305.c rename to src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305.c diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/poly1305_ameth.c b/src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/poly1305_ameth.c rename to src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_ameth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/poly1305_base2_44.c b/src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_base2_44.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/poly1305_base2_44.c rename to src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_base2_44.c diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/poly1305_ieee754.c b/src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_ieee754.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/poly1305_ieee754.c rename to src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_ieee754.c diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/poly1305_local.h b/src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/poly1305_local.h rename to src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/poly1305/poly1305_pmeth.c b/src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/poly1305/poly1305_pmeth.c rename to src/openssl/openssl-1.1.1w/crypto/poly1305/poly1305_pmeth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ppc_arch.h b/src/openssl/openssl-1.1.1w/crypto/ppc_arch.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ppc_arch.h rename to src/openssl/openssl-1.1.1w/crypto/ppc_arch.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ppccap.c b/src/openssl/openssl-1.1.1w/crypto/ppccap.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ppccap.c rename to src/openssl/openssl-1.1.1w/crypto/ppccap.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ppccpuid.pl b/src/openssl/openssl-1.1.1w/crypto/ppccpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ppccpuid.pl rename to src/openssl/openssl-1.1.1w/crypto/ppccpuid.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/rand/build.info b/src/openssl/openssl-1.1.1w/crypto/rand/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rand/build.info rename to src/openssl/openssl-1.1.1w/crypto/rand/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/rand/drbg_ctr.c b/src/openssl/openssl-1.1.1w/crypto/rand/drbg_ctr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rand/drbg_ctr.c rename to src/openssl/openssl-1.1.1w/crypto/rand/drbg_ctr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rand/drbg_lib.c b/src/openssl/openssl-1.1.1w/crypto/rand/drbg_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rand/drbg_lib.c rename to src/openssl/openssl-1.1.1w/crypto/rand/drbg_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rand/rand_egd.c b/src/openssl/openssl-1.1.1w/crypto/rand/rand_egd.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rand/rand_egd.c rename to src/openssl/openssl-1.1.1w/crypto/rand/rand_egd.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rand/rand_err.c b/src/openssl/openssl-1.1.1w/crypto/rand/rand_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rand/rand_err.c rename to src/openssl/openssl-1.1.1w/crypto/rand/rand_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rand/rand_lib.c b/src/openssl/openssl-1.1.1w/crypto/rand/rand_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rand/rand_lib.c rename to src/openssl/openssl-1.1.1w/crypto/rand/rand_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rand/rand_local.h b/src/openssl/openssl-1.1.1w/crypto/rand/rand_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rand/rand_local.h rename to src/openssl/openssl-1.1.1w/crypto/rand/rand_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/rand/rand_unix.c b/src/openssl/openssl-1.1.1w/crypto/rand/rand_unix.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rand/rand_unix.c rename to src/openssl/openssl-1.1.1w/crypto/rand/rand_unix.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rand/rand_vms.c b/src/openssl/openssl-1.1.1w/crypto/rand/rand_vms.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rand/rand_vms.c rename to src/openssl/openssl-1.1.1w/crypto/rand/rand_vms.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rand/rand_win.c b/src/openssl/openssl-1.1.1w/crypto/rand/rand_win.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rand/rand_win.c rename to src/openssl/openssl-1.1.1w/crypto/rand/rand_win.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rand/randfile.c b/src/openssl/openssl-1.1.1w/crypto/rand/randfile.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rand/randfile.c rename to src/openssl/openssl-1.1.1w/crypto/rand/randfile.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rc2/build.info b/src/openssl/openssl-1.1.1w/crypto/rc2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc2/build.info rename to src/openssl/openssl-1.1.1w/crypto/rc2/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/rc2/rc2_cbc.c b/src/openssl/openssl-1.1.1w/crypto/rc2/rc2_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc2/rc2_cbc.c rename to src/openssl/openssl-1.1.1w/crypto/rc2/rc2_cbc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rc2/rc2_ecb.c b/src/openssl/openssl-1.1.1w/crypto/rc2/rc2_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc2/rc2_ecb.c rename to src/openssl/openssl-1.1.1w/crypto/rc2/rc2_ecb.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rc2/rc2_local.h b/src/openssl/openssl-1.1.1w/crypto/rc2/rc2_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc2/rc2_local.h rename to src/openssl/openssl-1.1.1w/crypto/rc2/rc2_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/rc2/rc2_skey.c b/src/openssl/openssl-1.1.1w/crypto/rc2/rc2_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc2/rc2_skey.c rename to src/openssl/openssl-1.1.1w/crypto/rc2/rc2_skey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rc2/rc2cfb64.c b/src/openssl/openssl-1.1.1w/crypto/rc2/rc2cfb64.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc2/rc2cfb64.c rename to src/openssl/openssl-1.1.1w/crypto/rc2/rc2cfb64.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rc2/rc2ofb64.c b/src/openssl/openssl-1.1.1w/crypto/rc2/rc2ofb64.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc2/rc2ofb64.c rename to src/openssl/openssl-1.1.1w/crypto/rc2/rc2ofb64.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rc4/asm/rc4-586.pl b/src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc4/asm/rc4-586.pl rename to src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-586.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/rc4/asm/rc4-c64xplus.pl b/src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc4/asm/rc4-c64xplus.pl rename to src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/rc4/asm/rc4-md5-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-md5-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc4/asm/rc4-md5-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-md5-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/rc4/asm/rc4-parisc.pl b/src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-parisc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc4/asm/rc4-parisc.pl rename to src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-parisc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/rc4/asm/rc4-s390x.pl b/src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc4/asm/rc4-s390x.pl rename to src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-s390x.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/rc4/asm/rc4-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc4/asm/rc4-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/rc4/asm/rc4-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/rc4/build.info b/src/openssl/openssl-1.1.1w/crypto/rc4/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc4/build.info rename to src/openssl/openssl-1.1.1w/crypto/rc4/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/rc4/rc4_enc.c b/src/openssl/openssl-1.1.1w/crypto/rc4/rc4_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc4/rc4_enc.c rename to src/openssl/openssl-1.1.1w/crypto/rc4/rc4_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rc4/rc4_local.h b/src/openssl/openssl-1.1.1w/crypto/rc4/rc4_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc4/rc4_local.h rename to src/openssl/openssl-1.1.1w/crypto/rc4/rc4_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/rc4/rc4_skey.c b/src/openssl/openssl-1.1.1w/crypto/rc4/rc4_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc4/rc4_skey.c rename to src/openssl/openssl-1.1.1w/crypto/rc4/rc4_skey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rc5/asm/rc5-586.pl b/src/openssl/openssl-1.1.1w/crypto/rc5/asm/rc5-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc5/asm/rc5-586.pl rename to src/openssl/openssl-1.1.1w/crypto/rc5/asm/rc5-586.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/rc5/build.info b/src/openssl/openssl-1.1.1w/crypto/rc5/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc5/build.info rename to src/openssl/openssl-1.1.1w/crypto/rc5/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/rc5/rc5_ecb.c b/src/openssl/openssl-1.1.1w/crypto/rc5/rc5_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc5/rc5_ecb.c rename to src/openssl/openssl-1.1.1w/crypto/rc5/rc5_ecb.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rc5/rc5_enc.c b/src/openssl/openssl-1.1.1w/crypto/rc5/rc5_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc5/rc5_enc.c rename to src/openssl/openssl-1.1.1w/crypto/rc5/rc5_enc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rc5/rc5_local.h b/src/openssl/openssl-1.1.1w/crypto/rc5/rc5_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc5/rc5_local.h rename to src/openssl/openssl-1.1.1w/crypto/rc5/rc5_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/rc5/rc5_skey.c b/src/openssl/openssl-1.1.1w/crypto/rc5/rc5_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc5/rc5_skey.c rename to src/openssl/openssl-1.1.1w/crypto/rc5/rc5_skey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rc5/rc5cfb64.c b/src/openssl/openssl-1.1.1w/crypto/rc5/rc5cfb64.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc5/rc5cfb64.c rename to src/openssl/openssl-1.1.1w/crypto/rc5/rc5cfb64.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rc5/rc5ofb64.c b/src/openssl/openssl-1.1.1w/crypto/rc5/rc5ofb64.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rc5/rc5ofb64.c rename to src/openssl/openssl-1.1.1w/crypto/rc5/rc5ofb64.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ripemd/asm/rmd-586.pl b/src/openssl/openssl-1.1.1w/crypto/ripemd/asm/rmd-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ripemd/asm/rmd-586.pl rename to src/openssl/openssl-1.1.1w/crypto/ripemd/asm/rmd-586.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/ripemd/build.info b/src/openssl/openssl-1.1.1w/crypto/ripemd/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ripemd/build.info rename to src/openssl/openssl-1.1.1w/crypto/ripemd/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/ripemd/rmd_dgst.c b/src/openssl/openssl-1.1.1w/crypto/ripemd/rmd_dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ripemd/rmd_dgst.c rename to src/openssl/openssl-1.1.1w/crypto/ripemd/rmd_dgst.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ripemd/rmd_local.h b/src/openssl/openssl-1.1.1w/crypto/ripemd/rmd_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ripemd/rmd_local.h rename to src/openssl/openssl-1.1.1w/crypto/ripemd/rmd_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ripemd/rmd_one.c b/src/openssl/openssl-1.1.1w/crypto/ripemd/rmd_one.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ripemd/rmd_one.c rename to src/openssl/openssl-1.1.1w/crypto/ripemd/rmd_one.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ripemd/rmdconst.h b/src/openssl/openssl-1.1.1w/crypto/ripemd/rmdconst.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ripemd/rmdconst.h rename to src/openssl/openssl-1.1.1w/crypto/ripemd/rmdconst.h diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/build.info b/src/openssl/openssl-1.1.1w/crypto/rsa/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/build.info rename to src/openssl/openssl-1.1.1w/crypto/rsa/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_ameth.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_ameth.c similarity index 99% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_ameth.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_ameth.c index 2c9c46ea5..00ed9820b 100644 --- a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_ameth.c +++ b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_ameth.c @@ -1,5 +1,5 @@ /* - * Copyright 2006-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2006-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -82,13 +82,16 @@ static int rsa_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey) if (!rsa_param_encode(pkey, &str, &strtype)) return 0; penclen = i2d_RSAPublicKey(pkey->pkey.rsa, &penc); - if (penclen <= 0) + if (penclen <= 0) { + ASN1_STRING_free(str); return 0; + } if (X509_PUBKEY_set0_param(pk, OBJ_nid2obj(pkey->ameth->pkey_id), strtype, str, penc, penclen)) return 1; OPENSSL_free(penc); + ASN1_STRING_free(str); return 0; } diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_asn1.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_asn1.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_asn1.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_chk.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_chk.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_chk.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_chk.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_crpt.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_crpt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_crpt.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_crpt.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_depr.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_depr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_depr.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_depr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_err.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_err.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_gen.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_gen.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_gen.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_gen.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_lib.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_lib.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_local.h b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_local.h rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_meth.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_meth.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_meth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_mp.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_mp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_mp.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_mp.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_none.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_none.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_none.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_none.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_oaep.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_oaep.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_oaep.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_oaep.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_ossl.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_ossl.c similarity index 97% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_ossl.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_ossl.c index 2e3ee4ab3..cf5a10ab4 100644 --- a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_ossl.c +++ b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_ossl.c @@ -226,6 +226,7 @@ static int rsa_blinding_invert(BN_BLINDING *b, BIGNUM *f, BIGNUM *unblind, * will only read the modulus from BN_BLINDING. In both cases it's safe * to access the blinding without a lock. */ + BN_set_flags(f, BN_FLG_CONSTTIME); return BN_BLINDING_invert_ex(f, unblind, b, ctx); } @@ -412,6 +413,11 @@ static int rsa_ossl_private_decrypt(int flen, const unsigned char *from, goto err; } + if (rsa->flags & RSA_FLAG_CACHE_PUBLIC) + if (!BN_MONT_CTX_set_locked(&rsa->_method_mod_n, rsa->lock, + rsa->n, ctx)) + goto err; + if (!(rsa->flags & RSA_FLAG_NO_BLINDING)) { blinding = rsa_get_blinding(rsa, &local_blinding, ctx); if (blinding == NULL) { @@ -449,13 +455,6 @@ static int rsa_ossl_private_decrypt(int flen, const unsigned char *from, goto err; } BN_with_flags(d, rsa->d, BN_FLG_CONSTTIME); - - if (rsa->flags & RSA_FLAG_CACHE_PUBLIC) - if (!BN_MONT_CTX_set_locked(&rsa->_method_mod_n, rsa->lock, - rsa->n, ctx)) { - BN_free(d); - goto err; - } if (!rsa->meth->bn_mod_exp(ret, f, d, rsa->n, ctx, rsa->_method_mod_n)) { BN_free(d); @@ -465,20 +464,11 @@ static int rsa_ossl_private_decrypt(int flen, const unsigned char *from, BN_free(d); } - if (blinding) { - /* - * ossl_bn_rsa_do_unblind() combines blinding inversion and - * 0-padded BN BE serialization - */ - j = ossl_bn_rsa_do_unblind(ret, blinding, unblind, rsa->n, ctx, - buf, num); - if (j == 0) - goto err; - } else { - j = BN_bn2binpad(ret, buf, num); - if (j < 0) + if (blinding) + if (!rsa_blinding_invert(blinding, ret, unblind, ctx)) goto err; - } + + j = BN_bn2binpad(ret, buf, num); switch (padding) { case RSA_PKCS1_PADDING: diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_pk1.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_pk1.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_pk1.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_pk1.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_pmeth.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_pmeth.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_pmeth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_prn.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_prn.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_prn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_pss.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_pss.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_pss.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_pss.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_saos.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_saos.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_saos.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_saos.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_sign.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_sign.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_sign.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_ssl.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_ssl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_ssl.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_ssl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_x931.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_x931.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_x931.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_x931.c diff --git a/src/openssl/openssl-1.1.1t/crypto/rsa/rsa_x931g.c b/src/openssl/openssl-1.1.1w/crypto/rsa/rsa_x931g.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/rsa/rsa_x931g.c rename to src/openssl/openssl-1.1.1w/crypto/rsa/rsa_x931g.c diff --git a/src/openssl/openssl-1.1.1t/crypto/s390x_arch.h b/src/openssl/openssl-1.1.1w/crypto/s390x_arch.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/s390x_arch.h rename to src/openssl/openssl-1.1.1w/crypto/s390x_arch.h diff --git a/src/openssl/openssl-1.1.1t/crypto/s390xcap.c b/src/openssl/openssl-1.1.1w/crypto/s390xcap.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/s390xcap.c rename to src/openssl/openssl-1.1.1w/crypto/s390xcap.c diff --git a/src/openssl/openssl-1.1.1t/crypto/s390xcpuid.pl b/src/openssl/openssl-1.1.1w/crypto/s390xcpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/s390xcpuid.pl rename to src/openssl/openssl-1.1.1w/crypto/s390xcpuid.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/seed/build.info b/src/openssl/openssl-1.1.1w/crypto/seed/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/seed/build.info rename to src/openssl/openssl-1.1.1w/crypto/seed/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/seed/seed.c b/src/openssl/openssl-1.1.1w/crypto/seed/seed.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/seed/seed.c rename to src/openssl/openssl-1.1.1w/crypto/seed/seed.c diff --git a/src/openssl/openssl-1.1.1t/crypto/seed/seed_cbc.c b/src/openssl/openssl-1.1.1w/crypto/seed/seed_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/seed/seed_cbc.c rename to src/openssl/openssl-1.1.1w/crypto/seed/seed_cbc.c diff --git a/src/openssl/openssl-1.1.1t/crypto/seed/seed_cfb.c b/src/openssl/openssl-1.1.1w/crypto/seed/seed_cfb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/seed/seed_cfb.c rename to src/openssl/openssl-1.1.1w/crypto/seed/seed_cfb.c diff --git a/src/openssl/openssl-1.1.1t/crypto/seed/seed_ecb.c b/src/openssl/openssl-1.1.1w/crypto/seed/seed_ecb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/seed/seed_ecb.c rename to src/openssl/openssl-1.1.1w/crypto/seed/seed_ecb.c diff --git a/src/openssl/openssl-1.1.1t/crypto/seed/seed_local.h b/src/openssl/openssl-1.1.1w/crypto/seed/seed_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/seed/seed_local.h rename to src/openssl/openssl-1.1.1w/crypto/seed/seed_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/seed/seed_ofb.c b/src/openssl/openssl-1.1.1w/crypto/seed/seed_ofb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/seed/seed_ofb.c rename to src/openssl/openssl-1.1.1w/crypto/seed/seed_ofb.c diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-armv4.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-armv4.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-armv4.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-armv8.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-armv8.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-armv8.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-avx2.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-avx2.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-avx2.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-avx2.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-avx512.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-avx512.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-avx512.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-avx512.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-avx512vl.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-avx512vl.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-avx512vl.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-avx512vl.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-c64x.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-c64x.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-c64x.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-c64x.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-mmx.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-mmx.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-mmx.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-mmx.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-ppc64.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-ppc64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-ppc64.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-ppc64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-s390x.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-s390x.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-s390x.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600p8-ppc.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600p8-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/keccak1600p8-ppc.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/keccak1600p8-ppc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-586.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-586.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-586.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-alpha.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-alpha.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-alpha.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-alpha.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-armv4-large.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-armv4-large.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-armv4-large.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-armv4-large.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-armv8.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-armv8.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-armv8.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-c64xplus.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-c64xplus.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-ia64.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-ia64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-ia64.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-ia64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-mb-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-mb-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-mb-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-mb-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-mips.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-mips.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-mips.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-mips.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-parisc.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-parisc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-parisc.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-parisc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-ppc.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-ppc.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-ppc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-s390x.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-s390x.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-s390x.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-sparcv9.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-sparcv9.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-sparcv9a.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-sparcv9a.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-sparcv9a.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-sparcv9a.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-thumb.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-thumb.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-thumb.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-thumb.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha1-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha1-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha256-586.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha256-586.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-586.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha256-armv4.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha256-armv4.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-armv4.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha256-c64xplus.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha256-c64xplus.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha256-mb-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-mb-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha256-mb-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha256-mb-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-586.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-586.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-586.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-586.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-armv4.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-armv4.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-armv4.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-armv4.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-armv8.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-armv8.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-armv8.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-armv8.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-c64xplus.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-c64xplus.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-c64xplus.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-c64xplus.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-ia64.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-ia64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-ia64.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-ia64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-mips.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-mips.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-mips.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-mips.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-parisc.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-parisc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-parisc.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-parisc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-ppc.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-ppc.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-ppc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-s390x.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-s390x.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-s390x.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-s390x.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-sparcv9.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-sparcv9.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-sparcv9.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-sparcv9.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512p8-ppc.pl b/src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512p8-ppc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/asm/sha512p8-ppc.pl rename to src/openssl/openssl-1.1.1w/crypto/sha/asm/sha512p8-ppc.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/build.info b/src/openssl/openssl-1.1.1w/crypto/sha/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/build.info rename to src/openssl/openssl-1.1.1w/crypto/sha/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/keccak1600.c b/src/openssl/openssl-1.1.1w/crypto/sha/keccak1600.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/keccak1600.c rename to src/openssl/openssl-1.1.1w/crypto/sha/keccak1600.c diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/sha1_one.c b/src/openssl/openssl-1.1.1w/crypto/sha/sha1_one.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/sha1_one.c rename to src/openssl/openssl-1.1.1w/crypto/sha/sha1_one.c diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/sha1dgst.c b/src/openssl/openssl-1.1.1w/crypto/sha/sha1dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/sha1dgst.c rename to src/openssl/openssl-1.1.1w/crypto/sha/sha1dgst.c diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/sha256.c b/src/openssl/openssl-1.1.1w/crypto/sha/sha256.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/sha256.c rename to src/openssl/openssl-1.1.1w/crypto/sha/sha256.c diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/sha512.c b/src/openssl/openssl-1.1.1w/crypto/sha/sha512.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/sha512.c rename to src/openssl/openssl-1.1.1w/crypto/sha/sha512.c diff --git a/src/openssl/openssl-1.1.1t/crypto/sha/sha_local.h b/src/openssl/openssl-1.1.1w/crypto/sha/sha_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sha/sha_local.h rename to src/openssl/openssl-1.1.1w/crypto/sha/sha_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/siphash/build.info b/src/openssl/openssl-1.1.1w/crypto/siphash/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/siphash/build.info rename to src/openssl/openssl-1.1.1w/crypto/siphash/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/siphash/siphash.c b/src/openssl/openssl-1.1.1w/crypto/siphash/siphash.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/siphash/siphash.c rename to src/openssl/openssl-1.1.1w/crypto/siphash/siphash.c diff --git a/src/openssl/openssl-1.1.1t/crypto/siphash/siphash_ameth.c b/src/openssl/openssl-1.1.1w/crypto/siphash/siphash_ameth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/siphash/siphash_ameth.c rename to src/openssl/openssl-1.1.1w/crypto/siphash/siphash_ameth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/siphash/siphash_local.h b/src/openssl/openssl-1.1.1w/crypto/siphash/siphash_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/siphash/siphash_local.h rename to src/openssl/openssl-1.1.1w/crypto/siphash/siphash_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/siphash/siphash_pmeth.c b/src/openssl/openssl-1.1.1w/crypto/siphash/siphash_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/siphash/siphash_pmeth.c rename to src/openssl/openssl-1.1.1w/crypto/siphash/siphash_pmeth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/sm2/build.info b/src/openssl/openssl-1.1.1w/crypto/sm2/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sm2/build.info rename to src/openssl/openssl-1.1.1w/crypto/sm2/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/sm2/sm2_crypt.c b/src/openssl/openssl-1.1.1w/crypto/sm2/sm2_crypt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sm2/sm2_crypt.c rename to src/openssl/openssl-1.1.1w/crypto/sm2/sm2_crypt.c diff --git a/src/openssl/openssl-1.1.1t/crypto/sm2/sm2_err.c b/src/openssl/openssl-1.1.1w/crypto/sm2/sm2_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sm2/sm2_err.c rename to src/openssl/openssl-1.1.1w/crypto/sm2/sm2_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/sm2/sm2_pmeth.c b/src/openssl/openssl-1.1.1w/crypto/sm2/sm2_pmeth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sm2/sm2_pmeth.c rename to src/openssl/openssl-1.1.1w/crypto/sm2/sm2_pmeth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/sm2/sm2_sign.c b/src/openssl/openssl-1.1.1w/crypto/sm2/sm2_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sm2/sm2_sign.c rename to src/openssl/openssl-1.1.1w/crypto/sm2/sm2_sign.c diff --git a/src/openssl/openssl-1.1.1t/crypto/sm3/build.info b/src/openssl/openssl-1.1.1w/crypto/sm3/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sm3/build.info rename to src/openssl/openssl-1.1.1w/crypto/sm3/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/sm3/m_sm3.c b/src/openssl/openssl-1.1.1w/crypto/sm3/m_sm3.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sm3/m_sm3.c rename to src/openssl/openssl-1.1.1w/crypto/sm3/m_sm3.c diff --git a/src/openssl/openssl-1.1.1t/crypto/sm3/sm3.c b/src/openssl/openssl-1.1.1w/crypto/sm3/sm3.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sm3/sm3.c rename to src/openssl/openssl-1.1.1w/crypto/sm3/sm3.c diff --git a/src/openssl/openssl-1.1.1t/crypto/sm3/sm3_local.h b/src/openssl/openssl-1.1.1w/crypto/sm3/sm3_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sm3/sm3_local.h rename to src/openssl/openssl-1.1.1w/crypto/sm3/sm3_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/sm4/build.info b/src/openssl/openssl-1.1.1w/crypto/sm4/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sm4/build.info rename to src/openssl/openssl-1.1.1w/crypto/sm4/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/sm4/sm4.c b/src/openssl/openssl-1.1.1w/crypto/sm4/sm4.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sm4/sm4.c rename to src/openssl/openssl-1.1.1w/crypto/sm4/sm4.c diff --git a/src/openssl/openssl-1.1.1t/crypto/sparc_arch.h b/src/openssl/openssl-1.1.1w/crypto/sparc_arch.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sparc_arch.h rename to src/openssl/openssl-1.1.1w/crypto/sparc_arch.h diff --git a/src/openssl/openssl-1.1.1t/crypto/sparccpuid.S b/src/openssl/openssl-1.1.1w/crypto/sparccpuid.S similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sparccpuid.S rename to src/openssl/openssl-1.1.1w/crypto/sparccpuid.S diff --git a/src/openssl/openssl-1.1.1t/crypto/sparcv9cap.c b/src/openssl/openssl-1.1.1w/crypto/sparcv9cap.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/sparcv9cap.c rename to src/openssl/openssl-1.1.1w/crypto/sparcv9cap.c diff --git a/src/openssl/openssl-1.1.1t/crypto/srp/build.info b/src/openssl/openssl-1.1.1w/crypto/srp/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/srp/build.info rename to src/openssl/openssl-1.1.1w/crypto/srp/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/srp/srp_lib.c b/src/openssl/openssl-1.1.1w/crypto/srp/srp_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/srp/srp_lib.c rename to src/openssl/openssl-1.1.1w/crypto/srp/srp_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/srp/srp_vfy.c b/src/openssl/openssl-1.1.1w/crypto/srp/srp_vfy.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/srp/srp_vfy.c rename to src/openssl/openssl-1.1.1w/crypto/srp/srp_vfy.c diff --git a/src/openssl/openssl-1.1.1t/crypto/stack/build.info b/src/openssl/openssl-1.1.1w/crypto/stack/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/stack/build.info rename to src/openssl/openssl-1.1.1w/crypto/stack/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/stack/stack.c b/src/openssl/openssl-1.1.1w/crypto/stack/stack.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/stack/stack.c rename to src/openssl/openssl-1.1.1w/crypto/stack/stack.c diff --git a/src/openssl/openssl-1.1.1t/crypto/store/build.info b/src/openssl/openssl-1.1.1w/crypto/store/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/store/build.info rename to src/openssl/openssl-1.1.1w/crypto/store/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/store/loader_file.c b/src/openssl/openssl-1.1.1w/crypto/store/loader_file.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/store/loader_file.c rename to src/openssl/openssl-1.1.1w/crypto/store/loader_file.c diff --git a/src/openssl/openssl-1.1.1t/crypto/store/store_err.c b/src/openssl/openssl-1.1.1w/crypto/store/store_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/store/store_err.c rename to src/openssl/openssl-1.1.1w/crypto/store/store_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/store/store_init.c b/src/openssl/openssl-1.1.1w/crypto/store/store_init.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/store/store_init.c rename to src/openssl/openssl-1.1.1w/crypto/store/store_init.c diff --git a/src/openssl/openssl-1.1.1t/crypto/store/store_lib.c b/src/openssl/openssl-1.1.1w/crypto/store/store_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/store/store_lib.c rename to src/openssl/openssl-1.1.1w/crypto/store/store_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/store/store_local.h b/src/openssl/openssl-1.1.1w/crypto/store/store_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/store/store_local.h rename to src/openssl/openssl-1.1.1w/crypto/store/store_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/store/store_register.c b/src/openssl/openssl-1.1.1w/crypto/store/store_register.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/store/store_register.c rename to src/openssl/openssl-1.1.1w/crypto/store/store_register.c diff --git a/src/openssl/openssl-1.1.1t/crypto/store/store_strings.c b/src/openssl/openssl-1.1.1w/crypto/store/store_strings.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/store/store_strings.c rename to src/openssl/openssl-1.1.1w/crypto/store/store_strings.c diff --git a/src/openssl/openssl-1.1.1t/crypto/threads_none.c b/src/openssl/openssl-1.1.1w/crypto/threads_none.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/threads_none.c rename to src/openssl/openssl-1.1.1w/crypto/threads_none.c diff --git a/src/openssl/openssl-1.1.1t/crypto/threads_pthread.c b/src/openssl/openssl-1.1.1w/crypto/threads_pthread.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/threads_pthread.c rename to src/openssl/openssl-1.1.1w/crypto/threads_pthread.c diff --git a/src/openssl/openssl-1.1.1t/crypto/threads_win.c b/src/openssl/openssl-1.1.1w/crypto/threads_win.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/threads_win.c rename to src/openssl/openssl-1.1.1w/crypto/threads_win.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ts/build.info b/src/openssl/openssl-1.1.1w/crypto/ts/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ts/build.info rename to src/openssl/openssl-1.1.1w/crypto/ts/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/ts/ts_asn1.c b/src/openssl/openssl-1.1.1w/crypto/ts/ts_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ts/ts_asn1.c rename to src/openssl/openssl-1.1.1w/crypto/ts/ts_asn1.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ts/ts_conf.c b/src/openssl/openssl-1.1.1w/crypto/ts/ts_conf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ts/ts_conf.c rename to src/openssl/openssl-1.1.1w/crypto/ts/ts_conf.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ts/ts_err.c b/src/openssl/openssl-1.1.1w/crypto/ts/ts_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ts/ts_err.c rename to src/openssl/openssl-1.1.1w/crypto/ts/ts_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ts/ts_lib.c b/src/openssl/openssl-1.1.1w/crypto/ts/ts_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ts/ts_lib.c rename to src/openssl/openssl-1.1.1w/crypto/ts/ts_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ts/ts_local.h b/src/openssl/openssl-1.1.1w/crypto/ts/ts_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ts/ts_local.h rename to src/openssl/openssl-1.1.1w/crypto/ts/ts_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ts/ts_req_print.c b/src/openssl/openssl-1.1.1w/crypto/ts/ts_req_print.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ts/ts_req_print.c rename to src/openssl/openssl-1.1.1w/crypto/ts/ts_req_print.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ts/ts_req_utils.c b/src/openssl/openssl-1.1.1w/crypto/ts/ts_req_utils.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ts/ts_req_utils.c rename to src/openssl/openssl-1.1.1w/crypto/ts/ts_req_utils.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ts/ts_rsp_print.c b/src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_print.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ts/ts_rsp_print.c rename to src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_print.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ts/ts_rsp_sign.c b/src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ts/ts_rsp_sign.c rename to src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_sign.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ts/ts_rsp_utils.c b/src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_utils.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ts/ts_rsp_utils.c rename to src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_utils.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ts/ts_rsp_verify.c b/src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_verify.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ts/ts_rsp_verify.c rename to src/openssl/openssl-1.1.1w/crypto/ts/ts_rsp_verify.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ts/ts_verify_ctx.c b/src/openssl/openssl-1.1.1w/crypto/ts/ts_verify_ctx.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ts/ts_verify_ctx.c rename to src/openssl/openssl-1.1.1w/crypto/ts/ts_verify_ctx.c diff --git a/src/openssl/openssl-1.1.1t/crypto/txt_db/build.info b/src/openssl/openssl-1.1.1w/crypto/txt_db/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/txt_db/build.info rename to src/openssl/openssl-1.1.1w/crypto/txt_db/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/txt_db/txt_db.c b/src/openssl/openssl-1.1.1w/crypto/txt_db/txt_db.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/txt_db/txt_db.c rename to src/openssl/openssl-1.1.1w/crypto/txt_db/txt_db.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ui/build.info b/src/openssl/openssl-1.1.1w/crypto/ui/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ui/build.info rename to src/openssl/openssl-1.1.1w/crypto/ui/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/ui/ui_err.c b/src/openssl/openssl-1.1.1w/crypto/ui/ui_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ui/ui_err.c rename to src/openssl/openssl-1.1.1w/crypto/ui/ui_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ui/ui_lib.c b/src/openssl/openssl-1.1.1w/crypto/ui/ui_lib.c similarity index 99% rename from src/openssl/openssl-1.1.1t/crypto/ui/ui_lib.c rename to src/openssl/openssl-1.1.1w/crypto/ui/ui_lib.c index 49cc45057..335a3d3d2 100644 --- a/src/openssl/openssl-1.1.1t/crypto/ui/ui_lib.c +++ b/src/openssl/openssl-1.1.1w/crypto/ui/ui_lib.c @@ -1,5 +1,5 @@ /* - * Copyright 2001-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2001-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -529,6 +529,10 @@ int UI_process(UI *ui) ok = 0; break; } + } else { + ui->flags &= ~UI_FLAG_REDOABLE; + ok = -2; + goto err; } } diff --git a/src/openssl/openssl-1.1.1t/crypto/ui/ui_local.h b/src/openssl/openssl-1.1.1w/crypto/ui/ui_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ui/ui_local.h rename to src/openssl/openssl-1.1.1w/crypto/ui/ui_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/ui/ui_null.c b/src/openssl/openssl-1.1.1w/crypto/ui/ui_null.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ui/ui_null.c rename to src/openssl/openssl-1.1.1w/crypto/ui/ui_null.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ui/ui_openssl.c b/src/openssl/openssl-1.1.1w/crypto/ui/ui_openssl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/ui/ui_openssl.c rename to src/openssl/openssl-1.1.1w/crypto/ui/ui_openssl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/ui/ui_util.c b/src/openssl/openssl-1.1.1w/crypto/ui/ui_util.c similarity index 97% rename from src/openssl/openssl-1.1.1t/crypto/ui/ui_util.c rename to src/openssl/openssl-1.1.1w/crypto/ui/ui_util.c index 32a3c4e38..754c75671 100644 --- a/src/openssl/openssl-1.1.1t/crypto/ui/ui_util.c +++ b/src/openssl/openssl-1.1.1w/crypto/ui/ui_util.c @@ -1,5 +1,5 @@ /* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2002-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -32,7 +32,7 @@ int UI_UTIL_read_pw_string(char *buf, int length, const char *prompt, int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, int verify) { - int ok = 0; + int ok = -2; UI *ui; if (size < 1) @@ -47,8 +47,6 @@ int UI_UTIL_read_pw(char *buf, char *buff, int size, const char *prompt, ok = UI_process(ui); UI_free(ui); } - if (ok > 0) - ok = 0; return ok; } diff --git a/src/openssl/openssl-1.1.1t/crypto/uid.c b/src/openssl/openssl-1.1.1w/crypto/uid.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/uid.c rename to src/openssl/openssl-1.1.1w/crypto/uid.c diff --git a/src/openssl/openssl-1.1.1t/crypto/vms_rms.h b/src/openssl/openssl-1.1.1w/crypto/vms_rms.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/vms_rms.h rename to src/openssl/openssl-1.1.1w/crypto/vms_rms.h diff --git a/src/openssl/openssl-1.1.1t/crypto/whrlpool/asm/wp-mmx.pl b/src/openssl/openssl-1.1.1w/crypto/whrlpool/asm/wp-mmx.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/whrlpool/asm/wp-mmx.pl rename to src/openssl/openssl-1.1.1w/crypto/whrlpool/asm/wp-mmx.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/whrlpool/asm/wp-x86_64.pl b/src/openssl/openssl-1.1.1w/crypto/whrlpool/asm/wp-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/whrlpool/asm/wp-x86_64.pl rename to src/openssl/openssl-1.1.1w/crypto/whrlpool/asm/wp-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/whrlpool/build.info b/src/openssl/openssl-1.1.1w/crypto/whrlpool/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/whrlpool/build.info rename to src/openssl/openssl-1.1.1w/crypto/whrlpool/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/whrlpool/wp_block.c b/src/openssl/openssl-1.1.1w/crypto/whrlpool/wp_block.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/whrlpool/wp_block.c rename to src/openssl/openssl-1.1.1w/crypto/whrlpool/wp_block.c diff --git a/src/openssl/openssl-1.1.1t/crypto/whrlpool/wp_dgst.c b/src/openssl/openssl-1.1.1w/crypto/whrlpool/wp_dgst.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/whrlpool/wp_dgst.c rename to src/openssl/openssl-1.1.1w/crypto/whrlpool/wp_dgst.c diff --git a/src/openssl/openssl-1.1.1t/crypto/whrlpool/wp_local.h b/src/openssl/openssl-1.1.1w/crypto/whrlpool/wp_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/whrlpool/wp_local.h rename to src/openssl/openssl-1.1.1w/crypto/whrlpool/wp_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/build.info b/src/openssl/openssl-1.1.1w/crypto/x509/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/build.info rename to src/openssl/openssl-1.1.1w/crypto/x509/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/by_dir.c b/src/openssl/openssl-1.1.1w/crypto/x509/by_dir.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/by_dir.c rename to src/openssl/openssl-1.1.1w/crypto/x509/by_dir.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/by_file.c b/src/openssl/openssl-1.1.1w/crypto/x509/by_file.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/by_file.c rename to src/openssl/openssl-1.1.1w/crypto/x509/by_file.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/t_crl.c b/src/openssl/openssl-1.1.1w/crypto/x509/t_crl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/t_crl.c rename to src/openssl/openssl-1.1.1w/crypto/x509/t_crl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/t_req.c b/src/openssl/openssl-1.1.1w/crypto/x509/t_req.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/t_req.c rename to src/openssl/openssl-1.1.1w/crypto/x509/t_req.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/t_x509.c b/src/openssl/openssl-1.1.1w/crypto/x509/t_x509.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/t_x509.c rename to src/openssl/openssl-1.1.1w/crypto/x509/t_x509.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_att.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_att.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_att.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_att.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_cmp.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_cmp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_cmp.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_cmp.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_d2.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_d2.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_d2.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_d2.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_def.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_def.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_def.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_def.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_err.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_err.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_ext.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_ext.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_ext.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_ext.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_local.h b/src/openssl/openssl-1.1.1w/crypto/x509/x509_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_local.h rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_local.h diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_lu.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_lu.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_lu.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_lu.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_meth.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_meth.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_meth.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_meth.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_obj.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_obj.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_obj.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_obj.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_r2x.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_r2x.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_r2x.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_r2x.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_req.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_req.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_req.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_req.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_set.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_set.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_set.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_set.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_trs.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_trs.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_trs.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_trs.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_txt.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_txt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_txt.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_txt.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_v3.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_v3.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_v3.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_v3.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_vfy.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_vfy.c similarity index 99% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_vfy.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_vfy.c index 925fbb541..66b532a16 100644 --- a/src/openssl/openssl-1.1.1t/crypto/x509/x509_vfy.c +++ b/src/openssl/openssl-1.1.1w/crypto/x509/x509_vfy.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -1649,18 +1649,25 @@ static int check_policy(X509_STORE_CTX *ctx) } /* Invalid or inconsistent extensions */ if (ret == X509_PCY_TREE_INVALID) { - int i; + int i, cbcalled = 0; /* Locate certificates with bad extensions and notify callback. */ - for (i = 1; i < sk_X509_num(ctx->chain); i++) { + for (i = 0; i < sk_X509_num(ctx->chain); i++) { X509 *x = sk_X509_value(ctx->chain, i); if (!(x->ex_flags & EXFLAG_INVALID_POLICY)) continue; + cbcalled = 1; if (!verify_cb_cert(ctx, x, i, X509_V_ERR_INVALID_POLICY_EXTENSION)) return 0; } + if (!cbcalled) { + /* Should not be able to get here */ + X509err(X509_F_CHECK_POLICY, ERR_R_INTERNAL_ERROR); + return 0; + } + /* The callback ignored the error so we return success */ return 1; } if (ret == X509_PCY_TREE_FAILURE) { diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509_vpm.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509_vpm.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509_vpm.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509_vpm.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509cset.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509cset.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509cset.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509cset.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509name.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509name.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509name.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509name.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509rset.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509rset.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509rset.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509rset.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509spki.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509spki.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509spki.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509spki.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x509type.c b/src/openssl/openssl-1.1.1w/crypto/x509/x509type.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x509type.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x509type.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x_all.c b/src/openssl/openssl-1.1.1w/crypto/x509/x_all.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x_all.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x_all.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x_attrib.c b/src/openssl/openssl-1.1.1w/crypto/x509/x_attrib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x_attrib.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x_attrib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x_crl.c b/src/openssl/openssl-1.1.1w/crypto/x509/x_crl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x_crl.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x_crl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x_exten.c b/src/openssl/openssl-1.1.1w/crypto/x509/x_exten.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x_exten.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x_exten.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x_name.c b/src/openssl/openssl-1.1.1w/crypto/x509/x_name.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x_name.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x_name.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x_pubkey.c b/src/openssl/openssl-1.1.1w/crypto/x509/x_pubkey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x_pubkey.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x_pubkey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x_req.c b/src/openssl/openssl-1.1.1w/crypto/x509/x_req.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x_req.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x_req.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x_x509.c b/src/openssl/openssl-1.1.1w/crypto/x509/x_x509.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x_x509.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x_x509.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509/x_x509a.c b/src/openssl/openssl-1.1.1w/crypto/x509/x_x509a.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509/x_x509a.c rename to src/openssl/openssl-1.1.1w/crypto/x509/x_x509a.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/build.info b/src/openssl/openssl-1.1.1w/crypto/x509v3/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/build.info rename to src/openssl/openssl-1.1.1w/crypto/x509v3/build.info diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/ext_dat.h b/src/openssl/openssl-1.1.1w/crypto/x509v3/ext_dat.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/ext_dat.h rename to src/openssl/openssl-1.1.1w/crypto/x509v3/ext_dat.h diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_cache.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_cache.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_cache.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_cache.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_data.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_data.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_data.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_data.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_lib.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_lib.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_local.h b/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_local.h similarity index 94% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_local.h rename to src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_local.h index 5daf78de4..70d77bfb0 100644 --- a/src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_local.h +++ b/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_local.h @@ -1,5 +1,5 @@ /* - * Copyright 2004-2016 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -111,6 +111,11 @@ struct X509_POLICY_LEVEL_st { }; struct X509_POLICY_TREE_st { + /* The number of nodes in the tree */ + size_t node_count; + /* The maximum number of nodes in the tree */ + size_t node_maximum; + /* This is the tree 'level' data */ X509_POLICY_LEVEL *levels; int nlevel; @@ -159,7 +164,8 @@ X509_POLICY_NODE *tree_find_sk(STACK_OF(X509_POLICY_NODE) *sk, X509_POLICY_NODE *level_add_node(X509_POLICY_LEVEL *level, X509_POLICY_DATA *data, X509_POLICY_NODE *parent, - X509_POLICY_TREE *tree); + X509_POLICY_TREE *tree, + int extra_data); void policy_node_free(X509_POLICY_NODE *node); int policy_node_match(const X509_POLICY_LEVEL *lvl, const X509_POLICY_NODE *node, const ASN1_OBJECT *oid); diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_map.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_map.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_map.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_map.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_node.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_node.c similarity index 85% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_node.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_node.c index e2d7b1532..78bf8b62f 100644 --- a/src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_node.c +++ b/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_node.c @@ -1,5 +1,5 @@ /* - * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -59,10 +59,15 @@ X509_POLICY_NODE *level_find_node(const X509_POLICY_LEVEL *level, X509_POLICY_NODE *level_add_node(X509_POLICY_LEVEL *level, X509_POLICY_DATA *data, X509_POLICY_NODE *parent, - X509_POLICY_TREE *tree) + X509_POLICY_TREE *tree, + int extra_data) { X509_POLICY_NODE *node; + /* Verify that the tree isn't too large. This mitigates CVE-2023-0464 */ + if (tree->node_maximum > 0 && tree->node_count >= tree->node_maximum) + return NULL; + node = OPENSSL_zalloc(sizeof(*node)); if (node == NULL) { X509V3err(X509V3_F_LEVEL_ADD_NODE, ERR_R_MALLOC_FAILURE); @@ -70,7 +75,7 @@ X509_POLICY_NODE *level_add_node(X509_POLICY_LEVEL *level, } node->data = data; node->parent = parent; - if (level) { + if (level != NULL) { if (OBJ_obj2nid(data->valid_policy) == NID_any_policy) { if (level->anyPolicy) goto node_error; @@ -90,24 +95,33 @@ X509_POLICY_NODE *level_add_node(X509_POLICY_LEVEL *level, } } - if (tree) { + if (extra_data) { if (tree->extra_data == NULL) tree->extra_data = sk_X509_POLICY_DATA_new_null(); if (tree->extra_data == NULL){ X509V3err(X509V3_F_LEVEL_ADD_NODE, ERR_R_MALLOC_FAILURE); - goto node_error; + goto extra_data_error; } if (!sk_X509_POLICY_DATA_push(tree->extra_data, data)) { X509V3err(X509V3_F_LEVEL_ADD_NODE, ERR_R_MALLOC_FAILURE); - goto node_error; + goto extra_data_error; } } + tree->node_count++; if (parent) parent->nchild++; return node; + extra_data_error: + if (level != NULL) { + if (level->anyPolicy == node) + level->anyPolicy = NULL; + else + (void) sk_X509_POLICY_NODE_pop(level->nodes); + } + node_error: policy_node_free(node); return NULL; diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_tree.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_tree.c similarity index 93% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_tree.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_tree.c index 6e8322cbc..8f09c9d09 100644 --- a/src/openssl/openssl-1.1.1t/crypto/x509v3/pcy_tree.c +++ b/src/openssl/openssl-1.1.1w/crypto/x509v3/pcy_tree.c @@ -1,5 +1,5 @@ /* - * Copyright 2004-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -13,6 +13,20 @@ #include "pcy_local.h" +/* + * If the maximum number of nodes in the policy tree isn't defined, set it to + * a generous default of 1000 nodes. + * + * Defining this to be zero means unlimited policy tree growth which opens the + * door on CVE-2023-0464. + */ + +#ifndef OPENSSL_POLICY_TREE_NODES_MAX +# define OPENSSL_POLICY_TREE_NODES_MAX 1000 +#endif + +static void exnode_free(X509_POLICY_NODE *node); + /* * Enable this to print out the complete policy tree at various point during * evaluation. @@ -168,6 +182,9 @@ static int tree_init(X509_POLICY_TREE **ptree, STACK_OF(X509) *certs, return X509_PCY_TREE_INTERNAL; } + /* Limit the growth of the tree to mitigate CVE-2023-0464 */ + tree->node_maximum = OPENSSL_POLICY_TREE_NODES_MAX; + /* * http://tools.ietf.org/html/rfc5280#section-6.1.2, figure 3. * @@ -184,7 +201,7 @@ static int tree_init(X509_POLICY_TREE **ptree, STACK_OF(X509) *certs, level = tree->levels; if ((data = policy_data_new(NULL, OBJ_nid2obj(NID_any_policy), 0)) == NULL) goto bad_tree; - if (level_add_node(level, data, NULL, tree) == NULL) { + if (level_add_node(level, data, NULL, tree, 1) == NULL) { policy_data_free(data); goto bad_tree; } @@ -243,7 +260,8 @@ static int tree_init(X509_POLICY_TREE **ptree, STACK_OF(X509) *certs, * Return value: 1 on success, 0 otherwise */ static int tree_link_matching_nodes(X509_POLICY_LEVEL *curr, - X509_POLICY_DATA *data) + X509_POLICY_DATA *data, + X509_POLICY_TREE *tree) { X509_POLICY_LEVEL *last = curr - 1; int i, matched = 0; @@ -253,13 +271,13 @@ static int tree_link_matching_nodes(X509_POLICY_LEVEL *curr, X509_POLICY_NODE *node = sk_X509_POLICY_NODE_value(last->nodes, i); if (policy_node_match(last, node, data->valid_policy)) { - if (level_add_node(curr, data, node, NULL) == NULL) + if (level_add_node(curr, data, node, tree, 0) == NULL) return 0; matched = 1; } } if (!matched && last->anyPolicy) { - if (level_add_node(curr, data, last->anyPolicy, NULL) == NULL) + if (level_add_node(curr, data, last->anyPolicy, tree, 0) == NULL) return 0; } return 1; @@ -272,7 +290,8 @@ static int tree_link_matching_nodes(X509_POLICY_LEVEL *curr, * Return value: 1 on success, 0 otherwise. */ static int tree_link_nodes(X509_POLICY_LEVEL *curr, - const X509_POLICY_CACHE *cache) + const X509_POLICY_CACHE *cache, + X509_POLICY_TREE *tree) { int i; @@ -280,7 +299,7 @@ static int tree_link_nodes(X509_POLICY_LEVEL *curr, X509_POLICY_DATA *data = sk_X509_POLICY_DATA_value(cache->data, i); /* Look for matching nodes in previous level */ - if (!tree_link_matching_nodes(curr, data)) + if (!tree_link_matching_nodes(curr, data, tree)) return 0; } return 1; @@ -311,7 +330,7 @@ static int tree_add_unmatched(X509_POLICY_LEVEL *curr, /* Curr may not have anyPolicy */ data->qualifier_set = cache->anyPolicy->qualifier_set; data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS; - if (level_add_node(curr, data, node, tree) == NULL) { + if (level_add_node(curr, data, node, tree, 1) == NULL) { policy_data_free(data); return 0; } @@ -373,7 +392,7 @@ static int tree_link_any(X509_POLICY_LEVEL *curr, } /* Finally add link to anyPolicy */ if (last->anyPolicy && - level_add_node(curr, cache->anyPolicy, last->anyPolicy, NULL) == NULL) + level_add_node(curr, cache->anyPolicy, last->anyPolicy, tree, 0) == NULL) return 0; return 1; } @@ -555,15 +574,24 @@ static int tree_calculate_user_set(X509_POLICY_TREE *tree, extra->qualifier_set = anyPolicy->data->qualifier_set; extra->flags = POLICY_DATA_FLAG_SHARED_QUALIFIERS | POLICY_DATA_FLAG_EXTRA_NODE; - node = level_add_node(NULL, extra, anyPolicy->parent, tree); + node = level_add_node(NULL, extra, anyPolicy->parent, + tree, 1); + if (node == NULL) { + policy_data_free(extra); + return 0; + } } if (!tree->user_policies) { tree->user_policies = sk_X509_POLICY_NODE_new_null(); - if (!tree->user_policies) - return 1; + if (!tree->user_policies) { + exnode_free(node); + return 0; + } } - if (!sk_X509_POLICY_NODE_push(tree->user_policies, node)) + if (!sk_X509_POLICY_NODE_push(tree->user_policies, node)) { + exnode_free(node); return 0; + } } return 1; } @@ -582,7 +610,7 @@ static int tree_evaluate(X509_POLICY_TREE *tree) for (i = 1; i < tree->nlevel; i++, curr++) { cache = policy_cache_set(curr->cert); - if (!tree_link_nodes(curr, cache)) + if (!tree_link_nodes(curr, cache, tree)) return X509_PCY_TREE_INTERNAL; if (!(curr->flags & X509_V_FLAG_INHIBIT_ANY) diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/standard_exts.h b/src/openssl/openssl-1.1.1w/crypto/x509v3/standard_exts.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/standard_exts.h rename to src/openssl/openssl-1.1.1w/crypto/x509v3/standard_exts.h diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_addr.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_addr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_addr.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_addr.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_admis.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_admis.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_admis.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_admis.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_admis.h b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_admis.h similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_admis.h rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_admis.h diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_akey.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_akey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_akey.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_akey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_akeya.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_akeya.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_akeya.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_akeya.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_alt.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_alt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_alt.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_alt.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_asid.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_asid.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_asid.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_asid.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_bcons.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_bcons.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_bcons.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_bcons.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_bitst.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_bitst.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_bitst.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_bitst.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_conf.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_conf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_conf.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_conf.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_cpols.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_cpols.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_cpols.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_cpols.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_crld.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_crld.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_crld.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_crld.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_enum.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_enum.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_enum.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_enum.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_extku.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_extku.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_extku.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_extku.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_genn.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_genn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_genn.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_genn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_ia5.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_ia5.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_ia5.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_ia5.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_info.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_info.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_info.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_info.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_int.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_int.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_int.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_int.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_lib.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_lib.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_lib.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_ncons.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_ncons.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_ncons.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_ncons.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_pci.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pci.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_pci.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pci.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_pcia.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pcia.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_pcia.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pcia.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_pcons.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pcons.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_pcons.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pcons.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_pku.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pku.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_pku.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pku.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_pmaps.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pmaps.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_pmaps.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_pmaps.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_prn.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_prn.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_prn.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_prn.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_purp.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_purp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_purp.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_purp.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_skey.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_skey.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_skey.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_skey.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_sxnet.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_sxnet.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_sxnet.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_sxnet.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_tlsf.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_tlsf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_tlsf.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_tlsf.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3_utl.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3_utl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3_utl.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3_utl.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x509v3/v3err.c b/src/openssl/openssl-1.1.1w/crypto/x509v3/v3err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x509v3/v3err.c rename to src/openssl/openssl-1.1.1w/crypto/x509v3/v3err.c diff --git a/src/openssl/openssl-1.1.1t/crypto/x86_64cpuid.pl b/src/openssl/openssl-1.1.1w/crypto/x86_64cpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x86_64cpuid.pl rename to src/openssl/openssl-1.1.1w/crypto/x86_64cpuid.pl diff --git a/src/openssl/openssl-1.1.1t/crypto/x86cpuid.pl b/src/openssl/openssl-1.1.1w/crypto/x86cpuid.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/crypto/x86cpuid.pl rename to src/openssl/openssl-1.1.1w/crypto/x86cpuid.pl diff --git a/src/openssl/openssl-1.1.1t/demos/README b/src/openssl/openssl-1.1.1w/demos/README similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/README rename to src/openssl/openssl-1.1.1w/demos/README diff --git a/src/openssl/openssl-1.1.1t/demos/bio/Makefile b/src/openssl/openssl-1.1.1w/demos/bio/Makefile similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/Makefile rename to src/openssl/openssl-1.1.1w/demos/bio/Makefile diff --git a/src/openssl/openssl-1.1.1t/demos/bio/README b/src/openssl/openssl-1.1.1w/demos/bio/README similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/README rename to src/openssl/openssl-1.1.1w/demos/bio/README diff --git a/src/openssl/openssl-1.1.1t/demos/bio/accept.cnf b/src/openssl/openssl-1.1.1w/demos/bio/accept.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/accept.cnf rename to src/openssl/openssl-1.1.1w/demos/bio/accept.cnf diff --git a/src/openssl/openssl-1.1.1t/demos/bio/client-arg.c b/src/openssl/openssl-1.1.1w/demos/bio/client-arg.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/client-arg.c rename to src/openssl/openssl-1.1.1w/demos/bio/client-arg.c diff --git a/src/openssl/openssl-1.1.1t/demos/bio/client-conf.c b/src/openssl/openssl-1.1.1w/demos/bio/client-conf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/client-conf.c rename to src/openssl/openssl-1.1.1w/demos/bio/client-conf.c diff --git a/src/openssl/openssl-1.1.1t/demos/bio/cmod.cnf b/src/openssl/openssl-1.1.1w/demos/bio/cmod.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/cmod.cnf rename to src/openssl/openssl-1.1.1w/demos/bio/cmod.cnf diff --git a/src/openssl/openssl-1.1.1t/demos/bio/connect.cnf b/src/openssl/openssl-1.1.1w/demos/bio/connect.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/connect.cnf rename to src/openssl/openssl-1.1.1w/demos/bio/connect.cnf diff --git a/src/openssl/openssl-1.1.1t/demos/bio/descrip.mms b/src/openssl/openssl-1.1.1w/demos/bio/descrip.mms similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/descrip.mms rename to src/openssl/openssl-1.1.1w/demos/bio/descrip.mms diff --git a/src/openssl/openssl-1.1.1t/demos/bio/intca.pem b/src/openssl/openssl-1.1.1w/demos/bio/intca.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/intca.pem rename to src/openssl/openssl-1.1.1w/demos/bio/intca.pem diff --git a/src/openssl/openssl-1.1.1t/demos/bio/root.pem b/src/openssl/openssl-1.1.1w/demos/bio/root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/root.pem rename to src/openssl/openssl-1.1.1w/demos/bio/root.pem diff --git a/src/openssl/openssl-1.1.1t/demos/bio/saccept.c b/src/openssl/openssl-1.1.1w/demos/bio/saccept.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/saccept.c rename to src/openssl/openssl-1.1.1w/demos/bio/saccept.c diff --git a/src/openssl/openssl-1.1.1t/demos/bio/sconnect.c b/src/openssl/openssl-1.1.1w/demos/bio/sconnect.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/sconnect.c rename to src/openssl/openssl-1.1.1w/demos/bio/sconnect.c diff --git a/src/openssl/openssl-1.1.1t/demos/bio/server-arg.c b/src/openssl/openssl-1.1.1w/demos/bio/server-arg.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/server-arg.c rename to src/openssl/openssl-1.1.1w/demos/bio/server-arg.c diff --git a/src/openssl/openssl-1.1.1t/demos/bio/server-cmod.c b/src/openssl/openssl-1.1.1w/demos/bio/server-cmod.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/server-cmod.c rename to src/openssl/openssl-1.1.1w/demos/bio/server-cmod.c diff --git a/src/openssl/openssl-1.1.1t/demos/bio/server-conf.c b/src/openssl/openssl-1.1.1w/demos/bio/server-conf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/server-conf.c rename to src/openssl/openssl-1.1.1w/demos/bio/server-conf.c diff --git a/src/openssl/openssl-1.1.1t/demos/bio/server-ec.pem b/src/openssl/openssl-1.1.1w/demos/bio/server-ec.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/server-ec.pem rename to src/openssl/openssl-1.1.1w/demos/bio/server-ec.pem diff --git a/src/openssl/openssl-1.1.1t/demos/bio/server.pem b/src/openssl/openssl-1.1.1w/demos/bio/server.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/server.pem rename to src/openssl/openssl-1.1.1w/demos/bio/server.pem diff --git a/src/openssl/openssl-1.1.1t/demos/bio/shared.opt b/src/openssl/openssl-1.1.1w/demos/bio/shared.opt similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/shared.opt rename to src/openssl/openssl-1.1.1w/demos/bio/shared.opt diff --git a/src/openssl/openssl-1.1.1t/demos/bio/static.opt b/src/openssl/openssl-1.1.1w/demos/bio/static.opt similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/bio/static.opt rename to src/openssl/openssl-1.1.1w/demos/bio/static.opt diff --git a/src/openssl/openssl-1.1.1t/demos/certs/README b/src/openssl/openssl-1.1.1w/demos/certs/README similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/certs/README rename to src/openssl/openssl-1.1.1w/demos/certs/README diff --git a/src/openssl/openssl-1.1.1t/demos/certs/apps/apps.cnf b/src/openssl/openssl-1.1.1w/demos/certs/apps/apps.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/certs/apps/apps.cnf rename to src/openssl/openssl-1.1.1w/demos/certs/apps/apps.cnf diff --git a/src/openssl/openssl-1.1.1t/demos/certs/apps/ckey.pem b/src/openssl/openssl-1.1.1w/demos/certs/apps/ckey.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/certs/apps/ckey.pem rename to src/openssl/openssl-1.1.1w/demos/certs/apps/ckey.pem diff --git a/src/openssl/openssl-1.1.1t/demos/certs/apps/intkey.pem b/src/openssl/openssl-1.1.1w/demos/certs/apps/intkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/certs/apps/intkey.pem rename to src/openssl/openssl-1.1.1w/demos/certs/apps/intkey.pem diff --git a/src/openssl/openssl-1.1.1t/demos/certs/apps/mkacerts.sh b/src/openssl/openssl-1.1.1w/demos/certs/apps/mkacerts.sh similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/certs/apps/mkacerts.sh rename to src/openssl/openssl-1.1.1w/demos/certs/apps/mkacerts.sh diff --git a/src/openssl/openssl-1.1.1t/demos/certs/apps/mkxcerts.sh b/src/openssl/openssl-1.1.1w/demos/certs/apps/mkxcerts.sh similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/certs/apps/mkxcerts.sh rename to src/openssl/openssl-1.1.1w/demos/certs/apps/mkxcerts.sh diff --git a/src/openssl/openssl-1.1.1t/demos/certs/apps/rootkey.pem b/src/openssl/openssl-1.1.1w/demos/certs/apps/rootkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/certs/apps/rootkey.pem rename to src/openssl/openssl-1.1.1w/demos/certs/apps/rootkey.pem diff --git a/src/openssl/openssl-1.1.1t/demos/certs/apps/skey.pem b/src/openssl/openssl-1.1.1w/demos/certs/apps/skey.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/certs/apps/skey.pem rename to src/openssl/openssl-1.1.1w/demos/certs/apps/skey.pem diff --git a/src/openssl/openssl-1.1.1t/demos/certs/apps/skey2.pem b/src/openssl/openssl-1.1.1w/demos/certs/apps/skey2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/certs/apps/skey2.pem rename to src/openssl/openssl-1.1.1w/demos/certs/apps/skey2.pem diff --git a/src/openssl/openssl-1.1.1t/demos/certs/ca.cnf b/src/openssl/openssl-1.1.1w/demos/certs/ca.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/certs/ca.cnf rename to src/openssl/openssl-1.1.1w/demos/certs/ca.cnf diff --git a/src/openssl/openssl-1.1.1t/demos/certs/mkcerts.sh b/src/openssl/openssl-1.1.1w/demos/certs/mkcerts.sh similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/certs/mkcerts.sh rename to src/openssl/openssl-1.1.1w/demos/certs/mkcerts.sh diff --git a/src/openssl/openssl-1.1.1t/demos/certs/ocspquery.sh b/src/openssl/openssl-1.1.1w/demos/certs/ocspquery.sh similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/certs/ocspquery.sh rename to src/openssl/openssl-1.1.1w/demos/certs/ocspquery.sh diff --git a/src/openssl/openssl-1.1.1t/demos/certs/ocsprun.sh b/src/openssl/openssl-1.1.1w/demos/certs/ocsprun.sh similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/certs/ocsprun.sh rename to src/openssl/openssl-1.1.1w/demos/certs/ocsprun.sh diff --git a/src/openssl/openssl-1.1.1t/demos/cms/cacert.pem b/src/openssl/openssl-1.1.1w/demos/cms/cacert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/cacert.pem rename to src/openssl/openssl-1.1.1w/demos/cms/cacert.pem diff --git a/src/openssl/openssl-1.1.1t/demos/cms/cakey.pem b/src/openssl/openssl-1.1.1w/demos/cms/cakey.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/cakey.pem rename to src/openssl/openssl-1.1.1w/demos/cms/cakey.pem diff --git a/src/openssl/openssl-1.1.1t/demos/cms/cms_comp.c b/src/openssl/openssl-1.1.1w/demos/cms/cms_comp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/cms_comp.c rename to src/openssl/openssl-1.1.1w/demos/cms/cms_comp.c diff --git a/src/openssl/openssl-1.1.1t/demos/cms/cms_ddec.c b/src/openssl/openssl-1.1.1w/demos/cms/cms_ddec.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/cms_ddec.c rename to src/openssl/openssl-1.1.1w/demos/cms/cms_ddec.c diff --git a/src/openssl/openssl-1.1.1t/demos/cms/cms_dec.c b/src/openssl/openssl-1.1.1w/demos/cms/cms_dec.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/cms_dec.c rename to src/openssl/openssl-1.1.1w/demos/cms/cms_dec.c diff --git a/src/openssl/openssl-1.1.1t/demos/cms/cms_denc.c b/src/openssl/openssl-1.1.1w/demos/cms/cms_denc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/cms_denc.c rename to src/openssl/openssl-1.1.1w/demos/cms/cms_denc.c diff --git a/src/openssl/openssl-1.1.1t/demos/cms/cms_enc.c b/src/openssl/openssl-1.1.1w/demos/cms/cms_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/cms_enc.c rename to src/openssl/openssl-1.1.1w/demos/cms/cms_enc.c diff --git a/src/openssl/openssl-1.1.1t/demos/cms/cms_sign.c b/src/openssl/openssl-1.1.1w/demos/cms/cms_sign.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/cms_sign.c rename to src/openssl/openssl-1.1.1w/demos/cms/cms_sign.c diff --git a/src/openssl/openssl-1.1.1t/demos/cms/cms_sign2.c b/src/openssl/openssl-1.1.1w/demos/cms/cms_sign2.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/cms_sign2.c rename to src/openssl/openssl-1.1.1w/demos/cms/cms_sign2.c diff --git a/src/openssl/openssl-1.1.1t/demos/cms/cms_uncomp.c b/src/openssl/openssl-1.1.1w/demos/cms/cms_uncomp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/cms_uncomp.c rename to src/openssl/openssl-1.1.1w/demos/cms/cms_uncomp.c diff --git a/src/openssl/openssl-1.1.1t/demos/cms/cms_ver.c b/src/openssl/openssl-1.1.1w/demos/cms/cms_ver.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/cms_ver.c rename to src/openssl/openssl-1.1.1w/demos/cms/cms_ver.c diff --git a/src/openssl/openssl-1.1.1t/demos/cms/comp.txt b/src/openssl/openssl-1.1.1w/demos/cms/comp.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/comp.txt rename to src/openssl/openssl-1.1.1w/demos/cms/comp.txt diff --git a/src/openssl/openssl-1.1.1t/demos/cms/encr.txt b/src/openssl/openssl-1.1.1w/demos/cms/encr.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/encr.txt rename to src/openssl/openssl-1.1.1w/demos/cms/encr.txt diff --git a/src/openssl/openssl-1.1.1t/demos/cms/sign.txt b/src/openssl/openssl-1.1.1w/demos/cms/sign.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/sign.txt rename to src/openssl/openssl-1.1.1w/demos/cms/sign.txt diff --git a/src/openssl/openssl-1.1.1t/demos/cms/signer.pem b/src/openssl/openssl-1.1.1w/demos/cms/signer.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/signer.pem rename to src/openssl/openssl-1.1.1w/demos/cms/signer.pem diff --git a/src/openssl/openssl-1.1.1t/demos/cms/signer2.pem b/src/openssl/openssl-1.1.1w/demos/cms/signer2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/cms/signer2.pem rename to src/openssl/openssl-1.1.1w/demos/cms/signer2.pem diff --git a/src/openssl/openssl-1.1.1t/demos/engines/e_chil.txt b/src/openssl/openssl-1.1.1w/demos/engines/e_chil.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/engines/e_chil.txt rename to src/openssl/openssl-1.1.1w/demos/engines/e_chil.txt diff --git a/src/openssl/openssl-1.1.1t/demos/evp/Makefile b/src/openssl/openssl-1.1.1w/demos/evp/Makefile similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/evp/Makefile rename to src/openssl/openssl-1.1.1w/demos/evp/Makefile diff --git a/src/openssl/openssl-1.1.1t/demos/evp/aesccm.c b/src/openssl/openssl-1.1.1w/demos/evp/aesccm.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/evp/aesccm.c rename to src/openssl/openssl-1.1.1w/demos/evp/aesccm.c diff --git a/src/openssl/openssl-1.1.1t/demos/evp/aesgcm.c b/src/openssl/openssl-1.1.1w/demos/evp/aesgcm.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/evp/aesgcm.c rename to src/openssl/openssl-1.1.1w/demos/evp/aesgcm.c diff --git a/src/openssl/openssl-1.1.1t/demos/pkcs12/pkread.c b/src/openssl/openssl-1.1.1w/demos/pkcs12/pkread.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/pkcs12/pkread.c rename to src/openssl/openssl-1.1.1w/demos/pkcs12/pkread.c diff --git a/src/openssl/openssl-1.1.1t/demos/pkcs12/pkwrite.c b/src/openssl/openssl-1.1.1w/demos/pkcs12/pkwrite.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/pkcs12/pkwrite.c rename to src/openssl/openssl-1.1.1w/demos/pkcs12/pkwrite.c diff --git a/src/openssl/openssl-1.1.1t/demos/smime/cacert.pem b/src/openssl/openssl-1.1.1w/demos/smime/cacert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/smime/cacert.pem rename to src/openssl/openssl-1.1.1w/demos/smime/cacert.pem diff --git a/src/openssl/openssl-1.1.1t/demos/smime/cakey.pem b/src/openssl/openssl-1.1.1w/demos/smime/cakey.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/smime/cakey.pem rename to src/openssl/openssl-1.1.1w/demos/smime/cakey.pem diff --git a/src/openssl/openssl-1.1.1t/demos/smime/encr.txt b/src/openssl/openssl-1.1.1w/demos/smime/encr.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/smime/encr.txt rename to src/openssl/openssl-1.1.1w/demos/smime/encr.txt diff --git a/src/openssl/openssl-1.1.1t/demos/smime/sign.txt b/src/openssl/openssl-1.1.1w/demos/smime/sign.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/smime/sign.txt rename to src/openssl/openssl-1.1.1w/demos/smime/sign.txt diff --git a/src/openssl/openssl-1.1.1t/demos/smime/signer.pem b/src/openssl/openssl-1.1.1w/demos/smime/signer.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/smime/signer.pem rename to src/openssl/openssl-1.1.1w/demos/smime/signer.pem diff --git a/src/openssl/openssl-1.1.1t/demos/smime/signer2.pem b/src/openssl/openssl-1.1.1w/demos/smime/signer2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/smime/signer2.pem rename to src/openssl/openssl-1.1.1w/demos/smime/signer2.pem diff --git a/src/openssl/openssl-1.1.1t/demos/smime/smdec.c b/src/openssl/openssl-1.1.1w/demos/smime/smdec.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/smime/smdec.c rename to src/openssl/openssl-1.1.1w/demos/smime/smdec.c diff --git a/src/openssl/openssl-1.1.1t/demos/smime/smenc.c b/src/openssl/openssl-1.1.1w/demos/smime/smenc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/smime/smenc.c rename to src/openssl/openssl-1.1.1w/demos/smime/smenc.c diff --git a/src/openssl/openssl-1.1.1t/demos/smime/smsign.c b/src/openssl/openssl-1.1.1w/demos/smime/smsign.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/smime/smsign.c rename to src/openssl/openssl-1.1.1w/demos/smime/smsign.c diff --git a/src/openssl/openssl-1.1.1t/demos/smime/smsign2.c b/src/openssl/openssl-1.1.1w/demos/smime/smsign2.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/smime/smsign2.c rename to src/openssl/openssl-1.1.1w/demos/smime/smsign2.c diff --git a/src/openssl/openssl-1.1.1t/demos/smime/smver.c b/src/openssl/openssl-1.1.1w/demos/smime/smver.c similarity index 100% rename from src/openssl/openssl-1.1.1t/demos/smime/smver.c rename to src/openssl/openssl-1.1.1w/demos/smime/smver.c diff --git a/src/openssl/openssl-1.1.1t/doc/HOWTO/certificates.txt b/src/openssl/openssl-1.1.1w/doc/HOWTO/certificates.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/HOWTO/certificates.txt rename to src/openssl/openssl-1.1.1w/doc/HOWTO/certificates.txt diff --git a/src/openssl/openssl-1.1.1t/doc/HOWTO/keys.txt b/src/openssl/openssl-1.1.1w/doc/HOWTO/keys.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/HOWTO/keys.txt rename to src/openssl/openssl-1.1.1w/doc/HOWTO/keys.txt diff --git a/src/openssl/openssl-1.1.1t/doc/README b/src/openssl/openssl-1.1.1w/doc/README similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/README rename to src/openssl/openssl-1.1.1w/doc/README diff --git a/src/openssl/openssl-1.1.1t/doc/dir-locals.example.el b/src/openssl/openssl-1.1.1w/doc/dir-locals.example.el similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/dir-locals.example.el rename to src/openssl/openssl-1.1.1w/doc/dir-locals.example.el diff --git a/src/openssl/openssl-1.1.1t/doc/fingerprints.txt b/src/openssl/openssl-1.1.1w/doc/fingerprints.txt similarity index 86% rename from src/openssl/openssl-1.1.1t/doc/fingerprints.txt rename to src/openssl/openssl-1.1.1w/doc/fingerprints.txt index 3604fbdc6..0655df2fd 100644 --- a/src/openssl/openssl-1.1.1t/doc/fingerprints.txt +++ b/src/openssl/openssl-1.1.1w/doc/fingerprints.txt @@ -12,6 +12,11 @@ in the file named openssl-1.0.1h.tar.gz.asc. The following is the list of fingerprints for the keys that are currently in use to sign OpenSSL distributions: +pub rsa4096 2014-10-04 + Key fingerprint = EFC0 A467 D613 CB83 C7ED 6D30 D894 E2CE 8B3D 79F5 +uid OpenSSL OMC +uid OpenSSL Security + pub 4096R/7DF9EE8C 2014-10-04 Key fingerprint = 7953 AC1F BC3D C8B3 B292 393E D5E9 E43F 7DF9 EE8C uid Richard Levitte diff --git a/src/openssl/openssl-1.1.1t/doc/man1/CA.pl.pod b/src/openssl/openssl-1.1.1w/doc/man1/CA.pl.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/CA.pl.pod rename to src/openssl/openssl-1.1.1w/doc/man1/CA.pl.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/asn1parse.pod b/src/openssl/openssl-1.1.1w/doc/man1/asn1parse.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/asn1parse.pod rename to src/openssl/openssl-1.1.1w/doc/man1/asn1parse.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/ca.pod b/src/openssl/openssl-1.1.1w/doc/man1/ca.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/ca.pod rename to src/openssl/openssl-1.1.1w/doc/man1/ca.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/ciphers.pod b/src/openssl/openssl-1.1.1w/doc/man1/ciphers.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/ciphers.pod rename to src/openssl/openssl-1.1.1w/doc/man1/ciphers.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/cms.pod b/src/openssl/openssl-1.1.1w/doc/man1/cms.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/cms.pod rename to src/openssl/openssl-1.1.1w/doc/man1/cms.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/crl.pod b/src/openssl/openssl-1.1.1w/doc/man1/crl.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/crl.pod rename to src/openssl/openssl-1.1.1w/doc/man1/crl.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/crl2pkcs7.pod b/src/openssl/openssl-1.1.1w/doc/man1/crl2pkcs7.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/crl2pkcs7.pod rename to src/openssl/openssl-1.1.1w/doc/man1/crl2pkcs7.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/dgst.pod b/src/openssl/openssl-1.1.1w/doc/man1/dgst.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/dgst.pod rename to src/openssl/openssl-1.1.1w/doc/man1/dgst.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/dhparam.pod b/src/openssl/openssl-1.1.1w/doc/man1/dhparam.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/dhparam.pod rename to src/openssl/openssl-1.1.1w/doc/man1/dhparam.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/dsa.pod b/src/openssl/openssl-1.1.1w/doc/man1/dsa.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/dsa.pod rename to src/openssl/openssl-1.1.1w/doc/man1/dsa.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/dsaparam.pod b/src/openssl/openssl-1.1.1w/doc/man1/dsaparam.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/dsaparam.pod rename to src/openssl/openssl-1.1.1w/doc/man1/dsaparam.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/ec.pod b/src/openssl/openssl-1.1.1w/doc/man1/ec.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/ec.pod rename to src/openssl/openssl-1.1.1w/doc/man1/ec.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/ecparam.pod b/src/openssl/openssl-1.1.1w/doc/man1/ecparam.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/ecparam.pod rename to src/openssl/openssl-1.1.1w/doc/man1/ecparam.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/enc.pod b/src/openssl/openssl-1.1.1w/doc/man1/enc.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/enc.pod rename to src/openssl/openssl-1.1.1w/doc/man1/enc.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/engine.pod b/src/openssl/openssl-1.1.1w/doc/man1/engine.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/engine.pod rename to src/openssl/openssl-1.1.1w/doc/man1/engine.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/errstr.pod b/src/openssl/openssl-1.1.1w/doc/man1/errstr.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/errstr.pod rename to src/openssl/openssl-1.1.1w/doc/man1/errstr.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/gendsa.pod b/src/openssl/openssl-1.1.1w/doc/man1/gendsa.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/gendsa.pod rename to src/openssl/openssl-1.1.1w/doc/man1/gendsa.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/genpkey.pod b/src/openssl/openssl-1.1.1w/doc/man1/genpkey.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/genpkey.pod rename to src/openssl/openssl-1.1.1w/doc/man1/genpkey.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/genrsa.pod b/src/openssl/openssl-1.1.1w/doc/man1/genrsa.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/genrsa.pod rename to src/openssl/openssl-1.1.1w/doc/man1/genrsa.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/list.pod b/src/openssl/openssl-1.1.1w/doc/man1/list.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/list.pod rename to src/openssl/openssl-1.1.1w/doc/man1/list.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/nseq.pod b/src/openssl/openssl-1.1.1w/doc/man1/nseq.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/nseq.pod rename to src/openssl/openssl-1.1.1w/doc/man1/nseq.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/ocsp.pod b/src/openssl/openssl-1.1.1w/doc/man1/ocsp.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/ocsp.pod rename to src/openssl/openssl-1.1.1w/doc/man1/ocsp.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/openssl.pod b/src/openssl/openssl-1.1.1w/doc/man1/openssl.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/openssl.pod rename to src/openssl/openssl-1.1.1w/doc/man1/openssl.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/passwd.pod b/src/openssl/openssl-1.1.1w/doc/man1/passwd.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/passwd.pod rename to src/openssl/openssl-1.1.1w/doc/man1/passwd.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/pkcs12.pod b/src/openssl/openssl-1.1.1w/doc/man1/pkcs12.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/pkcs12.pod rename to src/openssl/openssl-1.1.1w/doc/man1/pkcs12.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/pkcs7.pod b/src/openssl/openssl-1.1.1w/doc/man1/pkcs7.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/pkcs7.pod rename to src/openssl/openssl-1.1.1w/doc/man1/pkcs7.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/pkcs8.pod b/src/openssl/openssl-1.1.1w/doc/man1/pkcs8.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/pkcs8.pod rename to src/openssl/openssl-1.1.1w/doc/man1/pkcs8.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/pkey.pod b/src/openssl/openssl-1.1.1w/doc/man1/pkey.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/pkey.pod rename to src/openssl/openssl-1.1.1w/doc/man1/pkey.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/pkeyparam.pod b/src/openssl/openssl-1.1.1w/doc/man1/pkeyparam.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/pkeyparam.pod rename to src/openssl/openssl-1.1.1w/doc/man1/pkeyparam.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/pkeyutl.pod b/src/openssl/openssl-1.1.1w/doc/man1/pkeyutl.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/pkeyutl.pod rename to src/openssl/openssl-1.1.1w/doc/man1/pkeyutl.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/prime.pod b/src/openssl/openssl-1.1.1w/doc/man1/prime.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/prime.pod rename to src/openssl/openssl-1.1.1w/doc/man1/prime.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/rand.pod b/src/openssl/openssl-1.1.1w/doc/man1/rand.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/rand.pod rename to src/openssl/openssl-1.1.1w/doc/man1/rand.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/rehash.pod b/src/openssl/openssl-1.1.1w/doc/man1/rehash.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/rehash.pod rename to src/openssl/openssl-1.1.1w/doc/man1/rehash.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/req.pod b/src/openssl/openssl-1.1.1w/doc/man1/req.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/req.pod rename to src/openssl/openssl-1.1.1w/doc/man1/req.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/rsa.pod b/src/openssl/openssl-1.1.1w/doc/man1/rsa.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/rsa.pod rename to src/openssl/openssl-1.1.1w/doc/man1/rsa.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/rsautl.pod b/src/openssl/openssl-1.1.1w/doc/man1/rsautl.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/rsautl.pod rename to src/openssl/openssl-1.1.1w/doc/man1/rsautl.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/s_client.pod b/src/openssl/openssl-1.1.1w/doc/man1/s_client.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/s_client.pod rename to src/openssl/openssl-1.1.1w/doc/man1/s_client.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/s_server.pod b/src/openssl/openssl-1.1.1w/doc/man1/s_server.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/s_server.pod rename to src/openssl/openssl-1.1.1w/doc/man1/s_server.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/s_time.pod b/src/openssl/openssl-1.1.1w/doc/man1/s_time.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/s_time.pod rename to src/openssl/openssl-1.1.1w/doc/man1/s_time.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/sess_id.pod b/src/openssl/openssl-1.1.1w/doc/man1/sess_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/sess_id.pod rename to src/openssl/openssl-1.1.1w/doc/man1/sess_id.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/smime.pod b/src/openssl/openssl-1.1.1w/doc/man1/smime.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/smime.pod rename to src/openssl/openssl-1.1.1w/doc/man1/smime.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/speed.pod b/src/openssl/openssl-1.1.1w/doc/man1/speed.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/speed.pod rename to src/openssl/openssl-1.1.1w/doc/man1/speed.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/spkac.pod b/src/openssl/openssl-1.1.1w/doc/man1/spkac.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/spkac.pod rename to src/openssl/openssl-1.1.1w/doc/man1/spkac.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/srp.pod b/src/openssl/openssl-1.1.1w/doc/man1/srp.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/srp.pod rename to src/openssl/openssl-1.1.1w/doc/man1/srp.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/storeutl.pod b/src/openssl/openssl-1.1.1w/doc/man1/storeutl.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/storeutl.pod rename to src/openssl/openssl-1.1.1w/doc/man1/storeutl.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/ts.pod b/src/openssl/openssl-1.1.1w/doc/man1/ts.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/ts.pod rename to src/openssl/openssl-1.1.1w/doc/man1/ts.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/tsget.pod b/src/openssl/openssl-1.1.1w/doc/man1/tsget.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/tsget.pod rename to src/openssl/openssl-1.1.1w/doc/man1/tsget.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/verify.pod b/src/openssl/openssl-1.1.1w/doc/man1/verify.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/verify.pod rename to src/openssl/openssl-1.1.1w/doc/man1/verify.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/version.pod b/src/openssl/openssl-1.1.1w/doc/man1/version.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/version.pod rename to src/openssl/openssl-1.1.1w/doc/man1/version.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man1/x509.pod b/src/openssl/openssl-1.1.1w/doc/man1/x509.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man1/x509.pod rename to src/openssl/openssl-1.1.1w/doc/man1/x509.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ADMISSIONS.pod b/src/openssl/openssl-1.1.1w/doc/man3/ADMISSIONS.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ADMISSIONS.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ADMISSIONS.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ASN1_INTEGER_get_int64.pod b/src/openssl/openssl-1.1.1w/doc/man3/ASN1_INTEGER_get_int64.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ASN1_INTEGER_get_int64.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ASN1_INTEGER_get_int64.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ASN1_ITEM_lookup.pod b/src/openssl/openssl-1.1.1w/doc/man3/ASN1_ITEM_lookup.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ASN1_ITEM_lookup.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ASN1_ITEM_lookup.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ASN1_OBJECT_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/ASN1_OBJECT_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ASN1_OBJECT_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ASN1_OBJECT_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ASN1_STRING_TABLE_add.pod b/src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_TABLE_add.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ASN1_STRING_TABLE_add.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_TABLE_add.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ASN1_STRING_length.pod b/src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_length.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ASN1_STRING_length.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_length.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ASN1_STRING_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ASN1_STRING_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ASN1_STRING_print_ex.pod b/src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_print_ex.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ASN1_STRING_print_ex.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ASN1_STRING_print_ex.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ASN1_TIME_set.pod b/src/openssl/openssl-1.1.1w/doc/man3/ASN1_TIME_set.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ASN1_TIME_set.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ASN1_TIME_set.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ASN1_TYPE_get.pod b/src/openssl/openssl-1.1.1w/doc/man3/ASN1_TYPE_get.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ASN1_TYPE_get.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ASN1_TYPE_get.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ASN1_generate_nconf.pod b/src/openssl/openssl-1.1.1w/doc/man3/ASN1_generate_nconf.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ASN1_generate_nconf.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ASN1_generate_nconf.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ASYNC_WAIT_CTX_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/ASYNC_WAIT_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ASYNC_WAIT_CTX_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ASYNC_WAIT_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ASYNC_start_job.pod b/src/openssl/openssl-1.1.1w/doc/man3/ASYNC_start_job.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ASYNC_start_job.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ASYNC_start_job.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BF_encrypt.pod b/src/openssl/openssl-1.1.1w/doc/man3/BF_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BF_encrypt.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BF_encrypt.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_ADDR.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_ADDR.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_ADDR.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_ADDR.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_ADDRINFO.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_ADDRINFO.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_ADDRINFO.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_ADDRINFO.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_connect.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_connect.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_connect.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_connect.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_ctrl.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_ctrl.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_ctrl.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_ctrl.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_f_base64.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_f_base64.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_f_base64.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_f_base64.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_f_buffer.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_f_buffer.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_f_buffer.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_f_buffer.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_f_cipher.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_f_cipher.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_f_cipher.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_f_cipher.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_f_md.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_f_md.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_f_md.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_f_md.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_f_null.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_f_null.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_f_null.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_f_null.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_f_ssl.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_f_ssl.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_f_ssl.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_f_ssl.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_find_type.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_find_type.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_find_type.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_find_type.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_get_data.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_get_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_get_data.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_get_data.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_get_ex_new_index.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_get_ex_new_index.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_get_ex_new_index.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_get_ex_new_index.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_meth_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_meth_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_meth_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_new_CMS.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_new_CMS.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_new_CMS.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_new_CMS.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_parse_hostserv.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_parse_hostserv.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_parse_hostserv.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_parse_hostserv.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_printf.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_printf.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_printf.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_printf.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_push.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_push.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_push.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_push.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_read.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_read.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_read.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_read.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_s_accept.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_accept.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_s_accept.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_s_accept.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_s_bio.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_bio.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_s_bio.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_s_bio.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_s_connect.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_connect.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_s_connect.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_s_connect.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_s_fd.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_fd.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_s_fd.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_s_fd.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_s_file.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_file.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_s_file.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_s_file.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_s_mem.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_mem.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_s_mem.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_s_mem.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_s_null.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_null.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_s_null.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_s_null.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_s_socket.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_s_socket.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_s_socket.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_s_socket.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_set_callback.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_set_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_set_callback.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_set_callback.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BIO_should_retry.pod b/src/openssl/openssl-1.1.1w/doc/man3/BIO_should_retry.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BIO_should_retry.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BIO_should_retry.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_BLINDING_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_BLINDING_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_BLINDING_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_BLINDING_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_CTX_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_CTX_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_CTX_start.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_CTX_start.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_CTX_start.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_CTX_start.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_add.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_add.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_add.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_add.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_add_word.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_add_word.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_add_word.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_add_word.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_bn2bin.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_bn2bin.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_bn2bin.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_bn2bin.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_cmp.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_cmp.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_cmp.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_cmp.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_copy.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_copy.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_copy.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_copy.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_generate_prime.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_generate_prime.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_generate_prime.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_generate_prime.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_mod_inverse.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_mod_inverse.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_mod_inverse.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_mod_inverse.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_mod_mul_montgomery.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_mod_mul_montgomery.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_mod_mul_montgomery.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_mod_mul_montgomery.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_mod_mul_reciprocal.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_mod_mul_reciprocal.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_mod_mul_reciprocal.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_mod_mul_reciprocal.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_num_bytes.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_num_bytes.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_num_bytes.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_num_bytes.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_rand.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_rand.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_rand.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_rand.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_security_bits.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_security_bits.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_security_bits.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_security_bits.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_set_bit.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_set_bit.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_set_bit.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_set_bit.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_swap.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_swap.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_swap.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_swap.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BN_zero.pod b/src/openssl/openssl-1.1.1w/doc/man3/BN_zero.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BN_zero.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BN_zero.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/BUF_MEM_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/BUF_MEM_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/BUF_MEM_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/BUF_MEM_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_add0_cert.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_add0_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_add0_cert.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_add0_cert.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_add1_recipient_cert.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_add1_recipient_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_add1_recipient_cert.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_add1_recipient_cert.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_add1_signer.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_add1_signer.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_add1_signer.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_add1_signer.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_compress.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_compress.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_compress.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_compress.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_decrypt.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_decrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_decrypt.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_decrypt.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_encrypt.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_encrypt.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_encrypt.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_final.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_final.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_final.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_final.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_get0_RecipientInfos.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_get0_RecipientInfos.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_get0_RecipientInfos.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_get0_RecipientInfos.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_get0_SignerInfos.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_get0_SignerInfos.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_get0_SignerInfos.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_get0_SignerInfos.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_get0_type.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_get0_type.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_get0_type.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_get0_type.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_get1_ReceiptRequest.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_get1_ReceiptRequest.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_get1_ReceiptRequest.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_get1_ReceiptRequest.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_sign.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_sign.pod similarity index 97% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_sign.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_sign.pod index 79446b129..884be8fdd 100644 --- a/src/openssl/openssl-1.1.1t/doc/man3/CMS_sign.pod +++ b/src/openssl/openssl-1.1.1w/doc/man3/CMS_sign.pod @@ -95,7 +95,7 @@ The function CMS_sign() is a basic CMS signing function whose output will be suitable for many purposes. For finer control of the output format the B, B and B parameters can all be B and the B flag set. Then one or more signers can be added using the -function CMS_sign_add1_signer(), non default digests can be used and custom +function CMS_add1_signer(), non default digests can be used and custom attributes added. CMS_final() must then be called to finalize the structure if streaming is not enabled. @@ -119,7 +119,7 @@ it is supported for embedded data in OpenSSL 1.0.0 and later. =head1 COPYRIGHT -Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. +Copyright 2008-2023 The OpenSSL Project Authors. All Rights Reserved. Licensed under the OpenSSL license (the "License"). You may not use this file except in compliance with the License. You can obtain a copy diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_sign_receipt.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_sign_receipt.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_sign_receipt.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_sign_receipt.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_uncompress.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_uncompress.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_uncompress.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_uncompress.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_verify.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_verify.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_verify.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_verify.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CMS_verify_receipt.pod b/src/openssl/openssl-1.1.1w/doc/man3/CMS_verify_receipt.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CMS_verify_receipt.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CMS_verify_receipt.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CONF_modules_free.pod b/src/openssl/openssl-1.1.1w/doc/man3/CONF_modules_free.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CONF_modules_free.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CONF_modules_free.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CONF_modules_load_file.pod b/src/openssl/openssl-1.1.1w/doc/man3/CONF_modules_load_file.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CONF_modules_load_file.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CONF_modules_load_file.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CRYPTO_THREAD_run_once.pod b/src/openssl/openssl-1.1.1w/doc/man3/CRYPTO_THREAD_run_once.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CRYPTO_THREAD_run_once.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CRYPTO_THREAD_run_once.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CRYPTO_get_ex_new_index.pod b/src/openssl/openssl-1.1.1w/doc/man3/CRYPTO_get_ex_new_index.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CRYPTO_get_ex_new_index.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CRYPTO_get_ex_new_index.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CRYPTO_memcmp.pod b/src/openssl/openssl-1.1.1w/doc/man3/CRYPTO_memcmp.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CRYPTO_memcmp.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CRYPTO_memcmp.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CTLOG_STORE_get0_log_by_id.pod b/src/openssl/openssl-1.1.1w/doc/man3/CTLOG_STORE_get0_log_by_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CTLOG_STORE_get0_log_by_id.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CTLOG_STORE_get0_log_by_id.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CTLOG_STORE_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/CTLOG_STORE_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CTLOG_STORE_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CTLOG_STORE_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CTLOG_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/CTLOG_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CTLOG_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CTLOG_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/CT_POLICY_EVAL_CTX_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/CT_POLICY_EVAL_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/CT_POLICY_EVAL_CTX_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/CT_POLICY_EVAL_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DEFINE_STACK_OF.pod b/src/openssl/openssl-1.1.1w/doc/man3/DEFINE_STACK_OF.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DEFINE_STACK_OF.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DEFINE_STACK_OF.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DES_random_key.pod b/src/openssl/openssl-1.1.1w/doc/man3/DES_random_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DES_random_key.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DES_random_key.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DH_generate_key.pod b/src/openssl/openssl-1.1.1w/doc/man3/DH_generate_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DH_generate_key.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DH_generate_key.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DH_generate_parameters.pod b/src/openssl/openssl-1.1.1w/doc/man3/DH_generate_parameters.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DH_generate_parameters.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DH_generate_parameters.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DH_get0_pqg.pod b/src/openssl/openssl-1.1.1w/doc/man3/DH_get0_pqg.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DH_get0_pqg.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DH_get0_pqg.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DH_get_1024_160.pod b/src/openssl/openssl-1.1.1w/doc/man3/DH_get_1024_160.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DH_get_1024_160.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DH_get_1024_160.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DH_meth_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/DH_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DH_meth_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DH_meth_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DH_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/DH_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DH_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DH_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DH_new_by_nid.pod b/src/openssl/openssl-1.1.1w/doc/man3/DH_new_by_nid.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DH_new_by_nid.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DH_new_by_nid.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DH_set_method.pod b/src/openssl/openssl-1.1.1w/doc/man3/DH_set_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DH_set_method.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DH_set_method.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DH_size.pod b/src/openssl/openssl-1.1.1w/doc/man3/DH_size.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DH_size.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DH_size.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DSA_SIG_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/DSA_SIG_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DSA_SIG_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DSA_SIG_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DSA_do_sign.pod b/src/openssl/openssl-1.1.1w/doc/man3/DSA_do_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DSA_do_sign.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DSA_do_sign.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DSA_dup_DH.pod b/src/openssl/openssl-1.1.1w/doc/man3/DSA_dup_DH.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DSA_dup_DH.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DSA_dup_DH.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DSA_generate_key.pod b/src/openssl/openssl-1.1.1w/doc/man3/DSA_generate_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DSA_generate_key.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DSA_generate_key.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DSA_generate_parameters.pod b/src/openssl/openssl-1.1.1w/doc/man3/DSA_generate_parameters.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DSA_generate_parameters.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DSA_generate_parameters.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DSA_get0_pqg.pod b/src/openssl/openssl-1.1.1w/doc/man3/DSA_get0_pqg.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DSA_get0_pqg.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DSA_get0_pqg.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DSA_meth_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/DSA_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DSA_meth_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DSA_meth_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DSA_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/DSA_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DSA_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DSA_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DSA_set_method.pod b/src/openssl/openssl-1.1.1w/doc/man3/DSA_set_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DSA_set_method.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DSA_set_method.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DSA_sign.pod b/src/openssl/openssl-1.1.1w/doc/man3/DSA_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DSA_sign.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DSA_sign.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DSA_size.pod b/src/openssl/openssl-1.1.1w/doc/man3/DSA_size.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DSA_size.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DSA_size.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DTLS_get_data_mtu.pod b/src/openssl/openssl-1.1.1w/doc/man3/DTLS_get_data_mtu.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DTLS_get_data_mtu.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DTLS_get_data_mtu.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DTLS_set_timer_cb.pod b/src/openssl/openssl-1.1.1w/doc/man3/DTLS_set_timer_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DTLS_set_timer_cb.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DTLS_set_timer_cb.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/DTLSv1_listen.pod b/src/openssl/openssl-1.1.1w/doc/man3/DTLSv1_listen.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/DTLSv1_listen.pod rename to src/openssl/openssl-1.1.1w/doc/man3/DTLSv1_listen.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ECDSA_SIG_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/ECDSA_SIG_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ECDSA_SIG_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ECDSA_SIG_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ECPKParameters_print.pod b/src/openssl/openssl-1.1.1w/doc/man3/ECPKParameters_print.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ECPKParameters_print.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ECPKParameters_print.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EC_GFp_simple_method.pod b/src/openssl/openssl-1.1.1w/doc/man3/EC_GFp_simple_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EC_GFp_simple_method.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EC_GFp_simple_method.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EC_GROUP_copy.pod b/src/openssl/openssl-1.1.1w/doc/man3/EC_GROUP_copy.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EC_GROUP_copy.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EC_GROUP_copy.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EC_GROUP_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/EC_GROUP_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EC_GROUP_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EC_GROUP_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EC_KEY_get_enc_flags.pod b/src/openssl/openssl-1.1.1w/doc/man3/EC_KEY_get_enc_flags.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EC_KEY_get_enc_flags.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EC_KEY_get_enc_flags.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EC_KEY_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/EC_KEY_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EC_KEY_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EC_KEY_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EC_POINT_add.pod b/src/openssl/openssl-1.1.1w/doc/man3/EC_POINT_add.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EC_POINT_add.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EC_POINT_add.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EC_POINT_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/EC_POINT_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EC_POINT_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EC_POINT_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ENGINE_add.pod b/src/openssl/openssl-1.1.1w/doc/man3/ENGINE_add.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ENGINE_add.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ENGINE_add.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ERR_GET_LIB.pod b/src/openssl/openssl-1.1.1w/doc/man3/ERR_GET_LIB.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ERR_GET_LIB.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ERR_GET_LIB.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ERR_clear_error.pod b/src/openssl/openssl-1.1.1w/doc/man3/ERR_clear_error.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ERR_clear_error.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ERR_clear_error.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ERR_error_string.pod b/src/openssl/openssl-1.1.1w/doc/man3/ERR_error_string.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ERR_error_string.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ERR_error_string.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ERR_get_error.pod b/src/openssl/openssl-1.1.1w/doc/man3/ERR_get_error.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ERR_get_error.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ERR_get_error.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ERR_load_crypto_strings.pod b/src/openssl/openssl-1.1.1w/doc/man3/ERR_load_crypto_strings.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ERR_load_crypto_strings.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ERR_load_crypto_strings.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ERR_load_strings.pod b/src/openssl/openssl-1.1.1w/doc/man3/ERR_load_strings.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ERR_load_strings.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ERR_load_strings.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ERR_print_errors.pod b/src/openssl/openssl-1.1.1w/doc/man3/ERR_print_errors.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ERR_print_errors.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ERR_print_errors.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ERR_put_error.pod b/src/openssl/openssl-1.1.1w/doc/man3/ERR_put_error.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ERR_put_error.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ERR_put_error.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ERR_remove_state.pod b/src/openssl/openssl-1.1.1w/doc/man3/ERR_remove_state.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ERR_remove_state.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ERR_remove_state.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/ERR_set_mark.pod b/src/openssl/openssl-1.1.1w/doc/man3/ERR_set_mark.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/ERR_set_mark.pod rename to src/openssl/openssl-1.1.1w/doc/man3/ERR_set_mark.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_BytesToKey.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_BytesToKey.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_BytesToKey.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_BytesToKey.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_CIPHER_CTX_get_cipher_data.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_CIPHER_meth_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_CIPHER_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_CIPHER_meth_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_CIPHER_meth_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_DigestInit.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_DigestInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_DigestInit.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_DigestInit.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_DigestSignInit.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_DigestSignInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_DigestSignInit.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_DigestSignInit.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_DigestVerifyInit.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_DigestVerifyInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_DigestVerifyInit.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_DigestVerifyInit.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_EncodeInit.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_EncodeInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_EncodeInit.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_EncodeInit.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_EncryptInit.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_EncryptInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_EncryptInit.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_EncryptInit.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_MD_meth_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_MD_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_MD_meth_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_MD_meth_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_OpenInit.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_OpenInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_OpenInit.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_OpenInit.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_ASN1_METHOD.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_ASN1_METHOD.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_ASN1_METHOD.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_ASN1_METHOD.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_CTX_ctrl.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_ctrl.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_CTX_ctrl.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_ctrl.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_CTX_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_CTX_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set1_pbe_pass.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_hkdf_md.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_rsa_pss_keygen_md.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_scrypt_N.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_CTX_set_tls1_prf_md.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_asn1_get_count.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_asn1_get_count.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_asn1_get_count.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_asn1_get_count.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_cmp.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_cmp.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_cmp.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_cmp.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_decrypt.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_decrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_decrypt.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_decrypt.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_derive.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_derive.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_derive.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_derive.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_encrypt.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_encrypt.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_encrypt.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_get_default_digest_nid.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_get_default_digest_nid.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_get_default_digest_nid.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_get_default_digest_nid.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_keygen.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_keygen.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_keygen.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_keygen.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_meth_get_count.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_meth_get_count.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_meth_get_count.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_meth_get_count.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_meth_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_meth_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_meth_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_print_private.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_print_private.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_print_private.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_print_private.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_set1_RSA.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_set1_RSA.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_set1_RSA.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_set1_RSA.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_sign.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_sign.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_sign.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_size.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_size.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_size.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_size.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_verify.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_verify.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_verify.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_verify.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_verify_recover.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_verify_recover.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_PKEY_verify_recover.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_PKEY_verify_recover.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_SealInit.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_SealInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_SealInit.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_SealInit.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_SignInit.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_SignInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_SignInit.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_SignInit.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_VerifyInit.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_VerifyInit.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_VerifyInit.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_VerifyInit.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_aes.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_aes.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_aes.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_aes.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_aria.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_aria.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_aria.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_aria.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_bf_cbc.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_bf_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_bf_cbc.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_bf_cbc.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_blake2b512.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_blake2b512.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_blake2b512.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_blake2b512.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_camellia.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_camellia.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_camellia.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_camellia.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_cast5_cbc.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_cast5_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_cast5_cbc.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_cast5_cbc.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_chacha20.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_chacha20.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_chacha20.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_chacha20.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_des.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_des.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_des.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_des.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_desx_cbc.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_desx_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_desx_cbc.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_desx_cbc.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_idea_cbc.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_idea_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_idea_cbc.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_idea_cbc.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_md2.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_md2.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_md2.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_md2.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_md4.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_md4.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_md4.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_md4.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_md5.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_md5.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_md5.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_md5.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_mdc2.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_mdc2.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_mdc2.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_mdc2.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_rc2_cbc.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_rc2_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_rc2_cbc.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_rc2_cbc.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_rc4.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_rc4.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_rc4.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_rc4.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_rc5_32_12_16_cbc.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_rc5_32_12_16_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_rc5_32_12_16_cbc.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_rc5_32_12_16_cbc.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_ripemd160.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_ripemd160.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_ripemd160.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_ripemd160.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_seed_cbc.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_seed_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_seed_cbc.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_seed_cbc.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_sha1.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_sha1.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_sha1.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_sha1.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_sha224.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_sha224.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_sha224.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_sha224.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_sha3_224.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_sha3_224.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_sha3_224.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_sha3_224.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_sm3.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_sm3.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_sm3.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_sm3.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_sm4_cbc.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_sm4_cbc.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_sm4_cbc.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_sm4_cbc.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/EVP_whirlpool.pod b/src/openssl/openssl-1.1.1w/doc/man3/EVP_whirlpool.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/EVP_whirlpool.pod rename to src/openssl/openssl-1.1.1w/doc/man3/EVP_whirlpool.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/HMAC.pod b/src/openssl/openssl-1.1.1w/doc/man3/HMAC.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/HMAC.pod rename to src/openssl/openssl-1.1.1w/doc/man3/HMAC.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/MD5.pod b/src/openssl/openssl-1.1.1w/doc/man3/MD5.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/MD5.pod rename to src/openssl/openssl-1.1.1w/doc/man3/MD5.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/MDC2_Init.pod b/src/openssl/openssl-1.1.1w/doc/man3/MDC2_Init.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/MDC2_Init.pod rename to src/openssl/openssl-1.1.1w/doc/man3/MDC2_Init.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OBJ_nid2obj.pod b/src/openssl/openssl-1.1.1w/doc/man3/OBJ_nid2obj.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OBJ_nid2obj.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OBJ_nid2obj.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OCSP_REQUEST_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/OCSP_REQUEST_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OCSP_REQUEST_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OCSP_REQUEST_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OCSP_cert_to_id.pod b/src/openssl/openssl-1.1.1w/doc/man3/OCSP_cert_to_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OCSP_cert_to_id.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OCSP_cert_to_id.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OCSP_request_add1_nonce.pod b/src/openssl/openssl-1.1.1w/doc/man3/OCSP_request_add1_nonce.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OCSP_request_add1_nonce.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OCSP_request_add1_nonce.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OCSP_resp_find_status.pod b/src/openssl/openssl-1.1.1w/doc/man3/OCSP_resp_find_status.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OCSP_resp_find_status.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OCSP_resp_find_status.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OCSP_response_status.pod b/src/openssl/openssl-1.1.1w/doc/man3/OCSP_response_status.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OCSP_response_status.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OCSP_response_status.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OCSP_sendreq_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/OCSP_sendreq_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OCSP_sendreq_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OCSP_sendreq_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_Applink.pod b/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_Applink.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_Applink.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_Applink.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_LH_COMPFUNC.pod b/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_LH_COMPFUNC.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_LH_COMPFUNC.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_LH_COMPFUNC.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_LH_stats.pod b/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_LH_stats.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_LH_stats.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_LH_stats.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_VERSION_NUMBER.pod b/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_VERSION_NUMBER.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_VERSION_NUMBER.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_VERSION_NUMBER.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_config.pod b/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_config.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_config.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_config.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_fork_prepare.pod b/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_fork_prepare.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_fork_prepare.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_fork_prepare.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_ia32cap.pod b/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_ia32cap.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_ia32cap.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_ia32cap.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_init_crypto.pod b/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_init_crypto.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_init_crypto.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_init_crypto.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_init_ssl.pod b/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_init_ssl.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_init_ssl.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_init_ssl.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_instrument_bus.pod b/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_instrument_bus.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_instrument_bus.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_instrument_bus.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_load_builtin_modules.pod b/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_load_builtin_modules.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_load_builtin_modules.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_load_builtin_modules.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_malloc.pod b/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_malloc.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_malloc.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_malloc.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_secure_malloc.pod b/src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_secure_malloc.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OPENSSL_secure_malloc.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OPENSSL_secure_malloc.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OSSL_STORE_INFO.pod b/src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_INFO.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OSSL_STORE_INFO.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_INFO.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OSSL_STORE_LOADER.pod b/src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_LOADER.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OSSL_STORE_LOADER.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_LOADER.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OSSL_STORE_SEARCH.pod b/src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_SEARCH.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OSSL_STORE_SEARCH.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_SEARCH.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OSSL_STORE_expect.pod b/src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_expect.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OSSL_STORE_expect.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_expect.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OSSL_STORE_open.pod b/src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_open.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OSSL_STORE_open.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OSSL_STORE_open.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/OpenSSL_add_all_algorithms.pod b/src/openssl/openssl-1.1.1w/doc/man3/OpenSSL_add_all_algorithms.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/OpenSSL_add_all_algorithms.pod rename to src/openssl/openssl-1.1.1w/doc/man3/OpenSSL_add_all_algorithms.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PEM_bytes_read_bio.pod b/src/openssl/openssl-1.1.1w/doc/man3/PEM_bytes_read_bio.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PEM_bytes_read_bio.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PEM_bytes_read_bio.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PEM_read.pod b/src/openssl/openssl-1.1.1w/doc/man3/PEM_read.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PEM_read.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PEM_read.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PEM_read_CMS.pod b/src/openssl/openssl-1.1.1w/doc/man3/PEM_read_CMS.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PEM_read_CMS.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PEM_read_CMS.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PEM_read_bio_PrivateKey.pod b/src/openssl/openssl-1.1.1w/doc/man3/PEM_read_bio_PrivateKey.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PEM_read_bio_PrivateKey.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PEM_read_bio_PrivateKey.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PEM_read_bio_ex.pod b/src/openssl/openssl-1.1.1w/doc/man3/PEM_read_bio_ex.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PEM_read_bio_ex.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PEM_read_bio_ex.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PEM_write_bio_CMS_stream.pod b/src/openssl/openssl-1.1.1w/doc/man3/PEM_write_bio_CMS_stream.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PEM_write_bio_CMS_stream.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PEM_write_bio_CMS_stream.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PEM_write_bio_PKCS7_stream.pod b/src/openssl/openssl-1.1.1w/doc/man3/PEM_write_bio_PKCS7_stream.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PEM_write_bio_PKCS7_stream.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PEM_write_bio_PKCS7_stream.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PKCS12_create.pod b/src/openssl/openssl-1.1.1w/doc/man3/PKCS12_create.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PKCS12_create.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PKCS12_create.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PKCS12_newpass.pod b/src/openssl/openssl-1.1.1w/doc/man3/PKCS12_newpass.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PKCS12_newpass.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PKCS12_newpass.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PKCS12_parse.pod b/src/openssl/openssl-1.1.1w/doc/man3/PKCS12_parse.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PKCS12_parse.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PKCS12_parse.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PKCS5_PBKDF2_HMAC.pod b/src/openssl/openssl-1.1.1w/doc/man3/PKCS5_PBKDF2_HMAC.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PKCS5_PBKDF2_HMAC.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PKCS5_PBKDF2_HMAC.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PKCS7_decrypt.pod b/src/openssl/openssl-1.1.1w/doc/man3/PKCS7_decrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PKCS7_decrypt.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PKCS7_decrypt.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PKCS7_encrypt.pod b/src/openssl/openssl-1.1.1w/doc/man3/PKCS7_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PKCS7_encrypt.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PKCS7_encrypt.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PKCS7_sign.pod b/src/openssl/openssl-1.1.1w/doc/man3/PKCS7_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PKCS7_sign.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PKCS7_sign.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PKCS7_sign_add_signer.pod b/src/openssl/openssl-1.1.1w/doc/man3/PKCS7_sign_add_signer.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PKCS7_sign_add_signer.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PKCS7_sign_add_signer.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/PKCS7_verify.pod b/src/openssl/openssl-1.1.1w/doc/man3/PKCS7_verify.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/PKCS7_verify.pod rename to src/openssl/openssl-1.1.1w/doc/man3/PKCS7_verify.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RAND_DRBG_generate.pod b/src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_generate.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RAND_DRBG_generate.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_generate.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RAND_DRBG_get0_master.pod b/src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_get0_master.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RAND_DRBG_get0_master.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_get0_master.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RAND_DRBG_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RAND_DRBG_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RAND_DRBG_reseed.pod b/src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_reseed.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RAND_DRBG_reseed.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_reseed.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RAND_DRBG_set_callbacks.pod b/src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_set_callbacks.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RAND_DRBG_set_callbacks.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_set_callbacks.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RAND_DRBG_set_ex_data.pod b/src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_set_ex_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RAND_DRBG_set_ex_data.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RAND_DRBG_set_ex_data.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RAND_add.pod b/src/openssl/openssl-1.1.1w/doc/man3/RAND_add.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RAND_add.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RAND_add.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RAND_bytes.pod b/src/openssl/openssl-1.1.1w/doc/man3/RAND_bytes.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RAND_bytes.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RAND_bytes.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RAND_cleanup.pod b/src/openssl/openssl-1.1.1w/doc/man3/RAND_cleanup.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RAND_cleanup.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RAND_cleanup.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RAND_egd.pod b/src/openssl/openssl-1.1.1w/doc/man3/RAND_egd.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RAND_egd.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RAND_egd.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RAND_load_file.pod b/src/openssl/openssl-1.1.1w/doc/man3/RAND_load_file.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RAND_load_file.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RAND_load_file.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RAND_set_rand_method.pod b/src/openssl/openssl-1.1.1w/doc/man3/RAND_set_rand_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RAND_set_rand_method.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RAND_set_rand_method.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RC4_set_key.pod b/src/openssl/openssl-1.1.1w/doc/man3/RC4_set_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RC4_set_key.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RC4_set_key.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RIPEMD160_Init.pod b/src/openssl/openssl-1.1.1w/doc/man3/RIPEMD160_Init.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RIPEMD160_Init.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RIPEMD160_Init.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RSA_blinding_on.pod b/src/openssl/openssl-1.1.1w/doc/man3/RSA_blinding_on.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RSA_blinding_on.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RSA_blinding_on.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RSA_check_key.pod b/src/openssl/openssl-1.1.1w/doc/man3/RSA_check_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RSA_check_key.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RSA_check_key.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RSA_generate_key.pod b/src/openssl/openssl-1.1.1w/doc/man3/RSA_generate_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RSA_generate_key.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RSA_generate_key.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RSA_get0_key.pod b/src/openssl/openssl-1.1.1w/doc/man3/RSA_get0_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RSA_get0_key.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RSA_get0_key.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RSA_meth_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/RSA_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RSA_meth_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RSA_meth_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RSA_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/RSA_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RSA_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RSA_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RSA_padding_add_PKCS1_type_1.pod b/src/openssl/openssl-1.1.1w/doc/man3/RSA_padding_add_PKCS1_type_1.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RSA_padding_add_PKCS1_type_1.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RSA_padding_add_PKCS1_type_1.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RSA_print.pod b/src/openssl/openssl-1.1.1w/doc/man3/RSA_print.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RSA_print.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RSA_print.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RSA_private_encrypt.pod b/src/openssl/openssl-1.1.1w/doc/man3/RSA_private_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RSA_private_encrypt.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RSA_private_encrypt.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RSA_public_encrypt.pod b/src/openssl/openssl-1.1.1w/doc/man3/RSA_public_encrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RSA_public_encrypt.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RSA_public_encrypt.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RSA_set_method.pod b/src/openssl/openssl-1.1.1w/doc/man3/RSA_set_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RSA_set_method.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RSA_set_method.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RSA_sign.pod b/src/openssl/openssl-1.1.1w/doc/man3/RSA_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RSA_sign.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RSA_sign.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod b/src/openssl/openssl-1.1.1w/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RSA_sign_ASN1_OCTET_STRING.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/RSA_size.pod b/src/openssl/openssl-1.1.1w/doc/man3/RSA_size.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/RSA_size.pod rename to src/openssl/openssl-1.1.1w/doc/man3/RSA_size.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SCT_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/SCT_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SCT_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SCT_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SCT_print.pod b/src/openssl/openssl-1.1.1w/doc/man3/SCT_print.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SCT_print.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SCT_print.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SCT_validate.pod b/src/openssl/openssl-1.1.1w/doc/man3/SCT_validate.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SCT_validate.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SCT_validate.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SHA256_Init.pod b/src/openssl/openssl-1.1.1w/doc/man3/SHA256_Init.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SHA256_Init.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SHA256_Init.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SMIME_read_CMS.pod b/src/openssl/openssl-1.1.1w/doc/man3/SMIME_read_CMS.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SMIME_read_CMS.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SMIME_read_CMS.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SMIME_read_PKCS7.pod b/src/openssl/openssl-1.1.1w/doc/man3/SMIME_read_PKCS7.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SMIME_read_PKCS7.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SMIME_read_PKCS7.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SMIME_write_CMS.pod b/src/openssl/openssl-1.1.1w/doc/man3/SMIME_write_CMS.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SMIME_write_CMS.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SMIME_write_CMS.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SMIME_write_PKCS7.pod b/src/openssl/openssl-1.1.1w/doc/man3/SMIME_write_PKCS7.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SMIME_write_PKCS7.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SMIME_write_PKCS7.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CIPHER_get_name.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CIPHER_get_name.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CIPHER_get_name.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CIPHER_get_name.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_COMP_add_compression_method.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_COMP_add_compression_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_COMP_add_compression_method.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_COMP_add_compression_method.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CONF_CTX_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CONF_CTX_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CONF_CTX_set1_prefix.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_set1_prefix.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CONF_CTX_set1_prefix.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_set1_prefix.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CONF_CTX_set_flags.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_set_flags.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CONF_CTX_set_flags.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_set_flags.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_CTX_set_ssl_ctx.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CONF_cmd.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_cmd.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CONF_cmd.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_cmd.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CONF_cmd_argv.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_cmd_argv.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CONF_cmd_argv.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CONF_cmd_argv.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_add1_chain_cert.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_add1_chain_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_add1_chain_cert.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_add1_chain_cert.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_add_extra_chain_cert.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_add_extra_chain_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_add_extra_chain_cert.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_add_extra_chain_cert.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_add_session.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_add_session.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_add_session.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_add_session.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_config.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_config.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_config.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_config.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_ctrl.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_ctrl.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_ctrl.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_ctrl.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_dane_enable.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_dane_enable.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_dane_enable.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_dane_enable.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_flush_sessions.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_flush_sessions.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_flush_sessions.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_flush_sessions.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_free.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_free.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_free.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_free.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_get0_param.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_get0_param.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_get0_param.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_get0_param.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_get_verify_mode.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_get_verify_mode.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_get_verify_mode.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_get_verify_mode.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_has_client_custom_ext.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_has_client_custom_ext.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_has_client_custom_ext.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_has_client_custom_ext.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_load_verify_locations.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_load_verify_locations.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_load_verify_locations.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_load_verify_locations.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_sess_number.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sess_number.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_sess_number.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sess_number.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_sess_set_cache_size.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sess_set_cache_size.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_sess_set_cache_size.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sess_set_cache_size.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_sess_set_get_cb.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sess_set_get_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_sess_set_get_cb.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sess_set_get_cb.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_sessions.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sessions.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_sessions.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_sessions.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set0_CA_list.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set0_CA_list.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set0_CA_list.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set0_CA_list.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set1_curves.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set1_curves.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set1_curves.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set1_curves.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set1_sigalgs.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set1_sigalgs.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set1_sigalgs.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set1_sigalgs.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set1_verify_cert_store.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set1_verify_cert_store.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set1_verify_cert_store.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set1_verify_cert_store.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_alpn_select_cb.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_alpn_select_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_alpn_select_cb.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_alpn_select_cb.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_cert_cb.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cert_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_cert_cb.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cert_cb.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_cert_store.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cert_store.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_cert_store.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cert_store.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_cert_verify_callback.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cert_verify_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_cert_verify_callback.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cert_verify_callback.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_cipher_list.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cipher_list.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_cipher_list.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_cipher_list.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_client_cert_cb.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_client_cert_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_client_cert_cb.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_client_cert_cb.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_client_hello_cb.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_client_hello_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_client_hello_cb.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_client_hello_cb.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_ct_validation_callback.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ct_validation_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_ct_validation_callback.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ct_validation_callback.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_ctlog_list_file.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ctlog_list_file.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_ctlog_list_file.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ctlog_list_file.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_default_passwd_cb.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_default_passwd_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_default_passwd_cb.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_default_passwd_cb.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_ex_data.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ex_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_ex_data.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ex_data.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_generate_session_id.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_generate_session_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_generate_session_id.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_generate_session_id.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_info_callback.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_info_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_info_callback.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_info_callback.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_keylog_callback.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_keylog_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_keylog_callback.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_keylog_callback.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_max_cert_list.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_max_cert_list.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_max_cert_list.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_max_cert_list.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_min_proto_version.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_min_proto_version.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_min_proto_version.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_min_proto_version.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_mode.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_mode.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_mode.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_mode.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_msg_callback.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_msg_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_msg_callback.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_msg_callback.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_num_tickets.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_num_tickets.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_num_tickets.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_num_tickets.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_options.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_options.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_options.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_options.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_psk_client_callback.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_psk_client_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_psk_client_callback.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_psk_client_callback.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_quiet_shutdown.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_quiet_shutdown.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_quiet_shutdown.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_quiet_shutdown.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_read_ahead.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_read_ahead.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_read_ahead.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_read_ahead.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_record_padding_callback.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_record_padding_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_record_padding_callback.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_record_padding_callback.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_security_level.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_security_level.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_security_level.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_security_level.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_session_cache_mode.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_session_cache_mode.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_session_cache_mode.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_session_cache_mode.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_session_id_context.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_session_id_context.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_session_id_context.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_session_id_context.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_session_ticket_cb.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_session_ticket_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_session_ticket_cb.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_session_ticket_cb.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_split_send_fragment.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_split_send_fragment.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_split_send_fragment.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_split_send_fragment.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_ssl_version.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ssl_version.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_ssl_version.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_ssl_version.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_stateless_cookie_generate_cb.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_stateless_cookie_generate_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_stateless_cookie_generate_cb.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_stateless_cookie_generate_cb.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_timeout.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_timeout.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_timeout.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_timeout.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_servername_callback.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_tlsext_status_cb.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_status_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_tlsext_status_cb.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_status_cb.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_ticket_key_cb.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tlsext_use_srtp.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_tmp_dh_callback.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tmp_dh_callback.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_tmp_dh_callback.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_tmp_dh_callback.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_verify.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_verify.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_set_verify.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_set_verify.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_use_certificate.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_use_certificate.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_use_certificate.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_use_certificate.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_use_psk_identity_hint.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_use_psk_identity_hint.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_use_psk_identity_hint.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_use_psk_identity_hint.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_use_serverinfo.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_use_serverinfo.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_CTX_use_serverinfo.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_CTX_use_serverinfo.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_free.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_free.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_free.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_free.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get0_cipher.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_cipher.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get0_cipher.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_cipher.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get0_hostname.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_hostname.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get0_hostname.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_hostname.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get0_id_context.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_id_context.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get0_id_context.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_id_context.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get0_peer.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_peer.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get0_peer.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get0_peer.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get_compress_id.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_compress_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get_compress_id.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_compress_id.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get_ex_data.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_ex_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get_ex_data.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_ex_data.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get_protocol_version.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_protocol_version.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get_protocol_version.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_protocol_version.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get_time.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_time.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_get_time.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_get_time.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_has_ticket.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_has_ticket.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_has_ticket.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_has_ticket.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_is_resumable.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_is_resumable.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_is_resumable.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_is_resumable.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_print.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_print.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_print.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_print.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_set1_id.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_set1_id.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_SESSION_set1_id.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_SESSION_set1_id.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_accept.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_accept.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_accept.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_accept.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_alert_type_string.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_alert_type_string.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_alert_type_string.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_alert_type_string.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_alloc_buffers.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_alloc_buffers.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_alloc_buffers.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_alloc_buffers.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_check_chain.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_check_chain.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_check_chain.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_check_chain.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_clear.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_clear.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_clear.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_clear.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_connect.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_connect.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_connect.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_connect.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_do_handshake.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_do_handshake.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_do_handshake.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_do_handshake.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_export_keying_material.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_export_keying_material.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_export_keying_material.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_export_keying_material.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_extension_supported.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_extension_supported.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_extension_supported.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_extension_supported.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_free.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_free.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_free.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_free.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get0_peer_scts.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get0_peer_scts.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get0_peer_scts.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get0_peer_scts.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_SSL_CTX.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_SSL_CTX.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_SSL_CTX.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_SSL_CTX.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_all_async_fds.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_all_async_fds.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_all_async_fds.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_all_async_fds.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_ciphers.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_ciphers.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_ciphers.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_ciphers.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_client_random.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_client_random.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_client_random.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_client_random.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_current_cipher.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_current_cipher.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_current_cipher.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_current_cipher.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_default_timeout.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_default_timeout.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_default_timeout.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_default_timeout.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_error.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_error.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_error.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_error.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_extms_support.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_extms_support.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_extms_support.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_extms_support.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_fd.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_fd.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_fd.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_fd.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_peer_cert_chain.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_cert_chain.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_peer_cert_chain.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_cert_chain.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_peer_certificate.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_certificate.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_peer_certificate.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_certificate.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_peer_signature_nid.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_signature_nid.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_peer_signature_nid.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_signature_nid.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_peer_tmp_key.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_tmp_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_peer_tmp_key.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_peer_tmp_key.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_psk_identity.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_psk_identity.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_psk_identity.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_psk_identity.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_rbio.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_rbio.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_rbio.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_rbio.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_session.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_session.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_session.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_session.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_shared_sigalgs.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_shared_sigalgs.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_shared_sigalgs.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_shared_sigalgs.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_verify_result.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_verify_result.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_verify_result.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_verify_result.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_get_version.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_get_version.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_get_version.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_get_version.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_in_init.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_in_init.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_in_init.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_in_init.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_key_update.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_key_update.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_key_update.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_key_update.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_library_init.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_library_init.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_library_init.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_library_init.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_load_client_CA_file.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_load_client_CA_file.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_load_client_CA_file.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_load_client_CA_file.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_pending.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_pending.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_pending.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_pending.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_read.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_read.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_read.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_read.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_read_early_data.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_read_early_data.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_read_early_data.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_read_early_data.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_rstate_string.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_rstate_string.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_rstate_string.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_rstate_string.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_session_reused.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_session_reused.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_session_reused.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_session_reused.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_set1_host.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_set1_host.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_set1_host.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_set1_host.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_set_bio.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_set_bio.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_set_bio.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_set_bio.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_set_connect_state.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_set_connect_state.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_set_connect_state.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_set_connect_state.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_set_fd.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_set_fd.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_set_fd.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_set_fd.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_set_session.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_set_session.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_set_session.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_set_session.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_set_shutdown.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_set_shutdown.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_set_shutdown.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_set_shutdown.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_set_verify_result.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_set_verify_result.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_set_verify_result.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_set_verify_result.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_shutdown.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_shutdown.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_shutdown.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_shutdown.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_state_string.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_state_string.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_state_string.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_state_string.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_want.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_want.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_want.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_want.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/SSL_write.pod b/src/openssl/openssl-1.1.1w/doc/man3/SSL_write.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/SSL_write.pod rename to src/openssl/openssl-1.1.1w/doc/man3/SSL_write.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/UI_STRING.pod b/src/openssl/openssl-1.1.1w/doc/man3/UI_STRING.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/UI_STRING.pod rename to src/openssl/openssl-1.1.1w/doc/man3/UI_STRING.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/UI_UTIL_read_pw.pod b/src/openssl/openssl-1.1.1w/doc/man3/UI_UTIL_read_pw.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/UI_UTIL_read_pw.pod rename to src/openssl/openssl-1.1.1w/doc/man3/UI_UTIL_read_pw.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/UI_create_method.pod b/src/openssl/openssl-1.1.1w/doc/man3/UI_create_method.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/UI_create_method.pod rename to src/openssl/openssl-1.1.1w/doc/man3/UI_create_method.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/UI_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/UI_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/UI_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/UI_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509V3_get_d2i.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509V3_get_d2i.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509V3_get_d2i.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509V3_get_d2i.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_ALGOR_dup.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_ALGOR_dup.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_ALGOR_dup.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_ALGOR_dup.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_CRL_get0_by_serial.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_CRL_get0_by_serial.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_CRL_get0_by_serial.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_CRL_get0_by_serial.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_EXTENSION_set_object.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_EXTENSION_set_object.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_EXTENSION_set_object.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_EXTENSION_set_object.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_LOOKUP.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_LOOKUP.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_LOOKUP.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_LOOKUP.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_LOOKUP_hash_dir.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_LOOKUP_hash_dir.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_LOOKUP_hash_dir.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_LOOKUP_hash_dir.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_LOOKUP_meth_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_LOOKUP_meth_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_LOOKUP_meth_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_LOOKUP_meth_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_NAME_ENTRY_get_object.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_ENTRY_get_object.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_NAME_ENTRY_get_object.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_ENTRY_get_object.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_NAME_add_entry_by_txt.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_add_entry_by_txt.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_NAME_add_entry_by_txt.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_add_entry_by_txt.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_NAME_get0_der.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_get0_der.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_NAME_get0_der.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_get0_der.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_NAME_get_index_by_NID.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_get_index_by_NID.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_NAME_get_index_by_NID.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_get_index_by_NID.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_NAME_print_ex.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_print_ex.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_NAME_print_ex.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_NAME_print_ex.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_PUBKEY_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_PUBKEY_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_PUBKEY_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_PUBKEY_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_SIG_get0.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_SIG_get0.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_SIG_get0.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_SIG_get0.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_STORE_CTX_get_error.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_CTX_get_error.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_STORE_CTX_get_error.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_CTX_get_error.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_STORE_CTX_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_CTX_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_STORE_CTX_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_CTX_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_STORE_CTX_set_verify_cb.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_CTX_set_verify_cb.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_STORE_CTX_set_verify_cb.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_CTX_set_verify_cb.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_STORE_add_cert.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_add_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_STORE_add_cert.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_add_cert.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_STORE_get0_param.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_get0_param.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_STORE_get0_param.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_get0_param.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_STORE_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_STORE_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_STORE_set_verify_cb_func.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_set_verify_cb_func.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_STORE_set_verify_cb_func.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_STORE_set_verify_cb_func.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_VERIFY_PARAM_set_flags.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_VERIFY_PARAM_set_flags.pod similarity index 97% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_VERIFY_PARAM_set_flags.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_VERIFY_PARAM_set_flags.pod index f6f304bf7..6c79b4296 100644 --- a/src/openssl/openssl-1.1.1t/doc/man3/X509_VERIFY_PARAM_set_flags.pod +++ b/src/openssl/openssl-1.1.1w/doc/man3/X509_VERIFY_PARAM_set_flags.pod @@ -92,8 +92,9 @@ B. X509_VERIFY_PARAM_set_time() sets the verification time in B to B. Normally the current time is used. -X509_VERIFY_PARAM_add0_policy() enables policy checking (it is disabled -by default) and adds B to the acceptable policy set. +X509_VERIFY_PARAM_add0_policy() adds B to the acceptable policy set. +Contrary to preexisting documentation of this function it does not enable +policy checking. X509_VERIFY_PARAM_set1_policies() enables policy checking (it is disabled by default) and sets the acceptable policy set to B. Any existing @@ -377,9 +378,13 @@ and has no effect. The X509_VERIFY_PARAM_get_hostflags() function was added in OpenSSL 1.1.0i. +The function X509_VERIFY_PARAM_add0_policy() was historically documented as +enabling policy checking however the implementation has never done this. +The documentation was changed to align with the implementation. + =head1 COPYRIGHT -Copyright 2009-2020 The OpenSSL Project Authors. All Rights Reserved. +Copyright 2009-2023 The OpenSSL Project Authors. All Rights Reserved. Licensed under the OpenSSL license (the "License"). You may not use this file except in compliance with the License. You can obtain a copy diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_check_ca.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_check_ca.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_check_ca.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_check_ca.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_check_host.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_check_host.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_check_host.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_check_host.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_check_issued.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_check_issued.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_check_issued.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_check_issued.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_check_private_key.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_check_private_key.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_check_private_key.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_check_private_key.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_check_purpose.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_check_purpose.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_check_purpose.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_check_purpose.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_cmp.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_cmp.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_cmp.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_cmp.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_cmp_time.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_cmp_time.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_cmp_time.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_cmp_time.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_digest.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_digest.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_digest.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_digest.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_dup.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_dup.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_dup.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_dup.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_get0_notBefore.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_get0_notBefore.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_get0_notBefore.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_get0_notBefore.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_get0_signature.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_get0_signature.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_get0_signature.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_get0_signature.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_get0_uids.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_get0_uids.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_get0_uids.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_get0_uids.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_get_extension_flags.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_get_extension_flags.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_get_extension_flags.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_get_extension_flags.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_get_pubkey.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_get_pubkey.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_get_pubkey.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_get_pubkey.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_get_serialNumber.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_get_serialNumber.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_get_serialNumber.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_get_serialNumber.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_get_subject_name.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_get_subject_name.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_get_subject_name.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_get_subject_name.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_get_version.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_get_version.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_get_version.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_get_version.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_new.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_new.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_new.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_new.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_sign.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_sign.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_sign.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_sign.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509_verify_cert.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509_verify_cert.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509_verify_cert.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509_verify_cert.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/X509v3_get_ext_by_NID.pod b/src/openssl/openssl-1.1.1w/doc/man3/X509v3_get_ext_by_NID.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/X509v3_get_ext_by_NID.pod rename to src/openssl/openssl-1.1.1w/doc/man3/X509v3_get_ext_by_NID.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/d2i_DHparams.pod b/src/openssl/openssl-1.1.1w/doc/man3/d2i_DHparams.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/d2i_DHparams.pod rename to src/openssl/openssl-1.1.1w/doc/man3/d2i_DHparams.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/d2i_PKCS8PrivateKey_bio.pod b/src/openssl/openssl-1.1.1w/doc/man3/d2i_PKCS8PrivateKey_bio.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/d2i_PKCS8PrivateKey_bio.pod rename to src/openssl/openssl-1.1.1w/doc/man3/d2i_PKCS8PrivateKey_bio.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/d2i_PrivateKey.pod b/src/openssl/openssl-1.1.1w/doc/man3/d2i_PrivateKey.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/d2i_PrivateKey.pod rename to src/openssl/openssl-1.1.1w/doc/man3/d2i_PrivateKey.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/d2i_SSL_SESSION.pod b/src/openssl/openssl-1.1.1w/doc/man3/d2i_SSL_SESSION.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/d2i_SSL_SESSION.pod rename to src/openssl/openssl-1.1.1w/doc/man3/d2i_SSL_SESSION.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/d2i_X509.pod b/src/openssl/openssl-1.1.1w/doc/man3/d2i_X509.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/d2i_X509.pod rename to src/openssl/openssl-1.1.1w/doc/man3/d2i_X509.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/i2d_CMS_bio_stream.pod b/src/openssl/openssl-1.1.1w/doc/man3/i2d_CMS_bio_stream.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/i2d_CMS_bio_stream.pod rename to src/openssl/openssl-1.1.1w/doc/man3/i2d_CMS_bio_stream.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/i2d_PKCS7_bio_stream.pod b/src/openssl/openssl-1.1.1w/doc/man3/i2d_PKCS7_bio_stream.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/i2d_PKCS7_bio_stream.pod rename to src/openssl/openssl-1.1.1w/doc/man3/i2d_PKCS7_bio_stream.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/i2d_re_X509_tbs.pod b/src/openssl/openssl-1.1.1w/doc/man3/i2d_re_X509_tbs.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/i2d_re_X509_tbs.pod rename to src/openssl/openssl-1.1.1w/doc/man3/i2d_re_X509_tbs.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man3/o2i_SCT_LIST.pod b/src/openssl/openssl-1.1.1w/doc/man3/o2i_SCT_LIST.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man3/o2i_SCT_LIST.pod rename to src/openssl/openssl-1.1.1w/doc/man3/o2i_SCT_LIST.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man5/config.pod b/src/openssl/openssl-1.1.1w/doc/man5/config.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man5/config.pod rename to src/openssl/openssl-1.1.1w/doc/man5/config.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man5/x509v3_config.pod b/src/openssl/openssl-1.1.1w/doc/man5/x509v3_config.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man5/x509v3_config.pod rename to src/openssl/openssl-1.1.1w/doc/man5/x509v3_config.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/Ed25519.pod b/src/openssl/openssl-1.1.1w/doc/man7/Ed25519.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/Ed25519.pod rename to src/openssl/openssl-1.1.1w/doc/man7/Ed25519.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/RAND.pod b/src/openssl/openssl-1.1.1w/doc/man7/RAND.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/RAND.pod rename to src/openssl/openssl-1.1.1w/doc/man7/RAND.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/RAND_DRBG.pod b/src/openssl/openssl-1.1.1w/doc/man7/RAND_DRBG.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/RAND_DRBG.pod rename to src/openssl/openssl-1.1.1w/doc/man7/RAND_DRBG.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/RSA-PSS.pod b/src/openssl/openssl-1.1.1w/doc/man7/RSA-PSS.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/RSA-PSS.pod rename to src/openssl/openssl-1.1.1w/doc/man7/RSA-PSS.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/SM2.pod b/src/openssl/openssl-1.1.1w/doc/man7/SM2.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/SM2.pod rename to src/openssl/openssl-1.1.1w/doc/man7/SM2.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/X25519.pod b/src/openssl/openssl-1.1.1w/doc/man7/X25519.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/X25519.pod rename to src/openssl/openssl-1.1.1w/doc/man7/X25519.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/bio.pod b/src/openssl/openssl-1.1.1w/doc/man7/bio.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/bio.pod rename to src/openssl/openssl-1.1.1w/doc/man7/bio.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/crypto.pod b/src/openssl/openssl-1.1.1w/doc/man7/crypto.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/crypto.pod rename to src/openssl/openssl-1.1.1w/doc/man7/crypto.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/ct.pod b/src/openssl/openssl-1.1.1w/doc/man7/ct.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/ct.pod rename to src/openssl/openssl-1.1.1w/doc/man7/ct.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/des_modes.pod b/src/openssl/openssl-1.1.1w/doc/man7/des_modes.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/des_modes.pod rename to src/openssl/openssl-1.1.1w/doc/man7/des_modes.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/evp.pod b/src/openssl/openssl-1.1.1w/doc/man7/evp.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/evp.pod rename to src/openssl/openssl-1.1.1w/doc/man7/evp.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/ossl_store-file.pod b/src/openssl/openssl-1.1.1w/doc/man7/ossl_store-file.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/ossl_store-file.pod rename to src/openssl/openssl-1.1.1w/doc/man7/ossl_store-file.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/ossl_store.pod b/src/openssl/openssl-1.1.1w/doc/man7/ossl_store.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/ossl_store.pod rename to src/openssl/openssl-1.1.1w/doc/man7/ossl_store.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/passphrase-encoding.pod b/src/openssl/openssl-1.1.1w/doc/man7/passphrase-encoding.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/passphrase-encoding.pod rename to src/openssl/openssl-1.1.1w/doc/man7/passphrase-encoding.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/proxy-certificates.pod b/src/openssl/openssl-1.1.1w/doc/man7/proxy-certificates.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/proxy-certificates.pod rename to src/openssl/openssl-1.1.1w/doc/man7/proxy-certificates.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/scrypt.pod b/src/openssl/openssl-1.1.1w/doc/man7/scrypt.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/scrypt.pod rename to src/openssl/openssl-1.1.1w/doc/man7/scrypt.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/ssl.pod b/src/openssl/openssl-1.1.1w/doc/man7/ssl.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/ssl.pod rename to src/openssl/openssl-1.1.1w/doc/man7/ssl.pod diff --git a/src/openssl/openssl-1.1.1t/doc/man7/x509.pod b/src/openssl/openssl-1.1.1w/doc/man7/x509.pod similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/man7/x509.pod rename to src/openssl/openssl-1.1.1w/doc/man7/x509.pod diff --git a/src/openssl/openssl-1.1.1t/doc/openssl-c-indent.el b/src/openssl/openssl-1.1.1w/doc/openssl-c-indent.el similarity index 100% rename from src/openssl/openssl-1.1.1t/doc/openssl-c-indent.el rename to src/openssl/openssl-1.1.1w/doc/openssl-c-indent.el diff --git a/src/openssl/openssl-1.1.1t/e_os.h b/src/openssl/openssl-1.1.1w/e_os.h similarity index 100% rename from src/openssl/openssl-1.1.1t/e_os.h rename to src/openssl/openssl-1.1.1w/e_os.h diff --git a/src/openssl/openssl-1.1.1t/engines/asm/e_padlock-x86.pl b/src/openssl/openssl-1.1.1w/engines/asm/e_padlock-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/asm/e_padlock-x86.pl rename to src/openssl/openssl-1.1.1w/engines/asm/e_padlock-x86.pl diff --git a/src/openssl/openssl-1.1.1t/engines/asm/e_padlock-x86_64.pl b/src/openssl/openssl-1.1.1w/engines/asm/e_padlock-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/asm/e_padlock-x86_64.pl rename to src/openssl/openssl-1.1.1w/engines/asm/e_padlock-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/engines/build.info b/src/openssl/openssl-1.1.1w/engines/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/build.info rename to src/openssl/openssl-1.1.1w/engines/build.info diff --git a/src/openssl/openssl-1.1.1t/engines/e_afalg.c b/src/openssl/openssl-1.1.1w/engines/e_afalg.c similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_afalg.c rename to src/openssl/openssl-1.1.1w/engines/e_afalg.c diff --git a/src/openssl/openssl-1.1.1t/engines/e_afalg.ec b/src/openssl/openssl-1.1.1w/engines/e_afalg.ec similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_afalg.ec rename to src/openssl/openssl-1.1.1w/engines/e_afalg.ec diff --git a/src/openssl/openssl-1.1.1t/engines/e_afalg.h b/src/openssl/openssl-1.1.1w/engines/e_afalg.h similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_afalg.h rename to src/openssl/openssl-1.1.1w/engines/e_afalg.h diff --git a/src/openssl/openssl-1.1.1t/engines/e_afalg.txt b/src/openssl/openssl-1.1.1w/engines/e_afalg.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_afalg.txt rename to src/openssl/openssl-1.1.1w/engines/e_afalg.txt diff --git a/src/openssl/openssl-1.1.1t/engines/e_afalg_err.c b/src/openssl/openssl-1.1.1w/engines/e_afalg_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_afalg_err.c rename to src/openssl/openssl-1.1.1w/engines/e_afalg_err.c diff --git a/src/openssl/openssl-1.1.1t/engines/e_afalg_err.h b/src/openssl/openssl-1.1.1w/engines/e_afalg_err.h similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_afalg_err.h rename to src/openssl/openssl-1.1.1w/engines/e_afalg_err.h diff --git a/src/openssl/openssl-1.1.1t/engines/e_capi.c b/src/openssl/openssl-1.1.1w/engines/e_capi.c similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_capi.c rename to src/openssl/openssl-1.1.1w/engines/e_capi.c diff --git a/src/openssl/openssl-1.1.1t/engines/e_capi.ec b/src/openssl/openssl-1.1.1w/engines/e_capi.ec similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_capi.ec rename to src/openssl/openssl-1.1.1w/engines/e_capi.ec diff --git a/src/openssl/openssl-1.1.1t/engines/e_capi.txt b/src/openssl/openssl-1.1.1w/engines/e_capi.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_capi.txt rename to src/openssl/openssl-1.1.1w/engines/e_capi.txt diff --git a/src/openssl/openssl-1.1.1t/engines/e_capi_err.c b/src/openssl/openssl-1.1.1w/engines/e_capi_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_capi_err.c rename to src/openssl/openssl-1.1.1w/engines/e_capi_err.c diff --git a/src/openssl/openssl-1.1.1t/engines/e_capi_err.h b/src/openssl/openssl-1.1.1w/engines/e_capi_err.h similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_capi_err.h rename to src/openssl/openssl-1.1.1w/engines/e_capi_err.h diff --git a/src/openssl/openssl-1.1.1t/engines/e_dasync.c b/src/openssl/openssl-1.1.1w/engines/e_dasync.c similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_dasync.c rename to src/openssl/openssl-1.1.1w/engines/e_dasync.c diff --git a/src/openssl/openssl-1.1.1t/engines/e_dasync.ec b/src/openssl/openssl-1.1.1w/engines/e_dasync.ec similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_dasync.ec rename to src/openssl/openssl-1.1.1w/engines/e_dasync.ec diff --git a/src/openssl/openssl-1.1.1t/engines/e_dasync.txt b/src/openssl/openssl-1.1.1w/engines/e_dasync.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_dasync.txt rename to src/openssl/openssl-1.1.1w/engines/e_dasync.txt diff --git a/src/openssl/openssl-1.1.1t/engines/e_dasync_err.c b/src/openssl/openssl-1.1.1w/engines/e_dasync_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_dasync_err.c rename to src/openssl/openssl-1.1.1w/engines/e_dasync_err.c diff --git a/src/openssl/openssl-1.1.1t/engines/e_dasync_err.h b/src/openssl/openssl-1.1.1w/engines/e_dasync_err.h similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_dasync_err.h rename to src/openssl/openssl-1.1.1w/engines/e_dasync_err.h diff --git a/src/openssl/openssl-1.1.1t/engines/e_ossltest.c b/src/openssl/openssl-1.1.1w/engines/e_ossltest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_ossltest.c rename to src/openssl/openssl-1.1.1w/engines/e_ossltest.c diff --git a/src/openssl/openssl-1.1.1t/engines/e_ossltest.ec b/src/openssl/openssl-1.1.1w/engines/e_ossltest.ec similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_ossltest.ec rename to src/openssl/openssl-1.1.1w/engines/e_ossltest.ec diff --git a/src/openssl/openssl-1.1.1t/engines/e_ossltest.txt b/src/openssl/openssl-1.1.1w/engines/e_ossltest.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_ossltest.txt rename to src/openssl/openssl-1.1.1w/engines/e_ossltest.txt diff --git a/src/openssl/openssl-1.1.1t/engines/e_ossltest_err.c b/src/openssl/openssl-1.1.1w/engines/e_ossltest_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_ossltest_err.c rename to src/openssl/openssl-1.1.1w/engines/e_ossltest_err.c diff --git a/src/openssl/openssl-1.1.1t/engines/e_ossltest_err.h b/src/openssl/openssl-1.1.1w/engines/e_ossltest_err.h similarity index 100% rename from src/openssl/openssl-1.1.1t/engines/e_ossltest_err.h rename to src/openssl/openssl-1.1.1w/engines/e_ossltest_err.h diff --git a/src/openssl/openssl-1.1.1t/engines/e_padlock.c b/src/openssl/openssl-1.1.1w/engines/e_padlock.c similarity index 97% rename from src/openssl/openssl-1.1.1t/engines/e_padlock.c rename to src/openssl/openssl-1.1.1w/engines/e_padlock.c index a82c07e81..80756e82b 100644 --- a/src/openssl/openssl-1.1.1t/engines/e_padlock.c +++ b/src/openssl/openssl-1.1.1w/engines/e_padlock.c @@ -1,5 +1,5 @@ /* - * Copyright 2004-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2004-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -144,6 +144,19 @@ static int padlock_init(ENGINE *e) return (padlock_use_rng || padlock_use_ace); } +# ifndef AES_ASM +static int padlock_aes_set_encrypt_key(const unsigned char *userKey, + const int bits, + AES_KEY *key); +static int padlock_aes_set_decrypt_key(const unsigned char *userKey, + const int bits, + AES_KEY *key); +# define AES_ASM +# define AES_set_encrypt_key padlock_aes_set_encrypt_key +# define AES_set_decrypt_key padlock_aes_set_decrypt_key +# include "../crypto/aes/aes_core.c" +# endif + /* * This stuff is needed if this ENGINE is being compiled into a * self-contained shared-library. @@ -639,12 +652,10 @@ padlock_aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, AES_set_decrypt_key(key, key_len, &cdata->ks); else AES_set_encrypt_key(key, key_len, &cdata->ks); -# ifndef AES_ASM /* * OpenSSL C functions use byte-swapped extended key. */ padlock_key_bswap(&cdata->ks); -# endif cdata->cword.b.keygen = 1; break; diff --git a/src/openssl/openssl-1.1.1t/external/perl/Downloaded.txt b/src/openssl/openssl-1.1.1w/external/perl/Downloaded.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Downloaded.txt rename to src/openssl/openssl-1.1.1w/external/perl/Downloaded.txt diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/Artistic b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/Artistic similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/Artistic rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/Artistic diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/COPYING b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/COPYING similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/COPYING rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/COPYING diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/INSTALL b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/INSTALL similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/INSTALL rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/INSTALL diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/MANIFEST b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/MANIFEST similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/MANIFEST rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/MANIFEST diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/META.json b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/META.json similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/META.json rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/META.json diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/META.yml b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/META.yml similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/META.yml rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/META.yml diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/Makefile.PL b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/Makefile.PL similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/Makefile.PL rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/Makefile.PL diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/README b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/README similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/README rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/README diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/lib/Text/Template.pm b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/lib/Text/Template.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/lib/Text/Template.pm rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/lib/Text/Template.pm diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/lib/Text/Template/Preprocess.pm b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/lib/Text/Template/Preprocess.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/lib/Text/Template/Preprocess.pm rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/lib/Text/Template/Preprocess.pm diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/00-version.t b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/00-version.t similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/00-version.t rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/00-version.t diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/01-basic.t b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/01-basic.t similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/01-basic.t rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/01-basic.t diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/02-hash.t b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/02-hash.t similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/02-hash.t rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/02-hash.t diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/03-out.t b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/03-out.t similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/03-out.t rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/03-out.t diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/04-safe.t b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/04-safe.t similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/04-safe.t rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/04-safe.t diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/05-safe2.t b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/05-safe2.t similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/05-safe2.t rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/05-safe2.t diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/06-ofh.t b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/06-ofh.t similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/06-ofh.t rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/06-ofh.t diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/07-safe3.t b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/07-safe3.t similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/07-safe3.t rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/07-safe3.t diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/08-exported.t b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/08-exported.t similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/08-exported.t rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/08-exported.t diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/09-error.t b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/09-error.t similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/09-error.t rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/09-error.t diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/10-delimiters.t b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/10-delimiters.t similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/10-delimiters.t rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/10-delimiters.t diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/11-prepend.t b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/11-prepend.t similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/11-prepend.t rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/11-prepend.t diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/12-preprocess.t b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/12-preprocess.t similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/12-preprocess.t rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/12-preprocess.t diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/13-taint.t b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/13-taint.t similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/13-taint.t rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/13-taint.t diff --git a/src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/14-broken.t b/src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/14-broken.t similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/Text-Template-1.46/t/14-broken.t rename to src/openssl/openssl-1.1.1w/external/perl/Text-Template-1.46/t/14-broken.t diff --git a/src/openssl/openssl-1.1.1t/external/perl/transfer/Text/Template.pm b/src/openssl/openssl-1.1.1w/external/perl/transfer/Text/Template.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/external/perl/transfer/Text/Template.pm rename to src/openssl/openssl-1.1.1w/external/perl/transfer/Text/Template.pm diff --git a/src/openssl/openssl-1.1.1t/fuzz/README.md b/src/openssl/openssl-1.1.1w/fuzz/README.md similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/README.md rename to src/openssl/openssl-1.1.1w/fuzz/README.md diff --git a/src/openssl/openssl-1.1.1t/fuzz/asn1.c b/src/openssl/openssl-1.1.1w/fuzz/asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/asn1.c rename to src/openssl/openssl-1.1.1w/fuzz/asn1.c diff --git a/src/openssl/openssl-1.1.1t/fuzz/asn1parse.c b/src/openssl/openssl-1.1.1w/fuzz/asn1parse.c similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/asn1parse.c rename to src/openssl/openssl-1.1.1w/fuzz/asn1parse.c diff --git a/src/openssl/openssl-1.1.1t/fuzz/bignum.c b/src/openssl/openssl-1.1.1w/fuzz/bignum.c similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/bignum.c rename to src/openssl/openssl-1.1.1w/fuzz/bignum.c diff --git a/src/openssl/openssl-1.1.1t/fuzz/bndiv.c b/src/openssl/openssl-1.1.1w/fuzz/bndiv.c similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/bndiv.c rename to src/openssl/openssl-1.1.1w/fuzz/bndiv.c diff --git a/src/openssl/openssl-1.1.1t/fuzz/build.info b/src/openssl/openssl-1.1.1w/fuzz/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/build.info rename to src/openssl/openssl-1.1.1w/fuzz/build.info diff --git a/src/openssl/openssl-1.1.1t/fuzz/client.c b/src/openssl/openssl-1.1.1w/fuzz/client.c similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/client.c rename to src/openssl/openssl-1.1.1w/fuzz/client.c diff --git a/src/openssl/openssl-1.1.1t/fuzz/cms.c b/src/openssl/openssl-1.1.1w/fuzz/cms.c similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/cms.c rename to src/openssl/openssl-1.1.1w/fuzz/cms.c diff --git a/src/openssl/openssl-1.1.1t/fuzz/conf.c b/src/openssl/openssl-1.1.1w/fuzz/conf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/conf.c rename to src/openssl/openssl-1.1.1w/fuzz/conf.c diff --git a/src/openssl/openssl-1.1.1t/fuzz/crl.c b/src/openssl/openssl-1.1.1w/fuzz/crl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/crl.c rename to src/openssl/openssl-1.1.1w/fuzz/crl.c diff --git a/src/openssl/openssl-1.1.1t/fuzz/ct.c b/src/openssl/openssl-1.1.1w/fuzz/ct.c similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/ct.c rename to src/openssl/openssl-1.1.1w/fuzz/ct.c diff --git a/src/openssl/openssl-1.1.1t/fuzz/driver.c b/src/openssl/openssl-1.1.1w/fuzz/driver.c similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/driver.c rename to src/openssl/openssl-1.1.1w/fuzz/driver.c diff --git a/src/openssl/openssl-1.1.1t/fuzz/fuzzer.h b/src/openssl/openssl-1.1.1w/fuzz/fuzzer.h similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/fuzzer.h rename to src/openssl/openssl-1.1.1w/fuzz/fuzzer.h diff --git a/src/openssl/openssl-1.1.1t/fuzz/helper.py b/src/openssl/openssl-1.1.1w/fuzz/helper.py similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/helper.py rename to src/openssl/openssl-1.1.1w/fuzz/helper.py diff --git a/src/openssl/openssl-1.1.1t/fuzz/mkfuzzoids.pl b/src/openssl/openssl-1.1.1w/fuzz/mkfuzzoids.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/mkfuzzoids.pl rename to src/openssl/openssl-1.1.1w/fuzz/mkfuzzoids.pl diff --git a/src/openssl/openssl-1.1.1t/fuzz/oids.txt b/src/openssl/openssl-1.1.1w/fuzz/oids.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/oids.txt rename to src/openssl/openssl-1.1.1w/fuzz/oids.txt diff --git a/src/openssl/openssl-1.1.1t/fuzz/rand.inc b/src/openssl/openssl-1.1.1w/fuzz/rand.inc similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/rand.inc rename to src/openssl/openssl-1.1.1w/fuzz/rand.inc diff --git a/src/openssl/openssl-1.1.1t/fuzz/server.c b/src/openssl/openssl-1.1.1w/fuzz/server.c similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/server.c rename to src/openssl/openssl-1.1.1w/fuzz/server.c diff --git a/src/openssl/openssl-1.1.1t/fuzz/test-corpus.c b/src/openssl/openssl-1.1.1w/fuzz/test-corpus.c similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/test-corpus.c rename to src/openssl/openssl-1.1.1w/fuzz/test-corpus.c diff --git a/src/openssl/openssl-1.1.1t/fuzz/x509.c b/src/openssl/openssl-1.1.1w/fuzz/x509.c similarity index 100% rename from src/openssl/openssl-1.1.1t/fuzz/x509.c rename to src/openssl/openssl-1.1.1w/fuzz/x509.c diff --git a/src/openssl/openssl-1.1.1t/include/crypto/__DECC_INCLUDE_EPILOGUE.H b/src/openssl/openssl-1.1.1w/include/crypto/__DECC_INCLUDE_EPILOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/__DECC_INCLUDE_EPILOGUE.H rename to src/openssl/openssl-1.1.1w/include/crypto/__DECC_INCLUDE_EPILOGUE.H diff --git a/src/openssl/openssl-1.1.1t/include/crypto/__DECC_INCLUDE_PROLOGUE.H b/src/openssl/openssl-1.1.1w/include/crypto/__DECC_INCLUDE_PROLOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/__DECC_INCLUDE_PROLOGUE.H rename to src/openssl/openssl-1.1.1w/include/crypto/__DECC_INCLUDE_PROLOGUE.H diff --git a/src/openssl/openssl-1.1.1t/include/crypto/aria.h b/src/openssl/openssl-1.1.1w/include/crypto/aria.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/aria.h rename to src/openssl/openssl-1.1.1w/include/crypto/aria.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/asn1.h b/src/openssl/openssl-1.1.1w/include/crypto/asn1.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/asn1.h rename to src/openssl/openssl-1.1.1w/include/crypto/asn1.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/async.h b/src/openssl/openssl-1.1.1w/include/crypto/async.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/async.h rename to src/openssl/openssl-1.1.1w/include/crypto/async.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/bn.h b/src/openssl/openssl-1.1.1w/include/crypto/bn.h similarity index 92% rename from src/openssl/openssl-1.1.1t/include/crypto/bn.h rename to src/openssl/openssl-1.1.1w/include/crypto/bn.h index 9f866ed71..250914c46 100644 --- a/src/openssl/openssl-1.1.1t/include/crypto/bn.h +++ b/src/openssl/openssl-1.1.1w/include/crypto/bn.h @@ -86,10 +86,5 @@ int bn_lshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n); int bn_rshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n); int bn_div_fixed_top(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); -int ossl_bn_rsa_do_unblind(const BIGNUM *intermediate, - const BN_BLINDING *blinding, - const BIGNUM *possible_arg2, - const BIGNUM *to_mod, BN_CTX *ctx, - unsigned char *buf, int num); #endif diff --git a/src/openssl/openssl-1.1.1t/include/crypto/bn_conf.h.in b/src/openssl/openssl-1.1.1w/include/crypto/bn_conf.h.in similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/bn_conf.h.in rename to src/openssl/openssl-1.1.1w/include/crypto/bn_conf.h.in diff --git a/src/openssl/openssl-1.1.1t/include/crypto/bn_dh.h b/src/openssl/openssl-1.1.1w/include/crypto/bn_dh.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/bn_dh.h rename to src/openssl/openssl-1.1.1w/include/crypto/bn_dh.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/bn_srp.h b/src/openssl/openssl-1.1.1w/include/crypto/bn_srp.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/bn_srp.h rename to src/openssl/openssl-1.1.1w/include/crypto/bn_srp.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/chacha.h b/src/openssl/openssl-1.1.1w/include/crypto/chacha.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/chacha.h rename to src/openssl/openssl-1.1.1w/include/crypto/chacha.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/cryptlib.h b/src/openssl/openssl-1.1.1w/include/crypto/cryptlib.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/cryptlib.h rename to src/openssl/openssl-1.1.1w/include/crypto/cryptlib.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/ctype.h b/src/openssl/openssl-1.1.1w/include/crypto/ctype.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/ctype.h rename to src/openssl/openssl-1.1.1w/include/crypto/ctype.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/dso_conf.h.in b/src/openssl/openssl-1.1.1w/include/crypto/dso_conf.h.in similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/dso_conf.h.in rename to src/openssl/openssl-1.1.1w/include/crypto/dso_conf.h.in diff --git a/src/openssl/openssl-1.1.1t/include/crypto/ec.h b/src/openssl/openssl-1.1.1w/include/crypto/ec.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/ec.h rename to src/openssl/openssl-1.1.1w/include/crypto/ec.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/engine.h b/src/openssl/openssl-1.1.1w/include/crypto/engine.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/engine.h rename to src/openssl/openssl-1.1.1w/include/crypto/engine.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/err.h b/src/openssl/openssl-1.1.1w/include/crypto/err.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/err.h rename to src/openssl/openssl-1.1.1w/include/crypto/err.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/evp.h b/src/openssl/openssl-1.1.1w/include/crypto/evp.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/evp.h rename to src/openssl/openssl-1.1.1w/include/crypto/evp.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/lhash.h b/src/openssl/openssl-1.1.1w/include/crypto/lhash.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/lhash.h rename to src/openssl/openssl-1.1.1w/include/crypto/lhash.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/md32_common.h b/src/openssl/openssl-1.1.1w/include/crypto/md32_common.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/md32_common.h rename to src/openssl/openssl-1.1.1w/include/crypto/md32_common.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/objects.h b/src/openssl/openssl-1.1.1w/include/crypto/objects.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/objects.h rename to src/openssl/openssl-1.1.1w/include/crypto/objects.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/poly1305.h b/src/openssl/openssl-1.1.1w/include/crypto/poly1305.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/poly1305.h rename to src/openssl/openssl-1.1.1w/include/crypto/poly1305.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/rand.h b/src/openssl/openssl-1.1.1w/include/crypto/rand.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/rand.h rename to src/openssl/openssl-1.1.1w/include/crypto/rand.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/sha.h b/src/openssl/openssl-1.1.1w/include/crypto/sha.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/sha.h rename to src/openssl/openssl-1.1.1w/include/crypto/sha.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/siphash.h b/src/openssl/openssl-1.1.1w/include/crypto/siphash.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/siphash.h rename to src/openssl/openssl-1.1.1w/include/crypto/siphash.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/sm2.h b/src/openssl/openssl-1.1.1w/include/crypto/sm2.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/sm2.h rename to src/openssl/openssl-1.1.1w/include/crypto/sm2.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/sm2err.h b/src/openssl/openssl-1.1.1w/include/crypto/sm2err.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/sm2err.h rename to src/openssl/openssl-1.1.1w/include/crypto/sm2err.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/sm3.h b/src/openssl/openssl-1.1.1w/include/crypto/sm3.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/sm3.h rename to src/openssl/openssl-1.1.1w/include/crypto/sm3.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/sm4.h b/src/openssl/openssl-1.1.1w/include/crypto/sm4.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/sm4.h rename to src/openssl/openssl-1.1.1w/include/crypto/sm4.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/store.h b/src/openssl/openssl-1.1.1w/include/crypto/store.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/store.h rename to src/openssl/openssl-1.1.1w/include/crypto/store.h diff --git a/src/openssl/openssl-1.1.1t/include/crypto/x509.h b/src/openssl/openssl-1.1.1w/include/crypto/x509.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/crypto/x509.h rename to src/openssl/openssl-1.1.1w/include/crypto/x509.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/__DECC_INCLUDE_EPILOGUE.H b/src/openssl/openssl-1.1.1w/include/internal/__DECC_INCLUDE_EPILOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/__DECC_INCLUDE_EPILOGUE.H rename to src/openssl/openssl-1.1.1w/include/internal/__DECC_INCLUDE_EPILOGUE.H diff --git a/src/openssl/openssl-1.1.1t/include/internal/__DECC_INCLUDE_PROLOGUE.H b/src/openssl/openssl-1.1.1w/include/internal/__DECC_INCLUDE_PROLOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/__DECC_INCLUDE_PROLOGUE.H rename to src/openssl/openssl-1.1.1w/include/internal/__DECC_INCLUDE_PROLOGUE.H diff --git a/src/openssl/openssl-1.1.1t/include/internal/bio.h b/src/openssl/openssl-1.1.1w/include/internal/bio.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/bio.h rename to src/openssl/openssl-1.1.1w/include/internal/bio.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/comp.h b/src/openssl/openssl-1.1.1w/include/internal/comp.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/comp.h rename to src/openssl/openssl-1.1.1w/include/internal/comp.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/conf.h b/src/openssl/openssl-1.1.1w/include/internal/conf.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/conf.h rename to src/openssl/openssl-1.1.1w/include/internal/conf.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/constant_time.h b/src/openssl/openssl-1.1.1w/include/internal/constant_time.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/constant_time.h rename to src/openssl/openssl-1.1.1w/include/internal/constant_time.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/cryptlib.h b/src/openssl/openssl-1.1.1w/include/internal/cryptlib.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/cryptlib.h rename to src/openssl/openssl-1.1.1w/include/internal/cryptlib.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/dane.h b/src/openssl/openssl-1.1.1w/include/internal/dane.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/dane.h rename to src/openssl/openssl-1.1.1w/include/internal/dane.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/dso.h b/src/openssl/openssl-1.1.1w/include/internal/dso.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/dso.h rename to src/openssl/openssl-1.1.1w/include/internal/dso.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/dsoerr.h b/src/openssl/openssl-1.1.1w/include/internal/dsoerr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/dsoerr.h rename to src/openssl/openssl-1.1.1w/include/internal/dsoerr.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/err.h b/src/openssl/openssl-1.1.1w/include/internal/err.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/err.h rename to src/openssl/openssl-1.1.1w/include/internal/err.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/nelem.h b/src/openssl/openssl-1.1.1w/include/internal/nelem.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/nelem.h rename to src/openssl/openssl-1.1.1w/include/internal/nelem.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/numbers.h b/src/openssl/openssl-1.1.1w/include/internal/numbers.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/numbers.h rename to src/openssl/openssl-1.1.1w/include/internal/numbers.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/o_dir.h b/src/openssl/openssl-1.1.1w/include/internal/o_dir.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/o_dir.h rename to src/openssl/openssl-1.1.1w/include/internal/o_dir.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/o_str.h b/src/openssl/openssl-1.1.1w/include/internal/o_str.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/o_str.h rename to src/openssl/openssl-1.1.1w/include/internal/o_str.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/refcount.h b/src/openssl/openssl-1.1.1w/include/internal/refcount.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/refcount.h rename to src/openssl/openssl-1.1.1w/include/internal/refcount.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/sockets.h b/src/openssl/openssl-1.1.1w/include/internal/sockets.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/sockets.h rename to src/openssl/openssl-1.1.1w/include/internal/sockets.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/sslconf.h b/src/openssl/openssl-1.1.1w/include/internal/sslconf.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/sslconf.h rename to src/openssl/openssl-1.1.1w/include/internal/sslconf.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/thread_once.h b/src/openssl/openssl-1.1.1w/include/internal/thread_once.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/thread_once.h rename to src/openssl/openssl-1.1.1w/include/internal/thread_once.h diff --git a/src/openssl/openssl-1.1.1t/include/internal/tsan_assist.h b/src/openssl/openssl-1.1.1w/include/internal/tsan_assist.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/internal/tsan_assist.h rename to src/openssl/openssl-1.1.1w/include/internal/tsan_assist.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/__DECC_INCLUDE_EPILOGUE.H b/src/openssl/openssl-1.1.1w/include/openssl/__DECC_INCLUDE_EPILOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/__DECC_INCLUDE_EPILOGUE.H rename to src/openssl/openssl-1.1.1w/include/openssl/__DECC_INCLUDE_EPILOGUE.H diff --git a/src/openssl/openssl-1.1.1t/include/openssl/__DECC_INCLUDE_PROLOGUE.H b/src/openssl/openssl-1.1.1w/include/openssl/__DECC_INCLUDE_PROLOGUE.H similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/__DECC_INCLUDE_PROLOGUE.H rename to src/openssl/openssl-1.1.1w/include/openssl/__DECC_INCLUDE_PROLOGUE.H diff --git a/src/openssl/openssl-1.1.1t/include/openssl/aes.h b/src/openssl/openssl-1.1.1w/include/openssl/aes.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/aes.h rename to src/openssl/openssl-1.1.1w/include/openssl/aes.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/asn1.h b/src/openssl/openssl-1.1.1w/include/openssl/asn1.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/asn1.h rename to src/openssl/openssl-1.1.1w/include/openssl/asn1.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/asn1_mac.h b/src/openssl/openssl-1.1.1w/include/openssl/asn1_mac.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/asn1_mac.h rename to src/openssl/openssl-1.1.1w/include/openssl/asn1_mac.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/asn1err.h b/src/openssl/openssl-1.1.1w/include/openssl/asn1err.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/asn1err.h rename to src/openssl/openssl-1.1.1w/include/openssl/asn1err.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/asn1t.h b/src/openssl/openssl-1.1.1w/include/openssl/asn1t.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/asn1t.h rename to src/openssl/openssl-1.1.1w/include/openssl/asn1t.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/async.h b/src/openssl/openssl-1.1.1w/include/openssl/async.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/async.h rename to src/openssl/openssl-1.1.1w/include/openssl/async.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/asyncerr.h b/src/openssl/openssl-1.1.1w/include/openssl/asyncerr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/asyncerr.h rename to src/openssl/openssl-1.1.1w/include/openssl/asyncerr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/bio.h b/src/openssl/openssl-1.1.1w/include/openssl/bio.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/bio.h rename to src/openssl/openssl-1.1.1w/include/openssl/bio.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/bioerr.h b/src/openssl/openssl-1.1.1w/include/openssl/bioerr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/bioerr.h rename to src/openssl/openssl-1.1.1w/include/openssl/bioerr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/blowfish.h b/src/openssl/openssl-1.1.1w/include/openssl/blowfish.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/blowfish.h rename to src/openssl/openssl-1.1.1w/include/openssl/blowfish.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/bn.h b/src/openssl/openssl-1.1.1w/include/openssl/bn.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/bn.h rename to src/openssl/openssl-1.1.1w/include/openssl/bn.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/bnerr.h b/src/openssl/openssl-1.1.1w/include/openssl/bnerr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/bnerr.h rename to src/openssl/openssl-1.1.1w/include/openssl/bnerr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/buffer.h b/src/openssl/openssl-1.1.1w/include/openssl/buffer.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/buffer.h rename to src/openssl/openssl-1.1.1w/include/openssl/buffer.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/buffererr.h b/src/openssl/openssl-1.1.1w/include/openssl/buffererr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/buffererr.h rename to src/openssl/openssl-1.1.1w/include/openssl/buffererr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/camellia.h b/src/openssl/openssl-1.1.1w/include/openssl/camellia.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/camellia.h rename to src/openssl/openssl-1.1.1w/include/openssl/camellia.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/cast.h b/src/openssl/openssl-1.1.1w/include/openssl/cast.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/cast.h rename to src/openssl/openssl-1.1.1w/include/openssl/cast.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/cmac.h b/src/openssl/openssl-1.1.1w/include/openssl/cmac.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/cmac.h rename to src/openssl/openssl-1.1.1w/include/openssl/cmac.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/cms.h b/src/openssl/openssl-1.1.1w/include/openssl/cms.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/cms.h rename to src/openssl/openssl-1.1.1w/include/openssl/cms.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/cmserr.h b/src/openssl/openssl-1.1.1w/include/openssl/cmserr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/cmserr.h rename to src/openssl/openssl-1.1.1w/include/openssl/cmserr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/comp.h b/src/openssl/openssl-1.1.1w/include/openssl/comp.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/comp.h rename to src/openssl/openssl-1.1.1w/include/openssl/comp.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/comperr.h b/src/openssl/openssl-1.1.1w/include/openssl/comperr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/comperr.h rename to src/openssl/openssl-1.1.1w/include/openssl/comperr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/conf.h b/src/openssl/openssl-1.1.1w/include/openssl/conf.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/conf.h rename to src/openssl/openssl-1.1.1w/include/openssl/conf.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/conf_api.h b/src/openssl/openssl-1.1.1w/include/openssl/conf_api.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/conf_api.h rename to src/openssl/openssl-1.1.1w/include/openssl/conf_api.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/conferr.h b/src/openssl/openssl-1.1.1w/include/openssl/conferr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/conferr.h rename to src/openssl/openssl-1.1.1w/include/openssl/conferr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/crypto.h b/src/openssl/openssl-1.1.1w/include/openssl/crypto.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/crypto.h rename to src/openssl/openssl-1.1.1w/include/openssl/crypto.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/cryptoerr.h b/src/openssl/openssl-1.1.1w/include/openssl/cryptoerr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/cryptoerr.h rename to src/openssl/openssl-1.1.1w/include/openssl/cryptoerr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/ct.h b/src/openssl/openssl-1.1.1w/include/openssl/ct.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/ct.h rename to src/openssl/openssl-1.1.1w/include/openssl/ct.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/cterr.h b/src/openssl/openssl-1.1.1w/include/openssl/cterr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/cterr.h rename to src/openssl/openssl-1.1.1w/include/openssl/cterr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/des.h b/src/openssl/openssl-1.1.1w/include/openssl/des.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/des.h rename to src/openssl/openssl-1.1.1w/include/openssl/des.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/dh.h b/src/openssl/openssl-1.1.1w/include/openssl/dh.h similarity index 98% rename from src/openssl/openssl-1.1.1t/include/openssl/dh.h rename to src/openssl/openssl-1.1.1w/include/openssl/dh.h index 3527540cd..6c6ff3636 100644 --- a/src/openssl/openssl-1.1.1t/include/openssl/dh.h +++ b/src/openssl/openssl-1.1.1w/include/openssl/dh.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -29,6 +29,9 @@ extern "C" { # ifndef OPENSSL_DH_MAX_MODULUS_BITS # define OPENSSL_DH_MAX_MODULUS_BITS 10000 # endif +# ifndef OPENSSL_DH_CHECK_MAX_MODULUS_BITS +# define OPENSSL_DH_CHECK_MAX_MODULUS_BITS 32768 +# endif # define OPENSSL_DH_FIPS_MIN_MODULUS_BITS 1024 diff --git a/src/openssl/openssl-1.1.1t/include/openssl/dherr.h b/src/openssl/openssl-1.1.1w/include/openssl/dherr.h similarity index 96% rename from src/openssl/openssl-1.1.1t/include/openssl/dherr.h rename to src/openssl/openssl-1.1.1w/include/openssl/dherr.h index 916b3bed0..528c81985 100644 --- a/src/openssl/openssl-1.1.1t/include/openssl/dherr.h +++ b/src/openssl/openssl-1.1.1w/include/openssl/dherr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -30,6 +30,7 @@ int ERR_load_DH_strings(void); # define DH_F_COMPUTE_KEY 102 # define DH_F_DHPARAMS_PRINT_FP 101 # define DH_F_DH_BUILTIN_GENPARAMS 106 +# define DH_F_DH_CHECK 126 # define DH_F_DH_CHECK_EX 121 # define DH_F_DH_CHECK_PARAMS_EX 122 # define DH_F_DH_CHECK_PUB_KEY_EX 123 diff --git a/src/openssl/openssl-1.1.1t/include/openssl/dsa.h b/src/openssl/openssl-1.1.1w/include/openssl/dsa.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/dsa.h rename to src/openssl/openssl-1.1.1w/include/openssl/dsa.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/dsaerr.h b/src/openssl/openssl-1.1.1w/include/openssl/dsaerr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/dsaerr.h rename to src/openssl/openssl-1.1.1w/include/openssl/dsaerr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/dtls1.h b/src/openssl/openssl-1.1.1w/include/openssl/dtls1.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/dtls1.h rename to src/openssl/openssl-1.1.1w/include/openssl/dtls1.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/e_os2.h b/src/openssl/openssl-1.1.1w/include/openssl/e_os2.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/e_os2.h rename to src/openssl/openssl-1.1.1w/include/openssl/e_os2.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/ebcdic.h b/src/openssl/openssl-1.1.1w/include/openssl/ebcdic.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/ebcdic.h rename to src/openssl/openssl-1.1.1w/include/openssl/ebcdic.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/ec.h b/src/openssl/openssl-1.1.1w/include/openssl/ec.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/ec.h rename to src/openssl/openssl-1.1.1w/include/openssl/ec.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/ecdh.h b/src/openssl/openssl-1.1.1w/include/openssl/ecdh.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/ecdh.h rename to src/openssl/openssl-1.1.1w/include/openssl/ecdh.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/ecdsa.h b/src/openssl/openssl-1.1.1w/include/openssl/ecdsa.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/ecdsa.h rename to src/openssl/openssl-1.1.1w/include/openssl/ecdsa.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/ecerr.h b/src/openssl/openssl-1.1.1w/include/openssl/ecerr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/ecerr.h rename to src/openssl/openssl-1.1.1w/include/openssl/ecerr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/engine.h b/src/openssl/openssl-1.1.1w/include/openssl/engine.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/engine.h rename to src/openssl/openssl-1.1.1w/include/openssl/engine.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/engineerr.h b/src/openssl/openssl-1.1.1w/include/openssl/engineerr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/engineerr.h rename to src/openssl/openssl-1.1.1w/include/openssl/engineerr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/err.h b/src/openssl/openssl-1.1.1w/include/openssl/err.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/err.h rename to src/openssl/openssl-1.1.1w/include/openssl/err.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/evp.h b/src/openssl/openssl-1.1.1w/include/openssl/evp.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/evp.h rename to src/openssl/openssl-1.1.1w/include/openssl/evp.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/evperr.h b/src/openssl/openssl-1.1.1w/include/openssl/evperr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/evperr.h rename to src/openssl/openssl-1.1.1w/include/openssl/evperr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/hmac.h b/src/openssl/openssl-1.1.1w/include/openssl/hmac.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/hmac.h rename to src/openssl/openssl-1.1.1w/include/openssl/hmac.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/idea.h b/src/openssl/openssl-1.1.1w/include/openssl/idea.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/idea.h rename to src/openssl/openssl-1.1.1w/include/openssl/idea.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/kdf.h b/src/openssl/openssl-1.1.1w/include/openssl/kdf.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/kdf.h rename to src/openssl/openssl-1.1.1w/include/openssl/kdf.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/kdferr.h b/src/openssl/openssl-1.1.1w/include/openssl/kdferr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/kdferr.h rename to src/openssl/openssl-1.1.1w/include/openssl/kdferr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/lhash.h b/src/openssl/openssl-1.1.1w/include/openssl/lhash.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/lhash.h rename to src/openssl/openssl-1.1.1w/include/openssl/lhash.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/md2.h b/src/openssl/openssl-1.1.1w/include/openssl/md2.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/md2.h rename to src/openssl/openssl-1.1.1w/include/openssl/md2.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/md4.h b/src/openssl/openssl-1.1.1w/include/openssl/md4.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/md4.h rename to src/openssl/openssl-1.1.1w/include/openssl/md4.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/md5.h b/src/openssl/openssl-1.1.1w/include/openssl/md5.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/md5.h rename to src/openssl/openssl-1.1.1w/include/openssl/md5.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/mdc2.h b/src/openssl/openssl-1.1.1w/include/openssl/mdc2.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/mdc2.h rename to src/openssl/openssl-1.1.1w/include/openssl/mdc2.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/modes.h b/src/openssl/openssl-1.1.1w/include/openssl/modes.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/modes.h rename to src/openssl/openssl-1.1.1w/include/openssl/modes.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/obj_mac.h b/src/openssl/openssl-1.1.1w/include/openssl/obj_mac.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/obj_mac.h rename to src/openssl/openssl-1.1.1w/include/openssl/obj_mac.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/objects.h b/src/openssl/openssl-1.1.1w/include/openssl/objects.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/objects.h rename to src/openssl/openssl-1.1.1w/include/openssl/objects.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/objectserr.h b/src/openssl/openssl-1.1.1w/include/openssl/objectserr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/objectserr.h rename to src/openssl/openssl-1.1.1w/include/openssl/objectserr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/ocsp.h b/src/openssl/openssl-1.1.1w/include/openssl/ocsp.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/ocsp.h rename to src/openssl/openssl-1.1.1w/include/openssl/ocsp.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/ocsperr.h b/src/openssl/openssl-1.1.1w/include/openssl/ocsperr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/ocsperr.h rename to src/openssl/openssl-1.1.1w/include/openssl/ocsperr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/opensslconf.h.in b/src/openssl/openssl-1.1.1w/include/openssl/opensslconf.h.in similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/opensslconf.h.in rename to src/openssl/openssl-1.1.1w/include/openssl/opensslconf.h.in diff --git a/src/openssl/openssl-1.1.1t/include/openssl/opensslv.h b/src/openssl/openssl-1.1.1w/include/openssl/opensslv.h similarity index 95% rename from src/openssl/openssl-1.1.1t/include/openssl/opensslv.h rename to src/openssl/openssl-1.1.1w/include/openssl/opensslv.h index 7b6c212fa..5667d4712 100644 --- a/src/openssl/openssl-1.1.1t/include/openssl/opensslv.h +++ b/src/openssl/openssl-1.1.1w/include/openssl/opensslv.h @@ -1,5 +1,5 @@ /* - * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1999-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -39,8 +39,8 @@ extern "C" { * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for * major minor fix final patch/beta) */ -# define OPENSSL_VERSION_NUMBER 0x1010114fL -# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1t 7 Feb 2023" +# define OPENSSL_VERSION_NUMBER 0x1010117fL +# define OPENSSL_VERSION_TEXT "OpenSSL 1.1.1w 11 Sep 2023" /*- * The macros below are to be used for shared library (.so, .dll, ...) diff --git a/src/openssl/openssl-1.1.1t/include/openssl/ossl_typ.h b/src/openssl/openssl-1.1.1w/include/openssl/ossl_typ.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/ossl_typ.h rename to src/openssl/openssl-1.1.1w/include/openssl/ossl_typ.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/pem.h b/src/openssl/openssl-1.1.1w/include/openssl/pem.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/pem.h rename to src/openssl/openssl-1.1.1w/include/openssl/pem.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/pem2.h b/src/openssl/openssl-1.1.1w/include/openssl/pem2.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/pem2.h rename to src/openssl/openssl-1.1.1w/include/openssl/pem2.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/pemerr.h b/src/openssl/openssl-1.1.1w/include/openssl/pemerr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/pemerr.h rename to src/openssl/openssl-1.1.1w/include/openssl/pemerr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/pkcs12.h b/src/openssl/openssl-1.1.1w/include/openssl/pkcs12.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/pkcs12.h rename to src/openssl/openssl-1.1.1w/include/openssl/pkcs12.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/pkcs12err.h b/src/openssl/openssl-1.1.1w/include/openssl/pkcs12err.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/pkcs12err.h rename to src/openssl/openssl-1.1.1w/include/openssl/pkcs12err.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/pkcs7.h b/src/openssl/openssl-1.1.1w/include/openssl/pkcs7.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/pkcs7.h rename to src/openssl/openssl-1.1.1w/include/openssl/pkcs7.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/pkcs7err.h b/src/openssl/openssl-1.1.1w/include/openssl/pkcs7err.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/pkcs7err.h rename to src/openssl/openssl-1.1.1w/include/openssl/pkcs7err.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/rand.h b/src/openssl/openssl-1.1.1w/include/openssl/rand.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/rand.h rename to src/openssl/openssl-1.1.1w/include/openssl/rand.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/rand_drbg.h b/src/openssl/openssl-1.1.1w/include/openssl/rand_drbg.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/rand_drbg.h rename to src/openssl/openssl-1.1.1w/include/openssl/rand_drbg.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/randerr.h b/src/openssl/openssl-1.1.1w/include/openssl/randerr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/randerr.h rename to src/openssl/openssl-1.1.1w/include/openssl/randerr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/rc2.h b/src/openssl/openssl-1.1.1w/include/openssl/rc2.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/rc2.h rename to src/openssl/openssl-1.1.1w/include/openssl/rc2.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/rc4.h b/src/openssl/openssl-1.1.1w/include/openssl/rc4.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/rc4.h rename to src/openssl/openssl-1.1.1w/include/openssl/rc4.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/rc5.h b/src/openssl/openssl-1.1.1w/include/openssl/rc5.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/rc5.h rename to src/openssl/openssl-1.1.1w/include/openssl/rc5.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/ripemd.h b/src/openssl/openssl-1.1.1w/include/openssl/ripemd.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/ripemd.h rename to src/openssl/openssl-1.1.1w/include/openssl/ripemd.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/rsa.h b/src/openssl/openssl-1.1.1w/include/openssl/rsa.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/rsa.h rename to src/openssl/openssl-1.1.1w/include/openssl/rsa.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/rsaerr.h b/src/openssl/openssl-1.1.1w/include/openssl/rsaerr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/rsaerr.h rename to src/openssl/openssl-1.1.1w/include/openssl/rsaerr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/safestack.h b/src/openssl/openssl-1.1.1w/include/openssl/safestack.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/safestack.h rename to src/openssl/openssl-1.1.1w/include/openssl/safestack.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/seed.h b/src/openssl/openssl-1.1.1w/include/openssl/seed.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/seed.h rename to src/openssl/openssl-1.1.1w/include/openssl/seed.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/sha.h b/src/openssl/openssl-1.1.1w/include/openssl/sha.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/sha.h rename to src/openssl/openssl-1.1.1w/include/openssl/sha.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/srp.h b/src/openssl/openssl-1.1.1w/include/openssl/srp.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/srp.h rename to src/openssl/openssl-1.1.1w/include/openssl/srp.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/srtp.h b/src/openssl/openssl-1.1.1w/include/openssl/srtp.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/srtp.h rename to src/openssl/openssl-1.1.1w/include/openssl/srtp.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/ssl.h b/src/openssl/openssl-1.1.1w/include/openssl/ssl.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/ssl.h rename to src/openssl/openssl-1.1.1w/include/openssl/ssl.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/ssl2.h b/src/openssl/openssl-1.1.1w/include/openssl/ssl2.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/ssl2.h rename to src/openssl/openssl-1.1.1w/include/openssl/ssl2.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/ssl3.h b/src/openssl/openssl-1.1.1w/include/openssl/ssl3.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/ssl3.h rename to src/openssl/openssl-1.1.1w/include/openssl/ssl3.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/sslerr.h b/src/openssl/openssl-1.1.1w/include/openssl/sslerr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/sslerr.h rename to src/openssl/openssl-1.1.1w/include/openssl/sslerr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/stack.h b/src/openssl/openssl-1.1.1w/include/openssl/stack.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/stack.h rename to src/openssl/openssl-1.1.1w/include/openssl/stack.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/store.h b/src/openssl/openssl-1.1.1w/include/openssl/store.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/store.h rename to src/openssl/openssl-1.1.1w/include/openssl/store.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/storeerr.h b/src/openssl/openssl-1.1.1w/include/openssl/storeerr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/storeerr.h rename to src/openssl/openssl-1.1.1w/include/openssl/storeerr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/symhacks.h b/src/openssl/openssl-1.1.1w/include/openssl/symhacks.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/symhacks.h rename to src/openssl/openssl-1.1.1w/include/openssl/symhacks.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/tls1.h b/src/openssl/openssl-1.1.1w/include/openssl/tls1.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/tls1.h rename to src/openssl/openssl-1.1.1w/include/openssl/tls1.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/ts.h b/src/openssl/openssl-1.1.1w/include/openssl/ts.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/ts.h rename to src/openssl/openssl-1.1.1w/include/openssl/ts.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/tserr.h b/src/openssl/openssl-1.1.1w/include/openssl/tserr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/tserr.h rename to src/openssl/openssl-1.1.1w/include/openssl/tserr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/txt_db.h b/src/openssl/openssl-1.1.1w/include/openssl/txt_db.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/txt_db.h rename to src/openssl/openssl-1.1.1w/include/openssl/txt_db.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/ui.h b/src/openssl/openssl-1.1.1w/include/openssl/ui.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/ui.h rename to src/openssl/openssl-1.1.1w/include/openssl/ui.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/uierr.h b/src/openssl/openssl-1.1.1w/include/openssl/uierr.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/uierr.h rename to src/openssl/openssl-1.1.1w/include/openssl/uierr.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/whrlpool.h b/src/openssl/openssl-1.1.1w/include/openssl/whrlpool.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/whrlpool.h rename to src/openssl/openssl-1.1.1w/include/openssl/whrlpool.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/x509.h b/src/openssl/openssl-1.1.1w/include/openssl/x509.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/x509.h rename to src/openssl/openssl-1.1.1w/include/openssl/x509.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/x509_vfy.h b/src/openssl/openssl-1.1.1w/include/openssl/x509_vfy.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/x509_vfy.h rename to src/openssl/openssl-1.1.1w/include/openssl/x509_vfy.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/x509err.h b/src/openssl/openssl-1.1.1w/include/openssl/x509err.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/x509err.h rename to src/openssl/openssl-1.1.1w/include/openssl/x509err.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/x509v3.h b/src/openssl/openssl-1.1.1w/include/openssl/x509v3.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/x509v3.h rename to src/openssl/openssl-1.1.1w/include/openssl/x509v3.h diff --git a/src/openssl/openssl-1.1.1t/include/openssl/x509v3err.h b/src/openssl/openssl-1.1.1w/include/openssl/x509v3err.h similarity index 100% rename from src/openssl/openssl-1.1.1t/include/openssl/x509v3err.h rename to src/openssl/openssl-1.1.1w/include/openssl/x509v3err.h diff --git a/src/openssl/openssl-1.1.1t/ms/applink.c b/src/openssl/openssl-1.1.1w/ms/applink.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ms/applink.c rename to src/openssl/openssl-1.1.1w/ms/applink.c diff --git a/src/openssl/openssl-1.1.1t/ms/cmp.pl b/src/openssl/openssl-1.1.1w/ms/cmp.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/ms/cmp.pl rename to src/openssl/openssl-1.1.1w/ms/cmp.pl diff --git a/src/openssl/openssl-1.1.1t/ms/uplink-common.pl b/src/openssl/openssl-1.1.1w/ms/uplink-common.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/ms/uplink-common.pl rename to src/openssl/openssl-1.1.1w/ms/uplink-common.pl diff --git a/src/openssl/openssl-1.1.1t/ms/uplink-ia64.pl b/src/openssl/openssl-1.1.1w/ms/uplink-ia64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/ms/uplink-ia64.pl rename to src/openssl/openssl-1.1.1w/ms/uplink-ia64.pl diff --git a/src/openssl/openssl-1.1.1t/ms/uplink-x86.pl b/src/openssl/openssl-1.1.1w/ms/uplink-x86.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/ms/uplink-x86.pl rename to src/openssl/openssl-1.1.1w/ms/uplink-x86.pl diff --git a/src/openssl/openssl-1.1.1t/ms/uplink-x86_64.pl b/src/openssl/openssl-1.1.1w/ms/uplink-x86_64.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/ms/uplink-x86_64.pl rename to src/openssl/openssl-1.1.1w/ms/uplink-x86_64.pl diff --git a/src/openssl/openssl-1.1.1t/ms/uplink.c b/src/openssl/openssl-1.1.1w/ms/uplink.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ms/uplink.c rename to src/openssl/openssl-1.1.1w/ms/uplink.c diff --git a/src/openssl/openssl-1.1.1t/ms/uplink.h b/src/openssl/openssl-1.1.1w/ms/uplink.h similarity index 100% rename from src/openssl/openssl-1.1.1t/ms/uplink.h rename to src/openssl/openssl-1.1.1w/ms/uplink.h diff --git a/src/openssl/openssl-1.1.1t/os-dep/haiku.h b/src/openssl/openssl-1.1.1w/os-dep/haiku.h similarity index 100% rename from src/openssl/openssl-1.1.1t/os-dep/haiku.h rename to src/openssl/openssl-1.1.1w/os-dep/haiku.h diff --git a/src/openssl/openssl-1.1.1t/ssl/bio_ssl.c b/src/openssl/openssl-1.1.1w/ssl/bio_ssl.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/bio_ssl.c rename to src/openssl/openssl-1.1.1w/ssl/bio_ssl.c diff --git a/src/openssl/openssl-1.1.1t/ssl/build.info b/src/openssl/openssl-1.1.1w/ssl/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/build.info rename to src/openssl/openssl-1.1.1w/ssl/build.info diff --git a/src/openssl/openssl-1.1.1t/ssl/d1_lib.c b/src/openssl/openssl-1.1.1w/ssl/d1_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/d1_lib.c rename to src/openssl/openssl-1.1.1w/ssl/d1_lib.c diff --git a/src/openssl/openssl-1.1.1t/ssl/d1_msg.c b/src/openssl/openssl-1.1.1w/ssl/d1_msg.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/d1_msg.c rename to src/openssl/openssl-1.1.1w/ssl/d1_msg.c diff --git a/src/openssl/openssl-1.1.1t/ssl/d1_srtp.c b/src/openssl/openssl-1.1.1w/ssl/d1_srtp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/d1_srtp.c rename to src/openssl/openssl-1.1.1w/ssl/d1_srtp.c diff --git a/src/openssl/openssl-1.1.1t/ssl/methods.c b/src/openssl/openssl-1.1.1w/ssl/methods.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/methods.c rename to src/openssl/openssl-1.1.1w/ssl/methods.c diff --git a/src/openssl/openssl-1.1.1t/ssl/packet.c b/src/openssl/openssl-1.1.1w/ssl/packet.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/packet.c rename to src/openssl/openssl-1.1.1w/ssl/packet.c diff --git a/src/openssl/openssl-1.1.1t/ssl/packet_local.h b/src/openssl/openssl-1.1.1w/ssl/packet_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/packet_local.h rename to src/openssl/openssl-1.1.1w/ssl/packet_local.h diff --git a/src/openssl/openssl-1.1.1t/ssl/pqueue.c b/src/openssl/openssl-1.1.1w/ssl/pqueue.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/pqueue.c rename to src/openssl/openssl-1.1.1w/ssl/pqueue.c diff --git a/src/openssl/openssl-1.1.1t/ssl/record/README b/src/openssl/openssl-1.1.1w/ssl/record/README similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/record/README rename to src/openssl/openssl-1.1.1w/ssl/record/README diff --git a/src/openssl/openssl-1.1.1t/ssl/record/dtls1_bitmap.c b/src/openssl/openssl-1.1.1w/ssl/record/dtls1_bitmap.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/record/dtls1_bitmap.c rename to src/openssl/openssl-1.1.1w/ssl/record/dtls1_bitmap.c diff --git a/src/openssl/openssl-1.1.1t/ssl/record/rec_layer_d1.c b/src/openssl/openssl-1.1.1w/ssl/record/rec_layer_d1.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/record/rec_layer_d1.c rename to src/openssl/openssl-1.1.1w/ssl/record/rec_layer_d1.c diff --git a/src/openssl/openssl-1.1.1t/ssl/record/rec_layer_s3.c b/src/openssl/openssl-1.1.1w/ssl/record/rec_layer_s3.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/record/rec_layer_s3.c rename to src/openssl/openssl-1.1.1w/ssl/record/rec_layer_s3.c diff --git a/src/openssl/openssl-1.1.1t/ssl/record/record.h b/src/openssl/openssl-1.1.1w/ssl/record/record.h similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/record/record.h rename to src/openssl/openssl-1.1.1w/ssl/record/record.h diff --git a/src/openssl/openssl-1.1.1t/ssl/record/record_local.h b/src/openssl/openssl-1.1.1w/ssl/record/record_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/record/record_local.h rename to src/openssl/openssl-1.1.1w/ssl/record/record_local.h diff --git a/src/openssl/openssl-1.1.1t/ssl/record/ssl3_buffer.c b/src/openssl/openssl-1.1.1w/ssl/record/ssl3_buffer.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/record/ssl3_buffer.c rename to src/openssl/openssl-1.1.1w/ssl/record/ssl3_buffer.c diff --git a/src/openssl/openssl-1.1.1t/ssl/record/ssl3_record.c b/src/openssl/openssl-1.1.1w/ssl/record/ssl3_record.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/record/ssl3_record.c rename to src/openssl/openssl-1.1.1w/ssl/record/ssl3_record.c diff --git a/src/openssl/openssl-1.1.1t/ssl/record/ssl3_record_tls13.c b/src/openssl/openssl-1.1.1w/ssl/record/ssl3_record_tls13.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/record/ssl3_record_tls13.c rename to src/openssl/openssl-1.1.1w/ssl/record/ssl3_record_tls13.c diff --git a/src/openssl/openssl-1.1.1t/ssl/s3_cbc.c b/src/openssl/openssl-1.1.1w/ssl/s3_cbc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/s3_cbc.c rename to src/openssl/openssl-1.1.1w/ssl/s3_cbc.c diff --git a/src/openssl/openssl-1.1.1t/ssl/s3_enc.c b/src/openssl/openssl-1.1.1w/ssl/s3_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/s3_enc.c rename to src/openssl/openssl-1.1.1w/ssl/s3_enc.c diff --git a/src/openssl/openssl-1.1.1t/ssl/s3_lib.c b/src/openssl/openssl-1.1.1w/ssl/s3_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/s3_lib.c rename to src/openssl/openssl-1.1.1w/ssl/s3_lib.c diff --git a/src/openssl/openssl-1.1.1t/ssl/s3_msg.c b/src/openssl/openssl-1.1.1w/ssl/s3_msg.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/s3_msg.c rename to src/openssl/openssl-1.1.1w/ssl/s3_msg.c diff --git a/src/openssl/openssl-1.1.1t/ssl/ssl_asn1.c b/src/openssl/openssl-1.1.1w/ssl/ssl_asn1.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/ssl_asn1.c rename to src/openssl/openssl-1.1.1w/ssl/ssl_asn1.c diff --git a/src/openssl/openssl-1.1.1t/ssl/ssl_cert.c b/src/openssl/openssl-1.1.1w/ssl/ssl_cert.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/ssl_cert.c rename to src/openssl/openssl-1.1.1w/ssl/ssl_cert.c diff --git a/src/openssl/openssl-1.1.1t/ssl/ssl_cert_table.h b/src/openssl/openssl-1.1.1w/ssl/ssl_cert_table.h similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/ssl_cert_table.h rename to src/openssl/openssl-1.1.1w/ssl/ssl_cert_table.h diff --git a/src/openssl/openssl-1.1.1t/ssl/ssl_ciph.c b/src/openssl/openssl-1.1.1w/ssl/ssl_ciph.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/ssl_ciph.c rename to src/openssl/openssl-1.1.1w/ssl/ssl_ciph.c diff --git a/src/openssl/openssl-1.1.1t/ssl/ssl_conf.c b/src/openssl/openssl-1.1.1w/ssl/ssl_conf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/ssl_conf.c rename to src/openssl/openssl-1.1.1w/ssl/ssl_conf.c diff --git a/src/openssl/openssl-1.1.1t/ssl/ssl_err.c b/src/openssl/openssl-1.1.1w/ssl/ssl_err.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/ssl_err.c rename to src/openssl/openssl-1.1.1w/ssl/ssl_err.c diff --git a/src/openssl/openssl-1.1.1t/ssl/ssl_init.c b/src/openssl/openssl-1.1.1w/ssl/ssl_init.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/ssl_init.c rename to src/openssl/openssl-1.1.1w/ssl/ssl_init.c diff --git a/src/openssl/openssl-1.1.1t/ssl/ssl_lib.c b/src/openssl/openssl-1.1.1w/ssl/ssl_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/ssl_lib.c rename to src/openssl/openssl-1.1.1w/ssl/ssl_lib.c diff --git a/src/openssl/openssl-1.1.1t/ssl/ssl_local.h b/src/openssl/openssl-1.1.1w/ssl/ssl_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/ssl_local.h rename to src/openssl/openssl-1.1.1w/ssl/ssl_local.h diff --git a/src/openssl/openssl-1.1.1t/ssl/ssl_mcnf.c b/src/openssl/openssl-1.1.1w/ssl/ssl_mcnf.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/ssl_mcnf.c rename to src/openssl/openssl-1.1.1w/ssl/ssl_mcnf.c diff --git a/src/openssl/openssl-1.1.1t/ssl/ssl_rsa.c b/src/openssl/openssl-1.1.1w/ssl/ssl_rsa.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/ssl_rsa.c rename to src/openssl/openssl-1.1.1w/ssl/ssl_rsa.c diff --git a/src/openssl/openssl-1.1.1t/ssl/ssl_sess.c b/src/openssl/openssl-1.1.1w/ssl/ssl_sess.c similarity index 99% rename from src/openssl/openssl-1.1.1t/ssl/ssl_sess.c rename to src/openssl/openssl-1.1.1w/ssl/ssl_sess.c index cda6b7cc5..68d1737ac 100644 --- a/src/openssl/openssl-1.1.1t/ssl/ssl_sess.c +++ b/src/openssl/openssl-1.1.1w/ssl/ssl_sess.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * Copyright 2005 Nokia. All rights reserved. * * Licensed under the OpenSSL license (the "License"). You may not use @@ -139,8 +139,11 @@ SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket) dest->references = 1; dest->lock = CRYPTO_THREAD_lock_new(); - if (dest->lock == NULL) + if (dest->lock == NULL) { + OPENSSL_free(dest); + dest = NULL; goto err; + } if (!CRYPTO_new_ex_data(CRYPTO_EX_INDEX_SSL_SESSION, dest, &dest->ex_data)) goto err; diff --git a/src/openssl/openssl-1.1.1t/ssl/ssl_stat.c b/src/openssl/openssl-1.1.1w/ssl/ssl_stat.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/ssl_stat.c rename to src/openssl/openssl-1.1.1w/ssl/ssl_stat.c diff --git a/src/openssl/openssl-1.1.1t/ssl/ssl_txt.c b/src/openssl/openssl-1.1.1w/ssl/ssl_txt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/ssl_txt.c rename to src/openssl/openssl-1.1.1w/ssl/ssl_txt.c diff --git a/src/openssl/openssl-1.1.1t/ssl/ssl_utst.c b/src/openssl/openssl-1.1.1w/ssl/ssl_utst.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/ssl_utst.c rename to src/openssl/openssl-1.1.1w/ssl/ssl_utst.c diff --git a/src/openssl/openssl-1.1.1t/ssl/statem/README b/src/openssl/openssl-1.1.1w/ssl/statem/README similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/statem/README rename to src/openssl/openssl-1.1.1w/ssl/statem/README diff --git a/src/openssl/openssl-1.1.1t/ssl/statem/extensions.c b/src/openssl/openssl-1.1.1w/ssl/statem/extensions.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/statem/extensions.c rename to src/openssl/openssl-1.1.1w/ssl/statem/extensions.c diff --git a/src/openssl/openssl-1.1.1t/ssl/statem/extensions_clnt.c b/src/openssl/openssl-1.1.1w/ssl/statem/extensions_clnt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/statem/extensions_clnt.c rename to src/openssl/openssl-1.1.1w/ssl/statem/extensions_clnt.c diff --git a/src/openssl/openssl-1.1.1t/ssl/statem/extensions_cust.c b/src/openssl/openssl-1.1.1w/ssl/statem/extensions_cust.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/statem/extensions_cust.c rename to src/openssl/openssl-1.1.1w/ssl/statem/extensions_cust.c diff --git a/src/openssl/openssl-1.1.1t/ssl/statem/extensions_srvr.c b/src/openssl/openssl-1.1.1w/ssl/statem/extensions_srvr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/statem/extensions_srvr.c rename to src/openssl/openssl-1.1.1w/ssl/statem/extensions_srvr.c diff --git a/src/openssl/openssl-1.1.1t/ssl/statem/statem.c b/src/openssl/openssl-1.1.1w/ssl/statem/statem.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/statem/statem.c rename to src/openssl/openssl-1.1.1w/ssl/statem/statem.c diff --git a/src/openssl/openssl-1.1.1t/ssl/statem/statem.h b/src/openssl/openssl-1.1.1w/ssl/statem/statem.h similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/statem/statem.h rename to src/openssl/openssl-1.1.1w/ssl/statem/statem.h diff --git a/src/openssl/openssl-1.1.1t/ssl/statem/statem_clnt.c b/src/openssl/openssl-1.1.1w/ssl/statem/statem_clnt.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/statem/statem_clnt.c rename to src/openssl/openssl-1.1.1w/ssl/statem/statem_clnt.c diff --git a/src/openssl/openssl-1.1.1t/ssl/statem/statem_dtls.c b/src/openssl/openssl-1.1.1w/ssl/statem/statem_dtls.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/statem/statem_dtls.c rename to src/openssl/openssl-1.1.1w/ssl/statem/statem_dtls.c diff --git a/src/openssl/openssl-1.1.1t/ssl/statem/statem_lib.c b/src/openssl/openssl-1.1.1w/ssl/statem/statem_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/statem/statem_lib.c rename to src/openssl/openssl-1.1.1w/ssl/statem/statem_lib.c diff --git a/src/openssl/openssl-1.1.1t/ssl/statem/statem_local.h b/src/openssl/openssl-1.1.1w/ssl/statem/statem_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/statem/statem_local.h rename to src/openssl/openssl-1.1.1w/ssl/statem/statem_local.h diff --git a/src/openssl/openssl-1.1.1t/ssl/statem/statem_srvr.c b/src/openssl/openssl-1.1.1w/ssl/statem/statem_srvr.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/statem/statem_srvr.c rename to src/openssl/openssl-1.1.1w/ssl/statem/statem_srvr.c diff --git a/src/openssl/openssl-1.1.1t/ssl/t1_enc.c b/src/openssl/openssl-1.1.1w/ssl/t1_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/t1_enc.c rename to src/openssl/openssl-1.1.1w/ssl/t1_enc.c diff --git a/src/openssl/openssl-1.1.1t/ssl/t1_lib.c b/src/openssl/openssl-1.1.1w/ssl/t1_lib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/t1_lib.c rename to src/openssl/openssl-1.1.1w/ssl/t1_lib.c diff --git a/src/openssl/openssl-1.1.1t/ssl/t1_trce.c b/src/openssl/openssl-1.1.1w/ssl/t1_trce.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/t1_trce.c rename to src/openssl/openssl-1.1.1w/ssl/t1_trce.c diff --git a/src/openssl/openssl-1.1.1t/ssl/tls13_enc.c b/src/openssl/openssl-1.1.1w/ssl/tls13_enc.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/tls13_enc.c rename to src/openssl/openssl-1.1.1w/ssl/tls13_enc.c diff --git a/src/openssl/openssl-1.1.1t/ssl/tls_srp.c b/src/openssl/openssl-1.1.1w/ssl/tls_srp.c similarity index 100% rename from src/openssl/openssl-1.1.1t/ssl/tls_srp.c rename to src/openssl/openssl-1.1.1w/ssl/tls_srp.c diff --git a/src/openssl/openssl-1.1.1t/test/CAss.cnf b/src/openssl/openssl-1.1.1w/test/CAss.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/CAss.cnf rename to src/openssl/openssl-1.1.1w/test/CAss.cnf diff --git a/src/openssl/openssl-1.1.1t/test/CAssdh.cnf b/src/openssl/openssl-1.1.1w/test/CAssdh.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/CAssdh.cnf rename to src/openssl/openssl-1.1.1w/test/CAssdh.cnf diff --git a/src/openssl/openssl-1.1.1t/test/CAssdsa.cnf b/src/openssl/openssl-1.1.1w/test/CAssdsa.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/CAssdsa.cnf rename to src/openssl/openssl-1.1.1w/test/CAssdsa.cnf diff --git a/src/openssl/openssl-1.1.1t/test/CAssrsa.cnf b/src/openssl/openssl-1.1.1w/test/CAssrsa.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/CAssrsa.cnf rename to src/openssl/openssl-1.1.1w/test/CAssrsa.cnf diff --git a/src/openssl/openssl-1.1.1t/test/CAtsa.cnf b/src/openssl/openssl-1.1.1w/test/CAtsa.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/CAtsa.cnf rename to src/openssl/openssl-1.1.1w/test/CAtsa.cnf diff --git a/src/openssl/openssl-1.1.1t/test/P1ss.cnf b/src/openssl/openssl-1.1.1w/test/P1ss.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/P1ss.cnf rename to src/openssl/openssl-1.1.1w/test/P1ss.cnf diff --git a/src/openssl/openssl-1.1.1t/test/P2ss.cnf b/src/openssl/openssl-1.1.1w/test/P2ss.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/P2ss.cnf rename to src/openssl/openssl-1.1.1w/test/P2ss.cnf diff --git a/src/openssl/openssl-1.1.1t/test/README b/src/openssl/openssl-1.1.1w/test/README similarity index 100% rename from src/openssl/openssl-1.1.1t/test/README rename to src/openssl/openssl-1.1.1w/test/README diff --git a/src/openssl/openssl-1.1.1t/test/README.external b/src/openssl/openssl-1.1.1w/test/README.external similarity index 100% rename from src/openssl/openssl-1.1.1t/test/README.external rename to src/openssl/openssl-1.1.1w/test/README.external diff --git a/src/openssl/openssl-1.1.1t/test/README.ssltest.md b/src/openssl/openssl-1.1.1w/test/README.ssltest.md similarity index 100% rename from src/openssl/openssl-1.1.1t/test/README.ssltest.md rename to src/openssl/openssl-1.1.1w/test/README.ssltest.md diff --git a/src/openssl/openssl-1.1.1t/test/Sssdsa.cnf b/src/openssl/openssl-1.1.1w/test/Sssdsa.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/Sssdsa.cnf rename to src/openssl/openssl-1.1.1w/test/Sssdsa.cnf diff --git a/src/openssl/openssl-1.1.1t/test/Sssrsa.cnf b/src/openssl/openssl-1.1.1w/test/Sssrsa.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/Sssrsa.cnf rename to src/openssl/openssl-1.1.1w/test/Sssrsa.cnf diff --git a/src/openssl/openssl-1.1.1t/test/Uss.cnf b/src/openssl/openssl-1.1.1w/test/Uss.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/Uss.cnf rename to src/openssl/openssl-1.1.1w/test/Uss.cnf diff --git a/src/openssl/openssl-1.1.1t/test/aborttest.c b/src/openssl/openssl-1.1.1w/test/aborttest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/aborttest.c rename to src/openssl/openssl-1.1.1w/test/aborttest.c diff --git a/src/openssl/openssl-1.1.1t/test/afalgtest.c b/src/openssl/openssl-1.1.1w/test/afalgtest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/afalgtest.c rename to src/openssl/openssl-1.1.1w/test/afalgtest.c diff --git a/src/openssl/openssl-1.1.1t/test/asn1_decode_test.c b/src/openssl/openssl-1.1.1w/test/asn1_decode_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/asn1_decode_test.c rename to src/openssl/openssl-1.1.1w/test/asn1_decode_test.c diff --git a/src/openssl/openssl-1.1.1t/test/asn1_encode_test.c b/src/openssl/openssl-1.1.1w/test/asn1_encode_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/asn1_encode_test.c rename to src/openssl/openssl-1.1.1w/test/asn1_encode_test.c diff --git a/src/openssl/openssl-1.1.1t/test/asn1_internal_test.c b/src/openssl/openssl-1.1.1w/test/asn1_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/asn1_internal_test.c rename to src/openssl/openssl-1.1.1w/test/asn1_internal_test.c diff --git a/src/openssl/openssl-1.1.1t/test/asn1_string_table_test.c b/src/openssl/openssl-1.1.1w/test/asn1_string_table_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/asn1_string_table_test.c rename to src/openssl/openssl-1.1.1w/test/asn1_string_table_test.c diff --git a/src/openssl/openssl-1.1.1t/test/asn1_time_test.c b/src/openssl/openssl-1.1.1w/test/asn1_time_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/asn1_time_test.c rename to src/openssl/openssl-1.1.1w/test/asn1_time_test.c diff --git a/src/openssl/openssl-1.1.1t/test/asynciotest.c b/src/openssl/openssl-1.1.1w/test/asynciotest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/asynciotest.c rename to src/openssl/openssl-1.1.1w/test/asynciotest.c diff --git a/src/openssl/openssl-1.1.1t/test/asynctest.c b/src/openssl/openssl-1.1.1w/test/asynctest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/asynctest.c rename to src/openssl/openssl-1.1.1w/test/asynctest.c diff --git a/src/openssl/openssl-1.1.1t/test/bad_dtls_test.c b/src/openssl/openssl-1.1.1w/test/bad_dtls_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/bad_dtls_test.c rename to src/openssl/openssl-1.1.1w/test/bad_dtls_test.c diff --git a/src/openssl/openssl-1.1.1t/test/bftest.c b/src/openssl/openssl-1.1.1w/test/bftest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/bftest.c rename to src/openssl/openssl-1.1.1w/test/bftest.c diff --git a/src/openssl/openssl-1.1.1t/test/bio_callback_test.c b/src/openssl/openssl-1.1.1w/test/bio_callback_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/bio_callback_test.c rename to src/openssl/openssl-1.1.1w/test/bio_callback_test.c diff --git a/src/openssl/openssl-1.1.1t/test/bio_enc_test.c b/src/openssl/openssl-1.1.1w/test/bio_enc_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/bio_enc_test.c rename to src/openssl/openssl-1.1.1w/test/bio_enc_test.c diff --git a/src/openssl/openssl-1.1.1t/test/bio_memleak_test.c b/src/openssl/openssl-1.1.1w/test/bio_memleak_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/bio_memleak_test.c rename to src/openssl/openssl-1.1.1w/test/bio_memleak_test.c diff --git a/src/openssl/openssl-1.1.1t/test/bioprinttest.c b/src/openssl/openssl-1.1.1w/test/bioprinttest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/bioprinttest.c rename to src/openssl/openssl-1.1.1w/test/bioprinttest.c diff --git a/src/openssl/openssl-1.1.1t/test/bntest.c b/src/openssl/openssl-1.1.1w/test/bntest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/bntest.c rename to src/openssl/openssl-1.1.1w/test/bntest.c diff --git a/src/openssl/openssl-1.1.1t/test/bntests.pl b/src/openssl/openssl-1.1.1w/test/bntests.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/test/bntests.pl rename to src/openssl/openssl-1.1.1w/test/bntests.pl diff --git a/src/openssl/openssl-1.1.1t/test/build.info b/src/openssl/openssl-1.1.1w/test/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/test/build.info rename to src/openssl/openssl-1.1.1w/test/build.info diff --git a/src/openssl/openssl-1.1.1t/test/casttest.c b/src/openssl/openssl-1.1.1w/test/casttest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/casttest.c rename to src/openssl/openssl-1.1.1w/test/casttest.c diff --git a/src/openssl/openssl-1.1.1t/test/certs/alt1-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/alt1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/alt1-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/alt1-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/alt1-key.pem b/src/openssl/openssl-1.1.1w/test/certs/alt1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/alt1-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/alt1-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/alt2-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/alt2-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/alt2-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/alt2-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/alt2-key.pem b/src/openssl/openssl-1.1.1w/test/certs/alt2-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/alt2-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/alt2-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/alt3-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/alt3-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/alt3-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/alt3-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/alt3-key.pem b/src/openssl/openssl-1.1.1w/test/certs/alt3-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/alt3-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/alt3-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/bad-pc3-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/bad-pc3-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/bad-pc3-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/bad-pc3-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/bad-pc3-key.pem b/src/openssl/openssl-1.1.1w/test/certs/bad-pc3-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/bad-pc3-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/bad-pc3-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/bad-pc4-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/bad-pc4-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/bad-pc4-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/bad-pc4-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/bad-pc4-key.pem b/src/openssl/openssl-1.1.1w/test/certs/bad-pc4-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/bad-pc4-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/bad-pc4-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/bad-pc6-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/bad-pc6-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/bad-pc6-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/bad-pc6-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/bad-pc6-key.pem b/src/openssl/openssl-1.1.1w/test/certs/bad-pc6-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/bad-pc6-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/bad-pc6-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/bad.key b/src/openssl/openssl-1.1.1w/test/certs/bad.key similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/bad.key rename to src/openssl/openssl-1.1.1w/test/certs/bad.key diff --git a/src/openssl/openssl-1.1.1t/test/certs/bad.pem b/src/openssl/openssl-1.1.1w/test/certs/bad.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/bad.pem rename to src/openssl/openssl-1.1.1w/test/certs/bad.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt1-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt1-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt1-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt1-key.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt1-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt1-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt10-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt10-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt10-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt10-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt10-key.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt10-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt10-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt10-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt2-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt2-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt2-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt2-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt2-key.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt2-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt2-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt2-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt3-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt3-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt3-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt3-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt3-key.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt3-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt3-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt3-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt4-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt4-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt4-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt4-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt4-key.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt4-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt4-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt4-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt5-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt5-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt5-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt5-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt5-key.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt5-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt5-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt5-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt6-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt6-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt6-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt6-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt6-key.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt6-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt6-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt6-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt7-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt7-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt7-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt7-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt7-key.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt7-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt7-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt7-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt8-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt8-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt8-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt8-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt8-key.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt8-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt8-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt8-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt9-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt9-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt9-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt9-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badalt9-key.pem b/src/openssl/openssl-1.1.1w/test/certs/badalt9-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badalt9-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/badalt9-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badcn1-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/badcn1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badcn1-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/badcn1-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/badcn1-key.pem b/src/openssl/openssl-1.1.1w/test/certs/badcn1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/badcn1-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/badcn1-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca+anyEKU.pem b/src/openssl/openssl-1.1.1w/test/certs/ca+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca+anyEKU.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca+clientAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/ca+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca+clientAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca+serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/ca+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca+serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-anyEKU.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-anyEKU.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-cert-768.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-cert-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-cert-768.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-cert-768.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-cert-768i.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-cert-768i.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-cert-768i.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-cert-768i.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-cert-ec-explicit.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-cert-ec-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-cert-ec-explicit.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-cert-ec-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-cert-ec-named.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-cert-ec-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-cert-ec-named.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-cert-ec-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-cert-md5-any.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-cert-md5-any.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-cert-md5-any.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-cert-md5-any.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-cert-md5.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-cert-md5.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-cert-md5.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-cert-md5.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-cert2.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-cert2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-cert2.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-cert2.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-clientAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-clientAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-expired.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-expired.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-expired.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-expired.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-key-768.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-key-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-key-768.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-key-768.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-key-ec-explicit.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-key-ec-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-key-ec-explicit.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-key-ec-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-key-ec-named.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-key-ec-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-key-ec-named.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-key-ec-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-key.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-key2.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-key2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-key2.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-key2.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-name2.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-name2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-name2.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-name2.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-nonbc.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-nonbc.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-nonbc.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-nonbc.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-nonca.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-nonca.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-nonca.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-nonca.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ca-pol-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-pol-cert.pem new file mode 100644 index 000000000..244af3292 --- /dev/null +++ b/src/openssl/openssl-1.1.1w/test/certs/ca-pol-cert.pem @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDFzCCAf+gAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdSb290 +IENBMCAXDTIzMDMwODEyMjMxNloYDzIxMjMwMzA5MTIyMzE2WjANMQswCQYDVQQD +DAJDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJadpD0ASxxfxsvd +j9IxsogVzMSGLFziaYuE9KejU9+R479RifvwfBANO62sNWJ19X//9G5UjwWmkiOz +n1k50DkYsBBA3mJzik6wjt/c58lBIlSEgAgpvDU8ht8w3t20JP9+YqXAeugqFj/W +l9rFQtsvaWSRywjXVlp5fxuEQelNnXcJEKhsKTNExsBUZebo4/J1BWpklWzA9P0l +YW5INvDAAwcF1nzlEf0Y6Eot03IMNyg2MTE4hehxjdgCSci8GYnFirE/ojXqqpAc +ZGh7r2dqWgZUD1Dh+bT2vjrUzj8eTH3GdzI+oljt29102JIUaqj3yzRYkah8FLF9 +CLNNsUcCAwEAAaN7MHkwDwYDVR0TAQH/BAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYD +VR0OBBYEFLQRM/HX4l73U54gIhBPhga/H8leMB8GA1UdIwQYMBaAFI71Ja8em2uE +PXyAmslTnE1y96NSMBkGA1UdIAQSMBAwDgYMKwYBBAGBgVy8+0cBMA0GCSqGSIb3 +DQEBCwUAA4IBAQBbE+MO9mewWIUY2kt85yhl0oZtvVxbn9K2Hty59ItwJGRNfzx7 +Ge7KgawkvNzMOXmj6qf8TpbJnf41ZLWdRyVZBVyIwrAKIVw1VxfGh8aEifHKN97H +unZkBPcUkAhUJSiC1BOD/euaMYqOi8QwiI702Q6q1NBY1/UKnV/ZIBLecnqfj9vZ +7T0wKxrwGYBztP4pNcxCmBoD9Dg+Dx3ZElo0WXyO4SOh/BgrsKJHKyhbuTpjrI/g +DhcINRp6+lIzuFBtJ67+YXnAEspb3lKMk0YL/LXrCNF2scdmNfOPwHi+OKBqt69C +9FJyWFEMxx2qm/ENE9sbOswgJRnKkaAqHBHx +-----END CERTIFICATE----- diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-pss-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-pss-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-pss-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-pss-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-pss-key.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-pss-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-pss-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-pss-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-root2.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-root2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-root2.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-root2.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ca-serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/ca-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ca-serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/ca-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/cca+anyEKU.pem b/src/openssl/openssl-1.1.1w/test/certs/cca+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/cca+anyEKU.pem rename to src/openssl/openssl-1.1.1w/test/certs/cca+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/cca+clientAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/cca+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/cca+clientAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/cca+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/cca+serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/cca+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/cca+serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/cca+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/cca-anyEKU.pem b/src/openssl/openssl-1.1.1w/test/certs/cca-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/cca-anyEKU.pem rename to src/openssl/openssl-1.1.1w/test/certs/cca-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/cca-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/cca-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/cca-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/cca-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/cca-clientAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/cca-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/cca-clientAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/cca-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/cca-serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/cca-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/cca-serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/cca-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/client-ed25519-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/client-ed25519-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/client-ed25519-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/client-ed25519-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/client-ed25519-key.pem b/src/openssl/openssl-1.1.1w/test/certs/client-ed25519-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/client-ed25519-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/client-ed25519-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/client-ed448-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/client-ed448-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/client-ed448-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/client-ed448-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/client-ed448-key.pem b/src/openssl/openssl-1.1.1w/test/certs/client-ed448-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/client-ed448-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/client-ed448-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/croot+anyEKU.pem b/src/openssl/openssl-1.1.1w/test/certs/croot+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/croot+anyEKU.pem rename to src/openssl/openssl-1.1.1w/test/certs/croot+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/croot+clientAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/croot+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/croot+clientAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/croot+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/croot+serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/croot+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/croot+serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/croot+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/croot-anyEKU.pem b/src/openssl/openssl-1.1.1w/test/certs/croot-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/croot-anyEKU.pem rename to src/openssl/openssl-1.1.1w/test/certs/croot-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/croot-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/croot-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/croot-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/croot-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/croot-clientAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/croot-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/croot-clientAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/croot-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/croot-serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/croot-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/croot-serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/croot-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/cross-key.pem b/src/openssl/openssl-1.1.1w/test/certs/cross-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/cross-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/cross-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/cross-root.pem b/src/openssl/openssl-1.1.1w/test/certs/cross-root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/cross-root.pem rename to src/openssl/openssl-1.1.1w/test/certs/cross-root.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/cyrillic.msb b/src/openssl/openssl-1.1.1w/test/certs/cyrillic.msb similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/cyrillic.msb rename to src/openssl/openssl-1.1.1w/test/certs/cyrillic.msb diff --git a/src/openssl/openssl-1.1.1t/test/certs/cyrillic.pem b/src/openssl/openssl-1.1.1w/test/certs/cyrillic.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/cyrillic.pem rename to src/openssl/openssl-1.1.1w/test/certs/cyrillic.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/cyrillic.utf8 b/src/openssl/openssl-1.1.1w/test/certs/cyrillic.utf8 similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/cyrillic.utf8 rename to src/openssl/openssl-1.1.1w/test/certs/cyrillic.utf8 diff --git a/src/openssl/openssl-1.1.1t/test/certs/cyrillic_crl.pem b/src/openssl/openssl-1.1.1w/test/certs/cyrillic_crl.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/cyrillic_crl.pem rename to src/openssl/openssl-1.1.1w/test/certs/cyrillic_crl.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/cyrillic_crl.utf8 b/src/openssl/openssl-1.1.1w/test/certs/cyrillic_crl.utf8 similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/cyrillic_crl.utf8 rename to src/openssl/openssl-1.1.1w/test/certs/cyrillic_crl.utf8 diff --git a/src/openssl/openssl-1.1.1t/test/certs/dhp2048.pem b/src/openssl/openssl-1.1.1w/test/certs/dhp2048.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/dhp2048.pem rename to src/openssl/openssl-1.1.1w/test/certs/dhp2048.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee+clientAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/ee+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee+clientAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee+serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/ee+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee+serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-cert-768.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-cert-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-cert-768.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-cert-768.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-cert-768i.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-cert-768i.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-cert-768i.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-cert-768i.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-cert-ec-explicit.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-cert-ec-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-cert-ec-explicit.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-cert-ec-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-cert-ec-named-explicit.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-cert-ec-named-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-cert-ec-named-explicit.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-cert-ec-named-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-cert-ec-named-named.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-cert-ec-named-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-cert-ec-named-named.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-cert-ec-named-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-cert-md5.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-cert-md5.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-cert-md5.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-cert-md5.pem diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-cert-policies-bad.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-cert-policies-bad.pem new file mode 100644 index 000000000..0fcd6372b --- /dev/null +++ b/src/openssl/openssl-1.1.1w/test/certs/ee-cert-policies-bad.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDTTCCAjWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg +Fw0yMzAzMDgxMjIzMzJaGA8yMTIzMDMwOTEyMjMzMlowGTEXMBUGA1UEAwwOc2Vy +dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY +YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT +5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l +Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1 +U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5 +ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn +iIQPYf55NB9KiR+3AgMBAAGjgakwgaYwHQYDVR0OBBYEFOeb4iqtimw6y3ZR5Y4H +mCKX4XOiMB8GA1UdIwQYMBaAFLQRM/HX4l73U54gIhBPhga/H8leMAkGA1UdEwQC +MAAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGQYDVR0RBBIwEIIOc2VydmVyLmV4YW1w +bGUwKQYDVR0gBCIwIDAOBgwrBgEEAYGBXLz7RwEwDgYMKwYBBAGBgVy8+0cBMA0G +CSqGSIb3DQEBCwUAA4IBAQArwtwNO++7kStcJeMg3ekz2D/m/8UEjTA1rknBjQiQ +P0FK7tNeRqus9i8PxthNWk+biRayvDzaGIBV7igpDBPfXemDgmW9Adc4MKyiQDfs +YfkHi3xJKvsK2fQmyCs2InVDaKpVAkNFcgAW8nSOhGliqIxLb0EOLoLNwaktou0N +XQHmRzY8S7aIr8K9Qo9y/+MLar+PS4h8l6FkLLkTICiFzE4/wje5S3NckAnadRJa +QpjwM2S6NuA+tYWuOcN//r7BSpW/AZKanYWPzHMrKlqCh+9o7sthPd72+hObG9kx +wSGdzfStNK1I1zM5LiI08WtXCvR6AfLANTo2x1AYhSxF +-----END CERTIFICATE----- diff --git a/src/openssl/openssl-1.1.1w/test/certs/ee-cert-policies.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-cert-policies.pem new file mode 100644 index 000000000..2f06d7433 --- /dev/null +++ b/src/openssl/openssl-1.1.1w/test/certs/ee-cert-policies.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDPTCCAiWgAwIBAgIBAjANBgkqhkiG9w0BAQsFADANMQswCQYDVQQDDAJDQTAg +Fw0yMzAzMDgxMjIzMjNaGA8yMTIzMDMwOTEyMjMyM1owGTEXMBUGA1UEAwwOc2Vy +dmVyLmV4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCo/4lY +YYWu3tssD9Vz++K3qBt6dWAr1H08c3a1rt6TL38kkG3JHPSKOM2fooAWVsu0LLuT +5Rcf/w3GQ/4xNPgo2HXpo7uIgu+jcuJTYgVFTeAxl++qnRDSWA2eBp4yuxsIVl1l +Dz9mjsI2oBH/wFk1/Ukc3RxCMwZ4rgQ4I+XndWfTlK1aqUAfrFkQ9QzBZK1KxMY1 +U7OWaoIbFYvRmavknm+UqtKW5Vf7jJFkijwkFsbSGb6CYBM7YrDtPh2zyvlr3zG5 +ep5LR2inKcc/SuIiJ7TvkGPX79ByST5brbkb1Ctvhmjd1XMSuEPJ3EEPoqNGT4tn +iIQPYf55NB9KiR+3AgMBAAGjgZkwgZYwHQYDVR0OBBYEFOeb4iqtimw6y3ZR5Y4H +mCKX4XOiMB8GA1UdIwQYMBaAFLQRM/HX4l73U54gIhBPhga/H8leMAkGA1UdEwQC +MAAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGQYDVR0RBBIwEIIOc2VydmVyLmV4YW1w +bGUwGQYDVR0gBBIwEDAOBgwrBgEEAYGBXLz7RwEwDQYJKoZIhvcNAQELBQADggEB +AGbWslmAAdMX3+5ChcnFrX+NqDGoyhb3PTgWdtlQB5qtWdIt4rSxN50OcQxFTX0D +QOBabSzR0DDKrgfBe4waL19WsdEvR9GyO4M7ASze/A3IEZue9C9k0n7Vq8zDaAZl +CiR/Zqo9nAOuhKHMgmC/NjUlX7STv5pJVgc4SH8VEKmSRZDmNihaOalUtK5X8/Oa +dawKxsZcaP5IKnOEPPKjtVNJxBu5CXywJHsO0GcoDEnEx1/NLdFoJ6WFw8NuTyDK +NGLq2MHEdyKaigHQlptEs9bXyu9McJjzbx0uXj3BenRULASreccFej0L1RU6jDlk +D3brBn24UISaFRZoB7jsjok= +-----END CERTIFICATE----- diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-cert2.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-cert2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-cert2.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-cert2.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-client-chain.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-client-chain.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-client-chain.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-client-chain.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-client.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-client.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-client.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-client.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-clientAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-clientAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-ecdsa-client-chain.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-ecdsa-client-chain.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-ecdsa-client-chain.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-ecdsa-client-chain.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-ecdsa-key.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-ecdsa-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-ecdsa-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-ecdsa-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-ed25519.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-ed25519.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-ed25519.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-ed25519.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-expired.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-expired.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-expired.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-expired.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-key-768.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-key-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-key-768.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-key-768.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-key-ec-explicit.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-key-ec-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-key-ec-explicit.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-key-ec-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-key-ec-named-explicit.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-key-ec-named-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-key-ec-named-explicit.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-key-ec-named-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-key-ec-named-named.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-key-ec-named-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-key-ec-named-named.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-key-ec-named-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-key.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-name2.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-name2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-name2.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-name2.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-pathlen.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-pathlen.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-pathlen.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-pathlen.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-pss-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-pss-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-pss-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-pss-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-pss-sha1-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-pss-sha1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-pss-sha1-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-pss-sha1-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-pss-sha256-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-pss-sha256-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-pss-sha256-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-pss-sha256-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-self-signed.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-self-signed.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-self-signed.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-self-signed.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ee-serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/ee-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ee-serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/ee-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs1-key.pem b/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs1-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs1.pem b/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs1.pem rename to src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs1.sct b/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1.sct similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs1.sct rename to src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1.sct diff --git a/src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs1_issuer-key.pem b/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1_issuer-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs1_issuer-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1_issuer-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs1_issuer.pem b/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1_issuer.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs1_issuer.pem rename to src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs1_issuer.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs3.pem b/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs3.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs3.pem rename to src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs3.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs3.sct b/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs3.sct similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs3.sct rename to src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs3.sct diff --git a/src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs3_issuer.pem b/src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs3_issuer.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/embeddedSCTs3_issuer.pem rename to src/openssl/openssl-1.1.1w/test/certs/embeddedSCTs3_issuer.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/goodcn1-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/goodcn1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/goodcn1-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/goodcn1-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/goodcn1-key.pem b/src/openssl/openssl-1.1.1w/test/certs/goodcn1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/goodcn1-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/goodcn1-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/interCA.key b/src/openssl/openssl-1.1.1w/test/certs/interCA.key similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/interCA.key rename to src/openssl/openssl-1.1.1w/test/certs/interCA.key diff --git a/src/openssl/openssl-1.1.1t/test/certs/interCA.pem b/src/openssl/openssl-1.1.1w/test/certs/interCA.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/interCA.pem rename to src/openssl/openssl-1.1.1w/test/certs/interCA.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/invalid-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/invalid-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/invalid-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/invalid-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/leaf.key b/src/openssl/openssl-1.1.1w/test/certs/leaf.key similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/leaf.key rename to src/openssl/openssl-1.1.1w/test/certs/leaf.key diff --git a/src/openssl/openssl-1.1.1t/test/certs/leaf.pem b/src/openssl/openssl-1.1.1w/test/certs/leaf.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/leaf.pem rename to src/openssl/openssl-1.1.1w/test/certs/leaf.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/many-constraints.pem b/src/openssl/openssl-1.1.1w/test/certs/many-constraints.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/many-constraints.pem rename to src/openssl/openssl-1.1.1w/test/certs/many-constraints.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/many-names1.pem b/src/openssl/openssl-1.1.1w/test/certs/many-names1.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/many-names1.pem rename to src/openssl/openssl-1.1.1w/test/certs/many-names1.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/many-names2.pem b/src/openssl/openssl-1.1.1w/test/certs/many-names2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/many-names2.pem rename to src/openssl/openssl-1.1.1w/test/certs/many-names2.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/many-names3.pem b/src/openssl/openssl-1.1.1w/test/certs/many-names3.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/many-names3.pem rename to src/openssl/openssl-1.1.1w/test/certs/many-names3.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/mkcert.sh b/src/openssl/openssl-1.1.1w/test/certs/mkcert.sh similarity index 96% rename from src/openssl/openssl-1.1.1t/test/certs/mkcert.sh rename to src/openssl/openssl-1.1.1w/test/certs/mkcert.sh index d8e704239..f7aec416e 100755 --- a/src/openssl/openssl-1.1.1t/test/certs/mkcert.sh +++ b/src/openssl/openssl-1.1.1w/test/certs/mkcert.sh @@ -1,6 +1,6 @@ #! /bin/bash # -# Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 2016-2023 The OpenSSL Project Authors. All Rights Reserved. # Copyright (c) 2016 Viktor Dukhovni . # All rights reserved. # @@ -117,11 +117,12 @@ genca() { local OPTIND=1 local purpose= - while getopts p: o + while getopts p:c: o do case $o in p) purpose="$OPTARG";; - *) echo "Usage: $0 genca [-p EKU] cn keyname certname cakeyname cacertname" >&2 + c) certpol="$OPTARG";; + *) echo "Usage: $0 genca [-p EKU][-c policyoid] cn keyname certname cakeyname cacertname" >&2 return 1;; esac done @@ -142,6 +143,10 @@ genca() { if [ -n "$NC" ]; then exts=$(printf "%s\nnameConstraints = %s\n" "$exts" "$NC") fi + if [ -n "$certpol" ]; then + exts=$(printf "%s\ncertificatePolicies = %s\n" "$exts" "$certpol") + fi + csr=$(req "$key" "CN = $cn") || return 1 echo "$csr" | cert "$cert" "$exts" -CA "${cacert}.pem" -CAkey "${cakey}.pem" \ diff --git a/src/openssl/openssl-1.1.1t/test/certs/nca+anyEKU.pem b/src/openssl/openssl-1.1.1w/test/certs/nca+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/nca+anyEKU.pem rename to src/openssl/openssl-1.1.1w/test/certs/nca+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/nca+serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/nca+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/nca+serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/nca+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ncca-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/ncca-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ncca-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/ncca-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ncca-key.pem b/src/openssl/openssl-1.1.1w/test/certs/ncca-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ncca-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/ncca-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ncca1-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/ncca1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ncca1-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/ncca1-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ncca1-key.pem b/src/openssl/openssl-1.1.1w/test/certs/ncca1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ncca1-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/ncca1-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ncca2-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/ncca2-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ncca2-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/ncca2-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ncca2-key.pem b/src/openssl/openssl-1.1.1w/test/certs/ncca2-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ncca2-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/ncca2-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ncca3-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/ncca3-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ncca3-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/ncca3-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/ncca3-key.pem b/src/openssl/openssl-1.1.1w/test/certs/ncca3-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/ncca3-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/ncca3-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/nroot+anyEKU.pem b/src/openssl/openssl-1.1.1w/test/certs/nroot+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/nroot+anyEKU.pem rename to src/openssl/openssl-1.1.1w/test/certs/nroot+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/nroot+serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/nroot+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/nroot+serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/nroot+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/p256-server-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/p256-server-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/p256-server-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/p256-server-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/p256-server-key.pem b/src/openssl/openssl-1.1.1w/test/certs/p256-server-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/p256-server-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/p256-server-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/p384-root-key.pem b/src/openssl/openssl-1.1.1w/test/certs/p384-root-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/p384-root-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/p384-root-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/p384-root.pem b/src/openssl/openssl-1.1.1w/test/certs/p384-root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/p384-root.pem rename to src/openssl/openssl-1.1.1w/test/certs/p384-root.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/p384-server-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/p384-server-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/p384-server-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/p384-server-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/p384-server-key.pem b/src/openssl/openssl-1.1.1w/test/certs/p384-server-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/p384-server-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/p384-server-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/pathlen.pem b/src/openssl/openssl-1.1.1w/test/certs/pathlen.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/pathlen.pem rename to src/openssl/openssl-1.1.1w/test/certs/pathlen.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/pc1-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/pc1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/pc1-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/pc1-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/pc1-key.pem b/src/openssl/openssl-1.1.1w/test/certs/pc1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/pc1-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/pc1-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/pc2-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/pc2-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/pc2-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/pc2-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/pc2-key.pem b/src/openssl/openssl-1.1.1w/test/certs/pc2-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/pc2-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/pc2-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/pc5-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/pc5-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/pc5-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/pc5-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/pc5-key.pem b/src/openssl/openssl-1.1.1w/test/certs/pc5-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/pc5-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/pc5-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root+anyEKU.pem b/src/openssl/openssl-1.1.1w/test/certs/root+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root+anyEKU.pem rename to src/openssl/openssl-1.1.1w/test/certs/root+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root+clientAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/root+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root+clientAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/root+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root+serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/root+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root+serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/root+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-anyEKU.pem b/src/openssl/openssl-1.1.1w/test/certs/root-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-anyEKU.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-cert-768.pem b/src/openssl/openssl-1.1.1w/test/certs/root-cert-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-cert-768.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-cert-768.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-cert-md5.pem b/src/openssl/openssl-1.1.1w/test/certs/root-cert-md5.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-cert-md5.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-cert-md5.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-cert-rsa2.pem b/src/openssl/openssl-1.1.1w/test/certs/root-cert-rsa2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-cert-rsa2.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-cert-rsa2.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/root-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-cert2.pem b/src/openssl/openssl-1.1.1w/test/certs/root-cert2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-cert2.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-cert2.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-clientAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/root-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-clientAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-cross-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/root-cross-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-cross-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-cross-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-ed25519.pem b/src/openssl/openssl-1.1.1w/test/certs/root-ed25519.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-ed25519.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-ed25519.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-ed448-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/root-ed448-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-ed448-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-ed448-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-ed448-key.pem b/src/openssl/openssl-1.1.1w/test/certs/root-ed448-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-ed448-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-ed448-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-expired.pem b/src/openssl/openssl-1.1.1w/test/certs/root-expired.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-expired.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-expired.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-key-768.pem b/src/openssl/openssl-1.1.1w/test/certs/root-key-768.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-key-768.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-key-768.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-key.pem b/src/openssl/openssl-1.1.1w/test/certs/root-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-key2.pem b/src/openssl/openssl-1.1.1w/test/certs/root-key2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-key2.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-key2.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-name2.pem b/src/openssl/openssl-1.1.1w/test/certs/root-name2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-name2.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-name2.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-nonca.pem b/src/openssl/openssl-1.1.1w/test/certs/root-nonca.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-nonca.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-nonca.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-noserver.pem b/src/openssl/openssl-1.1.1w/test/certs/root-noserver.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-noserver.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-noserver.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root-serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/root-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root-serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/root-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root2+clientAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/root2+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root2+clientAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/root2+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root2+serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/root2+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root2+serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/root2+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/root2-serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/root2-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/root2-serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/root2-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/rootCA.key b/src/openssl/openssl-1.1.1w/test/certs/rootCA.key similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/rootCA.key rename to src/openssl/openssl-1.1.1w/test/certs/rootCA.key diff --git a/src/openssl/openssl-1.1.1t/test/certs/rootCA.pem b/src/openssl/openssl-1.1.1w/test/certs/rootCA.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/rootCA.pem rename to src/openssl/openssl-1.1.1w/test/certs/rootCA.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/rootcert.pem b/src/openssl/openssl-1.1.1w/test/certs/rootcert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/rootcert.pem rename to src/openssl/openssl-1.1.1w/test/certs/rootcert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/rootkey.pem b/src/openssl/openssl-1.1.1w/test/certs/rootkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/rootkey.pem rename to src/openssl/openssl-1.1.1w/test/certs/rootkey.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/roots.pem b/src/openssl/openssl-1.1.1w/test/certs/roots.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/roots.pem rename to src/openssl/openssl-1.1.1w/test/certs/roots.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/sca+anyEKU.pem b/src/openssl/openssl-1.1.1w/test/certs/sca+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/sca+anyEKU.pem rename to src/openssl/openssl-1.1.1w/test/certs/sca+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/sca+clientAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/sca+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/sca+clientAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/sca+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/sca+serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/sca+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/sca+serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/sca+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/sca-anyEKU.pem b/src/openssl/openssl-1.1.1w/test/certs/sca-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/sca-anyEKU.pem rename to src/openssl/openssl-1.1.1w/test/certs/sca-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/sca-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/sca-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/sca-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/sca-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/sca-clientAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/sca-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/sca-clientAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/sca-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/sca-serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/sca-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/sca-serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/sca-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-cecdsa-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/server-cecdsa-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-cecdsa-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-cecdsa-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-cecdsa-key.pem b/src/openssl/openssl-1.1.1w/test/certs/server-cecdsa-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-cecdsa-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-cecdsa-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-dsa-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/server-dsa-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-dsa-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-dsa-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-dsa-key.pem b/src/openssl/openssl-1.1.1w/test/certs/server-dsa-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-dsa-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-dsa-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-ecdsa-brainpoolP256r1-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-brainpoolP256r1-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-ecdsa-brainpoolP256r1-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-brainpoolP256r1-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-ecdsa-brainpoolP256r1-key.pem b/src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-brainpoolP256r1-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-ecdsa-brainpoolP256r1-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-brainpoolP256r1-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-ecdsa-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-ecdsa-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-ecdsa-key.pem b/src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-ecdsa-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-ecdsa-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-ed25519-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/server-ed25519-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-ed25519-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-ed25519-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-ed25519-key.pem b/src/openssl/openssl-1.1.1w/test/certs/server-ed25519-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-ed25519-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-ed25519-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-ed448-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/server-ed448-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-ed448-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-ed448-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-ed448-key.pem b/src/openssl/openssl-1.1.1w/test/certs/server-ed448-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-ed448-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-ed448-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-pss-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/server-pss-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-pss-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-pss-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-pss-key.pem b/src/openssl/openssl-1.1.1w/test/certs/server-pss-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-pss-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-pss-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-pss-restrict-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/server-pss-restrict-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-pss-restrict-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-pss-restrict-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-pss-restrict-key.pem b/src/openssl/openssl-1.1.1w/test/certs/server-pss-restrict-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-pss-restrict-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-pss-restrict-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/server-trusted.pem b/src/openssl/openssl-1.1.1w/test/certs/server-trusted.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/server-trusted.pem rename to src/openssl/openssl-1.1.1w/test/certs/server-trusted.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/servercert.pem b/src/openssl/openssl-1.1.1w/test/certs/servercert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/servercert.pem rename to src/openssl/openssl-1.1.1w/test/certs/servercert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/serverkey.pem b/src/openssl/openssl-1.1.1w/test/certs/serverkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/serverkey.pem rename to src/openssl/openssl-1.1.1w/test/certs/serverkey.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/setup.sh b/src/openssl/openssl-1.1.1w/test/certs/setup.sh similarity index 97% rename from src/openssl/openssl-1.1.1t/test/certs/setup.sh rename to src/openssl/openssl-1.1.1w/test/certs/setup.sh index 020f6ce97..1cbef67ae 100755 --- a/src/openssl/openssl-1.1.1t/test/certs/setup.sh +++ b/src/openssl/openssl-1.1.1w/test/certs/setup.sh @@ -405,3 +405,9 @@ OPENSSL_SIGALG=ED448 OPENSSL_KEYALG=ed448 ./mkcert.sh genroot "Root Ed448" \ root-ed448-key root-ed448-cert OPENSSL_SIGALG=ED448 OPENSSL_KEYALG=ed448 ./mkcert.sh genee ed448 \ server-ed448-key server-ed448-cert root-ed448-key root-ed448-cert + +# certificatePolicies extension +./mkcert.sh genca -c "1.3.6.1.4.1.16604.998855.1" "CA" ca-key ca-pol-cert root-key root-cert +./mkcert.sh geneeextra server.example ee-key ee-cert-policies ca-key ca-cert "certificatePolicies=1.3.6.1.4.1.16604.998855.1" +# We can create a cert with a duplicate policy oid - but its actually invalid! +./mkcert.sh geneeextra server.example ee-key ee-cert-policies-bad ca-key ca-cert "certificatePolicies=1.3.6.1.4.1.16604.998855.1,1.3.6.1.4.1.16604.998855.1" diff --git a/src/openssl/openssl-1.1.1t/test/certs/some-names1.pem b/src/openssl/openssl-1.1.1w/test/certs/some-names1.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/some-names1.pem rename to src/openssl/openssl-1.1.1w/test/certs/some-names1.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/some-names2.pem b/src/openssl/openssl-1.1.1w/test/certs/some-names2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/some-names2.pem rename to src/openssl/openssl-1.1.1w/test/certs/some-names2.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/some-names3.pem b/src/openssl/openssl-1.1.1w/test/certs/some-names3.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/some-names3.pem rename to src/openssl/openssl-1.1.1w/test/certs/some-names3.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/sroot+anyEKU.pem b/src/openssl/openssl-1.1.1w/test/certs/sroot+anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/sroot+anyEKU.pem rename to src/openssl/openssl-1.1.1w/test/certs/sroot+anyEKU.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/sroot+clientAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/sroot+clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/sroot+clientAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/sroot+clientAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/sroot+serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/sroot+serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/sroot+serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/sroot+serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/sroot-anyEKU.pem b/src/openssl/openssl-1.1.1w/test/certs/sroot-anyEKU.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/sroot-anyEKU.pem rename to src/openssl/openssl-1.1.1w/test/certs/sroot-anyEKU.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/sroot-cert.pem b/src/openssl/openssl-1.1.1w/test/certs/sroot-cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/sroot-cert.pem rename to src/openssl/openssl-1.1.1w/test/certs/sroot-cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/sroot-clientAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/sroot-clientAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/sroot-clientAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/sroot-clientAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/sroot-serverAuth.pem b/src/openssl/openssl-1.1.1w/test/certs/sroot-serverAuth.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/sroot-serverAuth.pem rename to src/openssl/openssl-1.1.1w/test/certs/sroot-serverAuth.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/subinterCA-ss.pem b/src/openssl/openssl-1.1.1w/test/certs/subinterCA-ss.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/subinterCA-ss.pem rename to src/openssl/openssl-1.1.1w/test/certs/subinterCA-ss.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/subinterCA.key b/src/openssl/openssl-1.1.1w/test/certs/subinterCA.key similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/subinterCA.key rename to src/openssl/openssl-1.1.1w/test/certs/subinterCA.key diff --git a/src/openssl/openssl-1.1.1t/test/certs/subinterCA.pem b/src/openssl/openssl-1.1.1w/test/certs/subinterCA.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/subinterCA.pem rename to src/openssl/openssl-1.1.1w/test/certs/subinterCA.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/untrusted.pem b/src/openssl/openssl-1.1.1w/test/certs/untrusted.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/untrusted.pem rename to src/openssl/openssl-1.1.1w/test/certs/untrusted.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/wrongcert.pem b/src/openssl/openssl-1.1.1w/test/certs/wrongcert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/wrongcert.pem rename to src/openssl/openssl-1.1.1w/test/certs/wrongcert.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/wrongkey.pem b/src/openssl/openssl-1.1.1w/test/certs/wrongkey.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/wrongkey.pem rename to src/openssl/openssl-1.1.1w/test/certs/wrongkey.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/x509-check-key.pem b/src/openssl/openssl-1.1.1w/test/certs/x509-check-key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/x509-check-key.pem rename to src/openssl/openssl-1.1.1w/test/certs/x509-check-key.pem diff --git a/src/openssl/openssl-1.1.1t/test/certs/x509-check.csr b/src/openssl/openssl-1.1.1w/test/certs/x509-check.csr similarity index 100% rename from src/openssl/openssl-1.1.1t/test/certs/x509-check.csr rename to src/openssl/openssl-1.1.1w/test/certs/x509-check.csr diff --git a/src/openssl/openssl-1.1.1t/test/chacha_internal_test.c b/src/openssl/openssl-1.1.1w/test/chacha_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/chacha_internal_test.c rename to src/openssl/openssl-1.1.1w/test/chacha_internal_test.c diff --git a/src/openssl/openssl-1.1.1t/test/cipher_overhead_test.c b/src/openssl/openssl-1.1.1w/test/cipher_overhead_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/cipher_overhead_test.c rename to src/openssl/openssl-1.1.1w/test/cipher_overhead_test.c diff --git a/src/openssl/openssl-1.1.1t/test/cipherbytes_test.c b/src/openssl/openssl-1.1.1w/test/cipherbytes_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/cipherbytes_test.c rename to src/openssl/openssl-1.1.1w/test/cipherbytes_test.c diff --git a/src/openssl/openssl-1.1.1t/test/cipherlist_test.c b/src/openssl/openssl-1.1.1w/test/cipherlist_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/cipherlist_test.c rename to src/openssl/openssl-1.1.1w/test/cipherlist_test.c diff --git a/src/openssl/openssl-1.1.1t/test/ciphername_test.c b/src/openssl/openssl-1.1.1w/test/ciphername_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ciphername_test.c rename to src/openssl/openssl-1.1.1w/test/ciphername_test.c diff --git a/src/openssl/openssl-1.1.1t/test/clienthellotest.c b/src/openssl/openssl-1.1.1w/test/clienthellotest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/clienthellotest.c rename to src/openssl/openssl-1.1.1w/test/clienthellotest.c diff --git a/src/openssl/openssl-1.1.1t/test/cmactest.c b/src/openssl/openssl-1.1.1w/test/cmactest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/cmactest.c rename to src/openssl/openssl-1.1.1w/test/cmactest.c diff --git a/src/openssl/openssl-1.1.1t/test/cms-examples.pl b/src/openssl/openssl-1.1.1w/test/cms-examples.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/test/cms-examples.pl rename to src/openssl/openssl-1.1.1w/test/cms-examples.pl diff --git a/src/openssl/openssl-1.1.1t/test/cmsapitest.c b/src/openssl/openssl-1.1.1w/test/cmsapitest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/cmsapitest.c rename to src/openssl/openssl-1.1.1w/test/cmsapitest.c diff --git a/src/openssl/openssl-1.1.1t/test/conf_include_test.c b/src/openssl/openssl-1.1.1w/test/conf_include_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/conf_include_test.c rename to src/openssl/openssl-1.1.1w/test/conf_include_test.c diff --git a/src/openssl/openssl-1.1.1t/test/constant_time_test.c b/src/openssl/openssl-1.1.1w/test/constant_time_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/constant_time_test.c rename to src/openssl/openssl-1.1.1w/test/constant_time_test.c diff --git a/src/openssl/openssl-1.1.1t/test/crltest.c b/src/openssl/openssl-1.1.1w/test/crltest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/crltest.c rename to src/openssl/openssl-1.1.1w/test/crltest.c diff --git a/src/openssl/openssl-1.1.1t/test/ct/log_list.conf b/src/openssl/openssl-1.1.1w/test/ct/log_list.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ct/log_list.conf rename to src/openssl/openssl-1.1.1w/test/ct/log_list.conf diff --git a/src/openssl/openssl-1.1.1t/test/ct/tls1.sct b/src/openssl/openssl-1.1.1w/test/ct/tls1.sct similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ct/tls1.sct rename to src/openssl/openssl-1.1.1w/test/ct/tls1.sct diff --git a/src/openssl/openssl-1.1.1t/test/ct_test.c b/src/openssl/openssl-1.1.1w/test/ct_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ct_test.c rename to src/openssl/openssl-1.1.1w/test/ct_test.c diff --git a/src/openssl/openssl-1.1.1t/test/ctype_internal_test.c b/src/openssl/openssl-1.1.1w/test/ctype_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ctype_internal_test.c rename to src/openssl/openssl-1.1.1w/test/ctype_internal_test.c diff --git a/src/openssl/openssl-1.1.1t/test/curve448_internal_test.c b/src/openssl/openssl-1.1.1w/test/curve448_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/curve448_internal_test.c rename to src/openssl/openssl-1.1.1w/test/curve448_internal_test.c diff --git a/src/openssl/openssl-1.1.1t/test/d2i-tests/bad-cms.der b/src/openssl/openssl-1.1.1w/test/d2i-tests/bad-cms.der similarity index 100% rename from src/openssl/openssl-1.1.1t/test/d2i-tests/bad-cms.der rename to src/openssl/openssl-1.1.1w/test/d2i-tests/bad-cms.der diff --git a/src/openssl/openssl-1.1.1t/test/d2i-tests/bad-int-pad0.der b/src/openssl/openssl-1.1.1w/test/d2i-tests/bad-int-pad0.der similarity index 100% rename from src/openssl/openssl-1.1.1t/test/d2i-tests/bad-int-pad0.der rename to src/openssl/openssl-1.1.1w/test/d2i-tests/bad-int-pad0.der diff --git a/src/openssl/openssl-1.1.1t/test/d2i-tests/bad-int-padminus1.der b/src/openssl/openssl-1.1.1w/test/d2i-tests/bad-int-padminus1.der similarity index 100% rename from src/openssl/openssl-1.1.1t/test/d2i-tests/bad-int-padminus1.der rename to src/openssl/openssl-1.1.1w/test/d2i-tests/bad-int-padminus1.der diff --git a/src/openssl/openssl-1.1.1t/test/d2i-tests/bad_bio.der b/src/openssl/openssl-1.1.1w/test/d2i-tests/bad_bio.der similarity index 100% rename from src/openssl/openssl-1.1.1t/test/d2i-tests/bad_bio.der rename to src/openssl/openssl-1.1.1w/test/d2i-tests/bad_bio.der diff --git a/src/openssl/openssl-1.1.1t/test/d2i-tests/bad_cert.der b/src/openssl/openssl-1.1.1w/test/d2i-tests/bad_cert.der similarity index 100% rename from src/openssl/openssl-1.1.1t/test/d2i-tests/bad_cert.der rename to src/openssl/openssl-1.1.1w/test/d2i-tests/bad_cert.der diff --git a/src/openssl/openssl-1.1.1t/test/d2i-tests/bad_generalname.der b/src/openssl/openssl-1.1.1w/test/d2i-tests/bad_generalname.der similarity index 100% rename from src/openssl/openssl-1.1.1t/test/d2i-tests/bad_generalname.der rename to src/openssl/openssl-1.1.1w/test/d2i-tests/bad_generalname.der diff --git a/src/openssl/openssl-1.1.1t/test/d2i-tests/high_tag.der b/src/openssl/openssl-1.1.1w/test/d2i-tests/high_tag.der similarity index 100% rename from src/openssl/openssl-1.1.1t/test/d2i-tests/high_tag.der rename to src/openssl/openssl-1.1.1w/test/d2i-tests/high_tag.der diff --git a/src/openssl/openssl-1.1.1t/test/d2i-tests/int0.der b/src/openssl/openssl-1.1.1w/test/d2i-tests/int0.der similarity index 100% rename from src/openssl/openssl-1.1.1t/test/d2i-tests/int0.der rename to src/openssl/openssl-1.1.1w/test/d2i-tests/int0.der diff --git a/src/openssl/openssl-1.1.1t/test/d2i-tests/int1.der b/src/openssl/openssl-1.1.1w/test/d2i-tests/int1.der similarity index 100% rename from src/openssl/openssl-1.1.1t/test/d2i-tests/int1.der rename to src/openssl/openssl-1.1.1w/test/d2i-tests/int1.der diff --git a/src/openssl/openssl-1.1.1t/test/d2i-tests/intminus1.der b/src/openssl/openssl-1.1.1w/test/d2i-tests/intminus1.der similarity index 100% rename from src/openssl/openssl-1.1.1t/test/d2i-tests/intminus1.der rename to src/openssl/openssl-1.1.1w/test/d2i-tests/intminus1.der diff --git a/src/openssl/openssl-1.1.1t/test/d2i_test.c b/src/openssl/openssl-1.1.1w/test/d2i_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/d2i_test.c rename to src/openssl/openssl-1.1.1w/test/d2i_test.c diff --git a/src/openssl/openssl-1.1.1t/test/dane-cross.in b/src/openssl/openssl-1.1.1w/test/dane-cross.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/dane-cross.in rename to src/openssl/openssl-1.1.1w/test/dane-cross.in diff --git a/src/openssl/openssl-1.1.1t/test/danetest.c b/src/openssl/openssl-1.1.1w/test/danetest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/danetest.c rename to src/openssl/openssl-1.1.1w/test/danetest.c diff --git a/src/openssl/openssl-1.1.1t/test/danetest.in b/src/openssl/openssl-1.1.1w/test/danetest.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/danetest.in rename to src/openssl/openssl-1.1.1w/test/danetest.in diff --git a/src/openssl/openssl-1.1.1t/test/danetest.pem b/src/openssl/openssl-1.1.1w/test/danetest.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/danetest.pem rename to src/openssl/openssl-1.1.1w/test/danetest.pem diff --git a/src/openssl/openssl-1.1.1t/test/data.bin b/src/openssl/openssl-1.1.1w/test/data.bin similarity index 100% rename from src/openssl/openssl-1.1.1t/test/data.bin rename to src/openssl/openssl-1.1.1w/test/data.bin diff --git a/src/openssl/openssl-1.1.1t/test/destest.c b/src/openssl/openssl-1.1.1w/test/destest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/destest.c rename to src/openssl/openssl-1.1.1w/test/destest.c diff --git a/src/openssl/openssl-1.1.1t/test/dhtest.c b/src/openssl/openssl-1.1.1w/test/dhtest.c similarity index 97% rename from src/openssl/openssl-1.1.1t/test/dhtest.c rename to src/openssl/openssl-1.1.1w/test/dhtest.c index 9d5609b94..20132201a 100644 --- a/src/openssl/openssl-1.1.1t/test/dhtest.c +++ b/src/openssl/openssl-1.1.1w/test/dhtest.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -63,7 +63,7 @@ static int dh_test(void) || !TEST_true(DH_set0_pqg(dh, p, q, g))) goto err1; - if (!DH_check(dh, &i)) + if (!TEST_true(DH_check(dh, &i))) goto err2; if (!TEST_false(i & DH_CHECK_P_NOT_PRIME) || !TEST_false(i & DH_CHECK_P_NOT_SAFE_PRIME) @@ -123,6 +123,29 @@ static int dh_test(void) /* check whether the public key was calculated correctly */ TEST_uint_eq(BN_get_word(pub_key2), 3331L); + if (!TEST_ptr(BN_copy(q, p)) || !TEST_true(BN_add(q, q, BN_value_one()))) + goto err3; + + if (!TEST_true(DH_check(dh, &i))) + goto err3; + if (!TEST_true(i & DH_CHECK_INVALID_Q_VALUE) + || !TEST_false(i & DH_CHECK_Q_NOT_PRIME)) + goto err3; + + /* Modulus of size: dh check max modulus bits + 1 */ + if (!TEST_true(BN_set_word(p, 1)) + || !TEST_true(BN_lshift(p, p, OPENSSL_DH_CHECK_MAX_MODULUS_BITS))) + goto err3; + + /* + * We expect no checks at all for an excessively large modulus + */ + if (!TEST_false(DH_check(dh, &i))) + goto err3; + + /* We'll have a stale error on the queue from the above test so clear it */ + ERR_clear_error(); + /* * II) key generation */ @@ -137,7 +160,7 @@ static int dh_test(void) goto err3; /* ... and check whether it is valid */ - if (!DH_check(a, &i)) + if (!TEST_true(DH_check(a, &i))) goto err3; if (!TEST_false(i & DH_CHECK_P_NOT_PRIME) || !TEST_false(i & DH_CHECK_P_NOT_SAFE_PRIME) diff --git a/src/openssl/openssl-1.1.1t/test/drbg_cavs_data.c b/src/openssl/openssl-1.1.1w/test/drbg_cavs_data.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/drbg_cavs_data.c rename to src/openssl/openssl-1.1.1w/test/drbg_cavs_data.c diff --git a/src/openssl/openssl-1.1.1t/test/drbg_cavs_data.h b/src/openssl/openssl-1.1.1w/test/drbg_cavs_data.h similarity index 100% rename from src/openssl/openssl-1.1.1t/test/drbg_cavs_data.h rename to src/openssl/openssl-1.1.1w/test/drbg_cavs_data.h diff --git a/src/openssl/openssl-1.1.1t/test/drbg_cavs_test.c b/src/openssl/openssl-1.1.1w/test/drbg_cavs_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/drbg_cavs_test.c rename to src/openssl/openssl-1.1.1w/test/drbg_cavs_test.c diff --git a/src/openssl/openssl-1.1.1t/test/drbgtest.c b/src/openssl/openssl-1.1.1w/test/drbgtest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/drbgtest.c rename to src/openssl/openssl-1.1.1w/test/drbgtest.c diff --git a/src/openssl/openssl-1.1.1t/test/drbgtest.h b/src/openssl/openssl-1.1.1w/test/drbgtest.h similarity index 100% rename from src/openssl/openssl-1.1.1t/test/drbgtest.h rename to src/openssl/openssl-1.1.1w/test/drbgtest.h diff --git a/src/openssl/openssl-1.1.1t/test/dsa_no_digest_size_test.c b/src/openssl/openssl-1.1.1w/test/dsa_no_digest_size_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/dsa_no_digest_size_test.c rename to src/openssl/openssl-1.1.1w/test/dsa_no_digest_size_test.c diff --git a/src/openssl/openssl-1.1.1t/test/dsatest.c b/src/openssl/openssl-1.1.1w/test/dsatest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/dsatest.c rename to src/openssl/openssl-1.1.1w/test/dsatest.c diff --git a/src/openssl/openssl-1.1.1t/test/dtls_mtu_test.c b/src/openssl/openssl-1.1.1w/test/dtls_mtu_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/dtls_mtu_test.c rename to src/openssl/openssl-1.1.1w/test/dtls_mtu_test.c diff --git a/src/openssl/openssl-1.1.1t/test/dtlstest.c b/src/openssl/openssl-1.1.1w/test/dtlstest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/dtlstest.c rename to src/openssl/openssl-1.1.1w/test/dtlstest.c diff --git a/src/openssl/openssl-1.1.1t/test/dtlsv1listentest.c b/src/openssl/openssl-1.1.1w/test/dtlsv1listentest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/dtlsv1listentest.c rename to src/openssl/openssl-1.1.1w/test/dtlsv1listentest.c diff --git a/src/openssl/openssl-1.1.1t/test/ec_internal_test.c b/src/openssl/openssl-1.1.1w/test/ec_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ec_internal_test.c rename to src/openssl/openssl-1.1.1w/test/ec_internal_test.c diff --git a/src/openssl/openssl-1.1.1t/test/ecdsatest.c b/src/openssl/openssl-1.1.1w/test/ecdsatest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ecdsatest.c rename to src/openssl/openssl-1.1.1w/test/ecdsatest.c diff --git a/src/openssl/openssl-1.1.1t/test/ecdsatest.h b/src/openssl/openssl-1.1.1w/test/ecdsatest.h similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ecdsatest.h rename to src/openssl/openssl-1.1.1w/test/ecdsatest.h diff --git a/src/openssl/openssl-1.1.1t/test/ecstresstest.c b/src/openssl/openssl-1.1.1w/test/ecstresstest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ecstresstest.c rename to src/openssl/openssl-1.1.1w/test/ecstresstest.c diff --git a/src/openssl/openssl-1.1.1t/test/ectest.c b/src/openssl/openssl-1.1.1w/test/ectest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ectest.c rename to src/openssl/openssl-1.1.1w/test/ectest.c diff --git a/src/openssl/openssl-1.1.1t/test/enginetest.c b/src/openssl/openssl-1.1.1w/test/enginetest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/enginetest.c rename to src/openssl/openssl-1.1.1w/test/enginetest.c diff --git a/src/openssl/openssl-1.1.1t/test/errtest.c b/src/openssl/openssl-1.1.1w/test/errtest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/errtest.c rename to src/openssl/openssl-1.1.1w/test/errtest.c diff --git a/src/openssl/openssl-1.1.1t/test/evp_extra_test.c b/src/openssl/openssl-1.1.1w/test/evp_extra_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/evp_extra_test.c rename to src/openssl/openssl-1.1.1w/test/evp_extra_test.c diff --git a/src/openssl/openssl-1.1.1t/test/evp_test.c b/src/openssl/openssl-1.1.1w/test/evp_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/evp_test.c rename to src/openssl/openssl-1.1.1w/test/evp_test.c diff --git a/src/openssl/openssl-1.1.1t/test/evp_test.h b/src/openssl/openssl-1.1.1w/test/evp_test.h similarity index 100% rename from src/openssl/openssl-1.1.1t/test/evp_test.h rename to src/openssl/openssl-1.1.1w/test/evp_test.h diff --git a/src/openssl/openssl-1.1.1t/test/exdatatest.c b/src/openssl/openssl-1.1.1w/test/exdatatest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/exdatatest.c rename to src/openssl/openssl-1.1.1w/test/exdatatest.c diff --git a/src/openssl/openssl-1.1.1t/test/exptest.c b/src/openssl/openssl-1.1.1w/test/exptest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/exptest.c rename to src/openssl/openssl-1.1.1w/test/exptest.c diff --git a/src/openssl/openssl-1.1.1t/test/fatalerrtest.c b/src/openssl/openssl-1.1.1w/test/fatalerrtest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/fatalerrtest.c rename to src/openssl/openssl-1.1.1w/test/fatalerrtest.c diff --git a/src/openssl/openssl-1.1.1t/test/generate_buildtest.pl b/src/openssl/openssl-1.1.1w/test/generate_buildtest.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/test/generate_buildtest.pl rename to src/openssl/openssl-1.1.1w/test/generate_buildtest.pl diff --git a/src/openssl/openssl-1.1.1t/test/generate_ssl_tests.pl b/src/openssl/openssl-1.1.1w/test/generate_ssl_tests.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/test/generate_ssl_tests.pl rename to src/openssl/openssl-1.1.1w/test/generate_ssl_tests.pl diff --git a/src/openssl/openssl-1.1.1t/test/gmdifftest.c b/src/openssl/openssl-1.1.1w/test/gmdifftest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/gmdifftest.c rename to src/openssl/openssl-1.1.1w/test/gmdifftest.c diff --git a/src/openssl/openssl-1.1.1t/test/gosttest.c b/src/openssl/openssl-1.1.1w/test/gosttest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/gosttest.c rename to src/openssl/openssl-1.1.1w/test/gosttest.c diff --git a/src/openssl/openssl-1.1.1t/test/handshake_helper.c b/src/openssl/openssl-1.1.1w/test/handshake_helper.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/handshake_helper.c rename to src/openssl/openssl-1.1.1w/test/handshake_helper.c diff --git a/src/openssl/openssl-1.1.1t/test/handshake_helper.h b/src/openssl/openssl-1.1.1w/test/handshake_helper.h similarity index 100% rename from src/openssl/openssl-1.1.1t/test/handshake_helper.h rename to src/openssl/openssl-1.1.1w/test/handshake_helper.h diff --git a/src/openssl/openssl-1.1.1t/test/hmactest.c b/src/openssl/openssl-1.1.1w/test/hmactest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/hmactest.c rename to src/openssl/openssl-1.1.1w/test/hmactest.c diff --git a/src/openssl/openssl-1.1.1t/test/ideatest.c b/src/openssl/openssl-1.1.1w/test/ideatest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ideatest.c rename to src/openssl/openssl-1.1.1w/test/ideatest.c diff --git a/src/openssl/openssl-1.1.1t/test/igetest.c b/src/openssl/openssl-1.1.1w/test/igetest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/igetest.c rename to src/openssl/openssl-1.1.1w/test/igetest.c diff --git a/src/openssl/openssl-1.1.1t/test/lhash_test.c b/src/openssl/openssl-1.1.1w/test/lhash_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/lhash_test.c rename to src/openssl/openssl-1.1.1w/test/lhash_test.c diff --git a/src/openssl/openssl-1.1.1t/test/md2test.c b/src/openssl/openssl-1.1.1w/test/md2test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/md2test.c rename to src/openssl/openssl-1.1.1w/test/md2test.c diff --git a/src/openssl/openssl-1.1.1t/test/mdc2_internal_test.c b/src/openssl/openssl-1.1.1w/test/mdc2_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/mdc2_internal_test.c rename to src/openssl/openssl-1.1.1w/test/mdc2_internal_test.c diff --git a/src/openssl/openssl-1.1.1t/test/mdc2test.c b/src/openssl/openssl-1.1.1w/test/mdc2test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/mdc2test.c rename to src/openssl/openssl-1.1.1w/test/mdc2test.c diff --git a/src/openssl/openssl-1.1.1t/test/memleaktest.c b/src/openssl/openssl-1.1.1w/test/memleaktest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/memleaktest.c rename to src/openssl/openssl-1.1.1w/test/memleaktest.c diff --git a/src/openssl/openssl-1.1.1t/test/modes_internal_test.c b/src/openssl/openssl-1.1.1w/test/modes_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/modes_internal_test.c rename to src/openssl/openssl-1.1.1w/test/modes_internal_test.c diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/D1.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/D1.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/D1.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/D1_Cert_EE.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/D1_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/D1_Cert_EE.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/D1_Cert_EE.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/D1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/D1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/D2.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/D2.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/D2.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/D2_Cert_ICA.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/D2_Cert_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/D2_Cert_ICA.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/D2_Cert_ICA.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/D2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/D2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/D3.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/D3.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/D3.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/D3_Cert_EE.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/D3_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/D3_Cert_EE.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/D3_Cert_EE.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/D3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/D3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ISDOSC_D1.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISDOSC_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ISDOSC_D1.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ISDOSC_D1.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ISDOSC_D2.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISDOSC_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ISDOSC_D2.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ISDOSC_D2.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ISDOSC_D3.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISDOSC_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ISDOSC_D3.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ISDOSC_D3.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ISIC_D2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ISIC_D2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ISIC_D3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ISIC_D3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ISIC_ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ISOP_D1.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ISOP_D1.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_D1.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ISOP_D2.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ISOP_D2.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_D2.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ISOP_D3.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ISOP_D3.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_D3.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ISOP_ND1.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_ND1.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ISOP_ND1.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_ND1.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ISOP_ND2.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_ND2.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ISOP_ND2.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_ND2.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ISOP_ND3.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_ND3.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ISOP_ND3.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ISOP_ND3.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ND1.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ND1.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ND1_Cert_EE.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ND1_Cert_EE.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Cert_EE.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ND1_Cross_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Cross_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ND1_Cross_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Cross_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Issuer_ICA-Cross.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ND1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ND2.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND2.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ND2.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ND2.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ND2_Cert_ICA.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND2_Cert_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ND2_Cert_ICA.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ND2_Cert_ICA.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ND2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ND2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ND3.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND3.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ND3.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ND3.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ND3_Cert_EE.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND3_Cert_EE.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ND3_Cert_EE.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ND3_Cert_EE.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/ND3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/ND3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WIKH_D1.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WIKH_D1.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_D1.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WIKH_D2.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WIKH_D2.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_D2.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WIKH_D3.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WIKH_D3.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_D3.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WIKH_ND1.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_ND1.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WIKH_ND1.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_ND1.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WIKH_ND2.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_ND2.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WIKH_ND2.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_ND2.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WIKH_ND3.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_ND3.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WIKH_ND3.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WIKH_ND3.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WINH_D1.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WINH_D1.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_D1.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WINH_D2.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WINH_D2.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_D2.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WINH_D3.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WINH_D3.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_D3.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WINH_ND1.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_ND1.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WINH_ND1.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_ND1.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WINH_ND2.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_ND2.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WINH_ND2.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_ND2.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WINH_ND3.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_ND3.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WINH_ND3.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WINH_ND3.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WKDOSC_D1.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKDOSC_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WKDOSC_D1.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WKDOSC_D1.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WKDOSC_D2.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKDOSC_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WKDOSC_D2.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WKDOSC_D2.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WKDOSC_D3.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKDOSC_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WKDOSC_D3.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WKDOSC_D3.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WKIC_D2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WKIC_D2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WKIC_D3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WKIC_D3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WKIC_ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WRID_D1.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_D1.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WRID_D1.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_D1.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WRID_D2.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_D2.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WRID_D2.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_D2.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WRID_D3.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_D3.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WRID_D3.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_D3.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WRID_ND1.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_ND1.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WRID_ND1.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_ND1.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WRID_ND2.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_ND2.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WRID_ND2.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_ND2.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WRID_ND3.ors b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_ND3.ors similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WRID_ND3.ors rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WRID_ND3.ors diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_D1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_D2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_D3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_ND1_Issuer_ICA.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_ND2_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem b/src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem rename to src/openssl/openssl-1.1.1w/test/ocsp-tests/WSNIC_ND3_Issuer_Root.pem diff --git a/src/openssl/openssl-1.1.1t/test/ocspapitest.c b/src/openssl/openssl-1.1.1w/test/ocspapitest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ocspapitest.c rename to src/openssl/openssl-1.1.1w/test/ocspapitest.c diff --git a/src/openssl/openssl-1.1.1t/test/ossl_shim/async_bio.cc b/src/openssl/openssl-1.1.1w/test/ossl_shim/async_bio.cc similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ossl_shim/async_bio.cc rename to src/openssl/openssl-1.1.1w/test/ossl_shim/async_bio.cc diff --git a/src/openssl/openssl-1.1.1t/test/ossl_shim/async_bio.h b/src/openssl/openssl-1.1.1w/test/ossl_shim/async_bio.h similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ossl_shim/async_bio.h rename to src/openssl/openssl-1.1.1w/test/ossl_shim/async_bio.h diff --git a/src/openssl/openssl-1.1.1t/test/ossl_shim/build.info b/src/openssl/openssl-1.1.1w/test/ossl_shim/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ossl_shim/build.info rename to src/openssl/openssl-1.1.1w/test/ossl_shim/build.info diff --git a/src/openssl/openssl-1.1.1t/test/ossl_shim/include/openssl/base.h b/src/openssl/openssl-1.1.1w/test/ossl_shim/include/openssl/base.h similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ossl_shim/include/openssl/base.h rename to src/openssl/openssl-1.1.1w/test/ossl_shim/include/openssl/base.h diff --git a/src/openssl/openssl-1.1.1t/test/ossl_shim/ossl_config.json b/src/openssl/openssl-1.1.1w/test/ossl_shim/ossl_config.json similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ossl_shim/ossl_config.json rename to src/openssl/openssl-1.1.1w/test/ossl_shim/ossl_config.json diff --git a/src/openssl/openssl-1.1.1t/test/ossl_shim/ossl_shim.cc b/src/openssl/openssl-1.1.1w/test/ossl_shim/ossl_shim.cc similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ossl_shim/ossl_shim.cc rename to src/openssl/openssl-1.1.1w/test/ossl_shim/ossl_shim.cc diff --git a/src/openssl/openssl-1.1.1t/test/ossl_shim/packeted_bio.cc b/src/openssl/openssl-1.1.1w/test/ossl_shim/packeted_bio.cc similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ossl_shim/packeted_bio.cc rename to src/openssl/openssl-1.1.1w/test/ossl_shim/packeted_bio.cc diff --git a/src/openssl/openssl-1.1.1t/test/ossl_shim/packeted_bio.h b/src/openssl/openssl-1.1.1w/test/ossl_shim/packeted_bio.h similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ossl_shim/packeted_bio.h rename to src/openssl/openssl-1.1.1w/test/ossl_shim/packeted_bio.h diff --git a/src/openssl/openssl-1.1.1t/test/ossl_shim/test_config.cc b/src/openssl/openssl-1.1.1w/test/ossl_shim/test_config.cc similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ossl_shim/test_config.cc rename to src/openssl/openssl-1.1.1w/test/ossl_shim/test_config.cc diff --git a/src/openssl/openssl-1.1.1t/test/ossl_shim/test_config.h b/src/openssl/openssl-1.1.1w/test/ossl_shim/test_config.h similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ossl_shim/test_config.h rename to src/openssl/openssl-1.1.1w/test/ossl_shim/test_config.h diff --git a/src/openssl/openssl-1.1.1t/test/packettest.c b/src/openssl/openssl-1.1.1w/test/packettest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/packettest.c rename to src/openssl/openssl-1.1.1w/test/packettest.c diff --git a/src/openssl/openssl-1.1.1t/test/pbelutest.c b/src/openssl/openssl-1.1.1w/test/pbelutest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/pbelutest.c rename to src/openssl/openssl-1.1.1w/test/pbelutest.c diff --git a/src/openssl/openssl-1.1.1t/test/pemtest.c b/src/openssl/openssl-1.1.1w/test/pemtest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/pemtest.c rename to src/openssl/openssl-1.1.1w/test/pemtest.c diff --git a/src/openssl/openssl-1.1.1t/test/pkcs7-1.pem b/src/openssl/openssl-1.1.1w/test/pkcs7-1.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/pkcs7-1.pem rename to src/openssl/openssl-1.1.1w/test/pkcs7-1.pem diff --git a/src/openssl/openssl-1.1.1t/test/pkcs7.pem b/src/openssl/openssl-1.1.1w/test/pkcs7.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/pkcs7.pem rename to src/openssl/openssl-1.1.1w/test/pkcs7.pem diff --git a/src/openssl/openssl-1.1.1t/test/pkey_meth_kdf_test.c b/src/openssl/openssl-1.1.1w/test/pkey_meth_kdf_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/pkey_meth_kdf_test.c rename to src/openssl/openssl-1.1.1w/test/pkey_meth_kdf_test.c diff --git a/src/openssl/openssl-1.1.1t/test/pkey_meth_test.c b/src/openssl/openssl-1.1.1w/test/pkey_meth_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/pkey_meth_test.c rename to src/openssl/openssl-1.1.1w/test/pkey_meth_test.c diff --git a/src/openssl/openssl-1.1.1t/test/pkits-test.pl b/src/openssl/openssl-1.1.1w/test/pkits-test.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/test/pkits-test.pl rename to src/openssl/openssl-1.1.1w/test/pkits-test.pl diff --git a/src/openssl/openssl-1.1.1t/test/poly1305_internal_test.c b/src/openssl/openssl-1.1.1w/test/poly1305_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/poly1305_internal_test.c rename to src/openssl/openssl-1.1.1w/test/poly1305_internal_test.c diff --git a/src/openssl/openssl-1.1.1t/test/rc2test.c b/src/openssl/openssl-1.1.1w/test/rc2test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/rc2test.c rename to src/openssl/openssl-1.1.1w/test/rc2test.c diff --git a/src/openssl/openssl-1.1.1t/test/rc4test.c b/src/openssl/openssl-1.1.1w/test/rc4test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/rc4test.c rename to src/openssl/openssl-1.1.1w/test/rc4test.c diff --git a/src/openssl/openssl-1.1.1t/test/rc5test.c b/src/openssl/openssl-1.1.1w/test/rc5test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/rc5test.c rename to src/openssl/openssl-1.1.1w/test/rc5test.c diff --git a/src/openssl/openssl-1.1.1t/test/rdrand_sanitytest.c b/src/openssl/openssl-1.1.1w/test/rdrand_sanitytest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/rdrand_sanitytest.c rename to src/openssl/openssl-1.1.1w/test/rdrand_sanitytest.c diff --git a/src/openssl/openssl-1.1.1t/test/recipes/01-test_abort.t b/src/openssl/openssl-1.1.1w/test/recipes/01-test_abort.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/01-test_abort.t rename to src/openssl/openssl-1.1.1w/test/recipes/01-test_abort.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/01-test_sanity.t b/src/openssl/openssl-1.1.1w/test/recipes/01-test_sanity.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/01-test_sanity.t rename to src/openssl/openssl-1.1.1w/test/recipes/01-test_sanity.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/01-test_symbol_presence.t b/src/openssl/openssl-1.1.1w/test/recipes/01-test_symbol_presence.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/01-test_symbol_presence.t rename to src/openssl/openssl-1.1.1w/test/recipes/01-test_symbol_presence.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/01-test_test.t b/src/openssl/openssl-1.1.1w/test/recipes/01-test_test.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/01-test_test.t rename to src/openssl/openssl-1.1.1w/test/recipes/01-test_test.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/02-test_errstr.t b/src/openssl/openssl-1.1.1w/test/recipes/02-test_errstr.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/02-test_errstr.t rename to src/openssl/openssl-1.1.1w/test/recipes/02-test_errstr.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/02-test_internal_ctype.t b/src/openssl/openssl-1.1.1w/test/recipes/02-test_internal_ctype.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/02-test_internal_ctype.t rename to src/openssl/openssl-1.1.1w/test/recipes/02-test_internal_ctype.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/02-test_lhash.t b/src/openssl/openssl-1.1.1w/test/recipes/02-test_lhash.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/02-test_lhash.t rename to src/openssl/openssl-1.1.1w/test/recipes/02-test_lhash.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/02-test_ordinals.t b/src/openssl/openssl-1.1.1w/test/recipes/02-test_ordinals.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/02-test_ordinals.t rename to src/openssl/openssl-1.1.1w/test/recipes/02-test_ordinals.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/02-test_stack.t b/src/openssl/openssl-1.1.1w/test/recipes/02-test_stack.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/02-test_stack.t rename to src/openssl/openssl-1.1.1w/test/recipes/02-test_stack.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/03-test_exdata.t b/src/openssl/openssl-1.1.1w/test/recipes/03-test_exdata.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/03-test_exdata.t rename to src/openssl/openssl-1.1.1w/test/recipes/03-test_exdata.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_asn1.t b/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_asn1.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_asn1.t rename to src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_asn1.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_chacha.t b/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_chacha.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_chacha.t rename to src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_chacha.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_curve448.t b/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_curve448.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_curve448.t rename to src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_curve448.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_ec.t b/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_ec.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_ec.t rename to src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_ec.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_mdc2.t b/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_mdc2.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_mdc2.t rename to src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_mdc2.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_modes.t b/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_modes.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_modes.t rename to src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_modes.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_poly1305.t b/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_poly1305.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_poly1305.t rename to src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_poly1305.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_siphash.t b/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_siphash.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_siphash.t rename to src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_siphash.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_sm2.t b/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_sm2.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_sm2.t rename to src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_sm2.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_sm4.t b/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_sm4.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_sm4.t rename to src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_sm4.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_ssl_cert_table.t b/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_ssl_cert_table.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_ssl_cert_table.t rename to src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_ssl_cert_table.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_x509.t b/src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_x509.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/03-test_internal_x509.t rename to src/openssl/openssl-1.1.1w/test/recipes/03-test_internal_x509.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/03-test_ui.t b/src/openssl/openssl-1.1.1w/test/recipes/03-test_ui.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/03-test_ui.t rename to src/openssl/openssl-1.1.1w/test/recipes/03-test_ui.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_asn1_decode.t b/src/openssl/openssl-1.1.1w/test/recipes/04-test_asn1_decode.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_asn1_decode.t rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_asn1_decode.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_asn1_encode.t b/src/openssl/openssl-1.1.1w/test/recipes/04-test_asn1_encode.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_asn1_encode.t rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_asn1_encode.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_asn1_string_table.t b/src/openssl/openssl-1.1.1w/test/recipes/04-test_asn1_string_table.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_asn1_string_table.t rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_asn1_string_table.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_bio_callback.t b/src/openssl/openssl-1.1.1w/test/recipes/04-test_bio_callback.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_bio_callback.t rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_bio_callback.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_bioprint.t b/src/openssl/openssl-1.1.1w/test/recipes/04-test_bioprint.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_bioprint.t rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_bioprint.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_err.t b/src/openssl/openssl-1.1.1w/test/recipes/04-test_err.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_err.t rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_err.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem.t b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem.t rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/NOTES b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/NOTES similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/NOTES rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/NOTES diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/beermug.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/beermug.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/beermug.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/beermug.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-1023line.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-1023line.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-1023line.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-1023line.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-1024line.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-1024line.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-1024line.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-1024line.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-1025line.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-1025line.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-1025line.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-1025line.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-254-chars-at-the-end.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-254-chars-at-the-end.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-254-chars-at-the-end.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-254-chars-at-the-end.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-254-chars-in-the-middle.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-254-chars-in-the-middle.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-254-chars-in-the-middle.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-254-chars-in-the-middle.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-255line.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-255line.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-255line.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-255line.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-256line.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-256line.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-256line.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-256line.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-257line.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-257line.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-257line.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-257line.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-blankline.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-blankline.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-blankline.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-blankline.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-comment.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-comment.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-comment.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-comment.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-earlypad.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-earlypad.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-earlypad.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-earlypad.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-extrapad.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-extrapad.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-extrapad.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-extrapad.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-infixwhitespace.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-infixwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-infixwhitespace.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-infixwhitespace.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-junk.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-junk.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-junk.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-junk.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-leadingwhitespace.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-leadingwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-leadingwhitespace.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-leadingwhitespace.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-longline.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-longline.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-longline.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-longline.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-misalignedpad.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-misalignedpad.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-misalignedpad.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-misalignedpad.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-onecolumn.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-onecolumn.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-onecolumn.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-onecolumn.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-oneline-multiple-of-254.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-oneline-multiple-of-254.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-oneline-multiple-of-254.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-oneline-multiple-of-254.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-oneline.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-oneline.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-oneline.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-oneline.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-shortandlongline.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-shortandlongline.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-shortandlongline.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-shortandlongline.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-shortline.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-shortline.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-shortline.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-shortline.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-threecolumn.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-threecolumn.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-threecolumn.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-threecolumn.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-trailingwhitespace.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-trailingwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert-trailingwhitespace.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert-trailingwhitespace.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/cert.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/csr.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/csr.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/csr.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/csr.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-1023line.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-1023line.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-1023line.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-1023line.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-1024line.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-1024line.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-1024line.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-1024line.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-1025line.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-1025line.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-1025line.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-1025line.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-255line.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-255line.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-255line.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-255line.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-256line.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-256line.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-256line.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-256line.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-257line.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-257line.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-257line.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-257line.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-blankline.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-blankline.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-blankline.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-blankline.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-comment.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-comment.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-comment.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-comment.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-corruptedheader.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-corruptedheader.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-corruptedheader.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-corruptedheader.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-corruptiv.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-corruptiv.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-corruptiv.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-corruptiv.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-earlypad.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-earlypad.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-earlypad.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-earlypad.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-extrapad.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-extrapad.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-extrapad.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-extrapad.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-infixwhitespace.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-junk.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-junk.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-junk.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-junk.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-leadingwhitespace.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-leadingwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-leadingwhitespace.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-leadingwhitespace.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-longline.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-longline.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-longline.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-longline.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-misalignedpad.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-misalignedpad.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-misalignedpad.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-misalignedpad.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-onecolumn.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-onecolumn.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-onecolumn.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-onecolumn.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-oneline.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-oneline.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-oneline.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-oneline.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-onelineheader.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-onelineheader.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-onelineheader.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-onelineheader.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-shortandlongline.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-shortandlongline.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-shortandlongline.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-shortandlongline.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-shortline.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-shortline.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-shortline.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-shortline.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-threecolumn.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-threecolumn.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-threecolumn.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-threecolumn.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa-trailingwhitespace.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsa.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsa.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsaparam.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsaparam.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/dsaparam.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/dsaparam.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/key.pem b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/key.pem rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/key.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/wellknown b/src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/wellknown similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/04-test_pem_data/wellknown rename to src/openssl/openssl-1.1.1w/test/recipes/04-test_pem_data/wellknown diff --git a/src/openssl/openssl-1.1.1t/test/recipes/05-test_bf.t b/src/openssl/openssl-1.1.1w/test/recipes/05-test_bf.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/05-test_bf.t rename to src/openssl/openssl-1.1.1w/test/recipes/05-test_bf.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/05-test_cast.t b/src/openssl/openssl-1.1.1w/test/recipes/05-test_cast.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/05-test_cast.t rename to src/openssl/openssl-1.1.1w/test/recipes/05-test_cast.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/05-test_cmac.t b/src/openssl/openssl-1.1.1w/test/recipes/05-test_cmac.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/05-test_cmac.t rename to src/openssl/openssl-1.1.1w/test/recipes/05-test_cmac.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/05-test_des.t b/src/openssl/openssl-1.1.1w/test/recipes/05-test_des.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/05-test_des.t rename to src/openssl/openssl-1.1.1w/test/recipes/05-test_des.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/05-test_hmac.t b/src/openssl/openssl-1.1.1w/test/recipes/05-test_hmac.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/05-test_hmac.t rename to src/openssl/openssl-1.1.1w/test/recipes/05-test_hmac.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/05-test_idea.t b/src/openssl/openssl-1.1.1w/test/recipes/05-test_idea.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/05-test_idea.t rename to src/openssl/openssl-1.1.1w/test/recipes/05-test_idea.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/05-test_md2.t b/src/openssl/openssl-1.1.1w/test/recipes/05-test_md2.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/05-test_md2.t rename to src/openssl/openssl-1.1.1w/test/recipes/05-test_md2.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/05-test_mdc2.t b/src/openssl/openssl-1.1.1w/test/recipes/05-test_mdc2.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/05-test_mdc2.t rename to src/openssl/openssl-1.1.1w/test/recipes/05-test_mdc2.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/05-test_rand.t b/src/openssl/openssl-1.1.1w/test/recipes/05-test_rand.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/05-test_rand.t rename to src/openssl/openssl-1.1.1w/test/recipes/05-test_rand.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/05-test_rc2.t b/src/openssl/openssl-1.1.1w/test/recipes/05-test_rc2.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/05-test_rc2.t rename to src/openssl/openssl-1.1.1w/test/recipes/05-test_rc2.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/05-test_rc4.t b/src/openssl/openssl-1.1.1w/test/recipes/05-test_rc4.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/05-test_rc4.t rename to src/openssl/openssl-1.1.1w/test/recipes/05-test_rc4.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/05-test_rc5.t b/src/openssl/openssl-1.1.1w/test/recipes/05-test_rc5.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/05-test_rc5.t rename to src/openssl/openssl-1.1.1w/test/recipes/05-test_rc5.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/06-test-rdrand.t b/src/openssl/openssl-1.1.1w/test/recipes/06-test-rdrand.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/06-test-rdrand.t rename to src/openssl/openssl-1.1.1w/test/recipes/06-test-rdrand.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/10-test_bn.t b/src/openssl/openssl-1.1.1w/test/recipes/10-test_bn.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/10-test_bn.t rename to src/openssl/openssl-1.1.1w/test/recipes/10-test_bn.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/10-test_bn_data/bnexp.txt b/src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnexp.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/10-test_bn_data/bnexp.txt rename to src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnexp.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/10-test_bn_data/bngcd.txt b/src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bngcd.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/10-test_bn_data/bngcd.txt rename to src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bngcd.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/10-test_bn_data/bnmod.txt b/src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnmod.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/10-test_bn_data/bnmod.txt rename to src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnmod.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/10-test_bn_data/bnmul.txt b/src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnmul.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/10-test_bn_data/bnmul.txt rename to src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnmul.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/10-test_bn_data/bnshift.txt b/src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnshift.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/10-test_bn_data/bnshift.txt rename to src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnshift.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/10-test_bn_data/bnsum.txt b/src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnsum.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/10-test_bn_data/bnsum.txt rename to src/openssl/openssl-1.1.1w/test/recipes/10-test_bn_data/bnsum.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/10-test_exp.t b/src/openssl/openssl-1.1.1w/test/recipes/10-test_exp.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/10-test_exp.t rename to src/openssl/openssl-1.1.1w/test/recipes/10-test_exp.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_dh.t b/src/openssl/openssl-1.1.1w/test/recipes/15-test_dh.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_dh.t rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_dh.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_dsa.t b/src/openssl/openssl-1.1.1w/test/recipes/15-test_dsa.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_dsa.t rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_dsa.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ec.t b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ec.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ec.t rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ec.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecdsa.t b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecdsa.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecdsa.t rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecdsa.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam.t b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam.t rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/c2pnb208w1-reducible.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/nistp256-nonprime.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/nistp256-offcurve.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/invalid/nistp256-wrongorder.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v2-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb163v3-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb176v1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb208w1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb272w1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb304w1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2pnb368w1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v2-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb191v3-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v2-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb239v3-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb359v1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/c2tnb431r1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v2-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v2-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v3-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime192v3-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v2-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v2-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v3-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime239v3-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime256v1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/prime256v1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp112r2-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp128r2-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160k1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp160r2-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp192k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp192k1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224k1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp224r1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp256k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp256k1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp384r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp384r1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp521r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/secp521r1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect113r2-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect131r2-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163k1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect163r2-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r2-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect193r2-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233k1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect233r1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect239k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect239k1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283k1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect283r1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409k1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect409r1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571k1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571k1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571r1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/sect571r1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls1-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls10-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls11-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls12-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls3-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls4-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls5-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls6-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls7-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls8-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-explicit.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem b/src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_ecparam_data/valid/wap-wsg-idm-ecid-wtls9-named.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_genec.t b/src/openssl/openssl-1.1.1w/test/recipes/15-test_genec.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_genec.t rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_genec.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_genrsa.t b/src/openssl/openssl-1.1.1w/test/recipes/15-test_genrsa.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_genrsa.t rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_genrsa.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_mp_rsa.t b/src/openssl/openssl-1.1.1w/test/recipes/15-test_mp_rsa.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_mp_rsa.t rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_mp_rsa.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_mp_rsa_data/plain_text b/src/openssl/openssl-1.1.1w/test/recipes/15-test_mp_rsa_data/plain_text similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_mp_rsa_data/plain_text rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_mp_rsa_data/plain_text diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_out_option.t b/src/openssl/openssl-1.1.1w/test/recipes/15-test_out_option.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_out_option.t rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_out_option.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_rsa.t b/src/openssl/openssl-1.1.1w/test/recipes/15-test_rsa.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_rsa.t rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_rsa.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/15-test_rsapss.t b/src/openssl/openssl-1.1.1w/test/recipes/15-test_rsapss.t similarity index 81% rename from src/openssl/openssl-1.1.1t/test/recipes/15-test_rsapss.t rename to src/openssl/openssl-1.1.1w/test/recipes/15-test_rsapss.t index 65ec6f3d7..cea72ce98 100644 --- a/src/openssl/openssl-1.1.1t/test/recipes/15-test_rsapss.t +++ b/src/openssl/openssl-1.1.1w/test/recipes/15-test_rsapss.t @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2017-2019 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 2017-2023 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy @@ -16,7 +16,7 @@ use OpenSSL::Test::Utils; setup("test_rsapss"); -plan tests => 5; +plan tests => 7; #using test/testrsa.pem which happens to be a 512 bit RSA ok(run(app(['openssl', 'dgst', '-sign', srctop_file('test', 'testrsa.pem'), '-sha1', @@ -47,3 +47,11 @@ ok(run(app(['openssl', 'dgst', '-prverify', srctop_file('test', 'testrsa.pem'), srctop_file('test', 'testrsa.pem')])), "openssl dgst -prverify"); unlink 'testrsapss.sig'; + +ok(run(app(['openssl', 'genpkey', '-algorithm', 'RSA-PSS', '-pkeyopt', 'rsa_keygen_bits:1024', + '-pkeyopt', 'rsa_pss_keygen_md:SHA256', '-pkeyopt', 'rsa_pss_keygen_saltlen:10', + '-out', 'testrsapss.pem'])), + "openssl genpkey RSA-PSS with pss parameters"); +ok(run(app(['openssl', 'pkey', '-in', 'testrsapss.pem', '-pubout', '-text'])), + "openssl pkey, execute rsa_pub_encode with pss parameters"); +unlink 'testrsapss.pem'; diff --git a/src/openssl/openssl-1.1.1t/test/recipes/20-test_dgst.t b/src/openssl/openssl-1.1.1w/test/recipes/20-test_dgst.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/20-test_dgst.t rename to src/openssl/openssl-1.1.1w/test/recipes/20-test_dgst.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/20-test_enc.t b/src/openssl/openssl-1.1.1w/test/recipes/20-test_enc.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/20-test_enc.t rename to src/openssl/openssl-1.1.1w/test/recipes/20-test_enc.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/20-test_enc_more.t b/src/openssl/openssl-1.1.1w/test/recipes/20-test_enc_more.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/20-test_enc_more.t rename to src/openssl/openssl-1.1.1w/test/recipes/20-test_enc_more.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/20-test_passwd.t b/src/openssl/openssl-1.1.1w/test/recipes/20-test_passwd.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/20-test_passwd.t rename to src/openssl/openssl-1.1.1w/test/recipes/20-test_passwd.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/25-test_crl.t b/src/openssl/openssl-1.1.1w/test/recipes/25-test_crl.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/25-test_crl.t rename to src/openssl/openssl-1.1.1w/test/recipes/25-test_crl.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/25-test_d2i.t b/src/openssl/openssl-1.1.1w/test/recipes/25-test_d2i.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/25-test_d2i.t rename to src/openssl/openssl-1.1.1w/test/recipes/25-test_d2i.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/25-test_pkcs7.t b/src/openssl/openssl-1.1.1w/test/recipes/25-test_pkcs7.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/25-test_pkcs7.t rename to src/openssl/openssl-1.1.1w/test/recipes/25-test_pkcs7.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/25-test_req.t b/src/openssl/openssl-1.1.1w/test/recipes/25-test_req.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/25-test_req.t rename to src/openssl/openssl-1.1.1w/test/recipes/25-test_req.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/25-test_sid.t b/src/openssl/openssl-1.1.1w/test/recipes/25-test_sid.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/25-test_sid.t rename to src/openssl/openssl-1.1.1w/test/recipes/25-test_sid.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/25-test_verify.t b/src/openssl/openssl-1.1.1w/test/recipes/25-test_verify.t similarity index 97% rename from src/openssl/openssl-1.1.1t/test/recipes/25-test_verify.t rename to src/openssl/openssl-1.1.1w/test/recipes/25-test_verify.t index ffa48ed20..0084dd234 100644 --- a/src/openssl/openssl-1.1.1t/test/recipes/25-test_verify.t +++ b/src/openssl/openssl-1.1.1w/test/recipes/25-test_verify.t @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 2015-2023 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy @@ -27,7 +27,7 @@ sub verify { run(app([@args])); } -plan tests => 146; +plan tests => 148; # Canonical success ok(verify("ee-cert", "sslserver", ["root-cert"], ["ca-cert"]), @@ -409,3 +409,14 @@ SKIP: { "ED25519 signature"); } + +# Certificate Policies +ok(verify("ee-cert-policies", "sslserver", ["root-cert"], ["ca-pol-cert"], + "-policy_check", "-policy", "1.3.6.1.4.1.16604.998855.1", + "-explicit_policy"), + "Certificate policy"); + +ok(!verify("ee-cert-policies-bad", "sslserver", ["root-cert"], ["ca-pol-cert"], + "-policy_check", "-policy", "1.3.6.1.4.1.16604.998855.1", + "-explicit_policy"), + "Bad certificate policy"); diff --git a/src/openssl/openssl-1.1.1t/test/recipes/25-test_x509.t b/src/openssl/openssl-1.1.1w/test/recipes/25-test_x509.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/25-test_x509.t rename to src/openssl/openssl-1.1.1w/test/recipes/25-test_x509.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_afalg.t b/src/openssl/openssl-1.1.1w/test/recipes/30-test_afalg.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_afalg.t rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_afalg.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_engine.t b/src/openssl/openssl-1.1.1w/test/recipes/30-test_engine.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_engine.t rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_engine.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_evp.t b/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_evp.t rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_evp.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evpcase.txt b/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpcase.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evpcase.txt rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpcase.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evpccmcavs.txt b/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpccmcavs.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evpccmcavs.txt rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpccmcavs.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evpciph.txt b/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpciph.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evpciph.txt rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpciph.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evpdigest.txt b/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpdigest.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evpdigest.txt rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpdigest.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evpencod.txt b/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpencod.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evpencod.txt rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpencod.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evpkdf.txt b/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpkdf.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evpkdf.txt rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpkdf.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evpmac.txt b/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpmac.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evpmac.txt rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evpmac.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evppbe.txt b/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evppbe.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evppbe.txt rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evppbe.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evppkey.txt b/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evppkey.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evppkey.txt rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evppkey.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evppkey_ecc.txt b/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evppkey_ecc.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_data/evppkey_ecc.txt rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_data/evppkey_ecc.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_extra.t b/src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_extra.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_evp_extra.t rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_evp_extra.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_pbelu.t b/src/openssl/openssl-1.1.1w/test/recipes/30-test_pbelu.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_pbelu.t rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_pbelu.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_pkey_meth.t b/src/openssl/openssl-1.1.1w/test/recipes/30-test_pkey_meth.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_pkey_meth.t rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_pkey_meth.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/30-test_pkey_meth_kdf.t b/src/openssl/openssl-1.1.1w/test/recipes/30-test_pkey_meth_kdf.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/30-test_pkey_meth_kdf.t rename to src/openssl/openssl-1.1.1w/test/recipes/30-test_pkey_meth_kdf.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/40-test_rehash.t b/src/openssl/openssl-1.1.1w/test/recipes/40-test_rehash.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/40-test_rehash.t rename to src/openssl/openssl-1.1.1w/test/recipes/40-test_rehash.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/60-test_x509_check_cert_pkey.t b/src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_check_cert_pkey.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/60-test_x509_check_cert_pkey.t rename to src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_check_cert_pkey.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/60-test_x509_dup_cert.t b/src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_dup_cert.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/60-test_x509_dup_cert.t rename to src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_dup_cert.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/60-test_x509_store.t b/src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_store.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/60-test_x509_store.t rename to src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_store.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/60-test_x509_time.t b/src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_time.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/60-test_x509_time.t rename to src/openssl/openssl-1.1.1w/test/recipes/60-test_x509_time.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_asyncio.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_asyncio.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_asyncio.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_asyncio.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_bad_dtls.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_bad_dtls.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_bad_dtls.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_bad_dtls.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_clienthello.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_clienthello.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_clienthello.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_clienthello.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_comp.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_comp.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_comp.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_comp.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_key_share.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_key_share.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_key_share.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_key_share.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_packet.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_packet.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_packet.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_packet.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_recordlen.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_recordlen.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_recordlen.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_recordlen.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_renegotiation.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_renegotiation.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_renegotiation.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_renegotiation.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_servername.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_servername.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_servername.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_servername.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_sslcbcpadding.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslcbcpadding.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_sslcbcpadding.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_sslcbcpadding.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_sslcertstatus.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslcertstatus.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_sslcertstatus.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_sslcertstatus.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_sslextension.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslextension.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_sslextension.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_sslextension.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_sslmessages.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslmessages.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_sslmessages.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_sslmessages.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_sslrecords.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslrecords.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_sslrecords.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_sslrecords.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_sslsessiontick.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslsessiontick.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_sslsessiontick.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_sslsessiontick.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_sslsigalgs.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslsigalgs.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_sslsigalgs.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_sslsigalgs.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_sslsignature.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslsignature.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_sslsignature.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_sslsignature.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_sslskewith0p.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslskewith0p.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_sslskewith0p.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_sslskewith0p.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_sslversions.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslversions.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_sslversions.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_sslversions.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_sslvertol.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_sslvertol.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_sslvertol.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_sslvertol.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_tls13alerts.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13alerts.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_tls13alerts.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13alerts.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_tls13cookie.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13cookie.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_tls13cookie.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13cookie.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_tls13downgrade.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13downgrade.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_tls13downgrade.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13downgrade.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_tls13hrr.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13hrr.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_tls13hrr.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13hrr.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_tls13kexmodes.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13kexmodes.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_tls13kexmodes.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13kexmodes.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_tls13messages.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13messages.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_tls13messages.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13messages.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_tls13psk.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13psk.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_tls13psk.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_tls13psk.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_tlsextms.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_tlsextms.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_tlsextms.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_tlsextms.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_verify_extra.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_verify_extra.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_verify_extra.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_verify_extra.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/70-test_wpacket.t b/src/openssl/openssl-1.1.1w/test/recipes/70-test_wpacket.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/70-test_wpacket.t rename to src/openssl/openssl-1.1.1w/test/recipes/70-test_wpacket.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_ca.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_ca.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_ca.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_ca.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_cipherbytes.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_cipherbytes.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_cipherbytes.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_cipherbytes.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_cipherlist.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_cipherlist.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_cipherlist.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_cipherlist.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_ciphername.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_ciphername.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_ciphername.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_ciphername.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_cms.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_cms.t similarity index 98% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_cms.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_cms.t index 79ae1308e..544d4466b 100644 --- a/src/openssl/openssl-1.1.1t/test/recipes/80-test_cms.t +++ b/src/openssl/openssl-1.1.1w/test/recipes/80-test_cms.t @@ -288,6 +288,13 @@ my @smime_cms_tests = ( "-secretkey", "000102030405060708090A0B0C0D0E0F", "-out", "smtst.txt" ] ], + [ "encrypted content test streaming PEM format -noout, 128 bit AES key", + [ "-EncryptedData_encrypt", "-in", $smcont, "-outform", "PEM", + "-aes128", "-secretkey", "000102030405060708090A0B0C0D0E0F", + "-stream", "-noout" ], + [ "-help" ] + ], + ); my @smime_cms_comp_tests = ( @@ -590,7 +597,7 @@ with({ exit_checker => sub { return shift == 6; } }, sub { ok(run(app(['openssl', 'cms', '-encrypt', '-in', srctop_file("test", "smcont.txt"), - '-stream', '-recip', + '-aes128', '-stream', '-recip', srctop_file("test/smime-certs", "badrsa.pem"), ])), "Check failure during BIO setup with -stream is handled correctly"); diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_cms_data/bad_signtime_attr.cms b/src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/bad_signtime_attr.cms similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_cms_data/bad_signtime_attr.cms rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/bad_signtime_attr.cms diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_cms_data/ct_multiple_attr.cms b/src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/ct_multiple_attr.cms similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_cms_data/ct_multiple_attr.cms rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/ct_multiple_attr.cms diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_cms_data/no_ct_attr.cms b/src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/no_ct_attr.cms similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_cms_data/no_ct_attr.cms rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/no_ct_attr.cms diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_cms_data/no_md_attr.cms b/src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/no_md_attr.cms similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_cms_data/no_md_attr.cms rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_cms_data/no_md_attr.cms diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_cmsapi.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_cmsapi.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_cmsapi.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_cmsapi.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_ct.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_ct.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_ct.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_ct.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_dane.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_dane.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_dane.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_dane.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_dtls.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_dtls.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_dtls.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_dtls.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_dtls_mtu.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_dtls_mtu.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_dtls_mtu.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_dtls_mtu.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_dtlsv1listen.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_dtlsv1listen.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_dtlsv1listen.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_dtlsv1listen.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_ocsp.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_ocsp.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_ocsp.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_ocsp.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_ocsp_data/cert.pem b/src/openssl/openssl-1.1.1w/test/recipes/80-test_ocsp_data/cert.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_ocsp_data/cert.pem rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_ocsp_data/cert.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_ocsp_data/key.pem b/src/openssl/openssl-1.1.1w/test/recipes/80-test_ocsp_data/key.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_ocsp_data/key.pem rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_ocsp_data/key.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_pkcs12.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_pkcs12.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_pkcs12.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_pkcs12.t diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree.t new file mode 100644 index 000000000..1ddd65e89 --- /dev/null +++ b/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree.t @@ -0,0 +1,43 @@ +#! /usr/bin/env perl +# Copyright 2023 The OpenSSL Project Authors. All Rights Reserved. +# +# Licensed under the Apache License 2.0 (the "License"). You may not use +# this file except in compliance with the License. You can obtain a copy +# in the file LICENSE in the source distribution or at +# https://www.openssl.org/source/license.html + + +use strict; +use warnings; + +use POSIX; +use OpenSSL::Test qw/:DEFAULT srctop_file with data_file/; + +use OpenSSL::Test::Utils; +use OpenSSL::Glob; + +setup("test_policy_tree"); + +plan skip_all => "No EC support" if disabled("ec"); + +plan tests => 2; + +# The small pathological tree is expected to work +my $small_chain = srctop_file("test", "recipes", "80-test_policy_tree_data", + "small_policy_tree.pem"); +my $small_leaf = srctop_file("test", "recipes", "80-test_policy_tree_data", + "small_leaf.pem"); + +ok(run(app(["openssl", "verify", "-CAfile", $small_chain, + "-policy_check", $small_leaf])), + "test small policy tree"); + +# The large pathological tree is expected to fail +my $large_chain = srctop_file("test", "recipes", "80-test_policy_tree_data", + "large_policy_tree.pem"); +my $large_leaf = srctop_file("test", "recipes", "80-test_policy_tree_data", + "large_leaf.pem"); + +ok(!run(app(["openssl", "verify", "-CAfile", $large_chain, + "-policy_check", $large_leaf])), + "test large policy tree"); diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/large_leaf.pem b/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/large_leaf.pem new file mode 100644 index 000000000..39ed6a7fa --- /dev/null +++ b/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/large_leaf.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmTCCAT+gAwIBAgIBADAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg +Q0EgMTAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowGjEYMBYGA1UE +AxMPd3d3LmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEp6Qe +jrN6A0ZjqaFbX/zO01aVYXH5kthBDTEO/fU4H0CdwqrfyMsFrObwssrTJcsmSFKP +x1FYr8wT2wCACs19lqN4MHYwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMAwGA1UdEwEB/wQCMAAwGgYDVR0RBBMwEYIPd3d3LmV4YW1wbGUuY29t +MCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMAoGCCqGSM49 +BAMCA0gAMEUCIDGT8SVBkWJEZ2EzXm8M895NrNRmfc8uoheP0KKv+ndHAiEA2Onr +20J+zTaR7vONY/1DleMm7fGY3UxTobSHSvOKbfY= +-----END CERTIFICATE----- diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/large_policy_tree.pem b/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/large_policy_tree.pem new file mode 100644 index 000000000..5cd31c355 --- /dev/null +++ b/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/large_policy_tree.pem @@ -0,0 +1,434 @@ +-----BEGIN CERTIFICATE----- +MIICEDCCAbagAwIBAgIBATAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg +Q0EgMjAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE +AxMLUG9saWN5IENBIDEwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATgyLz1C0dD +ib5J/QmoE4d+Nf5yvvlzjVZHWIu7iCMEqK67cnA1RtMp1d0xdiNQS6si3ExNPBF+ +ELdkP0E6x26Jo4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF +BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSs+ml5upH1h25oUB0Ep4vd +SUdZ/DAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV +HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK +YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB +MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIhAOME8j1/cMogNnuNCb0O +RIOE9pLP4je78KJiP8CZm0iOAiALr8NI67orD/VpfRptkjCmOd7rTWMVOOJfBr6N +VJFLjw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICDzCCAbagAwIBAgIBAjAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg +Q0EgMzAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE +AxMLUG9saWN5IENBIDIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASIdzU/FF3Y +rTsTX04fRIN2yrZwxvOAfZ6DuEgKRxEimJx1nCyETuMmfDowm52mx/Cyk08xorp8 +PhGEbacMd9kio4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF +BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSwok/8RfJbVGTzyF5jhWLc +hO7pcDAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV +HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK +YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB +MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDRwAwRAIgYVF7bXxUuOzAZF6SmeIJ +s+iL15bLSQ2rW7QDc6QYp9MCIAup6YokIcr8JaGttHmLaKbASQLxYDGHhfFIVZuI +BDvT +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEDCCAbagAwIBAgIBAzAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg +Q0EgNDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE +AxMLUG9saWN5IENBIDMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ38Llxxj32 +H3NN4Z1V8IuRKXLNhdU4z+NbT1rahusEyAHF+z9VTjim+HHfqFKV1QyNOJZ4rMA9 +J/gODWsNCT4po4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF +BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS11YgFNKTx3a6kssIijnA9 +DiOhoTAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV +HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK +YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB +MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIhAJXNZHMpvlnMfxhcG6EF +Vw1pEXJ+iZnWT+Yu02a2zhamAiAiOKNhALBw/iKhQrwLo0cdx6UEfUKbaqTSGiax +tHUylA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEDCCAbagAwIBAgIBBDAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg +Q0EgNTAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE +AxMLUG9saWN5IENBIDQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATo81HWQ/we +egmoO/LMntQK1VQ9YzU627nblv/XWoOjEd/tBeE8+Un4jUnhZqNrP2TAzy48jEaT +1DShCQNQGek7o4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF +BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS6/F38QgbZSHib0W1XtMfs +4O5DTDAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV +HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK +YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB +MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIgXMYCQWi5/6iQw+zqyEav +CE7kOfTpm9GN4bZX5Eau5AACIQD0rDZwsjWf6hI2Hn8IlpwYVVC9bpxrAM/JmYuu +79V/uw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEDCCAbagAwIBAgIBBTAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg +Q0EgNjAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE +AxMLUG9saWN5IENBIDUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARsPMjOkmzJ +2jwT30mKUvAFYVgOlgcoXxYr61p54mbQMmmH49ABmJQMu5rjwjwYlYA3UzbEN9ki +hMsJz/4JIrJGo4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF +BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQeflZRWUze+7jne9MkYYy5 +iWFgJDAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV +HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK +YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB +MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIhAIN6BjMnPlixl3i6Z1Xa +pZQt52MOCHPm0XzXDn2XlC9+AiAn146u8rbppdEGMFr21vfFZaktwEb0cZkC9fBp +S1uKwQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEDCCAbagAwIBAgIBBjAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg +Q0EgNzAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE +AxMLUG9saWN5IENBIDYwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASVmpozZzxX +f6rFinkqS0y8sfbOwcM0gNuR0x83mmZH5+a8W4ug5W80QiBaS3rHtwTsFHpCeQKq +eJvfb/esgJu8o4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF +BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQPuF2sXR0vOHJynh57qefK ++h7RGDAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV +HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK +YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB +MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIgDX0jHPq1alZoMbPDmbZp +QYuM9UQagQ5KJgVU1B0Mh2ECIQCtdyfT2h5jZvz3lLKkQ9a6LddIuqsyNKDAxbpb +PlBOOA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEDCCAbagAwIBAgIBBzAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg +Q0EgODAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE +AxMLUG9saWN5IENBIDcwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASb+9fN9RLe +SHGynsKXhLWGhIS/kZ6Yl97+h23xpjLaZUOzhn5VafXdmLrQ4BmqSMHqIKzcc8IB +STV3NwO4NxPBo4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF +BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTBF9x+MrsyqoCaTQ2kB7Bn +tpK2qDAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV +HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK +YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB +MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIhAI37Di/5MrSj2clr+2pX +iXzeDIvlaxzVetyH3ibUZZBSAiA41aPIssHi9evv2mZonEvXY8g+DKbh/3L2mSub +/AyLoA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICETCCAbagAwIBAgIBCDAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg +Q0EgOTAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE +AxMLUG9saWN5IENBIDgwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASrRS12/zEP +RUNye9SLadN4xK+xfTwyXfxeC+jam+J98lOMcHz6abnLpk5tJ7wab4Pkygsbj1V2 +STxeW+YH23dto4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF +BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQYpYFLhosbir7KoyYdehsQ +6DdLfzAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV +HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK +YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB +MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSQAwRgIhAPTCN+zWFG2cFzJ+nlfg +JMY4U2e3vqTQmFeBXYlBASb9AiEA0KvsyNwloF1YeeaYcP5iHoRGRo8UMD3QWKEE +vWI14Uk= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEDCCAbegAwIBAgIBCTAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMTAwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBYxFDASBgNV +BAMTC1BvbGljeSBDQSA5MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoR4udEgt +usb9f946+Xznm7Q3OaW4DTZjO7wqX1I+27zDp0JrUbCZwtm0Cw+pYkG5kPpNcFTK +7yG3YgqM1sT+6aOB8jCB7zAOBgNVHQ8BAf8EBAMCAgQwEwYDVR0lBAwwCgYIKwYB +BQUHAwEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjgtOHvFBcUQ03AKUbvuJ +IWO5lzUwJQYDVR0gBB4wHDAMBgpghkgBZQMCATABMAwGCmCGSAFlAwIBMAIwcQYD +VR0hBGowaDAYBgpghkgBZQMCATABBgpghkgBZQMCATABMBgGCmCGSAFlAwIBMAEG +CmCGSAFlAwIBMAIwGAYKYIZIAWUDAgEwAgYKYIZIAWUDAgEwATAYBgpghkgBZQMC +ATACBgpghkgBZQMCATACMAoGCCqGSM49BAMCA0cAMEQCICIboTAzG1DvCY/0tA/o +l18zrW9qKVnt4mxih5JQe4fOAiBOF2ZeUT2/ZtdFhZmg+zl/fGrQ1xEx09/S956k +Ig4S9Q== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEjCCAbigAwIBAgIBCjAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMTEwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAxMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLxetqJp +VR6apJytboxFCCooQ7jVcc7yoHhjlH8HsaJS3GrWpyMgiqOfyWt4KFMynKkgCU1K +1QcU9aC5BfRQpyWjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFD6etMtD6Qpa7TjVQBgV +/4PhZP4DMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiEA+5uiOjJoq5nU7lKN +rZtBdYNqUKvHuYB+jiNEfWvxx2cCIFZEJCGw8fzqkAyGWkLe10w8PUzPM64nh757 +pEtxCzZh +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEjCCAbigAwIBAgIBCzAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMTIwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAxMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPQuXEeo +BrbyENdz9HqAoWMSQx1BErsUcQaneq3L0/VHHJBPKihb8s4nB/2yZaEarr8LFAvi +ofx+4egydkP0mJ+jgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIoC4qL79Uy3+m26Y+ch ++sE6gCOMMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiEAx/vMDhaH4EYTM2v9 +GeM1xTP9pNRgak69JQLKLu1VM1YCIF1RYC8Fma5Bc0cZAYY+Gj7dEf9qHj1TODA5 +C9es2CPY +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICETCCAbigAwIBAgIBDDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMTMwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAxMjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABDlEv73o +ej8Xvc3UodhSHkech80DbuBKdeldOTrRp6ZaVUP3vMgjNUJkh4WkvP3UVTe5SV4D +zQXDIiwAEJu+zdmjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCAn0wYXyRdliJOBFvvJ +eZoGTiyOMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNHADBEAiAo2PPmLBZpcT0bst/C +SXvnl3gztIZu89O1MKsNwFcM9QIgIzqZx/o9MF/fP7zbLWErVcUQViOGiCRBLVh7 +ppb7CoA= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEzCCAbigAwIBAgIBDTAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMTQwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAxMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABB8mgAoN +rmFo937IBKXKuxHedUjOL7y3cpDYD1H3C4HRDBQDVOL31lC5kJUhS4HBLvJQwebR +2kW35E3AnhbY/oKjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFBGbO20Xp/q0fPChjLHL +WuJwSNc1MCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEA3qGzdevdYfmiSBj9 +t9oE8hfEP+APqGiStlOLKD6xVK0CIQDq9cVa2KXMEz7YwmMO3lxoQFDPEXftbRaC +edFB7q/YXg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEzCCAbigAwIBAgIBDjAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMTUwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAxNDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHDiOMtx +5sfJs/WDnw0xS5NYlkbgy2eOZHAmC/jhRp6cjShZrr2/S4IJsH8B2VMcYAHgum6a +eMjqWFIMxIjN5xyjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOWtYUeAPk66m0o6Z7ax +1RN42wmkMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEA+AcazVKKPfqkpcJw +rkXWIyZrTe+1PNETQzaJCooGNGkCIQDdfHf1I78e+ogaDcjkDe0s3R9VhkvjCty6 +uKKFtNGHMQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEjCCAbigAwIBAgIBDzAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMTYwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAxNTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKCkdSYz ++zyHItG2rQSyCh018b4bu9Zrw8nzkCBgkT2IyycNtpabYkWhxcEL29ZFqBnB+l7N +5fYmHl5CmflJPh+jgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNanrmjMEN3PndPGeucm +mST9ucNWMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiAFt48yhTTv0rP29N8H +yRhAQGfnV4t1b8JucixLSfe32QIhAOef6iiwLxbBOMUn5ZN/WAK5TERem6DLSzWN +/PTXHAAt +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICETCCAbigAwIBAgIBEDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMTcwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAxNjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH5txyDp +DfRsIyYPTAQ+fuxk08E3/tpChVWoog4XQvod61wcUO1/nhoTGNKZZOhN5uhKWJWb +1futz+XxV2QxTCyjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHSlcxgh3gxgVag1JvAk +zbHlgMbEMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNHADBEAiA9Ee47PnxqW0QmELB+ +dd90Fz8wcQFZlNmkPW4Oq2xr/wIgGlxfutQq7l3TU5hyyO0Lh01AHn2DC5KPFPwE +l8S9VeY= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEzCCAbigAwIBAgIBETAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMTgwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABAJvlQKB +gJZ+Tysa6iwhllPXCeJrkan6WUm+oqOIY02/SpI5Mba1Kwg73Fsswx3Eywt8sxA2 +4fiaqwg+xZoil06jgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFM/udZ1ib8qDfShdfdfX +8gL6w7VMMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEA6kK7vAYF2TPXzywn ++SDLsiGbU6Sj8aTtsJZf9DmhKr4CIQCt4FfI7IWinqNlURXe4HSBPsekcQkOpwjK +PuJRx3fuFw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEzCCAbigAwIBAgIBEjAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMTkwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAxODBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEerejCw +gAy7GecLVbQw6eL8k1cGWwLt+wl3sn8he8fA0I+KoFfcOCgtvOF59RMXnjZ1+7OC +kz3mNDVSbKY6KO2jgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFM0OUOtOKTcTMRXGQwbw +GOoLCOEYMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEAziPsm2dArB/3ILqm +04mZl8/DX6dB4EmU+FPF2UpAeLwCIQCofc27tisg3L1mPNeiwZ26+rDe5SdixiUc +S3KWOJ1cTg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEjCCAbigAwIBAgIBEzAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMjAwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAxOTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPmB5spr +C64/21ssufcbshGnQtAWbk2o2l+ej6pMMPIZhmNyvM450L3dFX12UBNcaERCABmr +BEJL7IubGWE9CVOjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJCh/1mh0Hl2+LE0osUv +OJCmV3IYMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiEAtxMIkO4xCRSQCU6d +0jt+Go4xj/R4bQFWbZrlS9+fYUECICuWAgT3evhoo34o04pU84UaYOvO5V0GJsTt +hrS1v3hT +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEzCCAbigAwIBAgIBFDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMjEwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAyMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHdvTDYo +M/padIV3LdTnrzwMy1HSTeJ2aTUalkVV17uL2i3C51rWM2pl+qlRordq6W2GboMz +/+78HhKMcCrMWKCjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFAbZN0eSPw3MyvWIEix6 +GnYRIiFkMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEAlaapLXHwGNkeEwc0 +jsY2XhuR3RlVhD4T2k/QyJRQ0s0CIQD5E+e+5QTe5s+534Lwcxe2iFb3oFm+8g81 +OBVtfmSMGg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEjCCAbigAwIBAgIBFTAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMjIwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAyMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLTu8R5Y +7Po4W05hWperfod6mXezwWgAVk2RW2EG2vy4NeZeML2EFhg2geNc6N5Goep9t7pn +d+BtORRvR75oCDijgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNs0d2vXsRj3YYsBrWDo +jrvcEA+eMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiBB603Ui+L60FcUWPrB +Ch06hmgle2u0P07Go/XjTk00ZQIhALGhNArJFEY0gu+XUtyKEZt7BZ0/sh5dtLDP +xkRgR6Wh +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEzCCAbigAwIBAgIBFjAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMjMwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAyMjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABPXpzC9/ +KGblQyjhdcS0a8KBPAiS7c0n+V0i9JItbyze38Ncrctp0wIGHZLjRoB4DZYX1I8e +K5C7KVeUPEE9eOGjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFISsw9orkX/cBVWcK5KA +//kldz8HMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEA1gazdApLS91ql8Am +4gb4Ku7Lgll4jV+BrLkbABE2cI0CIQCEH1GUJ6ARJB1GdcHrPyaLgeZ5jV2p63UW +UV2QL6aETA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEjCCAbigAwIBAgIBFzAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMjQwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAyMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKdweprb +RZmuUk4og1Xa9Skb1vu7jsLozlm9CtDhKLbJ+cDX/VeKj/b8FuvakBO3L1QV5XU0 +iFswsIVBVZ3m+TyjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPgcEbHfKHt0o/PCS0kD +XWW9XkqMMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiEA9XDj0w5qMS/tLlr9 +Z2j8JtVR4M7pF/Wx2U43vmPFJEACIBAlAiUnCm1Nfj16t2cojrW+m2t1cU80ihmj +Ld1U+dRD +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICETCCAbigAwIBAgIBGDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMjUwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAyNDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABAq2PphK +4oVsc+ml3zskBLiMa+dz64k+PrrfKIGSG2Ri5Du/orj0dO9639LeCkkMwWpXAfSx +wxHHQX0I1KwsudGjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEqcfkso+ynKq2eFaJy8 +mzNBdN2PMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNHADBEAiBZ71jDD33HFFqMkLAW +gTAGMmzh9b/vZ8jAclPDKHRghQIgf2GBOF1eEF8Ino9F1n1ia5c3EryvXnvVoklw +cjMIQ5g= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEjCCAbigAwIBAgIBGTAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMjYwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAyNTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJRoDkj7 +iDlIygt4YmMgw4pizu2sx4436MGtw5fFHhjy7T+pPMGjYFg3dixxUOu1NHORpdJq +8Y7SN8p8Y0XsDpijgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOutMoKSOv5lEGZaqYZM +zNFwpX3KMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiEAks62lsAHmN6xkZsF +6ocGONpH/XmHLpoO6RfMoRCnWkICIFNFD+W6pSSvdDB96sn8jnZ7W/Y0hyLzscBO +WtkzqqJJ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEzCCAbigAwIBAgIBGjAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMjcwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAyNjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABE3seRj5 +LVNKi9sZk7qv5cBVUG8BLXXfDRUhCUzT10YAU1J0yd2wmLTbwPyYm65GaecvAHSR +SExOzX6bC35nNt6jgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNx5XhDdoflDgPrW/HyU +tCokuJ0AMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEApAQVb0KQedyAw1SJ +J8At4uxxm2b8W13s6ENapxw+lwwCIQC7326NFPsDjbfBKhFDQhCIMkAkYq2wzRJ7 +ubTwkdT19g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEzCCAbigAwIBAgIBGzAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMjgwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAyNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABC+FQF2E +TrZ4YGNyxFxzpTQBjlu9QUrwgHzabAn47toqRkWUGAS68jBfSdR+j2c7/oehQHhO +relHcbQilhZnh4ijgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIOlwsa4FjZWhzQYTAY3 +c2TSYhsEMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEAwxNBi+8baAU76yng ++XvMpY62aqPO4bAe/uedaxBb2jMCIQDJHXqibgIAm1T4/YHimllVlLQudQL5OkbF +Krj3uVHtBg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEjCCAbigAwIBAgIBHDAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMjkwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAyODBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBmhjGvk +C3QfSVdY5zuHEY4Rf3eKVro6vcKymgdBPFjjDggZNktR3OMnayCabJB51g2VL7Fg +MegdwzJWzPvQreyjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEvevGIfitXek0IStYIR +5ne2SkJwMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiBzlv0TggDJWUWx0UHl +cqxuMpoNdy+ifizQIlcjWcrzvgIhAJdQfkPaZdc4/j/HfGaVNN9InJuBWGrPYU6A +iwsSB0jY +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEzCCAbigAwIBAgIBHTAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMzAwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAyOTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCrC5p+Z +ywMukm1LRuXeJ5V1M6V+8A8PjqB3tgHVeEn973HOfia8lt2/7EoKaLKzP8A7D3eC +aBJUmTgHauaolYOjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFGG5D5h1FRA+aZMbSXfZ +Mp8pjYUEMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNJADBGAiEAnI2IhyXtBCRiv+Xs +EzsO497oVf1U8SJiVR8SaEx0gzgCIQC0+un/Hcb0OWvpvoeHKcRi7e8SZkX+vn2i +u+KsPqlfzA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEjCCAbigAwIBAgIBHjAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMzEwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAzMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHg1qbhT +bpV0agLQkk6di7EdwrrqIn7yCiBCfPwoDI7czY1bHwkR2E8EdrG4ZLBHHFXYNHau +kEo9nueljxbA6MGjgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFGXSqDk/Zov8a62kkXDr +8YhtqdkTMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiEA1D2Fm3D8REQtj8o4 +ZrnDyWam0Rx6cEMsvmeoafOBUeUCIBW0IoUYmF46faRQWKN7R8wnvbjUw0bxztzy +okUR5Pma +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEjCCAbigAwIBAgIBHzAKBggqhkjOPQQDAjAXMRUwEwYDVQQDEwxQb2xpY3kg +Q0EgMzEwIBcNMDAwMTAxMDAwMDAwWhgPMjEwMDAxMDEwMDAwMDBaMBcxFTATBgNV +BAMTDFBvbGljeSBDQSAzMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIwGMmHl +/QJSpu6KHakSe4gkf3L+NpsrtQpxu6sNfmSjO++dGv6sj2v3+DZNeyagVUJRVHaD +IZzpoyVVrBBO6vijgfIwge8wDgYDVR0PAQH/BAQDAgIEMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFA+f9g1sP2kM5sOT/8Ge +IDKq5FcUMCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMHEG +A1UdIQRqMGgwGAYKYIZIAWUDAgEwAQYKYIZIAWUDAgEwATAYBgpghkgBZQMCATAB +BgpghkgBZQMCATACMBgGCmCGSAFlAwIBMAIGCmCGSAFlAwIBMAEwGAYKYIZIAWUD +AgEwAgYKYIZIAWUDAgEwAjAKBggqhkjOPQQDAgNIADBFAiEAvQlbAmF3pS041Zo2 +eHrxMO3j8thB+XqHU8RatCZ60WACIG1vUFPH7UwzTTann7Sgp4s+Gd/jLOkrJnEk +W3De9dSX +-----END CERTIFICATE----- diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/small_leaf.pem b/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/small_leaf.pem new file mode 100644 index 000000000..c40ddff9e --- /dev/null +++ b/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/small_leaf.pem @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBmjCCAT+gAwIBAgIBADAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg +Q0EgMTAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowGjEYMBYGA1UE +AxMPd3d3LmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAER7oh +z+MnwilNhyEB2bZTuYBpeiwW4QlpYZU6b/8uWOldyMXCaPmaXwY60nrMznfFJX6F +h8dC6XIzvQmjUMdSoqN4MHYwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMAwGA1UdEwEB/wQCMAAwGgYDVR0RBBMwEYIPd3d3LmV4YW1wbGUuY29t +MCUGA1UdIAQeMBwwDAYKYIZIAWUDAgEwATAMBgpghkgBZQMCATACMAoGCCqGSM49 +BAMCA0kAMEYCIQC2km5juUULIRYsRgHuLFEiABBR0pDAyTbl9LRjlkSeEQIhAO9b +ye60dMNbhY1OOzrr4mDRv0tuNmbGBErcFs61YZkC +-----END CERTIFICATE----- diff --git a/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/small_policy_tree.pem b/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/small_policy_tree.pem new file mode 100644 index 000000000..040542d16 --- /dev/null +++ b/src/openssl/openssl-1.1.1w/test/recipes/80-test_policy_tree_data/small_policy_tree.pem @@ -0,0 +1,70 @@ +-----BEGIN CERTIFICATE----- +MIICETCCAbagAwIBAgIBATAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg +Q0EgMjAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE +AxMLUG9saWN5IENBIDEwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQu7GyNFjN6 +Sqwk1CZAt+lzTC/Us6ZkO5nsmb8yAuPb6RJ0A2LvUbsmZea+UyBFq3VuEbbuCoeE +KRbKkS6wefAzo4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF +BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSQkJvfn8gFHIXVTBJ4hrtP +ypA9QTAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV +HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK +YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB +MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSQAwRgIhALn6/b3H+jLusJE5QiaS +PiwrLcl+NDguWCnxo0c6AfduAiEApkXUN+7vRfXeFFd9CfA1BnTW3eUzBOsukZoN +zaj+utk= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICDzCCAbagAwIBAgIBAjAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg +Q0EgMzAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE +AxMLUG9saWN5IENBIDIwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAT+p+A+K6MI +R3eVP/+2O7lam32HU10frEKpyQslZAabYJwkc9iq5WatMbTMPQibuOIWHFl02uJ8 +cxGKy/Hke8P5o4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF +BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSSOt6HCXw+L/4uzJsInqqA +XrWt8DAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV +HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK +YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB +MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDRwAwRAIgS/vh3osFy+q1MLuVnAdg +gMINfiIJw1+3zbYsJYlNhWgCICu6Qgzee4NwIrJagcdVA0RAfnCOo6wfvikpl0ts +EepA +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEDCCAbagAwIBAgIBAzAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg +Q0EgNDAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE +AxMLUG9saWN5IENBIDMwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQONHKgpAJ6 +vE41FYBekpLzybpBQp/gUmgRPKrcL0z4lLTDjCG3j6yIbZma8u2bPM1MBXw5otZ7 +xVFhQ1AkZIOco4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF +BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQ69465BL89BXORf4sSnneU +exkm0jAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV +HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK +YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB +MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIhAPK9PqPxgme9x6TPFh2z +vv+qVEM2WxOTdRKOPgUYzCp9AiBl8qO3szv5jNDzb0fRIqVp37v9yBjWcgO9Wl02 +QDCpGw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICETCCAbagAwIBAgIBBDAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg +Q0EgNTAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE +AxMLUG9saWN5IENBIDQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAASLrUP7BFi7 ++LE2uDVCZ2Z2HK6BpL/kjBbwKkLxlJe+LqNolzu53b8+WtHwrvPPVkD9t3KMdWXU +K7NtHYgXUz07o4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF +BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS0kaY2oJVEBLtjkqI8pXsv +eqm3VDAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV +HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK +YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB +MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSQAwRgIhAJuTMvMUda4Y29V1Tm5O +jCqBThR2NwdQfnET1sjch3Q7AiEA7nEudfXKMljjz608aWtafTkw5V5I2/SbuUKr +vjprfIo= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICEDCCAbagAwIBAgIBBTAKBggqhkjOPQQDAjAWMRQwEgYDVQQDEwtQb2xpY3kg +Q0EgNTAgFw0wMDAxMDEwMDAwMDBaGA8yMTAwMDEwMTAwMDAwMFowFjEUMBIGA1UE +AxMLUG9saWN5IENBIDUwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ9RuYVzUGB +FkAEM9kHe9xynDo/NcsiaAO3+E2u7jJQQN50d6hVEDHf9961omldhKhP4HTNfhqj +VMIHKGMhXCgKo4HyMIHvMA4GA1UdDwEB/wQEAwICBDATBgNVHSUEDDAKBggrBgEF +BQcDATAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTVrjWaVjkfMpilq5tGZ4zZ +iJtaSDAlBgNVHSAEHjAcMAwGCmCGSAFlAwIBMAEwDAYKYIZIAWUDAgEwAjBxBgNV +HSEEajBoMBgGCmCGSAFlAwIBMAEGCmCGSAFlAwIBMAEwGAYKYIZIAWUDAgEwAQYK +YIZIAWUDAgEwAjAYBgpghkgBZQMCATACBgpghkgBZQMCATABMBgGCmCGSAFlAwIB +MAIGCmCGSAFlAwIBMAIwCgYIKoZIzj0EAwIDSAAwRQIhAPVgPpACX2ylQMEMSntw +izxKHTSPhXuF6IHhNHRz7KFnAiB8y/QcF7N2iXNZEqffWSkVted/XOw3Xrck0sJ6 +4eXNcw== +-----END CERTIFICATE----- diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_ssl_new.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_ssl_new.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_ssl_new.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_ssl_new.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_ssl_old.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_ssl_old.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_ssl_old.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_ssl_old.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_ssl_test_ctx.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_ssl_test_ctx.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_ssl_test_ctx.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_ssl_test_ctx.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_sslcorrupt.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_sslcorrupt.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_sslcorrupt.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_sslcorrupt.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_tsa.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_tsa.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_tsa.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_tsa.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/80-test_x509aux.t b/src/openssl/openssl-1.1.1w/test/recipes/80-test_x509aux.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/80-test_x509aux.t rename to src/openssl/openssl-1.1.1w/test/recipes/80-test_x509aux.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_asn1_time.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_asn1_time.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_asn1_time.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_asn1_time.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_async.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_async.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_async.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_async.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_bio_enc.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_bio_enc.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_bio_enc.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_bio_enc.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_bio_memleak.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_bio_memleak.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_bio_memleak.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_bio_memleak.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_constant_time.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_constant_time.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_constant_time.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_constant_time.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_fatalerr.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_fatalerr.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_fatalerr.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_fatalerr.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_gmdiff.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_gmdiff.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_gmdiff.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_gmdiff.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_gost.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_gost.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_gost.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_gost.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_gost_data/gost.conf b/src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/gost.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_gost_data/gost.conf rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/gost.conf diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_gost_data/server-cert2001.pem b/src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-cert2001.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_gost_data/server-cert2001.pem rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-cert2001.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_gost_data/server-cert2012.pem b/src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-cert2012.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_gost_data/server-cert2012.pem rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-cert2012.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_gost_data/server-key2001.pem b/src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-key2001.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_gost_data/server-key2001.pem rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-key2001.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_gost_data/server-key2012.pem b/src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-key2012.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_gost_data/server-key2012.pem rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_gost_data/server-key2012.pem diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_ige.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_ige.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_ige.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_ige.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_includes.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_includes.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_includes.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/conf-includes/includes1.cnf b/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/conf-includes/includes1.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/conf-includes/includes1.cnf rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/conf-includes/includes1.cnf diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/conf-includes/includes2.cnf b/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/conf-includes/includes2.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/conf-includes/includes2.cnf rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/conf-includes/includes2.cnf diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/includes-broken.cnf b/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-broken.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/includes-broken.cnf rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-broken.cnf diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/includes-eq-ws.cnf b/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-eq-ws.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/includes-eq-ws.cnf rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-eq-ws.cnf diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/includes-eq.cnf b/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-eq.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/includes-eq.cnf rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-eq.cnf diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/includes-file.cnf b/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-file.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/includes-file.cnf rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes-file.cnf diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/includes.cnf b/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/includes.cnf rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/includes.cnf diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/vms-includes-file.cnf b/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/vms-includes-file.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/vms-includes-file.cnf rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/vms-includes-file.cnf diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/vms-includes.cnf b/src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/vms-includes.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_includes_data/vms-includes.cnf rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_includes_data/vms-includes.cnf diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_memleak.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_memleak.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_memleak.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_memleak.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_overhead.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_overhead.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_overhead.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_overhead.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_secmem.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_secmem.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_secmem.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_secmem.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_shlibload.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_shlibload.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_shlibload.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_shlibload.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_srp.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_srp.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_srp.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_srp.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_sslapi.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_sslapi.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_sslapi.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_sslapi.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_sslapi_data/passwd.txt b/src/openssl/openssl-1.1.1w/test/recipes/90-test_sslapi_data/passwd.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_sslapi_data/passwd.txt rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_sslapi_data/passwd.txt diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_sslbuffers.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_sslbuffers.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_sslbuffers.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_sslbuffers.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_store.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_store.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_store.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_store.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_store_data/ca.cnf b/src/openssl/openssl-1.1.1w/test/recipes/90-test_store_data/ca.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_store_data/ca.cnf rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_store_data/ca.cnf diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_store_data/user.cnf b/src/openssl/openssl-1.1.1w/test/recipes/90-test_store_data/user.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_store_data/user.cnf rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_store_data/user.cnf diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_sysdefault.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_sysdefault.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_sysdefault.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_sysdefault.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_threads.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_threads.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_threads.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_threads.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_time_offset.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_time_offset.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_time_offset.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_time_offset.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_tls13ccs.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_tls13ccs.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_tls13ccs.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_tls13ccs.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_tls13encryption.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_tls13encryption.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_tls13encryption.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_tls13encryption.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_tls13secrets.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_tls13secrets.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_tls13secrets.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_tls13secrets.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/90-test_v3name.t b/src/openssl/openssl-1.1.1w/test/recipes/90-test_v3name.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/90-test_v3name.t rename to src/openssl/openssl-1.1.1w/test/recipes/90-test_v3name.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/95-test_external_boringssl.t b/src/openssl/openssl-1.1.1w/test/recipes/95-test_external_boringssl.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/95-test_external_boringssl.t rename to src/openssl/openssl-1.1.1w/test/recipes/95-test_external_boringssl.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/95-test_external_krb5.t b/src/openssl/openssl-1.1.1w/test/recipes/95-test_external_krb5.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/95-test_external_krb5.t rename to src/openssl/openssl-1.1.1w/test/recipes/95-test_external_krb5.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/95-test_external_krb5_data/krb5.sh b/src/openssl/openssl-1.1.1w/test/recipes/95-test_external_krb5_data/krb5.sh similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/95-test_external_krb5_data/krb5.sh rename to src/openssl/openssl-1.1.1w/test/recipes/95-test_external_krb5_data/krb5.sh diff --git a/src/openssl/openssl-1.1.1t/test/recipes/95-test_external_pyca.t b/src/openssl/openssl-1.1.1w/test/recipes/95-test_external_pyca.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/95-test_external_pyca.t rename to src/openssl/openssl-1.1.1w/test/recipes/95-test_external_pyca.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/95-test_external_pyca_data/cryptography.sh b/src/openssl/openssl-1.1.1w/test/recipes/95-test_external_pyca_data/cryptography.sh similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/95-test_external_pyca_data/cryptography.sh rename to src/openssl/openssl-1.1.1w/test/recipes/95-test_external_pyca_data/cryptography.sh diff --git a/src/openssl/openssl-1.1.1t/test/recipes/99-test_ecstress.t b/src/openssl/openssl-1.1.1w/test/recipes/99-test_ecstress.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/99-test_ecstress.t rename to src/openssl/openssl-1.1.1w/test/recipes/99-test_ecstress.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/99-test_fuzz.t b/src/openssl/openssl-1.1.1w/test/recipes/99-test_fuzz.t similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/99-test_fuzz.t rename to src/openssl/openssl-1.1.1w/test/recipes/99-test_fuzz.t diff --git a/src/openssl/openssl-1.1.1t/test/recipes/ocsp-response.der b/src/openssl/openssl-1.1.1w/test/recipes/ocsp-response.der similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/ocsp-response.der rename to src/openssl/openssl-1.1.1w/test/recipes/ocsp-response.der diff --git a/src/openssl/openssl-1.1.1t/test/recipes/tconversion.pl b/src/openssl/openssl-1.1.1w/test/recipes/tconversion.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recipes/tconversion.pl rename to src/openssl/openssl-1.1.1w/test/recipes/tconversion.pl diff --git a/src/openssl/openssl-1.1.1t/test/recordlentest.c b/src/openssl/openssl-1.1.1w/test/recordlentest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/recordlentest.c rename to src/openssl/openssl-1.1.1w/test/recordlentest.c diff --git a/src/openssl/openssl-1.1.1t/test/rsa_complex.c b/src/openssl/openssl-1.1.1w/test/rsa_complex.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/rsa_complex.c rename to src/openssl/openssl-1.1.1w/test/rsa_complex.c diff --git a/src/openssl/openssl-1.1.1t/test/rsa_mp_test.c b/src/openssl/openssl-1.1.1w/test/rsa_mp_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/rsa_mp_test.c rename to src/openssl/openssl-1.1.1w/test/rsa_mp_test.c diff --git a/src/openssl/openssl-1.1.1t/test/rsa_test.c b/src/openssl/openssl-1.1.1w/test/rsa_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/rsa_test.c rename to src/openssl/openssl-1.1.1w/test/rsa_test.c diff --git a/src/openssl/openssl-1.1.1t/test/run_tests.pl b/src/openssl/openssl-1.1.1w/test/run_tests.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/test/run_tests.pl rename to src/openssl/openssl-1.1.1w/test/run_tests.pl diff --git a/src/openssl/openssl-1.1.1t/test/sanitytest.c b/src/openssl/openssl-1.1.1w/test/sanitytest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/sanitytest.c rename to src/openssl/openssl-1.1.1w/test/sanitytest.c diff --git a/src/openssl/openssl-1.1.1t/test/secmemtest.c b/src/openssl/openssl-1.1.1w/test/secmemtest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/secmemtest.c rename to src/openssl/openssl-1.1.1w/test/secmemtest.c diff --git a/src/openssl/openssl-1.1.1t/test/serverinfo.pem b/src/openssl/openssl-1.1.1w/test/serverinfo.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/serverinfo.pem rename to src/openssl/openssl-1.1.1w/test/serverinfo.pem diff --git a/src/openssl/openssl-1.1.1t/test/serverinfo2.pem b/src/openssl/openssl-1.1.1w/test/serverinfo2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/serverinfo2.pem rename to src/openssl/openssl-1.1.1w/test/serverinfo2.pem diff --git a/src/openssl/openssl-1.1.1t/test/servername_test.c b/src/openssl/openssl-1.1.1w/test/servername_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/servername_test.c rename to src/openssl/openssl-1.1.1w/test/servername_test.c diff --git a/src/openssl/openssl-1.1.1t/test/session.pem b/src/openssl/openssl-1.1.1w/test/session.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/session.pem rename to src/openssl/openssl-1.1.1w/test/session.pem diff --git a/src/openssl/openssl-1.1.1t/test/shibboleth.pfx b/src/openssl/openssl-1.1.1w/test/shibboleth.pfx similarity index 100% rename from src/openssl/openssl-1.1.1t/test/shibboleth.pfx rename to src/openssl/openssl-1.1.1w/test/shibboleth.pfx diff --git a/src/openssl/openssl-1.1.1t/test/shlibloadtest.c b/src/openssl/openssl-1.1.1w/test/shlibloadtest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/shlibloadtest.c rename to src/openssl/openssl-1.1.1w/test/shlibloadtest.c diff --git a/src/openssl/openssl-1.1.1t/test/siphash_internal_test.c b/src/openssl/openssl-1.1.1w/test/siphash_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/siphash_internal_test.c rename to src/openssl/openssl-1.1.1w/test/siphash_internal_test.c diff --git a/src/openssl/openssl-1.1.1t/test/sm2_internal_test.c b/src/openssl/openssl-1.1.1w/test/sm2_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/sm2_internal_test.c rename to src/openssl/openssl-1.1.1w/test/sm2_internal_test.c diff --git a/src/openssl/openssl-1.1.1t/test/sm4_internal_test.c b/src/openssl/openssl-1.1.1w/test/sm4_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/sm4_internal_test.c rename to src/openssl/openssl-1.1.1w/test/sm4_internal_test.c diff --git a/src/openssl/openssl-1.1.1t/test/smcont.txt b/src/openssl/openssl-1.1.1w/test/smcont.txt similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smcont.txt rename to src/openssl/openssl-1.1.1w/test/smcont.txt diff --git a/src/openssl/openssl-1.1.1t/test/smime-certs/badrsa.pem b/src/openssl/openssl-1.1.1w/test/smime-certs/badrsa.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smime-certs/badrsa.pem rename to src/openssl/openssl-1.1.1w/test/smime-certs/badrsa.pem diff --git a/src/openssl/openssl-1.1.1t/test/smime-certs/ca.cnf b/src/openssl/openssl-1.1.1w/test/smime-certs/ca.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smime-certs/ca.cnf rename to src/openssl/openssl-1.1.1w/test/smime-certs/ca.cnf diff --git a/src/openssl/openssl-1.1.1t/test/smime-certs/mksmime-certs.sh b/src/openssl/openssl-1.1.1w/test/smime-certs/mksmime-certs.sh similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smime-certs/mksmime-certs.sh rename to src/openssl/openssl-1.1.1w/test/smime-certs/mksmime-certs.sh diff --git a/src/openssl/openssl-1.1.1t/test/smime-certs/smdh.pem b/src/openssl/openssl-1.1.1w/test/smime-certs/smdh.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smime-certs/smdh.pem rename to src/openssl/openssl-1.1.1w/test/smime-certs/smdh.pem diff --git a/src/openssl/openssl-1.1.1t/test/smime-certs/smdsa1.pem b/src/openssl/openssl-1.1.1w/test/smime-certs/smdsa1.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smime-certs/smdsa1.pem rename to src/openssl/openssl-1.1.1w/test/smime-certs/smdsa1.pem diff --git a/src/openssl/openssl-1.1.1t/test/smime-certs/smdsa2.pem b/src/openssl/openssl-1.1.1w/test/smime-certs/smdsa2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smime-certs/smdsa2.pem rename to src/openssl/openssl-1.1.1w/test/smime-certs/smdsa2.pem diff --git a/src/openssl/openssl-1.1.1t/test/smime-certs/smdsa3.pem b/src/openssl/openssl-1.1.1w/test/smime-certs/smdsa3.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smime-certs/smdsa3.pem rename to src/openssl/openssl-1.1.1w/test/smime-certs/smdsa3.pem diff --git a/src/openssl/openssl-1.1.1t/test/smime-certs/smdsap.pem b/src/openssl/openssl-1.1.1w/test/smime-certs/smdsap.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smime-certs/smdsap.pem rename to src/openssl/openssl-1.1.1w/test/smime-certs/smdsap.pem diff --git a/src/openssl/openssl-1.1.1t/test/smime-certs/smec1.pem b/src/openssl/openssl-1.1.1w/test/smime-certs/smec1.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smime-certs/smec1.pem rename to src/openssl/openssl-1.1.1w/test/smime-certs/smec1.pem diff --git a/src/openssl/openssl-1.1.1t/test/smime-certs/smec2.pem b/src/openssl/openssl-1.1.1w/test/smime-certs/smec2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smime-certs/smec2.pem rename to src/openssl/openssl-1.1.1w/test/smime-certs/smec2.pem diff --git a/src/openssl/openssl-1.1.1t/test/smime-certs/smec3.pem b/src/openssl/openssl-1.1.1w/test/smime-certs/smec3.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smime-certs/smec3.pem rename to src/openssl/openssl-1.1.1w/test/smime-certs/smec3.pem diff --git a/src/openssl/openssl-1.1.1t/test/smime-certs/smroot.pem b/src/openssl/openssl-1.1.1w/test/smime-certs/smroot.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smime-certs/smroot.pem rename to src/openssl/openssl-1.1.1w/test/smime-certs/smroot.pem diff --git a/src/openssl/openssl-1.1.1t/test/smime-certs/smrsa1.pem b/src/openssl/openssl-1.1.1w/test/smime-certs/smrsa1.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smime-certs/smrsa1.pem rename to src/openssl/openssl-1.1.1w/test/smime-certs/smrsa1.pem diff --git a/src/openssl/openssl-1.1.1t/test/smime-certs/smrsa2.pem b/src/openssl/openssl-1.1.1w/test/smime-certs/smrsa2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smime-certs/smrsa2.pem rename to src/openssl/openssl-1.1.1w/test/smime-certs/smrsa2.pem diff --git a/src/openssl/openssl-1.1.1t/test/smime-certs/smrsa3.pem b/src/openssl/openssl-1.1.1w/test/smime-certs/smrsa3.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/smime-certs/smrsa3.pem rename to src/openssl/openssl-1.1.1w/test/smime-certs/smrsa3.pem diff --git a/src/openssl/openssl-1.1.1t/test/srptest.c b/src/openssl/openssl-1.1.1w/test/srptest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/srptest.c rename to src/openssl/openssl-1.1.1w/test/srptest.c diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/01-simple.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/01-simple.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/01-simple.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/01-simple.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/01-simple.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/01-simple.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/01-simple.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/01-simple.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/02-protocol-version.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/02-protocol-version.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/02-protocol-version.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/02-protocol-version.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/02-protocol-version.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/02-protocol-version.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/02-protocol-version.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/02-protocol-version.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/03-custom_verify.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/03-custom_verify.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/03-custom_verify.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/03-custom_verify.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/03-custom_verify.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/03-custom_verify.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/03-custom_verify.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/03-custom_verify.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/04-client_auth.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/04-client_auth.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/04-client_auth.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/04-client_auth.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/04-client_auth.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/04-client_auth.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/04-client_auth.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/04-client_auth.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/05-sni.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/05-sni.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/05-sni.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/05-sni.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/05-sni.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/05-sni.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/05-sni.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/05-sni.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/06-sni-ticket.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/06-sni-ticket.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/06-sni-ticket.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/06-sni-ticket.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/06-sni-ticket.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/06-sni-ticket.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/06-sni-ticket.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/06-sni-ticket.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/07-dtls-protocol-version.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/07-dtls-protocol-version.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/07-dtls-protocol-version.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/07-dtls-protocol-version.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/07-dtls-protocol-version.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/07-dtls-protocol-version.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/07-dtls-protocol-version.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/07-dtls-protocol-version.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/08-npn.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/08-npn.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/08-npn.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/08-npn.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/08-npn.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/08-npn.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/08-npn.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/08-npn.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/09-alpn.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/09-alpn.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/09-alpn.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/09-alpn.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/09-alpn.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/09-alpn.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/09-alpn.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/09-alpn.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/10-resumption.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/10-resumption.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/10-resumption.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/10-resumption.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/10-resumption.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/10-resumption.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/10-resumption.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/10-resumption.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/11-dtls_resumption.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/11-dtls_resumption.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/11-dtls_resumption.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/11-dtls_resumption.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/11-dtls_resumption.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/11-dtls_resumption.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/11-dtls_resumption.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/11-dtls_resumption.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/12-ct.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/12-ct.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/12-ct.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/12-ct.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/12-ct.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/12-ct.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/12-ct.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/12-ct.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/13-fragmentation.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/13-fragmentation.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/13-fragmentation.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/13-fragmentation.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/13-fragmentation.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/13-fragmentation.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/13-fragmentation.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/13-fragmentation.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/14-curves.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/14-curves.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/14-curves.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/14-curves.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/14-curves.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/14-curves.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/14-curves.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/14-curves.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/15-certstatus.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/15-certstatus.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/15-certstatus.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/15-certstatus.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/15-certstatus.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/15-certstatus.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/15-certstatus.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/15-certstatus.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/16-dtls-certstatus.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/16-dtls-certstatus.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/16-dtls-certstatus.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/16-dtls-certstatus.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/16-dtls-certstatus.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/16-dtls-certstatus.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/16-dtls-certstatus.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/16-dtls-certstatus.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/17-renegotiate.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/17-renegotiate.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/17-renegotiate.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/17-renegotiate.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/17-renegotiate.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/17-renegotiate.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/17-renegotiate.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/17-renegotiate.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/18-dtls-renegotiate.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/18-dtls-renegotiate.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/18-dtls-renegotiate.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/18-dtls-renegotiate.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/18-dtls-renegotiate.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/18-dtls-renegotiate.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/18-dtls-renegotiate.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/18-dtls-renegotiate.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/19-mac-then-encrypt.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/19-mac-then-encrypt.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/19-mac-then-encrypt.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/19-mac-then-encrypt.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/19-mac-then-encrypt.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/19-mac-then-encrypt.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/19-mac-then-encrypt.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/19-mac-then-encrypt.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/20-cert-select.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/20-cert-select.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/20-cert-select.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/20-cert-select.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/20-cert-select.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/20-cert-select.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/20-cert-select.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/20-cert-select.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/21-key-update.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/21-key-update.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/21-key-update.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/21-key-update.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/21-key-update.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/21-key-update.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/21-key-update.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/21-key-update.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/22-compression.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/22-compression.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/22-compression.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/22-compression.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/22-compression.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/22-compression.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/22-compression.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/22-compression.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/23-srp.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/23-srp.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/23-srp.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/23-srp.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/23-srp.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/23-srp.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/23-srp.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/23-srp.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/24-padding.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/24-padding.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/24-padding.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/24-padding.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/24-padding.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/24-padding.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/24-padding.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/24-padding.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/25-cipher.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/25-cipher.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/25-cipher.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/25-cipher.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/25-cipher.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/25-cipher.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/25-cipher.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/25-cipher.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/26-tls13_client_auth.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/26-tls13_client_auth.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/26-tls13_client_auth.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/26-tls13_client_auth.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/26-tls13_client_auth.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/26-tls13_client_auth.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/26-tls13_client_auth.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/26-tls13_client_auth.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/27-ticket-appdata.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/27-ticket-appdata.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/27-ticket-appdata.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/27-ticket-appdata.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/27-ticket-appdata.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/27-ticket-appdata.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/27-ticket-appdata.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/27-ticket-appdata.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/28-seclevel.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/28-seclevel.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/28-seclevel.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/28-seclevel.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/28-seclevel.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/28-seclevel.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/28-seclevel.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/28-seclevel.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/29-dtls-sctp-label-bug.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/29-dtls-sctp-label-bug.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/29-dtls-sctp-label-bug.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/29-dtls-sctp-label-bug.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/29-dtls-sctp-label-bug.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/29-dtls-sctp-label-bug.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/29-dtls-sctp-label-bug.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/29-dtls-sctp-label-bug.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/30-supported-groups.conf b/src/openssl/openssl-1.1.1w/test/ssl-tests/30-supported-groups.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/30-supported-groups.conf rename to src/openssl/openssl-1.1.1w/test/ssl-tests/30-supported-groups.conf diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/30-supported-groups.conf.in b/src/openssl/openssl-1.1.1w/test/ssl-tests/30-supported-groups.conf.in similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/30-supported-groups.conf.in rename to src/openssl/openssl-1.1.1w/test/ssl-tests/30-supported-groups.conf.in diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/protocol_version.pm b/src/openssl/openssl-1.1.1w/test/ssl-tests/protocol_version.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/protocol_version.pm rename to src/openssl/openssl-1.1.1w/test/ssl-tests/protocol_version.pm diff --git a/src/openssl/openssl-1.1.1t/test/ssl-tests/ssltests_base.pm b/src/openssl/openssl-1.1.1w/test/ssl-tests/ssltests_base.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl-tests/ssltests_base.pm rename to src/openssl/openssl-1.1.1w/test/ssl-tests/ssltests_base.pm diff --git a/src/openssl/openssl-1.1.1t/test/ssl_cert_table_internal_test.c b/src/openssl/openssl-1.1.1w/test/ssl_cert_table_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl_cert_table_internal_test.c rename to src/openssl/openssl-1.1.1w/test/ssl_cert_table_internal_test.c diff --git a/src/openssl/openssl-1.1.1t/test/ssl_ctx_test.c b/src/openssl/openssl-1.1.1w/test/ssl_ctx_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl_ctx_test.c rename to src/openssl/openssl-1.1.1w/test/ssl_ctx_test.c diff --git a/src/openssl/openssl-1.1.1t/test/ssl_test.c b/src/openssl/openssl-1.1.1w/test/ssl_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl_test.c rename to src/openssl/openssl-1.1.1w/test/ssl_test.c diff --git a/src/openssl/openssl-1.1.1t/test/ssl_test.tmpl b/src/openssl/openssl-1.1.1w/test/ssl_test.tmpl similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl_test.tmpl rename to src/openssl/openssl-1.1.1w/test/ssl_test.tmpl diff --git a/src/openssl/openssl-1.1.1t/test/ssl_test_ctx.c b/src/openssl/openssl-1.1.1w/test/ssl_test_ctx.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl_test_ctx.c rename to src/openssl/openssl-1.1.1w/test/ssl_test_ctx.c diff --git a/src/openssl/openssl-1.1.1t/test/ssl_test_ctx.h b/src/openssl/openssl-1.1.1w/test/ssl_test_ctx.h similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl_test_ctx.h rename to src/openssl/openssl-1.1.1w/test/ssl_test_ctx.h diff --git a/src/openssl/openssl-1.1.1t/test/ssl_test_ctx_test.c b/src/openssl/openssl-1.1.1w/test/ssl_test_ctx_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl_test_ctx_test.c rename to src/openssl/openssl-1.1.1w/test/ssl_test_ctx_test.c diff --git a/src/openssl/openssl-1.1.1t/test/ssl_test_ctx_test.conf b/src/openssl/openssl-1.1.1w/test/ssl_test_ctx_test.conf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssl_test_ctx_test.conf rename to src/openssl/openssl-1.1.1w/test/ssl_test_ctx_test.conf diff --git a/src/openssl/openssl-1.1.1t/test/sslapitest.c b/src/openssl/openssl-1.1.1w/test/sslapitest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/sslapitest.c rename to src/openssl/openssl-1.1.1w/test/sslapitest.c diff --git a/src/openssl/openssl-1.1.1t/test/sslbuffertest.c b/src/openssl/openssl-1.1.1w/test/sslbuffertest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/sslbuffertest.c rename to src/openssl/openssl-1.1.1w/test/sslbuffertest.c diff --git a/src/openssl/openssl-1.1.1t/test/sslcorrupttest.c b/src/openssl/openssl-1.1.1w/test/sslcorrupttest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/sslcorrupttest.c rename to src/openssl/openssl-1.1.1w/test/sslcorrupttest.c diff --git a/src/openssl/openssl-1.1.1t/test/ssltest_old.c b/src/openssl/openssl-1.1.1w/test/ssltest_old.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssltest_old.c rename to src/openssl/openssl-1.1.1w/test/ssltest_old.c diff --git a/src/openssl/openssl-1.1.1t/test/ssltestlib.c b/src/openssl/openssl-1.1.1w/test/ssltestlib.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssltestlib.c rename to src/openssl/openssl-1.1.1w/test/ssltestlib.c diff --git a/src/openssl/openssl-1.1.1t/test/ssltestlib.h b/src/openssl/openssl-1.1.1w/test/ssltestlib.h similarity index 100% rename from src/openssl/openssl-1.1.1t/test/ssltestlib.h rename to src/openssl/openssl-1.1.1w/test/ssltestlib.h diff --git a/src/openssl/openssl-1.1.1t/test/stack_test.c b/src/openssl/openssl-1.1.1w/test/stack_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/stack_test.c rename to src/openssl/openssl-1.1.1w/test/stack_test.c diff --git a/src/openssl/openssl-1.1.1t/test/sysdefault.cnf b/src/openssl/openssl-1.1.1w/test/sysdefault.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/sysdefault.cnf rename to src/openssl/openssl-1.1.1w/test/sysdefault.cnf diff --git a/src/openssl/openssl-1.1.1t/test/sysdefaulttest.c b/src/openssl/openssl-1.1.1w/test/sysdefaulttest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/sysdefaulttest.c rename to src/openssl/openssl-1.1.1w/test/sysdefaulttest.c diff --git a/src/openssl/openssl-1.1.1t/test/test.cnf b/src/openssl/openssl-1.1.1w/test/test.cnf similarity index 100% rename from src/openssl/openssl-1.1.1t/test/test.cnf rename to src/openssl/openssl-1.1.1w/test/test.cnf diff --git a/src/openssl/openssl-1.1.1t/test/test_test.c b/src/openssl/openssl-1.1.1w/test/test_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/test_test.c rename to src/openssl/openssl-1.1.1w/test/test_test.c diff --git a/src/openssl/openssl-1.1.1t/test/testcrl.pem b/src/openssl/openssl-1.1.1w/test/testcrl.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testcrl.pem rename to src/openssl/openssl-1.1.1w/test/testcrl.pem diff --git a/src/openssl/openssl-1.1.1t/test/testdsa.pem b/src/openssl/openssl-1.1.1w/test/testdsa.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testdsa.pem rename to src/openssl/openssl-1.1.1w/test/testdsa.pem diff --git a/src/openssl/openssl-1.1.1t/test/testdsapub.pem b/src/openssl/openssl-1.1.1w/test/testdsapub.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testdsapub.pem rename to src/openssl/openssl-1.1.1w/test/testdsapub.pem diff --git a/src/openssl/openssl-1.1.1t/test/testec-p256.pem b/src/openssl/openssl-1.1.1w/test/testec-p256.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testec-p256.pem rename to src/openssl/openssl-1.1.1w/test/testec-p256.pem diff --git a/src/openssl/openssl-1.1.1t/test/testecpub-p256.pem b/src/openssl/openssl-1.1.1w/test/testecpub-p256.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testecpub-p256.pem rename to src/openssl/openssl-1.1.1w/test/testecpub-p256.pem diff --git a/src/openssl/openssl-1.1.1t/test/tested25519.pem b/src/openssl/openssl-1.1.1w/test/tested25519.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/tested25519.pem rename to src/openssl/openssl-1.1.1w/test/tested25519.pem diff --git a/src/openssl/openssl-1.1.1t/test/tested25519pub.pem b/src/openssl/openssl-1.1.1w/test/tested25519pub.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/tested25519pub.pem rename to src/openssl/openssl-1.1.1w/test/tested25519pub.pem diff --git a/src/openssl/openssl-1.1.1t/test/tested448.pem b/src/openssl/openssl-1.1.1w/test/tested448.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/tested448.pem rename to src/openssl/openssl-1.1.1w/test/tested448.pem diff --git a/src/openssl/openssl-1.1.1t/test/tested448pub.pem b/src/openssl/openssl-1.1.1w/test/tested448pub.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/tested448pub.pem rename to src/openssl/openssl-1.1.1w/test/tested448pub.pem diff --git a/src/openssl/openssl-1.1.1t/test/testp7.pem b/src/openssl/openssl-1.1.1w/test/testp7.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testp7.pem rename to src/openssl/openssl-1.1.1w/test/testp7.pem diff --git a/src/openssl/openssl-1.1.1t/test/testreq2.pem b/src/openssl/openssl-1.1.1w/test/testreq2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testreq2.pem rename to src/openssl/openssl-1.1.1w/test/testreq2.pem diff --git a/src/openssl/openssl-1.1.1t/test/testrsa.pem b/src/openssl/openssl-1.1.1w/test/testrsa.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testrsa.pem rename to src/openssl/openssl-1.1.1w/test/testrsa.pem diff --git a/src/openssl/openssl-1.1.1t/test/testrsa_withattrs.der b/src/openssl/openssl-1.1.1w/test/testrsa_withattrs.der similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testrsa_withattrs.der rename to src/openssl/openssl-1.1.1w/test/testrsa_withattrs.der diff --git a/src/openssl/openssl-1.1.1t/test/testrsa_withattrs.pem b/src/openssl/openssl-1.1.1w/test/testrsa_withattrs.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testrsa_withattrs.pem rename to src/openssl/openssl-1.1.1w/test/testrsa_withattrs.pem diff --git a/src/openssl/openssl-1.1.1t/test/testrsapub.pem b/src/openssl/openssl-1.1.1w/test/testrsapub.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testrsapub.pem rename to src/openssl/openssl-1.1.1w/test/testrsapub.pem diff --git a/src/openssl/openssl-1.1.1t/test/testsid.pem b/src/openssl/openssl-1.1.1w/test/testsid.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testsid.pem rename to src/openssl/openssl-1.1.1w/test/testsid.pem diff --git a/src/openssl/openssl-1.1.1t/test/testutil.h b/src/openssl/openssl-1.1.1w/test/testutil.h similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testutil.h rename to src/openssl/openssl-1.1.1w/test/testutil.h diff --git a/src/openssl/openssl-1.1.1t/test/testutil/basic_output.c b/src/openssl/openssl-1.1.1w/test/testutil/basic_output.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testutil/basic_output.c rename to src/openssl/openssl-1.1.1w/test/testutil/basic_output.c diff --git a/src/openssl/openssl-1.1.1t/test/testutil/cb.c b/src/openssl/openssl-1.1.1w/test/testutil/cb.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testutil/cb.c rename to src/openssl/openssl-1.1.1w/test/testutil/cb.c diff --git a/src/openssl/openssl-1.1.1t/test/testutil/driver.c b/src/openssl/openssl-1.1.1w/test/testutil/driver.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testutil/driver.c rename to src/openssl/openssl-1.1.1w/test/testutil/driver.c diff --git a/src/openssl/openssl-1.1.1t/test/testutil/format_output.c b/src/openssl/openssl-1.1.1w/test/testutil/format_output.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testutil/format_output.c rename to src/openssl/openssl-1.1.1w/test/testutil/format_output.c diff --git a/src/openssl/openssl-1.1.1t/test/testutil/main.c b/src/openssl/openssl-1.1.1w/test/testutil/main.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testutil/main.c rename to src/openssl/openssl-1.1.1w/test/testutil/main.c diff --git a/src/openssl/openssl-1.1.1t/test/testutil/output.h b/src/openssl/openssl-1.1.1w/test/testutil/output.h similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testutil/output.h rename to src/openssl/openssl-1.1.1w/test/testutil/output.h diff --git a/src/openssl/openssl-1.1.1t/test/testutil/output_helpers.c b/src/openssl/openssl-1.1.1w/test/testutil/output_helpers.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testutil/output_helpers.c rename to src/openssl/openssl-1.1.1w/test/testutil/output_helpers.c diff --git a/src/openssl/openssl-1.1.1t/test/testutil/random.c b/src/openssl/openssl-1.1.1w/test/testutil/random.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testutil/random.c rename to src/openssl/openssl-1.1.1w/test/testutil/random.c diff --git a/src/openssl/openssl-1.1.1t/test/testutil/stanza.c b/src/openssl/openssl-1.1.1w/test/testutil/stanza.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testutil/stanza.c rename to src/openssl/openssl-1.1.1w/test/testutil/stanza.c diff --git a/src/openssl/openssl-1.1.1t/test/testutil/tap_bio.c b/src/openssl/openssl-1.1.1w/test/testutil/tap_bio.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testutil/tap_bio.c rename to src/openssl/openssl-1.1.1w/test/testutil/tap_bio.c diff --git a/src/openssl/openssl-1.1.1t/test/testutil/test_cleanup.c b/src/openssl/openssl-1.1.1w/test/testutil/test_cleanup.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testutil/test_cleanup.c rename to src/openssl/openssl-1.1.1w/test/testutil/test_cleanup.c diff --git a/src/openssl/openssl-1.1.1t/test/testutil/tests.c b/src/openssl/openssl-1.1.1w/test/testutil/tests.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testutil/tests.c rename to src/openssl/openssl-1.1.1w/test/testutil/tests.c diff --git a/src/openssl/openssl-1.1.1t/test/testutil/testutil_init.c b/src/openssl/openssl-1.1.1w/test/testutil/testutil_init.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testutil/testutil_init.c rename to src/openssl/openssl-1.1.1w/test/testutil/testutil_init.c diff --git a/src/openssl/openssl-1.1.1t/test/testutil/tu_local.h b/src/openssl/openssl-1.1.1w/test/testutil/tu_local.h similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testutil/tu_local.h rename to src/openssl/openssl-1.1.1w/test/testutil/tu_local.h diff --git a/src/openssl/openssl-1.1.1t/test/testx509.pem b/src/openssl/openssl-1.1.1w/test/testx509.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/testx509.pem rename to src/openssl/openssl-1.1.1w/test/testx509.pem diff --git a/src/openssl/openssl-1.1.1t/test/threadstest.c b/src/openssl/openssl-1.1.1w/test/threadstest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/threadstest.c rename to src/openssl/openssl-1.1.1w/test/threadstest.c diff --git a/src/openssl/openssl-1.1.1t/test/time_offset_test.c b/src/openssl/openssl-1.1.1w/test/time_offset_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/time_offset_test.c rename to src/openssl/openssl-1.1.1w/test/time_offset_test.c diff --git a/src/openssl/openssl-1.1.1t/test/tls13ccstest.c b/src/openssl/openssl-1.1.1w/test/tls13ccstest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/tls13ccstest.c rename to src/openssl/openssl-1.1.1w/test/tls13ccstest.c diff --git a/src/openssl/openssl-1.1.1t/test/tls13encryptiontest.c b/src/openssl/openssl-1.1.1w/test/tls13encryptiontest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/tls13encryptiontest.c rename to src/openssl/openssl-1.1.1w/test/tls13encryptiontest.c diff --git a/src/openssl/openssl-1.1.1t/test/tls13secretstest.c b/src/openssl/openssl-1.1.1w/test/tls13secretstest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/tls13secretstest.c rename to src/openssl/openssl-1.1.1w/test/tls13secretstest.c diff --git a/src/openssl/openssl-1.1.1t/test/uitest.c b/src/openssl/openssl-1.1.1w/test/uitest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/uitest.c rename to src/openssl/openssl-1.1.1w/test/uitest.c diff --git a/src/openssl/openssl-1.1.1t/test/v3-cert1.pem b/src/openssl/openssl-1.1.1w/test/v3-cert1.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/v3-cert1.pem rename to src/openssl/openssl-1.1.1w/test/v3-cert1.pem diff --git a/src/openssl/openssl-1.1.1t/test/v3-cert2.pem b/src/openssl/openssl-1.1.1w/test/v3-cert2.pem similarity index 100% rename from src/openssl/openssl-1.1.1t/test/v3-cert2.pem rename to src/openssl/openssl-1.1.1w/test/v3-cert2.pem diff --git a/src/openssl/openssl-1.1.1t/test/v3ext.c b/src/openssl/openssl-1.1.1w/test/v3ext.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/v3ext.c rename to src/openssl/openssl-1.1.1w/test/v3ext.c diff --git a/src/openssl/openssl-1.1.1t/test/v3nametest.c b/src/openssl/openssl-1.1.1w/test/v3nametest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/v3nametest.c rename to src/openssl/openssl-1.1.1w/test/v3nametest.c diff --git a/src/openssl/openssl-1.1.1t/test/verify_extra_test.c b/src/openssl/openssl-1.1.1w/test/verify_extra_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/verify_extra_test.c rename to src/openssl/openssl-1.1.1w/test/verify_extra_test.c diff --git a/src/openssl/openssl-1.1.1t/test/versions.c b/src/openssl/openssl-1.1.1w/test/versions.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/versions.c rename to src/openssl/openssl-1.1.1w/test/versions.c diff --git a/src/openssl/openssl-1.1.1t/test/wpackettest.c b/src/openssl/openssl-1.1.1w/test/wpackettest.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/wpackettest.c rename to src/openssl/openssl-1.1.1w/test/wpackettest.c diff --git a/src/openssl/openssl-1.1.1t/test/x509_check_cert_pkey_test.c b/src/openssl/openssl-1.1.1w/test/x509_check_cert_pkey_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/x509_check_cert_pkey_test.c rename to src/openssl/openssl-1.1.1w/test/x509_check_cert_pkey_test.c diff --git a/src/openssl/openssl-1.1.1t/test/x509_dup_cert_test.c b/src/openssl/openssl-1.1.1w/test/x509_dup_cert_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/x509_dup_cert_test.c rename to src/openssl/openssl-1.1.1w/test/x509_dup_cert_test.c diff --git a/src/openssl/openssl-1.1.1t/test/x509_internal_test.c b/src/openssl/openssl-1.1.1w/test/x509_internal_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/x509_internal_test.c rename to src/openssl/openssl-1.1.1w/test/x509_internal_test.c diff --git a/src/openssl/openssl-1.1.1t/test/x509_time_test.c b/src/openssl/openssl-1.1.1w/test/x509_time_test.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/x509_time_test.c rename to src/openssl/openssl-1.1.1w/test/x509_time_test.c diff --git a/src/openssl/openssl-1.1.1t/test/x509aux.c b/src/openssl/openssl-1.1.1w/test/x509aux.c similarity index 100% rename from src/openssl/openssl-1.1.1t/test/x509aux.c rename to src/openssl/openssl-1.1.1w/test/x509aux.c diff --git a/src/openssl/openssl-1.1.1t/tools/build.info b/src/openssl/openssl-1.1.1w/tools/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/tools/build.info rename to src/openssl/openssl-1.1.1w/tools/build.info diff --git a/src/openssl/openssl-1.1.1t/tools/c_rehash.in b/src/openssl/openssl-1.1.1w/tools/c_rehash.in similarity index 100% rename from src/openssl/openssl-1.1.1t/tools/c_rehash.in rename to src/openssl/openssl-1.1.1w/tools/c_rehash.in diff --git a/src/openssl/openssl-1.1.1t/util/add-depends.pl b/src/openssl/openssl-1.1.1w/util/add-depends.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/util/add-depends.pl rename to src/openssl/openssl-1.1.1w/util/add-depends.pl diff --git a/src/openssl/openssl-1.1.1t/util/build.info b/src/openssl/openssl-1.1.1w/util/build.info similarity index 100% rename from src/openssl/openssl-1.1.1t/util/build.info rename to src/openssl/openssl-1.1.1w/util/build.info diff --git a/src/openssl/openssl-1.1.1t/util/cavs-to-evptest.pl b/src/openssl/openssl-1.1.1w/util/cavs-to-evptest.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/util/cavs-to-evptest.pl rename to src/openssl/openssl-1.1.1w/util/cavs-to-evptest.pl diff --git a/src/openssl/openssl-1.1.1t/util/check-malloc-errs b/src/openssl/openssl-1.1.1w/util/check-malloc-errs similarity index 100% rename from src/openssl/openssl-1.1.1t/util/check-malloc-errs rename to src/openssl/openssl-1.1.1w/util/check-malloc-errs diff --git a/src/openssl/openssl-1.1.1t/util/ck_errf.pl b/src/openssl/openssl-1.1.1w/util/ck_errf.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/util/ck_errf.pl rename to src/openssl/openssl-1.1.1w/util/ck_errf.pl diff --git a/src/openssl/openssl-1.1.1t/util/copy.pl b/src/openssl/openssl-1.1.1w/util/copy.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/util/copy.pl rename to src/openssl/openssl-1.1.1w/util/copy.pl diff --git a/src/openssl/openssl-1.1.1t/util/dofile.pl b/src/openssl/openssl-1.1.1w/util/dofile.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/util/dofile.pl rename to src/openssl/openssl-1.1.1w/util/dofile.pl diff --git a/src/openssl/openssl-1.1.1t/util/echo.pl b/src/openssl/openssl-1.1.1w/util/echo.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/util/echo.pl rename to src/openssl/openssl-1.1.1w/util/echo.pl diff --git a/src/openssl/openssl-1.1.1t/util/find-doc-nits b/src/openssl/openssl-1.1.1w/util/find-doc-nits similarity index 100% rename from src/openssl/openssl-1.1.1t/util/find-doc-nits rename to src/openssl/openssl-1.1.1w/util/find-doc-nits diff --git a/src/openssl/openssl-1.1.1t/util/find-unused-errs b/src/openssl/openssl-1.1.1w/util/find-unused-errs similarity index 100% rename from src/openssl/openssl-1.1.1t/util/find-unused-errs rename to src/openssl/openssl-1.1.1w/util/find-unused-errs diff --git a/src/openssl/openssl-1.1.1t/util/fix-includes b/src/openssl/openssl-1.1.1w/util/fix-includes similarity index 100% rename from src/openssl/openssl-1.1.1t/util/fix-includes rename to src/openssl/openssl-1.1.1w/util/fix-includes diff --git a/src/openssl/openssl-1.1.1t/util/fix-includes.sed b/src/openssl/openssl-1.1.1w/util/fix-includes.sed similarity index 100% rename from src/openssl/openssl-1.1.1t/util/fix-includes.sed rename to src/openssl/openssl-1.1.1w/util/fix-includes.sed diff --git a/src/openssl/openssl-1.1.1t/util/indent.pro b/src/openssl/openssl-1.1.1w/util/indent.pro similarity index 100% rename from src/openssl/openssl-1.1.1t/util/indent.pro rename to src/openssl/openssl-1.1.1w/util/indent.pro diff --git a/src/openssl/openssl-1.1.1t/util/libcrypto.num b/src/openssl/openssl-1.1.1w/util/libcrypto.num similarity index 100% rename from src/openssl/openssl-1.1.1t/util/libcrypto.num rename to src/openssl/openssl-1.1.1w/util/libcrypto.num diff --git a/src/openssl/openssl-1.1.1t/util/libssl.num b/src/openssl/openssl-1.1.1w/util/libssl.num similarity index 100% rename from src/openssl/openssl-1.1.1t/util/libssl.num rename to src/openssl/openssl-1.1.1w/util/libssl.num diff --git a/src/openssl/openssl-1.1.1t/util/local_shlib.com.in b/src/openssl/openssl-1.1.1w/util/local_shlib.com.in similarity index 100% rename from src/openssl/openssl-1.1.1t/util/local_shlib.com.in rename to src/openssl/openssl-1.1.1w/util/local_shlib.com.in diff --git a/src/openssl/openssl-1.1.1t/util/mkbuildinf.pl b/src/openssl/openssl-1.1.1w/util/mkbuildinf.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/util/mkbuildinf.pl rename to src/openssl/openssl-1.1.1w/util/mkbuildinf.pl diff --git a/src/openssl/openssl-1.1.1t/util/mkdef.pl b/src/openssl/openssl-1.1.1w/util/mkdef.pl similarity index 99% rename from src/openssl/openssl-1.1.1t/util/mkdef.pl rename to src/openssl/openssl-1.1.1w/util/mkdef.pl index 3ac79821b..2486412f7 100755 --- a/src/openssl/openssl-1.1.1t/util/mkdef.pl +++ b/src/openssl/openssl-1.1.1w/util/mkdef.pl @@ -1,5 +1,5 @@ #! /usr/bin/env perl -# Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. +# Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy @@ -197,6 +197,7 @@ } $libname = $unified_info{sharednames}->{libcrypto} if $do_crypto; $libname = $unified_info{sharednames}->{libssl} if $do_ssl; +$libname .= $target{shlib_variant} || ""; if (!$libname) { if ($do_ssl) { diff --git a/src/openssl/openssl-1.1.1t/util/mkdir-p.pl b/src/openssl/openssl-1.1.1w/util/mkdir-p.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/util/mkdir-p.pl rename to src/openssl/openssl-1.1.1w/util/mkdir-p.pl diff --git a/src/openssl/openssl-1.1.1t/util/mkerr.pl b/src/openssl/openssl-1.1.1w/util/mkerr.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/util/mkerr.pl rename to src/openssl/openssl-1.1.1w/util/mkerr.pl diff --git a/src/openssl/openssl-1.1.1t/util/mkrc.pl b/src/openssl/openssl-1.1.1w/util/mkrc.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/util/mkrc.pl rename to src/openssl/openssl-1.1.1w/util/mkrc.pl diff --git a/src/openssl/openssl-1.1.1t/util/openssl-format-source b/src/openssl/openssl-1.1.1w/util/openssl-format-source similarity index 100% rename from src/openssl/openssl-1.1.1t/util/openssl-format-source rename to src/openssl/openssl-1.1.1w/util/openssl-format-source diff --git a/src/openssl/openssl-1.1.1t/util/openssl-update-copyright b/src/openssl/openssl-1.1.1w/util/openssl-update-copyright similarity index 100% rename from src/openssl/openssl-1.1.1t/util/openssl-update-copyright rename to src/openssl/openssl-1.1.1w/util/openssl-update-copyright diff --git a/src/openssl/openssl-1.1.1t/util/opensslwrap.sh b/src/openssl/openssl-1.1.1w/util/opensslwrap.sh similarity index 100% rename from src/openssl/openssl-1.1.1t/util/opensslwrap.sh rename to src/openssl/openssl-1.1.1w/util/opensslwrap.sh diff --git a/src/openssl/openssl-1.1.1t/util/perl/OpenSSL/Glob.pm b/src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Glob.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/OpenSSL/Glob.pm rename to src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Glob.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/OpenSSL/Test.pm b/src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Test.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/OpenSSL/Test.pm rename to src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Test.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/OpenSSL/Test/Simple.pm b/src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Test/Simple.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/OpenSSL/Test/Simple.pm rename to src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Test/Simple.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/OpenSSL/Test/Utils.pm b/src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Test/Utils.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/OpenSSL/Test/Utils.pm rename to src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Test/Utils.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/OpenSSL/Util/Pod.pm b/src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Util/Pod.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/OpenSSL/Util/Pod.pm rename to src/openssl/openssl-1.1.1w/util/perl/OpenSSL/Util/Pod.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/OpenSSL/copyright.pm b/src/openssl/openssl-1.1.1w/util/perl/OpenSSL/copyright.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/OpenSSL/copyright.pm rename to src/openssl/openssl-1.1.1w/util/perl/OpenSSL/copyright.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/TLSProxy/Alert.pm b/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Alert.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/TLSProxy/Alert.pm rename to src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Alert.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/TLSProxy/Certificate.pm b/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Certificate.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/TLSProxy/Certificate.pm rename to src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Certificate.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/TLSProxy/CertificateRequest.pm b/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/CertificateRequest.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/TLSProxy/CertificateRequest.pm rename to src/openssl/openssl-1.1.1w/util/perl/TLSProxy/CertificateRequest.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/TLSProxy/CertificateVerify.pm b/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/CertificateVerify.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/TLSProxy/CertificateVerify.pm rename to src/openssl/openssl-1.1.1w/util/perl/TLSProxy/CertificateVerify.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/TLSProxy/ClientHello.pm b/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/ClientHello.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/TLSProxy/ClientHello.pm rename to src/openssl/openssl-1.1.1w/util/perl/TLSProxy/ClientHello.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/TLSProxy/EncryptedExtensions.pm b/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/EncryptedExtensions.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/TLSProxy/EncryptedExtensions.pm rename to src/openssl/openssl-1.1.1w/util/perl/TLSProxy/EncryptedExtensions.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/TLSProxy/Message.pm b/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Message.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/TLSProxy/Message.pm rename to src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Message.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/TLSProxy/NewSessionTicket.pm b/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/NewSessionTicket.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/TLSProxy/NewSessionTicket.pm rename to src/openssl/openssl-1.1.1w/util/perl/TLSProxy/NewSessionTicket.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/TLSProxy/Proxy.pm b/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Proxy.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/TLSProxy/Proxy.pm rename to src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Proxy.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/TLSProxy/Record.pm b/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Record.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/TLSProxy/Record.pm rename to src/openssl/openssl-1.1.1w/util/perl/TLSProxy/Record.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/TLSProxy/ServerHello.pm b/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/ServerHello.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/TLSProxy/ServerHello.pm rename to src/openssl/openssl-1.1.1w/util/perl/TLSProxy/ServerHello.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/TLSProxy/ServerKeyExchange.pm b/src/openssl/openssl-1.1.1w/util/perl/TLSProxy/ServerKeyExchange.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/TLSProxy/ServerKeyExchange.pm rename to src/openssl/openssl-1.1.1w/util/perl/TLSProxy/ServerKeyExchange.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/checkhandshake.pm b/src/openssl/openssl-1.1.1w/util/perl/checkhandshake.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/checkhandshake.pm rename to src/openssl/openssl-1.1.1w/util/perl/checkhandshake.pm diff --git a/src/openssl/openssl-1.1.1t/util/perl/with_fallback.pm b/src/openssl/openssl-1.1.1w/util/perl/with_fallback.pm similarity index 100% rename from src/openssl/openssl-1.1.1t/util/perl/with_fallback.pm rename to src/openssl/openssl-1.1.1w/util/perl/with_fallback.pm diff --git a/src/openssl/openssl-1.1.1t/util/private.num b/src/openssl/openssl-1.1.1w/util/private.num similarity index 100% rename from src/openssl/openssl-1.1.1t/util/private.num rename to src/openssl/openssl-1.1.1w/util/private.num diff --git a/src/openssl/openssl-1.1.1t/util/process_docs.pl b/src/openssl/openssl-1.1.1w/util/process_docs.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/util/process_docs.pl rename to src/openssl/openssl-1.1.1w/util/process_docs.pl diff --git a/src/openssl/openssl-1.1.1t/util/shlib_wrap.sh.in b/src/openssl/openssl-1.1.1w/util/shlib_wrap.sh.in similarity index 100% rename from src/openssl/openssl-1.1.1t/util/shlib_wrap.sh.in rename to src/openssl/openssl-1.1.1w/util/shlib_wrap.sh.in diff --git a/src/openssl/openssl-1.1.1t/util/su-filter.pl b/src/openssl/openssl-1.1.1w/util/su-filter.pl similarity index 100% rename from src/openssl/openssl-1.1.1t/util/su-filter.pl rename to src/openssl/openssl-1.1.1w/util/su-filter.pl diff --git a/src/openssl/openssl-1.1.1t/util/unlocal_shlib.com.in b/src/openssl/openssl-1.1.1w/util/unlocal_shlib.com.in similarity index 100% rename from src/openssl/openssl-1.1.1t/util/unlocal_shlib.com.in rename to src/openssl/openssl-1.1.1w/util/unlocal_shlib.com.in diff --git a/src/python/CVE-2023-24329.diff b/src/python/CVE-2023-24329.diff new file mode 100644 index 000000000..00c35914e --- /dev/null +++ b/src/python/CVE-2023-24329.diff @@ -0,0 +1,104 @@ +diff --git a/Lib/test/test_urlparse.py b/Lib/test/test_urlparse.py +index e00fb7af..70bb451b 100644 +--- a/Lib/test/test_urlparse.py ++++ b/Lib/test/test_urlparse.py +@@ -602,6 +602,64 @@ class UrlParseTestCase(unittest.TestCase): + self.assertEqual(p.port, None) + self.assertEqual(p.geturl(), u"http://www.python.org/javascript:alert('msg')/#frag") + ++ def test_urlsplit_strip_url(self): ++ noise = "".join([chr(i) for i in range(0, 0x20 + 1)]) ++ base_url = "http://User:Pass@www.python.org:080/doc/?query=yes#frag" ++ ++ url = noise.decode("utf-8") + base_url ++ p = urlparse.urlsplit(url) ++ self.assertEqual(p.scheme, "http") ++ self.assertEqual(p.netloc, "User:Pass@www.python.org:080") ++ self.assertEqual(p.path, "/doc/") ++ self.assertEqual(p.query, "query=yes") ++ self.assertEqual(p.fragment, "frag") ++ self.assertEqual(p.username, "User") ++ self.assertEqual(p.password, "Pass") ++ self.assertEqual(p.hostname, "www.python.org") ++ self.assertEqual(p.port, 80) ++ self.assertEqual(p.geturl(), base_url) ++ ++ url = noise + base_url.encode("utf-8") ++ p = urlparse.urlsplit(url) ++ self.assertEqual(p.scheme, b"http") ++ self.assertEqual(p.netloc, b"User:Pass@www.python.org:080") ++ self.assertEqual(p.path, b"/doc/") ++ self.assertEqual(p.query, b"query=yes") ++ self.assertEqual(p.fragment, b"frag") ++ self.assertEqual(p.username, b"User") ++ self.assertEqual(p.password, b"Pass") ++ self.assertEqual(p.hostname, b"www.python.org") ++ self.assertEqual(p.port, 80) ++ self.assertEqual(p.geturl(), base_url.encode("utf-8")) ++ ++ # Test that trailing space is preserved as some applications rely on ++ # this within query strings. ++ query_spaces_url = "https://www.python.org:88/doc/?query= " ++ p = urlparse.urlsplit(noise.decode("utf-8") + query_spaces_url) ++ self.assertEqual(p.scheme, "https") ++ self.assertEqual(p.netloc, "www.python.org:88") ++ self.assertEqual(p.path, "/doc/") ++ self.assertEqual(p.query, "query= ") ++ self.assertEqual(p.port, 88) ++ self.assertEqual(p.geturl(), query_spaces_url) ++ ++ p = urlparse.urlsplit("www.pypi.org ") ++ # That "hostname" gets considered a "path" due to the ++ # trailing space and our existing logic... YUCK... ++ # and re-assembles via geturl aka unurlsplit into the original. ++ # django.core.validators.URLValidator (at least through v3.2) relies on ++ # this, for better or worse, to catch it in a ValidationError via its ++ # regular expressions. ++ # Here we test the basic round trip concept of such a trailing space. ++ self.assertEqual(urlparse.urlunsplit(p), "www.pypi.org ") ++ ++ # with scheme as cache-key ++ url = "//www.python.org/" ++ scheme = noise.decode("utf-8") + "https" + noise.decode("utf-8") ++ for _ in range(2): ++ p = urlparse.urlsplit(url, scheme=scheme) ++ self.assertEqual(p.scheme, "https") ++ self.assertEqual(p.geturl(), "https://www.python.org/") + + def test_attributes_bad_port(self): + """Check handling of non-integer ports.""" +diff --git a/Lib/urlparse.py b/Lib/urlparse.py +index 914ccd2c..5a3b322d 100644 +--- a/Lib/urlparse.py ++++ b/Lib/urlparse.py +@@ -30,6 +30,10 @@ scenarios for parsing, and for backward compatibility purposes, some + parsing quirks from older RFCs are retained. The testcases in + test_urlparse.py provides a good indicator of parsing behavior. + ++The WHATWG URL Parser spec should also be considered. We are not compliant with ++it either due to existing user code API behavior expectations (Hyrum's Law). ++It serves as a useful guide when making changes. ++ + """ + + import re +@@ -66,6 +70,10 @@ scheme_chars = ('abcdefghijklmnopqrstuvwxyz' + '0123456789' + '+-.') + ++# Leading and trailing C0 control and space to be stripped per WHATWG spec. ++# == "".join([chr(i) for i in range(0, 0x20 + 1)]) ++_WHATWG_C0_CONTROL_OR_SPACE = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f ' ++ + # Unsafe bytes to be removed per WHATWG spec + _UNSAFE_URL_BYTES_TO_REMOVE = ['\t', '\r', '\n'] + +@@ -197,6 +205,8 @@ def urlsplit(url, scheme='', allow_fragments=True): + Return a 5-tuple: (scheme, netloc, path, query, fragment). + Note that we don't break the components up in smaller bits + (e.g. netloc is a single string) and we don't expand % escapes.""" ++ url = url.lstrip(_WHATWG_C0_CONTROL_OR_SPACE) ++ scheme = scheme.strip(_WHATWG_C0_CONTROL_OR_SPACE) + allow_fragments = bool(allow_fragments) + key = url, scheme, allow_fragments, type(url), type(scheme) + cached = _parse_cache.get(key, None) diff --git a/src/python/Python-2.7.18/Lib/ctypes/test/test_parameters.py b/src/python/Python-2.7.18/Lib/ctypes/test/test_parameters.py index 23c1b6e22..3399703d4 100644 --- a/src/python/Python-2.7.18/Lib/ctypes/test/test_parameters.py +++ b/src/python/Python-2.7.18/Lib/ctypes/test/test_parameters.py @@ -21,6 +21,49 @@ def tearDown(self): else: set_conversion_mode(*self.prev_conv_mode) + def test_parameter_repr(self): + from ctypes import ( + c_bool, + c_char, + c_wchar, + c_byte, + c_ubyte, + c_short, + c_ushort, + c_int, + c_uint, + c_long, + c_ulong, + c_longlong, + c_ulonglong, + c_float, + c_double, + c_longdouble, + c_char_p, + c_wchar_p, + c_void_p, + ) + self.assertRegexpMatches(repr(c_bool.from_param(True)), r"^$") + self.assertEqual(repr(c_char.from_param('a')), "") + self.assertRegexpMatches(repr(c_wchar.from_param('a')), r"^$") + self.assertEqual(repr(c_byte.from_param(98)), "") + self.assertEqual(repr(c_ubyte.from_param(98)), "") + self.assertEqual(repr(c_short.from_param(511)), "") + self.assertEqual(repr(c_ushort.from_param(511)), "") + self.assertRegexpMatches(repr(c_int.from_param(20000)), r"^$") + self.assertRegexpMatches(repr(c_uint.from_param(20000)), r"^$") + self.assertRegexpMatches(repr(c_long.from_param(20000)), r"^$") + self.assertRegexpMatches(repr(c_ulong.from_param(20000)), r"^$") + self.assertRegexpMatches(repr(c_longlong.from_param(20000)), r"^$") + self.assertRegexpMatches(repr(c_ulonglong.from_param(20000)), r"^$") + self.assertEqual(repr(c_float.from_param(1.5)), "") + self.assertEqual(repr(c_double.from_param(1.5)), "") + self.assertEqual(repr(c_double.from_param(1e300)), "") + self.assertRegexpMatches(repr(c_longdouble.from_param(1.5)), r"^$") + self.assertRegexpMatches(repr(c_char_p.from_param(b'hihi')), "^$") + self.assertRegexpMatches(repr(c_wchar_p.from_param('hihi')), "^$") + self.assertRegexpMatches(repr(c_void_p.from_param(0x12)), r"^$") + def test_subclasses(self): from ctypes import c_void_p, c_char_p diff --git a/src/python/Python-2.7.18/Lib/test/test_urlparse.py b/src/python/Python-2.7.18/Lib/test/test_urlparse.py index e00fb7af6..70bb451b7 100644 --- a/src/python/Python-2.7.18/Lib/test/test_urlparse.py +++ b/src/python/Python-2.7.18/Lib/test/test_urlparse.py @@ -602,6 +602,64 @@ def test_urlsplit_remove_unsafe_bytes(self): self.assertEqual(p.port, None) self.assertEqual(p.geturl(), u"http://www.python.org/javascript:alert('msg')/#frag") + def test_urlsplit_strip_url(self): + noise = "".join([chr(i) for i in range(0, 0x20 + 1)]) + base_url = "http://User:Pass@www.python.org:080/doc/?query=yes#frag" + + url = noise.decode("utf-8") + base_url + p = urlparse.urlsplit(url) + self.assertEqual(p.scheme, "http") + self.assertEqual(p.netloc, "User:Pass@www.python.org:080") + self.assertEqual(p.path, "/doc/") + self.assertEqual(p.query, "query=yes") + self.assertEqual(p.fragment, "frag") + self.assertEqual(p.username, "User") + self.assertEqual(p.password, "Pass") + self.assertEqual(p.hostname, "www.python.org") + self.assertEqual(p.port, 80) + self.assertEqual(p.geturl(), base_url) + + url = noise + base_url.encode("utf-8") + p = urlparse.urlsplit(url) + self.assertEqual(p.scheme, b"http") + self.assertEqual(p.netloc, b"User:Pass@www.python.org:080") + self.assertEqual(p.path, b"/doc/") + self.assertEqual(p.query, b"query=yes") + self.assertEqual(p.fragment, b"frag") + self.assertEqual(p.username, b"User") + self.assertEqual(p.password, b"Pass") + self.assertEqual(p.hostname, b"www.python.org") + self.assertEqual(p.port, 80) + self.assertEqual(p.geturl(), base_url.encode("utf-8")) + + # Test that trailing space is preserved as some applications rely on + # this within query strings. + query_spaces_url = "https://www.python.org:88/doc/?query= " + p = urlparse.urlsplit(noise.decode("utf-8") + query_spaces_url) + self.assertEqual(p.scheme, "https") + self.assertEqual(p.netloc, "www.python.org:88") + self.assertEqual(p.path, "/doc/") + self.assertEqual(p.query, "query= ") + self.assertEqual(p.port, 88) + self.assertEqual(p.geturl(), query_spaces_url) + + p = urlparse.urlsplit("www.pypi.org ") + # That "hostname" gets considered a "path" due to the + # trailing space and our existing logic... YUCK... + # and re-assembles via geturl aka unurlsplit into the original. + # django.core.validators.URLValidator (at least through v3.2) relies on + # this, for better or worse, to catch it in a ValidationError via its + # regular expressions. + # Here we test the basic round trip concept of such a trailing space. + self.assertEqual(urlparse.urlunsplit(p), "www.pypi.org ") + + # with scheme as cache-key + url = "//www.python.org/" + scheme = noise.decode("utf-8") + "https" + noise.decode("utf-8") + for _ in range(2): + p = urlparse.urlsplit(url, scheme=scheme) + self.assertEqual(p.scheme, "https") + self.assertEqual(p.geturl(), "https://www.python.org/") def test_attributes_bad_port(self): """Check handling of non-integer ports.""" diff --git a/src/python/Python-2.7.18/Lib/urlparse.py b/src/python/Python-2.7.18/Lib/urlparse.py index 914ccd2c6..5a3b322d8 100644 --- a/src/python/Python-2.7.18/Lib/urlparse.py +++ b/src/python/Python-2.7.18/Lib/urlparse.py @@ -30,6 +30,10 @@ parsing quirks from older RFCs are retained. The testcases in test_urlparse.py provides a good indicator of parsing behavior. +The WHATWG URL Parser spec should also be considered. We are not compliant with +it either due to existing user code API behavior expectations (Hyrum's Law). +It serves as a useful guide when making changes. + """ import re @@ -66,6 +70,10 @@ '0123456789' '+-.') +# Leading and trailing C0 control and space to be stripped per WHATWG spec. +# == "".join([chr(i) for i in range(0, 0x20 + 1)]) +_WHATWG_C0_CONTROL_OR_SPACE = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f ' + # Unsafe bytes to be removed per WHATWG spec _UNSAFE_URL_BYTES_TO_REMOVE = ['\t', '\r', '\n'] @@ -197,6 +205,8 @@ def urlsplit(url, scheme='', allow_fragments=True): Return a 5-tuple: (scheme, netloc, path, query, fragment). Note that we don't break the components up in smaller bits (e.g. netloc is a single string) and we don't expand % escapes.""" + url = url.lstrip(_WHATWG_C0_CONTROL_OR_SPACE) + scheme = scheme.strip(_WHATWG_C0_CONTROL_OR_SPACE) allow_fragments = bool(allow_fragments) key = url, scheme, allow_fragments, type(url), type(scheme) cached = _parse_cache.get(key, None) diff --git a/src/python/Python-2.7.18/Modules/_ctypes/callproc.c b/src/python/Python-2.7.18/Modules/_ctypes/callproc.c index 066fefc0c..5cc3c4cf6 100644 --- a/src/python/Python-2.7.18/Modules/_ctypes/callproc.c +++ b/src/python/Python-2.7.18/Modules/_ctypes/callproc.c @@ -460,50 +460,62 @@ PyCArg_dealloc(PyCArgObject *self) static PyObject * PyCArg_repr(PyCArgObject *self) { - char buffer[256]; switch(self->tag) { case 'b': case 'B': - sprintf(buffer, "", + return PyString_FromFormat("", self->tag, self->value.b); - break; case 'h': case 'H': - sprintf(buffer, "", + return PyString_FromFormat("", self->tag, self->value.h); - break; case 'i': case 'I': - sprintf(buffer, "", + return PyString_FromFormat("", self->tag, self->value.i); - break; case 'l': case 'L': - sprintf(buffer, "", + return PyString_FromFormat("", self->tag, self->value.l); - break; #ifdef HAVE_LONG_LONG case 'q': case 'Q': - sprintf(buffer, - "", + return PyString_FromFormat("", self->tag, self->value.q); - break; #endif case 'd': - sprintf(buffer, "", - self->tag, self->value.d); - break; - case 'f': - sprintf(buffer, "", - self->tag, self->value.f); - break; - + case 'f': { + PyObject *s = PyString_FromFormat("tag); + if (s == NULL) { + return NULL; + } + PyObject *f = PyFloat_FromDouble((self->tag == 'f') ? self->value.f : self->value.d); + if (f == NULL) { + Py_DECREF(s); + return NULL; + } + PyObject *r = PyObject_Repr(f); + Py_DECREF(f); + if (r == NULL) { + Py_DECREF(s); + return NULL; + } + PyString_ConcatAndDel(&s, r); + if (s == NULL) { + return NULL; + } + r = PyString_FromString(")>"); + if (r == NULL) { + Py_DECREF(s); + return NULL; + } + PyString_ConcatAndDel(&s, r); + return s; + } case 'c': - sprintf(buffer, "", + return PyString_FromFormat("", self->tag, self->value.c); - break; /* Hm, are these 'z' and 'Z' codes useful at all? Shouldn't they be replaced by the functionality of c_string @@ -512,16 +524,13 @@ PyCArg_repr(PyCArgObject *self) case 'z': case 'Z': case 'P': - sprintf(buffer, "", + return PyUnicode_FromFormat("", self->tag, self->value.p); - break; default: - sprintf(buffer, "", - self->tag, self); - break; + return PyString_FromFormat("", + (unsigned char)self->tag, (void *)self); } - return PyString_FromString(buffer); } static PyMemberDef PyCArgType_members[] = { diff --git a/src/python/README b/src/python/README index a03dd805b..73969b6b4 100644 --- a/src/python/README +++ b/src/python/README @@ -3,7 +3,9 @@ Building Python on Linux/Unix On these OS'es, we build Python from its sources ourselves. As Python 2.7 is no longer maintained upstream, security patches are lifted from -ActiveState's fork: https://github.com/ActiveState/cpython/commits/2.7. +ActiveState's fork: https://github.com/ActiveState/cpython/commits/2.7 and +https://git.centos.org/rpms/python/blob/c7/f/SOURCES. Another relevant source: +https://packages.debian.org/bullseye/python2.7-minimal. E.g. to fix CVE-2020-10735 from https://github.com/ActiveState/cpython/pull/18, use https://github.com/ActiveState/cpython/pull/18.diff to save the patch diff --git a/src/sqlite/SQLite-3.40.1/sqlite3.1 b/src/sqlite/SQLite-3.40.1/sqlite3.1 deleted file mode 100644 index 80353b0ee..000000000 --- a/src/sqlite/SQLite-3.40.1/sqlite3.1 +++ /dev/null @@ -1,286 +0,0 @@ -.\" Hey, EMACS: -*- nroff -*- -.\" First parameter, NAME, should be all caps -.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection -.\" other parameters are allowed: see man(7), man(1) -.TH SQLITE3 1 "Fri Oct 31 10:41:31 EDT 2014" -.\" Please adjust this date whenever revising the manpage. -.\" -.\" Some roff macros, for reference: -.\" .nh disable hyphenation -.\" .hy enable hyphenation -.\" .ad l left justify -.\" .ad b justify to both left and right margins -.\" .nf disable filling -.\" .fi enable filling -.\" .br insert line break -.\" .sp insert n+1 empty lines -.\" for manpage-specific macros, see man(7) -.SH NAME -.B sqlite3 -\- A command line interface for SQLite version 3 - -.SH SYNOPSIS -.B sqlite3 -.RI [ options ] -.RI [ databasefile ] -.RI [ SQL ] - -.SH SUMMARY -.PP -.B sqlite3 -is a terminal-based front-end to the SQLite library that can evaluate -queries interactively and display the results in multiple formats. -.B sqlite3 -can also be used within shell scripts and other applications to provide -batch processing features. - -.SH DESCRIPTION -To start a -.B sqlite3 -interactive session, invoke the -.B sqlite3 -command and optionally provide the name of a database file. If the -database file does not exist, it will be created. If the database file -does exist, it will be opened. - -For example, to create a new database file named "mydata.db", create -a table named "memos" and insert a couple of records into that table: -.sp -$ -.B sqlite3 mydata.db -.br -SQLite version 3.8.8 -.br -Enter ".help" for instructions -.br -sqlite> -.B create table memos(text, priority INTEGER); -.br -sqlite> -.B insert into memos values('deliver project description', 10); -.br -sqlite> -.B insert into memos values('lunch with Christine', 100); -.br -sqlite> -.B select * from memos; -.br -deliver project description|10 -.br -lunch with Christine|100 -.br -sqlite> -.sp - -If no database name is supplied, the ATTACH sql command can be used -to attach to existing or create new database files. ATTACH can also -be used to attach to multiple databases within the same interactive -session. This is useful for migrating data between databases, -possibly changing the schema along the way. - -Optionally, a SQL statement or set of SQL statements can be supplied as -a single argument. Multiple statements should be separated by -semi-colons. - -For example: -.sp -$ -.B sqlite3 -line mydata.db 'select * from memos where priority > 20;' -.br - text = lunch with Christine -.br -priority = 100 -.br -.sp - -.SS SQLITE META-COMMANDS -.PP -The interactive interpreter offers a set of meta-commands that can be -used to control the output format, examine the currently attached -database files, or perform administrative operations upon the -attached databases (such as rebuilding indices). Meta-commands are -always prefixed with a dot (.). - -A list of available meta-commands can be viewed at any time by issuing -the '.help' command. For example: -.sp -sqlite> -.B .help -.nf -.tr %. -%backup ?DB? FILE Backup DB (default "main") to FILE -%bail on|off Stop after hitting an error. Default OFF -%clone NEWDB Clone data into NEWDB from the existing database -%databases List names and files of attached databases -%dump ?TABLE? ... Dump the database in an SQL text format - If TABLE specified, only dump tables matching - LIKE pattern TABLE. -%echo on|off Turn command echo on or off -%eqp on|off Enable or disable automatic EXPLAIN QUERY PLAN -%exit Exit this program -%explain ?on|off? Turn output mode suitable for EXPLAIN on or off. - With no args, it turns EXPLAIN on. -%fullschema Show schema and the content of sqlite_stat tables -%headers on|off Turn display of headers on or off -%help Show this message -%import FILE TABLE Import data from FILE into TABLE -%indices ?TABLE? Show names of all indices - If TABLE specified, only show indices for tables - matching LIKE pattern TABLE. -%load FILE ?ENTRY? Load an extension library -%log FILE|off Turn logging on or off. FILE can be stderr/stdout -%mode MODE ?TABLE? Set output mode where MODE is one of: - csv Comma-separated values - column Left-aligned columns. (See .width) - html HTML code - insert SQL insert statements for TABLE - line One value per line - list Values delimited by .separator string - tabs Tab-separated values - tcl TCL list elements -%nullvalue STRING Use STRING in place of NULL values -%once FILENAME Output for the next SQL command only to FILENAME -%open ?FILENAME? Close existing database and reopen FILENAME -%output ?FILENAME? Send output to FILENAME or stdout -%print STRING... Print literal STRING -%prompt MAIN CONTINUE Replace the standard prompts -%quit Exit this program -%read FILENAME Execute SQL in FILENAME -%restore ?DB? FILE Restore content of DB (default "main") from FILE -%save FILE Write in-memory database into FILE -%schema ?TABLE? Show the CREATE statements - If TABLE specified, only show tables matching - LIKE pattern TABLE. -%separator STRING ?NL? Change separator used by output mode and .import - NL is the end-of-line mark for CSV -%shell CMD ARGS... Run CMD ARGS... in a system shell -%show Show the current values for various settings -%stats on|off Turn stats on or off -%system CMD ARGS... Run CMD ARGS... in a system shell -%tables ?TABLE? List names of tables - If TABLE specified, only list tables matching - LIKE pattern TABLE. -%timeout MS Try opening locked tables for MS milliseconds -%timer on|off Turn SQL timer on or off -%trace FILE|off Output each SQL statement as it is run -%vfsname ?AUX? Print the name of the VFS stack -%width NUM1 NUM2 ... Set column widths for "column" mode - Negative values right-justify -sqlite> -.sp -.fi -.SH OPTIONS -.B sqlite3 -has the following options: -.TP -.B \-bail -Stop after hitting an error. -.TP -.B \-batch -Force batch I/O. -.TP -.B \-column -Query results will be displayed in a table like form, using -whitespace characters to separate the columns and align the -output. -.TP -.BI \-cmd\ command -run -.I command -before reading stdin -.TP -.B \-csv -Set output mode to CSV (comma separated values). -.TP -.B \-echo -Print commands before execution. -.TP -.BI \-init\ file -Read and execute commands from -.I file -, which can contain a mix of SQL statements and meta-commands. -.TP -.B \-[no]header -Turn headers on or off. -.TP -.B \-help -Show help on options and exit. -.TP -.B \-html -Query results will be output as simple HTML tables. -.TP -.B \-interactive -Force interactive I/O. -.TP -.B \-line -Query results will be displayed with one value per line, rows -separated by a blank line. Designed to be easily parsed by -scripts or other programs -.TP -.B \-list -Query results will be displayed with the separator (|, by default) -character between each field value. The default. -.TP -.BI \-mmap\ N -Set default mmap size to -.I N -\. -.TP -.BI \-nullvalue\ string -Set string used to represent NULL values. Default is '' -(empty string). -.TP -.BI \-separator\ separator -Set output field separator. Default is '|'. -.TP -.B \-stats -Print memory stats before each finalize. -.TP -.B \-version -Show SQLite version. -.TP -.BI \-vfs\ name -Use -.I name -as the default VFS. - - -.SH INIT FILE -.B sqlite3 -reads an initialization file to set the configuration of the -interactive environment. Throughout initialization, any previously -specified setting can be overridden. The sequence of initialization is -as follows: - -o The default configuration is established as follows: - -.sp -.nf -.cc | -mode = LIST -separator = "|" -main prompt = "sqlite> " -continue prompt = " ...> " -|cc . -.sp -.fi - -o If the file -.B ~/.sqliterc -exists, it is processed first. -can be found in the user's home directory, it is -read and processed. It should generally only contain meta-commands. - -o If the -init option is present, the specified file is processed. - -o All other command line options are processed. - -.SH SEE ALSO -http://www.sqlite.org/cli.html -.br -The sqlite3-doc package. -.SH AUTHOR -This manual page was originally written by Andreas Rottmann -, for the Debian GNU/Linux system (but may be used -by others). It was subsequently revised by Bill Bumgarner and -further updated by Laszlo Boszormenyi . diff --git a/src/sqlite/SQLite-3.40.1/INSTALL b/src/sqlite/SQLite-3.43.1/INSTALL similarity index 100% rename from src/sqlite/SQLite-3.40.1/INSTALL rename to src/sqlite/SQLite-3.43.1/INSTALL diff --git a/src/sqlite/SQLite-3.40.1/Makefile.am b/src/sqlite/SQLite-3.43.1/Makefile.am similarity index 85% rename from src/sqlite/SQLite-3.40.1/Makefile.am rename to src/sqlite/SQLite-3.43.1/Makefile.am index 694419b27..1eaa560ff 100644 --- a/src/sqlite/SQLite-3.40.1/Makefile.am +++ b/src/sqlite/SQLite-3.43.1/Makefile.am @@ -9,7 +9,7 @@ sqlite3_SOURCES = shell.c sqlite3.h EXTRA_sqlite3_SOURCES = sqlite3.c sqlite3_LDADD = @EXTRA_SHELL_OBJ@ @READLINE_LIBS@ sqlite3_DEPENDENCIES = @EXTRA_SHELL_OBJ@ -sqlite3_CFLAGS = $(AM_CFLAGS) -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_ENABLE_STMTVTAB -DSQLITE_ENABLE_DBSTAT_VTAB $(SHELL_CFLAGS) +sqlite3_CFLAGS = $(AM_CFLAGS) -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_DQS=0 -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_ENABLE_STMTVTAB -DSQLITE_ENABLE_DBSTAT_VTAB $(SHELL_CFLAGS) include_HEADERS = sqlite3.h sqlite3ext.h diff --git a/src/sqlite/SQLite-3.40.1/Makefile.fallback b/src/sqlite/SQLite-3.43.1/Makefile.fallback similarity index 100% rename from src/sqlite/SQLite-3.40.1/Makefile.fallback rename to src/sqlite/SQLite-3.43.1/Makefile.fallback diff --git a/src/sqlite/SQLite-3.40.1/Makefile.in b/src/sqlite/SQLite-3.43.1/Makefile.in similarity index 99% rename from src/sqlite/SQLite-3.40.1/Makefile.in rename to src/sqlite/SQLite-3.43.1/Makefile.in index d45c6b8f4..fe708a0a9 100644 --- a/src/sqlite/SQLite-3.40.1/Makefile.in +++ b/src/sqlite/SQLite-3.43.1/Makefile.in @@ -371,7 +371,7 @@ sqlite3_SOURCES = shell.c sqlite3.h EXTRA_sqlite3_SOURCES = sqlite3.c sqlite3_LDADD = @EXTRA_SHELL_OBJ@ @READLINE_LIBS@ sqlite3_DEPENDENCIES = @EXTRA_SHELL_OBJ@ -sqlite3_CFLAGS = $(AM_CFLAGS) -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_ENABLE_STMTVTAB -DSQLITE_ENABLE_DBSTAT_VTAB $(SHELL_CFLAGS) +sqlite3_CFLAGS = $(AM_CFLAGS) -DSQLITE_ENABLE_EXPLAIN_COMMENTS -DSQLITE_DQS=0 -DSQLITE_ENABLE_DBPAGE_VTAB -DSQLITE_ENABLE_STMTVTAB -DSQLITE_ENABLE_DBSTAT_VTAB $(SHELL_CFLAGS) include_HEADERS = sqlite3.h sqlite3ext.h EXTRA_DIST = sqlite3.1 tea Makefile.msc sqlite3.rc sqlite3rc.h README.txt Replace.cs Makefile.fallback pkgconfigdir = ${libdir}/pkgconfig diff --git a/src/sqlite/SQLite-3.40.1/Makefile.msc b/src/sqlite/SQLite-3.43.1/Makefile.msc similarity index 98% rename from src/sqlite/SQLite-3.40.1/Makefile.msc rename to src/sqlite/SQLite-3.43.1/Makefile.msc index e36eb21ea..13663d877 100644 --- a/src/sqlite/SQLite-3.40.1/Makefile.msc +++ b/src/sqlite/SQLite-3.43.1/Makefile.msc @@ -52,6 +52,13 @@ MINIMAL_AMALGAMATION = 0 USE_STDCALL = 0 !ENDIF +# Set this non-0 to use structured exception handling (SEH) for WAL mode +# in the core library. +# +!IFNDEF USE_SEH +USE_SEH = 1 +!ENDIF + # Set this non-0 to have the shell executable link against the core dynamic # link library. # @@ -180,6 +187,12 @@ WIN32HEAP = 0 OSTRACE = 0 !ENDIF +# enable address sanitizer using ASAN=1 on the command-line. +# +!IFNDEF ASAN +ASAN = 0 +!ENDIF + # Set this to one of the following values to enable various debugging # features. Each level includes the debugging options from the previous # levels. Currently, the recognized values for DEBUG are: @@ -311,6 +324,13 @@ OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_MATH_FUNCTIONS OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_ENABLE_RBU=1 !ENDIF +# Should structured exception handling (SEH) be enabled for WAL mode in +# the core library? +# +!IF $(USE_SEH)!=0 +OPT_FEATURE_FLAGS = $(OPT_FEATURE_FLAGS) -DSQLITE_USE_SEH=1 +!ENDIF + # These are the "extended" SQLite compilation options used when compiling for # the Windows 10 platform. # @@ -718,6 +738,13 @@ RCC = $(RCC) -DSQLITE_WIN32_MALLOC_VALIDATE=1 !ENDIF +# Address sanitizer if ASAN=1 +# +!IF $(ASAN)>0 +TCC = $(TCC) /fsanitize=address +!ENDIF + + # Compiler options needed for programs that use the readline() library. # !IFNDEF READLINE_FLAGS @@ -955,6 +982,7 @@ LIBRESOBJS = # when the shell is not being dynamically linked. # !IF $(DYNAMIC_SHELL)==0 && $(FOR_WIN10)==0 +SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_DQS=0 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_FTS4=1 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_EXPLAIN_COMMENTS=1 SHELL_COMPILE_OPTS = $(SHELL_COMPILE_OPTS) -DSQLITE_ENABLE_OFFSET_SQL_FUNC=1 diff --git a/src/sqlite/SQLite-3.40.1/README.txt b/src/sqlite/SQLite-3.43.1/README.txt similarity index 100% rename from src/sqlite/SQLite-3.40.1/README.txt rename to src/sqlite/SQLite-3.43.1/README.txt diff --git a/src/sqlite/SQLite-3.40.1/Replace.cs b/src/sqlite/SQLite-3.43.1/Replace.cs similarity index 100% rename from src/sqlite/SQLite-3.40.1/Replace.cs rename to src/sqlite/SQLite-3.43.1/Replace.cs diff --git a/src/sqlite/SQLite-3.40.1/aclocal.m4 b/src/sqlite/SQLite-3.43.1/aclocal.m4 similarity index 100% rename from src/sqlite/SQLite-3.40.1/aclocal.m4 rename to src/sqlite/SQLite-3.43.1/aclocal.m4 diff --git a/src/sqlite/SQLite-3.40.1/compile b/src/sqlite/SQLite-3.43.1/compile similarity index 100% rename from src/sqlite/SQLite-3.40.1/compile rename to src/sqlite/SQLite-3.43.1/compile diff --git a/src/sqlite/SQLite-3.40.1/config.guess b/src/sqlite/SQLite-3.43.1/config.guess similarity index 100% rename from src/sqlite/SQLite-3.40.1/config.guess rename to src/sqlite/SQLite-3.43.1/config.guess diff --git a/src/sqlite/SQLite-3.40.1/config.sub b/src/sqlite/SQLite-3.43.1/config.sub similarity index 100% rename from src/sqlite/SQLite-3.40.1/config.sub rename to src/sqlite/SQLite-3.43.1/config.sub diff --git a/src/sqlite/SQLite-3.40.1/configure b/src/sqlite/SQLite-3.43.1/configure similarity index 99% rename from src/sqlite/SQLite-3.40.1/configure rename to src/sqlite/SQLite-3.43.1/configure index 13ff272ad..39694c067 100755 --- a/src/sqlite/SQLite-3.40.1/configure +++ b/src/sqlite/SQLite-3.43.1/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for sqlite 3.40.1. +# Generated by GNU Autoconf 2.71 for sqlite 3.43.1. # # Report bugs to . # @@ -621,8 +621,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sqlite' PACKAGE_TARNAME='sqlite' -PACKAGE_VERSION='3.40.1' -PACKAGE_STRING='sqlite 3.40.1' +PACKAGE_VERSION='3.43.1' +PACKAGE_STRING='sqlite 3.43.1' PACKAGE_BUGREPORT='http://www.sqlite.org' PACKAGE_URL='' @@ -1367,7 +1367,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sqlite 3.40.1 to adapt to many kinds of systems. +\`configure' configures sqlite 3.43.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1438,7 +1438,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sqlite 3.40.1:";; + short | recursive ) echo "Configuration of sqlite 3.43.1:";; esac cat <<\_ACEOF @@ -1563,7 +1563,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sqlite configure 3.40.1 +sqlite configure 3.43.1 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1833,7 +1833,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sqlite $as_me 3.40.1, which was +It was created by sqlite $as_me 3.43.1, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3106,7 +3106,7 @@ fi # Define the identity of the package. PACKAGE='sqlite' - VERSION='3.40.1' + VERSION='3.43.1' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -15314,7 +15314,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sqlite $as_me 3.40.1, which was +This file was extended by sqlite $as_me 3.43.1, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -15373,7 +15373,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -sqlite config.status 3.40.1 +sqlite config.status 3.43.1 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff --git a/src/sqlite/SQLite-3.40.1/configure.ac b/src/sqlite/SQLite-3.43.1/configure.ac similarity index 99% rename from src/sqlite/SQLite-3.40.1/configure.ac rename to src/sqlite/SQLite-3.43.1/configure.ac index bb8a90eba..3d7da8b98 100644 --- a/src/sqlite/SQLite-3.40.1/configure.ac +++ b/src/sqlite/SQLite-3.43.1/configure.ac @@ -10,7 +10,7 @@ # AC_PREREQ(2.61) -AC_INIT(sqlite, 3.40.1, http://www.sqlite.org) +AC_INIT(sqlite, 3.43.1, http://www.sqlite.org) AC_CONFIG_SRCDIR([sqlite3.c]) AC_CONFIG_AUX_DIR([.]) diff --git a/src/sqlite/SQLite-3.40.1/depcomp b/src/sqlite/SQLite-3.43.1/depcomp similarity index 100% rename from src/sqlite/SQLite-3.40.1/depcomp rename to src/sqlite/SQLite-3.43.1/depcomp diff --git a/src/sqlite/SQLite-3.40.1/install-sh b/src/sqlite/SQLite-3.43.1/install-sh similarity index 100% rename from src/sqlite/SQLite-3.40.1/install-sh rename to src/sqlite/SQLite-3.43.1/install-sh diff --git a/src/sqlite/SQLite-3.40.1/ltmain.sh b/src/sqlite/SQLite-3.43.1/ltmain.sh similarity index 100% rename from src/sqlite/SQLite-3.40.1/ltmain.sh rename to src/sqlite/SQLite-3.43.1/ltmain.sh diff --git a/src/sqlite/SQLite-3.40.1/missing b/src/sqlite/SQLite-3.43.1/missing similarity index 100% rename from src/sqlite/SQLite-3.40.1/missing rename to src/sqlite/SQLite-3.43.1/missing diff --git a/src/sqlite/SQLite-3.40.1/shell.c b/src/sqlite/SQLite-3.43.1/shell.c similarity index 90% rename from src/sqlite/SQLite-3.40.1/shell.c rename to src/sqlite/SQLite-3.43.1/shell.c index 63f708c0b..6b2cdca83 100644 --- a/src/sqlite/SQLite-3.40.1/shell.c +++ b/src/sqlite/SQLite-3.43.1/shell.c @@ -39,7 +39,7 @@ typedef unsigned short int u16; /* ** Optionally #include a user-defined header, whereby compilation options -** may be set prior to where they take effect, but after platform setup. +** may be set prior to where they take effect, but after platform setup. ** If SQLITE_CUSTOM_INCLUDE=? is defined, its value names the #include ** file. Note that this macro has a like effect on sqlite3.c compilation. */ @@ -117,6 +117,7 @@ typedef unsigned short int u16; #include #include #include +#include #include "sqlite3.h" typedef sqlite3_int64 i64; typedef sqlite3_uint64 u64; @@ -129,7 +130,7 @@ typedef unsigned char u8; #if !defined(_WIN32) && !defined(WIN32) # include -# if !defined(__RTP__) && !defined(_WRS_KERNEL) +# if !defined(__RTP__) && !defined(_WRS_KERNEL) && !defined(SQLITE_WASI) # include # endif #endif @@ -184,6 +185,14 @@ typedef unsigned char u8; # define SHELL_USE_LOCAL_GETLINE 1 #endif +#ifndef deliberate_fall_through +/* Quiet some compilers about some of our intentional code. */ +# if defined(GCC_VERSION) && GCC_VERSION>=7000000 +# define deliberate_fall_through __attribute__((fallthrough)); +# else +# define deliberate_fall_through +# endif +#endif #if defined(_WIN32) || defined(WIN32) # if SQLITE_OS_WINRT @@ -210,7 +219,7 @@ typedef unsigned char u8; /* Make sure isatty() has a prototype. */ extern int isatty(int); -# if !defined(__RTP__) && !defined(_WRS_KERNEL) +# if !defined(__RTP__) && !defined(_WRS_KERNEL) && !defined(SQLITE_WASI) /* popen and pclose are not C89 functions and so are ** sometimes omitted from the header */ extern FILE *popen(const char*,const char*); @@ -237,6 +246,8 @@ typedef unsigned char u8; #if SQLITE_OS_WINRT #include #endif +#undef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include /* string conversion routines only needed on Win32 */ @@ -451,11 +462,25 @@ static void endTimer(void){ static int bail_on_error = 0; /* -** Threat stdin as an interactive input if the following variable +** Treat stdin as an interactive input if the following variable ** is true. Otherwise, assume stdin is connected to a file or pipe. */ static int stdin_is_interactive = 1; +#if (defined(_WIN32) || defined(WIN32)) && SHELL_USE_LOCAL_GETLINE \ + && !defined(SHELL_OMIT_WIN_UTF8) +# define SHELL_WIN_UTF8_OPT 1 +#else +# define SHELL_WIN_UTF8_OPT 0 +#endif + +#if SHELL_WIN_UTF8_OPT +/* +** Setup console for UTF-8 input/output when following variable true. +*/ +static int console_utf8 = 0; +#endif + /* ** On Windows systems we have to know if standard output is a console ** in order to translate UTF-8 into MBCS. The following variable is @@ -485,19 +510,253 @@ static char *Argv0; ** Prompt strings. Initialized in main. Settable with ** .prompt main continue */ -static char mainPrompt[20]; /* First line prompt. default: "sqlite> "*/ -static char continuePrompt[20]; /* Continuation prompt. default: " ...> " */ +#define PROMPT_LEN_MAX 20 +/* First line prompt. default: "sqlite> " */ +static char mainPrompt[PROMPT_LEN_MAX]; +/* Continuation prompt. default: " ...> " */ +static char continuePrompt[PROMPT_LEN_MAX]; + +/* This is variant of the standard-library strncpy() routine with the +** one change that the destination string is always zero-terminated, even +** if there is no zero-terminator in the first n-1 characters of the source +** string. +*/ +static char *shell_strncpy(char *dest, const char *src, size_t n){ + size_t i; + for(i=0; iinParenLevel += ni; + if( ni==0 ) p->inParenLevel = 0; + p->zScannerAwaits = 0; +} + +/* Record that a lexeme is opened, or closed with args==0. */ +static void setLexemeOpen(struct DynaPrompt *p, char *s, char c){ + if( s!=0 || c==0 ){ + p->zScannerAwaits = s; + p->acAwait[0] = 0; + }else{ + p->acAwait[0] = c; + p->zScannerAwaits = p->acAwait; + } +} + +/* Upon demand, derive the continuation prompt to display. */ +static char *dynamicContinuePrompt(void){ + if( continuePrompt[0]==0 + || (dynPrompt.zScannerAwaits==0 && dynPrompt.inParenLevel == 0) ){ + return continuePrompt; + }else{ + if( dynPrompt.zScannerAwaits ){ + size_t ncp = strlen(continuePrompt); + size_t ndp = strlen(dynPrompt.zScannerAwaits); + if( ndp > ncp-3 ) return continuePrompt; + strcpy(dynPrompt.dynamicPrompt, dynPrompt.zScannerAwaits); + while( ndp<3 ) dynPrompt.dynamicPrompt[ndp++] = ' '; + shell_strncpy(dynPrompt.dynamicPrompt+3, continuePrompt+3, + PROMPT_LEN_MAX-4); + }else{ + if( dynPrompt.inParenLevel>9 ){ + shell_strncpy(dynPrompt.dynamicPrompt, "(..", 4); + }else if( dynPrompt.inParenLevel<0 ){ + shell_strncpy(dynPrompt.dynamicPrompt, ")x!", 4); + }else{ + shell_strncpy(dynPrompt.dynamicPrompt, "(x.", 4); + dynPrompt.dynamicPrompt[2] = (char)('0'+dynPrompt.inParenLevel); + } + shell_strncpy(dynPrompt.dynamicPrompt+3, continuePrompt+3, PROMPT_LEN_MAX-4); + } + } + return dynPrompt.dynamicPrompt; +} +#endif /* !defined(SQLITE_OMIT_DYNAPROMPT) */ + +#if SHELL_WIN_UTF8_OPT +/* Following struct is used for -utf8 operation. */ +static struct ConsoleState { + int stdinEof; /* EOF has been seen on console input */ + int infsMode; /* Input file stream mode upon shell start */ + UINT inCodePage; /* Input code page upon shell start */ + UINT outCodePage; /* Output code page upon shell start */ + HANDLE hConsoleIn; /* Console input handle */ + DWORD consoleMode; /* Console mode upon shell start */ +} conState = { 0, 0, 0, 0, INVALID_HANDLE_VALUE, 0 }; + +#ifndef _O_U16TEXT /* For build environments lacking this constant: */ +# define _O_U16TEXT 0x20000 +#endif + +/* +** Prepare console, (if known to be a WIN32 console), for UTF-8 +** input (from either typing or suitable paste operations) and for +** UTF-8 rendering. This may "fail" with a message to stderr, where +** the preparation is not done and common "code page" issues occur. +*/ +static void console_prepare(void){ + HANDLE hCI = GetStdHandle(STD_INPUT_HANDLE); + DWORD consoleMode = 0; + if( isatty(0) && GetFileType(hCI)==FILE_TYPE_CHAR + && GetConsoleMode( hCI, &consoleMode) ){ + if( !IsValidCodePage(CP_UTF8) ){ + fprintf(stderr, "Cannot use UTF-8 code page.\n"); + console_utf8 = 0; + return; + } + conState.hConsoleIn = hCI; + conState.consoleMode = consoleMode; + conState.inCodePage = GetConsoleCP(); + conState.outCodePage = GetConsoleOutputCP(); + SetConsoleCP(CP_UTF8); + SetConsoleOutputCP(CP_UTF8); + consoleMode |= ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT; + SetConsoleMode(conState.hConsoleIn, consoleMode); + conState.infsMode = _setmode(_fileno(stdin), _O_U16TEXT); + console_utf8 = 1; + }else{ + console_utf8 = 0; + } +} + +/* +** Undo the effects of console_prepare(), if any. +*/ +static void SQLITE_CDECL console_restore(void){ + if( console_utf8 && conState.inCodePage!=0 + && conState.hConsoleIn!=INVALID_HANDLE_VALUE ){ + _setmode(_fileno(stdin), conState.infsMode); + SetConsoleCP(conState.inCodePage); + SetConsoleOutputCP(conState.outCodePage); + SetConsoleMode(conState.hConsoleIn, conState.consoleMode); + /* Avoid multiple calls. */ + conState.hConsoleIn = INVALID_HANDLE_VALUE; + conState.consoleMode = 0; + console_utf8 = 0; + } +} + +/* +** Collect input like fgets(...) with special provisions for input +** from the Windows console to get around its strange coding issues. +** Defers to plain fgets() when input is not interactive or when the +** startup option, -utf8, has not been provided or taken effect. +*/ +static char* utf8_fgets(char *buf, int ncmax, FILE *fin){ + if( fin==0 ) fin = stdin; + if( fin==stdin && stdin_is_interactive && console_utf8 ){ +# define SQLITE_IALIM 150 + wchar_t wbuf[SQLITE_IALIM]; + int lend = 0; + int noc = 0; + if( ncmax==0 || conState.stdinEof ) return 0; + buf[0] = 0; + while( noc SQLITE_IALIM*4+1 + noc) + ? SQLITE_IALIM : (ncmax-1 - noc)/4; +# undef SQLITE_IALIM + DWORD nbr = 0; + BOOL bRC = ReadConsoleW(conState.hConsoleIn, wbuf, na, &nbr, 0); + if( !bRC || (noc==0 && nbr==0) ) return 0; + if( nbr > 0 ){ + int nmb = WideCharToMultiByte(CP_UTF8,WC_COMPOSITECHECK|WC_DEFAULTCHAR, + wbuf,nbr,0,0,0,0); + if( nmb !=0 && noc+nmb <= ncmax ){ + int iseg = noc; + nmb = WideCharToMultiByte(CP_UTF8,WC_COMPOSITECHECK|WC_DEFAULTCHAR, + wbuf,nbr,buf+noc,nmb,0,0); + noc += nmb; + /* Fixup line-ends as coded by Windows for CR (or "Enter".)*/ + if( noc > 0 ){ + if( buf[noc-1]=='\n' ){ + lend = 1; + if( noc > 1 && buf[noc-2]=='\r' ){ + buf[noc-2] = '\n'; + --noc; + } + } + } + /* Check for ^Z (anywhere in line) too. */ + while( iseg < noc ){ + if( buf[iseg]==0x1a ){ + conState.stdinEof = 1; + noc = iseg; /* Chop ^Z and anything following. */ + break; + } + ++iseg; + } + }else break; /* Drop apparent garbage in. (Could assert.) */ + }else break; + } + /* If got nothing, (after ^Z chop), must be at end-of-file. */ + if( noc == 0 ) return 0; + buf[noc] = 0; + return buf; + }else{ + return fgets(buf, ncmax, fin); + } +} + +# define fgets(b,n,f) utf8_fgets(b,n,f) +#endif /* SHELL_WIN_UTF8_OPT */ /* ** Render output like fprintf(). Except, if the output is going to the -** console and if this is running on a Windows machine, translate the -** output from UTF-8 into MBCS. +** console and if this is running on a Windows machine, and if the -utf8 +** option is unavailable or (available and inactive), translate the +** output from UTF-8 into MBCS for output through 8-bit stdout stream. +** (With -utf8 active, no translation is needed and must not be done.) */ #if defined(_WIN32) || defined(WIN32) void utf8_printf(FILE *out, const char *zFormat, ...){ va_list ap; va_start(ap, zFormat); - if( stdout_is_console && (out==stdout || out==stderr) ){ + if( stdout_is_console && (out==stdout || out==stderr) +# if SHELL_WIN_UTF8_OPT + && !console_utf8 +# endif + ){ char *z1 = sqlite3_vmprintf(zFormat, ap); char *z2 = sqlite3_win32_utf8_to_mbcs_v2(z1, 0); sqlite3_free(z1); @@ -529,7 +788,7 @@ static void shell_out_of_memory(void){ /* Check a pointer to see if it is NULL. If it is NULL, exit with an ** out-of-memory error. */ -static void shell_check_oom(void *p){ +static void shell_check_oom(const void *p){ if( p==0 ) shell_out_of_memory(); } @@ -708,9 +967,14 @@ static char *local_getline(char *zLine, FILE *in){ } } #if defined(_WIN32) || defined(WIN32) - /* For interactive input on Windows systems, translate the - ** multi-byte characterset characters into UTF-8. */ - if( stdin_is_interactive && in==stdin ){ + /* For interactive input on Windows systems, without -utf8, + ** translate the multi-byte characterset characters into UTF-8. + ** This is the translation that predates the -utf8 option. */ + if( stdin_is_interactive && in==stdin +# if SHELL_WIN_UTF8_OPT + && !console_utf8 +# endif /* SHELL_WIN_UTF8_OPT */ + ){ char *zTrans = sqlite3_win32_mbcs_to_utf8_v2(zLine, 0); if( zTrans ){ i64 nTrans = strlen(zTrans)+1; @@ -747,14 +1011,25 @@ static char *one_input_line(FILE *in, char *zPrior, int isContinuation){ if( in!=0 ){ zResult = local_getline(zPrior, in); }else{ - zPrompt = isContinuation ? continuePrompt : mainPrompt; + zPrompt = isContinuation ? CONTINUATION_PROMPT : mainPrompt; #if SHELL_USE_LOCAL_GETLINE printf("%s", zPrompt); fflush(stdout); - zResult = local_getline(zPrior, stdin); + do{ + zResult = local_getline(zPrior, stdin); + zPrior = 0; + /* ^C trap creates a false EOF, so let "interrupt" thread catch up. */ + if( zResult==0 ) sqlite3_sleep(50); + }while( zResult==0 && seenInterrupt>0 ); #else free(zPrior); zResult = shell_readline(zPrompt); + while( zResult==0 ){ + /* ^C trap creates a false EOF, so let "interrupt" thread catch up. */ + sqlite3_sleep(50); + if( seenInterrupt==0 ) break; + zResult = shell_readline(""); + } if( zResult && *zResult ) shell_add_history(zResult); #endif } @@ -894,6 +1169,7 @@ static void appendText(ShellText *p, const char *zAppend, char quote){ */ static char quoteChar(const char *zName){ int i; + if( zName==0 ) return '"'; if( !isalpha((unsigned char)zName[0]) && zName[0]!='_' ) return '"'; for(i=0; zName[i]; i++){ if( !isalnum((unsigned char)zName[i]) && zName[i]!='_' ) return '"'; @@ -949,6 +1225,46 @@ static char *shellFakeSchema( return s.z; } +/* +** SQL function: strtod(X) +** +** Use the C-library strtod() function to convert string X into a double. +** Used for comparing the accuracy of SQLite's internal text-to-float conversion +** routines against the C-library. +*/ +static void shellStrtod( + sqlite3_context *pCtx, + int nVal, + sqlite3_value **apVal +){ + char *z = (char*)sqlite3_value_text(apVal[0]); + UNUSED_PARAMETER(nVal); + if( z==0 ) return; + sqlite3_result_double(pCtx, strtod(z,0)); +} + +/* +** SQL function: dtostr(X) +** +** Use the C-library printf() function to convert real value X into a string. +** Used for comparing the accuracy of SQLite's internal float-to-text conversion +** routines against the C-library. +*/ +static void shellDtostr( + sqlite3_context *pCtx, + int nVal, + sqlite3_value **apVal +){ + double r = sqlite3_value_double(apVal[0]); + int n = nVal>=2 ? sqlite3_value_int(apVal[1]) : 26; + char z[400]; + if( n<1 ) n = 1; + if( n>350 ) n = 350; + sprintf(z, "%#+.*e", n, r); + sqlite3_result_text(pCtx, z, -1, SQLITE_TRANSIENT); +} + + /* ** SQL function: shell_module_schema(X) ** @@ -964,7 +1280,7 @@ static void shellModuleSchema( char *zFake; UNUSED_PARAMETER(nVal); zName = (const char*)sqlite3_value_text(apVal[0]); - zFake = zName ? shellFakeSchema(sqlite3_context_db_handle(pCtx), 0, zName) : 0; + zFake = zName? shellFakeSchema(sqlite3_context_db_handle(pCtx), 0, zName) : 0; if( zFake ){ sqlite3_result_text(pCtx, sqlite3_mprintf("/* %s */", zFake), -1, sqlite3_free); @@ -1198,7 +1514,7 @@ struct DIR { #endif /* -** Provide the function prototype for the POSIX compatiable getenv() +** Provide the function prototype for the POSIX compatible getenv() ** function. This function is not thread-safe. */ @@ -1524,6 +1840,188 @@ int sqlite3MemTraceDeactivate(void){ } /************************* End ../ext/misc/memtrace.c ********************/ +/************************* Begin ../ext/misc/pcachetrace.c ******************/ +/* +** 2023-06-21 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This file implements an extension that uses the SQLITE_CONFIG_PCACHE2 +** mechanism to add a tracing layer on top of pluggable page cache of +** SQLite. If this extension is registered prior to sqlite3_initialize(), +** it will cause all page cache activities to be logged on standard output, +** or to some other FILE specified by the initializer. +** +** This file needs to be compiled into the application that uses it. +** +** This extension is used to implement the --pcachetrace option of the +** command-line shell. +*/ +#include +#include +#include + +/* The original page cache routines */ +static sqlite3_pcache_methods2 pcacheBase; +static FILE *pcachetraceOut; + +/* Methods that trace pcache activity */ +static int pcachetraceInit(void *pArg){ + int nRes; + if( pcachetraceOut ){ + fprintf(pcachetraceOut, "PCACHETRACE: xInit(%p)\n", pArg); + } + nRes = pcacheBase.xInit(pArg); + if( pcachetraceOut ){ + fprintf(pcachetraceOut, "PCACHETRACE: xInit(%p) -> %d\n", pArg, nRes); + } + return nRes; +} +static void pcachetraceShutdown(void *pArg){ + if( pcachetraceOut ){ + fprintf(pcachetraceOut, "PCACHETRACE: xShutdown(%p)\n", pArg); + } + pcacheBase.xShutdown(pArg); +} +static sqlite3_pcache *pcachetraceCreate(int szPage, int szExtra, int bPurge){ + sqlite3_pcache *pRes; + if( pcachetraceOut ){ + fprintf(pcachetraceOut, "PCACHETRACE: xCreate(%d,%d,%d)\n", + szPage, szExtra, bPurge); + } + pRes = pcacheBase.xCreate(szPage, szExtra, bPurge); + if( pcachetraceOut ){ + fprintf(pcachetraceOut, "PCACHETRACE: xCreate(%d,%d,%d) -> %p\n", + szPage, szExtra, bPurge, pRes); + } + return pRes; +} +static void pcachetraceCachesize(sqlite3_pcache *p, int nCachesize){ + if( pcachetraceOut ){ + fprintf(pcachetraceOut, "PCACHETRACE: xCachesize(%p, %d)\n", p, nCachesize); + } + pcacheBase.xCachesize(p, nCachesize); +} +static int pcachetracePagecount(sqlite3_pcache *p){ + int nRes; + if( pcachetraceOut ){ + fprintf(pcachetraceOut, "PCACHETRACE: xPagecount(%p)\n", p); + } + nRes = pcacheBase.xPagecount(p); + if( pcachetraceOut ){ + fprintf(pcachetraceOut, "PCACHETRACE: xPagecount(%p) -> %d\n", p, nRes); + } + return nRes; +} +static sqlite3_pcache_page *pcachetraceFetch( + sqlite3_pcache *p, + unsigned key, + int crFg +){ + sqlite3_pcache_page *pRes; + if( pcachetraceOut ){ + fprintf(pcachetraceOut, "PCACHETRACE: xFetch(%p,%u,%d)\n", p, key, crFg); + } + pRes = pcacheBase.xFetch(p, key, crFg); + if( pcachetraceOut ){ + fprintf(pcachetraceOut, "PCACHETRACE: xFetch(%p,%u,%d) -> %p\n", + p, key, crFg, pRes); + } + return pRes; +} +static void pcachetraceUnpin( + sqlite3_pcache *p, + sqlite3_pcache_page *pPg, + int bDiscard +){ + if( pcachetraceOut ){ + fprintf(pcachetraceOut, "PCACHETRACE: xUnpin(%p, %p, %d)\n", + p, pPg, bDiscard); + } + pcacheBase.xUnpin(p, pPg, bDiscard); +} +static void pcachetraceRekey( + sqlite3_pcache *p, + sqlite3_pcache_page *pPg, + unsigned oldKey, + unsigned newKey +){ + if( pcachetraceOut ){ + fprintf(pcachetraceOut, "PCACHETRACE: xRekey(%p, %p, %u, %u)\n", + p, pPg, oldKey, newKey); + } + pcacheBase.xRekey(p, pPg, oldKey, newKey); +} +static void pcachetraceTruncate(sqlite3_pcache *p, unsigned n){ + if( pcachetraceOut ){ + fprintf(pcachetraceOut, "PCACHETRACE: xTruncate(%p, %u)\n", p, n); + } + pcacheBase.xTruncate(p, n); +} +static void pcachetraceDestroy(sqlite3_pcache *p){ + if( pcachetraceOut ){ + fprintf(pcachetraceOut, "PCACHETRACE: xDestroy(%p)\n", p); + } + pcacheBase.xDestroy(p); +} +static void pcachetraceShrink(sqlite3_pcache *p){ + if( pcachetraceOut ){ + fprintf(pcachetraceOut, "PCACHETRACE: xShrink(%p)\n", p); + } + pcacheBase.xShrink(p); +} + +/* The substitute pcache methods */ +static sqlite3_pcache_methods2 ersaztPcacheMethods = { + 0, + 0, + pcachetraceInit, + pcachetraceShutdown, + pcachetraceCreate, + pcachetraceCachesize, + pcachetracePagecount, + pcachetraceFetch, + pcachetraceUnpin, + pcachetraceRekey, + pcachetraceTruncate, + pcachetraceDestroy, + pcachetraceShrink +}; + +/* Begin tracing memory allocations to out. */ +int sqlite3PcacheTraceActivate(FILE *out){ + int rc = SQLITE_OK; + if( pcacheBase.xFetch==0 ){ + rc = sqlite3_config(SQLITE_CONFIG_GETPCACHE2, &pcacheBase); + if( rc==SQLITE_OK ){ + rc = sqlite3_config(SQLITE_CONFIG_PCACHE2, &ersaztPcacheMethods); + } + } + pcachetraceOut = out; + return rc; +} + +/* Deactivate memory tracing */ +int sqlite3PcacheTraceDeactivate(void){ + int rc = SQLITE_OK; + if( pcacheBase.xFetch!=0 ){ + rc = sqlite3_config(SQLITE_CONFIG_PCACHE2, &pcacheBase); + if( rc==SQLITE_OK ){ + memset(&pcacheBase, 0, sizeof(pcacheBase)); + } + } + pcachetraceOut = 0; + return rc; +} + +/************************* End ../ext/misc/pcachetrace.c ********************/ /************************* Begin ../ext/misc/shathree.c ******************/ /* ** 2017-03-08 @@ -1537,7 +2035,8 @@ int sqlite3MemTraceDeactivate(void){ ** ****************************************************************************** ** -** This SQLite extension implements functions that compute SHA3 hashes. +** This SQLite extension implements functions that compute SHA3 hashes +** in the way described by the (U.S.) NIST FIPS 202 SHA-3 Standard. ** Two SQL functions are implemented: ** ** sha3(X,SIZE) @@ -2058,7 +2557,7 @@ static void sha3Func( /* Compute a string using sqlite3_vsnprintf() with a maximum length ** of 50 bytes and add it to the hash. */ -static void hash_step_vformat( +static void sha3_step_vformat( SHA3Context *p, /* Add content to this context */ const char *zFormat, ... @@ -2154,7 +2653,7 @@ static void sha3QueryFunc( z = sqlite3_sql(pStmt); if( z ){ n = (int)strlen(z); - hash_step_vformat(&cx,"S%d:",n); + sha3_step_vformat(&cx,"S%d:",n); SHA3Update(&cx,(unsigned char*)z,n); } @@ -2198,14 +2697,14 @@ static void sha3QueryFunc( case SQLITE_TEXT: { int n2 = sqlite3_column_bytes(pStmt, i); const unsigned char *z2 = sqlite3_column_text(pStmt, i); - hash_step_vformat(&cx,"T%d:",n2); + sha3_step_vformat(&cx,"T%d:",n2); SHA3Update(&cx, z2, n2); break; } case SQLITE_BLOB: { int n2 = sqlite3_column_bytes(pStmt, i); const unsigned char *z2 = sqlite3_column_blob(pStmt, i); - hash_step_vformat(&cx,"B%d:",n2); + sha3_step_vformat(&cx,"B%d:",n2); SHA3Update(&cx, z2, n2); break; } @@ -2407,41 +2906,24 @@ static void decimal_free(Decimal *p){ } /* -** Allocate a new Decimal object. Initialize it to the number given -** by the input string. +** Allocate a new Decimal object initialized to the text in zIn[]. +** Return NULL if any kind of error occurs. */ -static Decimal *decimal_new( - sqlite3_context *pCtx, - sqlite3_value *pIn, - int nAlt, - const unsigned char *zAlt -){ - Decimal *p; - int n, i; - const unsigned char *zIn; +static Decimal *decimalNewFromText(const char *zIn, int n){ + Decimal *p = 0; + int i; int iExp = 0; + p = sqlite3_malloc( sizeof(*p) ); - if( p==0 ) goto new_no_mem; + if( p==0 ) goto new_from_text_failed; p->sign = 0; p->oom = 0; p->isInit = 1; p->isNull = 0; p->nDigit = 0; p->nFrac = 0; - if( zAlt ){ - n = nAlt, - zIn = zAlt; - }else{ - if( sqlite3_value_type(pIn)==SQLITE_NULL ){ - p->a = 0; - p->isNull = 1; - return p; - } - n = sqlite3_value_bytes(pIn); - zIn = sqlite3_value_text(pIn); - } p->a = sqlite3_malloc64( n+1 ); - if( p->a==0 ) goto new_no_mem; + if( p->a==0 ) goto new_from_text_failed; for(i=0; isspace(zIn[i]); i++){} if( zIn[i]=='-' ){ p->sign = 1; @@ -2492,7 +2974,7 @@ static Decimal *decimal_new( } if( iExp>0 ){ p->a = sqlite3_realloc64(p->a, p->nDigit + iExp + 1 ); - if( p->a==0 ) goto new_no_mem; + if( p->a==0 ) goto new_from_text_failed; memset(p->a+p->nDigit, 0, iExp); p->nDigit += iExp; } @@ -2511,7 +2993,7 @@ static Decimal *decimal_new( } if( iExp>0 ){ p->a = sqlite3_realloc64(p->a, p->nDigit + iExp + 1 ); - if( p->a==0 ) goto new_no_mem; + if( p->a==0 ) goto new_from_text_failed; memmove(p->a+iExp, p->a, p->nDigit); memset(p->a, 0, iExp); p->nDigit += iExp; @@ -2520,7 +3002,76 @@ static Decimal *decimal_new( } return p; -new_no_mem: +new_from_text_failed: + if( p ){ + if( p->a ) sqlite3_free(p->a); + sqlite3_free(p); + } + return 0; +} + +/* Forward reference */ +static Decimal *decimalFromDouble(double); + +/* +** Allocate a new Decimal object from an sqlite3_value. Return a pointer +** to the new object, or NULL if there is an error. If the pCtx argument +** is not NULL, then errors are reported on it as well. +** +** If the pIn argument is SQLITE_TEXT or SQLITE_INTEGER, it is converted +** directly into a Decimal. For SQLITE_FLOAT or for SQLITE_BLOB of length +** 8 bytes, the resulting double value is expanded into its decimal equivalent. +** If pIn is NULL or if it is a BLOB that is not exactly 8 bytes in length, +** then NULL is returned. +*/ +static Decimal *decimal_new( + sqlite3_context *pCtx, /* Report error here, if not null */ + sqlite3_value *pIn, /* Construct the decimal object from this */ + int bTextOnly /* Always interpret pIn as text if true */ +){ + Decimal *p = 0; + int eType = sqlite3_value_type(pIn); + if( bTextOnly && (eType==SQLITE_FLOAT || eType==SQLITE_BLOB) ){ + eType = SQLITE_TEXT; + } + switch( eType ){ + case SQLITE_TEXT: + case SQLITE_INTEGER: { + const char *zIn = (const char*)sqlite3_value_text(pIn); + int n = sqlite3_value_bytes(pIn); + p = decimalNewFromText(zIn, n); + if( p==0 ) goto new_failed; + break; + } + + case SQLITE_FLOAT: { + p = decimalFromDouble(sqlite3_value_double(pIn)); + break; + } + + case SQLITE_BLOB: { + const unsigned char *x; + unsigned int i; + sqlite3_uint64 v = 0; + double r; + + if( sqlite3_value_bytes(pIn)!=sizeof(r) ) break; + x = sqlite3_value_blob(pIn); + for(i=0; ioom ){ + sqlite3_result_error_nomem(pCtx); + return; + } + if( p->isNull ){ + sqlite3_result_null(pCtx); + return; + } + for(nDigit=p->nDigit; nDigit>0 && p->a[nDigit-1]==0; nDigit--){} + for(nZero=0; nZeroa[nZero]==0; nZero++){} + nFrac = p->nFrac + (nDigit - p->nDigit); + nDigit -= nZero; + z = sqlite3_malloc( nDigit+20 ); + if( z==0 ){ + sqlite3_result_error_nomem(pCtx); + return; + } + if( nDigit==0 ){ + zero = 0; + a = &zero; + nDigit = 1; + nFrac = 0; + }else{ + a = &p->a[nZero]; + } + if( p->sign && nDigit>0 ){ + z[0] = '-'; + }else{ + z[0] = '+'; + } + z[1] = a[0]+'0'; + z[2] = '.'; + if( nDigit==1 ){ + z[3] = '0'; + i = 4; + }else{ + for(i=1; iisNull ) goto cmp_done; - pB = decimal_new(context, argv[1], 0, 0); + pB = decimal_new(context, argv[1], 1); if( pB==0 || pB->isNull ) goto cmp_done; rc = decimal_cmp(pA, pB); if( rc<0 ) rc = -1; @@ -2687,7 +3283,7 @@ static void decimal_expand(Decimal *p, int nDigit, int nFrac){ } /* -** Add the value pB into pA. +** Add the value pB into pA. A := A + B. ** ** Both pA and pB might become denormalized by this routine. */ @@ -2757,58 +3353,224 @@ static void decimal_add(Decimal *pA, Decimal *pB){ } /* -** Compare text in decimal order. -*/ -static int decimalCollFunc( - void *notUsed, - int nKey1, const void *pKey1, - int nKey2, const void *pKey2 -){ - const unsigned char *zA = (const unsigned char*)pKey1; - const unsigned char *zB = (const unsigned char*)pKey2; - Decimal *pA = decimal_new(0, 0, nKey1, zA); - Decimal *pB = decimal_new(0, 0, nKey2, zB); - int rc; - UNUSED_PARAMETER(notUsed); - if( pA==0 || pB==0 ){ - rc = 0; - }else{ - rc = decimal_cmp(pA, pB); - } - decimal_free(pA); - decimal_free(pB); - return rc; -} - - -/* -** SQL Function: decimal_add(X, Y) -** decimal_sub(X, Y) +** Multiply A by B. A := A * B ** -** Return the sum or difference of X and Y. +** All significant digits after the decimal point are retained. +** Trailing zeros after the decimal point are omitted as long as +** the number of digits after the decimal point is no less than +** either the number of digits in either input. */ -static void decimalAddFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - Decimal *pA = decimal_new(context, argv[0], 0, 0); - Decimal *pB = decimal_new(context, argv[1], 0, 0); - UNUSED_PARAMETER(argc); - decimal_add(pA, pB); - decimal_result(context, pA); - decimal_free(pA); - decimal_free(pB); -} -static void decimalSubFunc( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - Decimal *pA = decimal_new(context, argv[0], 0, 0); - Decimal *pB = decimal_new(context, argv[1], 0, 0); - UNUSED_PARAMETER(argc); - if( pB ){ +static void decimalMul(Decimal *pA, Decimal *pB){ + signed char *acc = 0; + int i, j, k; + int minFrac; + + if( pA==0 || pA->oom || pA->isNull + || pB==0 || pB->oom || pB->isNull + ){ + goto mul_end; + } + acc = sqlite3_malloc64( pA->nDigit + pB->nDigit + 2 ); + if( acc==0 ){ + pA->oom = 1; + goto mul_end; + } + memset(acc, 0, pA->nDigit + pB->nDigit + 2); + minFrac = pA->nFrac; + if( pB->nFracnFrac; + for(i=pA->nDigit-1; i>=0; i--){ + signed char f = pA->a[i]; + int carry = 0, x; + for(j=pB->nDigit-1, k=i+j+3; j>=0; j--, k--){ + x = acc[k] + f*pB->a[j] + carry; + acc[k] = x%10; + carry = x/10; + } + x = acc[k] + carry; + acc[k] = x%10; + acc[k-1] += x/10; + } + sqlite3_free(pA->a); + pA->a = acc; + acc = 0; + pA->nDigit += pB->nDigit + 2; + pA->nFrac += pB->nFrac; + pA->sign ^= pB->sign; + while( pA->nFrac>minFrac && pA->a[pA->nDigit-1]==0 ){ + pA->nFrac--; + pA->nDigit--; + } + +mul_end: + sqlite3_free(acc); +} + +/* +** Create a new Decimal object that contains an integer power of 2. +*/ +static Decimal *decimalPow2(int N){ + Decimal *pA = 0; /* The result to be returned */ + Decimal *pX = 0; /* Multiplier */ + if( N<-20000 || N>20000 ) goto pow2_fault; + pA = decimalNewFromText("1.0", 3); + if( pA==0 || pA->oom ) goto pow2_fault; + if( N==0 ) return pA; + if( N>0 ){ + pX = decimalNewFromText("2.0", 3); + }else{ + N = -N; + pX = decimalNewFromText("0.5", 3); + } + if( pX==0 || pX->oom ) goto pow2_fault; + while( 1 /* Exit by break */ ){ + if( N & 1 ){ + decimalMul(pA, pX); + if( pA->oom ) goto pow2_fault; + } + N >>= 1; + if( N==0 ) break; + decimalMul(pX, pX); + } + decimal_free(pX); + return pA; + +pow2_fault: + decimal_free(pA); + decimal_free(pX); + return 0; +} + +/* +** Use an IEEE754 binary64 ("double") to generate a new Decimal object. +*/ +static Decimal *decimalFromDouble(double r){ + sqlite3_int64 m, a; + int e; + int isNeg; + Decimal *pA; + Decimal *pX; + char zNum[100]; + if( r<0.0 ){ + isNeg = 1; + r = -r; + }else{ + isNeg = 0; + } + memcpy(&a,&r,sizeof(a)); + if( a==0 ){ + e = 0; + m = 0; + }else{ + e = a>>52; + m = a & ((((sqlite3_int64)1)<<52)-1); + if( e==0 ){ + m <<= 1; + }else{ + m |= ((sqlite3_int64)1)<<52; + } + while( e<1075 && m>0 && (m&1)==0 ){ + m >>= 1; + e++; + } + if( isNeg ) m = -m; + e = e - 1075; + if( e>971 ){ + return 0; /* A NaN or an Infinity */ + } + } + + /* At this point m is the integer significand and e is the exponent */ + sqlite3_snprintf(sizeof(zNum), zNum, "%lld", m); + pA = decimalNewFromText(zNum, (int)strlen(zNum)); + pX = decimalPow2(e); + decimalMul(pA, pX); + decimal_free(pX); + return pA; +} + +/* +** SQL Function: decimal(X) +** OR: decimal_exp(X) +** +** Convert input X into decimal and then back into text. +** +** If X is originally a float, then a full decimal expansion of that floating +** point value is done. Or if X is an 8-byte blob, it is interpreted +** as a float and similarly expanded. +** +** The decimal_exp(X) function returns the result in exponential notation. +** decimal(X) returns a complete decimal, without the e+NNN at the end. +*/ +static void decimalFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + Decimal *p = decimal_new(context, argv[0], 0); + UNUSED_PARAMETER(argc); + if( p ){ + if( sqlite3_user_data(context)!=0 ){ + decimal_result_sci(context, p); + }else{ + decimal_result(context, p); + } + decimal_free(p); + } +} + +/* +** Compare text in decimal order. +*/ +static int decimalCollFunc( + void *notUsed, + int nKey1, const void *pKey1, + int nKey2, const void *pKey2 +){ + const unsigned char *zA = (const unsigned char*)pKey1; + const unsigned char *zB = (const unsigned char*)pKey2; + Decimal *pA = decimalNewFromText((const char*)zA, nKey1); + Decimal *pB = decimalNewFromText((const char*)zB, nKey2); + int rc; + UNUSED_PARAMETER(notUsed); + if( pA==0 || pB==0 ){ + rc = 0; + }else{ + rc = decimal_cmp(pA, pB); + } + decimal_free(pA); + decimal_free(pB); + return rc; +} + + +/* +** SQL Function: decimal_add(X, Y) +** decimal_sub(X, Y) +** +** Return the sum or difference of X and Y. +*/ +static void decimalAddFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + Decimal *pA = decimal_new(context, argv[0], 1); + Decimal *pB = decimal_new(context, argv[1], 1); + UNUSED_PARAMETER(argc); + decimal_add(pA, pB); + decimal_result(context, pA); + decimal_free(pA); + decimal_free(pB); +} +static void decimalSubFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + Decimal *pA = decimal_new(context, argv[0], 1); + Decimal *pB = decimal_new(context, argv[1], 1); + UNUSED_PARAMETER(argc); + if( pB ){ pB->sign = !pB->sign; decimal_add(pA, pB); decimal_result(context, pA); @@ -2844,7 +3606,7 @@ static void decimalSumStep( p->nFrac = 0; } if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; - pArg = decimal_new(context, argv[0], 0, 0); + pArg = decimal_new(context, argv[0], 1); decimal_add(p, pArg); decimal_free(pArg); } @@ -2859,7 +3621,7 @@ static void decimalSumInverse( p = sqlite3_aggregate_context(context, sizeof(*p)); if( p==0 ) return; if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; - pArg = decimal_new(context, argv[0], 0, 0); + pArg = decimal_new(context, argv[0], 1); if( pArg ) pArg->sign = !pArg->sign; decimal_add(p, pArg); decimal_free(pArg); @@ -2880,66 +3642,49 @@ static void decimalSumFinalize(sqlite3_context *context){ ** SQL Function: decimal_mul(X, Y) ** ** Return the product of X and Y. -** -** All significant digits after the decimal point are retained. -** Trailing zeros after the decimal point are omitted as long as -** the number of digits after the decimal point is no less than -** either the number of digits in either input. */ static void decimalMulFunc( sqlite3_context *context, int argc, sqlite3_value **argv ){ - Decimal *pA = decimal_new(context, argv[0], 0, 0); - Decimal *pB = decimal_new(context, argv[1], 0, 0); - signed char *acc = 0; - int i, j, k; - int minFrac; + Decimal *pA = decimal_new(context, argv[0], 1); + Decimal *pB = decimal_new(context, argv[1], 1); UNUSED_PARAMETER(argc); if( pA==0 || pA->oom || pA->isNull || pB==0 || pB->oom || pB->isNull ){ goto mul_end; } - acc = sqlite3_malloc64( pA->nDigit + pB->nDigit + 2 ); - if( acc==0 ){ - sqlite3_result_error_nomem(context); + decimalMul(pA, pB); + if( pA->oom ){ goto mul_end; } - memset(acc, 0, pA->nDigit + pB->nDigit + 2); - minFrac = pA->nFrac; - if( pB->nFracnFrac; - for(i=pA->nDigit-1; i>=0; i--){ - signed char f = pA->a[i]; - int carry = 0, x; - for(j=pB->nDigit-1, k=i+j+3; j>=0; j--, k--){ - x = acc[k] + f*pB->a[j] + carry; - acc[k] = x%10; - carry = x/10; - } - x = acc[k] + carry; - acc[k] = x%10; - acc[k-1] += x/10; - } - sqlite3_free(pA->a); - pA->a = acc; - acc = 0; - pA->nDigit += pB->nDigit + 2; - pA->nFrac += pB->nFrac; - pA->sign ^= pB->sign; - while( pA->nFrac>minFrac && pA->a[pA->nDigit-1]==0 ){ - pA->nFrac--; - pA->nDigit--; - } decimal_result(context, pA); mul_end: - sqlite3_free(acc); decimal_free(pA); decimal_free(pB); } +/* +** SQL Function: decimal_pow2(N) +** +** Return the N-th power of 2. N must be an integer. +*/ +static void decimalPow2Func( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + UNUSED_PARAMETER(argc); + if( sqlite3_value_type(argv[0])==SQLITE_INTEGER ){ + Decimal *pA = decimalPow2(sqlite3_value_int(argv[0])); + decimal_result_sci(context, pA); + decimal_free(pA); + } +} + #ifdef _WIN32 #endif @@ -2952,23 +3697,26 @@ int sqlite3_decimal_init( static const struct { const char *zFuncName; int nArg; + int iArg; void (*xFunc)(sqlite3_context*,int,sqlite3_value**); } aFunc[] = { - { "decimal", 1, decimalFunc }, - { "decimal_cmp", 2, decimalCmpFunc }, - { "decimal_add", 2, decimalAddFunc }, - { "decimal_sub", 2, decimalSubFunc }, - { "decimal_mul", 2, decimalMulFunc }, + { "decimal", 1, 0, decimalFunc }, + { "decimal_exp", 1, 1, decimalFunc }, + { "decimal_cmp", 2, 0, decimalCmpFunc }, + { "decimal_add", 2, 0, decimalAddFunc }, + { "decimal_sub", 2, 0, decimalSubFunc }, + { "decimal_mul", 2, 0, decimalMulFunc }, + { "decimal_pow2", 1, 0, decimalPow2Func }, }; unsigned int i; (void)pzErrMsg; /* Unused parameter */ SQLITE_EXTENSION_INIT2(pApi); - for(i=0; i +** *Nix: gcc -O2 -shared -I$SQDIR -fPIC -o base64.so base64.c +** OSX: gcc -O2 -dynamiclib -fPIC -I$SQDIR -o base64.dylib base64.c +** Win32: gcc -O2 -shared -I%SQDIR% -o base64.dll base64.c +** Win32: cl /Os -I%SQDIR% base64.c -link -dll -out:base64.dll +*/ + +#include + +/* #include "sqlite3ext.h" */ + +#ifndef deliberate_fall_through +/* Quiet some compilers about some of our intentional code. */ +# if GCC_VERSION>=7000000 +# define deliberate_fall_through __attribute__((fallthrough)); +# else +# define deliberate_fall_through +# endif +#endif + +SQLITE_EXTENSION_INIT1; + +#define PC 0x80 /* pad character */ +#define WS 0x81 /* whitespace */ +#define ND 0x82 /* Not above or digit-value */ +#define PAD_CHAR '=' + +#ifndef U8_TYPEDEF +/* typedef unsigned char u8; */ +#define U8_TYPEDEF +#endif + +/* Decoding table, ASCII (7-bit) value to base 64 digit value or other */ +static const u8 b64DigitValues[128] = { + /* HT LF VT FF CR */ + ND,ND,ND,ND, ND,ND,ND,ND, ND,WS,WS,WS, WS,WS,ND,ND, + /* US */ + ND,ND,ND,ND, ND,ND,ND,ND, ND,ND,ND,ND, ND,ND,ND,ND, + /*sp + / */ + WS,ND,ND,ND, ND,ND,ND,ND, ND,ND,ND,62, ND,ND,ND,63, + /* 0 1 5 9 = */ + 52,53,54,55, 56,57,58,59, 60,61,ND,ND, ND,PC,ND,ND, + /* A O */ + ND, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14, + /* P Z */ + 15,16,17,18, 19,20,21,22, 23,24,25,ND, ND,ND,ND,ND, + /* a o */ + ND,26,27,28, 29,30,31,32, 33,34,35,36, 37,38,39,40, + /* p z */ + 41,42,43,44, 45,46,47,48, 49,50,51,ND, ND,ND,ND,ND +}; + +static const char b64Numerals[64+1] += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +#define BX_DV_PROTO(c) \ + ((((u8)(c))<0x80)? (u8)(b64DigitValues[(u8)(c)]) : 0x80) +#define IS_BX_DIGIT(bdp) (((u8)(bdp))<0x80) +#define IS_BX_WS(bdp) ((bdp)==WS) +#define IS_BX_PAD(bdp) ((bdp)==PC) +#define BX_NUMERAL(dv) (b64Numerals[(u8)(dv)]) +/* Width of base64 lines. Should be an integer multiple of 4. */ +#define B64_DARK_MAX 72 + +/* Encode a byte buffer into base64 text with linefeeds appended to limit +** encoded group lengths to B64_DARK_MAX or to terminate the last group. +*/ +static char* toBase64( u8 *pIn, int nbIn, char *pOut ){ + int nCol = 0; + while( nbIn >= 3 ){ + /* Do the bit-shuffle, exploiting unsigned input to avoid masking. */ + pOut[0] = BX_NUMERAL(pIn[0]>>2); + pOut[1] = BX_NUMERAL(((pIn[0]<<4)|(pIn[1]>>4))&0x3f); + pOut[2] = BX_NUMERAL(((pIn[1]&0xf)<<2)|(pIn[2]>>6)); + pOut[3] = BX_NUMERAL(pIn[2]&0x3f); + pOut += 4; + nbIn -= 3; + pIn += 3; + if( (nCol += 4)>=B64_DARK_MAX || nbIn<=0 ){ + *pOut++ = '\n'; + nCol = 0; + } + } + if( nbIn > 0 ){ + signed char nco = nbIn+1; + int nbe; + unsigned long qv = *pIn++; + for( nbe=1; nbe<3; ++nbe ){ + qv <<= 8; + if( nbe=0; --nbe ){ + char ce = (nbe>= 6; + pOut[nbe] = ce; + } + pOut += 4; + *pOut++ = '\n'; + } + *pOut = 0; + return pOut; +} + +/* Skip over text which is not base64 numeral(s). */ +static char * skipNonB64( char *s, int nc ){ + char c; + while( nc-- > 0 && (c = *s) && !IS_BX_DIGIT(BX_DV_PROTO(c)) ) ++s; + return s; +} + +/* Decode base64 text into a byte buffer. */ +static u8* fromBase64( char *pIn, int ncIn, u8 *pOut ){ + if( ncIn>0 && pIn[ncIn-1]=='\n' ) --ncIn; + while( ncIn>0 && *pIn!=PAD_CHAR ){ + static signed char nboi[] = { 0, 0, 1, 2, 3 }; + char *pUse = skipNonB64(pIn, ncIn); + unsigned long qv = 0L; + int nti, nbo, nac; + ncIn -= (pUse - pIn); + pIn = pUse; + nti = (ncIn>4)? 4 : ncIn; + ncIn -= nti; + nbo = nboi[nti]; + if( nbo==0 ) break; + for( nac=0; nac<4; ++nac ){ + char c = (nac>8) & 0xff; + case 1: + pOut[0] = (qv>>16) & 0xff; + } + pOut += nbo; + } + return pOut; +} + +/* This function does the work for the SQLite base64(x) UDF. */ +static void base64(sqlite3_context *context, int na, sqlite3_value *av[]){ + int nb, nc, nv = sqlite3_value_bytes(av[0]); + int nvMax = sqlite3_limit(sqlite3_context_db_handle(context), + SQLITE_LIMIT_LENGTH, -1); + char *cBuf; + u8 *bBuf; + assert(na==1); + switch( sqlite3_value_type(av[0]) ){ + case SQLITE_BLOB: + nb = nv; + nc = 4*(nv+2/3); /* quads needed */ + nc += (nc+(B64_DARK_MAX-1))/B64_DARK_MAX + 1; /* LFs and a 0-terminator */ + if( nvMax < nc ){ + sqlite3_result_error(context, "blob expanded to base64 too big", -1); + return; + } + bBuf = (u8*)sqlite3_value_blob(av[0]); + if( !bBuf ){ + if( SQLITE_NOMEM==sqlite3_errcode(sqlite3_context_db_handle(context)) ){ + goto memFail; + } + sqlite3_result_text(context,"",-1,SQLITE_STATIC); + break; + } + cBuf = sqlite3_malloc(nc); + if( !cBuf ) goto memFail; + nc = (int)(toBase64(bBuf, nb, cBuf) - cBuf); + sqlite3_result_text(context, cBuf, nc, sqlite3_free); + break; + case SQLITE_TEXT: + nc = nv; + nb = 3*((nv+3)/4); /* may overestimate due to LF and padding */ + if( nvMax < nb ){ + sqlite3_result_error(context, "blob from base64 may be too big", -1); + return; + }else if( nb<1 ){ + nb = 1; + } + cBuf = (char *)sqlite3_value_text(av[0]); + if( !cBuf ){ + if( SQLITE_NOMEM==sqlite3_errcode(sqlite3_context_db_handle(context)) ){ + goto memFail; + } + sqlite3_result_zeroblob(context, 0); + break; + } + bBuf = sqlite3_malloc(nb); + if( !bBuf ) goto memFail; + nb = (int)(fromBase64(cBuf, nc, bBuf) - bBuf); + sqlite3_result_blob(context, bBuf, nb, sqlite3_free); + break; + default: + sqlite3_result_error(context, "base64 accepts only blob or text", -1); + return; + } + return; + memFail: + sqlite3_result_error(context, "base64 OOM", -1); +} + +/* +** Establish linkage to running SQLite library. +*/ +#ifndef SQLITE_SHELL_EXTFUNCS +#ifdef _WIN32 + +#endif +int sqlite3_base_init +#else +static int sqlite3_base64_init +#endif +(sqlite3 *db, char **pzErr, const sqlite3_api_routines *pApi){ + SQLITE_EXTENSION_INIT2(pApi); + (void)pzErr; + return sqlite3_create_function + (db, "base64", 1, + SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS|SQLITE_DIRECTONLY|SQLITE_UTF8, + 0, base64, 0, 0); +} + +/* +** Define some macros to allow this extension to be built into the shell +** conveniently, in conjunction with use of SQLITE_SHELL_EXTFUNCS. This +** allows shell.c, as distributed, to have this extension built in. +*/ +#define BASE64_INIT(db) sqlite3_base64_init(db, 0, 0) +#define BASE64_EXPOSE(db, pzErr) /* Not needed, ..._init() does this. */ + +/************************* End ../ext/misc/base64.c ********************/ +#undef sqlite3_base_init +#define sqlite3_base_init sqlite3_base85_init +#define OMIT_BASE85_CHECKER +/************************* Begin ../ext/misc/base85.c ******************/ +/* +** 2022-11-16 ** -** ieee754(X) -** ieee754(Y,Z) +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: ** -** In the first form, the value X should be a floating-point number. +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** +** This is a utility for converting binary to base85 or vice-versa. +** It can be built as a standalone program or an SQLite3 extension. +** +** Much like base64 representations, base85 can be sent through a +** sane USASCII channel unmolested. It also plays nicely in CSV or +** written as TCL brace-enclosed literals or SQL string literals. +** It is not suited for unmodified use in XML-like documents. +** +** The encoding used resembles Ascii85, but was devised by the author +** (Larry Brasfield) before Mozilla, Adobe, ZMODEM or other Ascii85 +** variant sources existed, in the 1984 timeframe on a VAX mainframe. +** Further, this is an independent implementation of a base85 system. +** Hence, the author has rightfully put this into the public domain. +** +** Base85 numerals are taken from the set of 7-bit USASCII codes, +** excluding control characters and Space ! " ' ( ) { | } ~ Del +** in code order representing digit values 0 to 84 (base 10.) +** +** Groups of 4 bytes, interpreted as big-endian 32-bit values, +** are represented as 5-digit base85 numbers with MS to LS digit +** order. Groups of 1-3 bytes are represented with 2-4 digits, +** still big-endian but 8-24 bit values. (Using big-endian yields +** the simplest transition to byte groups smaller than 4 bytes. +** These byte groups can also be considered base-256 numbers.) +** Groups of 0 bytes are represented with 0 digits and vice-versa. +** No pad characters are used; Encoded base85 numeral sequence +** (aka "group") length maps 1-to-1 to the decoded binary length. +** +** Any character not in the base85 numeral set delimits groups. +** When base85 is streamed or stored in containers of indefinite +** size, newline is used to separate it into sub-sequences of no +** more than 80 digits so that fgets() can be used to read it. +** +** Length limitations are not imposed except that the runtime +** SQLite string or blob length limits are respected. Otherwise, +** any length binary sequence can be represented and recovered. +** Base85 sequences can be concatenated by separating them with +** a non-base85 character; the conversion to binary will then +** be the concatenation of the represented binary sequences. + +** The standalone program either converts base85 on stdin to create +** a binary file or converts a binary file to base85 on stdout. +** Read or make it blurt its help for invocation details. +** +** The SQLite3 extension creates a function, base85(x), which will +** either convert text base85 to a blob or a blob to text base85 +** and return the result (or throw an error for other types.) +** Unless built with OMIT_BASE85_CHECKER defined, it also creates a +** function, is_base85(t), which returns 1 iff the text t contains +** nothing other than base85 numerals and whitespace, or 0 otherwise. +** +** To build the extension: +** Set shell variable SQDIR= +** and variable OPTS to -DOMIT_BASE85_CHECKER if is_base85() unwanted. +** *Nix: gcc -O2 -shared -I$SQDIR $OPTS -fPIC -o base85.so base85.c +** OSX: gcc -O2 -dynamiclib -fPIC -I$SQDIR $OPTS -o base85.dylib base85.c +** Win32: gcc -O2 -shared -I%SQDIR% %OPTS% -o base85.dll base85.c +** Win32: cl /Os -I%SQDIR% %OPTS% base85.c -link -dll -out:base85.dll +** +** To build the standalone program, define PP symbol BASE85_STANDALONE. Eg. +** *Nix or OSX: gcc -O2 -DBASE85_STANDALONE base85.c -o base85 +** Win32: gcc -O2 -DBASE85_STANDALONE -o base85.exe base85.c +** Win32: cl /Os /MD -DBASE85_STANDALONE base85.c +*/ + +#include +#include +#include +#include +#ifndef OMIT_BASE85_CHECKER +# include +#endif + +#ifndef BASE85_STANDALONE + +/* # include "sqlite3ext.h" */ + +SQLITE_EXTENSION_INIT1; + +#else + +# ifdef _WIN32 +# include +# include +# else +# define setmode(fd,m) +# endif + +static char *zHelp = + "Usage: base85 \n" + " is either -r to read or -w to write ,\n" + " content to be converted to/from base85 on stdout/stdin.\n" + " names a binary file to be rendered or created.\n" + " Or, the name '-' refers to the stdin or stdout stream.\n" + ; + +static void sayHelp(){ + printf("%s", zHelp); +} +#endif + +#ifndef U8_TYPEDEF +/* typedef unsigned char u8; */ +#define U8_TYPEDEF +#endif + +/* Classify c according to interval within USASCII set w.r.t. base85 + * Values of 1 and 3 are base85 numerals. Values of 0, 2, or 4 are not. + */ +#define B85_CLASS( c ) (((c)>='#')+((c)>'&')+((c)>='*')+((c)>'z')) + +/* Provide digitValue to b85Numeral offset as a function of above class. */ +static u8 b85_cOffset[] = { 0, '#', 0, '*'-4, 0 }; +#define B85_DNOS( c ) b85_cOffset[B85_CLASS(c)] + +/* Say whether c is a base85 numeral. */ +#define IS_B85( c ) (B85_CLASS(c) & 1) + +#if 0 /* Not used, */ +static u8 base85DigitValue( char c ){ + u8 dv = (u8)(c - '#'); + if( dv>87 ) return 0xff; + return (dv > 3)? dv-3 : dv; +} +#endif + +/* Width of base64 lines. Should be an integer multiple of 5. */ +#define B85_DARK_MAX 80 + + +static char * skipNonB85( char *s, int nc ){ + char c; + while( nc-- > 0 && (c = *s) && !IS_B85(c) ) ++s; + return s; +} + +/* Convert small integer, known to be in 0..84 inclusive, to base85 numeral. + * Do not use the macro form with argument expression having a side-effect.*/ +#if 0 +static char base85Numeral( u8 b ){ + return (b < 4)? (char)(b + '#') : (char)(b - 4 + '*'); +} +#else +# define base85Numeral( dn )\ + ((char)(((dn) < 4)? (char)((dn) + '#') : (char)((dn) - 4 + '*'))) +#endif + +static char *putcs(char *pc, char *s){ + char c; + while( (c = *s++)!=0 ) *pc++ = c; + return pc; +} + +/* Encode a byte buffer into base85 text. If pSep!=0, it's a C string +** to be appended to encoded groups to limit their length to B85_DARK_MAX +** or to terminate the last group (to aid concatenation.) +*/ +static char* toBase85( u8 *pIn, int nbIn, char *pOut, char *pSep ){ + int nCol = 0; + while( nbIn >= 4 ){ + int nco = 5; + unsigned long qbv = (((unsigned long)pIn[0])<<24) | + (pIn[1]<<16) | (pIn[2]<<8) | pIn[3]; + while( nco > 0 ){ + unsigned nqv = (unsigned)(qbv/85UL); + unsigned char dv = qbv - 85UL*nqv; + qbv = nqv; + pOut[--nco] = base85Numeral(dv); + } + nbIn -= 4; + pIn += 4; + pOut += 5; + if( pSep && (nCol += 5)>=B85_DARK_MAX ){ + pOut = putcs(pOut, pSep); + nCol = 0; + } + } + if( nbIn > 0 ){ + int nco = nbIn + 1; + unsigned long qv = *pIn++; + int nbe = 1; + while( nbe++ < nbIn ){ + qv = (qv<<8) | *pIn++; + } + nCol += nco; + while( nco > 0 ){ + u8 dv = (u8)(qv % 85); + qv /= 85; + pOut[--nco] = base85Numeral(dv); + } + pOut += (nbIn+1); + } + if( pSep && nCol>0 ) pOut = putcs(pOut, pSep); + *pOut = 0; + return pOut; +} + +/* Decode base85 text into a byte buffer. */ +static u8* fromBase85( char *pIn, int ncIn, u8 *pOut ){ + if( ncIn>0 && pIn[ncIn-1]=='\n' ) --ncIn; + while( ncIn>0 ){ + static signed char nboi[] = { 0, 0, 1, 2, 3, 4 }; + char *pUse = skipNonB85(pIn, ncIn); + unsigned long qv = 0L; + int nti, nbo; + ncIn -= (pUse - pIn); + pIn = pUse; + nti = (ncIn>5)? 5 : ncIn; + nbo = nboi[nti]; + if( nbo==0 ) break; + while( nti>0 ){ + char c = *pIn++; + u8 cdo = B85_DNOS(c); + --ncIn; + if( cdo==0 ) break; + qv = 85 * qv + (c - cdo); + --nti; + } + nbo -= nti; /* Adjust for early (non-digit) end of group. */ + switch( nbo ){ + case 4: + *pOut++ = (qv >> 24)&0xff; + case 3: + *pOut++ = (qv >> 16)&0xff; + case 2: + *pOut++ = (qv >> 8)&0xff; + case 1: + *pOut++ = qv&0xff; + case 0: + break; + } + } + return pOut; +} + +#ifndef OMIT_BASE85_CHECKER +/* Say whether input char sequence is all (base85 and/or whitespace).*/ +static int allBase85( char *p, int len ){ + char c; + while( len-- > 0 && (c = *p++) != 0 ){ + if( !IS_B85(c) && !isspace(c) ) return 0; + } + return 1; +} +#endif + +#ifndef BASE85_STANDALONE + +# ifndef OMIT_BASE85_CHECKER +/* This function does the work for the SQLite is_base85(t) UDF. */ +static void is_base85(sqlite3_context *context, int na, sqlite3_value *av[]){ + assert(na==1); + switch( sqlite3_value_type(av[0]) ){ + case SQLITE_TEXT: + { + int rv = allBase85( (char *)sqlite3_value_text(av[0]), + sqlite3_value_bytes(av[0]) ); + sqlite3_result_int(context, rv); + } + break; + case SQLITE_NULL: + sqlite3_result_null(context); + break; + default: + sqlite3_result_error(context, "is_base85 accepts only text or NULL", -1); + return; + } +} +# endif + +/* This function does the work for the SQLite base85(x) UDF. */ +static void base85(sqlite3_context *context, int na, sqlite3_value *av[]){ + int nb, nc, nv = sqlite3_value_bytes(av[0]); + int nvMax = sqlite3_limit(sqlite3_context_db_handle(context), + SQLITE_LIMIT_LENGTH, -1); + char *cBuf; + u8 *bBuf; + assert(na==1); + switch( sqlite3_value_type(av[0]) ){ + case SQLITE_BLOB: + nb = nv; + /* ulongs tail newlines tailenc+nul*/ + nc = 5*(nv/4) + nv%4 + nv/64+1 + 2; + if( nvMax < nc ){ + sqlite3_result_error(context, "blob expanded to base85 too big", -1); + return; + } + bBuf = (u8*)sqlite3_value_blob(av[0]); + if( !bBuf ){ + if( SQLITE_NOMEM==sqlite3_errcode(sqlite3_context_db_handle(context)) ){ + goto memFail; + } + sqlite3_result_text(context,"",-1,SQLITE_STATIC); + break; + } + cBuf = sqlite3_malloc(nc); + if( !cBuf ) goto memFail; + nc = (int)(toBase85(bBuf, nb, cBuf, "\n") - cBuf); + sqlite3_result_text(context, cBuf, nc, sqlite3_free); + break; + case SQLITE_TEXT: + nc = nv; + nb = 4*(nv/5) + nv%5; /* may overestimate */ + if( nvMax < nb ){ + sqlite3_result_error(context, "blob from base85 may be too big", -1); + return; + }else if( nb<1 ){ + nb = 1; + } + cBuf = (char *)sqlite3_value_text(av[0]); + if( !cBuf ){ + if( SQLITE_NOMEM==sqlite3_errcode(sqlite3_context_db_handle(context)) ){ + goto memFail; + } + sqlite3_result_zeroblob(context, 0); + break; + } + bBuf = sqlite3_malloc(nb); + if( !bBuf ) goto memFail; + nb = (int)(fromBase85(cBuf, nc, bBuf) - bBuf); + sqlite3_result_blob(context, bBuf, nb, sqlite3_free); + break; + default: + sqlite3_result_error(context, "base85 accepts only blob or text.", -1); + return; + } + return; + memFail: + sqlite3_result_error(context, "base85 OOM", -1); +} + +/* +** Establish linkage to running SQLite library. +*/ +#ifndef SQLITE_SHELL_EXTFUNCS +#ifdef _WIN32 + +#endif +int sqlite3_base_init +#else +static int sqlite3_base85_init +#endif +(sqlite3 *db, char **pzErr, const sqlite3_api_routines *pApi){ + SQLITE_EXTENSION_INIT2(pApi); + (void)pzErr; +# ifndef OMIT_BASE85_CHECKER + { + int rc = sqlite3_create_function + (db, "is_base85", 1, + SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS|SQLITE_UTF8, + 0, is_base85, 0, 0); + if( rc!=SQLITE_OK ) return rc; + } +# endif + return sqlite3_create_function + (db, "base85", 1, + SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS|SQLITE_DIRECTONLY|SQLITE_UTF8, + 0, base85, 0, 0); +} + +/* +** Define some macros to allow this extension to be built into the shell +** conveniently, in conjunction with use of SQLITE_SHELL_EXTFUNCS. This +** allows shell.c, as distributed, to have this extension built in. +*/ +# define BASE85_INIT(db) sqlite3_base85_init(db, 0, 0) +# define BASE85_EXPOSE(db, pzErr) /* Not needed, ..._init() does this. */ + +#else /* standalone program */ + +int main(int na, char *av[]){ + int cin; + int rc = 0; + u8 bBuf[4*(B85_DARK_MAX/5)]; + char cBuf[5*(sizeof(bBuf)/4)+2]; + size_t nio; +# ifndef OMIT_BASE85_CHECKER + int b85Clean = 1; +# endif + char rw; + FILE *fb = 0, *foc = 0; + char fmode[3] = "xb"; + if( na < 3 || av[1][0]!='-' || (rw = av[1][1])==0 || (rw!='r' && rw!='w') ){ + sayHelp(); + return 0; + } + fmode[0] = rw; + if( av[2][0]=='-' && av[2][1]==0 ){ + switch( rw ){ + case 'r': + fb = stdin; + setmode(fileno(stdin), O_BINARY); + break; + case 'w': + fb = stdout; + setmode(fileno(stdout), O_BINARY); + break; + } + }else{ + fb = fopen(av[2], fmode); + foc = fb; + } + if( !fb ){ + fprintf(stderr, "Cannot open %s for %c\n", av[2], rw); + rc = 1; + }else{ + switch( rw ){ + case 'r': + while( (nio = fread( bBuf, 1, sizeof(bBuf), fb))>0 ){ + toBase85( bBuf, (int)nio, cBuf, 0 ); + fprintf(stdout, "%s\n", cBuf); + } + break; + case 'w': + while( 0 != fgets(cBuf, sizeof(cBuf), stdin) ){ + int nc = strlen(cBuf); + size_t nbo = fromBase85( cBuf, nc, bBuf ) - bBuf; + if( 1 != fwrite(bBuf, nbo, 1, fb) ) rc = 1; +# ifndef OMIT_BASE85_CHECKER + b85Clean &= allBase85( cBuf, nc ); +# endif + } + break; + default: + sayHelp(); + rc = 1; + } + if( foc ) fclose(foc); + } +# ifndef OMIT_BASE85_CHECKER + if( !b85Clean ){ + fprintf(stderr, "Base85 input had non-base85 dark or control content.\n"); + } +# endif + return rc; +} + +#endif + +/************************* End ../ext/misc/base85.c ********************/ +/************************* Begin ../ext/misc/ieee754.c ******************/ +/* +** 2013-04-17 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This SQLite extension implements functions for the exact display +** and input of IEEE754 Binary64 floating-point numbers. +** +** ieee754(X) +** ieee754(Y,Z) +** +** In the first form, the value X should be a floating-point number. ** The function will return a string of the form 'ieee754(Y,Z)' where ** Y and Z are integers such that X==Y*pow(2,Z). ** @@ -3243,6 +4744,37 @@ static void ieee754func_to_blob( } } +/* +** SQL Function: ieee754_inc(r,N) +** +** Move the floating point value r by N quantums and return the new +** values. +** +** Behind the scenes: this routine merely casts r into a 64-bit unsigned +** integer, adds N, then casts the value back into float. +** +** Example: To find the smallest positive number: +** +** SELECT ieee754_inc(0.0,+1); +*/ +static void ieee754inc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + double r; + sqlite3_int64 N; + sqlite3_uint64 m1, m2; + double r2; + UNUSED_PARAMETER(argc); + r = sqlite3_value_double(argv[0]); + N = sqlite3_value_int64(argv[1]); + memcpy(&m1, &r, 8); + m2 = m1 + N; + memcpy(&r2, &m2, 8); + sqlite3_result_double(context, r2); +} + #ifdef _WIN32 @@ -3264,7 +4796,7 @@ int sqlite3_ieee_init( { "ieee754_exponent", 1, 2, ieee754func }, { "ieee754_to_blob", 1, 0, ieee754func_to_blob }, { "ieee754_from_blob", 1, 0, ieee754func_from_blob }, - + { "ieee754_inc", 2, 0, ieee754inc }, }; unsigned int i; int rc = SQLITE_OK; @@ -3282,7 +4814,7 @@ int sqlite3_ieee_init( /************************* End ../ext/misc/ieee754.c ********************/ /************************* Begin ../ext/misc/series.c ******************/ /* -** 2015-08-18 +** 2015-08-18, 2023-04-28 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -3295,7 +4827,19 @@ int sqlite3_ieee_init( ** ** This file demonstrates how to create a table-valued-function using ** a virtual table. This demo implements the generate_series() function -** which gives similar results to the eponymous function in PostgreSQL. +** which gives the same results as the eponymous function in PostgreSQL, +** within the limitation that its arguments are signed 64-bit integers. +** +** Considering its equivalents to generate_series(start,stop,step): A +** value V[n] sequence is produced for integer n ascending from 0 where +** ( V[n] == start + n * step && sgn(V[n] - stop) * sgn(step) >= 0 ) +** for each produced value (independent of production time ordering.) +** +** All parameters must be either integer or convertable to integer. +** The start parameter is required. +** The stop parameter defaults to (1<<32)-1 (aka 4294967295 or 0xffffffff) +** The step parameter defaults to 1 and 0 is treated as 1. +** ** Examples: ** ** SELECT * FROM generate_series(0,100,5); @@ -3311,6 +4855,14 @@ int sqlite3_ieee_init( ** ** Integers 20 through 29. ** +** SELECT * FROM generate_series(0,-100,-5); +** +** Integers 0 -5 -10 ... -100. +** +** SELECT * FROM generate_series(0,-1); +** +** Empty sequence. +** ** HOW IT WORKS ** ** The generate_series "function" is really a virtual table with the @@ -3323,6 +4875,9 @@ int sqlite3_ieee_init( ** step HIDDEN ** ); ** +** The virtual table also has a rowid, logically equivalent to n+1 where +** "n" is the ascending integer in the aforesaid production definition. +** ** Function arguments in queries against this virtual table are translated ** into equality constraints against successive hidden columns. In other ** words, the following pairs of queries are equivalent to each other: @@ -3355,9 +4910,126 @@ int sqlite3_ieee_init( SQLITE_EXTENSION_INIT1 #include #include +#include #ifndef SQLITE_OMIT_VIRTUALTABLE +/* +** Return that member of a generate_series(...) sequence whose 0-based +** index is ix. The 0th member is given by smBase. The sequence members +** progress per ix increment by smStep. +*/ +static sqlite3_int64 genSeqMember(sqlite3_int64 smBase, + sqlite3_int64 smStep, + sqlite3_uint64 ix){ + if( ix>=(sqlite3_uint64)LLONG_MAX ){ + /* Get ix into signed i64 range. */ + ix -= (sqlite3_uint64)LLONG_MAX; + /* With 2's complement ALU, this next can be 1 step, but is split into + * 2 for UBSAN's satisfaction (and hypothetical 1's complement ALUs.) */ + smBase += (LLONG_MAX/2) * smStep; + smBase += (LLONG_MAX - LLONG_MAX/2) * smStep; + } + /* Under UBSAN (or on 1's complement machines), must do this last term + * in steps to avoid the dreaded (and harmless) signed multiply overlow. */ + if( ix>=2 ){ + sqlite3_int64 ix2 = (sqlite3_int64)ix/2; + smBase += ix2*smStep; + ix -= ix2; + } + return smBase + ((sqlite3_int64)ix)*smStep; +} + +/* typedef unsigned char u8; */ + +typedef struct SequenceSpec { + sqlite3_int64 iBase; /* Starting value ("start") */ + sqlite3_int64 iTerm; /* Given terminal value ("stop") */ + sqlite3_int64 iStep; /* Increment ("step") */ + sqlite3_uint64 uSeqIndexMax; /* maximum sequence index (aka "n") */ + sqlite3_uint64 uSeqIndexNow; /* Current index during generation */ + sqlite3_int64 iValueNow; /* Current value during generation */ + u8 isNotEOF; /* Sequence generation not exhausted */ + u8 isReversing; /* Sequence is being reverse generated */ +} SequenceSpec; + +/* +** Prepare a SequenceSpec for use in generating an integer series +** given initialized iBase, iTerm and iStep values. Sequence is +** initialized per given isReversing. Other members are computed. +*/ +static void setupSequence( SequenceSpec *pss ){ + int bSameSigns; + pss->uSeqIndexMax = 0; + pss->isNotEOF = 0; + bSameSigns = (pss->iBase < 0)==(pss->iTerm < 0); + if( pss->iTerm < pss->iBase ){ + sqlite3_uint64 nuspan = 0; + if( bSameSigns ){ + nuspan = (sqlite3_uint64)(pss->iBase - pss->iTerm); + }else{ + /* Under UBSAN (or on 1's complement machines), must do this in steps. + * In this clause, iBase>=0 and iTerm<0 . */ + nuspan = 1; + nuspan += pss->iBase; + nuspan += -(pss->iTerm+1); + } + if( pss->iStep<0 ){ + pss->isNotEOF = 1; + if( nuspan==ULONG_MAX ){ + pss->uSeqIndexMax = ( pss->iStep>LLONG_MIN )? nuspan/-pss->iStep : 1; + }else if( pss->iStep>LLONG_MIN ){ + pss->uSeqIndexMax = nuspan/-pss->iStep; + } + } + }else if( pss->iTerm > pss->iBase ){ + sqlite3_uint64 puspan = 0; + if( bSameSigns ){ + puspan = (sqlite3_uint64)(pss->iTerm - pss->iBase); + }else{ + /* Under UBSAN (or on 1's complement machines), must do this in steps. + * In this clause, iTerm>=0 and iBase<0 . */ + puspan = 1; + puspan += pss->iTerm; + puspan += -(pss->iBase+1); + } + if( pss->iStep>0 ){ + pss->isNotEOF = 1; + pss->uSeqIndexMax = puspan/pss->iStep; + } + }else if( pss->iTerm == pss->iBase ){ + pss->isNotEOF = 1; + pss->uSeqIndexMax = 0; + } + pss->uSeqIndexNow = (pss->isReversing)? pss->uSeqIndexMax : 0; + pss->iValueNow = (pss->isReversing) + ? genSeqMember(pss->iBase, pss->iStep, pss->uSeqIndexMax) + : pss->iBase; +} +/* +** Progress sequence generator to yield next value, if any. +** Leave its state to either yield next value or be at EOF. +** Return whether there is a next value, or 0 at EOF. +*/ +static int progressSequence( SequenceSpec *pss ){ + if( !pss->isNotEOF ) return 0; + if( pss->isReversing ){ + if( pss->uSeqIndexNow > 0 ){ + pss->uSeqIndexNow--; + pss->iValueNow -= pss->iStep; + }else{ + pss->isNotEOF = 0; + } + }else{ + if( pss->uSeqIndexNow < pss->uSeqIndexMax ){ + pss->uSeqIndexNow++; + pss->iValueNow += pss->iStep; + }else{ + pss->isNotEOF = 0; + } + } + return pss->isNotEOF; +} /* series_cursor is a subclass of sqlite3_vtab_cursor which will ** serve as the underlying representation of a cursor that scans @@ -3366,12 +5038,7 @@ SQLITE_EXTENSION_INIT1 typedef struct series_cursor series_cursor; struct series_cursor { sqlite3_vtab_cursor base; /* Base class - must be first */ - int isDesc; /* True to count down rather than up */ - sqlite3_int64 iRowid; /* The rowid */ - sqlite3_int64 iValue; /* Current value ("value") */ - sqlite3_int64 mnValue; /* Mimimum value ("start") */ - sqlite3_int64 mxValue; /* Maximum value ("stop") */ - sqlite3_int64 iStep; /* Increment ("step") */ + SequenceSpec ss; /* (this) Derived class data */ }; /* @@ -3453,12 +5120,7 @@ static int seriesClose(sqlite3_vtab_cursor *cur){ */ static int seriesNext(sqlite3_vtab_cursor *cur){ series_cursor *pCur = (series_cursor*)cur; - if( pCur->isDesc ){ - pCur->iValue -= pCur->iStep; - }else{ - pCur->iValue += pCur->iStep; - } - pCur->iRowid++; + progressSequence( & pCur->ss ); return SQLITE_OK; } @@ -3474,23 +5136,27 @@ static int seriesColumn( series_cursor *pCur = (series_cursor*)cur; sqlite3_int64 x = 0; switch( i ){ - case SERIES_COLUMN_START: x = pCur->mnValue; break; - case SERIES_COLUMN_STOP: x = pCur->mxValue; break; - case SERIES_COLUMN_STEP: x = pCur->iStep; break; - default: x = pCur->iValue; break; + case SERIES_COLUMN_START: x = pCur->ss.iBase; break; + case SERIES_COLUMN_STOP: x = pCur->ss.iTerm; break; + case SERIES_COLUMN_STEP: x = pCur->ss.iStep; break; + default: x = pCur->ss.iValueNow; break; } sqlite3_result_int64(ctx, x); return SQLITE_OK; } +#ifndef LARGEST_UINT64 +#define LARGEST_UINT64 (0xffffffff|(((sqlite3_uint64)0xffffffff)<<32)) +#endif + /* -** Return the rowid for the current row. In this implementation, the -** first row returned is assigned rowid value 1, and each subsequent -** row a value 1 more than that of the previous. +** Return the rowid for the current row, logically equivalent to n+1 where +** "n" is the ascending integer in the aforesaid production definition. */ static int seriesRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){ series_cursor *pCur = (series_cursor*)cur; - *pRowid = pCur->iRowid; + sqlite3_uint64 n = pCur->ss.uSeqIndexNow; + *pRowid = (sqlite3_int64)((nisDesc ){ - return pCur->iValue < pCur->mnValue; - }else{ - return pCur->iValue > pCur->mxValue; - } + return !pCur->ss.isNotEOF; } -/* True to cause run-time checking of the start=, stop=, and/or step= +/* True to cause run-time checking of the start=, stop=, and/or step= ** parameters. The only reason to do this is for testing the ** constraint checking logic for virtual tables in the SQLite core. */ @@ -3518,7 +5180,7 @@ static int seriesEof(sqlite3_vtab_cursor *cur){ /* ** This method is called to "rewind" the series_cursor object back ** to the first row of output. This method is always called at least -** once prior to any call to seriesColumn() or seriesRowid() or +** once prior to any call to seriesColumn() or seriesRowid() or ** seriesEof(). ** ** The query plan selected by seriesBestIndex is passed in the idxNum @@ -3538,7 +5200,7 @@ static int seriesEof(sqlite3_vtab_cursor *cur){ ** (so that seriesEof() will return true) if the table is empty. */ static int seriesFilter( - sqlite3_vtab_cursor *pVtabCursor, + sqlite3_vtab_cursor *pVtabCursor, int idxNum, const char *idxStrUnused, int argc, sqlite3_value **argv ){ @@ -3546,46 +5208,41 @@ static int seriesFilter( int i = 0; (void)idxStrUnused; if( idxNum & 1 ){ - pCur->mnValue = sqlite3_value_int64(argv[i++]); + pCur->ss.iBase = sqlite3_value_int64(argv[i++]); }else{ - pCur->mnValue = 0; + pCur->ss.iBase = 0; } if( idxNum & 2 ){ - pCur->mxValue = sqlite3_value_int64(argv[i++]); + pCur->ss.iTerm = sqlite3_value_int64(argv[i++]); }else{ - pCur->mxValue = 0xffffffff; + pCur->ss.iTerm = 0xffffffff; } if( idxNum & 4 ){ - pCur->iStep = sqlite3_value_int64(argv[i++]); - if( pCur->iStep==0 ){ - pCur->iStep = 1; - }else if( pCur->iStep<0 ){ - pCur->iStep = -pCur->iStep; + pCur->ss.iStep = sqlite3_value_int64(argv[i++]); + if( pCur->ss.iStep==0 ){ + pCur->ss.iStep = 1; + }else if( pCur->ss.iStep<0 ){ if( (idxNum & 16)==0 ) idxNum |= 8; } }else{ - pCur->iStep = 1; + pCur->ss.iStep = 1; } for(i=0; imnValue = 1; - pCur->mxValue = 0; + pCur->ss.iBase = 1; + pCur->ss.iTerm = 0; + pCur->ss.iStep = 1; break; } } if( idxNum & 8 ){ - pCur->isDesc = 1; - pCur->iValue = pCur->mxValue; - if( pCur->iStep>0 ){ - pCur->iValue -= (pCur->mxValue - pCur->mnValue)%pCur->iStep; - } + pCur->ss.isReversing = pCur->ss.iStep > 0; }else{ - pCur->isDesc = 0; - pCur->iValue = pCur->mnValue; + pCur->ss.isReversing = pCur->ss.iStep < 0; } - pCur->iRowid = 1; + setupSequence( &pCur->ss ); return SQLITE_OK; } @@ -4340,7 +5997,7 @@ static const char *re_subcompile_string(ReCompiled *p){ break; } case '[': { - int iFirst = p->nState; + unsigned int iFirst = p->nState; if( rePeek(p)=='^' ){ re_append(p, RE_OP_CC_EXC, 0); p->sIn.i++; @@ -4364,7 +6021,7 @@ static const char *re_subcompile_string(ReCompiled *p){ if( rePeek(p)==']' ){ p->sIn.i++; break; } } if( c==0 ) return "unclosed '['"; - p->aArg[iFirst] = p->nState - iFirst; + if( p->nState>iFirst ) p->aArg[iFirst] = p->nState - iFirst; break; } case '\\': { @@ -4548,6 +6205,7 @@ static void re_bytecode_func( int i; int n; char *z; + (void)argc; zPattern = (const char*)sqlite3_value_text(argv[0]); if( zPattern==0 ) return; @@ -7195,6 +8853,7 @@ static int zipfileConnect( const char *zFile = 0; ZipfileTab *pNew = 0; int rc; + (void)pAux; /* If the table name is not "zipfile", require that the argument be ** specified. This stops zipfile tables from being created as: @@ -7651,6 +9310,7 @@ static int zipfileGetEntry( u8 *aRead; char **pzErr = &pTab->base.zErrMsg; int rc = SQLITE_OK; + (void)nBlob; if( aBlob==0 ){ aRead = pTab->aBuffer; @@ -7938,7 +9598,10 @@ static int zipfileColumn( ** it to be a directory either if the mode suggests so, or if ** the final character in the name is '/'. */ u32 mode = pCDS->iExternalAttr >> 16; - if( !(mode & S_IFDIR) && pCDS->zFile[pCDS->nFile-1]!='/' ){ + if( !(mode & S_IFDIR) + && pCDS->nFile>=1 + && pCDS->zFile[pCDS->nFile-1]!='/' + ){ sqlite3_result_blob(ctx, "", 0, SQLITE_STATIC); } } @@ -8097,6 +9760,9 @@ static int zipfileFilter( int rc = SQLITE_OK; /* Return Code */ int bInMemory = 0; /* True for an in-memory zipfile */ + (void)idxStr; + (void)argc; + zipfileResetCursor(pCsr); if( pTab->zFile ){ @@ -8123,7 +9789,7 @@ static int zipfileFilter( } if( 0==pTab->pWriteFd && 0==bInMemory ){ - pCsr->pFile = fopen(zFile, "rb"); + pCsr->pFile = zFile ? fopen(zFile, "rb") : 0; if( pCsr->pFile==0 ){ zipfileCursorErr(pCsr, "cannot open file: %s", zFile); rc = SQLITE_ERROR; @@ -8157,6 +9823,7 @@ static int zipfileBestIndex( int i; int idx = -1; int unusable = 0; + (void)tab; for(i=0; inConstraint; i++){ const struct sqlite3_index_constraint *pCons = &pIdxInfo->aConstraint[i]; @@ -8371,9 +10038,19 @@ static u32 zipfileGetTime(sqlite3_value *pVal){ */ static void zipfileRemoveEntryFromList(ZipfileTab *pTab, ZipfileEntry *pOld){ if( pOld ){ - ZipfileEntry **pp; - for(pp=&pTab->pFirstEntry; (*pp)!=pOld; pp=&((*pp)->pNext)); - *pp = (*pp)->pNext; + if( pTab->pFirstEntry==pOld ){ + pTab->pFirstEntry = pOld->pNext; + if( pTab->pLastEntry==pOld ) pTab->pLastEntry = 0; + }else{ + ZipfileEntry *p; + for(p=pTab->pFirstEntry; p; p=p->pNext){ + if( p->pNext==pOld ){ + p->pNext = pOld->pNext; + if( pTab->pLastEntry==pOld ) pTab->pLastEntry = p; + break; + } + } + } zipfileEntryFree(pOld); } } @@ -8407,6 +10084,8 @@ static int zipfileUpdate( int bIsDir = 0; u32 iCrc32 = 0; + (void)pRowid; + if( pTab->pWriteFd==0 ){ rc = zipfileBegin(pVtab); if( rc!=SQLITE_OK ) return rc; @@ -8741,6 +10420,7 @@ static int zipfileFindFunction( void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), /* OUT: Result */ void **ppArg /* OUT: User data for *pxFunc */ ){ + (void)nArg; if( sqlite3_stricmp("zipfile_cds", zName)==0 ){ *pxFunc = zipfileFunctionCds; *ppArg = (void*)pVtab; @@ -9149,7 +10829,9 @@ static void sqlarUncompressFunc( }else{ const Bytef *pData= sqlite3_value_blob(argv[0]); Bytef *pOut = sqlite3_malloc(sz); - if( Z_OK!=uncompress(pOut, &sz, pData, nData) ){ + if( pOut==0 ){ + sqlite3_result_error_nomem(context); + }else if( Z_OK!=uncompress(pOut, &sz, pData, nData) ){ sqlite3_result_error(context, "error in uncompress()", -1); }else{ sqlite3_result_blob(context, pOut, sz, SQLITE_TRANSIENT); @@ -9158,7 +10840,6 @@ static void sqlarUncompressFunc( } } - #ifdef _WIN32 #endif @@ -11412,9 +13093,9 @@ void sqlite3_expert_destroy(sqlite3expert *p){ #define SQLITE_SHELL_HAVE_RECOVER 0 #endif #if SQLITE_SHELL_HAVE_RECOVER -/************************* Begin ../ext/recover/dbdata.c ******************/ +/************************* Begin ../ext/recover/sqlite3recover.h ******************/ /* -** 2019-04-17 +** 2022-08-27 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: @@ -11423,13 +13104,266 @@ void sqlite3_expert_destroy(sqlite3expert *p){ ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** -****************************************************************************** +************************************************************************* ** -** This file contains an implementation of two eponymous virtual tables, -** "sqlite_dbdata" and "sqlite_dbptr". Both modules require that the -** "sqlite_dbpage" eponymous virtual table be available. +** This file contains the public interface to the "recover" extension - +** an SQLite extension designed to recover data from corrupted database +** files. +*/ + +/* +** OVERVIEW: ** -** SQLITE_DBDATA: +** To use the API to recover data from a corrupted database, an +** application: +** +** 1) Creates an sqlite3_recover handle by calling either +** sqlite3_recover_init() or sqlite3_recover_init_sql(). +** +** 2) Configures the new handle using one or more calls to +** sqlite3_recover_config(). +** +** 3) Executes the recovery by repeatedly calling sqlite3_recover_step() on +** the handle until it returns something other than SQLITE_OK. If it +** returns SQLITE_DONE, then the recovery operation completed without +** error. If it returns some other non-SQLITE_OK value, then an error +** has occurred. +** +** 4) Retrieves any error code and English language error message using the +** sqlite3_recover_errcode() and sqlite3_recover_errmsg() APIs, +** respectively. +** +** 5) Destroys the sqlite3_recover handle and frees all resources +** using sqlite3_recover_finish(). +** +** The application may abandon the recovery operation at any point +** before it is finished by passing the sqlite3_recover handle to +** sqlite3_recover_finish(). This is not an error, but the final state +** of the output database, or the results of running the partial script +** delivered to the SQL callback, are undefined. +*/ + +#ifndef _SQLITE_RECOVER_H +#define _SQLITE_RECOVER_H + +/* #include "sqlite3.h" */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** An instance of the sqlite3_recover object represents a recovery +** operation in progress. +** +** Constructors: +** +** sqlite3_recover_init() +** sqlite3_recover_init_sql() +** +** Destructor: +** +** sqlite3_recover_finish() +** +** Methods: +** +** sqlite3_recover_config() +** sqlite3_recover_errcode() +** sqlite3_recover_errmsg() +** sqlite3_recover_run() +** sqlite3_recover_step() +*/ +typedef struct sqlite3_recover sqlite3_recover; + +/* +** These two APIs attempt to create and return a new sqlite3_recover object. +** In both cases the first two arguments identify the (possibly +** corrupt) database to recover data from. The first argument is an open +** database handle and the second the name of a database attached to that +** handle (i.e. "main", "temp" or the name of an attached database). +** +** If sqlite3_recover_init() is used to create the new sqlite3_recover +** handle, then data is recovered into a new database, identified by +** string parameter zUri. zUri may be an absolute or relative file path, +** or may be an SQLite URI. If the identified database file already exists, +** it is overwritten. +** +** If sqlite3_recover_init_sql() is invoked, then any recovered data will +** be returned to the user as a series of SQL statements. Executing these +** SQL statements results in the same database as would have been created +** had sqlite3_recover_init() been used. For each SQL statement in the +** output, the callback function passed as the third argument (xSql) is +** invoked once. The first parameter is a passed a copy of the fourth argument +** to this function (pCtx) as its first parameter, and a pointer to a +** nul-terminated buffer containing the SQL statement formated as UTF-8 as +** the second. If the xSql callback returns any value other than SQLITE_OK, +** then processing is immediately abandoned and the value returned used as +** the recover handle error code (see below). +** +** If an out-of-memory error occurs, NULL may be returned instead of +** a valid handle. In all other cases, it is the responsibility of the +** application to avoid resource leaks by ensuring that +** sqlite3_recover_finish() is called on all allocated handles. +*/ +sqlite3_recover *sqlite3_recover_init( + sqlite3* db, + const char *zDb, + const char *zUri +); +sqlite3_recover *sqlite3_recover_init_sql( + sqlite3* db, + const char *zDb, + int (*xSql)(void*, const char*), + void *pCtx +); + +/* +** Configure an sqlite3_recover object that has just been created using +** sqlite3_recover_init() or sqlite3_recover_init_sql(). This function +** may only be called before the first call to sqlite3_recover_step() +** or sqlite3_recover_run() on the object. +** +** The second argument passed to this function must be one of the +** SQLITE_RECOVER_* symbols defined below. Valid values for the third argument +** depend on the specific SQLITE_RECOVER_* symbol in use. +** +** SQLITE_OK is returned if the configuration operation was successful, +** or an SQLite error code otherwise. +*/ +int sqlite3_recover_config(sqlite3_recover*, int op, void *pArg); + +/* +** SQLITE_RECOVER_LOST_AND_FOUND: +** The pArg argument points to a string buffer containing the name +** of a "lost-and-found" table in the output database, or NULL. If +** the argument is non-NULL and the database contains seemingly +** valid pages that cannot be associated with any table in the +** recovered part of the schema, data is extracted from these +** pages to add to the lost-and-found table. +** +** SQLITE_RECOVER_FREELIST_CORRUPT: +** The pArg value must actually be a pointer to a value of type +** int containing value 0 or 1 cast as a (void*). If this option is set +** (argument is 1) and a lost-and-found table has been configured using +** SQLITE_RECOVER_LOST_AND_FOUND, then is assumed that the freelist is +** corrupt and an attempt is made to recover records from pages that +** appear to be linked into the freelist. Otherwise, pages on the freelist +** are ignored. Setting this option can recover more data from the +** database, but often ends up "recovering" deleted records. The default +** value is 0 (clear). +** +** SQLITE_RECOVER_ROWIDS: +** The pArg value must actually be a pointer to a value of type +** int containing value 0 or 1 cast as a (void*). If this option is set +** (argument is 1), then an attempt is made to recover rowid values +** that are not also INTEGER PRIMARY KEY values. If this option is +** clear, then new rowids are assigned to all recovered rows. The +** default value is 1 (set). +** +** SQLITE_RECOVER_SLOWINDEXES: +** The pArg value must actually be a pointer to a value of type +** int containing value 0 or 1 cast as a (void*). If this option is clear +** (argument is 0), then when creating an output database, the recover +** module creates and populates non-UNIQUE indexes right at the end of the +** recovery operation - after all recoverable data has been inserted +** into the new database. This is faster overall, but means that the +** final call to sqlite3_recover_step() for a recovery operation may +** be need to create a large number of indexes, which may be very slow. +** +** Or, if this option is set (argument is 1), then non-UNIQUE indexes +** are created in the output database before it is populated with +** recovered data. This is slower overall, but avoids the slow call +** to sqlite3_recover_step() at the end of the recovery operation. +** +** The default option value is 0. +*/ +#define SQLITE_RECOVER_LOST_AND_FOUND 1 +#define SQLITE_RECOVER_FREELIST_CORRUPT 2 +#define SQLITE_RECOVER_ROWIDS 3 +#define SQLITE_RECOVER_SLOWINDEXES 4 + +/* +** Perform a unit of work towards the recovery operation. This function +** must normally be called multiple times to complete database recovery. +** +** If no error occurs but the recovery operation is not completed, this +** function returns SQLITE_OK. If recovery has been completed successfully +** then SQLITE_DONE is returned. If an error has occurred, then an SQLite +** error code (e.g. SQLITE_IOERR or SQLITE_NOMEM) is returned. It is not +** considered an error if some or all of the data cannot be recovered +** due to database corruption. +** +** Once sqlite3_recover_step() has returned a value other than SQLITE_OK, +** all further such calls on the same recover handle are no-ops that return +** the same non-SQLITE_OK value. +*/ +int sqlite3_recover_step(sqlite3_recover*); + +/* +** Run the recovery operation to completion. Return SQLITE_OK if successful, +** or an SQLite error code otherwise. Calling this function is the same +** as executing: +** +** while( SQLITE_OK==sqlite3_recover_step(p) ); +** return sqlite3_recover_errcode(p); +*/ +int sqlite3_recover_run(sqlite3_recover*); + +/* +** If an error has been encountered during a prior call to +** sqlite3_recover_step(), then this function attempts to return a +** pointer to a buffer containing an English language explanation of +** the error. If no error message is available, or if an out-of memory +** error occurs while attempting to allocate a buffer in which to format +** the error message, NULL is returned. +** +** The returned buffer remains valid until the sqlite3_recover handle is +** destroyed using sqlite3_recover_finish(). +*/ +const char *sqlite3_recover_errmsg(sqlite3_recover*); + +/* +** If this function is called on an sqlite3_recover handle after +** an error occurs, an SQLite error code is returned. Otherwise, SQLITE_OK. +*/ +int sqlite3_recover_errcode(sqlite3_recover*); + +/* +** Clean up a recovery object created by a call to sqlite3_recover_init(). +** The results of using a recovery object with any API after it has been +** passed to this function are undefined. +** +** This function returns the same value as sqlite3_recover_errcode(). +*/ +int sqlite3_recover_finish(sqlite3_recover*); + + +#ifdef __cplusplus +} /* end of the 'extern "C"' block */ +#endif + +#endif /* ifndef _SQLITE_RECOVER_H */ + +/************************* End ../ext/recover/sqlite3recover.h ********************/ +# ifndef SQLITE_HAVE_SQLITE3R +/************************* Begin ../ext/recover/dbdata.c ******************/ +/* +** 2019-04-17 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file contains an implementation of two eponymous virtual tables, +** "sqlite_dbdata" and "sqlite_dbptr". Both modules require that the +** "sqlite_dbpage" eponymous virtual table be available. +** +** SQLITE_DBDATA: ** sqlite_dbdata is used to extract data directly from a database b-tree ** page and its associated overflow pages, bypassing the b-tree layer. ** The table schema is equivalent to: @@ -11488,13 +13422,12 @@ void sqlite3_expert_destroy(sqlite3expert *p){ */ #if !defined(SQLITEINT_H) -/* #include "sqlite3ext.h" */ +/* #include "sqlite3.h" */ /* typedef unsigned char u8; */ /* typedef unsigned int u32; */ #endif -SQLITE_EXTENSION_INIT1 #include #include @@ -11579,6 +13512,10 @@ static int dbdataConnect( DbdataTable *pTab = 0; int rc = sqlite3_declare_vtab(db, pAux ? DBPTR_SCHEMA : DBDATA_SCHEMA); + (void)argc; + (void)argv; + (void)pzErr; + sqlite3_vtab_config(db, SQLITE_VTAB_USES_ALL_SCHEMAS); if( rc==SQLITE_OK ){ pTab = (DbdataTable*)sqlite3_malloc64(sizeof(DbdataTable)); if( pTab==0 ){ @@ -11924,10 +13861,14 @@ static int dbdataNext(sqlite3_vtab_cursor *pCursor){ if( pCsr->bOnePage==0 && pCsr->iPgno>pCsr->szDb ) return SQLITE_OK; rc = dbdataLoadPage(pCsr, pCsr->iPgno, &pCsr->aPage, &pCsr->nPage); if( rc!=SQLITE_OK ) return rc; - if( pCsr->aPage ) break; - if( pCsr->bOnePage ) return SQLITE_OK; + if( pCsr->aPage && pCsr->nPage>=256 ) break; + sqlite3_free(pCsr->aPage); + pCsr->aPage = 0; + if( pCsr->bOnePage ) return SQLITE_OK; pCsr->iPgno++; } + + assert( iOff+3+2<=pCsr->nPage ); pCsr->iCell = pTab->bPtr ? -2 : 0; pCsr->nCell = get_uint16(&pCsr->aPage[iOff+3]); } @@ -12071,8 +14012,14 @@ static int dbdataNext(sqlite3_vtab_cursor *pCursor){ if( pCsr->pHdrPtr>&pCsr->pRec[pCsr->nRec] ){ bNextPage = 1; }else{ + int szField = 0; pCsr->pHdrPtr += dbdataGetVarintU32(pCsr->pHdrPtr, &iType); - pCsr->pPtr += dbdataValueBytes(iType); + szField = dbdataValueBytes(iType); + if( (pCsr->nRec - (pCsr->pPtr - pCsr->pRec))pPtr = &pCsr->pRec[pCsr->nRec]; + }else{ + pCsr->pPtr += szField; + } } } } @@ -12162,8 +14109,7 @@ static int dbdataGetEncoding(DbdataCursor *pCsr){ int nPg1 = 0; u8 *aPg1 = 0; rc = dbdataLoadPage(pCsr, 1, &aPg1, &nPg1); - assert( rc!=SQLITE_OK || nPg1==0 || nPg1>=512 ); - if( rc==SQLITE_OK && nPg1>0 ){ + if( rc==SQLITE_OK && nPg1>=(56+4) ){ pCsr->enc = get_uint32(&aPg1[56]); } sqlite3_free(aPg1); @@ -12183,6 +14129,8 @@ static int dbdataFilter( DbdataTable *pTab = (DbdataTable*)pCursor->pVtab; int rc = SQLITE_OK; const char *zSchema = "main"; + (void)idxStr; + (void)argc; dbdataResetCursor(pCsr); assert( pCsr->iPgno==1 ); @@ -12219,8 +14167,6 @@ static int dbdataFilter( } if( rc==SQLITE_OK ){ rc = sqlite3_bind_text(pCsr->pStmt, 1, zSchema, -1, SQLITE_TRANSIENT); - }else{ - pTab->base.zErrMsg = sqlite3_mprintf("%s", sqlite3_errmsg(pTab->db)); } /* Try to determine the encoding of the db by inspecting the header @@ -12229,6 +14175,10 @@ static int dbdataFilter( rc = dbdataGetEncoding(pCsr); } + if( rc!=SQLITE_OK ){ + pTab->base.zErrMsg = sqlite3_mprintf("%s", sqlite3_errmsg(pTab->db)); + } + if( rc==SQLITE_OK ){ rc = dbdataNext(pCursor); } @@ -12295,320 +14245,65 @@ static int dbdataColumn( } /* -** Return the rowid for an sqlite_dbdata or sqlite_dptr table. -*/ -static int dbdataRowid(sqlite3_vtab_cursor *pCursor, sqlite_int64 *pRowid){ - DbdataCursor *pCsr = (DbdataCursor*)pCursor; - *pRowid = pCsr->iRowid; - return SQLITE_OK; -} - - -/* -** Invoke this routine to register the "sqlite_dbdata" virtual table module -*/ -static int sqlite3DbdataRegister(sqlite3 *db){ - static sqlite3_module dbdata_module = { - 0, /* iVersion */ - 0, /* xCreate */ - dbdataConnect, /* xConnect */ - dbdataBestIndex, /* xBestIndex */ - dbdataDisconnect, /* xDisconnect */ - 0, /* xDestroy */ - dbdataOpen, /* xOpen - open a cursor */ - dbdataClose, /* xClose - close a cursor */ - dbdataFilter, /* xFilter - configure scan constraints */ - dbdataNext, /* xNext - advance a cursor */ - dbdataEof, /* xEof - check for end of scan */ - dbdataColumn, /* xColumn - read data */ - dbdataRowid, /* xRowid - read data */ - 0, /* xUpdate */ - 0, /* xBegin */ - 0, /* xSync */ - 0, /* xCommit */ - 0, /* xRollback */ - 0, /* xFindMethod */ - 0, /* xRename */ - 0, /* xSavepoint */ - 0, /* xRelease */ - 0, /* xRollbackTo */ - 0 /* xShadowName */ - }; - - int rc = sqlite3_create_module(db, "sqlite_dbdata", &dbdata_module, 0); - if( rc==SQLITE_OK ){ - rc = sqlite3_create_module(db, "sqlite_dbptr", &dbdata_module, (void*)1); - } - return rc; -} - -#ifdef _WIN32 - -#endif -int sqlite3_dbdata_init( - sqlite3 *db, - char **pzErrMsg, - const sqlite3_api_routines *pApi -){ - SQLITE_EXTENSION_INIT2(pApi); - return sqlite3DbdataRegister(db); -} - -#endif /* ifndef SQLITE_OMIT_VIRTUALTABLE */ - -/************************* End ../ext/recover/dbdata.c ********************/ -/************************* Begin ../ext/recover/sqlite3recover.h ******************/ -/* -** 2022-08-27 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -************************************************************************* -** -** This file contains the public interface to the "recover" extension - -** an SQLite extension designed to recover data from corrupted database -** files. -*/ - -/* -** OVERVIEW: -** -** To use the API to recover data from a corrupted database, an -** application: -** -** 1) Creates an sqlite3_recover handle by calling either -** sqlite3_recover_init() or sqlite3_recover_init_sql(). -** -** 2) Configures the new handle using one or more calls to -** sqlite3_recover_config(). -** -** 3) Executes the recovery by repeatedly calling sqlite3_recover_step() on -** the handle until it returns something other than SQLITE_OK. If it -** returns SQLITE_DONE, then the recovery operation completed without -** error. If it returns some other non-SQLITE_OK value, then an error -** has occurred. -** -** 4) Retrieves any error code and English language error message using the -** sqlite3_recover_errcode() and sqlite3_recover_errmsg() APIs, -** respectively. -** -** 5) Destroys the sqlite3_recover handle and frees all resources -** using sqlite3_recover_finish(). -** -** The application may abandon the recovery operation at any point -** before it is finished by passing the sqlite3_recover handle to -** sqlite3_recover_finish(). This is not an error, but the final state -** of the output database, or the results of running the partial script -** delivered to the SQL callback, are undefined. -*/ - -#ifndef _SQLITE_RECOVER_H -#define _SQLITE_RECOVER_H - -/* #include "sqlite3.h" */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* -** An instance of the sqlite3_recover object represents a recovery -** operation in progress. -** -** Constructors: -** -** sqlite3_recover_init() -** sqlite3_recover_init_sql() -** -** Destructor: -** -** sqlite3_recover_finish() -** -** Methods: -** -** sqlite3_recover_config() -** sqlite3_recover_errcode() -** sqlite3_recover_errmsg() -** sqlite3_recover_run() -** sqlite3_recover_step() -*/ -typedef struct sqlite3_recover sqlite3_recover; - -/* -** These two APIs attempt to create and return a new sqlite3_recover object. -** In both cases the first two arguments identify the (possibly -** corrupt) database to recover data from. The first argument is an open -** database handle and the second the name of a database attached to that -** handle (i.e. "main", "temp" or the name of an attached database). -** -** If sqlite3_recover_init() is used to create the new sqlite3_recover -** handle, then data is recovered into a new database, identified by -** string parameter zUri. zUri may be an absolute or relative file path, -** or may be an SQLite URI. If the identified database file already exists, -** it is overwritten. -** -** If sqlite3_recover_init_sql() is invoked, then any recovered data will -** be returned to the user as a series of SQL statements. Executing these -** SQL statements results in the same database as would have been created -** had sqlite3_recover_init() been used. For each SQL statement in the -** output, the callback function passed as the third argument (xSql) is -** invoked once. The first parameter is a passed a copy of the fourth argument -** to this function (pCtx) as its first parameter, and a pointer to a -** nul-terminated buffer containing the SQL statement formated as UTF-8 as -** the second. If the xSql callback returns any value other than SQLITE_OK, -** then processing is immediately abandoned and the value returned used as -** the recover handle error code (see below). -** -** If an out-of-memory error occurs, NULL may be returned instead of -** a valid handle. In all other cases, it is the responsibility of the -** application to avoid resource leaks by ensuring that -** sqlite3_recover_finish() is called on all allocated handles. -*/ -sqlite3_recover *sqlite3_recover_init( - sqlite3* db, - const char *zDb, - const char *zUri -); -sqlite3_recover *sqlite3_recover_init_sql( - sqlite3* db, - const char *zDb, - int (*xSql)(void*, const char*), - void *pCtx -); - -/* -** Configure an sqlite3_recover object that has just been created using -** sqlite3_recover_init() or sqlite3_recover_init_sql(). This function -** may only be called before the first call to sqlite3_recover_step() -** or sqlite3_recover_run() on the object. -** -** The second argument passed to this function must be one of the -** SQLITE_RECOVER_* symbols defined below. Valid values for the third argument -** depend on the specific SQLITE_RECOVER_* symbol in use. -** -** SQLITE_OK is returned if the configuration operation was successful, -** or an SQLite error code otherwise. -*/ -int sqlite3_recover_config(sqlite3_recover*, int op, void *pArg); - -/* -** SQLITE_RECOVER_LOST_AND_FOUND: -** The pArg argument points to a string buffer containing the name -** of a "lost-and-found" table in the output database, or NULL. If -** the argument is non-NULL and the database contains seemingly -** valid pages that cannot be associated with any table in the -** recovered part of the schema, data is extracted from these -** pages to add to the lost-and-found table. -** -** SQLITE_RECOVER_FREELIST_CORRUPT: -** The pArg value must actually be a pointer to a value of type -** int containing value 0 or 1 cast as a (void*). If this option is set -** (argument is 1) and a lost-and-found table has been configured using -** SQLITE_RECOVER_LOST_AND_FOUND, then is assumed that the freelist is -** corrupt and an attempt is made to recover records from pages that -** appear to be linked into the freelist. Otherwise, pages on the freelist -** are ignored. Setting this option can recover more data from the -** database, but often ends up "recovering" deleted records. The default -** value is 0 (clear). -** -** SQLITE_RECOVER_ROWIDS: -** The pArg value must actually be a pointer to a value of type -** int containing value 0 or 1 cast as a (void*). If this option is set -** (argument is 1), then an attempt is made to recover rowid values -** that are not also INTEGER PRIMARY KEY values. If this option is -** clear, then new rowids are assigned to all recovered rows. The -** default value is 1 (set). -** -** SQLITE_RECOVER_SLOWINDEXES: -** The pArg value must actually be a pointer to a value of type -** int containing value 0 or 1 cast as a (void*). If this option is clear -** (argument is 0), then when creating an output database, the recover -** module creates and populates non-UNIQUE indexes right at the end of the -** recovery operation - after all recoverable data has been inserted -** into the new database. This is faster overall, but means that the -** final call to sqlite3_recover_step() for a recovery operation may -** be need to create a large number of indexes, which may be very slow. -** -** Or, if this option is set (argument is 1), then non-UNIQUE indexes -** are created in the output database before it is populated with -** recovered data. This is slower overall, but avoids the slow call -** to sqlite3_recover_step() at the end of the recovery operation. -** -** The default option value is 0. -*/ -#define SQLITE_RECOVER_LOST_AND_FOUND 1 -#define SQLITE_RECOVER_FREELIST_CORRUPT 2 -#define SQLITE_RECOVER_ROWIDS 3 -#define SQLITE_RECOVER_SLOWINDEXES 4 - -/* -** Perform a unit of work towards the recovery operation. This function -** must normally be called multiple times to complete database recovery. -** -** If no error occurs but the recovery operation is not completed, this -** function returns SQLITE_OK. If recovery has been completed successfully -** then SQLITE_DONE is returned. If an error has occurred, then an SQLite -** error code (e.g. SQLITE_IOERR or SQLITE_NOMEM) is returned. It is not -** considered an error if some or all of the data cannot be recovered -** due to database corruption. -** -** Once sqlite3_recover_step() has returned a value other than SQLITE_OK, -** all further such calls on the same recover handle are no-ops that return -** the same non-SQLITE_OK value. -*/ -int sqlite3_recover_step(sqlite3_recover*); - -/* -** Run the recovery operation to completion. Return SQLITE_OK if successful, -** or an SQLite error code otherwise. Calling this function is the same -** as executing: -** -** while( SQLITE_OK==sqlite3_recover_step(p) ); -** return sqlite3_recover_errcode(p); +** Return the rowid for an sqlite_dbdata or sqlite_dptr table. */ -int sqlite3_recover_run(sqlite3_recover*); +static int dbdataRowid(sqlite3_vtab_cursor *pCursor, sqlite_int64 *pRowid){ + DbdataCursor *pCsr = (DbdataCursor*)pCursor; + *pRowid = pCsr->iRowid; + return SQLITE_OK; +} -/* -** If an error has been encountered during a prior call to -** sqlite3_recover_step(), then this function attempts to return a -** pointer to a buffer containing an English language explanation of -** the error. If no error message is available, or if an out-of memory -** error occurs while attempting to allocate a buffer in which to format -** the error message, NULL is returned. -** -** The returned buffer remains valid until the sqlite3_recover handle is -** destroyed using sqlite3_recover_finish(). -*/ -const char *sqlite3_recover_errmsg(sqlite3_recover*); /* -** If this function is called on an sqlite3_recover handle after -** an error occurs, an SQLite error code is returned. Otherwise, SQLITE_OK. -*/ -int sqlite3_recover_errcode(sqlite3_recover*); - -/* -** Clean up a recovery object created by a call to sqlite3_recover_init(). -** The results of using a recovery object with any API after it has been -** passed to this function are undefined. -** -** This function returns the same value as sqlite3_recover_errcode(). +** Invoke this routine to register the "sqlite_dbdata" virtual table module */ -int sqlite3_recover_finish(sqlite3_recover*); +static int sqlite3DbdataRegister(sqlite3 *db){ + static sqlite3_module dbdata_module = { + 0, /* iVersion */ + 0, /* xCreate */ + dbdataConnect, /* xConnect */ + dbdataBestIndex, /* xBestIndex */ + dbdataDisconnect, /* xDisconnect */ + 0, /* xDestroy */ + dbdataOpen, /* xOpen - open a cursor */ + dbdataClose, /* xClose - close a cursor */ + dbdataFilter, /* xFilter - configure scan constraints */ + dbdataNext, /* xNext - advance a cursor */ + dbdataEof, /* xEof - check for end of scan */ + dbdataColumn, /* xColumn - read data */ + dbdataRowid, /* xRowid - read data */ + 0, /* xUpdate */ + 0, /* xBegin */ + 0, /* xSync */ + 0, /* xCommit */ + 0, /* xRollback */ + 0, /* xFindMethod */ + 0, /* xRename */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0, /* xRollbackTo */ + 0 /* xShadowName */ + }; + int rc = sqlite3_create_module(db, "sqlite_dbdata", &dbdata_module, 0); + if( rc==SQLITE_OK ){ + rc = sqlite3_create_module(db, "sqlite_dbptr", &dbdata_module, (void*)1); + } + return rc; +} -#ifdef __cplusplus -} /* end of the 'extern "C"' block */ -#endif +int sqlite3_dbdata_init( + sqlite3 *db, + char **pzErrMsg, + const sqlite3_api_routines *pApi +){ + (void)pzErrMsg; + return sqlite3DbdataRegister(db); +} -#endif /* ifndef _SQLITE_RECOVER_H */ +#endif /* ifndef SQLITE_OMIT_VIRTUALTABLE */ -/************************* End ../ext/recover/sqlite3recover.h ********************/ +/************************* End ../ext/recover/dbdata.c ********************/ /************************* Begin ../ext/recover/sqlite3recover.c ******************/ /* ** 2022-08-27 @@ -13373,6 +15068,7 @@ static void recoverEscapeCrnl( sqlite3_value **argv ){ const char *zText = (const char*)sqlite3_value_text(argv[0]); + (void)argc; if( zText && zText[0]=='\'' ){ int nText = sqlite3_value_bytes(argv[0]); int i; @@ -13525,7 +15221,7 @@ static void recoverTransferSettings(sqlite3_recover *p){ return; } - for(ii=0; iidbIn, "PRAGMA %Q.%s", p->zDb, zPrag); @@ -13603,7 +15299,9 @@ static int recoverOpenOutput(sqlite3_recover *p){ } /* Register the custom user-functions with the output handle. */ - for(ii=0; p->errCode==SQLITE_OK && iierrCode==SQLITE_OK && ii<(int)(sizeof(aFunc)/sizeof(aFunc[0])); + ii++){ p->errCode = sqlite3_create_function(db, aFunc[ii].zName, aFunc[ii].nArg, SQLITE_UTF8, (void*)p, aFunc[ii].xFunc, 0, 0 ); @@ -13715,7 +15413,7 @@ static void recoverAddTable( int iField = sqlite3_column_int(pStmt, 0); int iCol = sqlite3_column_int(pStmt, 1); - assert( iFieldnCol && iColnCol ); + assert( iColnCol ); pNew->aCol[iCol].iField = iField; pNew->bIntkey = 0; @@ -14712,7 +16410,7 @@ static int recoverIsValidPage(u8 *aTmp, const u8 *a, int n){ if( iFree>(n-4) ) return 0; iNext = recoverGetU16(&a[iFree]); nByte = recoverGetU16(&a[iFree+2]); - if( iFree+nByte>n ) return 0; + if( iFree+nByte>n || nByte<4 ) return 0; if( iNext && iNext2 ) exit(1); + if( ++seenInterrupt>1 ) exit(1); if( globalDb ) sqlite3_interrupt(globalDb); } @@ -16372,6 +18084,7 @@ static void printSchemaLine(FILE *out, const char *z, const char *zTail){ int i; for(i=0; isGraph.pRow; if( pRow ){ if( pRow->zText[0]=='-' ){ @@ -16492,6 +18205,8 @@ static void eqp_render(ShellState *p){ utf8_printf(p->out, "%s\n", pRow->zText+3); p->sGraph.pRow = pRow->pNext; sqlite3_free(pRow); + }else if( nCycle>0 ){ + utf8_printf(p->out, "QUERY PLAN (cycles=%lld [100%%])\n", nCycle); }else{ utf8_printf(p->out, "QUERY PLAN\n"); } @@ -16589,38 +18304,58 @@ static int shell_callback( } break; } + case MODE_ScanExp: case MODE_Explain: { - static const int aExplainWidth[] = {4, 13, 4, 4, 4, 13, 2, 13}; - if( nArg>ArraySize(aExplainWidth) ){ - nArg = ArraySize(aExplainWidth); + static const int aExplainWidth[] = {4, 13, 4, 4, 4, 13, 2, 13}; + static const int aExplainMap[] = {0, 1, 2, 3, 4, 5, 6, 7 }; + static const int aScanExpWidth[] = {4, 6, 6, 13, 4, 4, 4, 13, 2, 13}; + static const int aScanExpMap[] = {0, 9, 8, 1, 2, 3, 4, 5, 6, 7 }; + + const int *aWidth = aExplainWidth; + const int *aMap = aExplainMap; + int nWidth = ArraySize(aExplainWidth); + int iIndent = 1; + + if( p->cMode==MODE_ScanExp ){ + aWidth = aScanExpWidth; + aMap = aScanExpMap; + nWidth = ArraySize(aScanExpWidth); + iIndent = 3; } + if( nArg>nWidth ) nArg = nWidth; + + /* If this is the first row seen, print out the headers */ if( p->cnt++==0 ){ for(i=0; iout, w, azCol[i]); + utf8_width_print(p->out, aWidth[i], azCol[ aMap[i] ]); fputs(i==nArg-1 ? "\n" : " ", p->out); } for(i=0; iout, w); + print_dashes(p->out, aWidth[i]); fputs(i==nArg-1 ? "\n" : " ", p->out); } } + + /* If there is no data, exit early. */ if( azArg==0 ) break; + for(i=0; iw ){ - w = strlenChar(azArg[i]); + if( zVal && strlenChar(zVal)>w ){ + w = strlenChar(zVal); + zSep = " "; } - if( i==1 && p->aiIndent && p->pStmt ){ + if( i==iIndent && p->aiIndent && p->pStmt ){ if( p->iIndentnIndent ){ utf8_printf(p->out, "%*.s", p->aiIndent[p->iIndent], ""); } p->iIndent++; } - utf8_width_print(p->out, w, azArg[i] ? azArg[i] : p->nullValue); - fputs(i==nArg-1 ? "\n" : " ", p->out); + utf8_width_print(p->out, w, zVal ? zVal : p->nullValue); + fputs(i==nArg-1 ? "\n" : zSep, p->out); } break; } @@ -16804,9 +18539,9 @@ static int shell_callback( sqlite3_uint64 ur; memcpy(&ur,&r,sizeof(r)); if( ur==0x7ff0000000000000LL ){ - raw_printf(p->out, "1e999"); + raw_printf(p->out, "9.0e+999"); }else if( ur==0xfff0000000000000LL ){ - raw_printf(p->out, "-1e999"); + raw_printf(p->out, "-9.0e+999"); }else{ sqlite3_int64 ir = (sqlite3_int64)r; if( r==(double)ir ){ @@ -16850,9 +18585,9 @@ static int shell_callback( sqlite3_uint64 ur; memcpy(&ur,&r,sizeof(r)); if( ur==0x7ff0000000000000LL ){ - raw_printf(p->out, "1e999"); + raw_printf(p->out, "9.0e+999"); }else if( ur==0xfff0000000000000LL ){ - raw_printf(p->out, "-1e999"); + raw_printf(p->out, "-9.0e+999"); }else{ sqlite3_snprintf(50,z,"%!.20g", r); raw_printf(p->out, "%s", z); @@ -17056,6 +18791,7 @@ static char *shell_error_context(const char *zSql, sqlite3 *db){ if( db==0 || zSql==0 || (iOffset = sqlite3_error_offset(db))<0 + || iOffset>=(int)strlen(zSql) ){ return sqlite3_mprintf(""); } @@ -17067,15 +18803,15 @@ static char *shell_error_context(const char *zSql, sqlite3 *db){ len = strlen(zSql); if( len>78 ){ len = 78; - while( (zSql[len]&0xc0)==0x80 ) len--; + while( len>0 && (zSql[len]&0xc0)==0x80 ) len--; } zCode = sqlite3_mprintf("%.*s", len, zSql); shell_check_oom(zCode); for(i=0; zCode[i]; i++){ if( IsSpace(zSql[i]) ) zCode[i] = ' '; } if( iOffset<25 ){ - zMsg = sqlite3_mprintf("\n %z\n %*s^--- error here", zCode, iOffset, ""); + zMsg = sqlite3_mprintf("\n %z\n %*s^--- error here", zCode,iOffset,""); }else{ - zMsg = sqlite3_mprintf("\n %z\n %*serror here ---^", zCode, iOffset-14, ""); + zMsg = sqlite3_mprintf("\n %z\n %*serror here ---^", zCode,iOffset-14,""); } return zMsg; } @@ -17140,7 +18876,7 @@ static int run_table_dump_query( */ static char *save_err_msg( sqlite3 *db, /* Database to query */ - const char *zPhase, /* When the error occcurs */ + const char *zPhase, /* When the error occurs */ int rc, /* Error code returned from API */ const char *zSql /* SQL string, or NULL */ ){ @@ -17263,7 +18999,7 @@ static int display_stats( if( pArg->statsOn==3 ){ if( pArg->pStmt ){ - iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_VM_STEP, bReset); + iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_VM_STEP,bReset); raw_printf(pArg->out, "VM-steps: %d\n", iCur); } return 0; @@ -17344,8 +19080,10 @@ static int display_stats( raw_printf(pArg->out, "Sort Operations: %d\n", iCur); iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_AUTOINDEX,bReset); raw_printf(pArg->out, "Autoindex Inserts: %d\n", iCur); - iHit = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_FILTER_HIT, bReset); - iMiss = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_FILTER_MISS, bReset); + iHit = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_FILTER_HIT, + bReset); + iMiss = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_FILTER_MISS, + bReset); if( iHit || iMiss ){ raw_printf(pArg->out, "Bloom filter bypass taken: %d/%d\n", iHit, iHit+iMiss); @@ -17369,53 +19107,114 @@ static int display_stats( return 0; } -/* -** Display scan stats. -*/ -static void display_scanstats( + +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS +static int scanStatsHeight(sqlite3_stmt *p, int iEntry){ + int iPid = 0; + int ret = 1; + sqlite3_stmt_scanstatus_v2(p, iEntry, + SQLITE_SCANSTAT_SELECTID, SQLITE_SCANSTAT_COMPLEX, (void*)&iPid + ); + while( iPid!=0 ){ + int ii; + for(ii=0; 1; ii++){ + int iId; + int res; + res = sqlite3_stmt_scanstatus_v2(p, ii, + SQLITE_SCANSTAT_SELECTID, SQLITE_SCANSTAT_COMPLEX, (void*)&iId + ); + if( res ) break; + if( iId==iPid ){ + sqlite3_stmt_scanstatus_v2(p, ii, + SQLITE_SCANSTAT_PARENTID, SQLITE_SCANSTAT_COMPLEX, (void*)&iPid + ); + } + } + ret++; + } + return ret; +} +#endif + +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS +static void display_explain_scanstats( sqlite3 *db, /* Database to query */ ShellState *pArg /* Pointer to ShellState */ ){ -#ifndef SQLITE_ENABLE_STMT_SCANSTATUS - UNUSED_PARAMETER(db); - UNUSED_PARAMETER(pArg); -#else - int i, k, n, mx; - raw_printf(pArg->out, "-------- scanstats --------\n"); - mx = 0; - for(k=0; k<=mx; k++){ - double rEstLoop = 1.0; - for(i=n=0; 1; i++){ - sqlite3_stmt *p = pArg->pStmt; - sqlite3_int64 nLoop, nVisit; - double rEst; - int iSid; - const char *zExplain; - if( sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_NLOOP, (void*)&nLoop) ){ - break; + static const int f = SQLITE_SCANSTAT_COMPLEX; + sqlite3_stmt *p = pArg->pStmt; + int ii = 0; + i64 nTotal = 0; + int nWidth = 0; + eqp_reset(pArg); + + for(ii=0; 1; ii++){ + const char *z = 0; + int n = 0; + if( sqlite3_stmt_scanstatus_v2(p,ii,SQLITE_SCANSTAT_EXPLAIN,f,(void*)&z) ){ + break; + } + n = strlen(z) + scanStatsHeight(p, ii)*3; + if( n>nWidth ) nWidth = n; + } + nWidth += 4; + + sqlite3_stmt_scanstatus_v2(p, -1, SQLITE_SCANSTAT_NCYCLE, f, (void*)&nTotal); + for(ii=0; 1; ii++){ + i64 nLoop = 0; + i64 nRow = 0; + i64 nCycle = 0; + int iId = 0; + int iPid = 0; + const char *z = 0; + const char *zName = 0; + char *zText = 0; + double rEst = 0.0; + + if( sqlite3_stmt_scanstatus_v2(p,ii,SQLITE_SCANSTAT_EXPLAIN,f,(void*)&z) ){ + break; + } + sqlite3_stmt_scanstatus_v2(p, ii, SQLITE_SCANSTAT_EST,f,(void*)&rEst); + sqlite3_stmt_scanstatus_v2(p, ii, SQLITE_SCANSTAT_NLOOP,f,(void*)&nLoop); + sqlite3_stmt_scanstatus_v2(p, ii, SQLITE_SCANSTAT_NVISIT,f,(void*)&nRow); + sqlite3_stmt_scanstatus_v2(p, ii, SQLITE_SCANSTAT_NCYCLE,f,(void*)&nCycle); + sqlite3_stmt_scanstatus_v2(p, ii, SQLITE_SCANSTAT_SELECTID,f,(void*)&iId); + sqlite3_stmt_scanstatus_v2(p, ii, SQLITE_SCANSTAT_PARENTID,f,(void*)&iPid); + sqlite3_stmt_scanstatus_v2(p, ii, SQLITE_SCANSTAT_NAME,f,(void*)&zName); + + zText = sqlite3_mprintf("%s", z); + if( nCycle>=0 || nLoop>=0 || nRow>=0 ){ + char *z = 0; + if( nCycle>=0 && nTotal>0 ){ + z = sqlite3_mprintf("%zcycles=%lld [%d%%]", z, + nCycle, ((nCycle*100)+nTotal/2) / nTotal + ); } - sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_SELECTID, (void*)&iSid); - if( iSid>mx ) mx = iSid; - if( iSid!=k ) continue; - if( n==0 ){ - rEstLoop = (double)nLoop; - if( k>0 ) raw_printf(pArg->out, "-------- subquery %d -------\n", k); + if( nLoop>=0 ){ + z = sqlite3_mprintf("%z%sloops=%lld", z, z ? " " : "", nLoop); } - n++; - sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_NVISIT, (void*)&nVisit); - sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EST, (void*)&rEst); - sqlite3_stmt_scanstatus(p, i, SQLITE_SCANSTAT_EXPLAIN, (void*)&zExplain); - utf8_printf(pArg->out, "Loop %2d: %s\n", n, zExplain); - rEstLoop *= rEst; - raw_printf(pArg->out, - " nLoop=%-8lld nRow=%-8lld estRow=%-8lld estRow/Loop=%-8g\n", - nLoop, nVisit, (sqlite3_int64)(rEstLoop+0.5), rEst + if( nRow>=0 ){ + z = sqlite3_mprintf("%z%srows=%lld", z, z ? " " : "", nRow); + } + + if( zName && pArg->scanstatsOn>1 ){ + double rpl = (double)nRow / (double)nLoop; + z = sqlite3_mprintf("%z rpl=%.1f est=%.1f", z, rpl, rEst); + } + + zText = sqlite3_mprintf( + "% *z (%z)", -1*(nWidth-scanStatsHeight(p, ii)*3), zText, z ); } + + eqp_append(pArg, iId, iPid, zText); + sqlite3_free(zText); } - raw_printf(pArg->out, "---------------------------\n"); -#endif + + eqp_render(pArg, nTotal); } +#endif + /* ** Parameter azArray points to a zero-terminated array of strings. zStr @@ -17453,8 +19252,6 @@ static int str_in_array(const char *zStr, const char **azArray){ ** and "Goto" by 2 spaces. */ static void explain_data_prepare(ShellState *p, sqlite3_stmt *pSql){ - const char *zSql; /* The text of the SQL statement */ - const char *z; /* Used to check if this is an EXPLAIN */ int *abYield = 0; /* True if op is an OP_Yield */ int nAlloc = 0; /* Allocated size of p->aiIndent[], abYield */ int iOp; /* Index of operation in p->aiIndent[] */ @@ -17465,65 +19262,45 @@ static void explain_data_prepare(ShellState *p, sqlite3_stmt *pSql){ "Rewind", 0 }; const char *azGoto[] = { "Goto", 0 }; - /* Try to figure out if this is really an EXPLAIN statement. If this - ** cannot be verified, return early. */ - if( sqlite3_column_count(pSql)!=8 ){ - p->cMode = p->mode; - return; - } - zSql = sqlite3_sql(pSql); - if( zSql==0 ) return; - for(z=zSql; *z==' ' || *z=='\t' || *z=='\n' || *z=='\f' || *z=='\r'; z++); - if( sqlite3_strnicmp(z, "explain", 7) ){ - p->cMode = p->mode; - return; - } + /* The caller guarantees that the leftmost 4 columns of the statement + ** passed to this function are equivalent to the leftmost 4 columns + ** of EXPLAIN statement output. In practice the statement may be + ** an EXPLAIN, or it may be a query on the bytecode() virtual table. */ + assert( sqlite3_column_count(pSql)>=4 ); + assert( 0==sqlite3_stricmp( sqlite3_column_name(pSql, 0), "addr" ) ); + assert( 0==sqlite3_stricmp( sqlite3_column_name(pSql, 1), "opcode" ) ); + assert( 0==sqlite3_stricmp( sqlite3_column_name(pSql, 2), "p1" ) ); + assert( 0==sqlite3_stricmp( sqlite3_column_name(pSql, 3), "p2" ) ); for(iOp=0; SQLITE_ROW==sqlite3_step(pSql); iOp++){ int i; int iAddr = sqlite3_column_int(pSql, 0); const char *zOp = (const char*)sqlite3_column_text(pSql, 1); - - /* Set p2 to the P2 field of the current opcode. Then, assuming that - ** p2 is an instruction address, set variable p2op to the index of that - ** instruction in the aiIndent[] array. p2 and p2op may be different if - ** the current instruction is part of a sub-program generated by an - ** SQL trigger or foreign key. */ + int p1 = sqlite3_column_int(pSql, 2); int p2 = sqlite3_column_int(pSql, 3); + + /* Assuming that p2 is an instruction address, set variable p2op to the + ** index of that instruction in the aiIndent[] array. p2 and p2op may be + ** different if the current instruction is part of a sub-program generated + ** by an SQL trigger or foreign key. */ int p2op = (p2 + (iOp-iAddr)); /* Grow the p->aiIndent array as required */ if( iOp>=nAlloc ){ - if( iOp==0 ){ - /* Do further verfication that this is explain output. Abort if - ** it is not */ - static const char *explainCols[] = { - "addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment" }; - int jj; - for(jj=0; jjcMode = p->mode; - sqlite3_reset(pSql); - return; - } - } - } nAlloc += 100; p->aiIndent = (int*)sqlite3_realloc64(p->aiIndent, nAlloc*sizeof(int)); shell_check_oom(p->aiIndent); abYield = (int*)sqlite3_realloc64(abYield, nAlloc*sizeof(int)); shell_check_oom(abYield); } + abYield[iOp] = str_in_array(zOp, azYield); p->aiIndent[iOp] = 0; p->nIndent = iOp+1; - if( str_in_array(zOp, azNext) && p2op>0 ){ for(i=p2op; iaiIndent[i] += 2; } - if( str_in_array(zOp, azGoto) && p2opnIndent - && (abYield[p2op] || sqlite3_column_int(pSql, 2)) - ){ + if( str_in_array(zOp, azGoto) && p2opaiIndent[i] += 2; } } @@ -17543,6 +19320,48 @@ static void explain_data_delete(ShellState *p){ p->iIndent = 0; } +static void exec_prepared_stmt(ShellState*, sqlite3_stmt*); + +/* +** Display scan stats. +*/ +static void display_scanstats( + sqlite3 *db, /* Database to query */ + ShellState *pArg /* Pointer to ShellState */ +){ +#ifndef SQLITE_ENABLE_STMT_SCANSTATUS + UNUSED_PARAMETER(db); + UNUSED_PARAMETER(pArg); +#else + if( pArg->scanstatsOn==3 ){ + const char *zSql = + " SELECT addr, opcode, p1, p2, p3, p4, p5, comment, nexec," + " round(ncycle*100.0 / (sum(ncycle) OVER ()), 2)||'%' AS cycles" + " FROM bytecode(?)"; + + int rc = SQLITE_OK; + sqlite3_stmt *pStmt = 0; + rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + if( rc==SQLITE_OK ){ + sqlite3_stmt *pSave = pArg->pStmt; + pArg->pStmt = pStmt; + sqlite3_bind_pointer(pStmt, 1, pSave, "stmt-pointer", 0); + + pArg->cnt = 0; + pArg->cMode = MODE_ScanExp; + explain_data_prepare(pArg, pStmt); + exec_prepared_stmt(pArg, pStmt); + explain_data_delete(pArg); + + sqlite3_finalize(pStmt); + pArg->pStmt = pSave; + } + }else{ + display_explain_scanstats(db, pArg); + } +#endif +} + /* ** Disable and restore .wheretrace and .treetrace/.selecttrace settings. */ @@ -17600,12 +19419,13 @@ static void bind_prepared_stmt(ShellState *pArg, sqlite3_stmt *pStmt){ if( nVar==0 ) return; /* Nothing to do */ if( sqlite3_table_column_metadata(pArg->db, "TEMP", "sqlite_parameters", "key", 0, 0, 0, 0, 0)!=SQLITE_OK ){ - return; /* Parameter table does not exist */ + rc = SQLITE_NOTFOUND; + pQ = 0; + }else{ + rc = sqlite3_prepare_v2(pArg->db, + "SELECT value FROM temp.sqlite_parameters" + " WHERE key=?1", -1, &pQ, 0); } - rc = sqlite3_prepare_v2(pArg->db, - "SELECT value FROM temp.sqlite_parameters" - " WHERE key=?1", -1, &pQ, 0); - if( rc || pQ==0 ) return; for(i=1; i<=nVar; i++){ char zNum[30]; const char *zVar = sqlite3_bind_parameter_name(pStmt, i); @@ -17614,8 +19434,16 @@ static void bind_prepared_stmt(ShellState *pArg, sqlite3_stmt *pStmt){ zVar = zNum; } sqlite3_bind_text(pQ, 1, zVar, -1, SQLITE_STATIC); - if( sqlite3_step(pQ)==SQLITE_ROW ){ + if( rc==SQLITE_OK && pQ && sqlite3_step(pQ)==SQLITE_ROW ){ sqlite3_bind_value(pStmt, i, sqlite3_column_value(pQ, 0)); +#ifdef NAN + }else if( sqlite3_strlike("_NAN", zVar, 0)==0 ){ + sqlite3_bind_double(pStmt, i, NAN); +#endif +#ifdef INFINITY + }else if( sqlite3_strlike("_INF", zVar, 0)==0 ){ + sqlite3_bind_double(pStmt, i, INFINITY); +#endif }else{ sqlite3_bind_null(pStmt, i); } @@ -17653,7 +19481,7 @@ static void bind_prepared_stmt(ShellState *pArg, sqlite3_stmt *pStmt){ ** characters */ static void print_box_line(FILE *out, int N){ - const char zDash[] = + const char zDash[] = BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24 BOX_24; const int nDash = sizeof(zDash) - 1; @@ -17782,7 +19610,7 @@ static char *translateForDisplayAndDup( break; } zOut[j] = 0; - return (char*)zOut; + return (char*)zOut; } /* Extract the value of the i-th current column for pStmt as an SQL literal @@ -17829,7 +19657,7 @@ static char *quoted_column(sqlite3_stmt *pStmt, int i){ */ static void exec_prepared_stmt_columnar( ShellState *p, /* Pointer to ShellState */ - sqlite3_stmt *pStmt /* Statment to run */ + sqlite3_stmt *pStmt /* Statement to run */ ){ sqlite3_int64 nRow = 0; int nColumn = 0; @@ -17859,7 +19687,7 @@ static void exec_prepared_stmt_columnar( azData = sqlite3_malloc64( nAlloc*sizeof(char*) ); shell_check_oom(azData); azNextLine = sqlite3_malloc64( nColumn*sizeof(char*) ); - shell_check_oom((void*)azNextLine); + shell_check_oom(azNextLine); memset((void*)azNextLine, 0, nColumn*sizeof(char*) ); if( p->cmOpts.bQuote ){ azQuoted = sqlite3_malloc64( nColumn*sizeof(char*) ); @@ -17889,6 +19717,7 @@ static void exec_prepared_stmt_columnar( } if( wx<0 ) wx = -wx; uz = (const unsigned char*)sqlite3_column_name(pStmt,i); + if( uz==0 ) uz = (u8*)""; azData[i] = translateForDisplayAndDup(uz, &zNotUsed, wx, bw); } do{ @@ -18054,7 +19883,7 @@ static void exec_prepared_stmt_columnar( */ static void exec_prepared_stmt( ShellState *pArg, /* Pointer to ShellState */ - sqlite3_stmt *pStmt /* Statment to run */ + sqlite3_stmt *pStmt /* Statement to run */ ){ int rc; sqlite3_uint64 nRow = 0; @@ -18143,8 +19972,8 @@ static void exec_prepared_stmt( ** caller to eventually free this buffer using sqlite3_free(). */ static int expertHandleSQL( - ShellState *pState, - const char *zSql, + ShellState *pState, + const char *zSql, char **pzErr ){ assert( pState->expert.pExpert ); @@ -18154,7 +19983,7 @@ static int expertHandleSQL( /* ** This function is called either to silently clean up the object -** created by the ".expert" command (if bCancel==1), or to generate a +** created by the ".expert" command (if bCancel==1), or to generate a ** report from it and then clean it up (if bCancel==0). ** ** If successful, SQLITE_OK is returned. Otherwise, an SQLite error @@ -18249,7 +20078,8 @@ static int expertDotCommand( if( rc==SQLITE_OK ){ pState->expert.pExpert = sqlite3_expert_new(pState->db, &zErr); if( pState->expert.pExpert==0 ){ - raw_printf(stderr, "sqlite3_expert_new: %s\n", zErr ? zErr : "out of memory"); + raw_printf(stderr, "sqlite3_expert_new: %s\n", + zErr ? zErr : "out of memory"); rc = SQLITE_ERROR; }else{ sqlite3_expert_config( @@ -18312,7 +20142,7 @@ static int shell_exec( if( zStmtSql==0 ) zStmtSql = ""; while( IsSpace(zStmtSql[0]) ) zStmtSql++; - /* save off the prepared statment handle and reset row count */ + /* save off the prepared statement handle and reset row count */ if( pArg ){ pArg->pStmt = pStmt; pArg->cnt = 0; @@ -18321,57 +20151,51 @@ static int shell_exec( /* Show the EXPLAIN QUERY PLAN if .eqp is on */ if( pArg && pArg->autoEQP && sqlite3_stmt_isexplain(pStmt)==0 ){ sqlite3_stmt *pExplain; - char *zEQP; int triggerEQP = 0; disable_debug_trace_modes(); sqlite3_db_config(db, SQLITE_DBCONFIG_TRIGGER_EQP, -1, &triggerEQP); if( pArg->autoEQP>=AUTOEQP_trigger ){ sqlite3_db_config(db, SQLITE_DBCONFIG_TRIGGER_EQP, 1, 0); } - zEQP = sqlite3_mprintf("EXPLAIN QUERY PLAN %s", zStmtSql); - shell_check_oom(zEQP); - rc = sqlite3_prepare_v2(db, zEQP, -1, &pExplain, 0); + pExplain = pStmt; + sqlite3_reset(pExplain); + rc = sqlite3_stmt_explain(pExplain, 2); if( rc==SQLITE_OK ){ while( sqlite3_step(pExplain)==SQLITE_ROW ){ const char *zEQPLine = (const char*)sqlite3_column_text(pExplain,3); int iEqpId = sqlite3_column_int(pExplain, 0); int iParentId = sqlite3_column_int(pExplain, 1); if( zEQPLine==0 ) zEQPLine = ""; - if( zEQPLine[0]=='-' ) eqp_render(pArg); + if( zEQPLine[0]=='-' ) eqp_render(pArg, 0); eqp_append(pArg, iEqpId, iParentId, zEQPLine); } - eqp_render(pArg); + eqp_render(pArg, 0); } - sqlite3_finalize(pExplain); - sqlite3_free(zEQP); if( pArg->autoEQP>=AUTOEQP_full ){ /* Also do an EXPLAIN for ".eqp full" mode */ - zEQP = sqlite3_mprintf("EXPLAIN %s", zStmtSql); - shell_check_oom(zEQP); - rc = sqlite3_prepare_v2(db, zEQP, -1, &pExplain, 0); + sqlite3_reset(pExplain); + rc = sqlite3_stmt_explain(pExplain, 1); if( rc==SQLITE_OK ){ pArg->cMode = MODE_Explain; + assert( sqlite3_stmt_isexplain(pExplain)==1 ); explain_data_prepare(pArg, pExplain); exec_prepared_stmt(pArg, pExplain); explain_data_delete(pArg); } - sqlite3_finalize(pExplain); - sqlite3_free(zEQP); } if( pArg->autoEQP>=AUTOEQP_trigger && triggerEQP==0 ){ sqlite3_db_config(db, SQLITE_DBCONFIG_TRIGGER_EQP, 0, 0); - /* Reprepare pStmt before reactiving trace modes */ - sqlite3_finalize(pStmt); - sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); - if( pArg ) pArg->pStmt = pStmt; } + sqlite3_reset(pStmt); + sqlite3_stmt_explain(pStmt, 0); restore_debug_trace_modes(); } if( pArg ){ + int bIsExplain = (sqlite3_stmt_isexplain(pStmt)==1); pArg->cMode = pArg->mode; if( pArg->autoExplain ){ - if( sqlite3_stmt_isexplain(pStmt)==1 ){ + if( bIsExplain ){ pArg->cMode = MODE_Explain; } if( sqlite3_stmt_isexplain(pStmt)==2 ){ @@ -18381,7 +20205,7 @@ static int shell_exec( /* If the shell is currently in ".explain" mode, gather the extra ** data required to add indents to the output.*/ - if( pArg->cMode==MODE_Explain ){ + if( pArg->cMode==MODE_Explain && bIsExplain ){ explain_data_prepare(pArg, pStmt); } } @@ -18389,7 +20213,7 @@ static int shell_exec( bind_prepared_stmt(pArg, pStmt); exec_prepared_stmt(pArg, pStmt); explain_data_delete(pArg); - eqp_render(pArg); + eqp_render(pArg, 0); /* print usage stats if stats on */ if( pArg && pArg->statsOn ){ @@ -18497,7 +20321,7 @@ static char **tableColumnList(ShellState *p, const char *zTab){ */ if( preserveRowid && isIPK ){ /* If a single PRIMARY KEY column with type INTEGER was seen, then it - ** might be an alise for the ROWID. But it might also be a WITHOUT ROWID + ** might be an alias for the ROWID. But it might also be a WITHOUT ROWID ** table or a INTEGER PRIMARY KEY DESC column, neither of which are ** ROWID aliases. To distinguish these cases, check to see if ** there is a "pk" entry in "PRAGMA index_list". There will be @@ -18758,7 +20582,6 @@ static const char *(azHelp[]) = { " --async Write to FILE without journal and fsync()", #endif ".bail on|off Stop after hitting an error. Default OFF", - ".binary on|off Turn binary output on or off. Default OFF", #ifndef SQLITE_SHELL_FIDDLE ".cd DIRECTORY Change the working directory to DIRECTORY", #endif @@ -18768,6 +20591,9 @@ static const char *(azHelp[]) = { ".clone NEWDB Clone data into NEWDB from the existing database", #endif ".connection [close] [#] Open or close an auxiliary database connection", +#if defined(_WIN32) || defined(WIN32) + ".crnl on|off Translate \\n to \\r\\n. Default ON", +#endif ".databases List names and files of attached databases", ".dbconfig ?op? ?val? List or change sqlite3_db_config() options", #if SQLITE_SHELL_HAVE_RECOVER @@ -18821,13 +20647,13 @@ static const char *(azHelp[]) = { " input text.", #endif #ifndef SQLITE_OMIT_TEST_CONTROL - ".imposter INDEX TABLE Create imposter table TABLE on index INDEX", + ",imposter INDEX TABLE Create imposter table TABLE on index INDEX", #endif ".indexes ?TABLE? Show names of indexes", " If TABLE is specified, only show indexes for", " tables matching TABLE using the LIKE operator.", #ifdef SQLITE_ENABLE_IOTRACE - ".iotrace FILE Enable I/O diagnostic logging to FILE", + ",iotrace FILE Enable I/O diagnostic logging to FILE", #endif ".limit ?LIMIT? ?VAL? Display or change the value of an SQLITE_LIMIT", ".lint OPTIONS Report potential schema issues.", @@ -18836,8 +20662,10 @@ static const char *(azHelp[]) = { #if !defined(SQLITE_OMIT_LOAD_EXTENSION) && !defined(SQLITE_SHELL_FIDDLE) ".load FILE ?ENTRY? Load an extension library", #endif -#ifndef SQLITE_SHELL_FIDDLE - ".log FILE|off Turn logging on or off. FILE can be stderr/stdout", +#if !defined(SQLITE_SHELL_FIDDLE) + ".log FILE|on|off Turn logging on or off. FILE can be stderr/stdout", +#else + ".log on|off Turn logging on or off.", #endif ".mode MODE ?OPTIONS? Set output mode", " MODE is one of:", @@ -18914,7 +20742,7 @@ static const char *(azHelp[]) = { #endif ".prompt MAIN CONTINUE Replace the standard prompts", #ifndef SQLITE_SHELL_FIDDLE - ".quit Exit this program", + ".quit Stop interpreting input stream, exit if primary.", ".read FILE Read input from FILE or command output", " If FILE begins with \"|\", it is a command that generates the input.", #endif @@ -18929,12 +20757,12 @@ static const char *(azHelp[]) = { ".restore ?DB? FILE Restore content of DB (default \"main\") from FILE", ".save ?OPTIONS? FILE Write database to FILE (an alias for .backup ...)", #endif - ".scanstats on|off Turn sqlite3_stmt_scanstatus() metrics on or off", + ".scanstats on|off|est Turn sqlite3_stmt_scanstatus() metrics on or off", ".schema ?PATTERN? Show the CREATE statements matching PATTERN", " Options:", " --indent Try to pretty-print the schema", " --nosys Omit objects whose names start with \"sqlite_\"", - ".selftest ?OPTIONS? Run tests defined in the SELFTEST table", + ",selftest ?OPTIONS? Run tests defined in the SELFTEST table", " Options:", " --init Create a new SELFTEST table", " -v Verbose output", @@ -18976,9 +20804,9 @@ static const char *(azHelp[]) = { #endif ".tables ?TABLE? List names of tables matching LIKE pattern TABLE", #ifndef SQLITE_SHELL_FIDDLE - ".testcase NAME Begin redirecting output to 'testcase-out.txt'", + ",testcase NAME Begin redirecting output to 'testcase-out.txt'", #endif - ".testctrl CMD ... Run various sqlite3_test_control() operations", + ",testctrl CMD ... Run various sqlite3_test_control() operations", " Run \".testctrl\" with no arguments for details", ".timeout MS Try opening locked tables for MS milliseconds", ".timer on|off Turn SQL timer on or off", @@ -19002,6 +20830,7 @@ static const char *(azHelp[]) = { ".unmodule NAME ... Unregister virtual table modules", " --allexcept Unregister everything except those named", #endif + ".version Show source, library and compiler versions", ".vfsinfo ?AUX? Information about the top-level VFS", ".vfslist List all available VFSes", ".vfsname ?AUX? Print the name of the VFS stack", @@ -19029,16 +20858,41 @@ static int showHelp(FILE *out, const char *zPattern){ || cli_strcmp(zPattern,"-all")==0 || cli_strcmp(zPattern,"--all")==0 ){ - /* Show all commands, but only one line per command */ - if( zPattern==0 ) zPattern = ""; + enum HelpWanted { HW_NoCull = 0, HW_SummaryOnly = 1, HW_Undoc = 2 }; + enum HelpHave { HH_Undoc = 2, HH_Summary = 1, HH_More = 0 }; + /* Show all or most commands + ** *zPattern==0 => summary of documented commands only + ** *zPattern=='0' => whole help for undocumented commands + ** Otherwise => whole help for documented commands + */ + enum HelpWanted hw = HW_SummaryOnly; + enum HelpHave hh = HH_More; + if( zPattern!=0 ){ + hw = (*zPattern=='0')? HW_NoCull|HW_Undoc : HW_NoCull; + } for(i=0; iin ){ - fclose(in); - }else{ - p->lineno = nLine; - } - return a; - -readHexDb_error: - if( in!=p->in ){ - fclose(in); - }else{ - while( fgets(zLine, sizeof(zLine), p->in)!=0 ){ - nLine++; - if(cli_strncmp(zLine, "| end ", 6)==0 ) break; - } - p->lineno = nLine; - } - sqlite3_free(a); - utf8_printf(stderr,"Error on line %d of --hexdb input\n", nLine); - return 0; -} -#endif /* SQLITE_OMIT_DESERIALIZE */ - -/* -** Scalar function "shell_int32". The first argument to this function -** must be a blob. The second a non-negative integer. This function -** reads and returns a 32-bit big-endian integer from byte -** offset (4*) of the blob. -*/ -static void shellInt32( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - const unsigned char *pBlob; - int nBlob; - int iInt; - - UNUSED_PARAMETER(argc); - nBlob = sqlite3_value_bytes(argv[0]); - pBlob = (const unsigned char*)sqlite3_value_blob(argv[0]); - iInt = sqlite3_value_int(argv[1]); - - if( iInt>=0 && (iInt+1)*4<=nBlob ){ - const unsigned char *a = &pBlob[iInt*4]; - sqlite3_int64 iVal = ((sqlite3_int64)a[0]<<24) - + ((sqlite3_int64)a[1]<<16) - + ((sqlite3_int64)a[2]<< 8) - + ((sqlite3_int64)a[3]<< 0); - sqlite3_result_int64(context, iVal); + if( in!=p->in ){ + fclose(in); + }else{ + p->lineno = nLine; } -} + return a; -/* -** Scalar function "shell_idquote(X)" returns string X quoted as an identifier, -** using "..." with internal double-quote characters doubled. -*/ -static void shellIdQuote( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - const char *zName = (const char*)sqlite3_value_text(argv[0]); - UNUSED_PARAMETER(argc); - if( zName ){ - char *z = sqlite3_mprintf("\"%w\"", zName); - sqlite3_result_text(context, z, -1, sqlite3_free); +readHexDb_error: + if( in!=p->in ){ + fclose(in); + }else{ + while( fgets(zLine, sizeof(zLine), p->in)!=0 ){ + nLine++; + if(cli_strncmp(zLine, "| end ", 6)==0 ) break; + } + p->lineno = nLine; } + sqlite3_free(a); + utf8_printf(stderr,"Error on line %d of --hexdb input\n", nLine); + return 0; } +#endif /* SQLITE_OMIT_DESERIALIZE */ /* ** Scalar function "usleep(X)" invokes sqlite3_sleep(X) and returns X. */ static void shellUSleepFunc( - sqlite3_context *context, - int argcUnused, + sqlite3_context *context, + int argcUnused, sqlite3_value **argv ){ int sleep = sqlite3_value_int(argv[0]); @@ -19363,97 +21185,6 @@ static void shellUSleepFunc( sqlite3_result_int(context, sleep); } -/* -** Scalar function "shell_escape_crnl" used by the .recover command. -** The argument passed to this function is the output of built-in -** function quote(). If the first character of the input is "'", -** indicating that the value passed to quote() was a text value, -** then this function searches the input for "\n" and "\r" characters -** and adds a wrapper similar to the following: -** -** replace(replace(, '\n', char(10), '\r', char(13)); -** -** Or, if the first character of the input is not "'", then a copy -** of the input is returned. -*/ -static void shellEscapeCrnl( - sqlite3_context *context, - int argc, - sqlite3_value **argv -){ - const char *zText = (const char*)sqlite3_value_text(argv[0]); - UNUSED_PARAMETER(argc); - if( zText && zText[0]=='\'' ){ - i64 nText = sqlite3_value_bytes(argv[0]); - i64 i; - char zBuf1[20]; - char zBuf2[20]; - const char *zNL = 0; - const char *zCR = 0; - i64 nCR = 0; - i64 nNL = 0; - - for(i=0; zText[i]; i++){ - if( zNL==0 && zText[i]=='\n' ){ - zNL = unused_string(zText, "\\n", "\\012", zBuf1); - nNL = strlen(zNL); - } - if( zCR==0 && zText[i]=='\r' ){ - zCR = unused_string(zText, "\\r", "\\015", zBuf2); - nCR = strlen(zCR); - } - } - - if( zNL || zCR ){ - i64 iOut = 0; - i64 nMax = (nNL > nCR) ? nNL : nCR; - i64 nAlloc = nMax * nText + (nMax+64)*2; - char *zOut = (char*)sqlite3_malloc64(nAlloc); - if( zOut==0 ){ - sqlite3_result_error_nomem(context); - return; - } - - if( zNL && zCR ){ - memcpy(&zOut[iOut], "replace(replace(", 16); - iOut += 16; - }else{ - memcpy(&zOut[iOut], "replace(", 8); - iOut += 8; - } - for(i=0; zText[i]; i++){ - if( zText[i]=='\n' ){ - memcpy(&zOut[iOut], zNL, nNL); - iOut += nNL; - }else if( zText[i]=='\r' ){ - memcpy(&zOut[iOut], zCR, nCR); - iOut += nCR; - }else{ - zOut[iOut] = zText[i]; - iOut++; - } - } - - if( zNL ){ - memcpy(&zOut[iOut], ",'", 2); iOut += 2; - memcpy(&zOut[iOut], zNL, nNL); iOut += nNL; - memcpy(&zOut[iOut], "', char(10))", 12); iOut += 12; - } - if( zCR ){ - memcpy(&zOut[iOut], ",'", 2); iOut += 2; - memcpy(&zOut[iOut], zCR, nCR); iOut += nCR; - memcpy(&zOut[iOut], "', char(13))", 12); iOut += 12; - } - - sqlite3_result_text(context, zOut, iOut, SQLITE_TRANSIENT); - sqlite3_free(zOut); - return; - } - } - - sqlite3_result_value(context, argv[0]); -} - /* Flags for open_db(). ** ** The default behavior of open_db() is to exit(1) if the database fails to @@ -19478,13 +21209,13 @@ static void open_db(ShellState *p, int openFlags){ if( zDbFilename==0 || zDbFilename[0]==0 ){ p->openMode = SHELL_OPEN_NORMAL; }else{ - p->openMode = (u8)deduceDatabaseType(zDbFilename, + p->openMode = (u8)deduceDatabaseType(zDbFilename, (openFlags & OPEN_DB_ZIPFILE)!=0); } } switch( p->openMode ){ case SHELL_OPEN_APPENDVFS: { - sqlite3_open_v2(zDbFilename, &p->db, + sqlite3_open_v2(zDbFilename, &p->db, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|p->openFlags, "apndvfs"); break; } @@ -19513,18 +21244,39 @@ static void open_db(ShellState *p, int openFlags){ if( p->db==0 || SQLITE_OK!=sqlite3_errcode(p->db) ){ utf8_printf(stderr,"Error: unable to open database \"%s\": %s\n", zDbFilename, sqlite3_errmsg(p->db)); - if( openFlags & OPEN_DB_KEEPALIVE ){ - sqlite3_open(":memory:", &p->db); - return; + if( (openFlags & OPEN_DB_KEEPALIVE)==0 ){ + exit(1); + } + sqlite3_close(p->db); + sqlite3_open(":memory:", &p->db); + if( p->db==0 || SQLITE_OK!=sqlite3_errcode(p->db) ){ + utf8_printf(stderr, + "Also: unable to open substitute in-memory database.\n" + ); + exit(1); + }else{ + utf8_printf(stderr, + "Notice: using substitute in-memory database instead of \"%s\"\n", + zDbFilename); } - exit(1); } + sqlite3_db_config(p->db, SQLITE_DBCONFIG_STMT_SCANSTATUS, (int)0, (int*)0); + + /* Reflect the use or absence of --unsafe-testing invocation. */ + { + int testmode_on = ShellHasFlag(p,SHFLG_TestingMode); + sqlite3_db_config(p->db, SQLITE_DBCONFIG_TRUSTED_SCHEMA, testmode_on,0); + sqlite3_db_config(p->db, SQLITE_DBCONFIG_DEFENSIVE, !testmode_on,0); + } + #ifndef SQLITE_OMIT_LOAD_EXTENSION sqlite3_enable_load_extension(p->db, 1); #endif sqlite3_shathree_init(p->db, 0, 0); sqlite3_uint_init(p->db, 0, 0); sqlite3_decimal_init(p->db, 0, 0); + sqlite3_base64_init(p->db, 0, 0); + sqlite3_base85_init(p->db, 0, 0); sqlite3_regexp_init(p->db, 0, 0); sqlite3_ieee_init(p->db, 0, 0); sqlite3_series_init(p->db, 0, 0); @@ -19532,27 +21284,52 @@ static void open_db(ShellState *p, int openFlags){ sqlite3_fileio_init(p->db, 0, 0); sqlite3_completion_init(p->db, 0, 0); #endif -#if SQLITE_SHELL_HAVE_RECOVER - sqlite3_dbdata_init(p->db, 0, 0); -#endif #ifdef SQLITE_HAVE_ZLIB if( !p->bSafeModePersist ){ sqlite3_zipfile_init(p->db, 0, 0); sqlite3_sqlar_init(p->db, 0, 0); } #endif +#ifdef SQLITE_SHELL_EXTFUNCS + /* Create a preprocessing mechanism for extensions to make + * their own provisions for being built into the shell. + * This is a short-span macro. See further below for usage. + */ +#define SHELL_SUB_MACRO(base, variant) base ## _ ## variant +#define SHELL_SUBMACRO(base, variant) SHELL_SUB_MACRO(base, variant) + /* Let custom-included extensions get their ..._init() called. + * The WHATEVER_INIT( db, pzErrorMsg, pApi ) macro should cause + * the extension's sqlite3_*_init( db, pzErrorMsg, pApi ) + * initialization routine to be called. + */ + { + int irc = SHELL_SUBMACRO(SQLITE_SHELL_EXTFUNCS, INIT)(p->db); + /* Let custom-included extensions expose their functionality. + * The WHATEVER_EXPOSE( db, pzErrorMsg ) macro should cause + * the SQL functions, virtual tables, collating sequences or + * VFS's implemented by the extension to be registered. + */ + if( irc==SQLITE_OK + || irc==SQLITE_OK_LOAD_PERMANENTLY ){ + SHELL_SUBMACRO(SQLITE_SHELL_EXTFUNCS, EXPOSE)(p->db, 0); + } +#undef SHELL_SUB_MACRO +#undef SHELL_SUBMACRO + } +#endif + + sqlite3_create_function(p->db, "strtod", 1, SQLITE_UTF8, 0, + shellStrtod, 0, 0); + sqlite3_create_function(p->db, "dtostr", 1, SQLITE_UTF8, 0, + shellDtostr, 0, 0); + sqlite3_create_function(p->db, "dtostr", 2, SQLITE_UTF8, 0, + shellDtostr, 0, 0); sqlite3_create_function(p->db, "shell_add_schema", 3, SQLITE_UTF8, 0, shellAddSchemaName, 0, 0); sqlite3_create_function(p->db, "shell_module_schema", 1, SQLITE_UTF8, 0, shellModuleSchema, 0, 0); sqlite3_create_function(p->db, "shell_putsnl", 1, SQLITE_UTF8, p, shellPutsFunc, 0, 0); - sqlite3_create_function(p->db, "shell_escape_crnl", 1, SQLITE_UTF8, 0, - shellEscapeCrnl, 0, 0); - sqlite3_create_function(p->db, "shell_int32", 2, SQLITE_UTF8, 0, - shellInt32, 0, 0); - sqlite3_create_function(p->db, "shell_idquote", 1, SQLITE_UTF8, 0, - shellIdQuote, 0, 0); sqlite3_create_function(p->db, "usleep",1,SQLITE_UTF8,0, shellUSleepFunc, 0, 0); #ifndef SQLITE_NOHAVE_SYSTEM @@ -19561,6 +21338,7 @@ static void open_db(ShellState *p, int openFlags){ sqlite3_create_function(p->db, "edit", 2, SQLITE_UTF8, 0, editFunc, 0, 0); #endif + if( p->openMode==SHELL_OPEN_ZIPFILE ){ char *zSql = sqlite3_mprintf( "CREATE VIRTUAL TABLE zip USING zipfile(%Q);", zDbFilename); @@ -19578,9 +21356,9 @@ static void open_db(ShellState *p, int openFlags){ aData = (unsigned char*)readFile(zDbFilename, &nData); }else{ aData = readHexDb(p, &nData); - if( aData==0 ){ - return; - } + } + if( aData==0 ){ + return; } rc = sqlite3_deserialize(p->db, "main", aData, nData, nData, SQLITE_DESERIALIZE_RESIZEABLE | @@ -19594,20 +21372,25 @@ static void open_db(ShellState *p, int openFlags){ } #endif } - if( p->bSafeModePersist && p->db!=0 ){ - sqlite3_set_authorizer(p->db, safeModeAuth, p); + if( p->db!=0 ){ + if( p->bSafeModePersist ){ + sqlite3_set_authorizer(p->db, safeModeAuth, p); + } + sqlite3_db_config( + p->db, SQLITE_DBCONFIG_STMT_SCANSTATUS, p->scanstatsOn, (int*)0 + ); } } /* -** Attempt to close the databaes connection. Report errors. +** Attempt to close the database connection. Report errors. */ void close_db(sqlite3 *db){ int rc = sqlite3_close(db); if( rc ){ utf8_printf(stderr, "Error: sqlite3_close() returns %d: %s\n", rc, sqlite3_errmsg(db)); - } + } } #if HAVE_READLINE || HAVE_EDITLINE @@ -19637,6 +21420,8 @@ static char *readline_completion_generator(const char *text, int state){ return zRet; } static char **readline_completion(const char *zText, int iStart, int iEnd){ + (void)iStart; + (void)iEnd; rl_attempted_completion_over = 1; return rl_completion_matches(zText, readline_completion_generator); } @@ -19652,7 +21437,7 @@ static void linenoise_completion(const char *zLine, linenoiseCompletions *lc){ char *zSql; char zBuf[1000]; - if( nLine>sizeof(zBuf)-30 ) return; + if( nLine>(i64)sizeof(zBuf)-30 ) return; if( zLine[0]=='.' || zLine[0]=='#') return; for(i=nLine-1; i>=0 && (isalnum(zLine[i]) || zLine[i]=='_'); i--){} if( i==nLine-1 ) return; @@ -19668,7 +21453,7 @@ static void linenoise_completion(const char *zLine, linenoiseCompletions *lc){ while( sqlite3_step(pStmt)==SQLITE_ROW ){ const char *zCompletion = (const char*)sqlite3_column_text(pStmt, 0); int nCompletion = sqlite3_column_bytes(pStmt, 0); - if( iStart+nCompletion < sizeof(zBuf)-1 && zCompletion ){ + if( iStart+nCompletion < (i64)sizeof(zBuf)-1 && zCompletion ){ memcpy(zBuf+iStart, zCompletion, nCompletion+1); linenoiseAddCompletion(lc, zBuf); } @@ -19692,6 +21477,7 @@ static void linenoise_completion(const char *zLine, linenoiseCompletions *lc){ ** \' -> ' ** \\ -> backslash ** \NNN -> ascii character NNN in octal +** \xHH -> ascii character HH in hexadecimal */ static void resolve_backslashes(char *z){ int i, j; @@ -19720,6 +21506,15 @@ static void resolve_backslashes(char *z){ c = '\''; }else if( c=='\\' ){ c = '\\'; + }else if( c=='x' ){ + int nhd = 0, hdv; + u8 hv = 0; + while( nhd<2 && (c=z[i+1+nhd])!=0 && (hdv=hexDigitValue(c))>=0 ){ + hv = (u8)((hv<<4)|hdv); + ++nhd; + } + i += nhd; + c = (u8)hv; }else if( c>='0' && c<='7' ){ c -= '0'; if( z[i+1]>='0' && z[i+1]<='7' ){ @@ -19819,7 +21614,7 @@ static int sql_trace_callback( utf8_printf(p->traceOut, "-- closing database connection\n"); return 0; } - if( mType!=SQLITE_TRACE_ROW && ((const char*)pX)[0]=='-' ){ + if( mType!=SQLITE_TRACE_ROW && pX!=0 && ((const char*)pX)[0]=='-' ){ zSql = (const char*)pX; }else{ pStmt = (sqlite3_stmt*)pP; @@ -19851,7 +21646,7 @@ static int sql_trace_callback( break; } case SQLITE_TRACE_PROFILE: { - sqlite3_int64 nNanosec = *(sqlite3_int64*)pX; + sqlite3_int64 nNanosec = pX ? *(sqlite3_int64*)pX : 0; utf8_printf(p->traceOut, "%.*s; -- %lld ns\n", (int)nSql, zSql, nNanosec); break; } @@ -19863,10 +21658,13 @@ static int sql_trace_callback( /* ** A no-op routine that runs with the ".breakpoint" doc-command. This is ** a useful spot to set a debugger breakpoint. +** +** This routine does not do anything practical. The code are there simply +** to prevent the compiler from optimizing this routine out. */ static void test_breakpoint(void){ - static int nCall = 0; - nCall++; + static unsigned int nCall = 0; + if( (nCall++)==0xffffffff ) printf("Many .breakpoints have run\n"); } /* @@ -19924,8 +21722,8 @@ static void import_append_char(ImportCtx *p, int c){ */ static char *SQLITE_CDECL csv_read_one_field(ImportCtx *p){ int c; - int cSep = p->cColSep; - int rSep = p->cRowSep; + int cSep = (u8)p->cColSep; + int rSep = (u8)p->cRowSep; p->n = 0; c = fgetc(p->in); if( c==EOF || seenInterrupt ){ @@ -20014,8 +21812,8 @@ static char *SQLITE_CDECL csv_read_one_field(ImportCtx *p){ */ static char *SQLITE_CDECL ascii_read_one_field(ImportCtx *p){ int c; - int cSep = p->cColSep; - int rSep = p->cRowSep; + int cSep = (u8)p->cColSep; + int rSep = (u8)p->cRowSep; p->n = 0; c = fgetc(p->in); if( c==EOF || seenInterrupt ){ @@ -20079,7 +21877,7 @@ static void tryToCloneData( if( rc ){ utf8_printf(stderr, "Error %d: %s on [%s]\n", sqlite3_extended_errcode(newDb), sqlite3_errmsg(newDb), - zQuery); + zInsert); goto end_data_xfer; } for(k=0; k<2; k++){ @@ -20165,7 +21963,7 @@ static void tryToCloneSchema( char *zErrMsg = 0; zQuery = sqlite3_mprintf("SELECT name, sql FROM sqlite_schema" - " WHERE %s", zWhere); + " WHERE %s ORDER BY rowid ASC", zWhere); shell_check_oom(zQuery); rc = sqlite3_prepare_v2(p->db, zQuery, -1, &pQuery, 0); if( rc ){ @@ -20178,12 +21976,14 @@ static void tryToCloneSchema( zName = sqlite3_column_text(pQuery, 0); zSql = sqlite3_column_text(pQuery, 1); if( zName==0 || zSql==0 ) continue; - printf("%s... ", zName); fflush(stdout); - sqlite3_exec(newDb, (const char*)zSql, 0, 0, &zErrMsg); - if( zErrMsg ){ - utf8_printf(stderr, "Error: %s\nSQL: [%s]\n", zErrMsg, zSql); - sqlite3_free(zErrMsg); - zErrMsg = 0; + if( sqlite3_stricmp((char*)zName, "sqlite_sequence")!=0 ){ + printf("%s... ", zName); fflush(stdout); + sqlite3_exec(newDb, (const char*)zSql, 0, 0, &zErrMsg); + if( zErrMsg ){ + utf8_printf(stderr, "Error: %s\nSQL: [%s]\n", zErrMsg, zSql); + sqlite3_free(zErrMsg); + zErrMsg = 0; + } } if( xForEach ){ xForEach(p, newDb, (const char*)zName); @@ -20207,6 +22007,7 @@ static void tryToCloneSchema( zName = sqlite3_column_text(pQuery, 0); zSql = sqlite3_column_text(pQuery, 1); if( zName==0 || zSql==0 ) continue; + if( sqlite3_stricmp((char*)zName, "sqlite_sequence")==0 ) continue; printf("%s... ", zName); fflush(stdout); sqlite3_exec(newDb, (const char*)zSql, 0, 0, &zErrMsg); if( zErrMsg ){ @@ -20310,7 +22111,7 @@ static int db_int(sqlite3 *db, const char *zSql){ return res; } -#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_ENABLE_DBPAGE_VTAB) +#if SQLITE_SHELL_HAVE_RECOVER /* ** Convert a 2-byte or 4-byte big-endian integer into a native integer */ @@ -20373,7 +22174,9 @@ static int shell_dbinfo_command(ShellState *p, int nArg, char **azArg){ if( sqlite3_step(pStmt)==SQLITE_ROW && sqlite3_column_bytes(pStmt,0)>100 ){ - memcpy(aHdr, sqlite3_column_blob(pStmt,0), 100); + const u8 *pb = sqlite3_column_blob(pStmt,0); + shell_check_oom(pb); + memcpy(aHdr, pb, 100); sqlite3_finalize(pStmt); }else{ raw_printf(stderr, "unable to read database header\n"); @@ -20848,16 +22651,16 @@ static int lintDotCommand( #if !defined SQLITE_OMIT_VIRTUALTABLE static void shellPrepare( - sqlite3 *db, - int *pRc, - const char *zSql, + sqlite3 *db, + int *pRc, + const char *zSql, sqlite3_stmt **ppStmt ){ *ppStmt = 0; if( *pRc==SQLITE_OK ){ int rc = sqlite3_prepare_v2(db, zSql, -1, ppStmt, 0); if( rc!=SQLITE_OK ){ - raw_printf(stderr, "sql error: %s (%d)\n", + raw_printf(stderr, "sql error: %s (%d)\n", sqlite3_errmsg(db), sqlite3_errcode(db) ); *pRc = rc; @@ -20873,10 +22676,10 @@ static void shellPrepare( ** nuisance compiler warnings about "defined but not used". */ void shellPreparePrintf( - sqlite3 *db, - int *pRc, + sqlite3 *db, + int *pRc, sqlite3_stmt **ppStmt, - const char *zFmt, + const char *zFmt, ... ){ *ppStmt = 0; @@ -20902,7 +22705,7 @@ void shellPreparePrintf( ** nuisance compiler warnings about "defined but not used". */ void shellFinalize( - int *pRc, + int *pRc, sqlite3_stmt *pStmt ){ if( pStmt ){ @@ -20924,7 +22727,7 @@ void shellFinalize( ** nuisance compiler warnings about "defined but not used". */ void shellReset( - int *pRc, + int *pRc, sqlite3_stmt *pStmt ){ int rc = sqlite3_reset(pStmt); @@ -20972,7 +22775,7 @@ static int arUsage(FILE *f){ } /* -** Print an error message for the .ar command to stderr and return +** Print an error message for the .ar command to stderr and return ** SQLITE_ERROR. */ static int arErrorMsg(ArCommand *pAr, const char *zFmt, ...){ @@ -21038,7 +22841,7 @@ static int arProcessSwitch(ArCommand *pAr, int eSwitch, const char *zArg){ break; case AR_SWITCH_APPEND: pAr->bAppend = 1; - /* Fall thru into --file */ + deliberate_fall_through; case AR_SWITCH_FILE: pAr->zFile = zArg; break; @@ -21053,7 +22856,7 @@ static int arProcessSwitch(ArCommand *pAr, int eSwitch, const char *zArg){ /* ** Parse the command line for an ".ar" command. The results are written into ** structure (*pAr). SQLITE_OK is returned if the command line is parsed -** successfully, otherwise an error message is written to stderr and +** successfully, otherwise an error message is written to stderr and ** SQLITE_ERROR returned. */ static int arParseCommand( @@ -21190,7 +22993,10 @@ static int arParseCommand( } } } - + if( pAr->eCmd==0 ){ + utf8_printf(stderr, "Required argument missing. Usage:\n"); + return arUsage(stderr); + } return SQLITE_OK; } @@ -21249,7 +23055,7 @@ static int arCheckEntries(ArCommand *pAr){ ** when pAr->bGlob is false and GLOB match when pAr->bGlob is true. */ static void arWhereClause( - int *pRc, + int *pRc, ArCommand *pAr, char **pzWhere /* OUT: New WHERE clause */ ){ @@ -21264,7 +23070,7 @@ static void arWhereClause( for(i=0; inArg; i++){ const char *z = pAr->azArg[i]; zWhere = sqlite3_mprintf( - "%z%s name %s '%q' OR substr(name,1,%d) %s '%q/'", + "%z%s name %s '%q' OR substr(name,1,%d) %s '%q/'", zWhere, zSep, zSameOp, z, strlen30(z)+1, zSameOp, z ); if( zWhere==0 ){ @@ -21279,10 +23085,10 @@ static void arWhereClause( } /* -** Implementation of .ar "lisT" command. +** Implementation of .ar "lisT" command. */ static int arListCommand(ArCommand *pAr){ - const char *zSql = "SELECT %s FROM %s WHERE %s"; + const char *zSql = "SELECT %s FROM %s WHERE %s"; const char *azCols[] = { "name", "lsmode(mode), sz, datetime(mtime, 'unixepoch'), name" @@ -21304,7 +23110,7 @@ static int arListCommand(ArCommand *pAr){ if( pAr->bVerbose ){ utf8_printf(pAr->p->out, "%s % 10d %s %s\n", sqlite3_column_text(pSql, 0), - sqlite3_column_int(pSql, 1), + sqlite3_column_int(pSql, 1), sqlite3_column_text(pSql, 2), sqlite3_column_text(pSql, 3) ); @@ -21361,17 +23167,17 @@ static int arRemoveCommand(ArCommand *pAr){ } /* -** Implementation of .ar "eXtract" command. +** Implementation of .ar "eXtract" command. */ static int arExtractCommand(ArCommand *pAr){ - const char *zSql1 = + const char *zSql1 = "SELECT " " ($dir || name)," " writefile(($dir || name), %s, mode, mtime) " "FROM %s WHERE (%s) AND (data IS NULL OR $dirOnly = 0)" " AND name NOT GLOB '*..[/\\]*'"; - const char *azExtraArg[] = { + const char *azExtraArg[] = { "sqlar_uncompress(data, sz)", "data" }; @@ -21397,7 +23203,7 @@ static int arExtractCommand(ArCommand *pAr){ if( zDir==0 ) rc = SQLITE_NOMEM; } - shellPreparePrintf(pAr->db, &rc, &pSql, zSql1, + shellPreparePrintf(pAr->db, &rc, &pSql, zSql1, azExtraArg[pAr->bZip], pAr->zSrcTable, zWhere ); @@ -21475,7 +23281,7 @@ static int arCreateOrUpdateCommand( int bUpdate, /* true for a --create. */ int bOnlyIfChanged /* Only update if file has changed */ ){ - const char *zCreate = + const char *zCreate = "CREATE TABLE IF NOT EXISTS sqlar(\n" " name TEXT PRIMARY KEY, -- name of the file\n" " mode INT, -- access permissions\n" @@ -21517,7 +23323,7 @@ static int arCreateOrUpdateCommand( arExecSql(pAr, "PRAGMA page_size=512"); rc = arExecSql(pAr, "SAVEPOINT ar;"); if( rc!=SQLITE_OK ) return rc; - zTemp[0] = 0; + zTemp[0] = 0; if( pAr->bZip ){ /* Initialize the zipfile virtual table, if necessary */ if( pAr->zFile ){ @@ -21611,7 +23417,7 @@ static int arDotCommand( }else if( cmd.zFile ){ int flags; if( cmd.bAppend ) eDbType = SHELL_OPEN_APPENDVFS; - if( cmd.eCmd==AR_CMD_CREATE || cmd.eCmd==AR_CMD_INSERT + if( cmd.eCmd==AR_CMD_CREATE || cmd.eCmd==AR_CMD_INSERT || cmd.eCmd==AR_CMD_REMOVE || cmd.eCmd==AR_CMD_UPDATE ){ flags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE; }else{ @@ -21622,10 +23428,10 @@ static int arDotCommand( utf8_printf(pState->out, "-- open database '%s'%s\n", cmd.zFile, eDbType==SHELL_OPEN_APPENDVFS ? " using 'apndvfs'" : ""); } - rc = sqlite3_open_v2(cmd.zFile, &cmd.db, flags, + rc = sqlite3_open_v2(cmd.zFile, &cmd.db, flags, eDbType==SHELL_OPEN_APPENDVFS ? "apndvfs" : 0); if( rc!=SQLITE_OK ){ - utf8_printf(stderr, "cannot open file: %s (%s)\n", + utf8_printf(stderr, "cannot open file: %s (%s)\n", cmd.zFile, sqlite3_errmsg(cmd.db) ); goto end_ar_command; @@ -21741,7 +23547,7 @@ static int recoverDatabaseCmd(ShellState *pState, int nArg, char **azArg){ bRowids = 0; } else{ - utf8_printf(stderr, "unexpected option: %s\n", azArg[i]); + utf8_printf(stderr, "unexpected option: %s\n", azArg[i]); showHelp(pState->out, azArg[0]); return 1; } @@ -21956,7 +23762,7 @@ FROM (\ sqlite3_bind_int(pStmt, 1, nDigits); rc = sqlite3_step(pStmt); sqlite3_finalize(pStmt); - assert(rc==SQLITE_DONE); + if( rc!=SQLITE_DONE ) rc_err_oom_die(SQLITE_NOMEM); } assert(db_int(*pDb, zHasDupes)==0); /* Consider: remove this */ rc = sqlite3_prepare_v2(*pDb, zCollectVar, -1, &pStmt, 0); @@ -22104,7 +23910,7 @@ static int do_meta_command(char *zLine, ShellState *p){ return 1; } if( zDb==0 ) zDb = "main"; - rc = sqlite3_open_v2(zDestFile, &pDest, + rc = sqlite3_open_v2(zDestFile, &pDest, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, zVfs); if( rc!=SQLITE_OK ){ utf8_printf(stderr, "Error: cannot open \"%s\"\n", zDestFile); @@ -22143,6 +23949,7 @@ static int do_meta_command(char *zLine, ShellState *p){ } }else + /* Undocumented. Legacy only. See "crnl" below */ if( c=='b' && n>=3 && cli_strncmp(azArg[0], "binary", n)==0 ){ if( nArg==2 ){ if( booleanValue(azArg[1]) ){ @@ -22151,6 +23958,8 @@ static int do_meta_command(char *zLine, ShellState *p){ setTextMode(p->out, 1); } }else{ + raw_printf(stderr, "The \".binary\" command is deprecated." + " Use \".crnl\" instead.\n"); raw_printf(stderr, "Usage: .binary on|off\n"); rc = 1; } @@ -22206,7 +24015,6 @@ static int do_meta_command(char *zLine, ShellState *p){ raw_printf(stderr, "Usage: .check GLOB-PATTERN\n"); rc = 2; }else if( (zRes = readFile("testcase-out.txt", 0))==0 ){ - raw_printf(stderr, "Error: cannot read 'testcase-out.txt'\n"); rc = 2; }else if( testcase_glob(azArg[1],zRes)==0 ){ utf8_printf(stderr, @@ -22279,6 +24087,22 @@ static int do_meta_command(char *zLine, ShellState *p){ } }else + if( c=='c' && n==4 && cli_strncmp(azArg[0], "crnl", n)==0 ){ + if( nArg==2 ){ + if( booleanValue(azArg[1]) ){ + setTextMode(p->out, 1); + }else{ + setBinaryMode(p->out, 1); + } + }else{ +#if !defined(_WIN32) && !defined(WIN32) + raw_printf(stderr, "The \".crnl\" is a no-op on non-Windows machines.\n"); +#endif + raw_printf(stderr, "Usage: .crnl on|off\n"); + rc = 1; + } + }else + if( c=='d' && n>1 && cli_strncmp(azArg[0], "databases", n)==0 ){ char **azName = 0; int nName = 0; @@ -22336,6 +24160,8 @@ static int do_meta_command(char *zLine, ShellState *p){ { "load_extension", SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION }, { "no_ckpt_on_close", SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE }, { "reset_database", SQLITE_DBCONFIG_RESET_DATABASE }, + { "reverse_scanorder", SQLITE_DBCONFIG_REVERSE_SCANORDER }, + { "stmt_scanstatus", SQLITE_DBCONFIG_STMT_SCANSTATUS }, { "trigger_eqp", SQLITE_DBCONFIG_TRIGGER_EQP }, { "trusted_schema", SQLITE_DBCONFIG_TRUSTED_SCHEMA }, { "writable_schema", SQLITE_DBCONFIG_WRITABLE_SCHEMA }, @@ -22354,7 +24180,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nArg>1 && ii==ArraySize(aDbConfig) ){ utf8_printf(stderr, "Error: unknown dbconfig \"%s\"\n", azArg[1]); utf8_printf(stderr, "Enter \".dbconfig\" with no arguments for a list\n"); - } + } }else #if SQLITE_SHELL_HAVE_RECOVER @@ -22421,7 +24247,7 @@ static int do_meta_command(char *zLine, ShellState *p){ " substr(o.name, 1, length(name)+1) == (name||'_')" ")", azArg[i], azArg[i] ); - + if( zLike ){ zLike = sqlite3_mprintf("%z OR %z", zLike, zExpr); }else{ @@ -22554,7 +24380,7 @@ static int do_meta_command(char *zLine, ShellState *p){ #ifndef SQLITE_OMIT_VIRTUALTABLE if( c=='e' && cli_strncmp(azArg[0], "expert", n)==0 ){ if( p->bSafeMode ){ - raw_printf(stderr, + raw_printf(stderr, "Cannot run experimental commands such as \"%s\" in safe mode\n", azArg[0]); rc = 1; @@ -22573,7 +24399,7 @@ static int do_meta_command(char *zLine, ShellState *p){ } aCtrl[] = { { "chunk_size", SQLITE_FCNTL_CHUNK_SIZE, "SIZE" }, { "data_version", SQLITE_FCNTL_DATA_VERSION, "" }, - { "has_moved", SQLITE_FCNTL_HAS_MOVED, "" }, + { "has_moved", SQLITE_FCNTL_HAS_MOVED, "" }, { "lock_timeout", SQLITE_FCNTL_LOCK_TIMEOUT, "MILLISEC" }, { "persist_wal", SQLITE_FCNTL_PERSIST_WAL, "[BOOLEAN]" }, /* { "pragma", SQLITE_FCNTL_PRAGMA, "NAME ARG" },*/ @@ -22594,7 +24420,7 @@ static int do_meta_command(char *zLine, ShellState *p){ open_db(p, 0); zCmd = nArg>=2 ? azArg[1] : "help"; - if( zCmd[0]=='-' + if( zCmd[0]=='-' && (cli_strcmp(zCmd,"--schema")==0 || cli_strcmp(zCmd,"-schema")==0) && nArg>=4 ){ @@ -22887,8 +24713,8 @@ static int do_meta_command(char *zLine, ShellState *p){ " for import\n"); goto meta_command_exit; } - sCtx.cColSep = p->colSeparator[0]; - sCtx.cRowSep = p->rowSeparator[0]; + sCtx.cColSep = (u8)p->colSeparator[0]; + sCtx.cRowSep = (u8)p->rowSeparator[0]; } sCtx.zFile = zFile; sCtx.nLine = 1; @@ -23084,6 +24910,12 @@ static int do_meta_command(char *zLine, ShellState *p){ int isWO = 0; /* True if making an imposter of a WITHOUT ROWID table */ int lenPK = 0; /* Length of the PRIMARY KEY string for isWO tables */ int i; + if( !ShellHasFlag(p,SHFLG_TestingMode) ){ + utf8_printf(stderr, ".%s unavailable without --unsafe-testing\n", + "imposter"); + rc = 1; + goto meta_command_exit; + } if( !(nArg==3 || (nArg==2 && sqlite3_stricmp(azArg[1],"off")==0)) ){ utf8_printf(stderr, "Usage: .imposter INDEX IMPOSTER\n" " .imposter off\n"); @@ -23268,7 +25100,8 @@ static int do_meta_command(char *zLine, ShellState *p){ const char *zFile, *zProc; char *zErrMsg = 0; failIfSafeMode(p, "cannot run .load in safe mode"); - if( nArg<2 ){ + if( nArg<2 || azArg[1][0]==0 ){ + /* Must have a non-empty FILE. (Will not load self.) */ raw_printf(stderr, "Usage: .load FILE ?ENTRYPOINT?\n"); rc = 1; goto meta_command_exit; @@ -23285,19 +25118,25 @@ static int do_meta_command(char *zLine, ShellState *p){ }else #endif -#ifndef SQLITE_SHELL_FIDDLE if( c=='l' && cli_strncmp(azArg[0], "log", n)==0 ){ - failIfSafeMode(p, "cannot run .log in safe mode"); if( nArg!=2 ){ raw_printf(stderr, "Usage: .log FILENAME\n"); rc = 1; }else{ const char *zFile = azArg[1]; + if( p->bSafeMode + && cli_strcmp(zFile,"on")!=0 + && cli_strcmp(zFile,"off")!=0 + ){ + raw_printf(stdout, "cannot set .log to anything other " + "than \"on\" or \"off\"\n"); + zFile = "off"; + } output_file_close(p->pLog); + if( cli_strcmp(zFile,"on")==0 ) zFile = "stdout"; p->pLog = output_file_open(zFile, 0); } }else -#endif if( c=='m' && cli_strncmp(azArg[0], "mode", n)==0 ){ const char *zMode = 0; @@ -23822,10 +25661,10 @@ static int do_meta_command(char *zLine, ShellState *p){ if( c=='p' && cli_strncmp(azArg[0], "prompt", n)==0 ){ if( nArg >= 2) { - strncpy(mainPrompt,azArg[1],(int)ArraySize(mainPrompt)-1); + shell_strncpy(mainPrompt,azArg[1],(int)ArraySize(mainPrompt)-1); } if( nArg >= 3) { - strncpy(continuePrompt,azArg[2],(int)ArraySize(continuePrompt)-1); + shell_strncpy(continuePrompt,azArg[2],(int)ArraySize(continuePrompt)-1); } }else @@ -23928,12 +25767,23 @@ static int do_meta_command(char *zLine, ShellState *p){ if( c=='s' && cli_strncmp(azArg[0], "scanstats", n)==0 ){ if( nArg==2 ){ - p->scanstatsOn = (u8)booleanValue(azArg[1]); + if( cli_strcmp(azArg[1], "vm")==0 ){ + p->scanstatsOn = 3; + }else + if( cli_strcmp(azArg[1], "est")==0 ){ + p->scanstatsOn = 2; + }else{ + p->scanstatsOn = (u8)booleanValue(azArg[1]); + } + open_db(p, 0); + sqlite3_db_config( + p->db, SQLITE_DBCONFIG_STMT_SCANSTATUS, p->scanstatsOn, (int*)0 + ); #ifndef SQLITE_ENABLE_STMT_SCANSTATUS raw_printf(stderr, "Warning: .scanstats not available in this build.\n"); #endif }else{ - raw_printf(stderr, "Usage: .scanstats on|off\n"); + raw_printf(stderr, "Usage: .scanstats on|off|est\n"); rc = 1; } }else @@ -23968,7 +25818,8 @@ static int do_meta_command(char *zLine, ShellState *p){ }else if( zName==0 ){ zName = azArg[ii]; }else{ - raw_printf(stderr, "Usage: .schema ?--indent? ?--nosys? ?LIKE-PATTERN?\n"); + raw_printf(stderr, + "Usage: .schema ?--indent? ?--nosys? ?LIKE-PATTERN?\n"); rc = 1; goto meta_command_exit; } @@ -24084,7 +25935,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( (c=='s' && n==11 && cli_strncmp(azArg[0], "selecttrace", n)==0) || (c=='t' && n==9 && cli_strncmp(azArg[0], "treetrace", n)==0) ){ - unsigned int x = nArg>=2 ? (unsigned int)integerValue(azArg[1]) : 0xffffffff; + unsigned int x = nArg>=2? (unsigned int)integerValue(azArg[1]) : 0xffffffff; sqlite3_test_control(SQLITE_TESTCTRL_TRACEFLAGS, 1, &x); }else @@ -24269,7 +26120,8 @@ static int do_meta_command(char *zLine, ShellState *p){ } } if( pAuxDb->nSession>=ArraySize(pAuxDb->aSession) ){ - raw_printf(stderr, "Maximum of %d sessions\n", ArraySize(pAuxDb->aSession)); + raw_printf(stderr, + "Maximum of %d sessions\n", ArraySize(pAuxDb->aSession)); goto meta_command_exit; } pSession = &pAuxDb->aSession[pAuxDb->nSession]; @@ -24483,12 +26335,12 @@ static int do_meta_command(char *zLine, ShellState *p){ } } if( bSchema ){ - zSql = "SELECT lower(name) FROM sqlite_schema" + zSql = "SELECT lower(name) as tname FROM sqlite_schema" " WHERE type='table' AND coalesce(rootpage,0)>1" " UNION ALL SELECT 'sqlite_schema'" " ORDER BY 1 collate nocase"; }else{ - zSql = "SELECT lower(name) FROM sqlite_schema" + zSql = "SELECT lower(name) as tname FROM sqlite_schema" " WHERE type='table' AND coalesce(rootpage,0)>1" " AND name NOT LIKE 'sqlite_%'" " ORDER BY 1 collate nocase"; @@ -24549,6 +26401,67 @@ static int do_meta_command(char *zLine, ShellState *p){ }else{ shell_exec(p, zSql, 0); } +#if !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) && !defined(SQLITE_OMIT_VIRTUALTABLE) + { + int lrc; + char *zRevText = /* Query for reversible to-blob-to-text check */ + "SELECT lower(name) as tname FROM sqlite_schema\n" + "WHERE type='table' AND coalesce(rootpage,0)>1\n" + "AND name NOT LIKE 'sqlite_%%'%s\n" + "ORDER BY 1 collate nocase"; + zRevText = sqlite3_mprintf(zRevText, zLike? " AND name LIKE $tspec" : ""); + zRevText = sqlite3_mprintf( + /* lower-case query is first run, producing upper-case query. */ + "with tabcols as materialized(\n" + "select tname, cname\n" + "from (" + " select printf('\"%%w\"',ss.tname) as tname," + " printf('\"%%w\"',ti.name) as cname\n" + " from (%z) ss\n inner join pragma_table_info(tname) ti))\n" + "select 'SELECT total(bad_text_count) AS bad_text_count\n" + "FROM ('||group_concat(query, ' UNION ALL ')||')' as btc_query\n" + " from (select 'SELECT COUNT(*) AS bad_text_count\n" + "FROM '||tname||' WHERE '\n" + "||group_concat('CAST(CAST('||cname||' AS BLOB) AS TEXT)<>'||cname\n" + "|| ' AND typeof('||cname||')=''text'' ',\n" + "' OR ') as query, tname from tabcols group by tname)" + , zRevText); + shell_check_oom(zRevText); + if( bDebug ) utf8_printf(p->out, "%s\n", zRevText); + lrc = sqlite3_prepare_v2(p->db, zRevText, -1, &pStmt, 0); + if( lrc!=SQLITE_OK ){ + /* assert(lrc==SQLITE_NOMEM); // might also be SQLITE_ERROR if the + ** user does cruel and unnatural things like ".limit expr_depth 0". */ + rc = 1; + }else{ + if( zLike ) sqlite3_bind_text(pStmt,1,zLike,-1,SQLITE_STATIC); + lrc = SQLITE_ROW==sqlite3_step(pStmt); + if( lrc ){ + const char *zGenQuery = (char*)sqlite3_column_text(pStmt,0); + sqlite3_stmt *pCheckStmt; + lrc = sqlite3_prepare_v2(p->db, zGenQuery, -1, &pCheckStmt, 0); + if( bDebug ) utf8_printf(p->out, "%s\n", zGenQuery); + if( lrc!=SQLITE_OK ){ + rc = 1; + }else{ + if( SQLITE_ROW==sqlite3_step(pCheckStmt) ){ + double countIrreversible = sqlite3_column_double(pCheckStmt, 0); + if( countIrreversible>0 ){ + int sz = (int)(countIrreversible + 0.5); + utf8_printf(stderr, + "Digest includes %d invalidly encoded text field%s.\n", + sz, (sz>1)? "s": ""); + } + } + sqlite3_finalize(pCheckStmt); + } + sqlite3_finalize(pStmt); + } + } + if( rc ) utf8_printf(stderr, ".sha3sum failed.\n"); + sqlite3_free(zRevText); + } +#endif /* !defined(*_OMIT_SCHEMA_PRAGMAS) && !defined(*_OMIT_VIRTUALTABLE) */ sqlite3_free(zSql); }else @@ -24775,31 +26688,32 @@ static int do_meta_command(char *zLine, ShellState *p){ static const struct { const char *zCtrlName; /* Name of a test-control option */ int ctrlCode; /* Integer code for that option */ - int unSafe; /* Not valid for --safe mode */ + int unSafe; /* Not valid unless --unsafe-testing */ const char *zUsage; /* Usage notes */ } aCtrl[] = { - { "always", SQLITE_TESTCTRL_ALWAYS, 1, "BOOLEAN" }, - { "assert", SQLITE_TESTCTRL_ASSERT, 1, "BOOLEAN" }, - /*{ "benign_malloc_hooks",SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS,1, "" },*/ - /*{ "bitvec_test", SQLITE_TESTCTRL_BITVEC_TEST, 1, "" },*/ - { "byteorder", SQLITE_TESTCTRL_BYTEORDER, 0, "" }, - { "extra_schema_checks",SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS,0,"BOOLEAN" }, - /*{ "fault_install", SQLITE_TESTCTRL_FAULT_INSTALL, 1,"" },*/ - { "imposter", SQLITE_TESTCTRL_IMPOSTER,1,"SCHEMA ON/OFF ROOTPAGE"}, - { "internal_functions", SQLITE_TESTCTRL_INTERNAL_FUNCTIONS,0,"" }, - { "localtime_fault", SQLITE_TESTCTRL_LOCALTIME_FAULT,0,"BOOLEAN" }, - { "never_corrupt", SQLITE_TESTCTRL_NEVER_CORRUPT,1, "BOOLEAN" }, - { "optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS,0,"DISABLE-MASK" }, + {"always", SQLITE_TESTCTRL_ALWAYS, 1, "BOOLEAN" }, + {"assert", SQLITE_TESTCTRL_ASSERT, 1, "BOOLEAN" }, + /*{"benign_malloc_hooks",SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS,1, "" },*/ + /*{"bitvec_test", SQLITE_TESTCTRL_BITVEC_TEST, 1, "" },*/ + {"byteorder", SQLITE_TESTCTRL_BYTEORDER, 0, "" }, + {"extra_schema_checks",SQLITE_TESTCTRL_EXTRA_SCHEMA_CHECKS,0,"BOOLEAN" }, + /*{"fault_install", SQLITE_TESTCTRL_FAULT_INSTALL, 1,"" },*/ + {"imposter", SQLITE_TESTCTRL_IMPOSTER,1,"SCHEMA ON/OFF ROOTPAGE"}, + {"internal_functions", SQLITE_TESTCTRL_INTERNAL_FUNCTIONS,0,"" }, + {"localtime_fault", SQLITE_TESTCTRL_LOCALTIME_FAULT,0,"BOOLEAN" }, + {"never_corrupt", SQLITE_TESTCTRL_NEVER_CORRUPT,1, "BOOLEAN" }, + {"optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS,0,"DISABLE-MASK" }, #ifdef YYCOVERAGE - { "parser_coverage", SQLITE_TESTCTRL_PARSER_COVERAGE,0,"" }, -#endif - { "pending_byte", SQLITE_TESTCTRL_PENDING_BYTE,0, "OFFSET " }, - { "prng_restore", SQLITE_TESTCTRL_PRNG_RESTORE,0, "" }, - { "prng_save", SQLITE_TESTCTRL_PRNG_SAVE, 0, "" }, - { "prng_seed", SQLITE_TESTCTRL_PRNG_SEED, 0, "SEED ?db?" }, - { "seek_count", SQLITE_TESTCTRL_SEEK_COUNT, 0, "" }, - { "sorter_mmap", SQLITE_TESTCTRL_SORTER_MMAP, 0, "NMAX" }, - { "tune", SQLITE_TESTCTRL_TUNE, 1, "ID VALUE" }, + {"parser_coverage", SQLITE_TESTCTRL_PARSER_COVERAGE,0,"" }, +#endif + {"pending_byte", SQLITE_TESTCTRL_PENDING_BYTE,0, "OFFSET " }, + {"prng_restore", SQLITE_TESTCTRL_PRNG_RESTORE,0, "" }, + {"prng_save", SQLITE_TESTCTRL_PRNG_SAVE, 0, "" }, + {"prng_seed", SQLITE_TESTCTRL_PRNG_SEED, 0, "SEED ?db?" }, + {"seek_count", SQLITE_TESTCTRL_SEEK_COUNT, 0, "" }, + {"sorter_mmap", SQLITE_TESTCTRL_SORTER_MMAP, 0, "NMAX" }, + {"tune", SQLITE_TESTCTRL_TUNE, 1, "ID VALUE" }, + {"uselongdouble", SQLITE_TESTCTRL_USELONGDOUBLE,0,"?BOOLEAN|\"default\"?"}, }; int testctrl = -1; int iCtrl = -1; @@ -24821,6 +26735,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( cli_strcmp(zCmd,"help")==0 ){ utf8_printf(p->out, "Available test-controls:\n"); for(i=0; iout, " .testctrl %s %s\n", aCtrl[i].zCtrlName, aCtrl[i].zUsage); } @@ -24832,6 +26747,7 @@ static int do_meta_command(char *zLine, ShellState *p){ ** of the option name, or a numerical value. */ n2 = strlen30(zCmd); for(i=0; ibSafeMode ){ - utf8_printf(stderr, - "line %d: \".testctrl %s\" may not be used in safe mode\n", - p->lineno, aCtrl[iCtrl].zCtrlName); - exit(1); }else{ switch(testctrl){ @@ -24924,6 +26835,21 @@ static int do_meta_command(char *zLine, ShellState *p){ } break; + /* sqlite3_test_control(int, int) */ + case SQLITE_TESTCTRL_USELONGDOUBLE: { + int opt = -1; + if( nArg==3 ){ + if( cli_strcmp(azArg[2],"default")==0 ){ + opt = 2; + }else{ + opt = booleanValue(azArg[2]); + } + } + rc2 = sqlite3_test_control(testctrl, opt); + isOk = 1; + break; + } + /* sqlite3_test_control(sqlite3*) */ case SQLITE_TESTCTRL_INTERNAL_FUNCTIONS: rc2 = sqlite3_test_control(testctrl, p->db); @@ -25060,7 +26986,7 @@ static int do_meta_command(char *zLine, ShellState *p){ } }else{ output_file_close(p->traceOut); - p->traceOut = output_file_open(azArg[1], 0); + p->traceOut = output_file_open(z, 0); } } if( p->traceOut==0 ){ @@ -25161,6 +27087,7 @@ static int do_meta_command(char *zLine, ShellState *p){ #endif /* SQLITE_USER_AUTHENTICATION */ if( c=='v' && cli_strncmp(azArg[0], "version", n)==0 ){ + char *zPtrSz = sizeof(void*)==8 ? "64-bit" : "32-bit"; utf8_printf(p->out, "SQLite %s %s\n" /*extra-version-info*/, sqlite3_libversion(), sqlite3_sourceid()); #if SQLITE_HAVE_ZLIB @@ -25171,11 +27098,11 @@ static int do_meta_command(char *zLine, ShellState *p){ #if defined(__clang__) && defined(__clang_major__) utf8_printf(p->out, "clang-" CTIMEOPT_VAL(__clang_major__) "." CTIMEOPT_VAL(__clang_minor__) "." - CTIMEOPT_VAL(__clang_patchlevel__) "\n"); + CTIMEOPT_VAL(__clang_patchlevel__) " (%s)\n", zPtrSz); #elif defined(_MSC_VER) - utf8_printf(p->out, "msvc-" CTIMEOPT_VAL(_MSC_VER) "\n"); + utf8_printf(p->out, "msvc-" CTIMEOPT_VAL(_MSC_VER) " (%s)\n", zPtrSz); #elif defined(__GNUC__) && defined(__VERSION__) - utf8_printf(p->out, "gcc-" __VERSION__ "\n"); + utf8_printf(p->out, "gcc-" __VERSION__ " (%s)\n", zPtrSz); #endif }else @@ -25224,7 +27151,7 @@ static int do_meta_command(char *zLine, ShellState *p){ }else if( c=='w' && cli_strncmp(azArg[0], "wheretrace", n)==0 ){ - unsigned int x = nArg>=2 ? (unsigned int)integerValue(azArg[1]) : 0xffffffff; + unsigned int x = nArg>=2? (unsigned int)integerValue(azArg[1]) : 0xffffffff; sqlite3_test_control(SQLITE_TESTCTRL_TRACEFLAGS, 3, &x); }else @@ -25276,7 +27203,8 @@ typedef enum { ** The scan is resumable for subsequent lines when prior ** return values are passed as the 2nd argument. */ -static QuickScanState quickscan(char *zLine, QuickScanState qss){ +static QuickScanState quickscan(char *zLine, QuickScanState qss, + SCAN_TRACKER_REFTYPE pst){ char cin; char cWait = (char)qss; /* intentional narrowing loss */ if( cWait==0 ){ @@ -25300,17 +27228,25 @@ static QuickScanState quickscan(char *zLine, QuickScanState qss){ if( *zLine=='*' ){ ++zLine; cWait = '*'; + CONTINUE_PROMPT_AWAITS(pst, "/*"); qss = QSS_SETV(qss, cWait); goto TermScan; } break; case '[': cin = ']'; - /* fall thru */ + deliberate_fall_through; case '`': case '\'': case '"': cWait = cin; qss = QSS_HasDark | cWait; + CONTINUE_PROMPT_AWAITC(pst, cin); goto TermScan; + case '(': + CONTINUE_PAREN_INCR(pst, 1); + break; + case ')': + CONTINUE_PAREN_INCR(pst, -1); + break; default: break; } @@ -25326,16 +27262,19 @@ static QuickScanState quickscan(char *zLine, QuickScanState qss){ continue; ++zLine; cWait = 0; + CONTINUE_PROMPT_AWAITC(pst, 0); qss = QSS_SETV(qss, 0); goto PlainScan; case '`': case '\'': case '"': if(*zLine==cWait){ + /* Swallow doubled end-delimiter.*/ ++zLine; continue; } - /* fall thru */ + deliberate_fall_through; case ']': cWait = 0; + CONTINUE_PROMPT_AWAITC(pst, 0); qss = QSS_SETV(qss, 0); goto PlainScan; default: assert(0); @@ -25359,17 +27298,15 @@ static int line_is_command_terminator(char *zLine){ zLine += 2; /* SQL Server */ else return 0; - return quickscan(zLine, QSS_Start)==QSS_Start; + return quickscan(zLine, QSS_Start, 0)==QSS_Start; } /* -** We need a default sqlite3_complete() implementation to use in case -** the shell is compiled with SQLITE_OMIT_COMPLETE. The default assumes -** any arbitrary text is a complete SQL statement. This is not very -** user-friendly, but it does seem to work. +** The CLI needs a working sqlite3_complete() to work properly. So error +** out of the build if compiling with SQLITE_OMIT_COMPLETE. */ #ifdef SQLITE_OMIT_COMPLETE -#define sqlite3_complete(x) 1 +# error the CLI application is imcompatable with SQLITE_OMIT_COMPLETE. #endif /* @@ -25442,9 +27379,9 @@ static void echo_group_input(ShellState *p, const char *zDo){ #ifdef SQLITE_SHELL_FIDDLE /* -** Alternate one_input_line() impl for wasm mode. This is not in the primary impl -** because we need the global shellState and cannot access it from that function -** without moving lots of code around (creating a larger/messier diff). +** Alternate one_input_line() impl for wasm mode. This is not in the primary +** impl because we need the global shellState and cannot access it from that +** function without moving lots of code around (creating a larger/messier diff). */ static char *one_input_line(FILE *in, char *zPrior, int isContinuation){ /* Parse the next line from shellState.wasm.zInput. */ @@ -25501,6 +27438,7 @@ static int process_input(ShellState *p){ } ++p->inputNesting; p->lineno = 0; + CONTINUE_PROMPT_RESET; while( errCnt==0 || !bail_on_error || (p->in==0 && stdin_is_interactive) ){ fflush(p->out); zLine = one_input_line(p->in, zLine, nSql>0); @@ -25519,7 +27457,7 @@ static int process_input(ShellState *p){ && line_is_complete(zSql, nSql) ){ memcpy(zLine,";",2); } - qss = quickscan(zLine, qss); + qss = quickscan(zLine, qss, CONTINUE_PROMPT_PSTATE); if( QSS_PLAINWHITE(qss) && nSql==0 ){ /* Just swallow single-line whitespace */ echo_group_input(p, zLine); @@ -25527,6 +27465,7 @@ static int process_input(ShellState *p){ continue; } if( zLine && (zLine[0]=='.' || zLine[0]=='#') && nSql==0 ){ + CONTINUE_PROMPT_RESET; echo_group_input(p, zLine); if( zLine[0]=='.' ){ rc = do_meta_command(zLine, p); @@ -25562,6 +27501,7 @@ static int process_input(ShellState *p){ if( nSql && QSS_SEMITERM(qss) && sqlite3_complete(zSql) ){ echo_group_input(p, zSql); errCnt += runOneSqlLine(p, zSql, p->in, startline); + CONTINUE_PROMPT_RESET; nSql = 0; if( p->outCount ){ output_reset(p); @@ -25581,6 +27521,7 @@ static int process_input(ShellState *p){ /* This may be incomplete. Let the SQL parser deal with that. */ echo_group_input(p, zSql); errCnt += runOneSqlLine(p, zSql, p->in, startline); + CONTINUE_PROMPT_RESET; } free(zSql); free(zLine); @@ -25602,7 +27543,7 @@ static char *find_home_dir(int clearFlag){ if( home_dir ) return home_dir; #if !defined(_WIN32) && !defined(WIN32) && !defined(_WIN32_WCE) \ - && !defined(__RTP__) && !defined(_WRS_KERNEL) + && !defined(__RTP__) && !defined(_WRS_KERNEL) && !defined(SQLITE_WASI) { struct passwd *pwent; uid_t uid = getuid(); @@ -25657,9 +27598,43 @@ static char *find_home_dir(int clearFlag){ return home_dir; } +/* +** On non-Windows platforms, look for $XDG_CONFIG_HOME. +** If ${XDG_CONFIG_HOME}/sqlite3/sqliterc is found, return +** the path to it, else return 0. The result is cached for +** subsequent calls. +*/ +static const char *find_xdg_config(void){ +#if defined(_WIN32) || defined(WIN32) || defined(_WIN32_WCE) \ + || defined(__RTP__) || defined(_WRS_KERNEL) + return 0; +#else + static int alreadyTried = 0; + static char *zConfig = 0; + const char *zXdgHome; + + if( alreadyTried!=0 ){ + return zConfig; + } + alreadyTried = 1; + zXdgHome = getenv("XDG_CONFIG_HOME"); + if( zXdgHome==0 ){ + return 0; + } + zConfig = sqlite3_mprintf("%s/sqlite3/sqliterc", zXdgHome); + shell_check_oom(zConfig); + if( access(zConfig,0)!=0 ){ + sqlite3_free(zConfig); + zConfig = 0; + } + return zConfig; +#endif +} + /* ** Read input from the file given by sqliterc_override. Or if that -** parameter is NULL, take input from ~/.sqliterc +** parameter is NULL, take input from the first of find_xdg_config() +** or ~/.sqliterc which is found. ** ** Returns the number of errors. */ @@ -25673,7 +27648,10 @@ static void process_sqliterc( FILE *inSaved = p->in; int savedLineno = p->lineno; - if (sqliterc == NULL) { + if( sqliterc == NULL ){ + sqliterc = find_xdg_config(); + } + if( sqliterc == NULL ){ home_dir = find_home_dir(0); if( home_dir==0 ){ raw_printf(stderr, "-- warning: cannot find home directory;" @@ -25704,6 +27682,7 @@ static void process_sqliterc( ** Show available command line options */ static const char zOptions[] = + " -- treat no subsequent arguments as options\n" #if defined(SQLITE_HAVE_ZLIB) && !defined(SQLITE_OMIT_VIRTUALTABLE) " -A ARGS... run \".archive ARGS\" and exit\n" #endif @@ -25745,6 +27724,7 @@ static const char zOptions[] = " -nonce STRING set the safe-mode escape nonce\n" " -nullvalue TEXT set text string for NULL values. Default ''\n" " -pagecache SIZE N use N slots of SZ bytes each for page cache memory\n" + " -pcachetrace trace all page cache operations\n" " -quote set output mode to 'quote'\n" " -readonly open the database read-only\n" " -safe enable safe-mode\n" @@ -25755,6 +27735,10 @@ static const char zOptions[] = " -stats print memory stats before each finalize\n" " -table set output mode to 'table'\n" " -tabs set output mode to 'tabs'\n" + " -unsafe-testing allow unsafe commands and modes for testing\n" +#if SHELL_WIN_UTF8_OPT + " -utf8 setup interactive console code page for UTF-8\n" +#endif " -version show SQLite version\n" " -vfs NAME use NAME as the default VFS\n" #ifdef SQLITE_ENABLE_VFSTRACE @@ -25766,9 +27750,9 @@ static const char zOptions[] = ; static void usage(int showDetail){ utf8_printf(stderr, - "Usage: %s [OPTIONS] FILENAME [SQL]\n" + "Usage: %s [OPTIONS] [FILENAME [SQL]]\n" "FILENAME is the name of an SQLite database. A new database is created\n" - "if the file does not previously exist.\n", Argv0); + "if the file does not previously exist. Defaults to :memory:.\n", Argv0); if( showDetail ){ utf8_printf(stderr, "OPTIONS include:\n%s", zOptions); }else{ @@ -25800,9 +27784,11 @@ static void main_init(ShellState *data) { memcpy(data->rowSeparator,SEP_Row, 2); data->showHeader = 0; data->shellFlgs = SHFLG_Lookaside; + sqlite3_config(SQLITE_CONFIG_LOG, shellLog, data); +#if !defined(SQLITE_SHELL_FIDDLE) verify_uninitialized(); +#endif sqlite3_config(SQLITE_CONFIG_URI, 1); - sqlite3_config(SQLITE_CONFIG_LOG, shellLog, data); sqlite3_config(SQLITE_CONFIG_MULTITHREAD); sqlite3_snprintf(sizeof(mainPrompt), mainPrompt,"sqlite> "); sqlite3_snprintf(sizeof(continuePrompt), continuePrompt," ...> "); @@ -25845,6 +27831,10 @@ static char *cmdline_option_value(int argc, char **argv, int i){ return argv[i]; } +static void sayAbnormalExit(void){ + if( seenInterrupt ) fprintf(stderr, "Program interrupted.\n"); +} + #ifndef SQLITE_SHELL_IS_UTF8 # if (defined(_WIN32) || defined(WIN32)) \ && (defined(_MSC_VER) || (defined(UNICODE) && defined(__GNUC__))) @@ -25865,7 +27855,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ char **argv; #endif #ifdef SQLITE_DEBUG - sqlite3_int64 mem_main_enter = sqlite3_memory_used(); + sqlite3_int64 mem_main_enter = 0; #endif char *zErrMsg = 0; #ifdef SQLITE_SHELL_FIDDLE @@ -25879,15 +27869,15 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ int warnInmemoryDb = 0; int readStdin = 1; int nCmd = 0; + int nOptsEnd = argc; char **azCmd = 0; const char *zVfs = 0; /* Value of -vfs command-line option */ #if !SQLITE_SHELL_IS_UTF8 char **argvToFree = 0; int argcToFree = 0; #endif - - setBinaryMode(stdin, 0); setvbuf(stderr, 0, _IONBF, 0); /* Make sure stderr is unbuffered */ + #ifdef SQLITE_SHELL_FIDDLE stdin_is_interactive = 0; stdout_is_console = 1; @@ -25896,7 +27886,13 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ stdin_is_interactive = isatty(0); stdout_is_console = isatty(1); #endif - +#if SHELL_WIN_UTF8_OPT + atexit(console_restore); /* Needs revision for CLI as library call */ +#endif + atexit(sayAbnormalExit); +#ifdef SQLITE_DEBUG + mem_main_enter = sqlite3_memory_used(); +#endif #if !defined(_WIN32_WCE) if( getenv("SQLITE_DEBUG_BREAK") ){ if( isatty(0) && isatty(2) ){ @@ -25917,6 +27913,14 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ } } #endif + /* Register a valid signal handler early, before much else is done. */ +#ifdef SIGINT + signal(SIGINT, interrupt_handler); +#elif (defined(_WIN32) || defined(WIN32)) && !defined(_WIN32_WCE) + if( !SetConsoleCtrlHandler(ConsoleCtrlHandler, TRUE) ){ + fprintf(stderr, "No ^C handler.\n"); + } +#endif #if USE_SYSTEM_SQLITE+0!=1 if( cli_strncmp(sqlite3_sourceid(),SQLITE_SOURCE_ID,60)!=0 ){ @@ -25956,15 +27960,6 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ assert( argc>=1 && argv && argv[0] ); Argv0 = argv[0]; - /* Make sure we have a valid signal handler early, before anything - ** else is done. - */ -#ifdef SIGINT - signal(SIGINT, interrupt_handler); -#elif (defined(_WIN32) || defined(WIN32)) && !defined(_WIN32_WCE) - SetConsoleCtrlHandler(ConsoleCtrlHandler, TRUE); -#endif - #ifdef SQLITE_SHELL_DBNAME_PROC { /* If the SQLITE_SHELL_DBNAME_PROC macro is defined, then it is the name @@ -25982,15 +27977,17 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ ** the size of the alternative malloc heap, ** and the first command to execute. */ +#ifndef SQLITE_SHELL_FIDDLE verify_uninitialized(); +#endif for(i=1; inOptsEnd ){ if( data.aAuxDb->zDbFilename==0 ){ data.aAuxDb->zDbFilename = z; }else{ - /* Excesss arguments are interpreted as SQL (or dot-commands) and + /* Excess arguments are interpreted as SQL (or dot-commands) and ** mean that nothing is read from stdin */ readStdin = 0; nCmd++; @@ -25998,9 +27995,13 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ shell_check_oom(azCmd); azCmd[nCmd-1] = z; } + continue; } if( z[1]=='-' ) z++; - if( cli_strcmp(z,"-separator")==0 + if( cli_strcmp(z, "-")==0 ){ + nOptsEnd = i; + continue; + }else if( cli_strcmp(z,"-separator")==0 || cli_strcmp(z,"-nullvalue")==0 || cli_strcmp(z,"-newline")==0 || cli_strcmp(z,"-cmd")==0 @@ -26022,6 +28023,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ zSize = cmdline_option_value(argc, argv, ++i); szHeap = integerValue(zSize); if( szHeap>0x7fff0000 ) szHeap = 0x7fff0000; + verify_uninitialized(); sqlite3_config(SQLITE_CONFIG_HEAP, malloc((int)szHeap), (int)szHeap, 64); #else (void)cmdline_option_value(argc, argv, ++i); @@ -26035,6 +28037,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ if( sz>0 && n>0 && 0xffffffffffffLL/sz0 && sz>0) ? malloc(n*sz) : 0, sz, n); data.shellFlgs |= SHFLG_Pagecache; @@ -26044,11 +28047,13 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ if( sz<0 ) sz = 0; n = (int)integerValue(cmdline_option_value(argc,argv,++i)); if( n<0 ) n = 0; + verify_uninitialized(); sqlite3_config(SQLITE_CONFIG_LOOKASIDE, sz, n); if( sz*n==0 ) data.shellFlgs &= ~SHFLG_Lookaside; }else if( cli_strcmp(z,"-threadsafe")==0 ){ int n; n = (int)integerValue(cmdline_option_value(argc,argv,++i)); + verify_uninitialized(); switch( n ){ case 0: sqlite3_config(SQLITE_CONFIG_SINGLETHREAD); break; case 2: sqlite3_config(SQLITE_CONFIG_MULTITHREAD); break; @@ -26067,15 +28072,17 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ #endif #ifdef SQLITE_ENABLE_MULTIPLEX }else if( cli_strcmp(z,"-multiplex")==0 ){ - extern int sqlite3_multiple_initialize(const char*,int); + extern int sqlite3_multiplex_initialize(const char*,int); sqlite3_multiplex_initialize(0, 1); #endif }else if( cli_strcmp(z,"-mmap")==0 ){ sqlite3_int64 sz = integerValue(cmdline_option_value(argc,argv,++i)); + verify_uninitialized(); sqlite3_config(SQLITE_CONFIG_MMAP_SIZE, sz, sz); -#ifdef SQLITE_ENABLE_SORTER_REFERENCES +#if defined(SQLITE_ENABLE_SORTER_REFERENCES) }else if( cli_strcmp(z,"-sorterref")==0 ){ sqlite3_int64 sz = integerValue(cmdline_option_value(argc,argv,++i)); + verify_uninitialized(); sqlite3_config(SQLITE_CONFIG_SORTERREF_SIZE, (int)sz); #endif }else if( cli_strcmp(z,"-vfs")==0 ){ @@ -26104,16 +28111,22 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ #endif }else if( cli_strcmp(z, "-memtrace")==0 ){ sqlite3MemTraceActivate(stderr); + }else if( cli_strcmp(z, "-pcachetrace")==0 ){ + sqlite3PcacheTraceActivate(stderr); }else if( cli_strcmp(z,"-bail")==0 ){ bail_on_error = 1; }else if( cli_strcmp(z,"-nonce")==0 ){ free(data.zNonce); - data.zNonce = strdup(argv[++i]); + data.zNonce = strdup(cmdline_option_value(argc, argv, ++i)); + }else if( cli_strcmp(z,"-unsafe-testing")==0 ){ + ShellSetFlag(&data,SHFLG_TestingMode); }else if( cli_strcmp(z,"-safe")==0 ){ /* no-op - catch this on the second pass */ } } +#ifndef SQLITE_SHELL_FIDDLE verify_uninitialized(); +#endif #ifdef SQLITE_SHELL_INIT_PROC @@ -26177,7 +28190,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ */ for(i=1; i=nOptsEnd ) continue; if( z[1]=='-' ){ z++; } if( cli_strcmp(z,"-init")==0 ){ i++; @@ -26222,12 +28235,12 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ data.openFlags |= SQLITE_OPEN_NOFOLLOW; }else if( cli_strcmp(z,"-ascii")==0 ){ data.mode = MODE_Ascii; - sqlite3_snprintf(sizeof(data.colSeparator), data.colSeparator, SEP_Unit); - sqlite3_snprintf(sizeof(data.rowSeparator), data.rowSeparator, SEP_Record); + sqlite3_snprintf(sizeof(data.colSeparator), data.colSeparator,SEP_Unit); + sqlite3_snprintf(sizeof(data.rowSeparator), data.rowSeparator,SEP_Record); }else if( cli_strcmp(z,"-tabs")==0 ){ data.mode = MODE_List; - sqlite3_snprintf(sizeof(data.colSeparator), data.colSeparator, SEP_Tab); - sqlite3_snprintf(sizeof(data.rowSeparator), data.rowSeparator, SEP_Row); + sqlite3_snprintf(sizeof(data.colSeparator), data.colSeparator,SEP_Tab); + sqlite3_snprintf(sizeof(data.rowSeparator), data.rowSeparator,SEP_Row); }else if( cli_strcmp(z,"-separator")==0 ){ sqlite3_snprintf(sizeof(data.colSeparator), data.colSeparator, "%s",cmdline_option_value(argc,argv,++i)); @@ -26263,12 +28276,17 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ }else if( cli_strcmp(z,"-bail")==0 ){ /* No-op. The bail_on_error flag should already be set. */ }else if( cli_strcmp(z,"-version")==0 ){ - printf("%s %s\n", sqlite3_libversion(), sqlite3_sourceid()); + printf("%s %s (%d-bit)\n", sqlite3_libversion(), sqlite3_sourceid(), + 8*(int)sizeof(char*)); return 0; }else if( cli_strcmp(z,"-interactive")==0 ){ stdin_is_interactive = 1; }else if( cli_strcmp(z,"-batch")==0 ){ stdin_is_interactive = 0; + }else if( cli_strcmp(z,"-utf8")==0 ){ +#if SHELL_WIN_UTF8_OPT + console_utf8 = 1; +#endif /* SHELL_WIN_UTF8_OPT */ }else if( cli_strcmp(z,"-heap")==0 ){ i++; }else if( cli_strcmp(z,"-pagecache")==0 ){ @@ -26283,6 +28301,8 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ i++; }else if( cli_strcmp(z,"-memtrace")==0 ){ i++; + }else if( cli_strcmp(z,"-pcachetrace")==0 ){ + i++; #ifdef SQLITE_ENABLE_SORTER_REFERENCES }else if( cli_strcmp(z,"-sorterref")==0 ){ i++; @@ -26339,6 +28359,8 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ #endif }else if( cli_strcmp(z,"-safe")==0 ){ data.bSafeMode = data.bSafeModePersist = 1; + }else if( cli_strcmp(z,"-unsafe-testing")==0 ){ + /* Acted upon in first pass. */ }else{ utf8_printf(stderr,"%s: Error: unknown option: %s\n", Argv0, z); raw_printf(stderr,"Use -help for a list of options.\n"); @@ -26346,6 +28368,14 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ } data.cMode = data.mode; } +#if SHELL_WIN_UTF8_OPT + if( console_utf8 && stdin_is_interactive ){ + console_prepare(); + }else{ + setBinaryMode(stdin, 0); + console_utf8 = 0; + } +#endif if( !readStdin ){ /* Run all arguments that do not begin with '-' as if they were separate @@ -26361,6 +28391,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ } }else{ open_db(&data, 0); + echo_group_input(&data, azCmd[i]); rc = shell_exec(&data, azCmd[i], &zErrMsg); if( zErrMsg || rc ){ if( zErrMsg!=0 ){ diff --git a/src/sqlite/SQLite-3.43.1/sqlite3.1 b/src/sqlite/SQLite-3.43.1/sqlite3.1 new file mode 100644 index 000000000..08b1ff262 --- /dev/null +++ b/src/sqlite/SQLite-3.43.1/sqlite3.1 @@ -0,0 +1,161 @@ +.\" Hey, EMACS: -*- nroff -*- +.\" First parameter, NAME, should be all caps +.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection +.\" other parameters are allowed: see man(7), man(1) +.TH SQLITE3 1 "Fri Aug 11 23:50:12 CET 2023" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +.B sqlite3 +\- A command line interface for SQLite version 3 + +.SH SYNOPSIS +.B sqlite3 +.RI [ options ] +.RI [ databasefile ] +.RI [ SQL ] + +.SH SUMMARY +.PP +.B sqlite3 +is a terminal-based front-end to the SQLite library that can evaluate +queries interactively and display the results in multiple formats. +.B sqlite3 +can also be used within shell scripts and other applications to provide +batch processing features. + +.SH DESCRIPTION +To start a +.B sqlite3 +interactive session, invoke the +.B sqlite3 +command and optionally provide the name of a database file. If the +database file does not exist, it will be created. If the database file +does exist, it will be opened. + +For example, to create a new database file named "mydata.db", create +a table named "memos" and insert a couple of records into that table: +.sp +$ +.B sqlite3 mydata.db +.br +SQLite version 3.43.0 2023-08-11 17:45:23 +.br +Enter ".help" for usage hints. +.br +sqlite> +.B create table memos(text, priority INTEGER); +.br +sqlite> +.B insert into memos values('deliver project description', 10); +.br +sqlite> +.B insert into memos values('lunch with Christine', 100); +.br +sqlite> +.B select * from memos; +.br +deliver project description|10 +.br +lunch with Christine|100 +.br +sqlite> +.sp + +If no database name is supplied, the ATTACH sql command can be used +to attach to existing or create new database files. ATTACH can also +be used to attach to multiple databases within the same interactive +session. This is useful for migrating data between databases, +possibly changing the schema along the way. + +Optionally, a SQL statement or set of SQL statements can be supplied as +a single argument. Multiple statements should be separated by +semi-colons. + +For example: +.sp +$ +.B sqlite3 -line mydata.db 'select * from memos where priority > 20;' +.br + text = lunch with Christine +.br +priority = 100 +.br +.sp + +.SS SQLITE META-COMMANDS +.PP +The interactive interpreter offers a set of meta-commands that can be +used to control the output format, examine the currently attached +database files, or perform administrative operations upon the +attached databases (such as rebuilding indices). Meta-commands are +always prefixed with a dot (.). + +A list of available meta-commands can be viewed at any time by issuing +the '.help' command. For example: +.sp +sqlite> +.B .help +.nf +.tr %. +... +.sp +.fi + +The available commands differ by version and build options, so they +are not listed here. Please refer to your local copy for all available +options. + + +.SH INIT FILE +.B sqlite3 +reads an initialization file to set the configuration of the +interactive environment. Throughout initialization, any previously +specified setting can be overridden. The sequence of initialization is +as follows: + +o The default configuration is established as follows: + +.sp +.nf +.cc | +mode = LIST +separator = "|" +main prompt = "sqlite> " +continue prompt = " ...> " +|cc . +.sp +.fi + +o If the file +.B ${XDG_CONFIG_HOME}/sqlite3/sqliterc +or +.B ~/.sqliterc +exists, the first of those to be found is processed during startup. +It should generally only contain meta-commands. + +o If the -init option is present, the specified file is processed. + +o All other command line options are processed. + +.SH SEE ALSO +https://sqlite.org/cli.html +.br +https://sqlite.org/fiddle (a WebAssembly build of the CLI app) +.br +The sqlite3-doc package. +.SH AUTHOR +This manual page was originally written by Andreas Rottmann +, for the Debian GNU/Linux system (but may be used +by others). It was subsequently revised by Bill Bumgarner , +Laszlo Boszormenyi , and the sqlite3 developers. diff --git a/src/sqlite/SQLite-3.40.1/sqlite3.c b/src/sqlite/SQLite-3.43.1/sqlite3.c similarity index 95% rename from src/sqlite/SQLite-3.40.1/sqlite3.c rename to src/sqlite/SQLite-3.43.1/sqlite3.c index a290c82d7..1884b0823 100644 --- a/src/sqlite/SQLite-3.40.1/sqlite3.c +++ b/src/sqlite/SQLite-3.43.1/sqlite3.c @@ -1,6 +1,6 @@ /****************************************************************************** ** This file is an amalgamation of many separate C source files from SQLite -** version 3.40.1. By combining all the individual C code files into this +** version 3.43.1. By combining all the individual C code files into this ** single large file, the entire code can be compiled as a single translation ** unit. This allows many compilers to do optimizations that would not be ** possible if the files were compiled separately. Performance improvements @@ -16,6 +16,9 @@ ** if you want a wrapper to interface SQLite with your choice of programming ** language. The code for the "sqlite3" command-line shell is also in a ** separate file. This file contains only code for the core SQLite library. +** +** The content in this amalgamation comes from Fossil check-in +** d3a40c05c49e1a49264912b1a05bc2143ac. */ #define SQLITE_CORE 1 #define SQLITE_AMALGAMATION 1 @@ -50,11 +53,11 @@ ** used on lines of code that actually ** implement parts of coverage testing. ** -** OPTIMIZATION-IF-TRUE - This branch is allowed to alway be false +** OPTIMIZATION-IF-TRUE - This branch is allowed to always be false ** and the correct answer is still obtained, ** though perhaps more slowly. ** -** OPTIMIZATION-IF-FALSE - This branch is allowed to alway be true +** OPTIMIZATION-IF-FALSE - This branch is allowed to always be true ** and the correct answer is still obtained, ** though perhaps more slowly. ** @@ -123,6 +126,10 @@ #define SQLITE_4_BYTE_ALIGNED_MALLOC #endif /* defined(_MSC_VER) && !defined(_WIN64) */ +#if !defined(HAVE_LOG2) && defined(_MSC_VER) && _MSC_VER<1800 +#define HAVE_LOG2 0 +#endif /* !defined(HAVE_LOG2) && defined(_MSC_VER) && _MSC_VER<1800 */ + #endif /* SQLITE_MSVC_H */ /************** End of msvc.h ************************************************/ @@ -452,9 +459,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.40.1" -#define SQLITE_VERSION_NUMBER 3040001 -#define SQLITE_SOURCE_ID "2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24" +#define SQLITE_VERSION "3.43.1" +#define SQLITE_VERSION_NUMBER 3043001 +#define SQLITE_SOURCE_ID "2023-09-11 12:01:27 2d3a40c05c49e1a49264912b1a05bc2143ac0e7c3df588276ce80a4cbc9bd1b0" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -834,6 +841,7 @@ SQLITE_API int sqlite3_exec( #define SQLITE_IOERR_ROLLBACK_ATOMIC (SQLITE_IOERR | (31<<8)) #define SQLITE_IOERR_DATA (SQLITE_IOERR | (32<<8)) #define SQLITE_IOERR_CORRUPTFS (SQLITE_IOERR | (33<<8)) +#define SQLITE_IOERR_IN_PAGE (SQLITE_IOERR | (34<<8)) #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8)) #define SQLITE_LOCKED_VTAB (SQLITE_LOCKED | (2<<8)) #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8)) @@ -869,6 +877,7 @@ SQLITE_API int sqlite3_exec( #define SQLITE_CONSTRAINT_DATATYPE (SQLITE_CONSTRAINT |(12<<8)) #define SQLITE_NOTICE_RECOVER_WAL (SQLITE_NOTICE | (1<<8)) #define SQLITE_NOTICE_RECOVER_ROLLBACK (SQLITE_NOTICE | (2<<8)) +#define SQLITE_NOTICE_RBU (SQLITE_NOTICE | (3<<8)) #define SQLITE_WARNING_AUTOINDEX (SQLITE_WARNING | (1<<8)) #define SQLITE_AUTH_USER (SQLITE_AUTH | (1<<8)) #define SQLITE_OK_LOAD_PERMANENTLY (SQLITE_OK | (1<<8)) @@ -1481,7 +1490,6 @@ struct sqlite3_io_methods { ** in wal mode after the client has finished copying pages from the wal ** file to the database file, but before the *-shm file is updated to ** record the fact that the pages have been checkpointed. -** ** **
  • [[SQLITE_FCNTL_EXTERNAL_READER]] ** The EXPERIMENTAL [SQLITE_FCNTL_EXTERNAL_READER] opcode is used to detect @@ -1494,16 +1502,16 @@ struct sqlite3_io_methods { ** the database is not a wal-mode db, or if there is no such connection in any ** other process. This opcode cannot be used to detect transactions opened ** by clients within the current process, only within other processes. -** ** **
  • [[SQLITE_FCNTL_CKSM_FILE]] -** Used by the cksmvfs VFS module only. +** The [SQLITE_FCNTL_CKSM_FILE] opcode is for use internally by the +** [checksum VFS shim] only. ** **
  • [[SQLITE_FCNTL_RESET_CACHE]] ** If there is currently no transaction open on the database, and the -** database is not a temp db, then this file-control purges the contents -** of the in-memory page cache. If there is an open transaction, or if -** the db is a temp-db, it is a no-op, not an error. +** database is not a temp db, then the [SQLITE_FCNTL_RESET_CACHE] file-control +** purges the contents of the in-memory page cache. If there is an open +** transaction, or if the db is a temp-db, this opcode is a no-op, not an error. ** */ #define SQLITE_FCNTL_LOCKSTATE 1 @@ -1961,20 +1969,23 @@ SQLITE_API int sqlite3_os_end(void); ** must ensure that no other SQLite interfaces are invoked by other ** threads while sqlite3_config() is running. ** -** The sqlite3_config() interface -** may only be invoked prior to library initialization using -** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()]. -** ^If sqlite3_config() is called after [sqlite3_initialize()] and before -** [sqlite3_shutdown()] then it will return SQLITE_MISUSE. -** Note, however, that ^sqlite3_config() can be called as part of the -** implementation of an application-defined [sqlite3_os_init()]. -** ** The first argument to sqlite3_config() is an integer ** [configuration option] that determines ** what property of SQLite is to be configured. Subsequent arguments ** vary depending on the [configuration option] ** in the first argument. ** +** For most configuration options, the sqlite3_config() interface +** may only be invoked prior to library initialization using +** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()]. +** The exceptional configuration options that may be invoked at any time +** are called "anytime configuration options". +** ^If sqlite3_config() is called after [sqlite3_initialize()] and before +** [sqlite3_shutdown()] with a first argument that is not an anytime +** configuration option, then the sqlite3_config() call will return SQLITE_MISUSE. +** Note, however, that ^sqlite3_config() can be called as part of the +** implementation of an application-defined [sqlite3_os_init()]. +** ** ^When a configuration option is set, sqlite3_config() returns [SQLITE_OK]. ** ^If the option is unknown or SQLite is unable to set the option ** then this routine returns a non-zero [error code]. @@ -2082,6 +2093,23 @@ struct sqlite3_mem_methods { ** These constants are the available integer configuration options that ** can be passed as the first argument to the [sqlite3_config()] interface. ** +** Most of the configuration options for sqlite3_config() +** will only work if invoked prior to [sqlite3_initialize()] or after +** [sqlite3_shutdown()]. The few exceptions to this rule are called +** "anytime configuration options". +** ^Calling [sqlite3_config()] with a first argument that is not an +** anytime configuration option in between calls to [sqlite3_initialize()] and +** [sqlite3_shutdown()] is a no-op that returns SQLITE_MISUSE. +** +** The set of anytime configuration options can change (by insertions +** and/or deletions) from one release of SQLite to the next. +** As of SQLite version 3.42.0, the complete set of anytime configuration +** options is: +**
      +**
    • SQLITE_CONFIG_LOG +**
    • SQLITE_CONFIG_PCACHE_HDRSZ +**
    +** ** New configuration options may be added in future releases of SQLite. ** Existing configuration options might be discontinued. Applications ** should check the return code from [sqlite3_config()] to make sure that @@ -2428,28 +2456,28 @@ struct sqlite3_mem_methods { ** compile-time option is not set, then the default maximum is 1073741824. ** */ -#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ -#define SQLITE_CONFIG_MULTITHREAD 2 /* nil */ -#define SQLITE_CONFIG_SERIALIZED 3 /* nil */ -#define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */ -#define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */ -#define SQLITE_CONFIG_SCRATCH 6 /* No longer used */ -#define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */ -#define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */ -#define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */ -#define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */ -#define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */ -/* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */ -#define SQLITE_CONFIG_LOOKASIDE 13 /* int int */ -#define SQLITE_CONFIG_PCACHE 14 /* no-op */ -#define SQLITE_CONFIG_GETPCACHE 15 /* no-op */ -#define SQLITE_CONFIG_LOG 16 /* xFunc, void* */ -#define SQLITE_CONFIG_URI 17 /* int */ -#define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */ -#define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */ +#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ +#define SQLITE_CONFIG_MULTITHREAD 2 /* nil */ +#define SQLITE_CONFIG_SERIALIZED 3 /* nil */ +#define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */ +#define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */ +#define SQLITE_CONFIG_SCRATCH 6 /* No longer used */ +#define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */ +#define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */ +#define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */ +#define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */ +#define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */ +/* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */ +#define SQLITE_CONFIG_LOOKASIDE 13 /* int int */ +#define SQLITE_CONFIG_PCACHE 14 /* no-op */ +#define SQLITE_CONFIG_GETPCACHE 15 /* no-op */ +#define SQLITE_CONFIG_LOG 16 /* xFunc, void* */ +#define SQLITE_CONFIG_URI 17 /* int */ +#define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */ +#define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */ #define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */ -#define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */ -#define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */ +#define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */ +#define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */ #define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */ #define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */ #define SQLITE_CONFIG_PMASZ 25 /* unsigned int szPma */ @@ -2490,7 +2518,7 @@ struct sqlite3_mem_methods { ** configuration for a database connection can only be changed when that ** connection is not currently using lookaside memory, or in other words ** when the "current value" returned by -** [sqlite3_db_status](D,[SQLITE_CONFIG_LOOKASIDE],...) is zero. +** [sqlite3_db_status](D,[SQLITE_DBSTATUS_LOOKASIDE_USED],...) is zero. ** Any attempt to change the lookaside memory configuration when lookaside ** memory is in use leaves the configuration unchanged and returns ** [SQLITE_BUSY].)^ @@ -2640,8 +2668,12 @@ struct sqlite3_mem_methods { **
  • sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0); ** ** Because resetting a database is destructive and irreversible, the -** process requires the use of this obscure API and multiple steps to help -** ensure that it does not happen by accident. +** process requires the use of this obscure API and multiple steps to +** help ensure that it does not happen by accident. Because this +** feature must be capable of resetting corrupt databases, and +** shutting down virtual tables may require access to that corrupt +** storage, the library must abandon any installed virtual tables +** without calling their xDestroy() methods. ** ** [[SQLITE_DBCONFIG_DEFENSIVE]]
    SQLITE_DBCONFIG_DEFENSIVE
    **
    The SQLITE_DBCONFIG_DEFENSIVE option activates or deactivates the @@ -2680,7 +2712,7 @@ struct sqlite3_mem_methods { **
    ** ** [[SQLITE_DBCONFIG_DQS_DML]] -**
    SQLITE_DBCONFIG_DQS_DML +**
    SQLITE_DBCONFIG_DQS_DML
    **
    The SQLITE_DBCONFIG_DQS_DML option activates or deactivates ** the legacy [double-quoted string literal] misfeature for DML statements ** only, that is DELETE, INSERT, SELECT, and UPDATE statements. The @@ -2689,7 +2721,7 @@ struct sqlite3_mem_methods { **
    ** ** [[SQLITE_DBCONFIG_DQS_DDL]] -**
    SQLITE_DBCONFIG_DQS_DDL +**
    SQLITE_DBCONFIG_DQS_DDL
    **
    The SQLITE_DBCONFIG_DQS option activates or deactivates ** the legacy [double-quoted string literal] misfeature for DDL statements, ** such as CREATE TABLE and CREATE INDEX. The @@ -2698,7 +2730,7 @@ struct sqlite3_mem_methods { **
    ** ** [[SQLITE_DBCONFIG_TRUSTED_SCHEMA]] -**
    SQLITE_DBCONFIG_TRUSTED_SCHEMA +**
    SQLITE_DBCONFIG_TRUSTED_SCHEMA
    **
    The SQLITE_DBCONFIG_TRUSTED_SCHEMA option tells SQLite to ** assume that database schemas are untainted by malicious content. ** When the SQLITE_DBCONFIG_TRUSTED_SCHEMA option is disabled, SQLite @@ -2718,7 +2750,7 @@ struct sqlite3_mem_methods { **
    ** ** [[SQLITE_DBCONFIG_LEGACY_FILE_FORMAT]] -**
    SQLITE_DBCONFIG_LEGACY_FILE_FORMAT +**
    SQLITE_DBCONFIG_LEGACY_FILE_FORMAT
    **
    The SQLITE_DBCONFIG_LEGACY_FILE_FORMAT option activates or deactivates ** the legacy file format flag. When activated, this flag causes all newly ** created database file to have a schema format version number (the 4-byte @@ -2727,7 +2759,7 @@ struct sqlite3_mem_methods { ** any SQLite version back to 3.0.0 ([dateof:3.0.0]). Without this setting, ** newly created databases are generally not understandable by SQLite versions ** prior to 3.3.0 ([dateof:3.3.0]). As these words are written, there -** is now scarcely any need to generated database files that are compatible +** is now scarcely any need to generate database files that are compatible ** all the way back to version 3.0.0, and so this setting is of little ** practical use, but is provided so that SQLite can continue to claim the ** ability to generate new database files that are compatible with version @@ -2736,8 +2768,40 @@ struct sqlite3_mem_methods { ** the [VACUUM] command will fail with an obscure error when attempting to ** process a table with generated columns and a descending index. This is ** not considered a bug since SQLite versions 3.3.0 and earlier do not support -** either generated columns or decending indexes. +** either generated columns or descending indexes. +**
    +** +** [[SQLITE_DBCONFIG_STMT_SCANSTATUS]] +**
    SQLITE_DBCONFIG_STMT_SCANSTATUS
    +**
    The SQLITE_DBCONFIG_STMT_SCANSTATUS option is only useful in +** SQLITE_ENABLE_STMT_SCANSTATUS builds. In this case, it sets or clears +** a flag that enables collection of the sqlite3_stmt_scanstatus_v2() +** statistics. For statistics to be collected, the flag must be set on +** the database handle both when the SQL statement is prepared and when it +** is stepped. The flag is set (collection of statistics is enabled) +** by default. This option takes two arguments: an integer and a pointer to +** an integer.. The first argument is 1, 0, or -1 to enable, disable, or +** leave unchanged the statement scanstatus option. If the second argument +** is not NULL, then the value of the statement scanstatus setting after +** processing the first argument is written into the integer that the second +** argument points to. **
    +** +** [[SQLITE_DBCONFIG_REVERSE_SCANORDER]] +**
    SQLITE_DBCONFIG_REVERSE_SCANORDER
    +**
    The SQLITE_DBCONFIG_REVERSE_SCANORDER option changes the default order +** in which tables and indexes are scanned so that the scans start at the end +** and work toward the beginning rather than starting at the beginning and +** working toward the end. Setting SQLITE_DBCONFIG_REVERSE_SCANORDER is the +** same as setting [PRAGMA reverse_unordered_selects]. This option takes +** two arguments which are an integer and a pointer to an integer. The first +** argument is 1, 0, or -1 to enable, disable, or leave unchanged the +** reverse scan order flag, respectively. If the second argument is not NULL, +** then 0 or 1 is written into the integer that the second argument points to +** depending on if the reverse scan order flag is set after processing the +** first argument. +**
    +** ** */ #define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */ @@ -2758,7 +2822,9 @@ struct sqlite3_mem_methods { #define SQLITE_DBCONFIG_ENABLE_VIEW 1015 /* int int* */ #define SQLITE_DBCONFIG_LEGACY_FILE_FORMAT 1016 /* int int* */ #define SQLITE_DBCONFIG_TRUSTED_SCHEMA 1017 /* int int* */ -#define SQLITE_DBCONFIG_MAX 1017 /* Largest DBCONFIG */ +#define SQLITE_DBCONFIG_STMT_SCANSTATUS 1018 /* int int* */ +#define SQLITE_DBCONFIG_REVERSE_SCANORDER 1019 /* int int* */ +#define SQLITE_DBCONFIG_MAX 1019 /* Largest DBCONFIG */ /* ** CAPI3REF: Enable Or Disable Extended Result Codes @@ -2980,8 +3046,13 @@ SQLITE_API sqlite3_int64 sqlite3_total_changes64(sqlite3*); ** ^A call to sqlite3_interrupt(D) that occurs when there are no running ** SQL statements is a no-op and has no effect on SQL statements ** that are started after the sqlite3_interrupt() call returns. +** +** ^The [sqlite3_is_interrupted(D)] interface can be used to determine whether +** or not an interrupt is currently in effect for [database connection] D. +** It returns 1 if an interrupt is currently in effect, or 0 otherwise. */ SQLITE_API void sqlite3_interrupt(sqlite3*); +SQLITE_API int sqlite3_is_interrupted(sqlite3*); /* ** CAPI3REF: Determine If An SQL Statement Is Complete @@ -3599,8 +3670,8 @@ SQLITE_API SQLITE_DEPRECATED void *sqlite3_profile(sqlite3*, **
    ^An SQLITE_TRACE_PROFILE callback provides approximately the same ** information as is provided by the [sqlite3_profile()] callback. ** ^The P argument is a pointer to the [prepared statement] and the -** X argument points to a 64-bit integer which is the estimated of -** the number of nanosecond that the prepared statement took to run. +** X argument points to a 64-bit integer which is approximately +** the number of nanoseconds that the prepared statement took to run. ** ^The SQLITE_TRACE_PROFILE callback is invoked when the statement finishes. ** ** [[SQLITE_TRACE_ROW]]
    SQLITE_TRACE_ROW
    @@ -3632,8 +3703,10 @@ SQLITE_API SQLITE_DEPRECATED void *sqlite3_profile(sqlite3*, ** M argument should be the bitwise OR-ed combination of ** zero or more [SQLITE_TRACE] constants. ** -** ^Each call to either sqlite3_trace() or sqlite3_trace_v2() overrides -** (cancels) any prior calls to sqlite3_trace() or sqlite3_trace_v2(). +** ^Each call to either sqlite3_trace(D,X,P) or sqlite3_trace_v2(D,M,X,P) +** overrides (cancels) all prior calls to sqlite3_trace(D,X,P) or +** sqlite3_trace_v2(D,M,X,P) for the [database connection] D. Each +** database connection may have at most one trace callback. ** ** ^The X callback is invoked whenever any of the events identified by ** mask M occur. ^The integer return value from the callback is currently @@ -3663,7 +3736,7 @@ SQLITE_API int sqlite3_trace_v2( ** ** ^The sqlite3_progress_handler(D,N,X,P) interface causes the callback ** function X to be invoked periodically during long running calls to -** [sqlite3_exec()], [sqlite3_step()] and [sqlite3_get_table()] for +** [sqlite3_step()] and [sqlite3_prepare()] and similar for ** database connection D. An example use for this ** interface is to keep a GUI updated during a large query. ** @@ -3688,6 +3761,13 @@ SQLITE_API int sqlite3_trace_v2( ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their ** database connections for the meaning of "modify" in this paragraph. ** +** The progress handler callback would originally only be invoked from the +** bytecode engine. It still might be invoked during [sqlite3_prepare()] +** and similar because those routines might force a reparse of the schema +** which involves running the bytecode engine. However, beginning with +** SQLite version 3.41.0, the progress handler callback might also be +** invoked directly from [sqlite3_prepare()] while analyzing and generating +** code for complex queries. */ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); @@ -3724,13 +3804,18 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); ** **
    ** ^(
    [SQLITE_OPEN_READONLY]
    -**
    The database is opened in read-only mode. If the database does not -** already exist, an error is returned.
    )^ +**
    The database is opened in read-only mode. If the database does +** not already exist, an error is returned.
    )^ ** ** ^(
    [SQLITE_OPEN_READWRITE]
    -**
    The database is opened for reading and writing if possible, or reading -** only if the file is write protected by the operating system. In either -** case the database must already exist, otherwise an error is returned.
    )^ +**
    The database is opened for reading and writing if possible, or +** reading only if the file is write protected by the operating +** system. In either case the database must already exist, otherwise +** an error is returned. For historical reasons, if opening in +** read-write mode fails due to OS-level permissions, an attempt is +** made to open it in read-only mode. [sqlite3_db_readonly()] can be +** used to determine whether the database is actually +** read-write.
    )^ ** ** ^(
    [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]
    **
    The database is opened for reading and writing, and is created if @@ -3990,7 +4075,7 @@ SQLITE_API int sqlite3_open_v2( ** as F) must be one of: **
      **
    • A database filename pointer created by the SQLite core and -** passed into the xOpen() method of a VFS implemention, or +** passed into the xOpen() method of a VFS implementation, or **
    • A filename obtained from [sqlite3_db_filename()], or **
    • A new filename constructed using [sqlite3_create_filename()]. **
    @@ -4103,7 +4188,7 @@ SQLITE_API sqlite3_file *sqlite3_database_file_object(const char*); /* ** CAPI3REF: Create and Destroy VFS Filenames ** -** These interfces are provided for use by [VFS shim] implementations and +** These interfaces are provided for use by [VFS shim] implementations and ** are not useful outside of that context. ** ** The sqlite3_create_filename(D,J,W,N,P) allocates memory to hold a version of @@ -4650,6 +4735,41 @@ SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt); */ SQLITE_API int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt); +/* +** CAPI3REF: Change The EXPLAIN Setting For A Prepared Statement +** METHOD: sqlite3_stmt +** +** The sqlite3_stmt_explain(S,E) interface changes the EXPLAIN +** setting for [prepared statement] S. If E is zero, then S becomes +** a normal prepared statement. If E is 1, then S behaves as if +** its SQL text began with "[EXPLAIN]". If E is 2, then S behaves as if +** its SQL text began with "[EXPLAIN QUERY PLAN]". +** +** Calling sqlite3_stmt_explain(S,E) might cause S to be reprepared. +** SQLite tries to avoid a reprepare, but a reprepare might be necessary +** on the first transition into EXPLAIN or EXPLAIN QUERY PLAN mode. +** +** Because of the potential need to reprepare, a call to +** sqlite3_stmt_explain(S,E) will fail with SQLITE_ERROR if S cannot be +** reprepared because it was created using [sqlite3_prepare()] instead of +** the newer [sqlite3_prepare_v2()] or [sqlite3_prepare_v3()] interfaces and +** hence has no saved SQL text with which to reprepare. +** +** Changing the explain setting for a prepared statement does not change +** the original SQL text for the statement. Hence, if the SQL text originally +** began with EXPLAIN or EXPLAIN QUERY PLAN, but sqlite3_stmt_explain(S,0) +** is called to convert the statement into an ordinary statement, the EXPLAIN +** or EXPLAIN QUERY PLAN keywords will still appear in the sqlite3_sql(S) +** output, even though the statement now acts like a normal SQL statement. +** +** This routine returns SQLITE_OK if the explain mode is successfully +** changed, or an error code if the explain mode could not be changed. +** The explain mode cannot be changed while a statement is active. +** Hence, it is good practice to call [sqlite3_reset(S)] +** immediately prior to calling sqlite3_stmt_explain(S,E). +*/ +SQLITE_API int sqlite3_stmt_explain(sqlite3_stmt *pStmt, int eMode); + /* ** CAPI3REF: Determine If A Prepared Statement Has Been Reset ** METHOD: sqlite3_stmt @@ -4813,7 +4933,7 @@ typedef struct sqlite3_context sqlite3_context; ** with it may be passed. ^It is called to dispose of the BLOB or string even ** if the call to the bind API fails, except the destructor is not called if ** the third parameter is a NULL pointer or the fourth parameter is negative. -** ^ (2) The special constant, [SQLITE_STATIC], may be passsed to indicate that +** ^ (2) The special constant, [SQLITE_STATIC], may be passed to indicate that ** the application remains responsible for disposing of the object. ^In this ** case, the object and the provided pointer to it must remain valid until ** either the prepared statement is finalized or the same SQL parameter is @@ -5492,14 +5612,26 @@ SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt); ** ^The [sqlite3_reset(S)] interface resets the [prepared statement] S ** back to the beginning of its program. ** -** ^If the most recent call to [sqlite3_step(S)] for the -** [prepared statement] S returned [SQLITE_ROW] or [SQLITE_DONE], -** or if [sqlite3_step(S)] has never before been called on S, -** then [sqlite3_reset(S)] returns [SQLITE_OK]. +** ^The return code from [sqlite3_reset(S)] indicates whether or not +** the previous evaluation of prepared statement S completed successfully. +** ^If [sqlite3_step(S)] has never before been called on S or if +** [sqlite3_step(S)] has not been called since the previous call +** to [sqlite3_reset(S)], then [sqlite3_reset(S)] will return +** [SQLITE_OK]. ** ** ^If the most recent call to [sqlite3_step(S)] for the ** [prepared statement] S indicated an error, then ** [sqlite3_reset(S)] returns an appropriate [error code]. +** ^The [sqlite3_reset(S)] interface might also return an [error code] +** if there were no prior errors but the process of resetting +** the prepared statement caused a new error. ^For example, if an +** [INSERT] statement with a [RETURNING] clause is only stepped one time, +** that one call to [sqlite3_step(S)] might return SQLITE_ROW but +** the overall statement might still fail and the [sqlite3_reset(S)] call +** might return SQLITE_BUSY if locking constraints prevent the +** database change from committing. Therefore, it is important that +** applications check the return code from [sqlite3_reset(S)] even if +** no prior call to [sqlite3_step(S)] indicated a problem. ** ** ^The [sqlite3_reset(S)] interface does not change the values ** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S. @@ -5711,10 +5843,21 @@ SQLITE_API int sqlite3_create_window_function( ** from top-level SQL, and cannot be used in VIEWs or TRIGGERs nor in ** schema structures such as [CHECK constraints], [DEFAULT clauses], ** [expression indexes], [partial indexes], or [generated columns]. -** The SQLITE_DIRECTONLY flags is a security feature which is recommended -** for all [application-defined SQL functions], and especially for functions -** that have side-effects or that could potentially leak sensitive -** information. +**

    +** The SQLITE_DIRECTONLY flag is recommended for any +** [application-defined SQL function] +** that has side-effects or that could potentially leak sensitive information. +** This will prevent attacks in which an application is tricked +** into using a database file that has had its schema surreptitiously +** modified to invoke the application-defined function in ways that are +** harmful. +**

    +** Some people say it is good practice to set SQLITE_DIRECTONLY on all +** [application-defined SQL functions], regardless of whether or not they +** are security sensitive, as doing so prevents those functions from being used +** inside of the database schema, and thus ensures that the database +** can be inspected and modified using generic tools (such as the [CLI]) +** that do not have access to the application-defined functions. **

    ** ** [[SQLITE_INNOCUOUS]]
    SQLITE_INNOCUOUS
    @@ -5855,16 +5998,6 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** then the conversion is performed. Otherwise no conversion occurs. ** The [SQLITE_INTEGER | datatype] after conversion is returned.)^ ** -** ^(The sqlite3_value_encoding(X) interface returns one of [SQLITE_UTF8], -** [SQLITE_UTF16BE], or [SQLITE_UTF16LE] according to the current encoding -** of the value X, assuming that X has type TEXT.)^ If sqlite3_value_type(X) -** returns something other than SQLITE_TEXT, then the return value from -** sqlite3_value_encoding(X) is meaningless. ^Calls to -** sqlite3_value_text(X), sqlite3_value_text16(X), sqlite3_value_text16be(X), -** sqlite3_value_text16le(X), sqlite3_value_bytes(X), or -** sqlite3_value_bytes16(X) might change the encoding of the value X and -** thus change the return from subsequent calls to sqlite3_value_encoding(X). -** ** ^Within the [xUpdate] method of a [virtual table], the ** sqlite3_value_nochange(X) interface returns true if and only if ** the column corresponding to X is unchanged by the UPDATE operation @@ -5929,6 +6062,27 @@ SQLITE_API int sqlite3_value_type(sqlite3_value*); SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*); SQLITE_API int sqlite3_value_nochange(sqlite3_value*); SQLITE_API int sqlite3_value_frombind(sqlite3_value*); + +/* +** CAPI3REF: Report the internal text encoding state of an sqlite3_value object +** METHOD: sqlite3_value +** +** ^(The sqlite3_value_encoding(X) interface returns one of [SQLITE_UTF8], +** [SQLITE_UTF16BE], or [SQLITE_UTF16LE] according to the current text encoding +** of the value X, assuming that X has type TEXT.)^ If sqlite3_value_type(X) +** returns something other than SQLITE_TEXT, then the return value from +** sqlite3_value_encoding(X) is meaningless. ^Calls to +** [sqlite3_value_text(X)], [sqlite3_value_text16(X)], [sqlite3_value_text16be(X)], +** [sqlite3_value_text16le(X)], [sqlite3_value_bytes(X)], or +** [sqlite3_value_bytes16(X)] might change the encoding of the value X and +** thus change the return from subsequent calls to sqlite3_value_encoding(X). +** +** This routine is intended for used by applications that test and validate +** the SQLite implementation. This routine is inquiring about the opaque +** internal state of an [sqlite3_value] object. Ordinary applications should +** not need to know what the internal state of an sqlite3_value object is and +** hence should not need to use this interface. +*/ SQLITE_API int sqlite3_value_encoding(sqlite3_value*); /* @@ -6465,6 +6619,13 @@ SQLITE_API void sqlite3_activate_cerod( ** of the default VFS is not implemented correctly, or not implemented at ** all, then the behavior of sqlite3_sleep() may deviate from the description ** in the previous paragraphs. +** +** If a negative argument is passed to sqlite3_sleep() the results vary by +** VFS and operating system. Some system treat a negative argument as an +** instruction to sleep forever. Others understand it to mean do not sleep +** at all. ^In SQLite version 3.42.0 and later, a negative +** argument passed into sqlite3_sleep() is changed to zero before it is relayed +** down into the xSleep method of the VFS. */ SQLITE_API int sqlite3_sleep(int); @@ -7309,15 +7470,6 @@ SQLITE_API int sqlite3_cancel_auto_extension(void(*xEntryPoint)(void)); */ SQLITE_API void sqlite3_reset_auto_extension(void); -/* -** The interface to the virtual-table mechanism is currently considered -** to be experimental. The interface might change in incompatible ways. -** If this is a problem for you, do not use the interface at this time. -** -** When the virtual-table mechanism stabilizes, we will declare the -** interface fixed, support it indefinitely, and remove this comment. -*/ - /* ** Structures used by the virtual table interface */ @@ -7436,10 +7588,10 @@ struct sqlite3_module { ** when the omit flag is true there is no guarantee that the constraint will ** not be checked again using byte code.)^ ** -** ^The idxNum and idxPtr values are recorded and passed into the +** ^The idxNum and idxStr values are recorded and passed into the ** [xFilter] method. -** ^[sqlite3_free()] is used to free idxPtr if and only if -** needToFreeIdxPtr is true. +** ^[sqlite3_free()] is used to free idxStr if and only if +** needToFreeIdxStr is true. ** ** ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in ** the correct order to satisfy the ORDER BY clause so that no separate @@ -7559,7 +7711,7 @@ struct sqlite3_index_info { ** the [sqlite3_vtab_collation()] interface. For most real-world virtual ** tables, the collating sequence of constraints does not matter (for example ** because the constraints are numeric) and so the sqlite3_vtab_collation() -** interface is no commonly needed. +** interface is not commonly needed. */ #define SQLITE_INDEX_CONSTRAINT_EQ 2 #define SQLITE_INDEX_CONSTRAINT_GT 4 @@ -7718,16 +7870,6 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3*, const char *zSQL); */ SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg); -/* -** The interface to the virtual-table mechanism defined above (back up -** to a comment remarkably similar to this one) is currently considered -** to be experimental. The interface might change in incompatible ways. -** If this is a problem for you, do not use the interface at this time. -** -** When the virtual-table mechanism stabilizes, we will declare the -** interface fixed, support it indefinitely, and remove this comment. -*/ - /* ** CAPI3REF: A Handle To An Open BLOB ** KEYWORDS: {BLOB handle} {BLOB handles} @@ -8111,9 +8253,9 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); ** is undefined if the mutex is not currently entered by the ** calling thread or is not currently allocated. ** -** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or -** sqlite3_mutex_leave() is a NULL pointer, then all three routines -** behave as no-ops. +** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), +** sqlite3_mutex_leave(), or sqlite3_mutex_free() is a NULL pointer, +** then any of the four routines behaves as a no-op. ** ** See also: [sqlite3_mutex_held()] and [sqlite3_mutex_notheld()]. */ @@ -8383,7 +8525,8 @@ SQLITE_API int sqlite3_test_control(int op, ...); #define SQLITE_TESTCTRL_TRACEFLAGS 31 #define SQLITE_TESTCTRL_TUNE 32 #define SQLITE_TESTCTRL_LOGEST 33 -#define SQLITE_TESTCTRL_LAST 33 /* Largest TESTCTRL */ +#define SQLITE_TESTCTRL_USELONGDOUBLE 34 +#define SQLITE_TESTCTRL_LAST 34 /* Largest TESTCTRL */ /* ** CAPI3REF: SQL Keyword Checking @@ -9415,8 +9558,8 @@ SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p); ** blocked connection already has a registered unlock-notify callback, ** then the new callback replaces the old.)^ ^If sqlite3_unlock_notify() is ** called with a NULL pointer as its second argument, then any existing -** unlock-notify callback is canceled. ^The blocked connections -** unlock-notify callback may also be canceled by closing the blocked +** unlock-notify callback is cancelled. ^The blocked connections +** unlock-notify callback may also be cancelled by closing the blocked ** connection using [sqlite3_close()]. ** ** The unlock-notify callback is not reentrant. If an application invokes @@ -9839,7 +9982,7 @@ SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...); ** [[SQLITE_VTAB_DIRECTONLY]]
    SQLITE_VTAB_DIRECTONLY
    **
    Calls of the form ** [sqlite3_vtab_config](db,SQLITE_VTAB_DIRECTONLY) from within the -** the [xConnect] or [xCreate] methods of a [virtual table] implmentation +** the [xConnect] or [xCreate] methods of a [virtual table] implementation ** prohibits that virtual table from being used from within triggers and ** views. **
    @@ -9847,18 +9990,28 @@ SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...); ** [[SQLITE_VTAB_INNOCUOUS]]
    SQLITE_VTAB_INNOCUOUS
    **
    Calls of the form ** [sqlite3_vtab_config](db,SQLITE_VTAB_INNOCUOUS) from within the -** the [xConnect] or [xCreate] methods of a [virtual table] implmentation +** the [xConnect] or [xCreate] methods of a [virtual table] implementation ** identify that virtual table as being safe to use from within triggers ** and views. Conceptually, the SQLITE_VTAB_INNOCUOUS tag means that the ** virtual table can do no serious harm even if it is controlled by a ** malicious hacker. Developers should avoid setting the SQLITE_VTAB_INNOCUOUS ** flag unless absolutely necessary. **
    +** +** [[SQLITE_VTAB_USES_ALL_SCHEMAS]]
    SQLITE_VTAB_USES_ALL_SCHEMAS
    +**
    Calls of the form +** [sqlite3_vtab_config](db,SQLITE_VTAB_USES_ALL_SCHEMA) from within the +** the [xConnect] or [xCreate] methods of a [virtual table] implementation +** instruct the query planner to begin at least a read transaction on +** all schemas ("main", "temp", and any ATTACH-ed databases) whenever the +** virtual table is used. +**
    **
    */ #define SQLITE_VTAB_CONSTRAINT_SUPPORT 1 #define SQLITE_VTAB_INNOCUOUS 2 #define SQLITE_VTAB_DIRECTONLY 3 +#define SQLITE_VTAB_USES_ALL_SCHEMAS 4 /* ** CAPI3REF: Determine The Virtual Table Conflict Policy @@ -9931,7 +10084,7 @@ SQLITE_API int sqlite3_vtab_nochange(sqlite3_context*); **
  • Otherwise, "BINARY" is returned. ** */ -SQLITE_API SQLITE_EXPERIMENTAL const char *sqlite3_vtab_collation(sqlite3_index_info*,int); +SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info*,int); /* ** CAPI3REF: Determine if a virtual table query is DISTINCT @@ -10019,7 +10172,7 @@ SQLITE_API int sqlite3_vtab_distinct(sqlite3_index_info*); ** communicated to the xBestIndex method as a ** [SQLITE_INDEX_CONSTRAINT_EQ] constraint.)^ If xBestIndex wants to use ** this constraint, it must set the corresponding -** aConstraintUsage[].argvIndex to a postive integer. ^(Then, under +** aConstraintUsage[].argvIndex to a positive integer. ^(Then, under ** the usual mode of handling IN operators, SQLite generates [bytecode] ** that invokes the [xFilter|xFilter() method] once for each value ** on the right-hand side of the IN operator.)^ Thus the virtual table @@ -10088,21 +10241,20 @@ SQLITE_API int sqlite3_vtab_in(sqlite3_index_info*, int iCons, int bHandle); ** is undefined and probably harmful. ** ** The X parameter in a call to sqlite3_vtab_in_first(X,P) or -** sqlite3_vtab_in_next(X,P) must be one of the parameters to the +** sqlite3_vtab_in_next(X,P) should be one of the parameters to the ** xFilter method which invokes these routines, and specifically ** a parameter that was previously selected for all-at-once IN constraint ** processing use the [sqlite3_vtab_in()] interface in the ** [xBestIndex|xBestIndex method]. ^(If the X parameter is not ** an xFilter argument that was selected for all-at-once IN constraint -** processing, then these routines return [SQLITE_MISUSE])^ or perhaps -** exhibit some other undefined or harmful behavior. +** processing, then these routines return [SQLITE_ERROR].)^ ** ** ^(Use these routines to access all values on the right-hand side ** of the IN constraint using code like the following: ** **

     **    for(rc=sqlite3_vtab_in_first(pList, &pVal);
    -**        rc==SQLITE_OK && pVal
    +**        rc==SQLITE_OK && pVal;
     **        rc=sqlite3_vtab_in_next(pList, &pVal)
     **    ){
     **      // do something with pVal
    @@ -10200,6 +10352,10 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **
     ** managed by the prepared statement S and will be automatically freed when
     ** S is finalized.
     **
    +** Not all values are available for all query elements. When a value is
    +** not available, the output variable is set to -1 if the value is numeric,
    +** or to NULL if it is a string (SQLITE_SCANSTAT_NAME).
    +**
     ** 
    ** [[SQLITE_SCANSTAT_NLOOP]]
    SQLITE_SCANSTAT_NLOOP
    **
    ^The [sqlite3_int64] variable pointed to by the V parameter will be @@ -10227,12 +10383,24 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value ** ** to a zero-terminated UTF-8 string containing the [EXPLAIN QUERY PLAN] ** description for the X-th loop. ** -** [[SQLITE_SCANSTAT_SELECTID]]
    SQLITE_SCANSTAT_SELECT
    +** [[SQLITE_SCANSTAT_SELECTID]]
    SQLITE_SCANSTAT_SELECTID
    **
    ^The "int" variable pointed to by the V parameter will be set to the -** "select-id" for the X-th loop. The select-id identifies which query or -** subquery the loop is part of. The main query has a select-id of zero. -** The select-id is the same value as is output in the first column -** of an [EXPLAIN QUERY PLAN] query. +** id for the X-th query plan element. The id value is unique within the +** statement. The select-id is the same value as is output in the first +** column of an [EXPLAIN QUERY PLAN] query. +** +** [[SQLITE_SCANSTAT_PARENTID]]
    SQLITE_SCANSTAT_PARENTID
    +**
    The "int" variable pointed to by the V parameter will be set to the +** the id of the parent of the current query element, if applicable, or +** to zero if the query element has no parent. This is the same value as +** returned in the second column of an [EXPLAIN QUERY PLAN] query. +** +** [[SQLITE_SCANSTAT_NCYCLE]]
    SQLITE_SCANSTAT_NCYCLE
    +**
    The sqlite3_int64 output value is set to the number of cycles, +** according to the processor time-stamp counter, that elapsed while the +** query element was being processed. This value is not available for +** all query elements - if it is unavailable the output variable is +** set to -1. **
    */ #define SQLITE_SCANSTAT_NLOOP 0 @@ -10241,12 +10409,14 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value ** #define SQLITE_SCANSTAT_NAME 3 #define SQLITE_SCANSTAT_EXPLAIN 4 #define SQLITE_SCANSTAT_SELECTID 5 +#define SQLITE_SCANSTAT_PARENTID 6 +#define SQLITE_SCANSTAT_NCYCLE 7 /* ** CAPI3REF: Prepared Statement Scan Status ** METHOD: sqlite3_stmt ** -** This interface returns information about the predicted and measured +** These interfaces return information about the predicted and measured ** performance for pStmt. Advanced applications can use this ** interface to compare the predicted and the measured performance and ** issue warnings and/or rerun [ANALYZE] if discrepancies are found. @@ -10257,19 +10427,25 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value ** ** ** The "iScanStatusOp" parameter determines which status information to return. ** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior -** of this interface is undefined. -** ^The requested measurement is written into a variable pointed to by -** the "pOut" parameter. -** Parameter "idx" identifies the specific loop to retrieve statistics for. -** Loops are numbered starting from zero. ^If idx is out of range - less than -** zero or greater than or equal to the total number of loops used to implement -** the statement - a non-zero value is returned and the variable that pOut -** points to is unchanged. -** -** ^Statistics might not be available for all loops in all statements. ^In cases -** where there exist loops with no available statistics, this function behaves -** as if the loop did not exist - it returns non-zero and leave the variable -** that pOut points to unchanged. +** of this interface is undefined. ^The requested measurement is written into +** a variable pointed to by the "pOut" parameter. +** +** The "flags" parameter must be passed a mask of flags. At present only +** one flag is defined - SQLITE_SCANSTAT_COMPLEX. If SQLITE_SCANSTAT_COMPLEX +** is specified, then status information is available for all elements +** of a query plan that are reported by "EXPLAIN QUERY PLAN" output. If +** SQLITE_SCANSTAT_COMPLEX is not specified, then only query plan elements +** that correspond to query loops (the "SCAN..." and "SEARCH..." elements of +** the EXPLAIN QUERY PLAN output) are available. Invoking API +** sqlite3_stmt_scanstatus() is equivalent to calling +** sqlite3_stmt_scanstatus_v2() with a zeroed flags parameter. +** +** Parameter "idx" identifies the specific query element to retrieve statistics +** for. Query elements are numbered starting from zero. A value of -1 may be +** to query for statistics regarding the entire query. ^If idx is out of range +** - less than -1 or greater than or equal to the total number of query +** elements used to implement the statement - a non-zero value is returned and +** the variable that pOut points to is unchanged. ** ** See also: [sqlite3_stmt_scanstatus_reset()] */ @@ -10279,6 +10455,19 @@ SQLITE_API int sqlite3_stmt_scanstatus( int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */ void *pOut /* Result written here */ ); +SQLITE_API int sqlite3_stmt_scanstatus_v2( + sqlite3_stmt *pStmt, /* Prepared statement for which info desired */ + int idx, /* Index of loop to report on */ + int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */ + int flags, /* Mask of flags defined below */ + void *pOut /* Result written here */ +); + +/* +** CAPI3REF: Prepared Statement Scan Status +** KEYWORDS: {scan status flags} +*/ +#define SQLITE_SCANSTAT_COMPLEX 0x0001 /* ** CAPI3REF: Zero Scan-Status Counters @@ -10369,6 +10558,10 @@ SQLITE_API int sqlite3_db_cacheflush(sqlite3*); ** function is not defined for operations on WITHOUT ROWID tables, or for ** DELETE operations on rowid tables. ** +** ^The sqlite3_preupdate_hook(D,C,P) function returns the P argument from +** the previous call on the same [database connection] D, or NULL for +** the first call on D. +** ** The [sqlite3_preupdate_old()], [sqlite3_preupdate_new()], ** [sqlite3_preupdate_count()], and [sqlite3_preupdate_depth()] interfaces ** provide additional information about a preupdate event. These routines @@ -10408,7 +10601,7 @@ SQLITE_API int sqlite3_db_cacheflush(sqlite3*); ** When the [sqlite3_blob_write()] API is used to update a blob column, ** the pre-update hook is invoked with SQLITE_DELETE. This is because the ** in this case the new values are not available. In this case, when a -** callback made with op==SQLITE_DELETE is actuall a write using the +** callback made with op==SQLITE_DELETE is actually a write using the ** sqlite3_blob_write() API, the [sqlite3_preupdate_blobwrite()] returns ** the index of the column being written. In other cases, where the ** pre-update hook is being invoked for some other reason, including a @@ -10774,6 +10967,19 @@ SQLITE_API int sqlite3_deserialize( # undef double #endif +#if defined(__wasi__) +# undef SQLITE_WASI +# define SQLITE_WASI 1 +# undef SQLITE_OMIT_WAL +# define SQLITE_OMIT_WAL 1/* because it requires shared memory APIs */ +# ifndef SQLITE_OMIT_LOAD_EXTENSION +# define SQLITE_OMIT_LOAD_EXTENSION +# endif +# ifndef SQLITE_THREADSAFE +# define SQLITE_THREADSAFE 0 +# endif +#endif + #if 0 } /* End of the 'extern "C"' block */ #endif @@ -10980,16 +11186,20 @@ SQLITE_API int sqlite3session_create( SQLITE_API void sqlite3session_delete(sqlite3_session *pSession); /* -** CAPIREF: Conigure a Session Object +** CAPI3REF: Configure a Session Object ** METHOD: sqlite3_session ** ** This method is used to configure a session object after it has been -** created. At present the only valid value for the second parameter is -** [SQLITE_SESSION_OBJCONFIG_SIZE]. +** created. At present the only valid values for the second parameter are +** [SQLITE_SESSION_OBJCONFIG_SIZE] and [SQLITE_SESSION_OBJCONFIG_ROWID]. ** -** Arguments for sqlite3session_object_config() +*/ +SQLITE_API int sqlite3session_object_config(sqlite3_session*, int op, void *pArg); + +/* +** CAPI3REF: Options for sqlite3session_object_config ** -** The following values may passed as the the 4th parameter to +** The following values may passed as the the 2nd parameter to ** sqlite3session_object_config(). ** **
    SQLITE_SESSION_OBJCONFIG_SIZE
    @@ -11005,12 +11215,21 @@ SQLITE_API void sqlite3session_delete(sqlite3_session *pSession); ** ** It is an error (SQLITE_MISUSE) to attempt to modify this setting after ** the first table has been attached to the session object. +** +**
    SQLITE_SESSION_OBJCONFIG_ROWID
    +** This option is used to set, clear or query the flag that enables +** collection of data for tables with no explicit PRIMARY KEY. +** +** Normally, tables with no explicit PRIMARY KEY are simply ignored +** by the sessions module. However, if this flag is set, it behaves +** as if such tables have a column "_rowid_ INTEGER PRIMARY KEY" inserted +** as their leftmost columns. +** +** It is an error (SQLITE_MISUSE) to attempt to modify this setting after +** the first table has been attached to the session object. */ -SQLITE_API int sqlite3session_object_config(sqlite3_session*, int op, void *pArg); - -/* -*/ -#define SQLITE_SESSION_OBJCONFIG_SIZE 1 +#define SQLITE_SESSION_OBJCONFIG_SIZE 1 +#define SQLITE_SESSION_OBJCONFIG_ROWID 2 /* ** CAPI3REF: Enable Or Disable A Session Object @@ -12143,9 +12362,23 @@ SQLITE_API int sqlite3changeset_apply_v2( ** Invert the changeset before applying it. This is equivalent to inverting ** a changeset using sqlite3changeset_invert() before applying it. It is ** an error to specify this flag with a patchset. +** +**
    SQLITE_CHANGESETAPPLY_IGNORENOOP
    +** Do not invoke the conflict handler callback for any changes that +** would not actually modify the database even if they were applied. +** Specifically, this means that the conflict handler is not invoked +** for: +**
      +**
    • a delete change if the row being deleted cannot be found, +**
    • an update change if the modified fields are already set to +** their new values in the conflicting row, or +**
    • an insert change if all fields of the conflicting row match +** the row being inserted. +**
    */ #define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001 #define SQLITE_CHANGESETAPPLY_INVERT 0x0002 +#define SQLITE_CHANGESETAPPLY_IGNORENOOP 0x0004 /* ** CAPI3REF: Constants Passed To The Conflict Handler @@ -12886,7 +13119,7 @@ struct Fts5PhraseIter { ** See xPhraseFirstColumn above. */ struct Fts5ExtensionApi { - int iVersion; /* Currently always set to 3 */ + int iVersion; /* Currently always set to 2 */ void *(*xUserData)(Fts5Context*); @@ -13115,8 +13348,8 @@ struct Fts5ExtensionApi { ** as separate queries of the FTS index are required for each synonym. ** ** When using methods (2) or (3), it is important that the tokenizer only -** provide synonyms when tokenizing document text (method (2)) or query -** text (method (3)), not both. Doing so will not cause any errors, but is +** provide synonyms when tokenizing document text (method (3)) or query +** text (method (2)), not both. Doing so will not cause any errors, but is ** inefficient. */ typedef struct Fts5Tokenizer Fts5Tokenizer; @@ -13164,7 +13397,7 @@ struct fts5_api { int (*xCreateTokenizer)( fts5_api *pApi, const char *zName, - void *pContext, + void *pUserData, fts5_tokenizer *pTokenizer, void (*xDestroy)(void*) ); @@ -13173,7 +13406,7 @@ struct fts5_api { int (*xFindTokenizer)( fts5_api *pApi, const char *zName, - void **ppContext, + void **ppUserData, fts5_tokenizer *pTokenizer ); @@ -13181,7 +13414,7 @@ struct fts5_api { int (*xCreateFunction)( fts5_api *pApi, const char *zName, - void *pContext, + void *pUserData, fts5_extension_function xFunction, void (*xDestroy)(void*) ); @@ -13292,7 +13525,7 @@ struct fts5_api { ** level of recursion for each term. A stack overflow can result ** if the number of terms is too large. In practice, most SQL ** never has more than 3 or 4 terms. Use a value of 0 to disable -** any limit on the number of terms in a compount SELECT. +** any limit on the number of terms in a compound SELECT. */ #ifndef SQLITE_MAX_COMPOUND_SELECT # define SQLITE_MAX_COMPOUND_SELECT 500 @@ -13442,8 +13675,8 @@ struct fts5_api { #endif /* -** WAL mode depends on atomic aligned 32-bit loads and stores in a few -** places. The following macros try to make this explicit. +** A few places in the code require atomic load/store of aligned +** integer values. */ #ifndef __has_extension # define __has_extension(x) 0 /* compatibility with non-clang compilers */ @@ -13499,15 +13732,22 @@ struct fts5_api { #endif /* -** A macro to hint to the compiler that a function should not be +** Macros to hint to the compiler that a function should or should not be ** inlined. */ #if defined(__GNUC__) # define SQLITE_NOINLINE __attribute__((noinline)) +# define SQLITE_INLINE __attribute__((always_inline)) inline #elif defined(_MSC_VER) && _MSC_VER>=1310 # define SQLITE_NOINLINE __declspec(noinline) +# define SQLITE_INLINE __forceinline #else # define SQLITE_NOINLINE +# define SQLITE_INLINE +#endif +#if defined(SQLITE_COVERAGE_TEST) || defined(__STRICT_ANSI__) +# undef SQLITE_INLINE +# define SQLITE_INLINE #endif /* @@ -14325,15 +14565,9 @@ typedef INT8_TYPE i8; /* 1-byte signed integer */ /* ** The datatype used to store estimates of the number of rows in a -** table or index. This is an unsigned integer type. For 99.9% of -** the world, a 32-bit integer is sufficient. But a 64-bit integer -** can be used at compile-time if desired. +** table or index. */ -#ifdef SQLITE_64BIT_STATS - typedef u64 tRowcnt; /* 64-bit only if requested at compile-time */ -#else - typedef u32 tRowcnt; /* 32-bit is the default */ -#endif +typedef u64 tRowcnt; /* ** Estimated quantities used for query planning are stored as 16-bit @@ -14394,8 +14628,31 @@ typedef INT16_TYPE LogEst; ** the end of buffer S. This macro returns true if P points to something ** contained within the buffer S. */ -#define SQLITE_WITHIN(P,S,E) (((uptr)(P)>=(uptr)(S))&&((uptr)(P)<(uptr)(E))) +#define SQLITE_WITHIN(P,S,E) (((uptr)(P)>=(uptr)(S))&&((uptr)(P)<(uptr)(E))) +/* +** P is one byte past the end of a large buffer. Return true if a span of bytes +** between S..E crosses the end of that buffer. In other words, return true +** if the sub-buffer S..E-1 overflows the buffer whose last byte is P-1. +** +** S is the start of the span. E is one byte past the end of end of span. +** +** P +** |-----------------| FALSE +** |-------| +** S E +** +** P +** |-----------------| +** |-------| TRUE +** S E +** +** P +** |-----------------| +** |-------| FALSE +** S E +*/ +#define SQLITE_OVERFLOW(P,S,E) (((uptr)(S)<(uptr)(P))&&((uptr)(E)>(uptr)(P))) /* ** Macros to determine whether the machine is big or little endian, @@ -14479,9 +14736,9 @@ typedef INT16_TYPE LogEst; ** pointers. In that case, only verify 4-byte alignment. */ #ifdef SQLITE_4_BYTE_ALIGNED_MALLOC -# define EIGHT_BYTE_ALIGNMENT(X) ((((char*)(X) - (char*)0)&3)==0) +# define EIGHT_BYTE_ALIGNMENT(X) ((((uptr)(X) - (uptr)0)&3)==0) #else -# define EIGHT_BYTE_ALIGNMENT(X) ((((char*)(X) - (char*)0)&7)==0) +# define EIGHT_BYTE_ALIGNMENT(X) ((((uptr)(X) - (uptr)0)&7)==0) #endif /* @@ -14535,15 +14792,38 @@ SQLITE_PRIVATE u32 sqlite3TreeTrace; && (defined(SQLITE_TEST) || defined(SQLITE_ENABLE_SELECTTRACE) \ || defined(SQLITE_ENABLE_TREETRACE)) # define TREETRACE_ENABLED 1 -# define SELECTTRACE(K,P,S,X) \ +# define TREETRACE(K,P,S,X) \ if(sqlite3TreeTrace&(K)) \ sqlite3DebugPrintf("%u/%d/%p: ",(S)->selId,(P)->addrExplain,(S)),\ sqlite3DebugPrintf X #else -# define SELECTTRACE(K,P,S,X) +# define TREETRACE(K,P,S,X) # define TREETRACE_ENABLED 0 #endif +/* TREETRACE flag meanings: +** +** 0x00000001 Beginning and end of SELECT processing +** 0x00000002 WHERE clause processing +** 0x00000004 Query flattener +** 0x00000008 Result-set wildcard expansion +** 0x00000010 Query name resolution +** 0x00000020 Aggregate analysis +** 0x00000040 Window functions +** 0x00000080 Generated column names +** 0x00000100 Move HAVING terms into WHERE +** 0x00000200 Count-of-view optimization +** 0x00000400 Compound SELECT processing +** 0x00000800 Drop superfluous ORDER BY +** 0x00001000 LEFT JOIN simplifies to JOIN +** 0x00002000 Constant propagation +** 0x00004000 Push-down optimization +** 0x00008000 After all FROM-clause analysis +** 0x00010000 Beginning of DELETE/INSERT/UPDATE processing +** 0x00020000 Transform DISTINCT into GROUP BY +** 0x00040000 SELECT tree dump after all code has been generated +*/ + /* ** Macros for "wheretrace" */ @@ -14556,6 +14836,36 @@ SQLITE_PRIVATE u32 sqlite3WhereTrace; # define WHERETRACE(K,X) #endif +/* +** Bits for the sqlite3WhereTrace mask: +** +** (---any--) Top-level block structure +** 0x-------F High-level debug messages +** 0x----FFF- More detail +** 0xFFFF---- Low-level debug messages +** +** 0x00000001 Code generation +** 0x00000002 Solver +** 0x00000004 Solver costs +** 0x00000008 WhereLoop inserts +** +** 0x00000010 Display sqlite3_index_info xBestIndex calls +** 0x00000020 Range an equality scan metrics +** 0x00000040 IN operator decisions +** 0x00000080 WhereLoop cost adjustements +** 0x00000100 +** 0x00000200 Covering index decisions +** 0x00000400 OR optimization +** 0x00000800 Index scanner +** 0x00001000 More details associated with code generation +** 0x00002000 +** 0x00004000 Show all WHERE terms at key points +** 0x00008000 Show the full SELECT statement at key places +** +** 0x00010000 Show more detail when printing WHERE terms +** 0x00020000 Show WHERE terms returned from whereScanNext() +*/ + /* ** An instance of the following structure is used to store the busy-handler @@ -14576,7 +14886,7 @@ struct BusyHandler { /* ** Name of table that holds the database schema. ** -** The PREFERRED names are used whereever possible. But LEGACY is also +** The PREFERRED names are used wherever possible. But LEGACY is also ** used for backwards compatibility. ** ** 1. Queries can use either the PREFERRED or the LEGACY names @@ -14690,6 +15000,7 @@ typedef struct Schema Schema; typedef struct Expr Expr; typedef struct ExprList ExprList; typedef struct FKey FKey; +typedef struct FpDecode FpDecode; typedef struct FuncDestructor FuncDestructor; typedef struct FuncDef FuncDef; typedef struct FuncDefHash FuncDefHash; @@ -14708,6 +15019,7 @@ typedef struct Parse Parse; typedef struct ParseCleanup ParseCleanup; typedef struct PreUpdate PreUpdate; typedef struct PrintfArguments PrintfArguments; +typedef struct RCStr RCStr; typedef struct RenameToken RenameToken; typedef struct Returning Returning; typedef struct RowSet RowSet; @@ -15345,6 +15657,10 @@ SQLITE_PRIVATE void sqlite3PagerRefdump(Pager*); # define enable_simulated_io_errors() #endif +#if defined(SQLITE_USE_SEH) && !defined(SQLITE_OMIT_WAL) +SQLITE_PRIVATE int sqlite3PagerWalSystemErrno(Pager*); +#endif + #endif /* SQLITE_PAGER_H */ /************** End of pager.h ***********************************************/ @@ -15536,7 +15852,7 @@ SQLITE_PRIVATE int sqlite3BtreeNewDb(Btree *p); ** reduce network bandwidth. ** ** Note that BTREE_HINT_FLAGS with BTREE_BULKLOAD is the only hint used by -** standard SQLite. The other hints are provided for extentions that use +** standard SQLite. The other hints are provided for extensions that use ** the SQLite parser and code generator but substitute their own storage ** engine. */ @@ -15674,15 +15990,21 @@ SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor*, int flags); SQLITE_PRIVATE i64 sqlite3BtreeIntegerKey(BtCursor*); SQLITE_PRIVATE void sqlite3BtreeCursorPin(BtCursor*); SQLITE_PRIVATE void sqlite3BtreeCursorUnpin(BtCursor*); -#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC SQLITE_PRIVATE i64 sqlite3BtreeOffset(BtCursor*); -#endif SQLITE_PRIVATE int sqlite3BtreePayload(BtCursor*, u32 offset, u32 amt, void*); SQLITE_PRIVATE const void *sqlite3BtreePayloadFetch(BtCursor*, u32 *pAmt); SQLITE_PRIVATE u32 sqlite3BtreePayloadSize(BtCursor*); SQLITE_PRIVATE sqlite3_int64 sqlite3BtreeMaxRecordSize(BtCursor*); -SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(sqlite3*,Btree*,Pgno*aRoot,int nRoot,int,int*); +SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck( + sqlite3 *db, /* Database connection that is running the check */ + Btree *p, /* The btree to be checked */ + Pgno *aRoot, /* An array of root pages numbers for individual trees */ + int nRoot, /* Number of entries in aRoot[] */ + int mxErr, /* Stop reporting errors after this many */ + int *pnErr, /* OUT: Write number of errors seen to this variable */ + char **pzOut /* OUT: Write the error message string here */ +); SQLITE_PRIVATE struct Pager *sqlite3BtreePager(Btree*); SQLITE_PRIVATE i64 sqlite3BtreeRowCountEst(BtCursor*); @@ -15839,14 +16161,14 @@ struct VdbeOp { #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS char *zComment; /* Comment to improve readability */ #endif -#ifdef VDBE_PROFILE - u32 cnt; /* Number of times this instruction was executed */ - u64 cycles; /* Total time spent executing this instruction */ -#endif #ifdef SQLITE_VDBE_COVERAGE u32 iSrcLine; /* Source-code line that generated this opcode ** with flags in the upper 8 bits */ #endif +#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || defined(VDBE_PROFILE) + u64 nExec; + u64 nCycle; +#endif }; typedef struct VdbeOp VdbeOp; @@ -16137,29 +16459,30 @@ typedef struct VdbeOpList VdbeOpList; #define OPFLG_IN3 0x08 /* in3: P3 is an input */ #define OPFLG_OUT2 0x10 /* out2: P2 is an output */ #define OPFLG_OUT3 0x20 /* out3: P3 is an output */ +#define OPFLG_NCYCLE 0x40 /* ncycle:Cycles count against P1 */ #define OPFLG_INITIALIZER {\ -/* 0 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,\ +/* 0 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x41, 0x00,\ /* 8 */ 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,\ -/* 16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0x09, 0x09, 0x09,\ -/* 24 */ 0x09, 0x01, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,\ -/* 32 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\ -/* 40 */ 0x01, 0x01, 0x01, 0x26, 0x26, 0x01, 0x23, 0x0b,\ +/* 16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0x49, 0x49, 0x49,\ +/* 24 */ 0x49, 0x01, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,\ +/* 32 */ 0x41, 0x01, 0x41, 0x41, 0x41, 0x01, 0x41, 0x41,\ +/* 40 */ 0x41, 0x41, 0x41, 0x26, 0x26, 0x41, 0x23, 0x0b,\ /* 48 */ 0x01, 0x01, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\ -/* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01,\ +/* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x03, 0x01, 0x41,\ /* 64 */ 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x00, 0x10,\ /* 72 */ 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x00,\ /* 80 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x02, 0x02,\ -/* 88 */ 0x02, 0x00, 0x00, 0x12, 0x1e, 0x20, 0x00, 0x00,\ -/* 96 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x26, 0x26,\ +/* 88 */ 0x02, 0x00, 0x00, 0x12, 0x1e, 0x20, 0x40, 0x00,\ +/* 96 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x40, 0x26, 0x26,\ /* 104 */ 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,\ -/* 112 */ 0x00, 0x00, 0x12, 0x00, 0x00, 0x10, 0x00, 0x00,\ -/* 120 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,\ -/* 128 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,\ -/* 136 */ 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x10, 0x00,\ +/* 112 */ 0x40, 0x00, 0x12, 0x40, 0x40, 0x10, 0x40, 0x00,\ +/* 120 */ 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x10, 0x10,\ +/* 128 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x50,\ +/* 136 */ 0x00, 0x40, 0x04, 0x04, 0x00, 0x40, 0x50, 0x40,\ /* 144 */ 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,\ /* 152 */ 0x00, 0x10, 0x00, 0x00, 0x06, 0x10, 0x00, 0x04,\ /* 160 */ 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ -/* 168 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,\ +/* 168 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x50, 0x40,\ /* 176 */ 0x00, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00,\ /* 184 */ 0x00, 0x00, 0x00,} @@ -16214,14 +16537,20 @@ SQLITE_PRIVATE void sqlite3VdbeNoJumpsOutsideSubrtn(Vdbe*,int,int,int); #endif SQLITE_PRIVATE VdbeOp *sqlite3VdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp,int iLineno); #ifndef SQLITE_OMIT_EXPLAIN -SQLITE_PRIVATE void sqlite3VdbeExplain(Parse*,u8,const char*,...); +SQLITE_PRIVATE int sqlite3VdbeExplain(Parse*,u8,const char*,...); SQLITE_PRIVATE void sqlite3VdbeExplainPop(Parse*); SQLITE_PRIVATE int sqlite3VdbeExplainParent(Parse*); # define ExplainQueryPlan(P) sqlite3VdbeExplain P +# ifdef SQLITE_ENABLE_STMT_SCANSTATUS +# define ExplainQueryPlan2(V,P) (V = sqlite3VdbeExplain P) +# else +# define ExplainQueryPlan2(V,P) ExplainQueryPlan(P) +# endif # define ExplainQueryPlanPop(P) sqlite3VdbeExplainPop(P) # define ExplainQueryPlanParent(P) sqlite3VdbeExplainParent(P) #else # define ExplainQueryPlan(P) +# define ExplainQueryPlan2(V,P) # define ExplainQueryPlanPop(P) # define ExplainQueryPlanParent(P) 0 # define sqlite3ExplainBreakpoint(A,B) /*no-op*/ @@ -16330,7 +16659,7 @@ SQLITE_PRIVATE void sqlite3VdbeNoopComment(Vdbe*, const char*, ...); ** The VdbeCoverage macros are used to set a coverage testing point ** for VDBE branch instructions. The coverage testing points are line ** numbers in the sqlite3.c source file. VDBE branch coverage testing -** only works with an amalagmation build. That's ok since a VDBE branch +** only works with an amalgamation build. That's ok since a VDBE branch ** coverage build designed for testing the test suite only. No application ** should ever ship with VDBE branch coverage measuring turned on. ** @@ -16348,7 +16677,7 @@ SQLITE_PRIVATE void sqlite3VdbeNoopComment(Vdbe*, const char*, ...); ** // NULL option is not possible ** ** VdbeCoverageEqNe(v) // Previous OP_Jump is only interested -** // in distingishing equal and not-equal. +** // in distinguishing equal and not-equal. ** ** Every VDBE branch operation must be tagged with one of the macros above. ** If not, then when "make test" is run with -DSQLITE_VDBE_COVERAGE and @@ -16358,7 +16687,7 @@ SQLITE_PRIVATE void sqlite3VdbeNoopComment(Vdbe*, const char*, ...); ** During testing, the test application will invoke ** sqlite3_test_control(SQLITE_TESTCTRL_VDBE_COVERAGE,...) to set a callback ** routine that is invoked as each bytecode branch is taken. The callback -** contains the sqlite3.c source line number ov the VdbeCoverage macro and +** contains the sqlite3.c source line number of the VdbeCoverage macro and ** flags to indicate whether or not the branch was taken. The test application ** is responsible for keeping track of this and reporting byte-code branches ** that are never taken. @@ -16394,14 +16723,22 @@ SQLITE_PRIVATE void sqlite3VdbeSetLineNumber(Vdbe*,int); #ifdef SQLITE_ENABLE_STMT_SCANSTATUS SQLITE_PRIVATE void sqlite3VdbeScanStatus(Vdbe*, int, int, int, LogEst, const char*); +SQLITE_PRIVATE void sqlite3VdbeScanStatusRange(Vdbe*, int, int, int); +SQLITE_PRIVATE void sqlite3VdbeScanStatusCounters(Vdbe*, int, int, int); #else -# define sqlite3VdbeScanStatus(a,b,c,d,e) +# define sqlite3VdbeScanStatus(a,b,c,d,e,f) +# define sqlite3VdbeScanStatusRange(a,b,c,d) +# define sqlite3VdbeScanStatusCounters(a,b,c,d) #endif #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE) SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE*, int, VdbeOp*); #endif +#if defined(SQLITE_ENABLE_CURSOR_HINTS) && defined(SQLITE_DEBUG) +SQLITE_PRIVATE int sqlite3CursorRangeHintExprCheck(Walker *pWalker, Expr *pExpr); +#endif + #endif /* SQLITE_VDBE_H */ /************** End of vdbe.h ************************************************/ @@ -16450,7 +16787,7 @@ struct PgHdr { ** private to pcache.c and should not be accessed by other modules. ** pCache is grouped with the public elements for efficiency. */ - i16 nRef; /* Number of users of this page */ + i64 nRef; /* Number of users of this page */ PgHdr *pDirtyNext; /* Next element in list of dirty pages */ PgHdr *pDirtyPrev; /* Previous element in list of dirty pages */ /* NB: pDirtyNext and pDirtyPrev are undefined if the @@ -16531,12 +16868,12 @@ SQLITE_PRIVATE void sqlite3PcacheClearSyncFlags(PCache *); SQLITE_PRIVATE void sqlite3PcacheClear(PCache*); /* Return the total number of outstanding page references */ -SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache*); +SQLITE_PRIVATE i64 sqlite3PcacheRefCount(PCache*); /* Increment the reference count of an existing page */ SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr*); -SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr*); +SQLITE_PRIVATE i64 sqlite3PcachePageRefcount(PgHdr*); /* Return the total number of pages stored in the cache */ SQLITE_PRIVATE int sqlite3PcachePagecount(PCache*); @@ -16689,7 +17026,7 @@ SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*); /* ** Default synchronous levels. ** -** Note that (for historcal reasons) the PAGER_SYNCHRONOUS_* macros differ +** Note that (for historical reasons) the PAGER_SYNCHRONOUS_* macros differ ** from the SQLITE_DEFAULT_SYNCHRONOUS value by 1. ** ** PAGER_SYNCHRONOUS DEFAULT_SYNCHRONOUS @@ -16728,7 +17065,7 @@ struct Db { ** An instance of the following structure stores a database schema. ** ** Most Schema objects are associated with a Btree. The exception is -** the Schema for the TEMP databaes (sqlite3.aDb[1]) which is free-standing. +** the Schema for the TEMP database (sqlite3.aDb[1]) which is free-standing. ** In shared cache mode, a single Schema object can be shared by multiple ** Btrees that refer to the same underlying BtShared object. ** @@ -16839,7 +17176,7 @@ struct Lookaside { LookasideSlot *pInit; /* List of buffers not previously used */ LookasideSlot *pFree; /* List of available buffers */ #ifndef SQLITE_OMIT_TWOSIZE_LOOKASIDE - LookasideSlot *pSmallInit; /* List of small buffers not prediously used */ + LookasideSlot *pSmallInit; /* List of small buffers not previously used */ LookasideSlot *pSmallFree; /* List of available small buffers */ void *pMiddle; /* First byte past end of full-size buffers and ** the first byte of LOOKASIDE_SMALL buffers */ @@ -16856,7 +17193,7 @@ struct LookasideSlot { #define EnableLookaside db->lookaside.bDisable--;\ db->lookaside.sz=db->lookaside.bDisable?0:db->lookaside.szTrue -/* Size of the smaller allocations in two-size lookside */ +/* Size of the smaller allocations in two-size lookaside */ #ifdef SQLITE_OMIT_TWOSIZE_LOOKASIDE # define LOOKASIDE_SMALL 0 #else @@ -17111,7 +17448,7 @@ struct sqlite3 { #define SQLITE_NullCallback 0x00000100 /* Invoke the callback once if the */ /* result set is empty */ #define SQLITE_IgnoreChecks 0x00000200 /* Do not enforce check constraints */ -#define SQLITE_ReadUncommit 0x00000400 /* READ UNCOMMITTED in shared-cache */ +#define SQLITE_StmtScanStatus 0x00000400 /* Enable stmt_scanstats() counters */ #define SQLITE_NoCkptOnClose 0x00000800 /* No checkpoint on close()/DETACH */ #define SQLITE_ReverseOrder 0x00001000 /* Reverse unordered SELECTs */ #define SQLITE_RecTriggers 0x00002000 /* Enable recursive triggers */ @@ -17137,6 +17474,7 @@ struct sqlite3 { /* DELETE, or UPDATE and return */ /* the count using a callback. */ #define SQLITE_CorruptRdOnly HI(0x00002) /* Prohibit writes due to error */ +#define SQLITE_ReadUncommit HI(0x00004) /* READ UNCOMMITTED in shared-cache */ /* Flags used only if debugging */ #ifdef SQLITE_DEBUG @@ -17192,6 +17530,9 @@ struct sqlite3 { #define SQLITE_FlttnUnionAll 0x00800000 /* Disable the UNION ALL flattener */ /* TH3 expects this value ^^^^^^^^^^ See flatten04.test */ #define SQLITE_IndexedExpr 0x01000000 /* Pull exprs from index when able */ +#define SQLITE_Coroutines 0x02000000 /* Co-routines for subqueries */ +#define SQLITE_NullUnusedCols 0x04000000 /* NULL unused columns in subqueries */ +#define SQLITE_OnePass 0x08000000 /* Single-pass DELETE and UPDATE */ #define SQLITE_AllOpts 0xffffffff /* All optimizations */ /* @@ -17274,10 +17615,17 @@ struct FuncDestructor { ** SQLITE_FUNC_ANYORDER == NC_OrderAgg == SF_OrderByReqd ** SQLITE_FUNC_LENGTH == OPFLAG_LENGTHARG ** SQLITE_FUNC_TYPEOF == OPFLAG_TYPEOFARG +** SQLITE_FUNC_BYTELEN == OPFLAG_BYTELENARG ** SQLITE_FUNC_CONSTANT == SQLITE_DETERMINISTIC from the API ** SQLITE_FUNC_DIRECT == SQLITE_DIRECTONLY from the API -** SQLITE_FUNC_UNSAFE == SQLITE_INNOCUOUS +** SQLITE_FUNC_UNSAFE == SQLITE_INNOCUOUS -- opposite meanings!!! ** SQLITE_FUNC_ENCMASK depends on SQLITE_UTF* macros in the API +** +** Note that even though SQLITE_FUNC_UNSAFE and SQLITE_INNOCUOUS have the +** same bit value, their meanings are inverted. SQLITE_FUNC_UNSAFE is +** used internally and if set means that the function has side effects. +** SQLITE_INNOCUOUS is used by application code and means "not unsafe". +** See multiple instances of tag-20230109-1. */ #define SQLITE_FUNC_ENCMASK 0x0003 /* SQLITE_UTF8, SQLITE_UTF16BE or UTF16LE */ #define SQLITE_FUNC_LIKE 0x0004 /* Candidate for the LIKE optimization */ @@ -17286,6 +17634,7 @@ struct FuncDestructor { #define SQLITE_FUNC_NEEDCOLL 0x0020 /* sqlite3GetFuncCollSeq() might be called*/ #define SQLITE_FUNC_LENGTH 0x0040 /* Built-in length() function */ #define SQLITE_FUNC_TYPEOF 0x0080 /* Built-in typeof() function */ +#define SQLITE_FUNC_BYTELEN 0x00c0 /* Built-in octet_length() function */ #define SQLITE_FUNC_COUNT 0x0100 /* Built-in count(*) aggregate */ /* 0x0200 -- available for reuse */ #define SQLITE_FUNC_UNLIKELY 0x0400 /* Built-in unlikely() function */ @@ -17394,7 +17743,7 @@ struct FuncDestructor { {nArg, SQLITE_FUNC_BUILTIN|SQLITE_FUNC_CONSTANT|SQLITE_UTF8, \ xPtr, 0, xFunc, 0, 0, 0, #zName, {0} } #define JFUNCTION(zName, nArg, iArg, xFunc) \ - {nArg, SQLITE_FUNC_BUILTIN|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS|\ + {nArg, SQLITE_FUNC_BUILTIN|SQLITE_DETERMINISTIC|\ SQLITE_FUNC_CONSTANT|SQLITE_UTF8, \ SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, 0, #zName, {0} } #define INLINE_FUNC(zName, nArg, iArg, mFlags) \ @@ -17586,6 +17935,7 @@ struct CollSeq { #define SQLITE_AFF_NUMERIC 0x43 /* 'C' */ #define SQLITE_AFF_INTEGER 0x44 /* 'D' */ #define SQLITE_AFF_REAL 0x45 /* 'E' */ +#define SQLITE_AFF_FLEXNUM 0x46 /* 'F' */ #define sqlite3IsNumericAffinity(X) ((X)>=SQLITE_AFF_NUMERIC) @@ -17656,6 +18006,7 @@ struct VTable { sqlite3_vtab *pVtab; /* Pointer to vtab instance */ int nRef; /* Number of pointers to this structure */ u8 bConstraint; /* True if constraints are supported */ + u8 bAllSchemas; /* True if might use any attached schema */ u8 eVtabRisk; /* Riskiness of allowing hacker access */ int iSavepoint; /* Depth of the SAVEPOINT stack */ VTable *pNext; /* Next in linked list (see above) */ @@ -17863,7 +18214,7 @@ struct FKey { ** foreign key. ** ** The OE_Default value is a place holder that means to use whatever -** conflict resolution algorthm is required from context. +** conflict resolution algorithm is required from context. ** ** The following symbolic values are used to record which type ** of conflict resolution action to take. @@ -18036,6 +18387,7 @@ struct Index { ** expression, or a reference to a VIRTUAL column */ #ifdef SQLITE_ENABLE_STAT4 int nSample; /* Number of elements in aSample[] */ + int mxSample; /* Number of slots allocated to aSample[] */ int nSampleCol; /* Size of IndexSample.anEq[] and so on */ tRowcnt *aAvgEq; /* Average nEq values for keys not in aSample */ IndexSample *aSample; /* Samples of the left-most key */ @@ -18117,16 +18469,15 @@ struct AggInfo { ** from source tables rather than from accumulators */ u8 useSortingIdx; /* In direct mode, reference the sorting index rather ** than the source table */ + u16 nSortingColumn; /* Number of columns in the sorting index */ int sortingIdx; /* Cursor number of the sorting index */ int sortingIdxPTab; /* Cursor number of pseudo-table */ - int nSortingColumn; /* Number of columns in the sorting index */ - int mnReg, mxReg; /* Range of registers allocated for aCol and aFunc */ + int iFirstReg; /* First register in range for aCol[] and aFunc[] */ ExprList *pGroupBy; /* The group by clause */ struct AggInfo_col { /* For each column used in source tables */ Table *pTab; /* Source table */ Expr *pCExpr; /* The original expression */ int iTable; /* Cursor number of the source table */ - int iMem; /* Memory location that acts as accumulator */ i16 iColumn; /* Column number within the source table */ i16 iSorterColumn; /* Column number in the sorting index */ } *aCol; @@ -18137,14 +18488,27 @@ struct AggInfo { struct AggInfo_func { /* For each aggregate function */ Expr *pFExpr; /* Expression encoding the function */ FuncDef *pFunc; /* The aggregate function implementation */ - int iMem; /* Memory location that acts as accumulator */ int iDistinct; /* Ephemeral table used to enforce DISTINCT */ int iDistAddr; /* Address of OP_OpenEphemeral */ } *aFunc; int nFunc; /* Number of entries in aFunc[] */ u32 selId; /* Select to which this AggInfo belongs */ +#ifdef SQLITE_DEBUG + Select *pSelect; /* SELECT statement that this AggInfo supports */ +#endif }; +/* +** Macros to compute aCol[] and aFunc[] register numbers. +** +** These macros should not be used prior to the call to +** assignAggregateRegisters() that computes the value of pAggInfo->iFirstReg. +** The assert()s that are part of this macro verify that constraint. +*/ +#define AggInfoColumnReg(A,I) (assert((A)->iFirstReg),(A)->iFirstReg+(I)) +#define AggInfoFuncReg(A,I) \ + (assert((A)->iFirstReg),(A)->iFirstReg+(A)->nColumn+(I)) + /* ** The datatype ynVar is a signed integer, either 16-bit or 32-bit. ** Usually it is 16-bits. But if SQLITE_MAX_VARIABLE_NUMBER is greater @@ -18264,7 +18628,7 @@ struct Expr { ** TK_REGISTER: register number ** TK_TRIGGER: 1 -> new, 0 -> old ** EP_Unlikely: 134217728 times likelihood - ** TK_IN: ephemerial table holding RHS + ** TK_IN: ephemeral table holding RHS ** TK_SELECT_COLUMN: Number of columns on the LHS ** TK_SELECT: 1st register of result vector */ ynVar iColumn; /* TK_COLUMN: column index. -1 for rowid. @@ -18346,6 +18710,8 @@ struct Expr { */ #define ExprUseUToken(E) (((E)->flags&EP_IntValue)==0) #define ExprUseUValue(E) (((E)->flags&EP_IntValue)!=0) +#define ExprUseWOfst(E) (((E)->flags&(EP_InnerON|EP_OuterON))==0) +#define ExprUseWJoin(E) (((E)->flags&(EP_InnerON|EP_OuterON))!=0) #define ExprUseXList(E) (((E)->flags&EP_xIsSelect)==0) #define ExprUseXSelect(E) (((E)->flags&EP_xIsSelect)!=0) #define ExprUseYTab(E) (((E)->flags&(EP_WinFunc|EP_Subrtn))==0) @@ -18534,7 +18900,7 @@ struct SrcItem { unsigned notCte :1; /* This item may not match a CTE */ unsigned isUsing :1; /* u3.pUsing is valid */ unsigned isOn :1; /* u3.pOn was once valid and non-NULL */ - unsigned isSynthUsing :1; /* u3.pUsing is synthensized from NATURAL */ + unsigned isSynthUsing :1; /* u3.pUsing is synthesized from NATURAL */ unsigned isNestedFrom :1; /* pSelect is a SF_NestedFrom subquery */ } fg; int iCursor; /* The VDBE cursor number used to access this table */ @@ -18675,7 +19041,7 @@ struct NameContext { #define NC_HasAgg 0x000010 /* One or more aggregate functions seen */ #define NC_IdxExpr 0x000020 /* True if resolving columns of CREATE INDEX */ #define NC_SelfRef 0x00002e /* Combo: PartIdx, isCheck, GenCol, and IdxExpr */ -#define NC_VarSelect 0x000040 /* A correlated subquery has been seen */ +#define NC_Subquery 0x000040 /* A subquery has been seen */ #define NC_UEList 0x000080 /* True if uNC.pEList is used */ #define NC_UAggInfo 0x000100 /* True if uNC.pAggInfo is used */ #define NC_UUpsert 0x000200 /* True if uNC.pUpsert is used */ @@ -18804,6 +19170,7 @@ struct Select { #define SF_MultiPart 0x2000000 /* Has multiple incompatible PARTITIONs */ #define SF_CopyCte 0x4000000 /* SELECT statement is a copy of a CTE */ #define SF_OrderByReqd 0x8000000 /* The ORDER BY clause may not be omitted */ +#define SF_UpdateFrom 0x10000000 /* Query originates with UPDATE FROM */ /* True if S exists and has SF_NestedFrom */ #define IsNestedFrom(S) ((S)!=0 && ((S)->selFlags&SF_NestedFrom)!=0) @@ -18912,7 +19279,7 @@ struct SelectDest { int iSDParm2; /* A second parameter for the eDest disposal method */ int iSdst; /* Base register where results are written */ int nSdst; /* Number of registers allocated */ - char *zAffSdst; /* Affinity used for SRT_Set, SRT_Table, and similar */ + char *zAffSdst; /* Affinity used for SRT_Set */ ExprList *pOrderBy; /* Key columns for SRT_Queue and SRT_DistQueue */ }; @@ -18971,10 +19338,10 @@ struct TriggerPrg { #else typedef unsigned int yDbMask; # define DbMaskTest(M,I) (((M)&(((yDbMask)1)<<(I)))!=0) -# define DbMaskZero(M) (M)=0 -# define DbMaskSet(M,I) (M)|=(((yDbMask)1)<<(I)) -# define DbMaskAllZero(M) (M)==0 -# define DbMaskNonZero(M) (M)!=0 +# define DbMaskZero(M) ((M)=0) +# define DbMaskSet(M,I) ((M)|=(((yDbMask)1)<<(I))) +# define DbMaskAllZero(M) ((M)==0) +# define DbMaskNonZero(M) ((M)!=0) #endif /* @@ -18993,6 +19360,7 @@ struct IndexedExpr { int iIdxCur; /* The index cursor */ int iIdxCol; /* The index column that contains value of pExpr */ u8 bMaybeNullRow; /* True if we need an OP_IfNullRow check */ + u8 aff; /* Affinity of the pExpr expression */ IndexedExpr *pIENext; /* Next in a list of all indexed expressions */ #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS const char *zIdxName; /* Name of index, used only for bytecode comments */ @@ -19044,6 +19412,9 @@ struct Parse { u8 withinRJSubrtn; /* Nesting level for RIGHT JOIN body subroutines */ #if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST) u8 earlyCleanup; /* OOM inside sqlite3ParserAddCleanup() */ +#endif +#ifdef SQLITE_DEBUG + u8 ifNotExists; /* Might be true if IF NOT EXISTS. Assert()s only */ #endif int nRangeReg; /* Size of the temporary register block */ int iRangeReg; /* First register in temporary register block */ @@ -19057,7 +19428,7 @@ struct Parse { int nLabelAlloc; /* Number of slots in aLabel */ int *aLabel; /* Space to hold the labels */ ExprList *pConstExpr;/* Constant expressions */ - IndexedExpr *pIdxExpr;/* List of expressions used by active indexes */ + IndexedExpr *pIdxEpr;/* List of expressions used by active indexes */ Token constraintName;/* Name of the constraint currently being parsed */ yDbMask writeMask; /* Start a write transaction on these databases */ yDbMask cookieMask; /* Bitmask of schema verified databases */ @@ -19065,6 +19436,9 @@ struct Parse { int regRoot; /* Register holding root page number for new objects */ int nMaxArg; /* Max args passed to user function by sub-program */ int nSelect; /* Number of SELECT stmts. Counter for Select.selId */ +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + u32 nProgressSteps; /* xProgress steps taken during sqlite3_prepare() */ +#endif #ifndef SQLITE_OMIT_SHARED_CACHE int nTableLock; /* Number of locks in aTableLock */ TableLock *aTableLock; /* Required table locks for shared-cache mode */ @@ -19078,9 +19452,9 @@ struct Parse { int addrCrTab; /* Address of OP_CreateBtree on CREATE TABLE */ Returning *pReturning; /* The RETURNING clause */ } u1; - u32 nQueryLoop; /* Est number of iterations of a query (10*log2(N)) */ u32 oldmask; /* Mask of old.* columns referenced */ u32 newmask; /* Mask of new.* columns referenced */ + LogEst nQueryLoop; /* Est number of iterations of a query (10*log2(N)) */ u8 eTriggerOp; /* TK_UPDATE, TK_INSERT or TK_DELETE */ u8 bReturning; /* Coding a RETURNING trigger */ u8 eOrconf; /* Default ON CONFLICT policy for trigger steps */ @@ -19204,6 +19578,7 @@ struct AuthContext { #define OPFLAG_ISNOOP 0x40 /* OP_Delete does pre-update-hook only */ #define OPFLAG_LENGTHARG 0x40 /* OP_Column only used for length() */ #define OPFLAG_TYPEOFARG 0x80 /* OP_Column only used for typeof() */ +#define OPFLAG_BYTELENARG 0xc0 /* OP_Column only for octet_length() */ #define OPFLAG_BULKCSR 0x01 /* OP_Open** used to open bulk cursor */ #define OPFLAG_SEEKEQ 0x02 /* OP_Open** cursor uses EQ seek only */ #define OPFLAG_FORDELETE 0x08 /* OP_Open should use BTREE_FORDELETE */ @@ -19346,6 +19721,25 @@ struct sqlite3_str { #define isMalloced(X) (((X)->printfFlags & SQLITE_PRINTF_MALLOCED)!=0) +/* +** The following object is the header for an "RCStr" or "reference-counted +** string". An RCStr is passed around and used like any other char* +** that has been dynamically allocated. The important interface +** differences: +** +** 1. RCStr strings are reference counted. They are deallocated +** when the reference count reaches zero. +** +** 2. Use sqlite3RCStrUnref() to free an RCStr string rather than +** sqlite3_free() +** +** 3. Make a (read-only) copy of a read-only RCStr string using +** sqlite3RCStrRef(). +*/ +struct RCStr { + u64 nRCRef; /* Number of references */ + /* Total structure size should be a multiple of 8 bytes for alignment */ +}; /* ** A pointer to this structure is used to communicate information @@ -19372,7 +19766,7 @@ typedef struct { /* Tuning parameters are set using SQLITE_TESTCTRL_TUNE and are controlled ** on debug-builds of the CLI using ".testctrl tune ID VALUE". Tuning ** parameters are for temporary use during development, to help find -** optimial values for parameters in the query planner. The should not +** optimal values for parameters in the query planner. The should not ** be used on trunk check-ins. They are a temporary mechanism available ** for transient development builds only. ** @@ -19398,6 +19792,7 @@ struct Sqlite3Config { u8 bUseCis; /* Use covering indices for full-scans */ u8 bSmallMalloc; /* Avoid large memory allocations if true */ u8 bExtraSchemaChecks; /* Verify type,name,tbl_name in schema */ + u8 bUseLongDouble; /* Make use of long double */ int mxStrlen; /* Maximum string length */ int neverCorrupt; /* Database is always well-formed */ int szLookaside; /* Default lookaside buffer size */ @@ -19484,6 +19879,7 @@ struct Walker { void (*xSelectCallback2)(Walker*,Select*);/* Second callback for SELECTs */ int walkerDepth; /* Number of subqueries */ u16 eCode; /* A small processing code */ + u16 mWFlags; /* Use-dependent flags */ union { /* Extra data for callback */ NameContext *pNC; /* Naming context */ int n; /* A counter */ @@ -19502,6 +19898,7 @@ struct Walker { struct CoveringIndexCheck *pCovIdxCk; /* Check for covering index */ SrcItem *pSrcItem; /* A single FROM clause item */ DbFixer *pFix; /* See sqlite3FixSelect() */ + Mem *aMem; /* See sqlite3BtreeCursorHint() */ } u; }; @@ -19522,6 +19919,7 @@ struct DbFixer { /* Forward declarations */ SQLITE_PRIVATE int sqlite3WalkExpr(Walker*, Expr*); +SQLITE_PRIVATE int sqlite3WalkExprNN(Walker*, Expr*); SQLITE_PRIVATE int sqlite3WalkExprList(Walker*, ExprList*); SQLITE_PRIVATE int sqlite3WalkSelect(Walker*, Select*); SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker*, Select*); @@ -19771,6 +20169,8 @@ SQLITE_PRIVATE int sqlite3CorruptPgnoError(int,Pgno); # define sqlite3Isxdigit(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x08) # define sqlite3Tolower(x) (sqlite3UpperToLower[(unsigned char)(x)]) # define sqlite3Isquote(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x80) +# define sqlite3JsonId1(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x42) +# define sqlite3JsonId2(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x46) #else # define sqlite3Toupper(x) toupper((unsigned char)(x)) # define sqlite3Isspace(x) isspace((unsigned char)(x)) @@ -19780,6 +20180,8 @@ SQLITE_PRIVATE int sqlite3CorruptPgnoError(int,Pgno); # define sqlite3Isxdigit(x) isxdigit((unsigned char)(x)) # define sqlite3Tolower(x) tolower((unsigned char)(x)) # define sqlite3Isquote(x) ((x)=='"'||(x)=='\''||(x)=='['||(x)=='`') +# define sqlite3JsonId1(x) (sqlite3IsIdChar(x)&&(x)<'0') +# define sqlite3JsonId2(x) sqlite3IsIdChar(x) #endif SQLITE_PRIVATE int sqlite3IsIdChar(u8); @@ -19829,13 +20231,11 @@ SQLITE_PRIVATE int sqlite3HeapNearlyFull(void); #ifdef SQLITE_USE_ALLOCA # define sqlite3StackAllocRaw(D,N) alloca(N) # define sqlite3StackAllocRawNN(D,N) alloca(N) -# define sqlite3StackAllocZero(D,N) memset(alloca(N), 0, N) # define sqlite3StackFree(D,P) # define sqlite3StackFreeNN(D,P) #else # define sqlite3StackAllocRaw(D,N) sqlite3DbMallocRaw(D,N) # define sqlite3StackAllocRawNN(D,N) sqlite3DbMallocRawNN(D,N) -# define sqlite3StackAllocZero(D,N) sqlite3DbMallocZero(D,N) # define sqlite3StackFree(D,P) sqlite3DbFree(D,P) # define sqlite3StackFreeNN(D,P) sqlite3DbFreeNN(D,P) #endif @@ -19901,6 +20301,20 @@ struct PrintfArguments { sqlite3_value **apArg; /* The argument values */ }; +/* +** An instance of this object receives the decoding of a floating point +** value into an approximate decimal representation. +*/ +struct FpDecode { + char sign; /* '+' or '-' */ + char isSpecial; /* 1: Infinity 2: NaN */ + int n; /* Significant digits in the decode */ + int iDP; /* Location of the decimal point */ + char *z; /* Start of significant digits */ + char zBuf[24]; /* Storage for significant digits */ +}; + +SQLITE_PRIVATE void sqlite3FpDecode(FpDecode*,double,int,int); SQLITE_PRIVATE char *sqlite3MPrintf(sqlite3*,const char*, ...); SQLITE_PRIVATE char *sqlite3VMPrintf(sqlite3*,const char*, va_list); #if defined(SQLITE_DEBUG) || defined(SQLITE_HAVE_OS_TRACE) @@ -19960,6 +20374,7 @@ SQLITE_PRIVATE void sqlite3ShowWinFunc(const Window*); #endif SQLITE_PRIVATE void sqlite3SetString(char **, sqlite3*, const char*); +SQLITE_PRIVATE void sqlite3ProgressCheck(Parse*); SQLITE_PRIVATE void sqlite3ErrorMsg(Parse*, const char*, ...); SQLITE_PRIVATE int sqlite3ErrorToParser(sqlite3*,int); SQLITE_PRIVATE void sqlite3Dequote(char*); @@ -19974,6 +20389,10 @@ SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse*,int); SQLITE_PRIVATE int sqlite3GetTempRange(Parse*,int); SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse*,int,int); SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse*); +SQLITE_PRIVATE void sqlite3TouchRegister(Parse*,int); +#if defined(SQLITE_ENABLE_STAT4) || defined(SQLITE_DEBUG) +SQLITE_PRIVATE int sqlite3FirstAvailableRegister(Parse*,int); +#endif #ifdef SQLITE_DEBUG SQLITE_PRIVATE int sqlite3NoTempsInRange(Parse*,int,int); #endif @@ -20017,7 +20436,7 @@ SQLITE_PRIVATE const char *sqlite3ColumnColl(Column*); SQLITE_PRIVATE void sqlite3DeleteColumnNames(sqlite3*,Table*); SQLITE_PRIVATE void sqlite3GenerateColumnNames(Parse *pParse, Select *pSelect); SQLITE_PRIVATE int sqlite3ColumnsFromExprList(Parse*,ExprList*,i16*,Column**); -SQLITE_PRIVATE void sqlite3SelectAddColumnTypeAndCollation(Parse*,Table*,Select*,char); +SQLITE_PRIVATE void sqlite3SubqueryColumnTypes(Parse*,Table*,Select*,char); SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse*,Select*,char); SQLITE_PRIVATE void sqlite3OpenSchemaTable(Parse *, int); SQLITE_PRIVATE Index *sqlite3PrimaryKeyIndex(Table*); @@ -20124,7 +20543,7 @@ SQLITE_PRIVATE Select *sqlite3SelectNew(Parse*,ExprList*,SrcList*,Expr*,ExprList Expr*,ExprList*,u32,Expr*); SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3*, Select*); SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse*, SrcList*); -SQLITE_PRIVATE int sqlite3IsReadOnly(Parse*, Table*, int); +SQLITE_PRIVATE int sqlite3IsReadOnly(Parse*, Table*, Trigger*); SQLITE_PRIVATE void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int); #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) SQLITE_PRIVATE Expr *sqlite3LimitWhere(Parse*,SrcList*,Expr*,ExprList*,Expr*,char*); @@ -20186,7 +20605,7 @@ SQLITE_PRIVATE int sqlite3ExprCompare(const Parse*,const Expr*,const Expr*, int) SQLITE_PRIVATE int sqlite3ExprCompareSkip(Expr*,Expr*,int); SQLITE_PRIVATE int sqlite3ExprListCompare(const ExprList*,const ExprList*, int); SQLITE_PRIVATE int sqlite3ExprImpliesExpr(const Parse*,const Expr*,const Expr*, int); -SQLITE_PRIVATE int sqlite3ExprImpliesNonNullRow(Expr*,int); +SQLITE_PRIVATE int sqlite3ExprImpliesNonNullRow(Expr*,int,int); SQLITE_PRIVATE void sqlite3AggInfoPersistWalkerInit(Walker*,Parse*); SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext*, Expr*); SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext*,ExprList*); @@ -20213,7 +20632,7 @@ SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*); SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*, u8); SQLITE_PRIVATE int sqlite3ExprIsConstantOrGroupBy(Parse*, Expr*, ExprList*); SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr*,int); -SQLITE_PRIVATE int sqlite3ExprIsTableConstraint(Expr*,const SrcItem*); +SQLITE_PRIVATE int sqlite3ExprIsSingleTableConstraint(Expr*,const SrcList*,int); #ifdef SQLITE_ENABLE_CURSOR_HINTS SQLITE_PRIVATE int sqlite3ExprContainsSubquery(Expr*); #endif @@ -20335,9 +20754,10 @@ SQLITE_PRIVATE int sqlite3FixSrcList(DbFixer*, SrcList*); SQLITE_PRIVATE int sqlite3FixSelect(DbFixer*, Select*); SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*); SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*); + SQLITE_PRIVATE int sqlite3RealSameAsInt(double,sqlite3_int64); SQLITE_PRIVATE i64 sqlite3RealToI64(double); -SQLITE_PRIVATE void sqlite3Int64ToText(i64,char*); +SQLITE_PRIVATE int sqlite3Int64ToText(i64,char*); SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8); SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*); SQLITE_PRIVATE int sqlite3GetUInt32(const char*, u32*); @@ -20388,6 +20808,7 @@ SQLITE_PRIVATE char sqlite3CompareAffinity(const Expr *pExpr, char aff2); SQLITE_PRIVATE int sqlite3IndexAffinityOk(const Expr *pExpr, char idx_affinity); SQLITE_PRIVATE char sqlite3TableColumnAffinity(const Table*,int); SQLITE_PRIVATE char sqlite3ExprAffinity(const Expr *pExpr); +SQLITE_PRIVATE int sqlite3ExprDataType(const Expr *pExpr); SQLITE_PRIVATE int sqlite3Atoi64(const char*, i64*, int, u8); SQLITE_PRIVATE int sqlite3DecOrHexToI64(const char*, i64*); SQLITE_PRIVATE void sqlite3ErrorWithMsg(sqlite3*, int, const char*,...); @@ -20404,6 +20825,9 @@ SQLITE_PRIVATE const char *sqlite3ErrName(int); #ifndef SQLITE_OMIT_DESERIALIZE SQLITE_PRIVATE int sqlite3MemdbInit(void); +SQLITE_PRIVATE int sqlite3IsMemdb(const sqlite3_vfs*); +#else +# define sqlite3IsMemdb(X) 0 #endif SQLITE_PRIVATE const char *sqlite3ErrStr(int); @@ -20435,6 +20859,7 @@ SQLITE_PRIVATE void sqlite3FileSuffix3(const char*, char*); SQLITE_PRIVATE u8 sqlite3GetBoolean(const char *z,u8); SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value*, u8); +SQLITE_PRIVATE int sqlite3ValueIsOfClass(const sqlite3_value*, void(*)(void*)); SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value*, u8); SQLITE_PRIVATE void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8, void(*)(void*)); @@ -20542,8 +20967,13 @@ SQLITE_PRIVATE void sqlite3OomClear(sqlite3*); SQLITE_PRIVATE int sqlite3ApiExit(sqlite3 *db, int); SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *); +SQLITE_PRIVATE char *sqlite3RCStrRef(char*); +SQLITE_PRIVATE void sqlite3RCStrUnref(char*); +SQLITE_PRIVATE char *sqlite3RCStrNew(u64); +SQLITE_PRIVATE char *sqlite3RCStrResize(char*,u64); + SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum*, sqlite3*, char*, int, int); -SQLITE_PRIVATE int sqlite3StrAccumEnlarge(StrAccum*, int); +SQLITE_PRIVATE int sqlite3StrAccumEnlarge(StrAccum*, i64); SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum*); SQLITE_PRIVATE void sqlite3StrAccumSetError(StrAccum*, u8); SQLITE_PRIVATE void sqlite3ResultStrAccum(sqlite3_context*,StrAccum*); @@ -20657,10 +21087,7 @@ SQLITE_PRIVATE int sqlite3VtabCallDestroy(sqlite3*, int, const char *); SQLITE_PRIVATE int sqlite3VtabBegin(sqlite3 *, VTable *); SQLITE_PRIVATE FuncDef *sqlite3VtabOverloadFunction(sqlite3 *,FuncDef*, int nArg, Expr*); -#if (defined(SQLITE_ENABLE_DBPAGE_VTAB) || defined(SQLITE_TEST)) \ - && !defined(SQLITE_OMIT_VIRTUALTABLE) -SQLITE_PRIVATE void sqlite3VtabUsesAllSchemas(sqlite3_index_info*); -#endif +SQLITE_PRIVATE void sqlite3VtabUsesAllSchemas(Parse*); SQLITE_PRIVATE sqlite3_int64 sqlite3StmtCurrentTime(sqlite3_context*); SQLITE_PRIVATE int sqlite3VdbeParameterIndex(Vdbe*, const char*, int); SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *, sqlite3_stmt *); @@ -20796,6 +21223,7 @@ SQLITE_PRIVATE int sqlite3ExprCheckHeight(Parse*, int); #define sqlite3SelectExprHeight(x) 0 #define sqlite3ExprCheckHeight(x,y) #endif +SQLITE_PRIVATE void sqlite3ExprSetErrorOffset(Expr*,int); SQLITE_PRIVATE u32 sqlite3Get4byte(const u8*); SQLITE_PRIVATE void sqlite3Put4byte(u8*, u32); @@ -20901,6 +21329,18 @@ SQLITE_PRIVATE const char **sqlite3CompileOptions(int *pnOpt); SQLITE_PRIVATE int sqlite3KvvfsInit(void); #endif +#if defined(VDBE_PROFILE) \ + || defined(SQLITE_PERFORMANCE_TRACE) \ + || defined(SQLITE_ENABLE_STMT_SCANSTATUS) +SQLITE_PRIVATE sqlite3_uint64 sqlite3Hwtime(void); +#endif + +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS +# define IS_STMT_SCANSTATUS(db) (db->flags & SQLITE_StmtScanStatus) +#else +# define IS_STMT_SCANSTATUS(db) 0 +#endif + #endif /* SQLITEINT_H */ /************** End of sqliteInt.h *******************************************/ @@ -20942,101 +21382,6 @@ SQLITE_PRIVATE int sqlite3KvvfsInit(void); */ #ifdef SQLITE_PERFORMANCE_TRACE -/* -** hwtime.h contains inline assembler code for implementing -** high-performance timing routines. -*/ -/************** Include hwtime.h in the middle of os_common.h ****************/ -/************** Begin file hwtime.h ******************************************/ -/* -** 2008 May 27 -** -** The author disclaims copyright to this source code. In place of -** a legal notice, here is a blessing: -** -** May you do good and not evil. -** May you find forgiveness for yourself and forgive others. -** May you share freely, never taking more than you give. -** -****************************************************************************** -** -** This file contains inline asm code for retrieving "high-performance" -** counters for x86 and x86_64 class CPUs. -*/ -#ifndef SQLITE_HWTIME_H -#define SQLITE_HWTIME_H - -/* -** The following routine only works on pentium-class (or newer) processors. -** It uses the RDTSC opcode to read the cycle count value out of the -** processor and returns that value. This can be used for high-res -** profiling. -*/ -#if !defined(__STRICT_ANSI__) && \ - (defined(__GNUC__) || defined(_MSC_VER)) && \ - (defined(i386) || defined(__i386__) || defined(_M_IX86)) - - #if defined(__GNUC__) - - __inline__ sqlite_uint64 sqlite3Hwtime(void){ - unsigned int lo, hi; - __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi)); - return (sqlite_uint64)hi << 32 | lo; - } - - #elif defined(_MSC_VER) - - __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){ - __asm { - rdtsc - ret ; return value at EDX:EAX - } - } - - #endif - -#elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__x86_64__)) - - __inline__ sqlite_uint64 sqlite3Hwtime(void){ - unsigned long val; - __asm__ __volatile__ ("rdtsc" : "=A" (val)); - return val; - } - -#elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__ppc__)) - - __inline__ sqlite_uint64 sqlite3Hwtime(void){ - unsigned long long retval; - unsigned long junk; - __asm__ __volatile__ ("\n\ - 1: mftbu %1\n\ - mftb %L0\n\ - mftbu %0\n\ - cmpw %0,%1\n\ - bne 1b" - : "=r" (retval), "=r" (junk)); - return retval; - } - -#else - - /* - ** asm() is needed for hardware timing support. Without asm(), - ** disable the sqlite3Hwtime() routine. - ** - ** sqlite3Hwtime() is only used for some obscure debugging - ** and analysis configurations, not in any deliverable, so this - ** should not be a great loss. - */ -SQLITE_PRIVATE sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); } - -#endif - -#endif /* !defined(SQLITE_HWTIME_H) */ - -/************** End of hwtime.h **********************************************/ -/************** Continuing where we left off in os_common.h ******************/ - static sqlite_uint64 g_start; static sqlite_uint64 g_elapsed; #define TIMER_START g_start=sqlite3Hwtime() @@ -21164,9 +21509,6 @@ static const char * const sqlite3azCompileOpt[] = { #ifdef SQLITE_4_BYTE_ALIGNED_MALLOC "4_BYTE_ALIGNED_MALLOC", #endif -#ifdef SQLITE_64BIT_STATS - "64BIT_STATS", -#endif #ifdef SQLITE_ALLOW_COVERING_INDEX_SCAN # if SQLITE_ALLOW_COVERING_INDEX_SCAN != 1 "ALLOW_COVERING_INDEX_SCAN=" CTIMEOPT_VAL(SQLITE_ALLOW_COVERING_INDEX_SCAN), @@ -21503,6 +21845,9 @@ static const char * const sqlite3azCompileOpt[] = { #ifdef SQLITE_INTEGRITY_CHECK_ERROR_MAX "INTEGRITY_CHECK_ERROR_MAX=" CTIMEOPT_VAL(SQLITE_INTEGRITY_CHECK_ERROR_MAX), #endif +#ifdef SQLITE_LEGACY_JSON_VALID + "LEGACY_JSON_VALID", +#endif #ifdef SQLITE_LIKE_DOESNT_MATCH_BLOBS "LIKE_DOESNT_MATCH_BLOBS", #endif @@ -21991,7 +22336,7 @@ SQLITE_PRIVATE const unsigned char *sqlite3aGTb = &sqlite3UpperToLower[256+12-OP ** isalnum() 0x06 ** isxdigit() 0x08 ** toupper() 0x20 -** SQLite identifier character 0x40 +** SQLite identifier character 0x40 $, _, or non-ascii ** Quote character 0x80 ** ** Bit 0x20 is set if the mapped character requires translation to upper @@ -22137,6 +22482,7 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = { SQLITE_ALLOW_COVERING_INDEX_SCAN, /* bUseCis */ 0, /* bSmallMalloc */ 1, /* bExtraSchemaChecks */ + sizeof(LONGDOUBLE_TYPE)>8, /* bUseLongDouble */ 0x7ffffffe, /* mxStrlen */ 0, /* neverCorrupt */ SQLITE_DEFAULT_LOOKASIDE, /* szLookaside, nLookaside */ @@ -22185,7 +22531,7 @@ SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = { SQLITE_DEFAULT_SORTERREF_SIZE, /* szSorterRef */ 0, /* iPrngSeed */ #ifdef SQLITE_DEBUG - {0,0,0,0,0,0} /* aTune */ + {0,0,0,0,0,0}, /* aTune */ #endif }; @@ -22366,6 +22712,9 @@ typedef struct VdbeSorter VdbeSorter; /* Elements of the linked list at Vdbe.pAuxData */ typedef struct AuxData AuxData; +/* A cache of large TEXT or BLOB values in a VdbeCursor */ +typedef struct VdbeTxtBlbCache VdbeTxtBlbCache; + /* Types of VDBE cursors */ #define CURTYPE_BTREE 0 #define CURTYPE_SORTER 1 @@ -22397,6 +22746,7 @@ struct VdbeCursor { Bool useRandomRowid:1; /* Generate new record numbers semi-randomly */ Bool isOrdered:1; /* True if the table is not BTREE_UNORDERED */ Bool noReuse:1; /* OpenEphemeral may not reuse this cursor */ + Bool colCache:1; /* pCache pointer is initialized and non-NULL */ u16 seekHit; /* See the OP_SeekHit and OP_IfNoHope opcodes */ union { /* pBtx for isEphermeral. pAltMap otherwise */ Btree *pBtx; /* Separate file holding temporary table */ @@ -22437,6 +22787,7 @@ struct VdbeCursor { #ifdef SQLITE_ENABLE_COLUMN_USED_MASK u64 maskUsed; /* Mask of columns used by this cursor */ #endif + VdbeTxtBlbCache *pCache; /* Cache of large TEXT or BLOB values */ /* 2*nField extra array elements allocated for aType[], beyond the one ** static element declared in the structure. nField total array slots for @@ -22449,12 +22800,25 @@ struct VdbeCursor { #define IsNullCursor(P) \ ((P)->eCurType==CURTYPE_PSEUDO && (P)->nullRow && (P)->seekResult==0) - /* ** A value for VdbeCursor.cacheStatus that means the cache is always invalid. */ #define CACHE_STALE 0 +/* +** Large TEXT or BLOB values can be slow to load, so we want to avoid +** loading them more than once. For that reason, large TEXT and BLOB values +** can be stored in a cache defined by this object, and attached to the +** VdbeCursor using the pCache field. +*/ +struct VdbeTxtBlbCache { + char *pCValue; /* A RCStr buffer to hold the value */ + i64 iOffset; /* File offset of the row being cached */ + int iCol; /* Column for which the cache is valid */ + u32 cacheStatus; /* Vdbe.cacheCtr value */ + u32 colCacheCtr; /* Column cache counter */ +}; + /* ** When a sub-program is executed (OP_Program), a structure of this type ** is allocated to store the current value of the program counter, as @@ -22481,7 +22845,6 @@ struct VdbeFrame { Vdbe *v; /* VM this frame belongs to */ VdbeFrame *pParent; /* Parent of this frame, or NULL if parent is main */ Op *aOp; /* Program instructions for parent frame */ - i64 *anExec; /* Event counters from parent frame */ Mem *aMem; /* Array of memory cells for parent frame */ VdbeCursor **apCsr; /* Array of Vdbe cursors for parent frame */ u8 *aOnce; /* Bitmask used by OP_Once */ @@ -22697,10 +23060,19 @@ typedef unsigned bft; /* Bit Field Type */ /* The ScanStatus object holds a single value for the ** sqlite3_stmt_scanstatus() interface. +** +** aAddrRange[]: +** This array is used by ScanStatus elements associated with EQP +** notes that make an SQLITE_SCANSTAT_NCYCLE value available. It is +** an array of up to 3 ranges of VM addresses for which the Vdbe.anCycle[] +** values should be summed to calculate the NCYCLE value. Each pair of +** integer addresses is a start and end address (both inclusive) for a range +** instructions. A start value of 0 indicates an empty range. */ typedef struct ScanStatus ScanStatus; struct ScanStatus { int addrExplain; /* OP_Explain for loop */ + int aAddrRange[6]; int addrLoop; /* Address of "loops" counter */ int addrVisit; /* Address of "rows visited" counter */ int iSelectID; /* The "Select-ID" for this loop */ @@ -22756,7 +23128,7 @@ struct Vdbe { int nOp; /* Number of instructions in the program */ int nOpAlloc; /* Slots allocated for aOp[] */ Mem *aColName; /* Column names to return */ - Mem *pResultSet; /* Pointer to an array of results */ + Mem *pResultRow; /* Current output row */ char *zErrMsg; /* Error message written here */ VList *pVList; /* Name of variables */ #ifndef SQLITE_OMIT_TRACE @@ -22767,16 +23139,18 @@ struct Vdbe { u32 nWrite; /* Number of write operations that have occurred */ #endif u16 nResColumn; /* Number of columns in one row of the result set */ + u16 nResAlloc; /* Column slots allocated to aColName[] */ u8 errorAction; /* Recovery action to do in case of an error */ u8 minWriteFileFormat; /* Minimum file format for writable database files */ u8 prepFlags; /* SQLITE_PREPARE_* flags */ u8 eVdbeState; /* On of the VDBE_*_STATE values */ bft expired:2; /* 1: recompile VM immediately 2: when convenient */ - bft explain:2; /* True if EXPLAIN present on SQL command */ + bft explain:2; /* 0: normal, 1: EXPLAIN, 2: EXPLAIN QUERY PLAN */ bft changeCntOn:1; /* True to update the change-counter */ bft usesStmtJournal:1; /* True if uses a statement journal */ bft readOnly:1; /* True for statements that do not write */ bft bIsReader:1; /* True for statements that read */ + bft haveEqpOps:1; /* Bytecode supports EXPLAIN QUERY PLAN */ yDbMask btreeMask; /* Bitmask of db->aDb[] entries referenced */ yDbMask lockMask; /* Subset of btreeMask that requires a lock */ u32 aCounter[9]; /* Counters used by sqlite3_stmt_status() */ @@ -22793,7 +23167,6 @@ struct Vdbe { SubProgram *pProgram; /* Linked list of all sub-programs used by VM */ AuxData *pAuxData; /* Linked list of auxdata allocations */ #ifdef SQLITE_ENABLE_STMT_SCANSTATUS - i64 *anExec; /* Number of times each op has been executed */ int nScan; /* Entries in aScan[] */ ScanStatus *aScan; /* Scan definitions for sqlite3_stmt_scanstatus() */ #endif @@ -22824,7 +23197,7 @@ struct PreUpdate { i64 iKey1; /* First key value passed to hook */ i64 iKey2; /* Second key value passed to hook */ Mem *aNew; /* Array of new.* values */ - Table *pTab; /* Schema object being upated */ + Table *pTab; /* Schema object being updated */ Index *pPk; /* PK index if pTab is WITHOUT ROWID */ }; @@ -22914,6 +23287,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemSetZeroBlob(Mem*,int); SQLITE_PRIVATE int sqlite3VdbeMemIsRowSet(const Mem*); #endif SQLITE_PRIVATE int sqlite3VdbeMemSetRowSet(Mem*); +SQLITE_PRIVATE void sqlite3VdbeMemZeroTerminateIfAble(Mem*); SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem*); SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem*, u8, u8); SQLITE_PRIVATE int sqlite3IntFloatCompare(i64,double); @@ -22960,6 +23334,8 @@ SQLITE_PRIVATE int sqlite3VdbeSorterRewind(const VdbeCursor *, int *); SQLITE_PRIVATE int sqlite3VdbeSorterWrite(const VdbeCursor *, Mem *); SQLITE_PRIVATE int sqlite3VdbeSorterCompare(const VdbeCursor *, Mem *, int, int *); +SQLITE_PRIVATE void sqlite3VdbeValueListFree(void*); + #ifdef SQLITE_DEBUG SQLITE_PRIVATE void sqlite3VdbeIncrWriteCounter(Vdbe*, VdbeCursor*); SQLITE_PRIVATE void sqlite3VdbeAssertAbortable(Vdbe*); @@ -23475,6 +23851,7 @@ struct DateTime { char validTZ; /* True (1) if tz is valid */ char tzSet; /* Timezone was set explicitly */ char isError; /* An overflow has occurred */ + char useSubsec; /* Display subsecond precision */ }; @@ -23507,8 +23884,8 @@ struct DateTime { */ static int getDigits(const char *zDate, const char *zFormat, ...){ /* The aMx[] array translates the 3rd character of each format - ** spec into a max size: a b c d e f */ - static const u16 aMx[] = { 12, 14, 24, 31, 59, 9999 }; + ** spec into a max size: a b c d e f */ + static const u16 aMx[] = { 12, 14, 24, 31, 59, 14712 }; va_list ap; int cnt = 0; char nextC; @@ -23789,6 +24166,11 @@ static int parseDateOrTime( }else if( sqlite3AtoF(zDate, &r, sqlite3Strlen30(zDate), SQLITE_UTF8)>0 ){ setRawDateNumber(p, r); return 0; + }else if( (sqlite3StrICmp(zDate,"subsec")==0 + || sqlite3StrICmp(zDate,"subsecond")==0) + && sqlite3NotPureFunc(context) ){ + p->useSubsec = 1; + return setDateTimeToCurrent(context, p); } return 1; } @@ -23844,17 +24226,14 @@ static void computeYMD(DateTime *p){ ** Compute the Hour, Minute, and Seconds from the julian day number. */ static void computeHMS(DateTime *p){ - int s; + int day_ms, day_min; /* milliseconds, minutes into the day */ if( p->validHMS ) return; computeJD(p); - s = (int)((p->iJD + 43200000) % 86400000); - p->s = s/1000.0; - s = (int)p->s; - p->s -= s; - p->h = s/3600; - s -= p->h*3600; - p->m = s/60; - p->s += s - p->m*60; + day_ms = (int)((p->iJD + 43200000) % 86400000); + p->s = (day_ms % 60000)/1000.0; + day_min = day_ms/60000; + p->m = day_min % 60; + p->h = day_min / 60; p->rawS = 0; p->validHMS = 1; } @@ -24033,6 +24412,25 @@ static const struct { { 4, "year", 14713.0, 31536000.0 }, }; +/* +** If the DateTime p is raw number, try to figure out if it is +** a julian day number of a unix timestamp. Set the p value +** appropriately. +*/ +static void autoAdjustDate(DateTime *p){ + if( !p->rawS || p->validJD ){ + p->rawS = 0; + }else if( p->s>=-21086676*(i64)10000 /* -4713-11-24 12:00:00 */ + && p->s<=(25340230*(i64)10000)+799 /* 9999-12-31 23:59:59 */ + ){ + double r = p->s*1000.0 + 210866760000000.0; + clearYMD_HMS_TZ(p); + p->iJD = (sqlite3_int64)(r + 0.5); + p->validJD = 1; + p->rawS = 0; + } +} + /* ** Process a modifier to a date-time stamp. The modifiers are ** as follows: @@ -24076,19 +24474,8 @@ static int parseModifier( */ if( sqlite3_stricmp(z, "auto")==0 ){ if( idx>1 ) return 1; /* IMP: R-33611-57934 */ - if( !p->rawS || p->validJD ){ - rc = 0; - p->rawS = 0; - }else if( p->s>=-21086676*(i64)10000 /* -4713-11-24 12:00:00 */ - && p->s<=(25340230*(i64)10000)+799 /* 9999-12-31 23:59:59 */ - ){ - r = p->s*1000.0 + 210866760000000.0; - clearYMD_HMS_TZ(p); - p->iJD = (sqlite3_int64)(r + 0.5); - p->validJD = 1; - p->rawS = 0; - rc = 0; - } + autoAdjustDate(p); + rc = 0; } break; } @@ -24147,7 +24534,7 @@ static int parseModifier( i64 iOrigJD; /* Original localtime */ i64 iGuess; /* Guess at the corresponding utc time */ int cnt = 0; /* Safety to prevent infinite loop */ - int iErr; /* Guess is off by this much */ + i64 iErr; /* Guess is off by this much */ computeJD(p); iGuess = iOrigJD = p->iJD; @@ -24203,8 +24590,22 @@ static int parseModifier( ** ** Move the date backwards to the beginning of the current day, ** or month or year. + ** + ** subsecond + ** subsec + ** + ** Show subsecond precision in the output of datetime() and + ** unixepoch() and strftime('%s'). */ - if( sqlite3_strnicmp(z, "start of ", 9)!=0 ) break; + if( sqlite3_strnicmp(z, "start of ", 9)!=0 ){ + if( sqlite3_stricmp(z, "subsec")==0 + || sqlite3_stricmp(z, "subsecond")==0 + ){ + p->useSubsec = 1; + rc = 0; + } + break; + } if( !p->validJD && !p->validYMD && !p->validHMS ) break; z += 9; computeYMD(p); @@ -24240,18 +24641,73 @@ static int parseModifier( case '9': { double rRounder; int i; - for(n=1; z[n] && z[n]!=':' && !sqlite3Isspace(z[n]); n++){} + int Y,M,D,h,m,x; + const char *z2 = z; + char z0 = z[0]; + for(n=1; z[n]; n++){ + if( z[n]==':' ) break; + if( sqlite3Isspace(z[n]) ) break; + if( z[n]=='-' ){ + if( n==5 && getDigits(&z[1], "40f", &Y)==1 ) break; + if( n==6 && getDigits(&z[1], "50f", &Y)==1 ) break; + } + } if( sqlite3AtoF(z, &r, n, SQLITE_UTF8)<=0 ){ - rc = 1; + assert( rc==1 ); break; } - if( z[n]==':' ){ + if( z[n]=='-' ){ + /* A modifier of the form (+|-)YYYY-MM-DD adds or subtracts the + ** specified number of years, months, and days. MM is limited to + ** the range 0-11 and DD is limited to 0-30. + */ + if( z0!='+' && z0!='-' ) break; /* Must start with +/- */ + if( n==5 ){ + if( getDigits(&z[1], "40f-20a-20d", &Y, &M, &D)!=3 ) break; + }else{ + assert( n==6 ); + if( getDigits(&z[1], "50f-20a-20d", &Y, &M, &D)!=3 ) break; + z++; + } + if( M>=12 ) break; /* M range 0..11 */ + if( D>=31 ) break; /* D range 0..30 */ + computeYMD_HMS(p); + p->validJD = 0; + if( z0=='-' ){ + p->Y -= Y; + p->M -= M; + D = -D; + }else{ + p->Y += Y; + p->M += M; + } + x = p->M>0 ? (p->M-1)/12 : (p->M-12)/12; + p->Y += x; + p->M -= x*12; + computeJD(p); + p->validHMS = 0; + p->validYMD = 0; + p->iJD += (i64)D*86400000; + if( z[11]==0 ){ + rc = 0; + break; + } + if( sqlite3Isspace(z[11]) + && getDigits(&z[12], "20c:20e", &h, &m)==2 + ){ + z2 = &z[12]; + n = 2; + }else{ + break; + } + } + if( z2[n]==':' ){ /* A modifier of the form (+|-)HH:MM:SS.FFF adds (or subtracts) the ** specified number of hours, minutes, seconds, and fractional seconds ** to the time. The ".FFF" may be omitted. The ":SS.FFF" may be ** omitted. */ - const char *z2 = z; + DateTime tx; sqlite3_int64 day; if( !sqlite3Isdigit(*z2) ) z2++; @@ -24261,7 +24717,7 @@ static int parseModifier( tx.iJD -= 43200000; day = tx.iJD/86400000; tx.iJD -= day*86400000; - if( z[0]=='-' ) tx.iJD = -tx.iJD; + if( z0=='-' ) tx.iJD = -tx.iJD; computeJD(p); clearYMD_HMS_TZ(p); p->iJD += tx.iJD; @@ -24277,7 +24733,7 @@ static int parseModifier( if( n>10 || n<3 ) break; if( sqlite3UpperToLower[(u8)z[n-1]]=='s' ) n--; computeJD(p); - rc = 1; + assert( rc==1 ); rRounder = r<0 ? -0.5 : +0.5; for(i=0; iM += (int)r; @@ -24402,7 +24857,11 @@ static void unixepochFunc( DateTime x; if( isDate(context, argc, argv, &x)==0 ){ computeJD(&x); - sqlite3_result_int64(context, x.iJD/1000 - 21086676*(i64)10000); + if( x.useSubsec ){ + sqlite3_result_double(context, (x.iJD - 21086676*(i64)10000000)/1000.0); + }else{ + sqlite3_result_int64(context, x.iJD/1000 - 21086676*(i64)10000); + } } } @@ -24418,8 +24877,8 @@ static void datetimeFunc( ){ DateTime x; if( isDate(context, argc, argv, &x)==0 ){ - int Y, s; - char zBuf[24]; + int Y, s, n; + char zBuf[32]; computeYMD_HMS(&x); Y = x.Y; if( Y<0 ) Y = -Y; @@ -24440,15 +24899,28 @@ static void datetimeFunc( zBuf[15] = '0' + (x.m/10)%10; zBuf[16] = '0' + (x.m)%10; zBuf[17] = ':'; - s = (int)x.s; - zBuf[18] = '0' + (s/10)%10; - zBuf[19] = '0' + (s)%10; - zBuf[20] = 0; + if( x.useSubsec ){ + s = (int)(1000.0*x.s + 0.5); + zBuf[18] = '0' + (s/10000)%10; + zBuf[19] = '0' + (s/1000)%10; + zBuf[20] = '.'; + zBuf[21] = '0' + (s/100)%10; + zBuf[22] = '0' + (s/10)%10; + zBuf[23] = '0' + (s)%10; + zBuf[24] = 0; + n = 24; + }else{ + s = (int)x.s; + zBuf[18] = '0' + (s/10)%10; + zBuf[19] = '0' + (s)%10; + zBuf[20] = 0; + n = 20; + } if( x.Y<0 ){ zBuf[0] = '-'; - sqlite3_result_text(context, zBuf, 20, SQLITE_TRANSIENT); + sqlite3_result_text(context, zBuf, n, SQLITE_TRANSIENT); }else{ - sqlite3_result_text(context, &zBuf[1], 19, SQLITE_TRANSIENT); + sqlite3_result_text(context, &zBuf[1], n-1, SQLITE_TRANSIENT); } } } @@ -24465,7 +24937,7 @@ static void timeFunc( ){ DateTime x; if( isDate(context, argc, argv, &x)==0 ){ - int s; + int s, n; char zBuf[16]; computeHMS(&x); zBuf[0] = '0' + (x.h/10)%10; @@ -24474,11 +24946,24 @@ static void timeFunc( zBuf[3] = '0' + (x.m/10)%10; zBuf[4] = '0' + (x.m)%10; zBuf[5] = ':'; - s = (int)x.s; - zBuf[6] = '0' + (s/10)%10; - zBuf[7] = '0' + (s)%10; - zBuf[8] = 0; - sqlite3_result_text(context, zBuf, 8, SQLITE_TRANSIENT); + if( x.useSubsec ){ + s = (int)(1000.0*x.s + 0.5); + zBuf[6] = '0' + (s/10000)%10; + zBuf[7] = '0' + (s/1000)%10; + zBuf[8] = '.'; + zBuf[9] = '0' + (s/100)%10; + zBuf[10] = '0' + (s/10)%10; + zBuf[11] = '0' + (s)%10; + zBuf[12] = 0; + n = 12; + }else{ + s = (int)x.s; + zBuf[6] = '0' + (s/10)%10; + zBuf[7] = '0' + (s)%10; + zBuf[8] = 0; + n = 8; + } + sqlite3_result_text(context, zBuf, n, SQLITE_TRANSIENT); } } @@ -24533,7 +25018,7 @@ static void dateFunc( ** %M minute 00-59 ** %s seconds since 1970-01-01 ** %S seconds 00-59 -** %w day of week 0-6 sunday==0 +** %w day of week 0-6 Sunday==0 ** %W week of year 00-53 ** %Y year 0000-9999 ** %% % @@ -24609,8 +25094,13 @@ static void strftimeFunc( break; } case 's': { - i64 iS = (i64)(x.iJD/1000 - 21086676*(i64)10000); - sqlite3_str_appendf(&sRes,"%lld",iS); + if( x.useSubsec ){ + sqlite3_str_appendf(&sRes,"%.3f", + (x.iJD - 21086676*(i64)10000000)/1000.0); + }else{ + i64 iS = (i64)(x.iJD/1000 - 21086676*(i64)10000); + sqlite3_str_appendf(&sRes,"%lld",iS); + } break; } case 'S': { @@ -24668,6 +25158,117 @@ static void cdateFunc( dateFunc(context, 0, 0); } +/* +** timediff(DATE1, DATE2) +** +** Return the amount of time that must be added to DATE2 in order to +** convert it into DATE2. The time difference format is: +** +** +YYYY-MM-DD HH:MM:SS.SSS +** +** The initial "+" becomes "-" if DATE1 occurs before DATE2. For +** date/time values A and B, the following invariant should hold: +** +** datetime(A) == (datetime(B, timediff(A,B)) +** +** Both DATE arguments must be either a julian day number, or an +** ISO-8601 string. The unix timestamps are not supported by this +** routine. +*/ +static void timediffFunc( + sqlite3_context *context, + int NotUsed1, + sqlite3_value **argv +){ + char sign; + int Y, M; + DateTime d1, d2; + sqlite3_str sRes; + UNUSED_PARAMETER(NotUsed1); + if( isDate(context, 1, &argv[0], &d1) ) return; + if( isDate(context, 1, &argv[1], &d2) ) return; + computeYMD_HMS(&d1); + computeYMD_HMS(&d2); + if( d1.iJD>=d2.iJD ){ + sign = '+'; + Y = d1.Y - d2.Y; + if( Y ){ + d2.Y = d1.Y; + d2.validJD = 0; + computeJD(&d2); + } + M = d1.M - d2.M; + if( M<0 ){ + Y--; + M += 12; + } + if( M!=0 ){ + d2.M = d1.M; + d2.validJD = 0; + computeJD(&d2); + } + while( d1.iJDd2.iJD ){ + M--; + if( M<0 ){ + M = 11; + Y--; + } + d2.M++; + if( d2.M>12 ){ + d2.M = 1; + d2.Y++; + } + d2.validJD = 0; + computeJD(&d2); + } + d1.iJD = d2.iJD - d1.iJD; + d1.iJD += (u64)1486995408 * (u64)100000; + } + d1.validYMD = 0; + d1.validHMS = 0; + d1.validTZ = 0; + computeYMD_HMS(&d1); + sqlite3StrAccumInit(&sRes, 0, 0, 0, 100); + sqlite3_str_appendf(&sRes, "%c%04d-%02d-%02d %02d:%02d:%06.3f", + sign, Y, M, d1.D-1, d1.h, d1.m, d1.s); + sqlite3ResultStrAccum(context, &sRes); +} + + /* ** current_timestamp() ** @@ -24742,6 +25343,7 @@ SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void){ PURE_DATE(time, -1, 0, 0, timeFunc ), PURE_DATE(datetime, -1, 0, 0, datetimeFunc ), PURE_DATE(strftime, -1, 0, 0, strftimeFunc ), + PURE_DATE(timediff, 2, 0, 0, timediffFunc ), DFUNCTION(current_time, 0, 0, 0, ctimeFunc ), DFUNCTION(current_timestamp, 0, 0, 0, ctimestampFunc), DFUNCTION(current_date, 0, 0, 0, cdateFunc ), @@ -24895,7 +25497,7 @@ SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){ /* Faults are not injected into COMMIT_PHASETWO because, assuming SQLite ** is using a regular VFS, it is called after the corresponding ** transaction has been committed. Injecting a fault at this point - ** confuses the test scripts - the COMMIT comand returns SQLITE_NOMEM + ** confuses the test scripts - the COMMIT command returns SQLITE_NOMEM ** but the transaction is committed anyway. ** ** The core must call OsFileControl() though, not OsFileControlHint(), @@ -25516,7 +26118,7 @@ static void *sqlite3MemMalloc(int nByte){ ** or sqlite3MemRealloc(). ** ** For this low-level routine, we already know that pPrior!=0 since -** cases where pPrior==0 will have been intecepted and dealt with +** cases where pPrior==0 will have been intercepted and dealt with ** by higher-level routines. */ static void sqlite3MemFree(void *pPrior){ @@ -25604,7 +26206,7 @@ static int sqlite3MemInit(void *NotUsed){ return SQLITE_OK; } len = sizeof(cpuCount); - /* One usually wants to use hw.acctivecpu for MT decisions, but not here */ + /* One usually wants to use hw.activecpu for MT decisions, but not here */ sysctlbyname("hw.ncpu", &cpuCount, &len, NULL, 0); if( cpuCount>1 ){ /* defer MT decisions to system malloc */ @@ -28071,7 +28673,7 @@ SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){ /* ** The sqlite3_mutex.id, sqlite3_mutex.nRef, and sqlite3_mutex.owner fields -** are necessary under two condidtions: (1) Debug builds and (2) using +** are necessary under two conditions: (1) Debug builds and (2) using ** home-grown mutexes. Encapsulate these conditions into a single #define. */ #if defined(SQLITE_DEBUG) || defined(SQLITE_HOMEGROWN_RECURSIVE_MUTEX) @@ -28572,7 +29174,7 @@ struct sqlite3_mutex { CRITICAL_SECTION mutex; /* Mutex controlling the lock */ int id; /* Mutex type */ #ifdef SQLITE_DEBUG - volatile int nRef; /* Number of enterances */ + volatile int nRef; /* Number of entrances */ volatile DWORD owner; /* Thread holding this mutex */ volatile LONG trace; /* True to trace changes */ #endif @@ -29215,7 +29817,7 @@ static void mallocWithAlarm(int n, void **pp){ ** The upper bound is slightly less than 2GiB: 0x7ffffeff == 2,147,483,391 ** This provides a 256-byte safety margin for defense against 32-bit ** signed integer overflow bugs when computing memory allocation sizes. -** Parnoid applications might want to reduce the maximum allocation size +** Paranoid applications might want to reduce the maximum allocation size ** further for an even larger safety margin. 0x3fffffff or 0x0fffffff ** or even smaller would be reasonable upper bounds on the size of a memory ** allocations for most applications. @@ -29729,9 +30331,14 @@ SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3 *db, const char *z, u64 n){ */ SQLITE_PRIVATE char *sqlite3DbSpanDup(sqlite3 *db, const char *zStart, const char *zEnd){ int n; +#ifdef SQLITE_DEBUG + /* Because of the way the parser works, the span is guaranteed to contain + ** at least one non-space character */ + for(n=0; sqlite3Isspace(zStart[n]); n++){ assert( &zStart[n]0) && sqlite3Isspace(zStart[n-1]) ) n--; + while( sqlite3Isspace(zStart[n-1]) ) n--; return sqlite3DbStrNDup(db, zStart, n); } @@ -29939,43 +30546,6 @@ static const et_info fmtinfo[] = { ** %!S Like %S but prefer the zName over the zAlias */ -/* Floating point constants used for rounding */ -static const double arRound[] = { - 5.0e-01, 5.0e-02, 5.0e-03, 5.0e-04, 5.0e-05, - 5.0e-06, 5.0e-07, 5.0e-08, 5.0e-09, 5.0e-10, -}; - -/* -** If SQLITE_OMIT_FLOATING_POINT is defined, then none of the floating point -** conversions will work. -*/ -#ifndef SQLITE_OMIT_FLOATING_POINT -/* -** "*val" is a double such that 0.1 <= *val < 10.0 -** Return the ascii code for the leading digit of *val, then -** multiply "*val" by 10.0 to renormalize. -** -** Example: -** input: *val = 3.14159 -** output: *val = 1.4159 function return = '3' -** -** The counter *cnt is incremented each time. After counter exceeds -** 16 (the number of significant digits in a 64-bit float) '0' is -** always returned. -*/ -static char et_getdigit(LONGDOUBLE_TYPE *val, int *cnt){ - int digit; - LONGDOUBLE_TYPE d; - if( (*cnt)<=0 ) return '0'; - (*cnt)--; - digit = (int)*val; - d = digit; - digit += '0'; - *val = (*val - d)*10.0; - return (char)digit; -} -#endif /* SQLITE_OMIT_FLOATING_POINT */ - /* ** Set the StrAccum object to an error mode. */ @@ -30067,18 +30637,15 @@ SQLITE_API void sqlite3_str_vappendf( u8 bArgList; /* True for SQLITE_PRINTF_SQLFUNC */ char prefix; /* Prefix character. "+" or "-" or " " or '\0'. */ sqlite_uint64 longvalue; /* Value for integer types */ - LONGDOUBLE_TYPE realvalue; /* Value for real types */ + double realvalue; /* Value for real types */ const et_info *infop; /* Pointer to the appropriate info structure */ char *zOut; /* Rendering buffer */ int nOut; /* Size of the rendering buffer */ char *zExtra = 0; /* Malloced memory used by some conversion */ -#ifndef SQLITE_OMIT_FLOATING_POINT - int exp, e2; /* exponent of real numbers */ - int nsd; /* Number of significant digits returned */ - double rounder; /* Used for rounding floating point values */ + int exp, e2; /* exponent of real numbers */ etByte flag_dp; /* True if decimal point should be shown */ etByte flag_rtz; /* True if trailing zeros should be removed */ -#endif + PrintfArguments *pArgList = 0; /* Arguments for SQLITE_PRINTF_SQLFUNC */ char buf[etBUFSIZE]; /* Conversion buffer */ @@ -30353,73 +30920,66 @@ SQLITE_API void sqlite3_str_vappendf( break; case etFLOAT: case etEXP: - case etGENERIC: + case etGENERIC: { + FpDecode s; + int iRound; + int j; + if( bArgList ){ realvalue = getDoubleArg(pArgList); }else{ realvalue = va_arg(ap,double); } -#ifdef SQLITE_OMIT_FLOATING_POINT - length = 0; -#else if( precision<0 ) precision = 6; /* Set default precision */ #ifdef SQLITE_FP_PRECISION_LIMIT if( precision>SQLITE_FP_PRECISION_LIMIT ){ precision = SQLITE_FP_PRECISION_LIMIT; } #endif - if( realvalue<0.0 ){ - realvalue = -realvalue; - prefix = '-'; - }else{ - prefix = flag_prefix; - } - if( xtype==etGENERIC && precision>0 ) precision--; - testcase( precision>0xfff ); - idx = precision & 0xfff; - rounder = arRound[idx%10]; - while( idx>=10 ){ rounder *= 1.0e-10; idx -= 10; } if( xtype==etFLOAT ){ - double rx = (double)realvalue; - sqlite3_uint64 u; - int ex; - memcpy(&u, &rx, sizeof(u)); - ex = -1023 + (int)((u>>52)&0x7ff); - if( precision+(ex/3) < 15 ) rounder += realvalue*3e-16; - realvalue += rounder; - } - /* Normalize realvalue to within 10.0 > realvalue >= 1.0 */ - exp = 0; - if( sqlite3IsNaN((double)realvalue) ){ - bufpt = "NaN"; - length = 3; - break; + iRound = -precision; + }else if( xtype==etGENERIC ){ + iRound = precision; + }else{ + iRound = precision+1; } - if( realvalue>0.0 ){ - LONGDOUBLE_TYPE scale = 1.0; - while( realvalue>=1e100*scale && exp<=350 ){ scale *= 1e100;exp+=100;} - while( realvalue>=1e10*scale && exp<=350 ){ scale *= 1e10; exp+=10; } - while( realvalue>=10.0*scale && exp<=350 ){ scale *= 10.0; exp++; } - realvalue /= scale; - while( realvalue<1e-8 ){ realvalue *= 1e8; exp-=8; } - while( realvalue<1.0 ){ realvalue *= 10.0; exp--; } - if( exp>350 ){ + sqlite3FpDecode(&s, realvalue, iRound, flag_altform2 ? 26 : 16); + if( s.isSpecial ){ + if( s.isSpecial==2 ){ + bufpt = flag_zeropad ? "null" : "NaN"; + length = sqlite3Strlen30(bufpt); + break; + }else if( flag_zeropad ){ + s.z[0] = '9'; + s.iDP = 1000; + s.n = 1; + }else{ + memcpy(buf, "-Inf", 5); bufpt = buf; - buf[0] = prefix; - memcpy(buf+(prefix!=0),"Inf",4); - length = 3+(prefix!=0); + if( s.sign=='-' ){ + /* no-op */ + }else if( flag_prefix ){ + buf[0] = flag_prefix; + }else{ + bufpt++; + } + length = sqlite3Strlen30(bufpt); break; } } - bufpt = buf; + if( s.sign=='-' ){ + prefix = '-'; + }else{ + prefix = flag_prefix; + } + + exp = s.iDP-1; + if( xtype==etGENERIC && precision>0 ) precision--; + /* ** If the field type is etGENERIC, then convert to either etEXP ** or etFLOAT, as appropriate. */ - if( xtype!=etFLOAT ){ - realvalue += rounder; - if( realvalue>=10.0 ){ realvalue *= 0.1; exp++; } - } if( xtype==etGENERIC ){ flag_rtz = !flag_alternateform; if( exp<-4 || exp>precision ){ @@ -30434,29 +30994,32 @@ SQLITE_API void sqlite3_str_vappendf( if( xtype==etEXP ){ e2 = 0; }else{ - e2 = exp; + e2 = s.iDP - 1; } + bufpt = buf; { i64 szBufNeeded; /* Size of a temporary buffer needed */ szBufNeeded = MAX(e2,0)+(i64)precision+(i64)width+15; + if( cThousand && e2>0 ) szBufNeeded += (e2+2)/3; if( szBufNeeded > etBUFSIZE ){ bufpt = zExtra = printfTempBuf(pAccum, szBufNeeded); if( bufpt==0 ) return; } } zOut = bufpt; - nsd = 16 + flag_altform2*10; flag_dp = (precision>0 ?1:0) | flag_alternateform | flag_altform2; /* The sign in front of the number */ if( prefix ){ *(bufpt++) = prefix; } /* Digits prior to the decimal point */ + j = 0; if( e2<0 ){ *(bufpt++) = '0'; }else{ for(; e2>=0; e2--){ - *(bufpt++) = et_getdigit(&realvalue,&nsd); + *(bufpt++) = j1 ) *(bufpt++) = ','; } } /* The decimal point */ @@ -30465,13 +31028,12 @@ SQLITE_API void sqlite3_str_vappendf( } /* "0" digits after the decimal point but before the first ** significant digit of the number */ - for(e2++; e2<0; precision--, e2++){ - assert( precision>0 ); + for(e2++; e2<0 && precision>0; precision--, e2++){ *(bufpt++) = '0'; } /* Significant digits after the decimal point */ while( (precision--)>0 ){ - *(bufpt++) = et_getdigit(&realvalue,&nsd); + *(bufpt++) = jcharset]; if( exp<0 ){ *(bufpt++) = '-'; exp = -exp; @@ -30520,8 +31083,8 @@ SQLITE_API void sqlite3_str_vappendf( while( nPad-- ) bufpt[i++] = '0'; length = width; } -#endif /* !defined(SQLITE_OMIT_FLOATING_POINT) */ break; + } case etSIZE: if( !bArgList ){ *(va_arg(ap,int*)) = pAccum->nChar; @@ -30570,13 +31133,26 @@ SQLITE_API void sqlite3_str_vappendf( } } if( precision>1 ){ + i64 nPrior = 1; width -= precision-1; if( width>1 && !flag_leftjustify ){ sqlite3_str_appendchar(pAccum, width-1, ' '); width = 0; } - while( precision-- > 1 ){ - sqlite3_str_append(pAccum, buf, length); + sqlite3_str_append(pAccum, buf, length); + precision--; + while( precision > 1 ){ + i64 nCopyBytes; + if( nPrior > precision-1 ) nPrior = precision - 1; + nCopyBytes = length*nPrior; + if( nCopyBytes + pAccum->nChar >= pAccum->nAlloc ){ + sqlite3StrAccumEnlarge(pAccum, nCopyBytes); + } + if( pAccum->accError ) break; + sqlite3_str_append(pAccum, + &pAccum->zText[pAccum->nChar-nCopyBytes], nCopyBytes); + precision -= nPrior; + nPrior *= 2; } } bufpt = buf; @@ -30804,9 +31380,9 @@ SQLITE_PRIVATE void sqlite3RecordErrorOffsetOfExpr(sqlite3 *db, const Expr *pExp ** Return the number of bytes of text that StrAccum is able to accept ** after the attempted enlargement. The value returned might be zero. */ -SQLITE_PRIVATE int sqlite3StrAccumEnlarge(StrAccum *p, int N){ +SQLITE_PRIVATE int sqlite3StrAccumEnlarge(StrAccum *p, i64 N){ char *zNew; - assert( p->nChar+(i64)N >= p->nAlloc ); /* Only called if really needed */ + assert( p->nChar+N >= p->nAlloc ); /* Only called if really needed */ if( p->accError ){ testcase(p->accError==SQLITE_TOOBIG); testcase(p->accError==SQLITE_NOMEM); @@ -30817,8 +31393,7 @@ SQLITE_PRIVATE int sqlite3StrAccumEnlarge(StrAccum *p, int N){ return p->nAlloc - p->nChar - 1; }else{ char *zOld = isMalloced(p) ? p->zText : 0; - i64 szNew = p->nChar; - szNew += (sqlite3_int64)N + 1; + i64 szNew = p->nChar + N + 1; if( szNew+p->nChar<=p->mxAlloc ){ /* Force exponential buffer size growth as long as it does not overflow, ** to avoid having to call this routine too often */ @@ -30848,7 +31423,8 @@ SQLITE_PRIVATE int sqlite3StrAccumEnlarge(StrAccum *p, int N){ return 0; } } - return N; + assert( N>=0 && N<=0x7fffffff ); + return (int)N; } /* @@ -31139,12 +31715,22 @@ SQLITE_API char *sqlite3_vsnprintf(int n, char *zBuf, const char *zFormat, va_li return zBuf; } SQLITE_API char *sqlite3_snprintf(int n, char *zBuf, const char *zFormat, ...){ - char *z; + StrAccum acc; va_list ap; + if( n<=0 ) return zBuf; +#ifdef SQLITE_ENABLE_API_ARMOR + if( zBuf==0 || zFormat==0 ) { + (void)SQLITE_MISUSE_BKPT; + if( zBuf ) zBuf[0] = 0; + return zBuf; + } +#endif + sqlite3StrAccumInit(&acc, 0, zBuf, n, 0); va_start(ap,zFormat); - z = sqlite3_vsnprintf(n, zBuf, zFormat, ap); + sqlite3_str_vappendf(&acc, zFormat, ap); va_end(ap); - return z; + zBuf[acc.nChar] = 0; + return zBuf; } /* @@ -31222,6 +31808,75 @@ SQLITE_API void sqlite3_str_appendf(StrAccum *p, const char *zFormat, ...){ va_end(ap); } + +/***************************************************************************** +** Reference counted string storage +*****************************************************************************/ + +/* +** Increase the reference count of the string by one. +** +** The input parameter is returned. +*/ +SQLITE_PRIVATE char *sqlite3RCStrRef(char *z){ + RCStr *p = (RCStr*)z; + assert( p!=0 ); + p--; + p->nRCRef++; + return z; +} + +/* +** Decrease the reference count by one. Free the string when the +** reference count reaches zero. +*/ +SQLITE_PRIVATE void sqlite3RCStrUnref(char *z){ + RCStr *p = (RCStr*)z; + assert( p!=0 ); + p--; + assert( p->nRCRef>0 ); + if( p->nRCRef>=2 ){ + p->nRCRef--; + }else{ + sqlite3_free(p); + } +} + +/* +** Create a new string that is capable of holding N bytes of text, not counting +** the zero byte at the end. The string is uninitialized. +** +** The reference count is initially 1. Call sqlite3RCStrUnref() to free the +** newly allocated string. +** +** This routine returns 0 on an OOM. +*/ +SQLITE_PRIVATE char *sqlite3RCStrNew(u64 N){ + RCStr *p = sqlite3_malloc64( N + sizeof(*p) + 1 ); + if( p==0 ) return 0; + p->nRCRef = 1; + return (char*)&p[1]; +} + +/* +** Change the size of the string so that it is able to hold N bytes. +** The string might be reallocated, so return the new allocation. +*/ +SQLITE_PRIVATE char *sqlite3RCStrResize(char *z, u64 N){ + RCStr *p = (RCStr*)z; + RCStr *pNew; + assert( p!=0 ); + p--; + assert( p->nRCRef==1 ); + pNew = sqlite3_realloc64(p, N+sizeof(RCStr)+1); + if( pNew==0 ){ + sqlite3_free(p); + return 0; + }else{ + return (char*)&pNew[1]; + } +} + /************** End of printf.c **********************************************/ /************** Begin file treeview.c ****************************************/ /* @@ -31444,6 +32099,13 @@ SQLITE_PRIVATE void sqlite3TreeViewSrcList(TreeView *pView, const SrcList *pSrc) if( pItem->fg.isOn || (pItem->fg.isUsing==0 && pItem->u3.pOn!=0) ){ sqlite3_str_appendf(&x, " ON"); } + if( pItem->fg.isTabFunc ) sqlite3_str_appendf(&x, " isTabFunc"); + if( pItem->fg.isCorrelated ) sqlite3_str_appendf(&x, " isCorrelated"); + if( pItem->fg.isMaterialized ) sqlite3_str_appendf(&x, " isMaterialized"); + if( pItem->fg.viaCoroutine ) sqlite3_str_appendf(&x, " viaCoroutine"); + if( pItem->fg.notCte ) sqlite3_str_appendf(&x, " notCte"); + if( pItem->fg.isNestedFrom ) sqlite3_str_appendf(&x, " isNestedFrom"); + sqlite3StrAccumFinish(&x); sqlite3TreeViewItem(pView, zLine, inSrc-1); n = 0; @@ -31713,7 +32375,7 @@ SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 m sqlite3TreeViewPop(&pView); return; } - if( pExpr->flags || pExpr->affExpr || pExpr->vvaFlags ){ + if( pExpr->flags || pExpr->affExpr || pExpr->vvaFlags || pExpr->pAggInfo ){ StrAccum x; sqlite3StrAccumInit(&x, 0, zFlgs, sizeof(zFlgs), 0); sqlite3_str_appendf(&x, " fg.af=%x.%c", @@ -31730,6 +32392,9 @@ SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 m if( ExprHasVVAProperty(pExpr, EP_Immutable) ){ sqlite3_str_appendf(&x, " IMMUTABLE"); } + if( pExpr->pAggInfo!=0 ){ + sqlite3_str_appendf(&x, " agg-column[%d]", pExpr->iAgg); + } sqlite3StrAccumFinish(&x); }else{ zFlgs[0] = 0; @@ -31859,7 +32524,8 @@ SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 m }; assert( pExpr->op2==TK_IS || pExpr->op2==TK_ISNOT ); assert( pExpr->pRight ); - assert( sqlite3ExprSkipCollate(pExpr->pRight)->op==TK_TRUEFALSE ); + assert( sqlite3ExprSkipCollateAndLikely(pExpr->pRight)->op + == TK_TRUEFALSE ); x = (pExpr->op2==TK_ISNOT)*2 + sqlite3ExprTruthValue(pExpr->pRight); zUniOp = azOp[x]; break; @@ -33518,7 +34184,7 @@ SQLITE_PRIVATE void sqlite3UtfSelfTest(void){ /* ** Calls to sqlite3FaultSim() are used to simulate a failure during testing, ** or to bypass normal error detection during testing in order to let -** execute proceed futher downstream. +** execute proceed further downstream. ** ** In deployment, sqlite3FaultSim() *always* return SQLITE_OK (0). The ** sqlite3FaultSim() function only returns non-zero during testing. @@ -33635,6 +34301,23 @@ SQLITE_PRIVATE void sqlite3ErrorClear(sqlite3 *db){ */ SQLITE_PRIVATE void sqlite3SystemError(sqlite3 *db, int rc){ if( rc==SQLITE_IOERR_NOMEM ) return; +#ifdef SQLITE_USE_SEH + if( rc==SQLITE_IOERR_IN_PAGE ){ + int ii; + int iErr; + sqlite3BtreeEnterAll(db); + for(ii=0; iinDb; ii++){ + if( db->aDb[ii].pBt ){ + iErr = sqlite3PagerWalSystemErrno(sqlite3BtreePager(db->aDb[ii].pBt)); + if( iErr ){ + db->iSysErrno = iErr; + } + } + } + sqlite3BtreeLeaveAll(db); + return; + } +#endif rc &= 0xff; if( rc==SQLITE_CANTOPEN || rc==SQLITE_IOERR ){ db->iSysErrno = sqlite3OsGetLastError(db->pVfs); @@ -33669,6 +34352,26 @@ SQLITE_PRIVATE void sqlite3ErrorWithMsg(sqlite3 *db, int err_code, const char *z } } +/* +** Check for interrupts and invoke progress callback. +*/ +SQLITE_PRIVATE void sqlite3ProgressCheck(Parse *p){ + sqlite3 *db = p->db; + if( AtomicLoad(&db->u1.isInterrupted) ){ + p->nErr++; + p->rc = SQLITE_INTERRUPT; + } +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + if( db->xProgress && (++p->nProgressSteps)>=db->nProgressOps ){ + if( db->xProgress(db->pProgressArg) ){ + p->nErr++; + p->rc = SQLITE_INTERRUPT; + } + p->nProgressSteps = 0; + } +#endif +} + /* ** Add an error message to pParse->zErrMsg and increment pParse->nErr. ** @@ -33860,43 +34563,40 @@ SQLITE_PRIVATE u8 sqlite3StrIHash(const char *z){ return h; } -/* -** Compute 10 to the E-th power. Examples: E==1 results in 10. -** E==2 results in 100. E==50 results in 1.0e50. +/* Double-Double multiplication. (x[0],x[1]) *= (y,yy) ** -** This routine only works for values of E between 1 and 341. +** Reference: +** T. J. Dekker, "A Floating-Point Technique for Extending the +** Available Precision". 1971-07-26. */ -static LONGDOUBLE_TYPE sqlite3Pow10(int E){ -#if defined(_MSC_VER) - static const LONGDOUBLE_TYPE x[] = { - 1.0e+001L, - 1.0e+002L, - 1.0e+004L, - 1.0e+008L, - 1.0e+016L, - 1.0e+032L, - 1.0e+064L, - 1.0e+128L, - 1.0e+256L - }; - LONGDOUBLE_TYPE r = 1.0; - int i; - assert( E>=0 && E<=307 ); - for(i=0; E!=0; i++, E >>=1){ - if( E & 1 ) r *= x[i]; - } - return r; -#else - LONGDOUBLE_TYPE x = 10.0; - LONGDOUBLE_TYPE r = 1.0; - while(1){ - if( E & 1 ) r *= x; - E >>= 1; - if( E==0 ) break; - x *= x; - } - return r; -#endif +static void dekkerMul2(volatile double *x, double y, double yy){ + /* + ** The "volatile" keywords on parameter x[] and on local variables + ** below are needed force intermediate results to be truncated to + ** binary64 rather than be carried around in an extended-precision + ** format. The truncation is necessary for the Dekker algorithm to + ** work. Intel x86 floating point might omit the truncation without + ** the use of volatile. + */ + volatile double tx, ty, p, q, c, cc; + double hx, hy; + u64 m; + memcpy(&m, (void*)&x[0], 8); + m &= 0xfffffffffc000000LL; + memcpy(&hx, &m, 8); + tx = x[0] - hx; + memcpy(&m, &y, 8); + m &= 0xfffffffffc000000LL; + memcpy(&hy, &m, 8); + ty = y - hy; + p = hx*hy; + q = hx*ty + tx*hy; + c = p+q; + cc = p - c + q + tx*ty; + cc = x[0]*yy + x[1]*y + cc; + x[0] = c + cc; + x[1] = c - x[0]; + x[1] += cc; } /* @@ -33937,12 +34637,11 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en const char *zEnd; /* sign * significand * (10 ^ (esign * exponent)) */ int sign = 1; /* sign of significand */ - i64 s = 0; /* significand */ + u64 s = 0; /* significand */ int d = 0; /* adjust exponent for shifting decimal point */ int esign = 1; /* sign of exponent */ int e = 0; /* exponent */ int eValid = 1; /* True exponent is either not used or is well-formed */ - double result; int nDigit = 0; /* Number of digits processed */ int eType = 1; /* 1: pure integer, 2+: fractional -1 or less: bad UTF16 */ @@ -33982,7 +34681,7 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en while( z=((LARGEST_INT64-9)/10) ){ + if( s>=((LARGEST_UINT64-9)/10) ){ /* skip non-significant significand digits ** (increase exponent by d to shift decimal left) */ while( z0 ){ /*OPTIMIZATION-IF-TRUE*/ - if( esign>0 ){ - if( s>=(LARGEST_INT64/10) ) break; /*OPTIMIZATION-IF-FALSE*/ - s *= 10; - }else{ - if( s%10!=0 ) break; /*OPTIMIZATION-IF-FALSE*/ - s /= 10; - } - e--; - } + /* adjust exponent by d, and update sign */ + e = (e*esign) + d; - /* adjust the sign of significand */ - s = sign<0 ? -s : s; + /* Try to adjust the exponent to make it smaller */ + while( e>0 && s<(LARGEST_UINT64/10) ){ + s *= 10; + e--; + } + while( e<0 && (s%10)==0 ){ + s /= 10; + e++; + } - if( e==0 ){ /*OPTIMIZATION-IF-TRUE*/ - result = (double)s; + if( e==0 ){ + *pResult = s; + }else if( sqlite3Config.bUseLongDouble ){ + LONGDOUBLE_TYPE r = (LONGDOUBLE_TYPE)s; + if( e>0 ){ + while( e>=100 ){ e-=100; r *= 1.0e+100L; } + while( e>=10 ){ e-=10; r *= 1.0e+10L; } + while( e>=1 ){ e-=1; r *= 1.0e+01L; } }else{ - /* attempt to handle extremely small/large numbers better */ - if( e>307 ){ /*OPTIMIZATION-IF-TRUE*/ - if( e<342 ){ /*OPTIMIZATION-IF-TRUE*/ - LONGDOUBLE_TYPE scale = sqlite3Pow10(e-308); - if( esign<0 ){ - result = s / scale; - result /= 1.0e+308; - }else{ - result = s * scale; - result *= 1.0e+308; - } - }else{ assert( e>=342 ); - if( esign<0 ){ - result = 0.0*s; - }else{ + while( e<=-100 ){ e+=100; r *= 1.0e-100L; } + while( e<=-10 ){ e+=10; r *= 1.0e-10L; } + while( e<=-1 ){ e+=1; r *= 1.0e-01L; } + } + assert( r>=0.0 ); + if( r>+1.7976931348623157081452742373e+308L ){ #ifdef INFINITY - result = INFINITY*s; + *pResult = +INFINITY; #else - result = 1e308*1e308*s; /* Infinity */ + *pResult = 1.0e308*10.0; #endif - } - } - }else{ - LONGDOUBLE_TYPE scale = sqlite3Pow10(e); - if( esign<0 ){ - result = s / scale; - }else{ - result = s * scale; - } + }else{ + *pResult = (double)r; + } + }else{ + double rr[2]; + u64 s2; + rr[0] = (double)s; + s2 = (u64)rr[0]; + rr[1] = s>=s2 ? (double)(s - s2) : -(double)(s2 - s); + if( e>0 ){ + while( e>=100 ){ + e -= 100; + dekkerMul2(rr, 1.0e+100, -1.5902891109759918046e+83); + } + while( e>=10 ){ + e -= 10; + dekkerMul2(rr, 1.0e+10, 0.0); + } + while( e>=1 ){ + e -= 1; + dekkerMul2(rr, 1.0e+01, 0.0); + } + }else{ + while( e<=-100 ){ + e += 100; + dekkerMul2(rr, 1.0e-100, -1.99918998026028836196e-117); + } + while( e<=-10 ){ + e += 10; + dekkerMul2(rr, 1.0e-10, -3.6432197315497741579e-27); + } + while( e<=-1 ){ + e += 1; + dekkerMul2(rr, 1.0e-01, -5.5511151231257827021e-18); } } + *pResult = rr[0]+rr[1]; + if( sqlite3IsNaN(*pResult) ) *pResult = 1e300*1e300; } + if( sign<0 ) *pResult = -*pResult; + assert( !sqlite3IsNaN(*pResult) ); - /* store the result */ - *pResult = result; - - /* return true if number and no extra non-whitespace chracters after */ +atof_return: + /* return true if number and no extra non-whitespace characters after */ if( z==zEnd && nDigit>0 && eValid && eType>0 ){ return eType; }else if( eType>=2 && (eType==3 || eValid) && nDigit>0 ){ @@ -34126,11 +34835,14 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en #endif /* -** Render an signed 64-bit integer as text. Store the result in zOut[]. +** Render an signed 64-bit integer as text. Store the result in zOut[] and +** return the length of the string that was stored, in bytes. The value +** returned does not include the zero terminator at the end of the output +** string. ** ** The caller must ensure that zOut[] is at least 21 bytes in size. */ -SQLITE_PRIVATE void sqlite3Int64ToText(i64 v, char *zOut){ +SQLITE_PRIVATE int sqlite3Int64ToText(i64 v, char *zOut){ int i; u64 x; char zTemp[22]; @@ -34141,12 +34853,15 @@ SQLITE_PRIVATE void sqlite3Int64ToText(i64 v, char *zOut){ } i = sizeof(zTemp)-2; zTemp[sizeof(zTemp)-1] = 0; - do{ - zTemp[i--] = (x%10) + '0'; + while( 1 /*exit-by-break*/ ){ + zTemp[i] = (x%10) + '0'; x = x/10; - }while( x ); - if( v<0 ) zTemp[i--] = '-'; - memcpy(zOut, &zTemp[i+1], sizeof(zTemp)-1-i); + if( x==0 ) break; + i--; + }; + if( v<0 ) zTemp[--i] = '-'; + memcpy(zOut, &zTemp[i], sizeof(zTemp)-i); + return sizeof(zTemp)-1-i; } /* @@ -34239,7 +34954,7 @@ SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc /* This test and assignment is needed only to suppress UB warnings ** from clang and -fsanitize=undefined. This test and assignment make ** the code a little larger and slower, and no harm comes from omitting - ** them, but we must appaise the undefined-behavior pharisees. */ + ** them, but we must appease the undefined-behavior pharisees. */ *pNum = neg ? SMALLEST_INT64 : LARGEST_INT64; }else if( neg ){ *pNum = -(i64)u; @@ -34311,11 +35026,15 @@ SQLITE_PRIVATE int sqlite3DecOrHexToI64(const char *z, i64 *pOut){ u = u*16 + sqlite3HexToInt(z[k]); } memcpy(pOut, &u, 8); - return (z[k]==0 && k-i<=16) ? 0 : 2; + if( k-i>16 ) return 2; + if( z[k]!=0 ) return 1; + return 0; }else #endif /* SQLITE_OMIT_HEX_INTEGER */ { - return sqlite3Atoi64(z, pOut, sqlite3Strlen30(z), SQLITE_UTF8); + int n = (int)(0x3fffffff&strspn(z,"+- \n\t0123456789")); + if( z[n] ) n++; + return sqlite3Atoi64(z, pOut, n, SQLITE_UTF8); } } @@ -34347,7 +35066,7 @@ SQLITE_PRIVATE int sqlite3GetInt32(const char *zNum, int *pValue){ u32 u = 0; zNum += 2; while( zNum[0]=='0' ) zNum++; - for(i=0; sqlite3Isxdigit(zNum[i]) && i<8; i++){ + for(i=0; i<8 && sqlite3Isxdigit(zNum[i]); i++){ u = u*16 + sqlite3HexToInt(zNum[i]); } if( (u&0x80000000)==0 && sqlite3Isxdigit(zNum[i])==0 ){ @@ -34394,6 +35113,153 @@ SQLITE_PRIVATE int sqlite3Atoi(const char *z){ return x; } +/* +** Decode a floating-point value into an approximate decimal +** representation. +** +** Round the decimal representation to n significant digits if +** n is positive. Or round to -n signficant digits after the +** decimal point if n is negative. No rounding is performed if +** n is zero. +** +** The significant digits of the decimal representation are +** stored in p->z[] which is a often (but not always) a pointer +** into the middle of p->zBuf[]. There are p->n significant digits. +** The p->z[] array is *not* zero-terminated. +*/ +SQLITE_PRIVATE void sqlite3FpDecode(FpDecode *p, double r, int iRound, int mxRound){ + int i; + u64 v; + int e, exp = 0; + p->isSpecial = 0; + p->z = p->zBuf; + + /* Convert negative numbers to positive. Deal with Infinity, 0.0, and + ** NaN. */ + if( r<0.0 ){ + p->sign = '-'; + r = -r; + }else if( r==0.0 ){ + p->sign = '+'; + p->n = 1; + p->iDP = 1; + p->z = "0"; + return; + }else{ + p->sign = '+'; + } + memcpy(&v,&r,8); + e = v>>52; + if( (e&0x7ff)==0x7ff ){ + p->isSpecial = 1 + (v!=0x7ff0000000000000LL); + p->n = 0; + p->iDP = 0; + return; + } + + /* Multiply r by powers of ten until it lands somewhere in between + ** 1.0e+19 and 1.0e+17. + */ + if( sqlite3Config.bUseLongDouble ){ + LONGDOUBLE_TYPE rr = r; + if( rr>=1.0e+19 ){ + while( rr>=1.0e+119L ){ exp+=100; rr *= 1.0e-100L; } + while( rr>=1.0e+29L ){ exp+=10; rr *= 1.0e-10L; } + while( rr>=1.0e+19L ){ exp++; rr *= 1.0e-1L; } + }else{ + while( rr<1.0e-97L ){ exp-=100; rr *= 1.0e+100L; } + while( rr<1.0e+07L ){ exp-=10; rr *= 1.0e+10L; } + while( rr<1.0e+17L ){ exp--; rr *= 1.0e+1L; } + } + v = (u64)rr; + }else{ + /* If high-precision floating point is not available using "long double", + ** then use Dekker-style double-double computation to increase the + ** precision. + ** + ** The error terms on constants like 1.0e+100 computed using the + ** decimal extension, for example as follows: + ** + ** SELECT decimal_exp(decimal_sub('1.0e+100',decimal(1.0e+100))); + */ + double rr[2]; + rr[0] = r; + rr[1] = 0.0; + if( rr[0]>1.84e+19 ){ + while( rr[0]>1.84e+119 ){ + exp += 100; + dekkerMul2(rr, 1.0e-100, -1.99918998026028836196e-117); + } + while( rr[0]>1.84e+29 ){ + exp += 10; + dekkerMul2(rr, 1.0e-10, -3.6432197315497741579e-27); + } + while( rr[0]>1.84e+19 ){ + exp += 1; + dekkerMul2(rr, 1.0e-01, -5.5511151231257827021e-18); + } + }else{ + while( rr[0]<1.84e-82 ){ + exp -= 100; + dekkerMul2(rr, 1.0e+100, -1.5902891109759918046e+83); + } + while( rr[0]<1.84e+08 ){ + exp -= 10; + dekkerMul2(rr, 1.0e+10, 0.0); + } + while( rr[0]<1.84e+18 ){ + exp -= 1; + dekkerMul2(rr, 1.0e+01, 0.0); + } + } + v = rr[1]<0.0 ? (u64)rr[0]-(u64)(-rr[1]) : (u64)rr[0]+(u64)rr[1]; + } + + + /* Extract significant digits. */ + i = sizeof(p->zBuf)-1; + assert( v>0 ); + while( v ){ p->zBuf[i--] = (v%10) + '0'; v /= 10; } + assert( i>=0 && izBuf)-1 ); + p->n = sizeof(p->zBuf) - 1 - i; + assert( p->n>0 ); + assert( p->nzBuf) ); + p->iDP = p->n + exp; + if( iRound<0 ){ + iRound = p->iDP - iRound; + if( iRound==0 && p->zBuf[i+1]>='5' ){ + iRound = 1; + p->zBuf[i--] = '0'; + p->n++; + p->iDP++; + } + } + if( iRound>0 && (iRoundn || p->n>mxRound) ){ + char *z = &p->zBuf[i+1]; + if( iRound>mxRound ) iRound = mxRound; + p->n = iRound; + if( z[iRound]>='5' ){ + int j = iRound-1; + while( 1 /*exit-by-break*/ ){ + z[j]++; + if( z[j]<='9' ) break; + z[j] = '0'; + if( j==0 ){ + p->z[i--] = '1'; + p->n++; + p->iDP++; + break; + }else{ + j--; + } + } + } + } + p->z = &p->zBuf[i+1]; + assert( i+p->n < sizeof(p->zBuf) ); + while( ALWAYS(p->n>0) && p->z[p->n-1]=='0' ){ p->n--; } +} + /* ** Try to convert z into an unsigned 32-bit integer. Return true on ** success and false if there is an error. @@ -34922,7 +35788,7 @@ SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3 *db){ } /* -** Attempt to add, substract, or multiply the 64-bit signed value iB against +** Attempt to add, subtract, or multiply the 64-bit signed value iB against ** the other 64-bit signed integer at *pA and store the result in *pA. ** Return 0 on success. Or if the operation would have resulted in an ** overflow, leave *pA unchanged and return 1. @@ -35208,6 +36074,104 @@ SQLITE_PRIVATE int sqlite3VListNameToNum(VList *pIn, const char *zName, int nNam return 0; } +/* +** High-resolution hardware timer used for debugging and testing only. +*/ +#if defined(VDBE_PROFILE) \ + || defined(SQLITE_PERFORMANCE_TRACE) \ + || defined(SQLITE_ENABLE_STMT_SCANSTATUS) +/************** Include hwtime.h in the middle of util.c *********************/ +/************** Begin file hwtime.h ******************************************/ +/* +** 2008 May 27 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file contains inline asm code for retrieving "high-performance" +** counters for x86 and x86_64 class CPUs. +*/ +#ifndef SQLITE_HWTIME_H +#define SQLITE_HWTIME_H + +/* +** The following routine only works on Pentium-class (or newer) processors. +** It uses the RDTSC opcode to read the cycle count value out of the +** processor and returns that value. This can be used for high-res +** profiling. +*/ +#if !defined(__STRICT_ANSI__) && \ + (defined(__GNUC__) || defined(_MSC_VER)) && \ + (defined(i386) || defined(__i386__) || defined(_M_IX86)) + + #if defined(__GNUC__) + + __inline__ sqlite_uint64 sqlite3Hwtime(void){ + unsigned int lo, hi; + __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi)); + return (sqlite_uint64)hi << 32 | lo; + } + + #elif defined(_MSC_VER) + + __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){ + __asm { + rdtsc + ret ; return value at EDX:EAX + } + } + + #endif + +#elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__x86_64__)) + + __inline__ sqlite_uint64 sqlite3Hwtime(void){ + unsigned int lo, hi; + __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi)); + return (sqlite_uint64)hi << 32 | lo; + } + +#elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__ppc__)) + + __inline__ sqlite_uint64 sqlite3Hwtime(void){ + unsigned long long retval; + unsigned long junk; + __asm__ __volatile__ ("\n\ + 1: mftbu %1\n\ + mftb %L0\n\ + mftbu %0\n\ + cmpw %0,%1\n\ + bne 1b" + : "=r" (retval), "=r" (junk)); + return retval; + } + +#else + + /* + ** asm() is needed for hardware timing support. Without asm(), + ** disable the sqlite3Hwtime() routine. + ** + ** sqlite3Hwtime() is only used for some obscure debugging + ** and analysis configurations, not in any deliverable, so this + ** should not be a great loss. + */ +SQLITE_PRIVATE sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); } + +#endif + +#endif /* !defined(SQLITE_HWTIME_H) */ + +/************** End of hwtime.h **********************************************/ +/************** Continuing where we left off in util.c ***********************/ +#endif + /************** End of util.c ************************************************/ /************** Begin file hash.c ********************************************/ /* @@ -35309,7 +36273,7 @@ static void insertElement( } -/* Resize the hash table so that it cantains "new_size" buckets. +/* Resize the hash table so that it contains "new_size" buckets. ** ** The hash table might fail to resize if sqlite3_malloc() fails or ** if the new size is the same as the prior size. @@ -35378,12 +36342,13 @@ static HashElem *findElementWithHash( count = pH->count; } if( pHash ) *pHash = h; - while( count-- ){ + while( count ){ assert( elem!=0 ); if( sqlite3StrICmp(elem->pKey,pKey)==0 ){ return elem; } elem = elem->next; + count--; } return &nullElement; } @@ -35742,7 +36707,9 @@ struct KVVfsFile { char *aJrnl; /* Journal content */ int szPage; /* Last known page size */ sqlite3_int64 szDb; /* Database file size. -1 means unknown */ + char *aData; /* Buffer to hold page data */ }; +#define SQLITE_KVOS_SZ 133073 /* ** Methods for KVVfsFile @@ -36105,8 +37072,7 @@ static int kvvfsDecode(const char *a, char *aOut, int nOut){ if( j+n>nOut ) return -1; memset(&aOut[j], 0, n); j += n; - c = aIn[i]; - if( c==0 ) break; + if( c==0 || mult==1 ) break; /* progress stalled if mult==1 */ }else{ aOut[j] = c<<4; c = kvvfsHexValue[aIn[++i]]; @@ -36183,6 +37149,7 @@ static int kvvfsClose(sqlite3_file *pProtoFile){ SQLITE_KV_LOG(("xClose %s %s\n", pFile->zClass, pFile->isJournal ? "journal" : "db")); sqlite3_free(pFile->aJrnl); + sqlite3_free(pFile->aData); return SQLITE_OK; } @@ -36231,7 +37198,7 @@ static int kvvfsReadDb( unsigned int pgno; int got, n; char zKey[30]; - char aData[133073]; + char *aData = pFile->aData; assert( iOfst>=0 ); assert( iAmt>=0 ); SQLITE_KV_LOG(("xRead('%s-db',%d,%lld)\n", pFile->zClass, iAmt, iOfst)); @@ -36248,7 +37215,8 @@ static int kvvfsReadDb( pgno = 1; } sqlite3_snprintf(sizeof(zKey), zKey, "%u", pgno); - got = sqlite3KvvfsMethods.xRead(pFile->zClass, zKey, aData, sizeof(aData)-1); + got = sqlite3KvvfsMethods.xRead(pFile->zClass, zKey, + aData, SQLITE_KVOS_SZ-1); if( got<0 ){ n = 0; }else{ @@ -36256,7 +37224,7 @@ static int kvvfsReadDb( if( iOfst+iAmt<512 ){ int k = iOfst+iAmt; aData[k*2] = 0; - n = kvvfsDecode(aData, &aData[2000], sizeof(aData)-2000); + n = kvvfsDecode(aData, &aData[2000], SQLITE_KVOS_SZ-2000); if( n>=iOfst+iAmt ){ memcpy(zBuf, &aData[2000+iOfst], iAmt); n = iAmt; @@ -36315,7 +37283,7 @@ static int kvvfsWriteDb( KVVfsFile *pFile = (KVVfsFile*)pProtoFile; unsigned int pgno; char zKey[30]; - char aData[131073]; + char *aData = pFile->aData; SQLITE_KV_LOG(("xWrite('%s-db',%d,%lld)\n", pFile->zClass, iAmt, iOfst)); assert( iAmt>=512 && iAmt<=65536 ); assert( (iAmt & (iAmt-1))==0 ); @@ -36524,6 +37492,10 @@ static int kvvfsOpen( }else{ pFile->zClass = "local"; } + pFile->aData = sqlite3_malloc64(SQLITE_KVOS_SZ); + if( pFile->aData==0 ){ + return SQLITE_NOMEM; + } pFile->aJrnl = 0; pFile->nJrnl = 0; pFile->szPage = -1; @@ -36687,7 +37659,7 @@ SQLITE_PRIVATE int sqlite3KvvfsInit(void){ ** This source file is organized into divisions where the logic for various ** subfunctions is contained within the appropriate division. PLEASE ** KEEP THE STRUCTURE OF THIS FILE INTACT. New code should be placed -** in the correct division and should be clearly labeled. +** in the correct division and should be clearly labelled. ** ** The layout of divisions is as follows: ** @@ -36737,7 +37709,7 @@ SQLITE_PRIVATE int sqlite3KvvfsInit(void){ #endif /* Use pread() and pwrite() if they are available */ -#if defined(__APPLE__) +#if defined(__APPLE__) || defined(__linux__) # define HAVE_PREAD 1 # define HAVE_PWRITE 1 #endif @@ -36760,7 +37732,8 @@ SQLITE_PRIVATE int sqlite3KvvfsInit(void){ /* #include */ #include /* amalgamator: keep */ #include -#if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0 +#if (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) \ + && !defined(SQLITE_WASI) # include #endif @@ -36848,9 +37821,46 @@ SQLITE_PRIVATE int sqlite3KvvfsInit(void){ */ #define SQLITE_MAX_SYMLINKS 100 +/* +** Remove and stub certain info for WASI (WebAssembly System +** Interface) builds. +*/ +#ifdef SQLITE_WASI +# undef HAVE_FCHMOD +# undef HAVE_FCHOWN +# undef HAVE_MREMAP +# define HAVE_MREMAP 0 +# ifndef SQLITE_DEFAULT_UNIX_VFS +# define SQLITE_DEFAULT_UNIX_VFS "unix-dotfile" + /* ^^^ should SQLITE_DEFAULT_UNIX_VFS be "unix-none"? */ +# endif +# ifndef F_RDLCK +# define F_RDLCK 0 +# define F_WRLCK 1 +# define F_UNLCK 2 +# if __LONG_MAX == 0x7fffffffL +# define F_GETLK 12 +# define F_SETLK 13 +# define F_SETLKW 14 +# else +# define F_GETLK 5 +# define F_SETLK 6 +# define F_SETLKW 7 +# endif +# endif +#else /* !SQLITE_WASI */ +# ifndef HAVE_FCHMOD +# define HAVE_FCHMOD +# endif +#endif /* SQLITE_WASI */ + +#ifdef SQLITE_WASI +# define osGetpid(X) (pid_t)1 +#else /* Always cast the getpid() return type for compatibility with ** kernel modules in VxWorks. */ -#define osGetpid(X) (pid_t)getpid() +# define osGetpid(X) (pid_t)getpid() +#endif /* ** Only set the lastErrno if the error code is a real error and not @@ -37122,7 +38132,11 @@ static struct unix_syscall { #define osPwrite64 ((ssize_t(*)(int,const void*,size_t,off64_t))\ aSyscall[13].pCurrent) +#if defined(HAVE_FCHMOD) { "fchmod", (sqlite3_syscall_ptr)fchmod, 0 }, +#else + { "fchmod", (sqlite3_syscall_ptr)0, 0 }, +#endif #define osFchmod ((int(*)(int,mode_t))aSyscall[14].pCurrent) #if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE @@ -37158,14 +38172,16 @@ static struct unix_syscall { #endif #define osGeteuid ((uid_t(*)(void))aSyscall[21].pCurrent) -#if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0 +#if (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) \ + && !defined(SQLITE_WASI) { "mmap", (sqlite3_syscall_ptr)mmap, 0 }, #else { "mmap", (sqlite3_syscall_ptr)0, 0 }, #endif #define osMmap ((void*(*)(void*,size_t,int,int,int,off_t))aSyscall[22].pCurrent) -#if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0 +#if (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) \ + && !defined(SQLITE_WASI) { "munmap", (sqlite3_syscall_ptr)munmap, 0 }, #else { "munmap", (sqlite3_syscall_ptr)0, 0 }, @@ -37230,7 +38246,7 @@ static int robustFchown(int fd, uid_t uid, gid_t gid){ /* ** This is the xSetSystemCall() method of sqlite3_vfs for all of the -** "unix" VFSes. Return SQLITE_OK opon successfully updating the +** "unix" VFSes. Return SQLITE_OK upon successfully updating the ** system call pointer, or SQLITE_NOTFOUND if there is no configurable ** system call named zName. */ @@ -37752,7 +38768,7 @@ static void vxworksReleaseFileId(struct vxworksFileId *pId){ ** If you close a file descriptor that points to a file that has locks, ** all locks on that file that are owned by the current process are ** released. To work around this problem, each unixInodeInfo object -** maintains a count of the number of pending locks on tha inode. +** maintains a count of the number of pending locks on the inode. ** When an attempt is made to close an unixFile, if there are ** other unixFile open on the same inode that are holding locks, the call ** to close() the file descriptor is deferred until all of the locks clear. @@ -37766,7 +38782,7 @@ static void vxworksReleaseFileId(struct vxworksFileId *pId){ ** not posix compliant. Under LinuxThreads, a lock created by thread ** A cannot be modified or overridden by a different thread B. ** Only thread A can modify the lock. Locking behavior is correct -** if the appliation uses the newer Native Posix Thread Library (NPTL) +** if the application uses the newer Native Posix Thread Library (NPTL) ** on linux - with NPTL a lock created by thread A can override locks ** in thread B. But there is no way to know at compile-time which ** threading library is being used. So there is no way to know at @@ -37968,7 +38984,7 @@ static void storeLastErrno(unixFile *pFile, int error){ } /* -** Close all file descriptors accumuated in the unixInodeInfo->pUnused list. +** Close all file descriptors accumulated in the unixInodeInfo->pUnused list. */ static void closePendingFds(unixFile *pFile){ unixInodeInfo *pInode = pFile->pInode; @@ -38316,7 +39332,7 @@ static int unixFileLock(unixFile *pFile, struct flock *pLock){ ** ** UNLOCKED -> SHARED ** SHARED -> RESERVED -** SHARED -> (PENDING) -> EXCLUSIVE +** SHARED -> EXCLUSIVE ** RESERVED -> (PENDING) -> EXCLUSIVE ** PENDING -> EXCLUSIVE ** @@ -38331,7 +39347,7 @@ static int unixLock(sqlite3_file *id, int eFileLock){ ** slightly in order to be compatible with Windows95 systems simultaneously ** accessing the same database file, in case that is ever required. ** - ** Symbols defined in os.h indentify the 'pending byte' and the 'reserved + ** Symbols defined in os.h identify the 'pending byte' and the 'reserved ** byte', each single bytes at well known offsets, and the 'shared byte ** range', a range of 510 bytes at a well known offset. ** @@ -38339,7 +39355,7 @@ static int unixLock(sqlite3_file *id, int eFileLock){ ** byte'. If this is successful, 'shared byte range' is read-locked ** and the lock on the 'pending byte' released. (Legacy note: When ** SQLite was first developed, Windows95 systems were still very common, - ** and Widnows95 lacks a shared-lock capability. So on Windows95, a + ** and Windows95 lacks a shared-lock capability. So on Windows95, a ** single randomly selected by from the 'shared byte range' is locked. ** Windows95 is now pretty much extinct, but this work-around for the ** lack of shared-locks on Windows95 lives on, for backwards @@ -38349,19 +39365,20 @@ static int unixLock(sqlite3_file *id, int eFileLock){ ** A RESERVED lock is implemented by grabbing a write-lock on the ** 'reserved byte'. ** - ** A process may only obtain a PENDING lock after it has obtained a - ** SHARED lock. A PENDING lock is implemented by obtaining a write-lock - ** on the 'pending byte'. This ensures that no new SHARED locks can be - ** obtained, but existing SHARED locks are allowed to persist. A process - ** does not have to obtain a RESERVED lock on the way to a PENDING lock. - ** This property is used by the algorithm for rolling back a journal file - ** after a crash. + ** An EXCLUSIVE lock may only be requested after either a SHARED or + ** RESERVED lock is held. An EXCLUSIVE lock is implemented by obtaining + ** a write-lock on the entire 'shared byte range'. Since all other locks + ** require a read-lock on one of the bytes within this range, this ensures + ** that no other locks are held on the database. ** - ** An EXCLUSIVE lock, obtained after a PENDING lock is held, is - ** implemented by obtaining a write-lock on the entire 'shared byte - ** range'. Since all other locks require a read-lock on one of the bytes - ** within this range, this ensures that no other locks are held on the - ** database. + ** If a process that holds a RESERVED lock requests an EXCLUSIVE, then + ** a PENDING lock is obtained first. A PENDING lock is implemented by + ** obtaining a write-lock on the 'pending byte'. This ensures that no new + ** SHARED locks can be obtained, but existing SHARED locks are allowed to + ** persist. If the call to this function fails to obtain the EXCLUSIVE + ** lock in this case, it holds the PENDING lock instead. The client may + ** then re-attempt the EXCLUSIVE lock later on, after existing SHARED + ** locks have cleared. */ int rc = SQLITE_OK; unixFile *pFile = (unixFile*)id; @@ -38387,7 +39404,7 @@ static int unixLock(sqlite3_file *id, int eFileLock){ /* Make sure the locking sequence is correct. ** (1) We never move from unlocked to anything higher than shared lock. - ** (2) SQLite never explicitly requests a pendig lock. + ** (2) SQLite never explicitly requests a pending lock. ** (3) A shared lock is always held when a reserve lock is requested. */ assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK ); @@ -38432,7 +39449,7 @@ static int unixLock(sqlite3_file *id, int eFileLock){ lock.l_len = 1L; lock.l_whence = SEEK_SET; if( eFileLock==SHARED_LOCK - || (eFileLock==EXCLUSIVE_LOCK && pFile->eFileLockeFileLock==RESERVED_LOCK) ){ lock.l_type = (eFileLock==SHARED_LOCK?F_RDLCK:F_WRLCK); lock.l_start = PENDING_BYTE; @@ -38443,6 +39460,9 @@ static int unixLock(sqlite3_file *id, int eFileLock){ storeLastErrno(pFile, tErrno); } goto end_lock; + }else if( eFileLock==EXCLUSIVE_LOCK ){ + pFile->eFileLock = PENDING_LOCK; + pInode->eFileLock = PENDING_LOCK; } } @@ -38530,13 +39550,9 @@ static int unixLock(sqlite3_file *id, int eFileLock){ } #endif - if( rc==SQLITE_OK ){ pFile->eFileLock = eFileLock; pInode->eFileLock = eFileLock; - }else if( eFileLock==EXCLUSIVE_LOCK ){ - pFile->eFileLock = PENDING_LOCK; - pInode->eFileLock = PENDING_LOCK; } end_lock: @@ -39606,7 +40622,7 @@ static int afpLock(sqlite3_file *id, int eFileLock){ /* Make sure the locking sequence is correct ** (1) We never move from unlocked to anything higher than shared lock. - ** (2) SQLite never explicitly requests a pendig lock. + ** (2) SQLite never explicitly requests a pending lock. ** (3) A shared lock is always held when a reserve lock is requested. */ assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK ); @@ -39722,7 +40738,7 @@ static int afpLock(sqlite3_file *id, int eFileLock){ if( !(failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST + pInode->sharedByte, 1, 0)) ){ int failed2 = SQLITE_OK; - /* now attemmpt to get the exclusive lock range */ + /* now attempt to get the exclusive lock range */ failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST, SHARED_SIZE, 1); if( failed && (failed2 = afpSetLock(context->dbPath, pFile, @@ -39943,12 +40959,6 @@ static int nfsUnlock(sqlite3_file *id, int eFileLock){ ** Seek to the offset passed as the second argument, then read cnt ** bytes into pBuf. Return the number of bytes actually read. ** -** NB: If you define USE_PREAD or USE_PREAD64, then it might also -** be necessary to define _XOPEN_SOURCE to be 500. This varies from -** one system to another. Since SQLite does not define USE_PREAD -** in any form by default, we will not attempt to define _XOPEN_SOURCE. -** See tickets #2741 and #2681. -** ** To avoid stomping the errno value on a failed read the lastErrno value ** is set before returning. */ @@ -40023,7 +41033,7 @@ static int unixRead( #endif #if SQLITE_MAX_MMAP_SIZE>0 - /* Deal with as much of this read request as possible by transfering + /* Deal with as much of this read request as possible by transferring ** data from the memory mapping using memcpy(). */ if( offsetmmapSize ){ if( offset+amt <= pFile->mmapSize ){ @@ -40175,7 +41185,7 @@ static int unixWrite( #endif #if defined(SQLITE_MMAP_READWRITE) && SQLITE_MAX_MMAP_SIZE>0 - /* Deal with as much of this write request as possible by transfering + /* Deal with as much of this write request as possible by transferring ** data from the memory mapping using memcpy(). */ if( offsetmmapSize ){ if( offset+amt <= pFile->mmapSize ){ @@ -40297,7 +41307,7 @@ static int full_fsync(int fd, int fullSync, int dataOnly){ /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a ** no-op. But go ahead and call fstat() to validate the file ** descriptor as we need a method to provoke a failure during - ** coverate testing. + ** coverage testing. */ #ifdef SQLITE_NO_SYNC { @@ -43127,12 +44137,10 @@ static void appendOnePathElement( if( zName[0]=='.' ){ if( nName==1 ) return; if( zName[1]=='.' && nName==2 ){ - if( pPath->nUsed<=1 ){ - pPath->rc = SQLITE_ERROR; - return; + if( pPath->nUsed>1 ){ + assert( pPath->zOut[0]=='/' ); + while( pPath->zOut[--pPath->nUsed]!='/' ){} } - assert( pPath->zOut[0]=='/' ); - while( pPath->zOut[--pPath->nUsed]!='/' ){} return; } } @@ -43344,12 +44352,17 @@ static int unixRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf){ ** than the argument. */ static int unixSleep(sqlite3_vfs *NotUsed, int microseconds){ -#if OS_VXWORKS +#if !defined(HAVE_NANOSLEEP) || HAVE_NANOSLEEP+0 struct timespec sp; - sp.tv_sec = microseconds / 1000000; sp.tv_nsec = (microseconds % 1000000) * 1000; + + /* Almost all modern unix systems support nanosleep(). But if you are + ** compiling for one of the rare exceptions, you can use + ** -DHAVE_NANOSLEEP=0 (perhaps in conjuction with -DHAVE_USLEEP if + ** usleep() is available) in order to bypass the use of nanosleep() */ nanosleep(&sp, NULL); + UNUSED_PARAMETER(NotUsed); return microseconds; #elif defined(HAVE_USLEEP) && HAVE_USLEEP @@ -45939,7 +46952,7 @@ static struct win_syscall { /* ** This is the xSetSystemCall() method of sqlite3_vfs for all of the -** "win32" VFSes. Return SQLITE_OK opon successfully updating the +** "win32" VFSes. Return SQLITE_OK upon successfully updating the ** system call pointer, or SQLITE_NOTFOUND if there is no configurable ** system call named zName. */ @@ -47519,7 +48532,7 @@ static int winRead( pFile->h, pBuf, amt, offset, pFile->locktype)); #if SQLITE_MAX_MMAP_SIZE>0 - /* Deal with as much of this read request as possible by transfering + /* Deal with as much of this read request as possible by transferring ** data from the memory mapping using memcpy(). */ if( offsetmmapSize ){ if( offset+amt <= pFile->mmapSize ){ @@ -47597,7 +48610,7 @@ static int winWrite( pFile->h, pBuf, amt, offset, pFile->locktype)); #if defined(SQLITE_MMAP_READWRITE) && SQLITE_MAX_MMAP_SIZE>0 - /* Deal with as much of this write request as possible by transfering + /* Deal with as much of this write request as possible by transferring ** data from the memory mapping using memcpy(). */ if( offsetmmapSize ){ if( offset+amt <= pFile->mmapSize ){ @@ -47707,7 +48720,7 @@ static int winTruncate(sqlite3_file *id, sqlite3_int64 nByte){ ** all references to memory-mapped content are closed. That is doable, ** but involves adding a few branches in the common write code path which ** could slow down normal operations slightly. Hence, we have decided for - ** now to simply make trancations a no-op if there are pending reads. We + ** now to simply make transactions a no-op if there are pending reads. We ** can maybe revisit this decision in the future. */ return SQLITE_OK; @@ -47766,7 +48779,7 @@ static int winTruncate(sqlite3_file *id, sqlite3_int64 nByte){ #ifdef SQLITE_TEST /* ** Count the number of fullsyncs and normal syncs. This is used to test -** that syncs and fullsyncs are occuring at the right times. +** that syncs and fullsyncs are occurring at the right times. */ SQLITE_API int sqlite3_sync_count = 0; SQLITE_API int sqlite3_fullsync_count = 0; @@ -48123,7 +49136,7 @@ static int winLock(sqlite3_file *id, int locktype){ */ if( locktype==EXCLUSIVE_LOCK && res ){ assert( pFile->locktype>=SHARED_LOCK ); - res = winUnlockReadLock(pFile); + (void)winUnlockReadLock(pFile); res = winLockFile(&pFile->h, SQLITE_LOCKFILE_FLAGS, SHARED_FIRST, 0, SHARED_SIZE, 0); if( res ){ @@ -49527,6 +50540,7 @@ static int winGetTempname(sqlite3_vfs *pVfs, char **pzBuf){ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "0123456789"; size_t i, j; + DWORD pid; int nPre = sqlite3Strlen30(SQLITE_TEMP_FILE_PREFIX); int nMax, nBuf, nDir, nLen; char *zBuf; @@ -49739,7 +50753,10 @@ static int winGetTempname(sqlite3_vfs *pVfs, char **pzBuf){ j = sqlite3Strlen30(zBuf); sqlite3_randomness(15, &zBuf[j]); + pid = osGetCurrentProcessId(); for(i=0; i<15; i++, j++){ + zBuf[j] += pid & 0xff; + pid >>= 8; zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ]; } zBuf[j] = 0; @@ -49977,7 +50994,7 @@ static int winOpen( if( isReadWrite ){ int rc2, isRO = 0; sqlite3BeginBenignMalloc(); - rc2 = winAccess(pVfs, zName, SQLITE_ACCESS_READ, &isRO); + rc2 = winAccess(pVfs, zUtf8Name, SQLITE_ACCESS_READ, &isRO); sqlite3EndBenignMalloc(); if( rc2==SQLITE_OK && isRO ) break; } @@ -49994,7 +51011,7 @@ static int winOpen( if( isReadWrite ){ int rc2, isRO = 0; sqlite3BeginBenignMalloc(); - rc2 = winAccess(pVfs, zName, SQLITE_ACCESS_READ, &isRO); + rc2 = winAccess(pVfs, zUtf8Name, SQLITE_ACCESS_READ, &isRO); sqlite3EndBenignMalloc(); if( rc2==SQLITE_OK && isRO ) break; } @@ -50014,7 +51031,7 @@ static int winOpen( if( isReadWrite ){ int rc2, isRO = 0; sqlite3BeginBenignMalloc(); - rc2 = winAccess(pVfs, zName, SQLITE_ACCESS_READ, &isRO); + rc2 = winAccess(pVfs, zUtf8Name, SQLITE_ACCESS_READ, &isRO); sqlite3EndBenignMalloc(); if( rc2==SQLITE_OK && isRO ) break; } @@ -50237,6 +51254,13 @@ static int winAccess( OSTRACE(("ACCESS name=%s, flags=%x, pResOut=%p\n", zFilename, flags, pResOut)); + if( zFilename==0 ){ + *pResOut = 0; + OSTRACE(("ACCESS name=%s, pResOut=%p, *pResOut=%d, rc=SQLITE_OK\n", + zFilename, pResOut, *pResOut)); + return SQLITE_OK; + } + zConverted = winConvertFromUtf8Filename(zFilename); if( zConverted==0 ){ OSTRACE(("ACCESS name=%s, rc=SQLITE_IOERR_NOMEM\n", zFilename)); @@ -52097,7 +53121,7 @@ SQLITE_PRIVATE int sqlite3BitvecSet(Bitvec *p, u32 i){ h = BITVEC_HASH(i++); /* if there wasn't a hash collision, and this doesn't */ /* completely fill the hash, then just add it without */ - /* worring about sub-dividing and re-hashing. */ + /* worrying about sub-dividing and re-hashing. */ if( !p->u.aHash[h] ){ if (p->nSet<(BITVEC_NINT-1)) { goto bitvec_set_end; @@ -52364,7 +53388,7 @@ SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int sz, int *aOp){ struct PCache { PgHdr *pDirty, *pDirtyTail; /* List of dirty pages in LRU order */ PgHdr *pSynced; /* Last synced page in dirty page list */ - int nRefSum; /* Sum of ref counts over all pages */ + i64 nRefSum; /* Sum of ref counts over all pages */ int szCache; /* Configured cache size */ int szSpill; /* Size before spilling occurs */ int szPage; /* Size of every page in this cache */ @@ -52393,11 +53417,15 @@ struct PCache { PgHdr *pPg; unsigned char *a; int j; - pPg = (PgHdr*)pLower->pExtra; - printf("%3d: nRef %2d flgs %02x data ", i, pPg->nRef, pPg->flags); - a = (unsigned char *)pLower->pBuf; - for(j=0; j<12; j++) printf("%02x", a[j]); - printf(" ptr %p\n", pPg); + if( pLower==0 ){ + printf("%3d: NULL\n", i); + }else{ + pPg = (PgHdr*)pLower->pExtra; + printf("%3d: nRef %2lld flgs %02x data ", i, pPg->nRef, pPg->flags); + a = (unsigned char *)pLower->pBuf; + for(j=0; j<12; j++) printf("%02x", a[j]); + printf(" ptr %p\n", pPg); + } } static void pcacheDump(PCache *pCache){ int N; @@ -52410,9 +53438,8 @@ struct PCache { if( N>sqlite3PcacheMxDump ) N = sqlite3PcacheMxDump; for(i=1; i<=N; i++){ pLower = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, i, 0); - if( pLower==0 ) continue; pcachePageTrace(i, pLower); - if( ((PgHdr*)pLower)->pPage==0 ){ + if( pLower && ((PgHdr*)pLower)->pPage==0 ){ sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, pLower, 0); } } @@ -52427,7 +53454,7 @@ struct PCache { ** Return 1 if pPg is on the dirty list for pCache. Return 0 if not. ** This routine runs inside of assert() statements only. */ -#ifdef SQLITE_DEBUG +#if defined(SQLITE_ENABLE_EXPENSIVE_ASSERT) static int pageOnDirtyList(PCache *pCache, PgHdr *pPg){ PgHdr *p; for(p=pCache->pDirty; p; p=p->pDirtyNext){ @@ -52435,6 +53462,16 @@ static int pageOnDirtyList(PCache *pCache, PgHdr *pPg){ } return 0; } +static int pageNotOnDirtyList(PCache *pCache, PgHdr *pPg){ + PgHdr *p; + for(p=pCache->pDirty; p; p=p->pDirtyNext){ + if( p==pPg ) return 0; + } + return 1; +} +#else +# define pageOnDirtyList(A,B) 1 +# define pageNotOnDirtyList(A,B) 1 #endif /* @@ -52455,7 +53492,7 @@ SQLITE_PRIVATE int sqlite3PcachePageSanity(PgHdr *pPg){ assert( pCache!=0 ); /* Every page has an associated PCache */ if( pPg->flags & PGHDR_CLEAN ){ assert( (pPg->flags & PGHDR_DIRTY)==0 );/* Cannot be both CLEAN and DIRTY */ - assert( !pageOnDirtyList(pCache, pPg) );/* CLEAN pages not on dirty list */ + assert( pageNotOnDirtyList(pCache, pPg) );/* CLEAN pages not on dirtylist */ }else{ assert( (pPg->flags & PGHDR_DIRTY)!=0 );/* If not CLEAN must be DIRTY */ assert( pPg->pDirtyNext==0 || pPg->pDirtyNext->pDirtyPrev==pPg ); @@ -52591,7 +53628,7 @@ static int numberOfCachePages(PCache *p){ return p->szCache; }else{ i64 n; - /* IMPLEMANTATION-OF: R-59858-46238 If the argument N is negative, then the + /* IMPLEMENTATION-OF: R-59858-46238 If the argument N is negative, then the ** number of cache pages is adjusted to be a number of pages that would ** use approximately abs(N*1024) bytes of memory based on the current ** page size. */ @@ -53079,7 +54116,7 @@ static PgHdr *pcacheMergeDirtyList(PgHdr *pA, PgHdr *pB){ } /* -** Sort the list of pages in accending order by pgno. Pages are +** Sort the list of pages in ascending order by pgno. Pages are ** connected by pDirty pointers. The pDirtyPrev pointers are ** corrupted by this sort. ** @@ -53138,14 +54175,14 @@ SQLITE_PRIVATE PgHdr *sqlite3PcacheDirtyList(PCache *pCache){ ** This is not the total number of pages referenced, but the sum of the ** reference count for all pages. */ -SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache *pCache){ +SQLITE_PRIVATE i64 sqlite3PcacheRefCount(PCache *pCache){ return pCache->nRefSum; } /* ** Return the number of references to the page supplied as an argument. */ -SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr *p){ +SQLITE_PRIVATE i64 sqlite3PcachePageRefcount(PgHdr *p){ return p->nRef; } @@ -53319,7 +54356,7 @@ SQLITE_PRIVATE void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIter)(PgHd ** If N is positive, then N pages worth of memory are allocated using a single ** sqlite3Malloc() call and that memory is used for the first N pages allocated. ** Or if N is negative, then -1024*N bytes of memory are allocated and used -** for as many pages as can be accomodated. +** for as many pages as can be accommodated. ** ** Only one of (2) or (3) can be used. Once the memory available to (2) or ** (3) is exhausted, subsequent allocations fail over to the general-purpose @@ -53353,7 +54390,7 @@ typedef struct PGroup PGroup; ** in memory directly after the associated page data, if the database is ** corrupt, code at the b-tree layer may overread the page buffer and ** read part of this structure before the corruption is detected. This -** can cause a valgrind error if the unitialized gap is accessed. Using u16 +** can cause a valgrind error if the uninitialized gap is accessed. Using u16 ** ensures there is no such gap, and therefore no bytes of uninitialized ** memory in the structure. ** @@ -54573,7 +55610,7 @@ SQLITE_PRIVATE void sqlite3PcacheStats( ** The TEST primitive includes a "batch" number. The TEST primitive ** will only see elements that were inserted before the last change ** in the batch number. In other words, if an INSERT occurs between -** two TESTs where the TESTs have the same batch nubmer, then the +** two TESTs where the TESTs have the same batch number, then the ** value added by the INSERT will not be visible to the second TEST. ** The initial batch number is zero, so if the very first TEST contains ** a non-zero batch number, it will see all prior INSERTs. @@ -55105,6 +56142,7 @@ SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, int iBatch, sqlite3_int64 # define sqlite3WalFramesize(z) 0 # define sqlite3WalFindFrame(x,y,z) 0 # define sqlite3WalFile(x) 0 +# undef SQLITE_USE_SEH #else #define WAL_SAVEPOINT_NDATA 4 @@ -55211,6 +56249,10 @@ SQLITE_PRIVATE int sqlite3WalWriteLock(Wal *pWal, int bLock); SQLITE_PRIVATE void sqlite3WalDb(Wal *pWal, sqlite3 *db); #endif +#ifdef SQLITE_USE_SEH +SQLITE_PRIVATE int sqlite3WalSystemErrno(Wal*); +#endif + #endif /* ifndef SQLITE_OMIT_WAL */ #endif /* SQLITE_WAL_H */ @@ -55496,7 +56538,7 @@ int sqlite3PagerTrace=1; /* True to enable tracing */ ** outstanding transactions have been abandoned, the pager is able to ** transition back to OPEN state, discarding the contents of the ** page-cache and any other in-memory state at the same time. Everything -** is reloaded from disk (and, if necessary, hot-journal rollback peformed) +** is reloaded from disk (and, if necessary, hot-journal rollback performed) ** when a read-transaction is next opened on the pager (transitioning ** the pager into READER state). At that point the system has recovered ** from the error. @@ -56869,7 +57911,7 @@ static int readJournalHdr( ** + 4 bytes: super-journal name checksum. ** + 8 bytes: aJournalMagic[]. ** -** The super-journal page checksum is the sum of the bytes in thesuper-journal +** The super-journal page checksum is the sum of the bytes in the super-journal ** name, where each byte is interpreted as a signed 8-bit integer. ** ** If zSuper is a NULL pointer (occurs for a single database transaction), @@ -56922,7 +57964,7 @@ static int writeSuperJournal(Pager *pPager, const char *zSuper){ } pPager->journalOff += (nSuper+20); - /* If the pager is in peristent-journal mode, then the physical + /* If the pager is in persistent-journal mode, then the physical ** journal-file may extend past the end of the super-journal name ** and 8 bytes of magic data just written to the file. This is ** dangerous because the code to rollback a hot-journal file @@ -57092,7 +58134,7 @@ static void pager_unlock(Pager *pPager){ /* ** This function is called whenever an IOERR or FULL error that requires -** the pager to transition into the ERROR state may ahve occurred. +** the pager to transition into the ERROR state may have occurred. ** The first argument is a pointer to the pager structure, the second ** the error-code about to be returned by a pager API function. The ** value returned is a copy of the second argument to this function. @@ -57367,7 +58409,7 @@ static void pagerUnlockAndRollback(Pager *pPager){ /* ** Parameter aData must point to a buffer of pPager->pageSize bytes -** of data. Compute and return a checksum based ont the contents of the +** of data. Compute and return a checksum based on the contents of the ** page of data and the current value of pPager->cksumInit. ** ** This is not a real checksum. It is really just the sum of the @@ -57800,6 +58842,8 @@ static int pager_truncate(Pager *pPager, Pgno nPage){ int rc = SQLITE_OK; assert( pPager->eState!=PAGER_ERROR ); assert( pPager->eState!=PAGER_READER ); + PAGERTRACE(("Truncate %d npage %u\n", PAGERID(pPager), nPage)); + if( isOpen(pPager->fd) && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN) @@ -58130,7 +59174,7 @@ static int pager_playback(Pager *pPager, int isHot){ ** see if it is possible to delete the super-journal. */ assert( zSuper==&pPager->pTmpSpace[4] ); - memset(&zSuper[-4], 0, 4); + memset(pPager->pTmpSpace, 0, 4); rc = pager_delsuper(pPager, zSuper); testcase( rc!=SQLITE_OK ); } @@ -58331,7 +59375,7 @@ static int pagerWalFrames( assert( pPager->pWal ); assert( pList ); #ifdef SQLITE_DEBUG - /* Verify that the page list is in accending order */ + /* Verify that the page list is in ascending order */ for(p=pList; p && p->pDirty; p=p->pDirty){ assert( p->pgno < p->pDirty->pgno ); } @@ -58462,7 +59506,7 @@ static int pagerPagecount(Pager *pPager, Pgno *pnPage){ #ifndef SQLITE_OMIT_WAL /* ** Check if the *-wal file that corresponds to the database opened by pPager -** exists if the database is not empy, or verify that the *-wal file does +** exists if the database is not empty, or verify that the *-wal file does ** not exist (by deleting it) if the database file is empty. ** ** If the database is not empty and the *-wal file exists, open the pager @@ -58751,7 +59795,6 @@ SQLITE_PRIVATE void sqlite3PagerShrink(Pager *pPager){ ** Numeric values associated with these states are OFF==1, NORMAL=2, ** and FULL=3. */ -#ifndef SQLITE_OMIT_PAGER_PRAGMAS SQLITE_PRIVATE void sqlite3PagerSetFlags( Pager *pPager, /* The pager to set safety level for */ unsigned pgFlags /* Various flags */ @@ -58786,7 +59829,6 @@ SQLITE_PRIVATE void sqlite3PagerSetFlags( pPager->doNotSpill |= SPILLFLAG_OFF; } } -#endif /* ** The following global variable is incremented whenever the library @@ -59874,11 +60916,7 @@ SQLITE_PRIVATE int sqlite3PagerOpen( int rc = SQLITE_OK; /* Return code */ int tempFile = 0; /* True for temp files (incl. in-memory files) */ int memDb = 0; /* True if this is an in-memory file */ -#ifndef SQLITE_OMIT_DESERIALIZE int memJM = 0; /* Memory journal mode */ -#else -# define memJM 0 -#endif int readOnly = 0; /* True if this is a read-only file */ int journalFileSize; /* Bytes to allocate for each journal fd */ char *zPathname = 0; /* Full path to database file */ @@ -59888,7 +60926,6 @@ SQLITE_PRIVATE int sqlite3PagerOpen( u32 szPageDflt = SQLITE_DEFAULT_PAGE_SIZE; /* Default page size */ const char *zUri = 0; /* URI args to copy */ int nUriByte = 1; /* Number of bytes of URI args at *zUri */ - int nUri = 0; /* Number of URI parameters */ /* Figure out how much space is required for each journal file-handle ** (there are two of them, the main journal and the sub-journal). */ @@ -59936,7 +60973,6 @@ SQLITE_PRIVATE int sqlite3PagerOpen( while( *z ){ z += strlen(z)+1; z += strlen(z)+1; - nUri++; } nUriByte = (int)(&z[1] - zUri); assert( nUriByte>=1 ); @@ -59999,12 +61035,13 @@ SQLITE_PRIVATE int sqlite3PagerOpen( ** specific formatting and order of the various filenames, so if the format ** changes here, be sure to change it there as well. */ + assert( SQLITE_PTRSIZE==sizeof(Pager*) ); pPtr = (u8 *)sqlite3MallocZero( ROUND8(sizeof(*pPager)) + /* Pager structure */ ROUND8(pcacheSize) + /* PCache object */ ROUND8(pVfs->szOsFile) + /* The main db file */ journalFileSize * 2 + /* The two journal files */ - sizeof(pPager) + /* Space to hold a pointer */ + SQLITE_PTRSIZE + /* Space to hold a pointer */ 4 + /* Database prefix */ nPathname + 1 + /* database filename */ nUriByte + /* query parameters */ @@ -60025,7 +61062,7 @@ SQLITE_PRIVATE int sqlite3PagerOpen( pPager->sjfd = (sqlite3_file*)pPtr; pPtr += journalFileSize; pPager->jfd = (sqlite3_file*)pPtr; pPtr += journalFileSize; assert( EIGHT_BYTE_ALIGNMENT(pPager->jfd) ); - memcpy(pPtr, &pPager, sizeof(pPager)); pPtr += sizeof(pPager); + memcpy(pPtr, &pPager, SQLITE_PTRSIZE); pPtr += SQLITE_PTRSIZE; /* Fill in the Pager.zFilename and pPager.zQueryParam fields */ pPtr += 4; /* Skip zero prefix */ @@ -60079,9 +61116,7 @@ SQLITE_PRIVATE int sqlite3PagerOpen( int fout = 0; /* VFS flags returned by xOpen() */ rc = sqlite3OsOpen(pVfs, pPager->zFilename, pPager->fd, vfsFlags, &fout); assert( !memDb ); -#ifndef SQLITE_OMIT_DESERIALIZE pPager->memVfs = memJM = (fout&SQLITE_OPEN_MEMORY)!=0; -#endif readOnly = (fout&SQLITE_OPEN_READONLY)!=0; /* If the file was successfully opened for read/write access, @@ -60192,18 +61227,7 @@ SQLITE_PRIVATE int sqlite3PagerOpen( pPager->memDb = (u8)memDb; pPager->readOnly = (u8)readOnly; assert( useJournal || pPager->tempFile ); - pPager->noSync = pPager->tempFile; - if( pPager->noSync ){ - assert( pPager->fullSync==0 ); - assert( pPager->extraSync==0 ); - assert( pPager->syncFlags==0 ); - assert( pPager->walSyncFlags==0 ); - }else{ - pPager->fullSync = 1; - pPager->extraSync = 0; - pPager->syncFlags = SQLITE_SYNC_NORMAL; - pPager->walSyncFlags = SQLITE_SYNC_NORMAL | (SQLITE_SYNC_NORMAL<<2); - } + sqlite3PagerSetFlags(pPager, (SQLITE_DEFAULT_SYNCHRONOUS+1)|PAGER_CACHESPILL); /* pPager->pFirst = 0; */ /* pPager->pFirstSynced = 0; */ /* pPager->pLast = 0; */ @@ -60229,7 +61253,7 @@ SQLITE_PRIVATE int sqlite3PagerOpen( /* ** Return the sqlite3_file for the main database given the name -** of the corresonding WAL or Journal name as passed into +** of the corresponding WAL or Journal name as passed into ** xOpen. */ SQLITE_API sqlite3_file *sqlite3_database_file_object(const char *zName){ @@ -60732,6 +61756,10 @@ static int getPageNormal( if( !isOpen(pPager->fd) || pPager->dbSizepPager->mxPgno ){ rc = SQLITE_FULL; + if( pgno<=pPager->dbSize ){ + sqlite3PcacheRelease(pPg); + pPg = 0; + } goto pager_acquire_err; } if( noContent ){ @@ -60896,10 +61924,12 @@ SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){ /* ** Release a page reference. ** -** The sqlite3PagerUnref() and sqlite3PagerUnrefNotNull() may only be -** used if we know that the page being released is not the last page. +** The sqlite3PagerUnref() and sqlite3PagerUnrefNotNull() may only be used +** if we know that the page being released is not the last reference to page1. ** The btree layer always holds page1 open until the end, so these first -** to routines can be used to release any page other than BtShared.pPage1. +** two routines can be used to release any page other than BtShared.pPage1. +** The assert() at tag-20230419-2 proves that this constraint is always +** honored. ** ** Use sqlite3PagerUnrefPageOne() to release page1. This latter routine ** checks the total number of outstanding pages and if the number of @@ -60915,7 +61945,7 @@ SQLITE_PRIVATE void sqlite3PagerUnrefNotNull(DbPage *pPg){ sqlite3PcacheRelease(pPg); } /* Do not use this routine to release the last reference to page1 */ - assert( sqlite3PcacheRefCount(pPager->pPCache)>0 ); + assert( sqlite3PcacheRefCount(pPager->pPCache)>0 ); /* tag-20230419-2 */ } SQLITE_PRIVATE void sqlite3PagerUnref(DbPage *pPg){ if( pPg ) sqlite3PagerUnrefNotNull(pPg); @@ -61464,7 +62494,7 @@ static int pager_incr_changecounter(Pager *pPager, int isDirectMode){ # define DIRECT_MODE isDirectMode #endif - if( !pPager->changeCountDone && ALWAYS(pPager->dbSize>0) ){ + if( !pPager->changeCountDone && pPager->dbSize>0 ){ PgHdr *pPgHdr; /* Reference to page 1 */ assert( !pPager->tempFile && isOpen(pPager->fd) ); @@ -62204,7 +63234,11 @@ SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint){ */ SQLITE_PRIVATE const char *sqlite3PagerFilename(const Pager *pPager, int nullIfMemDb){ static const char zFake[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - return (nullIfMemDb && pPager->memDb) ? &zFake[4] : pPager->zFilename; + if( nullIfMemDb && (pPager->memDb || sqlite3IsMemdb(pPager->pVfs)) ){ + return &zFake[4]; + }else{ + return pPager->zFilename; + } } /* @@ -62504,7 +63538,7 @@ SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *pPager, int eMode){ assert( pPager->eState!=PAGER_ERROR ); pPager->journalMode = (u8)eMode; - /* When transistioning from TRUNCATE or PERSIST to any other journal + /* When transitioning from TRUNCATE or PERSIST to any other journal ** mode except WAL, unless the pager is in locking_mode=exclusive mode, ** delete the journal file. */ @@ -62671,13 +63705,15 @@ SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager){ */ static int pagerExclusiveLock(Pager *pPager){ int rc; /* Return code */ + u8 eOrigLock; /* Original lock */ - assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK ); + assert( pPager->eLock>=SHARED_LOCK ); + eOrigLock = pPager->eLock; rc = pagerLockDb(pPager, EXCLUSIVE_LOCK); if( rc!=SQLITE_OK ){ /* If the attempt to grab the exclusive lock failed, release the ** pending lock that may have been obtained instead. */ - pagerUnlockDb(pPager, SHARED_LOCK); + pagerUnlockDb(pPager, eOrigLock); } return rc; @@ -62930,6 +63966,12 @@ SQLITE_PRIVATE int sqlite3PagerWalFramesize(Pager *pPager){ } #endif +#ifdef SQLITE_USE_SEH +SQLITE_PRIVATE int sqlite3PagerWalSystemErrno(Pager *pPager){ + return sqlite3WalSystemErrno(pPager->pWal); +} +#endif + #endif /* SQLITE_OMIT_DISKIO */ /************** End of pager.c ***********************************************/ @@ -63220,7 +64262,7 @@ SQLITE_PRIVATE int sqlite3WalTrace = 0; ** ** Technically, the various VFSes are free to implement these locks however ** they see fit. However, compatibility is encouraged so that VFSes can -** interoperate. The standard implemention used on both unix and windows +** interoperate. The standard implementation used on both unix and windows ** is for the index number to indicate a byte offset into the ** WalCkptInfo.aLock[] array in the wal-index header. In other words, all ** locks are on the shm file. The WALINDEX_LOCK_OFFSET constant (which @@ -63296,7 +64338,7 @@ struct WalIndexHdr { ** the mxFrame for that reader. The value READMARK_NOT_USED (0xffffffff) ** for any aReadMark[] means that entry is unused. aReadMark[0] is ** a special case; its value is never used and it exists as a place-holder -** to avoid having to offset aReadMark[] indexs by one. Readers holding +** to avoid having to offset aReadMark[] indexes by one. Readers holding ** WAL_READ_LOCK(0) always ignore the entire WAL and read all content ** directly from the database. ** @@ -63464,7 +64506,15 @@ struct Wal { u32 iReCksum; /* On commit, recalculate checksums from here */ const char *zWalName; /* Name of WAL file */ u32 nCkpt; /* Checkpoint sequence counter in the wal-header */ +#ifdef SQLITE_USE_SEH + u32 lockMask; /* Mask of locks held */ + void *pFree; /* Pointer to sqlite3_free() if exception thrown */ + u32 *pWiValue; /* Value to write into apWiData[iWiPg] */ + int iWiPg; /* Write pWiValue into apWiData[iWiPg] */ + int iSysErrno; /* System error code following exception */ +#endif #ifdef SQLITE_DEBUG + int nSehTry; /* Number of nested SEH_TRY{} blocks */ u8 lockError; /* True if a locking error has occurred */ #endif #ifdef SQLITE_ENABLE_SNAPSHOT @@ -63546,6 +64596,113 @@ struct WalIterator { sizeof(ht_slot)*HASHTABLE_NSLOT + HASHTABLE_NPAGE*sizeof(u32) \ ) +/* +** Structured Exception Handling (SEH) is a Windows-specific technique +** for catching exceptions raised while accessing memory-mapped files. +** +** The -DSQLITE_USE_SEH compile-time option means to use SEH to catch and +** deal with system-level errors that arise during WAL -shm file processing. +** Without this compile-time option, any system-level faults that appear +** while accessing the memory-mapped -shm file will cause a process-wide +** signal to be deliver, which will more than likely cause the entire +** process to exit. +*/ +#ifdef SQLITE_USE_SEH +#include + +/* Beginning of a block of code in which an exception might occur */ +# define SEH_TRY __try { \ + assert( walAssertLockmask(pWal) && pWal->nSehTry==0 ); \ + VVA_ONLY(pWal->nSehTry++); + +/* The end of a block of code in which an exception might occur */ +# define SEH_EXCEPT(X) \ + VVA_ONLY(pWal->nSehTry--); \ + assert( pWal->nSehTry==0 ); \ + } __except( sehExceptionFilter(pWal, GetExceptionCode(), GetExceptionInformation() ) ){ X } + +/* Simulate a memory-mapping fault in the -shm file for testing purposes */ +# define SEH_INJECT_FAULT sehInjectFault(pWal) + +/* +** The second argument is the return value of GetExceptionCode() for the +** current exception. Return EXCEPTION_EXECUTE_HANDLER if the exception code +** indicates that the exception may have been caused by accessing the *-shm +** file mapping. Or EXCEPTION_CONTINUE_SEARCH otherwise. +*/ +static int sehExceptionFilter(Wal *pWal, int eCode, EXCEPTION_POINTERS *p){ + VVA_ONLY(pWal->nSehTry--); + if( eCode==EXCEPTION_IN_PAGE_ERROR ){ + if( p && p->ExceptionRecord && p->ExceptionRecord->NumberParameters>=3 ){ + /* From MSDN: For this type of exception, the first element of the + ** ExceptionInformation[] array is a read-write flag - 0 if the exception + ** was thrown while reading, 1 if while writing. The second element is + ** the virtual address being accessed. The "third array element specifies + ** the underlying NTSTATUS code that resulted in the exception". */ + pWal->iSysErrno = (int)p->ExceptionRecord->ExceptionInformation[2]; + } + return EXCEPTION_EXECUTE_HANDLER; + } + return EXCEPTION_CONTINUE_SEARCH; +} + +/* +** If one is configured, invoke the xTestCallback callback with 650 as +** the argument. If it returns true, throw the same exception that is +** thrown by the system if the *-shm file mapping is accessed after it +** has been invalidated. +*/ +static void sehInjectFault(Wal *pWal){ + int res; + assert( pWal->nSehTry>0 ); + + res = sqlite3FaultSim(650); + if( res!=0 ){ + ULONG_PTR aArg[3]; + aArg[0] = 0; + aArg[1] = 0; + aArg[2] = (ULONG_PTR)res; + RaiseException(EXCEPTION_IN_PAGE_ERROR, 0, 3, (const ULONG_PTR*)aArg); + } +} + +/* +** There are two ways to use this macro. To set a pointer to be freed +** if an exception is thrown: +** +** SEH_FREE_ON_ERROR(0, pPtr); +** +** and to cancel the same: +** +** SEH_FREE_ON_ERROR(pPtr, 0); +** +** In the first case, there must not already be a pointer registered to +** be freed. In the second case, pPtr must be the registered pointer. +*/ +#define SEH_FREE_ON_ERROR(X,Y) \ + assert( (X==0 || Y==0) && pWal->pFree==X ); pWal->pFree = Y + +/* +** There are two ways to use this macro. To arrange for pWal->apWiData[iPg] +** to be set to pValue if an exception is thrown: +** +** SEH_SET_ON_ERROR(iPg, pValue); +** +** and to cancel the same: +** +** SEH_SET_ON_ERROR(0, 0); +*/ +#define SEH_SET_ON_ERROR(X,Y) pWal->iWiPg = X; pWal->pWiValue = Y + +#else +# define SEH_TRY VVA_ONLY(pWal->nSehTry++); +# define SEH_EXCEPT(X) VVA_ONLY(pWal->nSehTry--); assert( pWal->nSehTry==0 ); +# define SEH_INJECT_FAULT assert( pWal->nSehTry>0 ); +# define SEH_FREE_ON_ERROR(X,Y) +# define SEH_SET_ON_ERROR(X,Y) +#endif /* ifdef SQLITE_USE_SEH */ + + /* ** Obtain a pointer to the iPage'th page of the wal-index. The wal-index ** is broken into pages of WALINDEX_PGSZ bytes. Wal-index pages are @@ -63618,6 +64775,7 @@ static int walIndexPage( int iPage, /* The page we seek */ volatile u32 **ppPage /* Write the page pointer here */ ){ + SEH_INJECT_FAULT; if( pWal->nWiData<=iPage || (*ppPage = pWal->apWiData[iPage])==0 ){ return walIndexPageRealloc(pWal, iPage, ppPage); } @@ -63629,6 +64787,7 @@ static int walIndexPage( */ static volatile WalCkptInfo *walCkptInfo(Wal *pWal){ assert( pWal->nWiData>0 && pWal->apWiData[0] ); + SEH_INJECT_FAULT; return (volatile WalCkptInfo*)&(pWal->apWiData[0][sizeof(WalIndexHdr)/2]); } @@ -63637,6 +64796,7 @@ static volatile WalCkptInfo *walCkptInfo(Wal *pWal){ */ static volatile WalIndexHdr *walIndexHdr(Wal *pWal){ assert( pWal->nWiData>0 && pWal->apWiData[0] ); + SEH_INJECT_FAULT; return (volatile WalIndexHdr*)pWal->apWiData[0]; } @@ -63682,19 +64842,40 @@ static void walChecksumBytes( assert( nByte>=8 ); assert( (nByte&0x00000007)==0 ); assert( nByte<=65536 ); + assert( nByte%4==0 ); - if( nativeCksum ){ + if( !nativeCksum ){ + do { + s1 += BYTESWAP32(aData[0]) + s2; + s2 += BYTESWAP32(aData[1]) + s1; + aData += 2; + }while( aDatalockError = (u8)(rc!=SQLITE_OK && (rc&0xFF)!=SQLITE_BUSY); ) +#ifdef SQLITE_USE_SEH + if( rc==SQLITE_OK ) pWal->lockMask |= (1 << lockIdx); +#endif return rc; } static void walUnlockShared(Wal *pWal, int lockIdx){ if( pWal->exclusiveMode ) return; (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1, SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED); +#ifdef SQLITE_USE_SEH + pWal->lockMask &= ~(1 << lockIdx); +#endif WALTRACE(("WAL%p: release SHARED-%s\n", pWal, walLockName(lockIdx))); } static int walLockExclusive(Wal *pWal, int lockIdx, int n){ @@ -63889,12 +65076,20 @@ static int walLockExclusive(Wal *pWal, int lockIdx, int n){ WALTRACE(("WAL%p: acquire EXCLUSIVE-%s cnt=%d %s\n", pWal, walLockName(lockIdx), n, rc ? "failed" : "ok")); VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && (rc&0xFF)!=SQLITE_BUSY); ) +#ifdef SQLITE_USE_SEH + if( rc==SQLITE_OK ){ + pWal->lockMask |= (((1<exclusiveMode ) return; (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, n, SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE); +#ifdef SQLITE_USE_SEH + pWal->lockMask &= ~(((1<apWiData[0][WALINDEX_HDR_SIZE/sizeof(u32) + iFrame - 1]; } @@ -64245,6 +65441,7 @@ static int walIndexRecover(Wal *pWal){ /* Malloc a buffer to read frames into. */ szFrame = szPage + WAL_FRAME_HDRSIZE; aFrame = (u8 *)sqlite3_malloc64(szFrame + WALINDEX_PGSZ); + SEH_FREE_ON_ERROR(0, aFrame); if( !aFrame ){ rc = SQLITE_NOMEM_BKPT; goto recovery_error; @@ -64263,6 +65460,7 @@ static int walIndexRecover(Wal *pWal){ rc = walIndexPage(pWal, iPg, (volatile u32**)&aShare); assert( aShare!=0 || rc!=SQLITE_OK ); if( aShare==0 ) break; + SEH_SET_ON_ERROR(iPg, aShare); pWal->apWiData[iPg] = aPrivate; for(iFrame=iFirst; iFrame<=iLast; iFrame++){ @@ -64290,6 +65488,7 @@ static int walIndexRecover(Wal *pWal){ } } pWal->apWiData[iPg] = aShare; + SEH_SET_ON_ERROR(0,0); nHdr = (iPg==0 ? WALINDEX_HDR_SIZE : 0); nHdr32 = nHdr / sizeof(u32); #ifndef SQLITE_SAFER_WALINDEX_RECOVERY @@ -64320,9 +65519,11 @@ static int walIndexRecover(Wal *pWal){ } } #endif + SEH_INJECT_FAULT; if( iFrame<=iLast ) break; } + SEH_FREE_ON_ERROR(aFrame, 0); sqlite3_free(aFrame); } @@ -64350,6 +65551,7 @@ static int walIndexRecover(Wal *pWal){ }else{ pInfo->aReadMark[i] = READMARK_NOT_USED; } + SEH_INJECT_FAULT; walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1); }else if( rc!=SQLITE_BUSY ){ goto recovery_error; @@ -64507,7 +65709,7 @@ SQLITE_PRIVATE int sqlite3WalOpen( } /* -** Change the size to which the WAL file is trucated on each reset. +** Change the size to which the WAL file is truncated on each reset. */ SQLITE_PRIVATE void sqlite3WalLimit(Wal *pWal, i64 iLimit){ if( pWal ) pWal->mxWalSize = iLimit; @@ -64733,23 +65935,16 @@ static int walIteratorInit(Wal *pWal, u32 nBackfill, WalIterator **pp){ nByte = sizeof(WalIterator) + (nSegment-1)*sizeof(struct WalSegment) + iLast*sizeof(ht_slot); - p = (WalIterator *)sqlite3_malloc64(nByte); + p = (WalIterator *)sqlite3_malloc64(nByte + + sizeof(ht_slot) * (iLast>HASHTABLE_NPAGE?HASHTABLE_NPAGE:iLast) + ); if( !p ){ return SQLITE_NOMEM_BKPT; } memset(p, 0, nByte); p->nSegment = nSegment; - - /* Allocate temporary space used by the merge-sort routine. This block - ** of memory will be freed before this function returns. - */ - aTmp = (ht_slot *)sqlite3_malloc64( - sizeof(ht_slot) * (iLast>HASHTABLE_NPAGE?HASHTABLE_NPAGE:iLast) - ); - if( !aTmp ){ - rc = SQLITE_NOMEM_BKPT; - } - + aTmp = (ht_slot*)&(((u8*)p)[nByte]); + SEH_FREE_ON_ERROR(0, p); for(i=walFramePage(nBackfill+1); rc==SQLITE_OK && iaSegment[i].aPgno = (u32 *)sLoc.aPgno; } } - sqlite3_free(aTmp); - if( rc!=SQLITE_OK ){ + SEH_FREE_ON_ERROR(p, 0); walIteratorFree(p); p = 0; } @@ -65005,13 +66199,13 @@ static int walCheckpoint( mxSafeFrame = pWal->hdr.mxFrame; mxPage = pWal->hdr.nPage; for(i=1; iaReadMark+i); + u32 y = AtomicLoad(pInfo->aReadMark+i); SEH_INJECT_FAULT; if( mxSafeFrame>y ){ assert( y<=pWal->hdr.mxFrame ); rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(i), 1); if( rc==SQLITE_OK ){ u32 iMark = (i==1 ? mxSafeFrame : READMARK_NOT_USED); - AtomicStore(pInfo->aReadMark+i, iMark); + AtomicStore(pInfo->aReadMark+i, iMark); SEH_INJECT_FAULT; walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1); }else if( rc==SQLITE_BUSY ){ mxSafeFrame = y; @@ -65032,8 +66226,7 @@ static int walCheckpoint( && (rc = walBusyLock(pWal,xBusy,pBusyArg,WAL_READ_LOCK(0),1))==SQLITE_OK ){ u32 nBackfill = pInfo->nBackfill; - - pInfo->nBackfillAttempted = mxSafeFrame; + pInfo->nBackfillAttempted = mxSafeFrame; SEH_INJECT_FAULT; /* Sync the WAL to disk */ rc = sqlite3OsSync(pWal->pWalFd, CKPT_SYNC_FLAGS(sync_flags)); @@ -65064,6 +66257,7 @@ static int walCheckpoint( while( rc==SQLITE_OK && 0==walIteratorNext(pIter, &iDbpage, &iFrame) ){ i64 iOffset; assert( walFramePgno(pWal, iFrame)==iDbpage ); + SEH_INJECT_FAULT; if( AtomicLoad(&db->u1.isInterrupted) ){ rc = db->mallocFailed ? SQLITE_NOMEM_BKPT : SQLITE_INTERRUPT; break; @@ -65093,7 +66287,7 @@ static int walCheckpoint( } } if( rc==SQLITE_OK ){ - AtomicStore(&pInfo->nBackfill, mxSafeFrame); + AtomicStore(&pInfo->nBackfill, mxSafeFrame); SEH_INJECT_FAULT; } } @@ -65115,6 +66309,7 @@ static int walCheckpoint( */ if( rc==SQLITE_OK && eMode!=SQLITE_CHECKPOINT_PASSIVE ){ assert( pWal->writeLock ); + SEH_INJECT_FAULT; if( pInfo->nBackfillhdr.mxFrame ){ rc = SQLITE_BUSY; }else if( eMode>=SQLITE_CHECKPOINT_RESTART ){ @@ -65146,6 +66341,7 @@ static int walCheckpoint( } walcheckpoint_out: + SEH_FREE_ON_ERROR(pIter, 0); walIteratorFree(pIter); return rc; } @@ -65168,6 +66364,93 @@ static void walLimitSize(Wal *pWal, i64 nMax){ } } +#ifdef SQLITE_USE_SEH +/* +** This is the "standard" exception handler used in a few places to handle +** an exception thrown by reading from the *-shm mapping after it has become +** invalid in SQLITE_USE_SEH builds. It is used as follows: +** +** SEH_TRY { ... } +** SEH_EXCEPT( rc = walHandleException(pWal); ) +** +** This function does three things: +** +** 1) Determines the locks that should be held, based on the contents of +** the Wal.readLock, Wal.writeLock and Wal.ckptLock variables. All other +** held locks are assumed to be transient locks that would have been +** released had the exception not been thrown and are dropped. +** +** 2) Frees the pointer at Wal.pFree, if any, using sqlite3_free(). +** +** 3) Set pWal->apWiData[pWal->iWiPg] to pWal->pWiValue if not NULL +** +** 4) Returns SQLITE_IOERR. +*/ +static int walHandleException(Wal *pWal){ + if( pWal->exclusiveMode==0 ){ + static const int S = 1; + static const int E = (1<lockMask & ~( + (pWal->readLock<0 ? 0 : (S << WAL_READ_LOCK(pWal->readLock))) + | (pWal->writeLock ? (E << WAL_WRITE_LOCK) : 0) + | (pWal->ckptLock ? (E << WAL_CKPT_LOCK) : 0) + ); + for(ii=0; iipFree); + pWal->pFree = 0; + if( pWal->pWiValue ){ + pWal->apWiData[pWal->iWiPg] = pWal->pWiValue; + pWal->pWiValue = 0; + } + return SQLITE_IOERR_IN_PAGE; +} + +/* +** Assert that the Wal.lockMask mask, which indicates the locks held +** by the connenction, is consistent with the Wal.readLock, Wal.writeLock +** and Wal.ckptLock variables. To be used as: +** +** assert( walAssertLockmask(pWal) ); +*/ +static int walAssertLockmask(Wal *pWal){ + if( pWal->exclusiveMode==0 ){ + static const int S = 1; + static const int E = (1<readLock<0 ? 0 : (S << WAL_READ_LOCK(pWal->readLock))) + | (pWal->writeLock ? (E << WAL_WRITE_LOCK) : 0) + | (pWal->ckptLock ? (E << WAL_CKPT_LOCK) : 0) +#ifdef SQLITE_ENABLE_SNAPSHOT + | (pWal->pSnapshot ? (pWal->lockMask & (1 << WAL_CKPT_LOCK)) : 0) +#endif + ); + assert( mExpect==pWal->lockMask ); + } + return 1; +} + +/* +** Return and zero the "system error" field set when an +** EXCEPTION_IN_PAGE_ERROR exception is caught. +*/ +SQLITE_PRIVATE int sqlite3WalSystemErrno(Wal *pWal){ + int iRet = 0; + if( pWal ){ + iRet = pWal->iSysErrno; + pWal->iSysErrno = 0; + } + return iRet; +} + +#else +# define walAssertLockmask(x) 1 +#endif /* ifdef SQLITE_USE_SEH */ + /* ** Close a connection to a log file. */ @@ -65182,6 +66465,8 @@ SQLITE_PRIVATE int sqlite3WalClose( if( pWal ){ int isDelete = 0; /* True to unlink wal and wal-index files */ + assert( walAssertLockmask(pWal) ); + /* If an EXCLUSIVE lock can be obtained on the database file (using the ** ordinary, rollback-mode locking methods, this guarantees that the ** connection associated with this log file is the only connection to @@ -65206,7 +66491,7 @@ SQLITE_PRIVATE int sqlite3WalClose( ); if( bPersist!=1 ){ /* Try to delete the WAL file if the checkpoint completed and - ** fsyned (rc==SQLITE_OK) and if we are not in persistent-wal + ** fsynced (rc==SQLITE_OK) and if we are not in persistent-wal ** mode (!bPersist) */ isDelete = 1; }else if( pWal->mxWalSize>=0 ){ @@ -65273,7 +66558,7 @@ static SQLITE_NO_TSAN int walIndexTryHdr(Wal *pWal, int *pChanged){ ** give false-positive warnings about these accesses because the tools do not ** account for the double-read and the memory barrier. The use of mutexes ** here would be problematic as the memory being accessed is potentially - ** shared among multiple processes and not all mutex implementions work + ** shared among multiple processes and not all mutex implementations work ** reliably in that environment. */ aHdr = walIndexHdr(pWal); @@ -65724,6 +67009,7 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){ assert( pWal->nWiData>0 ); assert( pWal->apWiData[0]!=0 ); pInfo = walCkptInfo(pWal); + SEH_INJECT_FAULT; if( !useWal && AtomicLoad(&pInfo->nBackfill)==pWal->hdr.mxFrame #ifdef SQLITE_ENABLE_SNAPSHOT && (pWal->pSnapshot==0 || pWal->hdr.mxFrame==0) @@ -65773,7 +67059,7 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){ } #endif for(i=1; iaReadMark+i); + u32 thisMark = AtomicLoad(pInfo->aReadMark+i); SEH_INJECT_FAULT; if( mxReadMark<=thisMark && thisMark<=mxFrame ){ assert( thisMark!=READMARK_NOT_USED ); mxReadMark = thisMark; @@ -65839,7 +67125,7 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){ ** we can guarantee that the checkpointer that set nBackfill could not ** see any pages past pWal->hdr.mxFrame, this problem does not come up. */ - pWal->minFrame = AtomicLoad(&pInfo->nBackfill)+1; + pWal->minFrame = AtomicLoad(&pInfo->nBackfill)+1; SEH_INJECT_FAULT; walShmBarrier(pWal); if( AtomicLoad(pInfo->aReadMark+mxI)!=mxReadMark || memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr)) @@ -65854,6 +67140,54 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){ } #ifdef SQLITE_ENABLE_SNAPSHOT +/* +** This function does the work of sqlite3WalSnapshotRecover(). +*/ +static int walSnapshotRecover( + Wal *pWal, /* WAL handle */ + void *pBuf1, /* Temp buffer pWal->szPage bytes in size */ + void *pBuf2 /* Temp buffer pWal->szPage bytes in size */ +){ + int szPage = (int)pWal->szPage; + int rc; + i64 szDb; /* Size of db file in bytes */ + + rc = sqlite3OsFileSize(pWal->pDbFd, &szDb); + if( rc==SQLITE_OK ){ + volatile WalCkptInfo *pInfo = walCkptInfo(pWal); + u32 i = pInfo->nBackfillAttempted; + for(i=pInfo->nBackfillAttempted; i>AtomicLoad(&pInfo->nBackfill); i--){ + WalHashLoc sLoc; /* Hash table location */ + u32 pgno; /* Page number in db file */ + i64 iDbOff; /* Offset of db file entry */ + i64 iWalOff; /* Offset of wal file entry */ + + rc = walHashGet(pWal, walFramePage(i), &sLoc); + if( rc!=SQLITE_OK ) break; + assert( i - sLoc.iZero - 1 >=0 ); + pgno = sLoc.aPgno[i-sLoc.iZero-1]; + iDbOff = (i64)(pgno-1) * szPage; + + if( iDbOff+szPage<=szDb ){ + iWalOff = walFrameOffset(i, szPage) + WAL_FRAME_HDRSIZE; + rc = sqlite3OsRead(pWal->pWalFd, pBuf1, szPage, iWalOff); + + if( rc==SQLITE_OK ){ + rc = sqlite3OsRead(pWal->pDbFd, pBuf2, szPage, iDbOff); + } + + if( rc!=SQLITE_OK || 0==memcmp(pBuf1, pBuf2, szPage) ){ + break; + } + } + + pInfo->nBackfillAttempted = i-1; + } + } + + return rc; +} + /* ** Attempt to reduce the value of the WalCkptInfo.nBackfillAttempted ** variable so that older snapshots can be accessed. To do this, loop @@ -65879,50 +67213,21 @@ SQLITE_PRIVATE int sqlite3WalSnapshotRecover(Wal *pWal){ assert( pWal->readLock>=0 ); rc = walLockExclusive(pWal, WAL_CKPT_LOCK, 1); if( rc==SQLITE_OK ){ - volatile WalCkptInfo *pInfo = walCkptInfo(pWal); - int szPage = (int)pWal->szPage; - i64 szDb; /* Size of db file in bytes */ - - rc = sqlite3OsFileSize(pWal->pDbFd, &szDb); - if( rc==SQLITE_OK ){ - void *pBuf1 = sqlite3_malloc(szPage); - void *pBuf2 = sqlite3_malloc(szPage); - if( pBuf1==0 || pBuf2==0 ){ - rc = SQLITE_NOMEM; - }else{ - u32 i = pInfo->nBackfillAttempted; - for(i=pInfo->nBackfillAttempted; i>AtomicLoad(&pInfo->nBackfill); i--){ - WalHashLoc sLoc; /* Hash table location */ - u32 pgno; /* Page number in db file */ - i64 iDbOff; /* Offset of db file entry */ - i64 iWalOff; /* Offset of wal file entry */ - - rc = walHashGet(pWal, walFramePage(i), &sLoc); - if( rc!=SQLITE_OK ) break; - assert( i - sLoc.iZero - 1 >=0 ); - pgno = sLoc.aPgno[i-sLoc.iZero-1]; - iDbOff = (i64)(pgno-1) * szPage; - - if( iDbOff+szPage<=szDb ){ - iWalOff = walFrameOffset(i, szPage) + WAL_FRAME_HDRSIZE; - rc = sqlite3OsRead(pWal->pWalFd, pBuf1, szPage, iWalOff); - - if( rc==SQLITE_OK ){ - rc = sqlite3OsRead(pWal->pDbFd, pBuf2, szPage, iDbOff); - } - - if( rc!=SQLITE_OK || 0==memcmp(pBuf1, pBuf2, szPage) ){ - break; - } - } - - pInfo->nBackfillAttempted = i-1; - } + void *pBuf1 = sqlite3_malloc(pWal->szPage); + void *pBuf2 = sqlite3_malloc(pWal->szPage); + if( pBuf1==0 || pBuf2==0 ){ + rc = SQLITE_NOMEM; + }else{ + pWal->ckptLock = 1; + SEH_TRY { + rc = walSnapshotRecover(pWal, pBuf1, pBuf2); } - - sqlite3_free(pBuf1); - sqlite3_free(pBuf2); + SEH_EXCEPT( rc = SQLITE_IOERR_IN_PAGE; ) + pWal->ckptLock = 0; } + + sqlite3_free(pBuf1); + sqlite3_free(pBuf2); walUnlockExclusive(pWal, WAL_CKPT_LOCK, 1); } @@ -65931,28 +67236,20 @@ SQLITE_PRIVATE int sqlite3WalSnapshotRecover(Wal *pWal){ #endif /* SQLITE_ENABLE_SNAPSHOT */ /* -** Begin a read transaction on the database. -** -** This routine used to be called sqlite3OpenSnapshot() and with good reason: -** it takes a snapshot of the state of the WAL and wal-index for the current -** instant in time. The current thread will continue to use this snapshot. -** Other threads might append new content to the WAL and wal-index but -** that extra content is ignored by the current thread. -** -** If the database contents have changes since the previous read -** transaction, then *pChanged is set to 1 before returning. The -** Pager layer will use this to know that its cache is stale and -** needs to be flushed. +** This function does the work of sqlite3WalBeginReadTransaction() (see +** below). That function simply calls this one inside an SEH_TRY{...} block. */ -SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *pChanged){ +static int walBeginReadTransaction(Wal *pWal, int *pChanged){ int rc; /* Return code */ int cnt = 0; /* Number of TryBeginRead attempts */ #ifdef SQLITE_ENABLE_SNAPSHOT + int ckptLock = 0; int bChanged = 0; WalIndexHdr *pSnapshot = pWal->pSnapshot; #endif assert( pWal->ckptLock==0 ); + assert( pWal->nSehTry>0 ); #ifdef SQLITE_ENABLE_SNAPSHOT if( pSnapshot ){ @@ -65975,7 +67272,7 @@ SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *pChanged){ if( rc!=SQLITE_OK ){ return rc; } - pWal->ckptLock = 1; + ckptLock = 1; } #endif @@ -66039,15 +67336,37 @@ SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *pChanged){ } /* Release the shared CKPT lock obtained above. */ - if( pWal->ckptLock ){ + if( ckptLock ){ assert( pSnapshot ); walUnlockShared(pWal, WAL_CKPT_LOCK); - pWal->ckptLock = 0; } #endif return rc; } +/* +** Begin a read transaction on the database. +** +** This routine used to be called sqlite3OpenSnapshot() and with good reason: +** it takes a snapshot of the state of the WAL and wal-index for the current +** instant in time. The current thread will continue to use this snapshot. +** Other threads might append new content to the WAL and wal-index but +** that extra content is ignored by the current thread. +** +** If the database contents have changes since the previous read +** transaction, then *pChanged is set to 1 before returning. The +** Pager layer will use this to know that its cache is stale and +** needs to be flushed. +*/ +SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *pChanged){ + int rc; + SEH_TRY { + rc = walBeginReadTransaction(pWal, pChanged); + } + SEH_EXCEPT( rc = walHandleException(pWal); ) + return rc; +} + /* ** Finish with a read transaction. All this does is release the ** read-lock. @@ -66068,7 +67387,7 @@ SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal){ ** Return SQLITE_OK if successful, or an error code if an error occurs. If an ** error does occur, the final value of *piRead is undefined. */ -SQLITE_PRIVATE int sqlite3WalFindFrame( +static int walFindFrame( Wal *pWal, /* WAL handle */ Pgno pgno, /* Database page number to read data for */ u32 *piRead /* OUT: Frame number (or zero) */ @@ -66131,6 +67450,7 @@ SQLITE_PRIVATE int sqlite3WalFindFrame( } nCollide = HASHTABLE_NSLOT; iKey = walHash(pgno); + SEH_INJECT_FAULT; while( (iH = AtomicLoad(&sLoc.aHash[iKey]))!=0 ){ u32 iFrame = iH + sLoc.iZero; if( iFrame<=iLast && iFrame>=pWal->minFrame && sLoc.aPgno[iH-1]==pgno ){ @@ -66167,6 +67487,30 @@ SQLITE_PRIVATE int sqlite3WalFindFrame( return SQLITE_OK; } +/* +** Search the wal file for page pgno. If found, set *piRead to the frame that +** contains the page. Otherwise, if pgno is not in the wal file, set *piRead +** to zero. +** +** Return SQLITE_OK if successful, or an error code if an error occurs. If an +** error does occur, the final value of *piRead is undefined. +** +** The difference between this function and walFindFrame() is that this +** function wraps walFindFrame() in an SEH_TRY{...} block. +*/ +SQLITE_PRIVATE int sqlite3WalFindFrame( + Wal *pWal, /* WAL handle */ + Pgno pgno, /* Database page number to read data for */ + u32 *piRead /* OUT: Frame number (or zero) */ +){ + int rc; + SEH_TRY { + rc = walFindFrame(pWal, pgno, piRead); + } + SEH_EXCEPT( rc = SQLITE_IOERR_IN_PAGE; ) + return rc; +} + /* ** Read the contents of frame iRead from the wal file into buffer pOut ** (which is nOut bytes in size). Return SQLITE_OK if successful, or an @@ -66248,12 +67592,17 @@ SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal){ ** time the read transaction on this connection was started, then ** the write is disallowed. */ - if( memcmp(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr))!=0 ){ + SEH_TRY { + if( memcmp(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr))!=0 ){ + rc = SQLITE_BUSY_SNAPSHOT; + } + } + SEH_EXCEPT( rc = SQLITE_IOERR_IN_PAGE; ) + + if( rc!=SQLITE_OK ){ walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1); pWal->writeLock = 0; - rc = SQLITE_BUSY_SNAPSHOT; } - return rc; } @@ -66289,30 +67638,33 @@ SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *p Pgno iMax = pWal->hdr.mxFrame; Pgno iFrame; - /* Restore the clients cache of the wal-index header to the state it - ** was in before the client began writing to the database. - */ - memcpy(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr)); - - for(iFrame=pWal->hdr.mxFrame+1; - ALWAYS(rc==SQLITE_OK) && iFrame<=iMax; - iFrame++ - ){ - /* This call cannot fail. Unless the page for which the page number - ** is passed as the second argument is (a) in the cache and - ** (b) has an outstanding reference, then xUndo is either a no-op - ** (if (a) is false) or simply expels the page from the cache (if (b) - ** is false). - ** - ** If the upper layer is doing a rollback, it is guaranteed that there - ** are no outstanding references to any page other than page 1. And - ** page 1 is never written to the log until the transaction is - ** committed. As a result, the call to xUndo may not fail. + SEH_TRY { + /* Restore the clients cache of the wal-index header to the state it + ** was in before the client began writing to the database. */ - assert( walFramePgno(pWal, iFrame)!=1 ); - rc = xUndo(pUndoCtx, walFramePgno(pWal, iFrame)); + memcpy(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr)); + + for(iFrame=pWal->hdr.mxFrame+1; + ALWAYS(rc==SQLITE_OK) && iFrame<=iMax; + iFrame++ + ){ + /* This call cannot fail. Unless the page for which the page number + ** is passed as the second argument is (a) in the cache and + ** (b) has an outstanding reference, then xUndo is either a no-op + ** (if (a) is false) or simply expels the page from the cache (if (b) + ** is false). + ** + ** If the upper layer is doing a rollback, it is guaranteed that there + ** are no outstanding references to any page other than page 1. And + ** page 1 is never written to the log until the transaction is + ** committed. As a result, the call to xUndo may not fail. + */ + assert( walFramePgno(pWal, iFrame)!=1 ); + rc = xUndo(pUndoCtx, walFramePgno(pWal, iFrame)); + } + if( iMax!=pWal->hdr.mxFrame ) walCleanupHash(pWal); } - if( iMax!=pWal->hdr.mxFrame ) walCleanupHash(pWal); + SEH_EXCEPT( rc = SQLITE_IOERR_IN_PAGE; ) } return rc; } @@ -66356,7 +67708,10 @@ SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData){ pWal->hdr.mxFrame = aWalData[0]; pWal->hdr.aFrameCksum[0] = aWalData[1]; pWal->hdr.aFrameCksum[1] = aWalData[2]; - walCleanupHash(pWal); + SEH_TRY { + walCleanupHash(pWal); + } + SEH_EXCEPT( rc = SQLITE_IOERR_IN_PAGE; ) } return rc; @@ -66537,7 +67892,7 @@ static int walRewriteChecksums(Wal *pWal, u32 iLast){ ** Write a set of frames to the log. The caller must hold the write-lock ** on the log file (obtained using sqlite3WalBeginWriteTransaction()). */ -SQLITE_PRIVATE int sqlite3WalFrames( +static int walFrames( Wal *pWal, /* Wal handle to write to */ int szPage, /* Database page-size in bytes */ PgHdr *pList, /* List of dirty pages to write */ @@ -66625,7 +67980,9 @@ SQLITE_PRIVATE int sqlite3WalFrames( if( rc ) return rc; } } - assert( (int)pWal->szPage==szPage ); + if( (int)pWal->szPage!=szPage ){ + return SQLITE_CORRUPT_BKPT; /* TH3 test case: cov1/corrupt155.test */ + } /* Setup information needed to write frames into the WAL */ w.pWal = pWal; @@ -66646,7 +68003,7 @@ SQLITE_PRIVATE int sqlite3WalFrames( ** checksums must be recomputed when the transaction is committed. */ if( iFirst && (p->pDirty || isCommit==0) ){ u32 iWrite = 0; - VVA_ONLY(rc =) sqlite3WalFindFrame(pWal, p->pgno, &iWrite); + VVA_ONLY(rc =) walFindFrame(pWal, p->pgno, &iWrite); assert( rc==SQLITE_OK || iWrite==0 ); if( iWrite>=iFirst ){ i64 iOff = walFrameOffset(iWrite, szPage) + WAL_FRAME_HDRSIZE; @@ -66765,6 +68122,29 @@ SQLITE_PRIVATE int sqlite3WalFrames( return rc; } +/* +** Write a set of frames to the log. The caller must hold the write-lock +** on the log file (obtained using sqlite3WalBeginWriteTransaction()). +** +** The difference between this function and walFrames() is that this +** function wraps walFrames() in an SEH_TRY{...} block. +*/ +SQLITE_PRIVATE int sqlite3WalFrames( + Wal *pWal, /* Wal handle to write to */ + int szPage, /* Database page-size in bytes */ + PgHdr *pList, /* List of dirty pages to write */ + Pgno nTruncate, /* Database size after this commit */ + int isCommit, /* True if this is a commit */ + int sync_flags /* Flags to pass to OsSync() (or 0) */ +){ + int rc; + SEH_TRY { + rc = walFrames(pWal, szPage, pList, nTruncate, isCommit, sync_flags); + } + SEH_EXCEPT( rc = walHandleException(pWal); ) + return rc; +} + /* ** This routine is called to implement sqlite3_wal_checkpoint() and ** related interfaces. @@ -66844,30 +68224,33 @@ SQLITE_PRIVATE int sqlite3WalCheckpoint( /* Read the wal-index header. */ - if( rc==SQLITE_OK ){ - walDisableBlocking(pWal); - rc = walIndexReadHdr(pWal, &isChanged); - (void)walEnableBlocking(pWal); - if( isChanged && pWal->pDbFd->pMethods->iVersion>=3 ){ - sqlite3OsUnfetch(pWal->pDbFd, 0, 0); + SEH_TRY { + if( rc==SQLITE_OK ){ + walDisableBlocking(pWal); + rc = walIndexReadHdr(pWal, &isChanged); + (void)walEnableBlocking(pWal); + if( isChanged && pWal->pDbFd->pMethods->iVersion>=3 ){ + sqlite3OsUnfetch(pWal->pDbFd, 0, 0); + } } - } - - /* Copy data from the log to the database file. */ - if( rc==SQLITE_OK ){ - if( pWal->hdr.mxFrame && walPagesize(pWal)!=nBuf ){ - rc = SQLITE_CORRUPT_BKPT; - }else{ - rc = walCheckpoint(pWal, db, eMode2, xBusy2, pBusyArg, sync_flags, zBuf); - } + /* Copy data from the log to the database file. */ + if( rc==SQLITE_OK ){ + if( pWal->hdr.mxFrame && walPagesize(pWal)!=nBuf ){ + rc = SQLITE_CORRUPT_BKPT; + }else{ + rc = walCheckpoint(pWal, db, eMode2, xBusy2, pBusyArg, sync_flags,zBuf); + } - /* If no error occurred, set the output variables. */ - if( rc==SQLITE_OK || rc==SQLITE_BUSY ){ - if( pnLog ) *pnLog = (int)pWal->hdr.mxFrame; - if( pnCkpt ) *pnCkpt = (int)(walCkptInfo(pWal)->nBackfill); + /* If no error occurred, set the output variables. */ + if( rc==SQLITE_OK || rc==SQLITE_BUSY ){ + if( pnLog ) *pnLog = (int)pWal->hdr.mxFrame; + SEH_INJECT_FAULT; + if( pnCkpt ) *pnCkpt = (int)(walCkptInfo(pWal)->nBackfill); + } } } + SEH_EXCEPT( rc = walHandleException(pWal); ) if( isChanged ){ /* If a new wal-index header was loaded before the checkpoint was @@ -66944,7 +68327,9 @@ SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op){ ** locks are taken in this case). Nor should the pager attempt to ** upgrade to exclusive-mode following such an error. */ +#ifndef SQLITE_USE_SEH assert( pWal->readLock>=0 || pWal->lockError ); +#endif assert( pWal->readLock>=0 || (op<=0 && pWal->exclusiveMode==0) ); if( op==0 ){ @@ -67045,16 +68430,19 @@ SQLITE_API int sqlite3_snapshot_cmp(sqlite3_snapshot *p1, sqlite3_snapshot *p2){ */ SQLITE_PRIVATE int sqlite3WalSnapshotCheck(Wal *pWal, sqlite3_snapshot *pSnapshot){ int rc; - rc = walLockShared(pWal, WAL_CKPT_LOCK); - if( rc==SQLITE_OK ){ - WalIndexHdr *pNew = (WalIndexHdr*)pSnapshot; - if( memcmp(pNew->aSalt, pWal->hdr.aSalt, sizeof(pWal->hdr.aSalt)) - || pNew->mxFramenBackfillAttempted - ){ - rc = SQLITE_ERROR_SNAPSHOT; - walUnlockShared(pWal, WAL_CKPT_LOCK); + SEH_TRY { + rc = walLockShared(pWal, WAL_CKPT_LOCK); + if( rc==SQLITE_OK ){ + WalIndexHdr *pNew = (WalIndexHdr*)pSnapshot; + if( memcmp(pNew->aSalt, pWal->hdr.aSalt, sizeof(pWal->hdr.aSalt)) + || pNew->mxFramenBackfillAttempted + ){ + rc = SQLITE_ERROR_SNAPSHOT; + walUnlockShared(pWal, WAL_CKPT_LOCK); + } } } + SEH_EXCEPT( rc = walHandleException(pWal); ) return rc; } @@ -67285,7 +68673,7 @@ SQLITE_PRIVATE sqlite3_file *sqlite3WalFile(Wal *pWal){ ** byte are used. The integer consists of all bytes that have bit 8 set and ** the first byte with bit 8 clear. The most significant byte of the integer ** appears first. A variable-length integer may not be more than 9 bytes long. -** As a special case, all 8 bytes of the 9th byte are used as data. This +** As a special case, all 8 bits of the 9th byte are used as data. This ** allows a 64-bit integer to be encoded in 9 bytes. ** ** 0x00 becomes 0x00000000 @@ -67293,7 +68681,7 @@ SQLITE_PRIVATE sqlite3_file *sqlite3WalFile(Wal *pWal){ ** 0x81 0x00 becomes 0x00000080 ** 0x82 0x00 becomes 0x00000100 ** 0x80 0x7f becomes 0x0000007f -** 0x8a 0x91 0xd1 0xac 0x78 becomes 0x12345678 +** 0x81 0x91 0xd1 0xac 0x78 becomes 0x12345678 ** 0x81 0x81 0x81 0x81 0x01 becomes 0x10204081 ** ** Variable length integers are used for rowids and to hold the number of @@ -67376,7 +68764,7 @@ typedef struct CellInfo CellInfo; ** page that has been loaded into memory. The information in this object ** is derived from the raw on-disk page content. ** -** As each database page is loaded into memory, the pager allocats an +** As each database page is loaded into memory, the pager allocates an ** instance of this object and zeros the first 8 bytes. (This is the ** "extra" information associated with each page of the pager.) ** @@ -67669,7 +69057,7 @@ struct BtCursor { #define BTCF_WriteFlag 0x01 /* True if a write cursor */ #define BTCF_ValidNKey 0x02 /* True if info.nKey is valid */ #define BTCF_ValidOvfl 0x04 /* True if aOverflow is valid */ -#define BTCF_AtLast 0x08 /* Cursor is pointing ot the last entry */ +#define BTCF_AtLast 0x08 /* Cursor is pointing to the last entry */ #define BTCF_Incrblob 0x10 /* True if an incremental I/O handle */ #define BTCF_Multiple 0x20 /* Maybe another cursor on the same btree */ #define BTCF_Pinned 0x40 /* Cursor is busy and cannot be moved */ @@ -67787,15 +69175,15 @@ struct BtCursor { ** So, this macro is defined instead. */ #ifndef SQLITE_OMIT_AUTOVACUUM -#define ISAUTOVACUUM (pBt->autoVacuum) +#define ISAUTOVACUUM(pBt) (pBt->autoVacuum) #else -#define ISAUTOVACUUM 0 +#define ISAUTOVACUUM(pBt) 0 #endif /* -** This structure is passed around through all the sanity checking routines -** in order to keep track of some global state information. +** This structure is passed around through all the PRAGMA integrity_check +** checking routines in order to keep track of some global state information. ** ** The aRef[] array is allocated so that there is 1 bit for each page in ** the database. As the integrity-check proceeds, for each page used in @@ -67811,10 +69199,12 @@ struct IntegrityCk { Pgno nPage; /* Number of pages in the database */ int mxErr; /* Stop accumulating errors when this reaches zero */ int nErr; /* Number of messages written to zErrMsg so far */ - int bOomFault; /* A memory allocation error has occurred */ + int rc; /* SQLITE_OK, SQLITE_NOMEM, or SQLITE_INTERRUPT */ + u32 nStep; /* Number of steps into the integrity_check process */ const char *zPfx; /* Error message prefix */ - Pgno v1; /* Value for first %u substitution in zPfx */ - int v2; /* Value for second %d substitution in zPfx */ + Pgno v0; /* Value for first %u substitution in zPfx (root page) */ + Pgno v1; /* Value for second %u substitution in zPfx (current pg) */ + int v2; /* Value for third %d substitution in zPfx */ StrAccum errMsg; /* Accumulate the error message text here */ u32 *heap; /* Min-heap used for analyzing cell coverage */ sqlite3 *db; /* Database connection running the check */ @@ -67830,7 +69220,7 @@ struct IntegrityCk { /* ** get2byteAligned(), unlike get2byte(), requires that its argument point to a -** two-byte aligned address. get2bytea() is only used for accessing the +** two-byte aligned address. get2byteAligned() is only used for accessing the ** cell addresses in a btree header. */ #if SQLITE_BYTEORDER==4321 @@ -68007,7 +69397,7 @@ SQLITE_PRIVATE int sqlite3BtreeHoldsMutex(Btree *p){ ** ** There is a corresponding leave-all procedures. ** -** Enter the mutexes in accending order by BtShared pointer address +** Enter the mutexes in ascending order by BtShared pointer address ** to avoid the possibility of deadlock when two threads with ** two or more btrees in common both try to lock all their btrees ** at the same instant. @@ -68139,6 +69529,7 @@ SQLITE_PRIVATE void sqlite3BtreeLeaveCursor(BtCursor *pCur){ /************** End of btmutex.c *********************************************/ /************** Begin file btree.c *******************************************/ + /* ** 2004 April 6 ** @@ -68277,8 +69668,8 @@ SQLITE_PRIVATE sqlite3_uint64 sqlite3BtreeSeekCount(Btree *pBt){ int corruptPageError(int lineno, MemPage *p){ char *zMsg; sqlite3BeginBenignMalloc(); - zMsg = sqlite3_mprintf("database corruption page %d of %s", - (int)p->pgno, sqlite3PagerFilename(p->pBt->pPager, 0) + zMsg = sqlite3_mprintf("database corruption page %u of %s", + p->pgno, sqlite3PagerFilename(p->pBt->pPager, 0) ); sqlite3EndBenignMalloc(); if( zMsg ){ @@ -69087,8 +70478,25 @@ SQLITE_PRIVATE int sqlite3BtreeCursorRestore(BtCursor *pCur, int *pDifferentRow) */ SQLITE_PRIVATE void sqlite3BtreeCursorHint(BtCursor *pCur, int eHintType, ...){ /* Used only by system that substitute their own storage engine */ +#ifdef SQLITE_DEBUG + if( ALWAYS(eHintType==BTREE_HINT_RANGE) ){ + va_list ap; + Expr *pExpr; + Walker w; + memset(&w, 0, sizeof(w)); + w.xExprCallback = sqlite3CursorRangeHintExprCheck; + va_start(ap, eHintType); + pExpr = va_arg(ap, Expr*); + w.u.aMem = va_arg(ap, Mem*); + va_end(ap); + assert( pExpr!=0 ); + assert( w.u.aMem!=0 ); + sqlite3WalkExpr(&w, pExpr); + } +#endif /* SQLITE_DEBUG */ } -#endif +#endif /* SQLITE_ENABLE_CURSOR_HINTS */ + /* ** Provide flag hints to the cursor. @@ -69173,7 +70581,7 @@ static void ptrmapPut(BtShared *pBt, Pgno key, u8 eType, Pgno parent, int *pRC){ pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage); if( eType!=pPtrmap[offset] || get4byte(&pPtrmap[offset+1])!=parent ){ - TRACE(("PTRMAP_UPDATE: %d->(%d,%d)\n", key, eType, parent)); + TRACE(("PTRMAP_UPDATE: %u->(%u,%u)\n", key, eType, parent)); *pRC= rc = sqlite3PagerWrite(pDbPage); if( rc==SQLITE_OK ){ pPtrmap[offset] = eType; @@ -69372,27 +70780,31 @@ static void btreeParseCellPtr( iKey = *pIter; if( iKey>=0x80 ){ u8 x; - iKey = ((iKey&0x7f)<<7) | ((x = *++pIter) & 0x7f); + iKey = (iKey<<7) ^ (x = *++pIter); if( x>=0x80 ){ - iKey = (iKey<<7) | ((x =*++pIter) & 0x7f); + iKey = (iKey<<7) ^ (x = *++pIter); if( x>=0x80 ){ - iKey = (iKey<<7) | ((x = *++pIter) & 0x7f); + iKey = (iKey<<7) ^ 0x10204000 ^ (x = *++pIter); if( x>=0x80 ){ - iKey = (iKey<<7) | ((x = *++pIter) & 0x7f); + iKey = (iKey<<7) ^ 0x4000 ^ (x = *++pIter); if( x>=0x80 ){ - iKey = (iKey<<7) | ((x = *++pIter) & 0x7f); + iKey = (iKey<<7) ^ 0x4000 ^ (x = *++pIter); if( x>=0x80 ){ - iKey = (iKey<<7) | ((x = *++pIter) & 0x7f); + iKey = (iKey<<7) ^ 0x4000 ^ (x = *++pIter); if( x>=0x80 ){ - iKey = (iKey<<7) | ((x = *++pIter) & 0x7f); + iKey = (iKey<<7) ^ 0x4000 ^ (x = *++pIter); if( x>=0x80 ){ - iKey = (iKey<<8) | (*++pIter); + iKey = (iKey<<8) ^ 0x8000 ^ (*++pIter); } } } } } + }else{ + iKey ^= 0x204000; } + }else{ + iKey ^= 0x4000; } } pIter++; @@ -69469,10 +70881,11 @@ static void btreeParseCell( ** ** cellSizePtrNoPayload() => table internal nodes ** cellSizePtrTableLeaf() => table leaf nodes -** cellSizePtr() => all index nodes & table leaf nodes +** cellSizePtr() => index internal nodes +** cellSizeIdxLeaf() => index leaf nodes */ static u16 cellSizePtr(MemPage *pPage, u8 *pCell){ - u8 *pIter = pCell + pPage->childPtrSize; /* For looping over bytes of pCell */ + u8 *pIter = pCell + 4; /* For looping over bytes of pCell */ u8 *pEnd; /* End mark for a varint */ u32 nSize; /* Size value to return */ @@ -69485,6 +70898,49 @@ static u16 cellSizePtr(MemPage *pPage, u8 *pCell){ pPage->xParseCell(pPage, pCell, &debuginfo); #endif + assert( pPage->childPtrSize==4 ); + nSize = *pIter; + if( nSize>=0x80 ){ + pEnd = &pIter[8]; + nSize &= 0x7f; + do{ + nSize = (nSize<<7) | (*++pIter & 0x7f); + }while( *(pIter)>=0x80 && pItermaxLocal ); + testcase( nSize==(u32)pPage->maxLocal+1 ); + if( nSize<=pPage->maxLocal ){ + nSize += (u32)(pIter - pCell); + assert( nSize>4 ); + }else{ + int minLocal = pPage->minLocal; + nSize = minLocal + (nSize - minLocal) % (pPage->pBt->usableSize - 4); + testcase( nSize==pPage->maxLocal ); + testcase( nSize==(u32)pPage->maxLocal+1 ); + if( nSize>pPage->maxLocal ){ + nSize = minLocal; + } + nSize += 4 + (u16)(pIter - pCell); + } + assert( nSize==debuginfo.nSize || CORRUPT_DB ); + return (u16)nSize; +} +static u16 cellSizePtrIdxLeaf(MemPage *pPage, u8 *pCell){ + u8 *pIter = pCell; /* For looping over bytes of pCell */ + u8 *pEnd; /* End mark for a varint */ + u32 nSize; /* Size value to return */ + +#ifdef SQLITE_DEBUG + /* The value returned by this function should always be the same as + ** the (CellInfo.nSize) value found by doing a full parse of the + ** cell. If SQLITE_DEBUG is defined, an assert() at the bottom of + ** this function verifies that this invariant is not violated. */ + CellInfo debuginfo; + pPage->xParseCell(pPage, pCell, &debuginfo); +#endif + + assert( pPage->childPtrSize==0 ); nSize = *pIter; if( nSize>=0x80 ){ pEnd = &pIter[8]; @@ -69609,7 +71065,7 @@ static void ptrmapPutOvflPtr(MemPage *pPage, MemPage *pSrc, u8 *pCell,int *pRC){ pPage->xParseCell(pPage, pCell, &info); if( info.nLocalaDataEnd, pCell, pCell+info.nLocal) ){ + if( SQLITE_OVERFLOW(pSrc->aDataEnd, pCell, pCell+info.nLocal) ){ testcase( pSrc!=pPage ); *pRC = SQLITE_CORRUPT_BKPT; return; @@ -69710,7 +71166,7 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){ iCellStart = get2byte(&data[hdr+5]); if( nCell>0 ){ temp = sqlite3PagerTempSpace(pPage->pBt->pPager); - memcpy(&temp[iCellStart], &data[iCellStart], usableSize - iCellStart); + memcpy(temp, data, usableSize); src = temp; for(i=0; iiCellLast ){ + if( pc>iCellLast ){ return SQLITE_CORRUPT_PAGE(pPage); } - assert( pc>=iCellStart && pc<=iCellLast ); + assert( pc>=0 && pc<=iCellLast ); size = pPage->xCellSize(pPage, &src[pc]); cbrk -= size; if( cbrkusableSize ){ @@ -69839,7 +71295,7 @@ static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){ ** allocation is being made in order to insert a new cell, so we will ** also end up needing a new cell pointer. */ -static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){ +static SQLITE_INLINE int allocateSpace(MemPage *pPage, int nByte, int *pIdx){ const int hdr = pPage->hdrOffset; /* Local cache of pPage->hdrOffset */ u8 * const data = pPage->aData; /* Local cache of pPage->aData */ int top; /* First byte of cell content area */ @@ -69865,13 +71321,14 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){ ** integer, so a value of 0 is used in its place. */ pTmp = &data[hdr+5]; top = get2byte(pTmp); - assert( top<=(int)pPage->pBt->usableSize ); /* by btreeComputeFreeSpace() */ if( gap>top ){ if( top==0 && pPage->pBt->usableSize==65536 ){ top = 65536; }else{ return SQLITE_CORRUPT_PAGE(pPage); } + }else if( top>(int)pPage->pBt->usableSize ){ + return SQLITE_CORRUPT_PAGE(pPage); } /* If there is enough space between gap and top for one more cell pointer, @@ -69933,7 +71390,7 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){ ** ** Even though the freeblock list was checked by btreeComputeFreeSpace(), ** that routine will not detect overlap between cells or freeblocks. Nor -** does it detect cells or freeblocks that encrouch into the reserved bytes +** does it detect cells or freeblocks that encroach into the reserved bytes ** at the end of the page. So do additional corruption checks inside this ** routine and return SQLITE_CORRUPT if any problems are found. */ @@ -69954,7 +71411,7 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){ assert( CORRUPT_DB || iEnd <= pPage->pBt->usableSize ); assert( sqlite3_mutex_held(pPage->pBt->mutex) ); assert( iSize>=4 ); /* Minimum cell size is 4 */ - assert( iStart<=pPage->pBt->usableSize-4 ); + assert( CORRUPT_DB || iStart<=pPage->pBt->usableSize-4 ); /* The list of freeblocks must be in ascending order. Find the ** spot on the list where iStart should be inserted. @@ -70011,6 +71468,11 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){ } pTmp = &data[hdr+5]; x = get2byte(pTmp); + if( pPage->pBt->btsFlags & BTS_FAST_SECURE ){ + /* Overwrite deleted information with zeros when the secure_delete + ** option is enabled */ + memset(&data[iStart], 0, iSize); + } if( iStart<=x ){ /* The new freeblock is at the beginning of the cell content area, ** so just extend the cell content area rather than create another @@ -70022,14 +71484,9 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){ }else{ /* Insert the new freeblock into the freelist */ put2byte(&data[iPtr], iStart); + put2byte(&data[iStart], iFreeBlk); + put2byte(&data[iStart+2], iSize); } - if( pPage->pBt->btsFlags & BTS_FAST_SECURE ){ - /* Overwrite deleted information with zeros when the secure_delete - ** option is enabled */ - memset(&data[iStart], 0, iSize); - } - put2byte(&data[iStart], iFreeBlk); - put2byte(&data[iStart+2], iSize); pPage->nFree += iOrigSize; return SQLITE_OK; } @@ -70041,62 +71498,67 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){ ** Only the following combinations are supported. Anything different ** indicates a corrupt database files: ** -** PTF_ZERODATA -** PTF_ZERODATA | PTF_LEAF -** PTF_LEAFDATA | PTF_INTKEY -** PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF +** PTF_ZERODATA (0x02, 2) +** PTF_LEAFDATA | PTF_INTKEY (0x05, 5) +** PTF_ZERODATA | PTF_LEAF (0x0a, 10) +** PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF (0x0d, 13) */ static int decodeFlags(MemPage *pPage, int flagByte){ BtShared *pBt; /* A copy of pPage->pBt */ assert( pPage->hdrOffset==(pPage->pgno==1 ? 100 : 0) ); assert( sqlite3_mutex_held(pPage->pBt->mutex) ); - pPage->leaf = (u8)(flagByte>>3); assert( PTF_LEAF == 1<<3 ); - flagByte &= ~PTF_LEAF; - pPage->childPtrSize = 4-4*pPage->leaf; pBt = pPage->pBt; - if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){ - /* EVIDENCE-OF: R-07291-35328 A value of 5 (0x05) means the page is an - ** interior table b-tree page. */ - assert( (PTF_LEAFDATA|PTF_INTKEY)==5 ); - /* EVIDENCE-OF: R-26900-09176 A value of 13 (0x0d) means the page is a - ** leaf table b-tree page. */ - assert( (PTF_LEAFDATA|PTF_INTKEY|PTF_LEAF)==13 ); - pPage->intKey = 1; - if( pPage->leaf ){ + pPage->max1bytePayload = pBt->max1bytePayload; + if( flagByte>=(PTF_ZERODATA | PTF_LEAF) ){ + pPage->childPtrSize = 0; + pPage->leaf = 1; + if( flagByte==(PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF) ){ pPage->intKeyLeaf = 1; pPage->xCellSize = cellSizePtrTableLeaf; pPage->xParseCell = btreeParseCellPtr; + pPage->intKey = 1; + pPage->maxLocal = pBt->maxLeaf; + pPage->minLocal = pBt->minLeaf; + }else if( flagByte==(PTF_ZERODATA | PTF_LEAF) ){ + pPage->intKey = 0; + pPage->intKeyLeaf = 0; + pPage->xCellSize = cellSizePtrIdxLeaf; + pPage->xParseCell = btreeParseCellPtrIndex; + pPage->maxLocal = pBt->maxLocal; + pPage->minLocal = pBt->minLocal; }else{ + pPage->intKey = 0; + pPage->intKeyLeaf = 0; + pPage->xCellSize = cellSizePtrIdxLeaf; + pPage->xParseCell = btreeParseCellPtrIndex; + return SQLITE_CORRUPT_PAGE(pPage); + } + }else{ + pPage->childPtrSize = 4; + pPage->leaf = 0; + if( flagByte==(PTF_ZERODATA) ){ + pPage->intKey = 0; + pPage->intKeyLeaf = 0; + pPage->xCellSize = cellSizePtr; + pPage->xParseCell = btreeParseCellPtrIndex; + pPage->maxLocal = pBt->maxLocal; + pPage->minLocal = pBt->minLocal; + }else if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){ pPage->intKeyLeaf = 0; pPage->xCellSize = cellSizePtrNoPayload; pPage->xParseCell = btreeParseCellPtrNoPayload; + pPage->intKey = 1; + pPage->maxLocal = pBt->maxLeaf; + pPage->minLocal = pBt->minLeaf; + }else{ + pPage->intKey = 0; + pPage->intKeyLeaf = 0; + pPage->xCellSize = cellSizePtr; + pPage->xParseCell = btreeParseCellPtrIndex; + return SQLITE_CORRUPT_PAGE(pPage); } - pPage->maxLocal = pBt->maxLeaf; - pPage->minLocal = pBt->minLeaf; - }else if( flagByte==PTF_ZERODATA ){ - /* EVIDENCE-OF: R-43316-37308 A value of 2 (0x02) means the page is an - ** interior index b-tree page. */ - assert( (PTF_ZERODATA)==2 ); - /* EVIDENCE-OF: R-59615-42828 A value of 10 (0x0a) means the page is a - ** leaf index b-tree page. */ - assert( (PTF_ZERODATA|PTF_LEAF)==10 ); - pPage->intKey = 0; - pPage->intKeyLeaf = 0; - pPage->xCellSize = cellSizePtr; - pPage->xParseCell = btreeParseCellPtrIndex; - pPage->maxLocal = pBt->maxLocal; - pPage->minLocal = pBt->minLocal; - }else{ - /* EVIDENCE-OF: R-47608-56469 Any other value for the b-tree page type is - ** an error. */ - pPage->intKey = 0; - pPage->intKeyLeaf = 0; - pPage->xCellSize = cellSizePtr; - pPage->xParseCell = btreeParseCellPtrIndex; - return SQLITE_CORRUPT_PAGE(pPage); } - pPage->max1bytePayload = pBt->max1bytePayload; return SQLITE_OK; } @@ -70387,68 +71849,41 @@ SQLITE_PRIVATE Pgno sqlite3BtreeLastPage(Btree *p){ /* ** Get a page from the pager and initialize it. -** -** If pCur!=0 then the page is being fetched as part of a moveToChild() -** call. Do additional sanity checking on the page in this case. -** And if the fetch fails, this routine must decrement pCur->iPage. -** -** The page is fetched as read-write unless pCur is not NULL and is -** a read-only cursor. -** -** If an error occurs, then *ppPage is undefined. It -** may remain unchanged, or it may be set to an invalid value. */ static int getAndInitPage( BtShared *pBt, /* The database file */ Pgno pgno, /* Number of the page to get */ MemPage **ppPage, /* Write the page pointer here */ - BtCursor *pCur, /* Cursor to receive the page, or NULL */ int bReadOnly /* True for a read-only page */ ){ int rc; DbPage *pDbPage; + MemPage *pPage; assert( sqlite3_mutex_held(pBt->mutex) ); - assert( pCur==0 || ppPage==&pCur->pPage ); - assert( pCur==0 || bReadOnly==pCur->curPagerFlags ); - assert( pCur==0 || pCur->iPage>0 ); if( pgno>btreePagecount(pBt) ){ - rc = SQLITE_CORRUPT_BKPT; - goto getAndInitPage_error1; + *ppPage = 0; + return SQLITE_CORRUPT_BKPT; } rc = sqlite3PagerGet(pBt->pPager, pgno, (DbPage**)&pDbPage, bReadOnly); if( rc ){ - goto getAndInitPage_error1; + *ppPage = 0; + return rc; } - *ppPage = (MemPage*)sqlite3PagerGetExtra(pDbPage); - if( (*ppPage)->isInit==0 ){ + pPage = (MemPage*)sqlite3PagerGetExtra(pDbPage); + if( pPage->isInit==0 ){ btreePageFromDbPage(pDbPage, pgno, pBt); - rc = btreeInitPage(*ppPage); + rc = btreeInitPage(pPage); if( rc!=SQLITE_OK ){ - goto getAndInitPage_error2; + releasePage(pPage); + *ppPage = 0; + return rc; } } - assert( (*ppPage)->pgno==pgno || CORRUPT_DB ); - assert( (*ppPage)->aData==sqlite3PagerGetData(pDbPage) ); - - /* If obtaining a child page for a cursor, we must verify that the page is - ** compatible with the root page. */ - if( pCur && ((*ppPage)->nCell<1 || (*ppPage)->intKey!=pCur->curIntKey) ){ - rc = SQLITE_CORRUPT_PGNO(pgno); - goto getAndInitPage_error2; - } + assert( pPage->pgno==pgno || CORRUPT_DB ); + assert( pPage->aData==sqlite3PagerGetData(pDbPage) ); + *ppPage = pPage; return SQLITE_OK; - -getAndInitPage_error2: - releasePage(*ppPage); -getAndInitPage_error1: - if( pCur ){ - pCur->iPage--; - pCur->pPage = pCur->apPage[pCur->iPage]; - } - testcase( pgno==0 ); - assert( pgno!=0 || rc!=SQLITE_OK ); - return rc; } /* @@ -70531,7 +71966,7 @@ static void pageReinit(DbPage *pData){ ** call to btreeInitPage() will likely return SQLITE_CORRUPT. ** But no harm is done by this. And it is very important that ** btreeInitPage() be called on every btree page so we make - ** the call for every page that comes in for re-initing. */ + ** the call for every page that comes in for re-initializing. */ btreeInitPage(pPage); } } @@ -70710,6 +72145,9 @@ SQLITE_PRIVATE int sqlite3BtreeOpen( assert( sizeof(u16)==2 ); assert( sizeof(Pgno)==4 ); + /* Suppress false-positive compiler warning from PVS-Studio */ + memset(&zDbHeader[16], 0, 8); + pBt = sqlite3MallocZero( sizeof(*pBt) ); if( pBt==0 ){ rc = SQLITE_NOMEM_BKPT; @@ -70926,7 +72364,7 @@ static SQLITE_NOINLINE int allocateTempSpace(BtShared *pBt){ ** can mean that fillInCell() only initializes the first 2 or 3 ** bytes of pTmpSpace, but that the first 4 bytes are copied from ** it into a database page. This is not actually a problem, but it - ** does cause a valgrind error when the 1 or 2 bytes of unitialized + ** does cause a valgrind error when the 1 or 2 bytes of uninitialized ** data is passed to system call write(). So to avoid this error, ** zero the first 4 bytes of temp space here. ** @@ -71161,7 +72599,7 @@ SQLITE_PRIVATE int sqlite3BtreeGetReserveNoMutex(Btree *p){ /* ** Return the number of bytes of space at the end of every page that -** are intentually left unused. This is the "reserved" space that is +** are intentionally left unused. This is the "reserved" space that is ** sometimes used by extensions. ** ** The value returned is the larger of the current reserve size and @@ -71408,7 +72846,6 @@ static int lockBtree(BtShared *pBt){ ){ goto page1_init_failed; } - pBt->btsFlags |= BTS_PAGESIZE_FIXED; assert( (pageSize & 7)==0 ); /* EVIDENCE-OF: R-59310-51205 The "reserved space" size in the 1-byte ** integer at offset 20 is the number of bytes of space at the end of @@ -71428,6 +72865,7 @@ static int lockBtree(BtShared *pBt){ releasePageOne(pPage1); pBt->usableSize = usableSize; pBt->pageSize = pageSize; + pBt->btsFlags |= BTS_PAGESIZE_FIXED; freeTempSpace(pBt); rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, pageSize-usableSize); @@ -71447,6 +72885,7 @@ static int lockBtree(BtShared *pBt){ if( usableSize<480 ){ goto page1_init_failed; } + pBt->btsFlags |= BTS_PAGESIZE_FIXED; pBt->pageSize = pageSize; pBt->usableSize = usableSize; #ifndef SQLITE_OMIT_AUTOVACUUM @@ -71625,7 +73064,11 @@ SQLITE_PRIVATE int sqlite3BtreeNewDb(Btree *p){ ** when A already has a read lock, we encourage A to give up and let B ** proceed. */ -SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree *p, int wrflag, int *pSchemaVersion){ +static SQLITE_NOINLINE int btreeBeginTrans( + Btree *p, /* The btree in which to start the transaction */ + int wrflag, /* True to start a write transaction */ + int *pSchemaVersion /* Put schema version number here, if not NULL */ +){ BtShared *pBt = p->pBt; Pager *pPager = pBt->pPager; int rc = SQLITE_OK; @@ -71797,6 +73240,28 @@ SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree *p, int wrflag, int *pSchemaVers sqlite3BtreeLeave(p); return rc; } +SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree *p, int wrflag, int *pSchemaVersion){ + BtShared *pBt; + if( p->sharable + || p->inTrans==TRANS_NONE + || (p->inTrans==TRANS_READ && wrflag!=0) + ){ + return btreeBeginTrans(p,wrflag,pSchemaVersion); + } + pBt = p->pBt; + if( pSchemaVersion ){ + *pSchemaVersion = get4byte(&pBt->pPage1->aData[40]); + } + if( wrflag ){ + /* This call makes sure that the pager has the correct number of + ** open savepoints. If the second parameter is greater than 0 and + ** the sub-journal is not already open, then it will be opened here. + */ + return sqlite3PagerOpenSavepoint(pBt->pPager, p->db->nSavepoint); + }else{ + return SQLITE_OK; + } +} #ifndef SQLITE_OMIT_AUTOVACUUM @@ -71934,7 +73399,7 @@ static int relocatePage( if( iDbPage<3 ) return SQLITE_CORRUPT_BKPT; /* Move page iDbPage from its current location to page number iFreePage */ - TRACE(("AUTOVACUUM: Moving %d to free page %d (ptr page %d type %d)\n", + TRACE(("AUTOVACUUM: Moving %u to free page %u (ptr page %u type %u)\n", iDbPage, iFreePage, iPtrPage, eType)); rc = sqlite3PagerMovepage(pPager, pDbPage->pDbPage, iFreePage, isCommit); if( rc!=SQLITE_OK ){ @@ -72892,7 +74357,6 @@ SQLITE_PRIVATE void sqlite3BtreeCursorUnpin(BtCursor *pCur){ pCur->curFlags &= ~BTCF_Pinned; } -#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC /* ** Return the offset into the database file for the start of the ** payload to which the cursor is pointing. @@ -72904,7 +74368,6 @@ SQLITE_PRIVATE i64 sqlite3BtreeOffset(BtCursor *pCur){ return (i64)pCur->pBt->pageSize*((i64)pCur->pPage->pgno - 1) + (i64)(pCur->info.pPayload - pCur->pPage->aData); } -#endif /* SQLITE_ENABLE_OFFSET_SQL_FUNC */ /* ** Return the number of bytes of payload for the entry that pCur is @@ -72930,7 +74393,7 @@ SQLITE_PRIVATE u32 sqlite3BtreePayloadSize(BtCursor *pCur){ ** routine always returns 2147483647 (which is the largest record ** that SQLite can handle) or more. But returning a smaller value might ** prevent large memory allocations when trying to interpret a -** corrupt datrabase. +** corrupt database. ** ** The current implementation merely returns the size of the underlying ** database file. @@ -73392,6 +74855,7 @@ SQLITE_PRIVATE const void *sqlite3BtreePayloadFetch(BtCursor *pCur, u32 *pAmt){ ** vice-versa). */ static int moveToChild(BtCursor *pCur, u32 newPgno){ + int rc; assert( cursorOwnsBtShared(pCur) ); assert( pCur->eState==CURSOR_VALID ); assert( pCur->iPageapPage[pCur->iPage] = pCur->pPage; pCur->ix = 0; pCur->iPage++; - return getAndInitPage(pCur->pBt, newPgno, &pCur->pPage, pCur, - pCur->curPagerFlags); + rc = getAndInitPage(pCur->pBt, newPgno, &pCur->pPage, pCur->curPagerFlags); + assert( pCur->pPage!=0 || rc!=SQLITE_OK ); + if( rc==SQLITE_OK + && (pCur->pPage->nCell<1 || pCur->pPage->intKey!=pCur->curIntKey) + ){ + releasePage(pCur->pPage); + rc = SQLITE_CORRUPT_PGNO(newPgno); + } + if( rc ){ + pCur->pPage = pCur->apPage[--pCur->iPage]; + } + return rc; } #ifdef SQLITE_DEBUG @@ -73513,7 +74987,7 @@ static int moveToRoot(BtCursor *pCur){ sqlite3BtreeClearCursor(pCur); } rc = getAndInitPage(pCur->pBt, pCur->pgnoRoot, &pCur->pPage, - 0, pCur->curPagerFlags); + pCur->curPagerFlags); if( rc!=SQLITE_OK ){ pCur->eState = CURSOR_INVALID; return rc; @@ -73625,7 +75099,7 @@ SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){ *pRes = 0; rc = moveToLeftmost(pCur); }else if( rc==SQLITE_EMPTY ){ - assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 ); + assert( pCur->pgnoRoot==0 || (pCur->pPage!=0 && pCur->pPage->nCell==0) ); *pRes = 1; rc = SQLITE_OK; } @@ -73636,9 +75110,25 @@ SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){ ** on success. Set *pRes to 0 if the cursor actually points to something ** or set *pRes to 1 if the table is empty. */ +static SQLITE_NOINLINE int btreeLast(BtCursor *pCur, int *pRes){ + int rc = moveToRoot(pCur); + if( rc==SQLITE_OK ){ + assert( pCur->eState==CURSOR_VALID ); + *pRes = 0; + rc = moveToRightmost(pCur); + if( rc==SQLITE_OK ){ + pCur->curFlags |= BTCF_AtLast; + }else{ + pCur->curFlags &= ~BTCF_AtLast; + } + }else if( rc==SQLITE_EMPTY ){ + assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 ); + *pRes = 1; + rc = SQLITE_OK; + } + return rc; +} SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){ - int rc; - assert( cursorOwnsBtShared(pCur) ); assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) ); @@ -73659,23 +75149,7 @@ SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){ *pRes = 0; return SQLITE_OK; } - - rc = moveToRoot(pCur); - if( rc==SQLITE_OK ){ - assert( pCur->eState==CURSOR_VALID ); - *pRes = 0; - rc = moveToRightmost(pCur); - if( rc==SQLITE_OK ){ - pCur->curFlags |= BTCF_AtLast; - }else{ - pCur->curFlags &= ~BTCF_AtLast; - } - }else if( rc==SQLITE_EMPTY ){ - assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 ); - *pRes = 1; - rc = SQLITE_OK; - } - return rc; + return btreeLast(pCur, pRes); } /* Move the cursor so that it points to an entry in a table (a.k.a INTKEY) @@ -73730,7 +75204,7 @@ SQLITE_PRIVATE int sqlite3BtreeTableMoveto( /* If the requested key is one more than the previous key, then ** try to get there using sqlite3BtreeNext() rather than a full ** binary search. This is an optimization only. The correct answer - ** is still obtained without this case, only a little more slowely */ + ** is still obtained without this case, only a little more slowly. */ if( pCur->info.nKey+1==intKey ){ *pRes = 0; rc = sqlite3BtreeNext(pCur, 0); @@ -74126,10 +75600,36 @@ SQLITE_PRIVATE int sqlite3BtreeIndexMoveto( }else{ chldPg = get4byte(findCell(pPage, lwr)); } - pCur->ix = (u16)lwr; - rc = moveToChild(pCur, chldPg); - if( rc ) break; - } + + /* This block is similar to an in-lined version of: + ** + ** pCur->ix = (u16)lwr; + ** rc = moveToChild(pCur, chldPg); + ** if( rc ) break; + */ + pCur->info.nSize = 0; + pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl); + if( pCur->iPage>=(BTCURSOR_MAX_DEPTH-1) ){ + return SQLITE_CORRUPT_BKPT; + } + pCur->aiIdx[pCur->iPage] = (u16)lwr; + pCur->apPage[pCur->iPage] = pCur->pPage; + pCur->ix = 0; + pCur->iPage++; + rc = getAndInitPage(pCur->pBt, chldPg, &pCur->pPage, pCur->curPagerFlags); + if( rc==SQLITE_OK + && (pCur->pPage->nCell<1 || pCur->pPage->intKey!=pCur->curIntKey) + ){ + releasePage(pCur->pPage); + rc = SQLITE_CORRUPT_PGNO(chldPg); + } + if( rc ){ + pCur->pPage = pCur->apPage[--pCur->iPage]; + break; + } + /* + ***** End of in-lined moveToChild() call */ + } moveto_index_finish: pCur->info.nSize = 0; assert( (pCur->curFlags & BTCF_ValidOvfl)==0 ); @@ -74220,7 +75720,8 @@ static SQLITE_NOINLINE int btreeNext(BtCursor *pCur){ pPage = pCur->pPage; idx = ++pCur->ix; - if( NEVER(!pPage->isInit) || sqlite3FaultSim(412) ){ + if( sqlite3FaultSim(412) ) pPage->isInit = 0; + if( !pPage->isInit ){ return SQLITE_CORRUPT_BKPT; } @@ -74483,7 +75984,7 @@ static int allocateBtreePage( memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4); *ppPage = pTrunk; pTrunk = 0; - TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1)); + TRACE(("ALLOCATE: %u trunk - %u free pages left\n", *pPgno, n-1)); }else if( k>(u32)(pBt->usableSize/4 - 2) ){ /* Value of k is out of range. Database corruption */ rc = SQLITE_CORRUPT_PGNO(iTrunk); @@ -74549,7 +76050,7 @@ static int allocateBtreePage( } } pTrunk = 0; - TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1)); + TRACE(("ALLOCATE: %u trunk - %u free pages left\n", *pPgno, n-1)); #endif }else if( k>0 ){ /* Extract a leaf from the trunk */ @@ -74594,8 +76095,8 @@ static int allocateBtreePage( ){ int noContent; *pPgno = iPage; - TRACE(("ALLOCATE: %d was leaf %d of %d on trunk %d" - ": %d more free pages\n", + TRACE(("ALLOCATE: %u was leaf %u of %u on trunk %u" + ": %u more free pages\n", *pPgno, closest+1, k, pTrunk->pgno, n-1)); rc = sqlite3PagerWrite(pTrunk->pDbPage); if( rc ) goto end_allocate_page; @@ -74651,7 +76152,7 @@ static int allocateBtreePage( ** becomes a new pointer-map page, the second is used by the caller. */ MemPage *pPg = 0; - TRACE(("ALLOCATE: %d from end of file (pointer-map page)\n", pBt->nPage)); + TRACE(("ALLOCATE: %u from end of file (pointer-map page)\n", pBt->nPage)); assert( pBt->nPage!=PENDING_BYTE_PAGE(pBt) ); rc = btreeGetUnusedPage(pBt, pBt->nPage, &pPg, bNoContent); if( rc==SQLITE_OK ){ @@ -74674,7 +76175,7 @@ static int allocateBtreePage( releasePage(*ppPage); *ppPage = 0; } - TRACE(("ALLOCATE: %d from end of file\n", *pPgno)); + TRACE(("ALLOCATE: %u from end of file\n", *pPgno)); } assert( CORRUPT_DB || *pPgno!=PENDING_BYTE_PAGE(pBt) ); @@ -74742,7 +76243,7 @@ static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){ /* If the database supports auto-vacuum, write an entry in the pointer-map ** to indicate that the page is free. */ - if( ISAUTOVACUUM ){ + if( ISAUTOVACUUM(pBt) ){ ptrmapPut(pBt, iPage, PTRMAP_FREEPAGE, 0, &rc); if( rc ) goto freepage_out; } @@ -74802,7 +76303,7 @@ static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){ } rc = btreeSetHasContent(pBt, iPage); } - TRACE(("FREE-PAGE: %d leaf on trunk page %d\n",pPage->pgno,pTrunk->pgno)); + TRACE(("FREE-PAGE: %u leaf on trunk page %u\n",pPage->pgno,pTrunk->pgno)); goto freepage_out; } } @@ -74823,7 +76324,7 @@ static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){ put4byte(pPage->aData, iTrunk); put4byte(&pPage->aData[4], 0); put4byte(&pPage1->aData[32], iPage); - TRACE(("FREE-PAGE: %d new trunk page replacing %d\n", pPage->pgno, iTrunk)); + TRACE(("FREE-PAGE: %u new trunk page replacing %u\n", pPage->pgno, iTrunk)); freepage_out: if( pPage ){ @@ -74912,7 +76413,7 @@ static SQLITE_NOINLINE int clearCellOverflow( /* Call xParseCell to compute the size of a cell. If the cell contains ** overflow, then invoke cellClearOverflow to clear out that overflow. -** STore the result code (SQLITE_OK or some error code) in rc. +** Store the result code (SQLITE_OK or some error code) in rc. ** ** Implemented as macro to force inlining for performance. */ @@ -75183,23 +76684,27 @@ static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){ ** Allocating a new entry in pPage->aCell[] implies that ** pPage->nOverflow is incremented. ** -** *pRC must be SQLITE_OK when this routine is called. +** The insertCellFast() routine below works exactly the same as +** insertCell() except that it lacks the pTemp and iChild parameters +** which are assumed zero. Other than that, the two routines are the +** same. +** +** Fixes or enhancements to this routine should be reflected in +** insertCellFast()! */ -static void insertCell( +static int insertCell( MemPage *pPage, /* Page into which we are copying */ int i, /* New cell becomes the i-th cell of the page */ u8 *pCell, /* Content of the new cell */ int sz, /* Bytes of content in pCell */ u8 *pTemp, /* Temp storage space for pCell, if needed */ - Pgno iChild, /* If non-zero, replace first 4 bytes with this value */ - int *pRC /* Read and write return code from here */ + Pgno iChild /* If non-zero, replace first 4 bytes with this value */ ){ int idx = 0; /* Where to write new cell content in data[] */ int j; /* Loop counter */ u8 *data; /* The content of the whole page */ u8 *pIns; /* The point in pPage->aCellIdx[] where no cell inserted */ - assert( *pRC==SQLITE_OK ); assert( i>=0 && i<=pPage->nCell+pPage->nOverflow ); assert( MX_CELL(pPage->pBt)<=10921 ); assert( pPage->nCell<=MX_CELL(pPage->pBt) || CORRUPT_DB ); @@ -75208,14 +76713,103 @@ static void insertCell( assert( sqlite3_mutex_held(pPage->pBt->mutex) ); assert( sz==pPage->xCellSize(pPage, pCell) || CORRUPT_DB ); assert( pPage->nFree>=0 ); + assert( iChild>0 ); if( pPage->nOverflow || sz+2>pPage->nFree ){ if( pTemp ){ memcpy(pTemp, pCell, sz); pCell = pTemp; } - if( iChild ){ - put4byte(pCell, iChild); + put4byte(pCell, iChild); + j = pPage->nOverflow++; + /* Comparison against ArraySize-1 since we hold back one extra slot + ** as a contingency. In other words, never need more than 3 overflow + ** slots but 4 are allocated, just to be safe. */ + assert( j < ArraySize(pPage->apOvfl)-1 ); + pPage->apOvfl[j] = pCell; + pPage->aiOvfl[j] = (u16)i; + + /* When multiple overflows occur, they are always sequential and in + ** sorted order. This invariants arise because multiple overflows can + ** only occur when inserting divider cells into the parent page during + ** balancing, and the dividers are adjacent and sorted. + */ + assert( j==0 || pPage->aiOvfl[j-1]<(u16)i ); /* Overflows in sorted order */ + assert( j==0 || i==pPage->aiOvfl[j-1]+1 ); /* Overflows are sequential */ + }else{ + int rc = sqlite3PagerWrite(pPage->pDbPage); + if( NEVER(rc!=SQLITE_OK) ){ + return rc; + } + assert( sqlite3PagerIswriteable(pPage->pDbPage) ); + data = pPage->aData; + assert( &data[pPage->cellOffset]==pPage->aCellIdx ); + rc = allocateSpace(pPage, sz, &idx); + if( rc ){ return rc; } + /* The allocateSpace() routine guarantees the following properties + ** if it returns successfully */ + assert( idx >= 0 ); + assert( idx >= pPage->cellOffset+2*pPage->nCell+2 || CORRUPT_DB ); + assert( idx+sz <= (int)pPage->pBt->usableSize ); + pPage->nFree -= (u16)(2 + sz); + /* In a corrupt database where an entry in the cell index section of + ** a btree page has a value of 3 or less, the pCell value might point + ** as many as 4 bytes in front of the start of the aData buffer for + ** the source page. Make sure this does not cause problems by not + ** reading the first 4 bytes */ + memcpy(&data[idx+4], pCell+4, sz-4); + put4byte(&data[idx], iChild); + pIns = pPage->aCellIdx + i*2; + memmove(pIns+2, pIns, 2*(pPage->nCell - i)); + put2byte(pIns, idx); + pPage->nCell++; + /* increment the cell count */ + if( (++data[pPage->hdrOffset+4])==0 ) data[pPage->hdrOffset+3]++; + assert( get2byte(&data[pPage->hdrOffset+3])==pPage->nCell || CORRUPT_DB ); +#ifndef SQLITE_OMIT_AUTOVACUUM + if( pPage->pBt->autoVacuum ){ + int rc2 = SQLITE_OK; + /* The cell may contain a pointer to an overflow page. If so, write + ** the entry for the overflow page into the pointer map. + */ + ptrmapPutOvflPtr(pPage, pPage, pCell, &rc2); + if( rc2 ) return rc2; } +#endif + } + return SQLITE_OK; +} + +/* +** This variant of insertCell() assumes that the pTemp and iChild +** parameters are both zero. Use this variant in sqlite3BtreeInsert() +** for performance improvement, and also so that this variant is only +** called from that one place, and is thus inlined, and thus runs must +** faster. +** +** Fixes or enhancements to this routine should be reflected into +** the insertCell() routine. +*/ +static int insertCellFast( + MemPage *pPage, /* Page into which we are copying */ + int i, /* New cell becomes the i-th cell of the page */ + u8 *pCell, /* Content of the new cell */ + int sz /* Bytes of content in pCell */ +){ + int idx = 0; /* Where to write new cell content in data[] */ + int j; /* Loop counter */ + u8 *data; /* The content of the whole page */ + u8 *pIns; /* The point in pPage->aCellIdx[] where no cell inserted */ + + assert( i>=0 && i<=pPage->nCell+pPage->nOverflow ); + assert( MX_CELL(pPage->pBt)<=10921 ); + assert( pPage->nCell<=MX_CELL(pPage->pBt) || CORRUPT_DB ); + assert( pPage->nOverflow<=ArraySize(pPage->apOvfl) ); + assert( ArraySize(pPage->apOvfl)==ArraySize(pPage->aiOvfl) ); + assert( sqlite3_mutex_held(pPage->pBt->mutex) ); + assert( sz==pPage->xCellSize(pPage, pCell) || CORRUPT_DB ); + assert( pPage->nFree>=0 ); + assert( pPage->nOverflow==0 ); + if( sz+2>pPage->nFree ){ j = pPage->nOverflow++; /* Comparison against ArraySize-1 since we hold back one extra slot ** as a contingency. In other words, never need more than 3 overflow @@ -75234,31 +76828,20 @@ static void insertCell( }else{ int rc = sqlite3PagerWrite(pPage->pDbPage); if( rc!=SQLITE_OK ){ - *pRC = rc; - return; + return rc; } assert( sqlite3PagerIswriteable(pPage->pDbPage) ); data = pPage->aData; assert( &data[pPage->cellOffset]==pPage->aCellIdx ); rc = allocateSpace(pPage, sz, &idx); - if( rc ){ *pRC = rc; return; } + if( rc ){ return rc; } /* The allocateSpace() routine guarantees the following properties ** if it returns successfully */ assert( idx >= 0 ); assert( idx >= pPage->cellOffset+2*pPage->nCell+2 || CORRUPT_DB ); assert( idx+sz <= (int)pPage->pBt->usableSize ); pPage->nFree -= (u16)(2 + sz); - if( iChild ){ - /* In a corrupt database where an entry in the cell index section of - ** a btree page has a value of 3 or less, the pCell value might point - ** as many as 4 bytes in front of the start of the aData buffer for - ** the source page. Make sure this does not cause problems by not - ** reading the first 4 bytes */ - memcpy(&data[idx+4], pCell+4, sz-4); - put4byte(&data[idx], iChild); - }else{ - memcpy(&data[idx], pCell, sz); - } + memcpy(&data[idx], pCell, sz); pIns = pPage->aCellIdx + i*2; memmove(pIns+2, pIns, 2*(pPage->nCell - i)); put2byte(pIns, idx); @@ -75268,13 +76851,16 @@ static void insertCell( assert( get2byte(&data[pPage->hdrOffset+3])==pPage->nCell || CORRUPT_DB ); #ifndef SQLITE_OMIT_AUTOVACUUM if( pPage->pBt->autoVacuum ){ + int rc2 = SQLITE_OK; /* The cell may contain a pointer to an overflow page. If so, write ** the entry for the overflow page into the pointer map. */ - ptrmapPutOvflPtr(pPage, pPage, pCell, pRC); + ptrmapPutOvflPtr(pPage, pPage, pCell, &rc2); + if( rc2 ) return rc2; } #endif } + return SQLITE_OK; } /* @@ -75375,14 +76961,16 @@ struct CellArray { ** computed. */ static void populateCellCache(CellArray *p, int idx, int N){ + MemPage *pRef = p->pRef; + u16 *szCell = p->szCell; assert( idx>=0 && idx+N<=p->nCell ); while( N>0 ){ assert( p->apCell[idx]!=0 ); - if( p->szCell[idx]==0 ){ - p->szCell[idx] = p->pRef->xCellSize(p->pRef, p->apCell[idx]); + if( szCell[idx]==0 ){ + szCell[idx] = pRef->xCellSize(pRef, p->apCell[idx]); }else{ assert( CORRUPT_DB || - p->szCell[idx]==p->pRef->xCellSize(p->pRef, p->apCell[idx]) ); + szCell[idx]==pRef->xCellSize(pRef, p->apCell[idx]) ); } idx++; N--; @@ -75438,10 +77026,10 @@ static int rebuildPage( assert( i(u32)usableSize ){ j = 0; } + if( NEVER(j>(u32)usableSize) ){ j = 0; } memcpy(&pTmp[j], &aData[j], usableSize - j); - for(k=0; pCArray->ixNx[k]<=i && ALWAYS(kixNx[k]<=i; k++){} pSrcEnd = pCArray->apEnd[k]; pData = pEnd; @@ -75504,7 +77092,7 @@ static int rebuildPage( ** Finally, argument pBegin points to the byte immediately following the ** end of the space required by this page for the cell-pointer area (for ** all cells - not just those inserted by the current call). If the content -** area must be extended to before this point in order to accomodate all +** area must be extended to before this point in order to accommodate all ** cells in apCell[], then the cells do not fit and non-zero is returned. */ static int pageInsertArray( @@ -75524,7 +77112,7 @@ static int pageInsertArray( u8 *pEnd; /* Maximum extent of cell data */ assert( CORRUPT_DB || pPg->hdrOffset==0 ); /* Never called on page 1 */ if( iEnd<=iFirst ) return 0; - for(k=0; pCArray->ixNx[k]<=i && ALWAYS(kixNx[k]<=i ; k++){} pEnd = pCArray->apEnd[k]; while( 1 /*Exit by break*/ ){ int sz, rc; @@ -75582,39 +77170,50 @@ static int pageFreeArray( u8 * const pEnd = &aData[pPg->pBt->usableSize]; u8 * const pStart = &aData[pPg->hdrOffset + 8 + pPg->childPtrSize]; int nRet = 0; - int i; + int i, j; int iEnd = iFirst + nCell; - u8 *pFree = 0; - int szFree = 0; + int nFree = 0; + int aOfst[10]; + int aAfter[10]; for(i=iFirst; iapCell[i]; if( SQLITE_WITHIN(pCell, pStart, pEnd) ){ int sz; + int iAfter; + int iOfst; /* No need to use cachedCellSize() here. The sizes of all cells that ** are to be freed have already been computing while deciding which ** cells need freeing */ sz = pCArray->szCell[i]; assert( sz>0 ); - if( pFree!=(pCell + sz) ){ - if( pFree ){ - assert( pFree>aData && (pFree - aData)<65536 ); - freeSpace(pPg, (u16)(pFree - aData), szFree); - } - pFree = pCell; - szFree = sz; - if( pFree+sz>pEnd ){ - return 0; + iOfst = (u16)(pCell - aData); + iAfter = iOfst+sz; + for(j=0; j=nFree ){ + if( nFree>=(int)(sizeof(aOfst)/sizeof(aOfst[0])) ){ + for(j=0; jpEnd ) return 0; + nFree++; } nRet++; } } - if( pFree ){ - assert( pFree>aData && (pFree - aData)<65536 ); - freeSpace(pPg, (u16)(pFree - aData), szFree); + for(j=0; jpPg->aDataEnd ) goto editpage_fail; + if( NEVER(pData>pPg->aDataEnd) ) goto editpage_fail; /* Add cells to the start of the page */ if( iNewpgno, &rc); if( szCell>pNew->minLocal ){ ptrmapPutOvflPtr(pNew, pNew, pCell, &rc); @@ -75841,8 +77440,8 @@ static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){ /* Insert the new divider cell into pParent. */ if( rc==SQLITE_OK ){ - insertCell(pParent, pParent->nCell, pSpace, (int)(pOut-pSpace), - 0, pPage->pgno, &rc); + rc = insertCell(pParent, pParent->nCell, pSpace, (int)(pOut-pSpace), + 0, pPage->pgno); } /* Set the right-child pointer of pParent to point to the new page. */ @@ -75951,7 +77550,7 @@ static void copyNodeContent(MemPage *pFrom, MemPage *pTo, int *pRC){ /* If this is an auto-vacuum database, update the pointer-map entries ** for any b-tree or overflow pages that pTo now contains the pointers to. */ - if( ISAUTOVACUUM ){ + if( ISAUTOVACUUM(pBt) ){ *pRC = setChildPtrmaps(pTo); } } @@ -76084,7 +77683,7 @@ static int balance_nonroot( pgno = get4byte(pRight); while( 1 ){ if( rc==SQLITE_OK ){ - rc = getAndInitPage(pBt, pgno, &apOld[i], 0, 0); + rc = getAndInitPage(pBt, pgno, &apOld[i], 0); } if( rc ){ memset(apOld, 0, (i+1)*sizeof(MemPage*)); @@ -76375,15 +77974,17 @@ static int balance_nonroot( d = r + 1 - leafData; (void)cachedCellSize(&b, d); do{ + int szR, szD; assert( d szLeft-(b.szCell[r]+(i==k-1?0:2)))){ + && (bBulk || szRight+szD+2 > szLeft-(szR+(i==k-1?0:2)))){ break; } - szRight += b.szCell[d] + 2; - szLeft -= b.szCell[r] + 2; + szRight += szD + 2; + szLeft -= szR + 2; cntNew[i-1] = r; r--; d--; @@ -76396,7 +77997,7 @@ static int balance_nonroot( } } - /* Sanity check: For a non-corrupt database file one of the follwing + /* Sanity check: For a non-corrupt database file one of the following ** must be true: ** (1) We found one or more cells (cntNew[0])>0), or ** (2) pPage is a virtual root page. A virtual root page is when @@ -76404,7 +78005,7 @@ static int balance_nonroot( ** that page. */ assert( cntNew[0]>0 || (pParent->pgno==1 && pParent->nCell==0) || CORRUPT_DB); - TRACE(("BALANCE: old: %d(nc=%d) %d(nc=%d) %d(nc=%d)\n", + TRACE(("BALANCE: old: %u(nc=%u) %u(nc=%u) %u(nc=%u)\n", apOld[0]->pgno, apOld[0]->nCell, nOld>=2 ? apOld[1]->pgno : 0, nOld>=2 ? apOld[1]->nCell : 0, nOld>=3 ? apOld[2]->pgno : 0, nOld>=3 ? apOld[2]->nCell : 0 @@ -76437,7 +78038,7 @@ static int balance_nonroot( cntOld[i] = b.nCell; /* Set the pointer-map entry for the new sibling page. */ - if( ISAUTOVACUUM ){ + if( ISAUTOVACUUM(pBt) ){ ptrmapPut(pBt, pNew->pgno, PTRMAP_BTREE, pParent->pgno, &rc); if( rc!=SQLITE_OK ){ goto balance_cleanup; @@ -76488,8 +78089,8 @@ static int balance_nonroot( } } - TRACE(("BALANCE: new: %d(%d nc=%d) %d(%d nc=%d) %d(%d nc=%d) " - "%d(%d nc=%d) %d(%d nc=%d)\n", + TRACE(("BALANCE: new: %u(%u nc=%u) %u(%u nc=%u) %u(%u nc=%u) " + "%u(%u nc=%u) %u(%u nc=%u)\n", apNew[0]->pgno, szNew[0], cntNew[0], nNew>=2 ? apNew[1]->pgno : 0, nNew>=2 ? szNew[1] : 0, nNew>=2 ? cntNew[1] - cntNew[0] - !leafData : 0, @@ -76530,7 +78131,7 @@ static int balance_nonroot( ** updated. This happens below, after the sibling pages have been ** populated, not here. */ - if( ISAUTOVACUUM ){ + if( ISAUTOVACUUM(pBt) ){ MemPage *pOld; MemPage *pNew = pOld = apNew[0]; int cntOldNext = pNew->nCell + pNew->nOverflow; @@ -76621,13 +78222,13 @@ static int balance_nonroot( iOvflSpace += sz; assert( sz<=pBt->maxLocal+23 ); assert( iOvflSpace <= (int)pBt->pageSize ); - for(k=0; b.ixNx[k]<=j && ALWAYS(kpgno, &rc); + rc = insertCell(pParent, nxDiv+i, pCell, sz, pTemp, pNew->pgno); if( rc!=SQLITE_OK ) goto balance_cleanup; assert( sqlite3PagerIswriteable(pParent->pDbPage) ); } @@ -76657,6 +78258,8 @@ static int balance_nonroot( for(i=1-nNew; i=0 && iPg=1 || i>=0 ); + assert( iPg=0 /* On the upwards pass, or... */ || cntOld[iPg-1]>=cntNew[iPg-1] /* Condition (1) is true */ @@ -76723,7 +78326,7 @@ static int balance_nonroot( ); copyNodeContent(apNew[0], pParent, &rc); freePage(apNew[0], &rc); - }else if( ISAUTOVACUUM && !leafCorrection ){ + }else if( ISAUTOVACUUM(pBt) && !leafCorrection ){ /* Fix the pointer map entries associated with the right-child of each ** sibling page. All other pointer map entries have already been taken ** care of. */ @@ -76734,7 +78337,7 @@ static int balance_nonroot( } assert( pParent->isInit ); - TRACE(("BALANCE: finished: old=%d new=%d cells=%d\n", + TRACE(("BALANCE: finished: old=%u new=%u cells=%u\n", nOld, nNew, b.nCell)); /* Free any old pages that were not reused as new pages. @@ -76744,7 +78347,7 @@ static int balance_nonroot( } #if 0 - if( ISAUTOVACUUM && rc==SQLITE_OK && apNew[0]->isInit ){ + if( ISAUTOVACUUM(pBt) && rc==SQLITE_OK && apNew[0]->isInit ){ /* The ptrmapCheckPages() contains assert() statements that verify that ** all pointer map pages are set correctly. This is helpful while ** debugging. This is usually disabled because a corrupt database may @@ -76806,7 +78409,7 @@ static int balance_deeper(MemPage *pRoot, MemPage **ppChild){ if( rc==SQLITE_OK ){ rc = allocateBtreePage(pBt,&pChild,&pgnoChild,pRoot->pgno,0); copyNodeContent(pRoot, pChild, &rc); - if( ISAUTOVACUUM ){ + if( ISAUTOVACUUM(pBt) ){ ptrmapPut(pBt, pgnoChild, PTRMAP_BTREE, pRoot->pgno, &rc); } } @@ -76819,7 +78422,7 @@ static int balance_deeper(MemPage *pRoot, MemPage **ppChild){ assert( sqlite3PagerIswriteable(pRoot->pDbPage) ); assert( pChild->nCell==pRoot->nCell || CORRUPT_DB ); - TRACE(("BALANCE: copy root %d into %d\n", pRoot->pgno, pChild->pgno)); + TRACE(("BALANCE: copy root %u into %u\n", pRoot->pgno, pChild->pgno)); /* Copy the overflow cells from pRoot to pChild */ memcpy(pChild->aiOvfl, pRoot->aiOvfl, @@ -77013,7 +78616,7 @@ static int btreeOverwriteContent( ){ int nData = pX->nData - iOffset; if( nData<=0 ){ - /* Overwritting with zeros */ + /* Overwriting with zeros */ int i; for(i=0; ipData to write */ int nTotal = pX->nData + pX->nZero; /* Total bytes of to write */ int rc; /* Return code */ @@ -77056,16 +78663,12 @@ static int btreeOverwriteCell(BtCursor *pCur, const BtreePayload *pX){ Pgno ovflPgno; /* Next overflow page to write */ u32 ovflPageSize; /* Size to write on overflow page */ - if( pCur->info.pPayload + pCur->info.nLocal > pPage->aDataEnd - || pCur->info.pPayload < pPage->aData + pPage->cellOffset - ){ - return SQLITE_CORRUPT_BKPT; - } + assert( pCur->info.nLocalinfo.pPayload, pX, 0, pCur->info.nLocal); if( rc ) return rc; - if( pCur->info.nLocal==nTotal ) return SQLITE_OK; /* Now overwrite the overflow pages */ iOffset = pCur->info.nLocal; @@ -77095,6 +78698,29 @@ static int btreeOverwriteCell(BtCursor *pCur, const BtreePayload *pX){ return SQLITE_OK; } +/* +** Overwrite the cell that cursor pCur is pointing to with fresh content +** contained in pX. +*/ +static int btreeOverwriteCell(BtCursor *pCur, const BtreePayload *pX){ + int nTotal = pX->nData + pX->nZero; /* Total bytes of to write */ + MemPage *pPage = pCur->pPage; /* Page being written */ + + if( pCur->info.pPayload + pCur->info.nLocal > pPage->aDataEnd + || pCur->info.pPayload < pPage->aData + pPage->cellOffset + ){ + return SQLITE_CORRUPT_BKPT; + } + if( pCur->info.nLocal==nTotal ){ + /* The entire cell is local */ + return btreeOverwriteContent(pPage, pCur->info.pPayload, pX, + 0, pCur->info.nLocal); + }else{ + /* The cell contains overflow content */ + return btreeOverwriteOverflowCell(pCur, pX); + } +} + /* ** Insert a new record into the BTree. The content of the new record @@ -77138,7 +78764,6 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( int idx; MemPage *pPage; Btree *p = pCur->pBtree; - BtShared *pBt = p->pBt; unsigned char *oldCell; unsigned char *newCell = 0; @@ -77157,7 +78782,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( ** not to clear the cursor here. */ if( pCur->curFlags & BTCF_Multiple ){ - rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur); + rc = saveAllCursors(p->pBt, pCur->pgnoRoot, pCur); if( rc ) return rc; if( loc && pCur->iPage<0 ){ /* This can only happen if the schema is corrupt such that there is more @@ -77181,8 +78806,8 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( assert( cursorOwnsBtShared(pCur) ); assert( (pCur->curFlags & BTCF_WriteFlag)!=0 - && pBt->inTransaction==TRANS_WRITE - && (pBt->btsFlags & BTS_READ_ONLY)==0 ); + && p->pBt->inTransaction==TRANS_WRITE + && (p->pBt->btsFlags & BTS_READ_ONLY)==0 ); assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) ); /* Assert that the caller has been consistent. If this cursor was opened @@ -77280,7 +78905,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( } } assert( pCur->eState==CURSOR_VALID - || (pCur->eState==CURSOR_INVALID && loc) ); + || (pCur->eState==CURSOR_INVALID && loc) || CORRUPT_DB ); pPage = pCur->pPage; assert( pPage->intKey || pX->nKey>=0 || (flags & BTREE_PREFORMAT) ); @@ -77295,31 +78920,34 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( if( rc ) return rc; } - TRACE(("INSERT: table=%d nkey=%lld ndata=%d page=%d %s\n", + TRACE(("INSERT: table=%u nkey=%lld ndata=%u page=%u %s\n", pCur->pgnoRoot, pX->nKey, pX->nData, pPage->pgno, loc==0 ? "overwrite" : "new entry")); assert( pPage->isInit || CORRUPT_DB ); - newCell = pBt->pTmpSpace; + newCell = p->pBt->pTmpSpace; assert( newCell!=0 ); + assert( BTREE_PREFORMAT==OPFLAG_PREFORMAT ); if( flags & BTREE_PREFORMAT ){ rc = SQLITE_OK; - szNew = pBt->nPreformatSize; + szNew = p->pBt->nPreformatSize; if( szNew<4 ) szNew = 4; - if( ISAUTOVACUUM && szNew>pPage->maxLocal ){ + if( ISAUTOVACUUM(p->pBt) && szNew>pPage->maxLocal ){ CellInfo info; pPage->xParseCell(pPage, newCell, &info); if( info.nPayload!=info.nLocal ){ Pgno ovfl = get4byte(&newCell[szNew-4]); - ptrmapPut(pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, &rc); + ptrmapPut(p->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, &rc); + if( NEVER(rc) ) goto end_insert; } } }else{ rc = fillInCell(pPage, newCell, pX, &szNew); + if( rc ) goto end_insert; } - if( rc ) goto end_insert; assert( szNew==pPage->xCellSize(pPage, newCell) ); - assert( szNew <= MX_CELL_SIZE(pBt) ); + assert( szNew <= MX_CELL_SIZE(p->pBt) ); idx = pCur->ix; + pCur->info.nSize = 0; if( loc==0 ){ CellInfo info; assert( idx>=0 ); @@ -77338,7 +78966,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( testcase( pCur->curFlags & BTCF_ValidOvfl ); invalidateOverflowCache(pCur); if( info.nSize==szNew && info.nLocal==info.nPayload - && (!ISAUTOVACUUM || szNewminLocal) + && (!ISAUTOVACUUM(p->pBt) || szNewminLocal) ){ /* Overwrite the old cell with the new if they are the same size. ** We could also try to do this if the old cell is smaller, then add @@ -77368,7 +78996,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( }else{ assert( pPage->leaf ); } - insertCell(pPage, idx, newCell, szNew, 0, 0, &rc); + rc = insertCellFast(pPage, idx, newCell, szNew); assert( pPage->nOverflow==0 || rc==SQLITE_OK ); assert( rc!=SQLITE_OK || pPage->nCell>0 || pPage->nOverflow>0 ); @@ -77392,7 +79020,6 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( ** larger than the largest existing key, it is possible to insert the ** row without seeking the cursor. This can be a big performance boost. */ - pCur->info.nSize = 0; if( pPage->nOverflow ){ assert( rc==SQLITE_OK ); pCur->curFlags &= ~(BTCF_ValidNKey); @@ -77441,7 +79068,6 @@ SQLITE_PRIVATE int sqlite3BtreeInsert( ** SQLITE_OK is returned if successful, or an SQLite error code otherwise. */ SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64 iKey){ - int rc = SQLITE_OK; BtShared *pBt = pDest->pBt; u8 *aOut = pBt->pTmpSpace; /* Pointer to next output buffer */ const u8 *aIn; /* Pointer to next input buffer */ @@ -77464,7 +79090,9 @@ SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64 if( nIn==nRem && nInpPage->maxLocal ){ memcpy(aOut, aIn, nIn); pBt->nPreformatSize = nIn + (aOut - pBt->pTmpSpace); + return SQLITE_OK; }else{ + int rc = SQLITE_OK; Pager *pSrcPager = pSrc->pBt->pPager; u8 *pPgnoOut = 0; Pgno ovflIn = 0; @@ -77516,7 +79144,7 @@ SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64 MemPage *pNew = 0; rc = allocateBtreePage(pBt, &pNew, &pgnoNew, 0, 0); put4byte(pPgnoOut, pgnoNew); - if( ISAUTOVACUUM && pPageOut ){ + if( ISAUTOVACUUM(pBt) && pPageOut ){ ptrmapPut(pBt, pgnoNew, PTRMAP_OVERFLOW2, pPageOut->pgno, &rc); } releasePage(pPageOut); @@ -77532,9 +79160,8 @@ SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64 releasePage(pPageOut); sqlite3PagerUnref(pPageIn); + return rc; } - - return rc; } /* @@ -77593,6 +79220,9 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){ if( pPage->nFree<0 && btreeComputeFreeSpace(pPage) ){ return SQLITE_CORRUPT_BKPT; } + if( pCell<&pPage->aCellIdx[pPage->nCell] ){ + return SQLITE_CORRUPT_BKPT; + } /* If the BTREE_SAVEPOSITION bit is on, then the cursor position must ** be preserved following this delete operation. If the current delete @@ -77689,7 +79319,7 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur, u8 flags){ assert( pTmp!=0 ); rc = sqlite3PagerWrite(pLeaf->pDbPage); if( rc==SQLITE_OK ){ - insertCell(pPage, iCellIdx, pCell-4, nCell+4, pTmp, n, &rc); + rc = insertCell(pPage, iCellIdx, pCell-4, nCell+4, pTmp, n); } dropCell(pLeaf, pLeaf->nCell-1, nCell, &rc); if( rc ) return rc; @@ -77769,7 +79399,7 @@ static int btreeCreateTable(Btree *p, Pgno *piTable, int createTabFlags){ MemPage *pRoot; Pgno pgnoRoot; int rc; - int ptfFlags; /* Page-type flage for the root page of new table */ + int ptfFlags; /* Page-type flags for the root page of new table */ assert( sqlite3BtreeHoldsMutex(p) ); assert( pBt->inTransaction==TRANS_WRITE ); @@ -77938,7 +79568,7 @@ static int clearDatabasePage( if( pgno>btreePagecount(pBt) ){ return SQLITE_CORRUPT_BKPT; } - rc = getAndInitPage(pBt, pgno, &pPage, 0, 0); + rc = getAndInitPage(pBt, pgno, &pPage, 0); if( rc ) return rc; if( (pBt->openFlags & BTREE_SINGLE)==0 && sqlite3PagerPageRefcount(pPage->pDbPage) != (1 + (pgno==1)) @@ -78288,6 +79918,41 @@ SQLITE_PRIVATE Pager *sqlite3BtreePager(Btree *p){ } #ifndef SQLITE_OMIT_INTEGRITY_CHECK +/* +** Record an OOM error during integrity_check +*/ +static void checkOom(IntegrityCk *pCheck){ + pCheck->rc = SQLITE_NOMEM; + pCheck->mxErr = 0; /* Causes integrity_check processing to stop */ + if( pCheck->nErr==0 ) pCheck->nErr++; +} + +/* +** Invoke the progress handler, if appropriate. Also check for an +** interrupt. +*/ +static void checkProgress(IntegrityCk *pCheck){ + sqlite3 *db = pCheck->db; + if( AtomicLoad(&db->u1.isInterrupted) ){ + pCheck->rc = SQLITE_INTERRUPT; + pCheck->nErr++; + pCheck->mxErr = 0; + } +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + if( db->xProgress ){ + assert( db->nProgressOps>0 ); + pCheck->nStep++; + if( (pCheck->nStep % db->nProgressOps)==0 + && db->xProgress(db->pProgressArg) + ){ + pCheck->rc = SQLITE_INTERRUPT; + pCheck->nErr++; + pCheck->mxErr = 0; + } + } +#endif +} + /* ** Append a message to the error message string. */ @@ -78297,6 +79962,7 @@ static void checkAppendMsg( ... ){ va_list ap; + checkProgress(pCheck); if( !pCheck->mxErr ) return; pCheck->mxErr--; pCheck->nErr++; @@ -78305,12 +79971,13 @@ static void checkAppendMsg( sqlite3_str_append(&pCheck->errMsg, "\n", 1); } if( pCheck->zPfx ){ - sqlite3_str_appendf(&pCheck->errMsg, pCheck->zPfx, pCheck->v1, pCheck->v2); + sqlite3_str_appendf(&pCheck->errMsg, pCheck->zPfx, + pCheck->v0, pCheck->v1, pCheck->v2); } sqlite3_str_vappendf(&pCheck->errMsg, zFormat, ap); va_end(ap); if( pCheck->errMsg.accError==SQLITE_NOMEM ){ - pCheck->bOomFault = 1; + checkOom(pCheck); } } #endif /* SQLITE_OMIT_INTEGRITY_CHECK */ @@ -78345,14 +80012,13 @@ static void setPageReferenced(IntegrityCk *pCheck, Pgno iPg){ */ static int checkRef(IntegrityCk *pCheck, Pgno iPage){ if( iPage>pCheck->nPage || iPage==0 ){ - checkAppendMsg(pCheck, "invalid page number %d", iPage); + checkAppendMsg(pCheck, "invalid page number %u", iPage); return 1; } if( getPageReferenced(pCheck, iPage) ){ - checkAppendMsg(pCheck, "2nd reference to page %d", iPage); + checkAppendMsg(pCheck, "2nd reference to page %u", iPage); return 1; } - if( AtomicLoad(&pCheck->db->u1.isInterrupted) ) return 1; setPageReferenced(pCheck, iPage); return 0; } @@ -78375,14 +80041,14 @@ static void checkPtrmap( rc = ptrmapGet(pCheck->pBt, iChild, &ePtrmapType, &iPtrmapParent); if( rc!=SQLITE_OK ){ - if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ) pCheck->bOomFault = 1; - checkAppendMsg(pCheck, "Failed to read ptrmap key=%d", iChild); + if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ) checkOom(pCheck); + checkAppendMsg(pCheck, "Failed to read ptrmap key=%u", iChild); return; } if( ePtrmapType!=eType || iPtrmapParent!=iParent ){ checkAppendMsg(pCheck, - "Bad ptr map entry key=%d expected=(%d,%d) got=(%d,%d)", + "Bad ptr map entry key=%u expected=(%u,%u) got=(%u,%u)", iChild, eType, iParent, ePtrmapType, iPtrmapParent); } } @@ -78407,7 +80073,7 @@ static void checkList( if( checkRef(pCheck, iPage) ) break; N--; if( sqlite3PagerGet(pCheck->pPager, (Pgno)iPage, &pOvflPage, 0) ){ - checkAppendMsg(pCheck, "failed to get page %d", iPage); + checkAppendMsg(pCheck, "failed to get page %u", iPage); break; } pOvflData = (unsigned char *)sqlite3PagerGetData(pOvflPage); @@ -78420,7 +80086,7 @@ static void checkList( #endif if( n>pCheck->pBt->usableSize/4-2 ){ checkAppendMsg(pCheck, - "freelist leaf count too big on page %d", iPage); + "freelist leaf count too big on page %u", iPage); N--; }else{ for(i=0; i<(int)n; i++){ @@ -78452,7 +80118,7 @@ static void checkList( } if( N && nErrAtStart==pCheck->nErr ){ checkAppendMsg(pCheck, - "%s is %d but should be %d", + "%s is %u but should be %u", isFreeList ? "size" : "overflow list length", expected-N, expected); } @@ -78482,7 +80148,9 @@ static void checkList( ** lower 16 bits are the index of the last byte of that range. */ static void btreeHeapInsert(u32 *aHeap, u32 x){ - u32 j, i = ++aHeap[0]; + u32 j, i; + assert( aHeap!=0 ); + i = ++aHeap[0]; aHeap[i] = x; while( (j = i/2)>0 && aHeap[j]>aHeap[i] ){ x = aHeap[j]; @@ -78559,11 +80227,13 @@ static int checkTreePage( /* Check that the page exists */ + checkProgress(pCheck); + if( pCheck->mxErr==0 ) goto end_of_check; pBt = pCheck->pBt; usableSize = pBt->usableSize; if( iPage==0 ) return 0; if( checkRef(pCheck, iPage) ) return 0; - pCheck->zPfx = "Page %u: "; + pCheck->zPfx = "Tree %u page %u: "; pCheck->v1 = iPage; if( (rc = btreeGetPage(pBt, iPage, &pPage, 0))!=0 ){ checkAppendMsg(pCheck, @@ -78590,7 +80260,7 @@ static int checkTreePage( hdr = pPage->hdrOffset; /* Set up for cell analysis */ - pCheck->zPfx = "On tree page %u cell %d: "; + pCheck->zPfx = "Tree %u page %u cell %u: "; contentOffset = get2byteNotZero(&data[hdr+5]); assert( contentOffset<=usableSize ); /* Enforced by btreeInitPage() */ @@ -78610,7 +80280,7 @@ static int checkTreePage( pgno = get4byte(&data[hdr+8]); #ifndef SQLITE_OMIT_AUTOVACUUM if( pBt->autoVacuum ){ - pCheck->zPfx = "On page %u at right child: "; + pCheck->zPfx = "Tree %u page %u right child: "; checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage); } #endif @@ -78634,7 +80304,7 @@ static int checkTreePage( pc = get2byteAligned(pCellIdx); pCellIdx -= 2; if( pcusableSize-4 ){ - checkAppendMsg(pCheck, "Offset %d out of range %d..%d", + checkAppendMsg(pCheck, "Offset %u out of range %u..%u", pc, contentOffset, usableSize-4); doCoverageCheck = 0; continue; @@ -78766,7 +80436,7 @@ static int checkTreePage( */ if( heap[0]==0 && nFrag!=data[hdr+7] ){ checkAppendMsg(pCheck, - "Fragmentation of %d bytes reported as %d on page %u", + "Fragmentation of %u bytes reported as %u on page %u", nFrag, data[hdr+7], iPage); } } @@ -78804,13 +80474,14 @@ static int checkTreePage( ** the unverified btrees. Except, if aRoot[1] is 1, then the freelist ** checks are still performed. */ -SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck( +SQLITE_PRIVATE int sqlite3BtreeIntegrityCheck( sqlite3 *db, /* Database connection that is running the check */ Btree *p, /* The btree to be checked */ Pgno *aRoot, /* An array of root pages numbers for individual trees */ int nRoot, /* Number of entries in aRoot[] */ int mxErr, /* Stop reporting errors after this many */ - int *pnErr /* Write number of errors seen to this variable */ + int *pnErr, /* OUT: Write number of errors seen to this variable */ + char **pzOut /* OUT: Write the error message string here */ ){ Pgno i; IntegrityCk sCheck; @@ -78833,18 +80504,12 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck( assert( p->inTrans>TRANS_NONE && pBt->inTransaction>TRANS_NONE ); VVA_ONLY( nRef = sqlite3PagerRefcount(pBt->pPager) ); assert( nRef>=0 ); + memset(&sCheck, 0, sizeof(sCheck)); sCheck.db = db; sCheck.pBt = pBt; sCheck.pPager = pBt->pPager; sCheck.nPage = btreePagecount(sCheck.pBt); sCheck.mxErr = mxErr; - sCheck.nErr = 0; - sCheck.bOomFault = 0; - sCheck.zPfx = 0; - sCheck.v1 = 0; - sCheck.v2 = 0; - sCheck.aPgRef = 0; - sCheck.heap = 0; sqlite3StrAccumInit(&sCheck.errMsg, 0, zErr, sizeof(zErr), SQLITE_MAX_LENGTH); sCheck.errMsg.printfFlags = SQLITE_PRINTF_INTERNAL; if( sCheck.nPage==0 ){ @@ -78853,12 +80518,12 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck( sCheck.aPgRef = sqlite3MallocZero((sCheck.nPage / 8)+ 1); if( !sCheck.aPgRef ){ - sCheck.bOomFault = 1; + checkOom(&sCheck); goto integrity_ck_cleanup; } sCheck.heap = (u32*)sqlite3PageMalloc( pBt->pageSize ); if( sCheck.heap==0 ){ - sCheck.bOomFault = 1; + checkOom(&sCheck); goto integrity_ck_cleanup; } @@ -78868,7 +80533,7 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck( /* Check the integrity of the freelist */ if( bCkFreelist ){ - sCheck.zPfx = "Main freelist: "; + sCheck.zPfx = "Freelist: "; checkList(&sCheck, 1, get4byte(&pBt->pPage1->aData[32]), get4byte(&pBt->pPage1->aData[36])); sCheck.zPfx = 0; @@ -78885,7 +80550,7 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck( mxInHdr = get4byte(&pBt->pPage1->aData[52]); if( mx!=mxInHdr ){ checkAppendMsg(&sCheck, - "max rootpage (%d) disagrees with header (%d)", + "max rootpage (%u) disagrees with header (%u)", mx, mxInHdr ); } @@ -78906,6 +80571,7 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck( checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0); } #endif + sCheck.v0 = aRoot[i]; checkTreePage(&sCheck, aRoot[i], ¬Used, LARGEST_INT64); } pBt->db->flags = savedDbFlags; @@ -78916,7 +80582,7 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck( for(i=1; i<=sCheck.nPage && sCheck.mxErr; i++){ #ifdef SQLITE_OMIT_AUTOVACUUM if( getPageReferenced(&sCheck, i)==0 ){ - checkAppendMsg(&sCheck, "Page %d is never used", i); + checkAppendMsg(&sCheck, "Page %u: never used", i); } #else /* If the database supports auto-vacuum, make sure no tables contain @@ -78924,11 +80590,11 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck( */ if( getPageReferenced(&sCheck, i)==0 && (PTRMAP_PAGENO(pBt, i)!=i || !pBt->autoVacuum) ){ - checkAppendMsg(&sCheck, "Page %d is never used", i); + checkAppendMsg(&sCheck, "Page %u: never used", i); } if( getPageReferenced(&sCheck, i)!=0 && (PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){ - checkAppendMsg(&sCheck, "Pointer map page %d is referenced", i); + checkAppendMsg(&sCheck, "Page %u: pointer map referenced", i); } #endif } @@ -78939,16 +80605,17 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck( integrity_ck_cleanup: sqlite3PageFree(sCheck.heap); sqlite3_free(sCheck.aPgRef); - if( sCheck.bOomFault ){ + *pnErr = sCheck.nErr; + if( sCheck.nErr==0 ){ sqlite3_str_reset(&sCheck.errMsg); - sCheck.nErr++; + *pzOut = 0; + }else{ + *pzOut = sqlite3StrAccumFinish(&sCheck.errMsg); } - *pnErr = sCheck.nErr; - if( sCheck.nErr==0 ) sqlite3_str_reset(&sCheck.errMsg); /* Make sure this analysis did not leave any unref() pages. */ assert( nRef==sqlite3PagerRefcount(pBt->pPager) ); sqlite3BtreeLeave(p); - return sqlite3StrAccumFinish(&sCheck.errMsg); + return sCheck.rc; } #endif /* SQLITE_OMIT_INTEGRITY_CHECK */ @@ -79489,13 +81156,7 @@ static int backupOnePage( assert( !isFatalError(p->rc) ); assert( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) ); assert( zSrcData ); - - /* Catch the case where the destination is an in-memory database and the - ** page sizes of the source and destination differ. - */ - if( nSrcPgsz!=nDestPgsz && sqlite3PagerIsMemdb(pDestPager) ){ - rc = SQLITE_READONLY; - } + assert( nSrcPgsz==nDestPgsz || sqlite3PagerIsMemdb(pDestPager)==0 ); /* This loop runs once for each destination page spanned by the source ** page. For each iteration, variable iOff is set to the byte offset @@ -79628,7 +81289,10 @@ SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage){ pgszSrc = sqlite3BtreeGetPageSize(p->pSrc); pgszDest = sqlite3BtreeGetPageSize(p->pDest); destMode = sqlite3PagerGetJournalMode(sqlite3BtreePager(p->pDest)); - if( SQLITE_OK==rc && destMode==PAGER_JOURNALMODE_WAL && pgszSrc!=pgszDest ){ + if( SQLITE_OK==rc + && (destMode==PAGER_JOURNALMODE_WAL || sqlite3PagerIsMemdb(pDestPager)) + && pgszSrc!=pgszDest + ){ rc = SQLITE_READONLY; } @@ -80134,9 +81798,9 @@ static void vdbeMemRenderNum(int sz, char *zBuf, Mem *p){ i64 x; assert( (p->flags&MEM_Int)*2==sizeof(x) ); memcpy(&x, (char*)&p->u, (p->flags&MEM_Int)*2); - sqlite3Int64ToText(x, zBuf); + p->n = sqlite3Int64ToText(x, zBuf); #else - sqlite3Int64ToText(p->u.i, zBuf); + p->n = sqlite3Int64ToText(p->u.i, zBuf); #endif }else{ sqlite3StrAccumInit(&acc, 0, zBuf, sz, 0); @@ -80144,6 +81808,7 @@ static void vdbeMemRenderNum(int sz, char *zBuf, Mem *p){ (p->flags & MEM_IntReal)!=0 ? (double)p->u.i : p->u.r); assert( acc.zText==zBuf && acc.mxAlloc<=0 ); zBuf[acc.nChar] = 0; /* Fast version of sqlite3StrAccumFinish(&acc) */ + p->n = acc.nChar; } } @@ -80171,10 +81836,12 @@ static void vdbeMemRenderNum(int sz, char *zBuf, Mem *p){ ** This routine is for use inside of assert() statements only. */ SQLITE_PRIVATE int sqlite3VdbeMemValidStrRep(Mem *p){ + Mem tmp; char zBuf[100]; char *z; int i, j, incr; if( (p->flags & MEM_Str)==0 ) return 1; + if( p->db && p->db->mallocFailed ) return 1; if( p->flags & MEM_Term ){ /* Insure that the string is properly zero-terminated. Pay particular ** attention to the case where p->n is odd */ @@ -80187,7 +81854,8 @@ SQLITE_PRIVATE int sqlite3VdbeMemValidStrRep(Mem *p){ assert( p->enc==SQLITE_UTF8 || p->z[((p->n+1)&~1)+1]==0 ); } if( (p->flags & (MEM_Int|MEM_Real|MEM_IntReal))==0 ) return 1; - vdbeMemRenderNum(sizeof(zBuf), zBuf, p); + memcpy(&tmp, p, sizeof(tmp)); + vdbeMemRenderNum(sizeof(zBuf), zBuf, &tmp); z = p->z; i = j = 0; incr = 1; @@ -80330,6 +81998,40 @@ SQLITE_PRIVATE int sqlite3VdbeMemClearAndResize(Mem *pMem, int szNew){ return SQLITE_OK; } +/* +** If pMem is already a string, detect if it is a zero-terminated +** string, or make it into one if possible, and mark it as such. +** +** This is an optimization. Correct operation continues even if +** this routine is a no-op. +*/ +SQLITE_PRIVATE void sqlite3VdbeMemZeroTerminateIfAble(Mem *pMem){ + if( (pMem->flags & (MEM_Str|MEM_Term|MEM_Ephem|MEM_Static))!=MEM_Str ){ + /* pMem must be a string, and it cannot be an ephemeral or static string */ + return; + } + if( pMem->enc!=SQLITE_UTF8 ) return; + if( NEVER(pMem->z==0) ) return; + if( pMem->flags & MEM_Dyn ){ + if( pMem->xDel==sqlite3_free + && sqlite3_msize(pMem->z) >= (u64)(pMem->n+1) + ){ + pMem->z[pMem->n] = 0; + pMem->flags |= MEM_Term; + return; + } + if( pMem->xDel==(void(*)(void*))sqlite3RCStrUnref ){ + /* Blindly assume that all RCStr objects are zero-terminated */ + pMem->flags |= MEM_Term; + return; + } + }else if( pMem->szMalloc >= pMem->n+1 ){ + pMem->z[pMem->n] = 0; + pMem->flags |= MEM_Term; + return; + } +} + /* ** It is already known that pMem contains an unterminated string. ** Add the zero terminator. @@ -80456,7 +82158,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, u8 enc, u8 bForce){ vdbeMemRenderNum(nByte, pMem->z, pMem); assert( pMem->z!=0 ); - pMem->n = sqlite3Strlen30NN(pMem->z); + assert( pMem->n==(int)sqlite3Strlen30NN(pMem->z) ); pMem->enc = SQLITE_UTF8; pMem->flags |= MEM_Str|MEM_Term; if( bForce ) pMem->flags &= ~(MEM_Int|MEM_Real|MEM_IntReal); @@ -80591,36 +82293,6 @@ SQLITE_PRIVATE void sqlite3VdbeMemReleaseMalloc(Mem *p){ if( p->szMalloc ) vdbeMemClear(p); } -/* -** Convert a 64-bit IEEE double into a 64-bit signed integer. -** If the double is out of range of a 64-bit signed integer then -** return the closest available 64-bit signed integer. -*/ -static SQLITE_NOINLINE i64 doubleToInt64(double r){ -#ifdef SQLITE_OMIT_FLOATING_POINT - /* When floating-point is omitted, double and int64 are the same thing */ - return r; -#else - /* - ** Many compilers we encounter do not define constants for the - ** minimum and maximum 64-bit integers, or they define them - ** inconsistently. And many do not understand the "LL" notation. - ** So we define our own static constants here using nothing - ** larger than a 32-bit integer constant. - */ - static const i64 maxInt = LARGEST_INT64; - static const i64 minInt = SMALLEST_INT64; - - if( r<=(double)minInt ){ - return minInt; - }else if( r>=(double)maxInt ){ - return maxInt; - }else{ - return (i64)r; - } -#endif -} - /* ** Return some kind of integer value which is the best we can do ** at representing the value that *pMem describes as an integer. @@ -80647,7 +82319,7 @@ SQLITE_PRIVATE i64 sqlite3VdbeIntValue(const Mem *pMem){ testcase( flags & MEM_IntReal ); return pMem->u.i; }else if( flags & MEM_Real ){ - return doubleToInt64(pMem->u.r); + return sqlite3RealToI64(pMem->u.r); }else if( (flags & (MEM_Str|MEM_Blob))!=0 && pMem->z!=0 ){ return memIntValue(pMem); }else{ @@ -80696,32 +82368,35 @@ SQLITE_PRIVATE int sqlite3VdbeBooleanValue(Mem *pMem, int ifNull){ } /* -** The MEM structure is already a MEM_Real. Try to also make it a -** MEM_Int if we can. +** The MEM structure is already a MEM_Real or MEM_IntReal. Try to +** make it a MEM_Int if we can. */ SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem *pMem){ - i64 ix; assert( pMem!=0 ); - assert( pMem->flags & MEM_Real ); + assert( pMem->flags & (MEM_Real|MEM_IntReal) ); assert( !sqlite3VdbeMemIsRowSet(pMem) ); assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); assert( EIGHT_BYTE_ALIGNMENT(pMem) ); - ix = doubleToInt64(pMem->u.r); - - /* Only mark the value as an integer if - ** - ** (1) the round-trip conversion real->int->real is a no-op, and - ** (2) The integer is neither the largest nor the smallest - ** possible integer (ticket #3922) - ** - ** The second and third terms in the following conditional enforces - ** the second condition under the assumption that addition overflow causes - ** values to wrap around. - */ - if( pMem->u.r==ix && ix>SMALLEST_INT64 && ixu.i = ix; + if( pMem->flags & MEM_IntReal ){ MemSetTypeFlag(pMem, MEM_Int); + }else{ + i64 ix = sqlite3RealToI64(pMem->u.r); + + /* Only mark the value as an integer if + ** + ** (1) the round-trip conversion real->int->real is a no-op, and + ** (2) The integer is neither the largest nor the smallest + ** possible integer (ticket #3922) + ** + ** The second and third terms in the following conditional enforces + ** the second condition under the assumption that addition overflow causes + ** values to wrap around. + */ + if( pMem->u.r==ix && ix>SMALLEST_INT64 && ixu.i = ix; + MemSetTypeFlag(pMem, MEM_Int); + } } } @@ -80774,8 +82449,8 @@ SQLITE_PRIVATE int sqlite3RealSameAsInt(double r1, sqlite3_int64 i){ ** from UBSAN. */ SQLITE_PRIVATE i64 sqlite3RealToI64(double r){ - if( r<=(double)SMALLEST_INT64 ) return SMALLEST_INT64; - if( r>=(double)LARGEST_INT64) return LARGEST_INT64; + if( r<-9223372036854774784.0 ) return SMALLEST_INT64; + if( r>+9223372036854774784.0 ) return LARGEST_INT64; return (i64)r; } @@ -80846,6 +82521,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemCast(Mem *pMem, u8 aff, u8 encoding){ break; } default: { + int rc; assert( aff==SQLITE_AFF_TEXT ); assert( MEM_Str==(MEM_Blob>>3) ); pMem->flags |= (pMem->flags&MEM_Blob)>>3; @@ -80853,7 +82529,9 @@ SQLITE_PRIVATE int sqlite3VdbeMemCast(Mem *pMem, u8 aff, u8 encoding){ assert( pMem->flags & MEM_Str || pMem->db->mallocFailed ); pMem->flags &= ~(MEM_Int|MEM_Real|MEM_IntReal|MEM_Blob|MEM_Zero); if( encoding!=SQLITE_UTF8 ) pMem->n &= ~1; - return sqlite3VdbeChangeEncoding(pMem, encoding); + rc = sqlite3VdbeChangeEncoding(pMem, encoding); + if( rc ) return rc; + sqlite3VdbeMemZeroTerminateIfAble(pMem); } } return SQLITE_OK; @@ -81377,6 +83055,24 @@ SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){ return valueToText(pVal, enc); } +/* Return true if sqlit3_value object pVal is a string or blob value +** that uses the destructor specified in the second argument. +** +** TODO: Maybe someday promote this interface into a published API so +** that third-party extensions can get access to it? +*/ +SQLITE_PRIVATE int sqlite3ValueIsOfClass(const sqlite3_value *pVal, void(*xFree)(void*)){ + if( ALWAYS(pVal!=0) + && ALWAYS((pVal->flags & (MEM_Str|MEM_Blob))!=0) + && (pVal->flags & MEM_Dyn)!=0 + && pVal->xDel==xFree + ){ + return 1; + }else{ + return 0; + } +} + /* ** Create a new sqlite3_value object. */ @@ -81444,6 +83140,7 @@ static sqlite3_value *valueNew(sqlite3 *db, struct ValueNewStat4Ctx *p){ } pRec->nField = p->iVal+1; + sqlite3VdbeMemSetNull(&pRec->aMem[p->iVal]); return &pRec->aMem[p->iVal]; } #else @@ -81497,6 +83194,9 @@ static int valueFromFunction( if( pList ) nVal = pList->nExpr; assert( !ExprHasProperty(p, EP_IntValue) ); pFunc = sqlite3FindFunction(db, p->u.zToken, nVal, enc, 0); +#ifdef SQLITE_ENABLE_UNKNOWN_SQL_FUNCTION + if( pFunc==0 ) return SQLITE_OK; +#endif assert( pFunc ); if( (pFunc->funcFlags & (SQLITE_FUNC_CONSTANT|SQLITE_FUNC_SLOCHNG))==0 || (pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL) @@ -81522,8 +83222,6 @@ static int valueFromFunction( goto value_from_function_out; } - testcase( pCtx->pParse->rc==SQLITE_ERROR ); - testcase( pCtx->pParse->rc==SQLITE_OK ); memset(&ctx, 0, sizeof(ctx)); ctx.pOut = pVal; ctx.pFunc = pFunc; @@ -81536,16 +83234,16 @@ static int valueFromFunction( sqlite3ValueApplyAffinity(pVal, aff, SQLITE_UTF8); assert( rc==SQLITE_OK ); rc = sqlite3VdbeChangeEncoding(pVal, enc); - if( rc==SQLITE_OK && sqlite3VdbeMemTooBig(pVal) ){ + if( NEVER(rc==SQLITE_OK && sqlite3VdbeMemTooBig(pVal)) ){ rc = SQLITE_TOOBIG; pCtx->pParse->nErr++; } } - pCtx->pParse->rc = rc; value_from_function_out: if( rc!=SQLITE_OK ){ pVal = 0; + pCtx->pParse->rc = rc; } if( apVal ){ for(i=0; ipLeft, enc, aff, ppVal, pCtx); testcase( rc!=SQLITE_OK ); if( *ppVal ){ +#ifdef SQLITE_ENABLE_STAT4 + rc = ExpandBlob(*ppVal); +#else + /* zero-blobs only come from functions, not literal values. And + ** functions are only processed under STAT4 */ + assert( (ppVal[0][0].flags & MEM_Zero)==0 ); +#endif sqlite3VdbeMemCast(*ppVal, aff, enc); sqlite3ValueApplyAffinity(*ppVal, affinity, enc); } @@ -82218,10 +83923,41 @@ static int growOpArray(Vdbe *v, int nOp){ */ static void test_addop_breakpoint(int pc, Op *pOp){ static int n = 0; + (void)pc; + (void)pOp; n++; } #endif +/* +** Slow paths for sqlite3VdbeAddOp3() and sqlite3VdbeAddOp4Int() for the +** unusual case when we need to increase the size of the Vdbe.aOp[] array +** before adding the new opcode. +*/ +static SQLITE_NOINLINE int growOp3(Vdbe *p, int op, int p1, int p2, int p3){ + assert( p->nOpAlloc<=p->nOp ); + if( growOpArray(p, 1) ) return 1; + assert( p->nOpAlloc>p->nOp ); + return sqlite3VdbeAddOp3(p, op, p1, p2, p3); +} +static SQLITE_NOINLINE int addOp4IntSlow( + Vdbe *p, /* Add the opcode to this VM */ + int op, /* The new opcode */ + int p1, /* The P1 operand */ + int p2, /* The P2 operand */ + int p3, /* The P3 operand */ + int p4 /* The P4 operand as an integer */ +){ + int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3); + if( p->db->mallocFailed==0 ){ + VdbeOp *pOp = &p->aOp[addr]; + pOp->p4type = P4_INT32; + pOp->p4.i = p4; + } + return addr; +} + + /* ** Add a new instruction to the list of instructions current in the ** VDBE. Return the address of the new instruction. @@ -82232,17 +83968,16 @@ static void test_addop_breakpoint(int pc, Op *pOp){ ** ** op The opcode for this instruction ** -** p1, p2, p3 Operands -** -** Use the sqlite3VdbeResolveLabel() function to fix an address and -** the sqlite3VdbeChangeP4() function to change the value of the P4 -** operand. +** p1, p2, p3, p4 Operands */ -static SQLITE_NOINLINE int growOp3(Vdbe *p, int op, int p1, int p2, int p3){ - assert( p->nOpAlloc<=p->nOp ); - if( growOpArray(p, 1) ) return 1; - assert( p->nOpAlloc>p->nOp ); - return sqlite3VdbeAddOp3(p, op, p1, p2, p3); +SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe *p, int op){ + return sqlite3VdbeAddOp3(p, op, 0, 0, 0); +} +SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe *p, int op, int p1){ + return sqlite3VdbeAddOp3(p, op, p1, 0, 0); +} +SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe *p, int op, int p1, int p2){ + return sqlite3VdbeAddOp3(p, op, p1, p2, 0); } SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){ int i; @@ -82265,32 +84000,78 @@ SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){ pOp->p3 = p3; pOp->p4.p = 0; pOp->p4type = P4_NOTUSED; + + /* Replicate this logic in sqlite3VdbeAddOp4Int() + ** vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS pOp->zComment = 0; #endif +#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || defined(VDBE_PROFILE) + pOp->nExec = 0; + pOp->nCycle = 0; +#endif #ifdef SQLITE_DEBUG if( p->db->flags & SQLITE_VdbeAddopTrace ){ sqlite3VdbePrintOp(0, i, &p->aOp[i]); test_addop_breakpoint(i, &p->aOp[i]); } #endif -#ifdef VDBE_PROFILE - pOp->cycles = 0; - pOp->cnt = 0; -#endif #ifdef SQLITE_VDBE_COVERAGE pOp->iSrcLine = 0; #endif + /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ** Replicate in sqlite3VdbeAddOp4Int() */ + return i; } -SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe *p, int op){ - return sqlite3VdbeAddOp3(p, op, 0, 0, 0); -} -SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe *p, int op, int p1){ - return sqlite3VdbeAddOp3(p, op, p1, 0, 0); -} -SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe *p, int op, int p1, int p2){ - return sqlite3VdbeAddOp3(p, op, p1, p2, 0); +SQLITE_PRIVATE int sqlite3VdbeAddOp4Int( + Vdbe *p, /* Add the opcode to this VM */ + int op, /* The new opcode */ + int p1, /* The P1 operand */ + int p2, /* The P2 operand */ + int p3, /* The P3 operand */ + int p4 /* The P4 operand as an integer */ +){ + int i; + VdbeOp *pOp; + + i = p->nOp; + if( p->nOpAlloc<=i ){ + return addOp4IntSlow(p, op, p1, p2, p3, p4); + } + p->nOp++; + pOp = &p->aOp[i]; + assert( pOp!=0 ); + pOp->opcode = (u8)op; + pOp->p5 = 0; + pOp->p1 = p1; + pOp->p2 = p2; + pOp->p3 = p3; + pOp->p4.i = p4; + pOp->p4type = P4_INT32; + + /* Replicate this logic in sqlite3VdbeAddOp3() + ** vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */ +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS + pOp->zComment = 0; +#endif +#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || defined(VDBE_PROFILE) + pOp->nExec = 0; + pOp->nCycle = 0; +#endif +#ifdef SQLITE_DEBUG + if( p->db->flags & SQLITE_VdbeAddopTrace ){ + sqlite3VdbePrintOp(0, i, &p->aOp[i]); + test_addop_breakpoint(i, &p->aOp[i]); + } +#endif +#ifdef SQLITE_VDBE_COVERAGE + pOp->iSrcLine = 0; +#endif + /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ** Replicate in sqlite3VdbeAddOp3() */ + + return i; } /* Generate code for an unconditional jump to instruction iDest @@ -82445,11 +84226,12 @@ SQLITE_PRIVATE void sqlite3ExplainBreakpoint(const char *z1, const char *z2){ ** If the bPush flag is true, then make this opcode the parent for ** subsequent Explains until sqlite3VdbeExplainPop() is called. */ -SQLITE_PRIVATE void sqlite3VdbeExplain(Parse *pParse, u8 bPush, const char *zFmt, ...){ -#ifndef SQLITE_DEBUG +SQLITE_PRIVATE int sqlite3VdbeExplain(Parse *pParse, u8 bPush, const char *zFmt, ...){ + int addr = 0; +#if !defined(SQLITE_DEBUG) /* Always include the OP_Explain opcodes if SQLITE_DEBUG is defined. ** But omit them (for performance) during production builds */ - if( pParse->explain==2 ) + if( pParse->explain==2 || IS_STMT_SCANSTATUS(pParse->db) ) #endif { char *zMsg; @@ -82461,13 +84243,15 @@ SQLITE_PRIVATE void sqlite3VdbeExplain(Parse *pParse, u8 bPush, const char *zFmt va_end(ap); v = pParse->pVdbe; iThis = v->nOp; - sqlite3VdbeAddOp4(v, OP_Explain, iThis, pParse->addrExplain, 0, + addr = sqlite3VdbeAddOp4(v, OP_Explain, iThis, pParse->addrExplain, 0, zMsg, P4_DYNAMIC); sqlite3ExplainBreakpoint(bPush?"PUSH":"", sqlite3VdbeGetLastOp(v)->p4.z); if( bPush){ pParse->addrExplain = iThis; } + sqlite3VdbeScanStatus(v, iThis, -1, -1, 0, 0); } + return addr; } /* @@ -82495,26 +84279,6 @@ SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe *p, int iDb, char *zWhere, sqlite3MayAbort(p->pParse); } -/* -** Add an opcode that includes the p4 value as an integer. -*/ -SQLITE_PRIVATE int sqlite3VdbeAddOp4Int( - Vdbe *p, /* Add the opcode to this VM */ - int op, /* The new opcode */ - int p1, /* The P1 operand */ - int p2, /* The P2 operand */ - int p3, /* The P3 operand */ - int p4 /* The P4 operand as an integer */ -){ - int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3); - if( p->db->mallocFailed==0 ){ - VdbeOp *pOp = &p->aOp[addr]; - pOp->p4type = P4_INT32; - pOp->p4.i = p4; - } - return addr; -} - /* Insert the end of a co-routine */ SQLITE_PRIVATE void sqlite3VdbeEndCoroutine(Vdbe *v, int regYield){ @@ -82575,6 +84339,9 @@ static SQLITE_NOINLINE void resizeResolveLabel(Parse *p, Vdbe *v, int j){ int i; for(i=p->nLabelAlloc; iaLabel[i] = -1; #endif + if( nNewSize>=100 && (nNewSize/100)>(p->nLabelAlloc/100) ){ + sqlite3ProgressCheck(p); + } p->nLabelAlloc = nNewSize; p->aLabel[j] = v->nOp; } @@ -82818,11 +84585,13 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){ Op *pOp; Parse *pParse = p->pParse; int *aLabel = pParse->aLabel; + + assert( pParse->db->mallocFailed==0 ); /* tag-20230419-1 */ p->readOnly = 1; p->bIsReader = 0; pOp = &p->aOp[p->nOp-1]; assert( p->aOp[0].opcode==OP_Init ); - while( 1 /* Loop termates when it reaches the OP_Init opcode */ ){ + while( 1 /* Loop terminates when it reaches the OP_Init opcode */ ){ /* Only JUMP opcodes and the short list of special opcodes in the switch ** below need to be considered. The mkopcodeh.tcl generator script groups ** all these opcodes together near the front of the opcode list. Skip @@ -82877,6 +84646,7 @@ static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){ ** have non-negative values for P2. */ assert( (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_JUMP)!=0 ); assert( ADDR(pOp->p2)<-pParse->nLabel ); + assert( aLabel!=0 ); /* True because of tag-20230419-1 */ pOp->p2 = aLabel[ADDR(pOp->p2)]; } break; @@ -83120,20 +84890,83 @@ SQLITE_PRIVATE void sqlite3VdbeScanStatus( LogEst nEst, /* Estimated number of output rows */ const char *zName /* Name of table or index being scanned */ ){ - sqlite3_int64 nByte = (p->nScan+1) * sizeof(ScanStatus); - ScanStatus *aNew; - aNew = (ScanStatus*)sqlite3DbRealloc(p->db, p->aScan, nByte); - if( aNew ){ - ScanStatus *pNew = &aNew[p->nScan++]; - pNew->addrExplain = addrExplain; - pNew->addrLoop = addrLoop; - pNew->addrVisit = addrVisit; - pNew->nEst = nEst; - pNew->zName = sqlite3DbStrDup(p->db, zName); - p->aScan = aNew; + if( IS_STMT_SCANSTATUS(p->db) ){ + sqlite3_int64 nByte = (p->nScan+1) * sizeof(ScanStatus); + ScanStatus *aNew; + aNew = (ScanStatus*)sqlite3DbRealloc(p->db, p->aScan, nByte); + if( aNew ){ + ScanStatus *pNew = &aNew[p->nScan++]; + memset(pNew, 0, sizeof(ScanStatus)); + pNew->addrExplain = addrExplain; + pNew->addrLoop = addrLoop; + pNew->addrVisit = addrVisit; + pNew->nEst = nEst; + pNew->zName = sqlite3DbStrDup(p->db, zName); + p->aScan = aNew; + } } } -#endif + +/* +** Add the range of instructions from addrStart to addrEnd (inclusive) to +** the set of those corresponding to the sqlite3_stmt_scanstatus() counters +** associated with the OP_Explain instruction at addrExplain. The +** sum of the sqlite3Hwtime() values for each of these instructions +** will be returned for SQLITE_SCANSTAT_NCYCLE requests. +*/ +SQLITE_PRIVATE void sqlite3VdbeScanStatusRange( + Vdbe *p, + int addrExplain, + int addrStart, + int addrEnd +){ + if( IS_STMT_SCANSTATUS(p->db) ){ + ScanStatus *pScan = 0; + int ii; + for(ii=p->nScan-1; ii>=0; ii--){ + pScan = &p->aScan[ii]; + if( pScan->addrExplain==addrExplain ) break; + pScan = 0; + } + if( pScan ){ + if( addrEnd<0 ) addrEnd = sqlite3VdbeCurrentAddr(p)-1; + for(ii=0; iiaAddrRange); ii+=2){ + if( pScan->aAddrRange[ii]==0 ){ + pScan->aAddrRange[ii] = addrStart; + pScan->aAddrRange[ii+1] = addrEnd; + break; + } + } + } + } +} + +/* +** Set the addresses for the SQLITE_SCANSTAT_NLOOP and SQLITE_SCANSTAT_NROW +** counters for the query element associated with the OP_Explain at +** addrExplain. +*/ +SQLITE_PRIVATE void sqlite3VdbeScanStatusCounters( + Vdbe *p, + int addrExplain, + int addrLoop, + int addrVisit +){ + if( IS_STMT_SCANSTATUS(p->db) ){ + ScanStatus *pScan = 0; + int ii; + for(ii=p->nScan-1; ii>=0; ii--){ + pScan = &p->aScan[ii]; + if( pScan->addrExplain==addrExplain ) break; + pScan = 0; + } + if( pScan ){ + if( addrLoop>0 ) pScan->addrLoop = addrLoop; + if( addrVisit>0 ) pScan->addrVisit = addrVisit; + } + } +} +#endif /* defined(SQLITE_ENABLE_STMT_SCANSTATUS) */ /* @@ -83212,7 +85045,7 @@ SQLITE_PRIVATE void sqlite3VdbeJumpHereOrPopInst(Vdbe *p, int addr){ /* ** If the input FuncDef structure is ephemeral, then free it. If -** the FuncDef is not ephermal, then do nothing. +** the FuncDef is not ephemeral, then do nothing. */ static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){ assert( db!=0 ); @@ -83376,7 +85209,6 @@ SQLITE_PRIVATE void sqlite3VdbeReleaseRegisters( } #endif /* SQLITE_DEBUG */ - /* ** Change the value of the P4 operand for a specific instruction. ** This routine is useful when a large program is loaded from a @@ -83557,7 +85389,7 @@ SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){ /* Return the most recently added opcode */ -VdbeOp * sqlite3VdbeGetLastOp(Vdbe *p){ +SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetLastOp(Vdbe *p){ return sqlite3VdbeGetOp(p, p->nOp - 1); } @@ -84262,7 +86094,6 @@ SQLITE_PRIVATE int sqlite3VdbeList( ** sqlite3_column_text16(), causing a translation to UTF-16 encoding. */ releaseMemArray(pMem, 8); - p->pResultSet = 0; if( p->rc==SQLITE_NOMEM ){ /* This happens if a malloc() inside a call to sqlite3_column_text() or @@ -84298,7 +86129,7 @@ SQLITE_PRIVATE int sqlite3VdbeList( sqlite3VdbeMemSetInt64(pMem+1, pOp->p2); sqlite3VdbeMemSetInt64(pMem+2, pOp->p3); sqlite3VdbeMemSetStr(pMem+3, zP4, -1, SQLITE_UTF8, sqlite3_free); - p->nResColumn = 4; + assert( p->nResColumn==4 ); }else{ sqlite3VdbeMemSetInt64(pMem+0, i); sqlite3VdbeMemSetStr(pMem+1, (char*)sqlite3OpcodeName(pOp->opcode), @@ -84317,9 +86148,9 @@ SQLITE_PRIVATE int sqlite3VdbeList( sqlite3VdbeMemSetNull(pMem+7); #endif sqlite3VdbeMemSetStr(pMem+5, zP4, -1, SQLITE_UTF8, sqlite3_free); - p->nResColumn = 8; + assert( p->nResColumn==8 ); } - p->pResultSet = pMem; + p->pResultRow = pMem; if( db->mallocFailed ){ p->rc = SQLITE_NOMEM; rc = SQLITE_ERROR; @@ -84430,7 +86261,7 @@ static void *allocSpace( ** running it. */ SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe *p){ -#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE) +#if defined(SQLITE_DEBUG) int i; #endif assert( p!=0 ); @@ -84459,8 +86290,8 @@ SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe *p){ p->nFkConstraint = 0; #ifdef VDBE_PROFILE for(i=0; inOp; i++){ - p->aOp[i].cnt = 0; - p->aOp[i].cycles = 0; + p->aOp[i].nExec = 0; + p->aOp[i].nCycle = 0; } #endif } @@ -84531,26 +86362,9 @@ SQLITE_PRIVATE void sqlite3VdbeMakeReady( resolveP2Values(p, &nArg); p->usesStmtJournal = (u8)(pParse->isMultiWrite && pParse->mayAbort); if( pParse->explain ){ - static const char * const azColName[] = { - "addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment", - "id", "parent", "notused", "detail" - }; - int iFirst, mx, i; if( nMem<10 ) nMem = 10; p->explain = pParse->explain; - if( pParse->explain==2 ){ - sqlite3VdbeSetNumCols(p, 4); - iFirst = 8; - mx = 12; - }else{ - sqlite3VdbeSetNumCols(p, 8); - iFirst = 0; - mx = 8; - } - for(i=iFirst; inResColumn = 12 - 4*p->explain; } p->expired = 0; @@ -84569,9 +86383,6 @@ SQLITE_PRIVATE void sqlite3VdbeMakeReady( p->aVar = allocSpace(&x, 0, nVar*sizeof(Mem)); p->apArg = allocSpace(&x, 0, nArg*sizeof(Mem*)); p->apCsr = allocSpace(&x, 0, nCursor*sizeof(VdbeCursor*)); -#ifdef SQLITE_ENABLE_STMT_SCANSTATUS - p->anExec = allocSpace(&x, 0, p->nOp*sizeof(i64)); -#endif if( x.nNeeded ){ x.pSpace = p->pFree = sqlite3DbMallocRawNN(db, x.nNeeded); x.nFree = x.nNeeded; @@ -84580,9 +86391,6 @@ SQLITE_PRIVATE void sqlite3VdbeMakeReady( p->aVar = allocSpace(&x, p->aVar, nVar*sizeof(Mem)); p->apArg = allocSpace(&x, p->apArg, nArg*sizeof(Mem*)); p->apCsr = allocSpace(&x, p->apCsr, nCursor*sizeof(VdbeCursor*)); -#ifdef SQLITE_ENABLE_STMT_SCANSTATUS - p->anExec = allocSpace(&x, p->anExec, p->nOp*sizeof(i64)); -#endif } } @@ -84597,9 +86405,6 @@ SQLITE_PRIVATE void sqlite3VdbeMakeReady( p->nMem = nMem; initMemArray(p->aMem, nMem, db, MEM_Undefined); memset(p->apCsr, 0, nCursor*sizeof(VdbeCursor*)); -#ifdef SQLITE_ENABLE_STMT_SCANSTATUS - memset(p->anExec, 0, p->nOp*sizeof(i64)); -#endif } sqlite3VdbeRewind(p); } @@ -84611,7 +86416,23 @@ SQLITE_PRIVATE void sqlite3VdbeMakeReady( SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){ if( pCx ) sqlite3VdbeFreeCursorNN(p,pCx); } +static SQLITE_NOINLINE void freeCursorWithCache(Vdbe *p, VdbeCursor *pCx){ + VdbeTxtBlbCache *pCache = pCx->pCache; + assert( pCx->colCache ); + pCx->colCache = 0; + pCx->pCache = 0; + if( pCache->pCValue ){ + sqlite3RCStrUnref(pCache->pCValue); + pCache->pCValue = 0; + } + sqlite3DbFree(p->db, pCache); + sqlite3VdbeFreeCursorNN(p, pCx); +} SQLITE_PRIVATE void sqlite3VdbeFreeCursorNN(Vdbe *p, VdbeCursor *pCx){ + if( pCx->colCache ){ + freeCursorWithCache(p, pCx); + return; + } switch( pCx->eCurType ){ case CURTYPE_SORTER: { sqlite3VdbeSorterClose(p->db, pCx); @@ -84657,9 +86478,6 @@ static void closeCursorsInFrame(Vdbe *p){ SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){ Vdbe *v = pFrame->v; closeCursorsInFrame(v); -#ifdef SQLITE_ENABLE_STMT_SCANSTATUS - v->anExec = pFrame->anExec; -#endif v->aOp = pFrame->aOp; v->nOp = pFrame->nOp; v->aMem = pFrame->aMem; @@ -84715,12 +86533,12 @@ SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){ int n; sqlite3 *db = p->db; - if( p->nResColumn ){ - releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); + if( p->nResAlloc ){ + releaseMemArray(p->aColName, p->nResAlloc*COLNAME_N); sqlite3DbFree(db, p->aColName); } n = nResColumn*COLNAME_N; - p->nResColumn = (u16)nResColumn; + p->nResColumn = p->nResAlloc = (u16)nResColumn; p->aColName = (Mem*)sqlite3DbMallocRawNN(db, sizeof(Mem)*n ); if( p->aColName==0 ) return; initMemArray(p->aColName, n, db, MEM_Null); @@ -84745,14 +86563,14 @@ SQLITE_PRIVATE int sqlite3VdbeSetColName( ){ int rc; Mem *pColName; - assert( idxnResColumn ); + assert( idxnResAlloc ); assert( vardb->mallocFailed ){ assert( !zName || xDel!=SQLITE_DYNAMIC ); return SQLITE_NOMEM_BKPT; } assert( p->aColName!=0 ); - pColName = &(p->aColName[idx+var*p->nResColumn]); + pColName = &(p->aColName[idx+var*p->nResAlloc]); rc = sqlite3VdbeMemSetStr(pColName, zName, -1, SQLITE_UTF8, xDel); assert( rc!=0 || !zName || (pColName->flags&MEM_Term)!=0 ); return rc; @@ -85265,6 +87083,7 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){ sqlite3VdbeLeave(p); return SQLITE_BUSY; }else if( rc!=SQLITE_OK ){ + sqlite3SystemError(db, rc); p->rc = rc; sqlite3RollbackAll(db, SQLITE_OK); p->nChange = 0; @@ -85274,6 +87093,8 @@ SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){ db->flags &= ~(u64)SQLITE_DeferFKs; sqlite3CommitInternalChanges(db); } + }else if( p->rc==SQLITE_SCHEMA && db->nVdbeActive>1 ){ + p->nChange = 0; }else{ sqlite3RollbackAll(db, SQLITE_OK); p->nChange = 0; @@ -85463,7 +87284,7 @@ SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){ sqlite3DbFree(db, p->zErrMsg); p->zErrMsg = 0; } - p->pResultSet = 0; + p->pResultRow = 0; #ifdef SQLITE_DEBUG p->nWrite = 0; #endif @@ -85491,10 +87312,12 @@ SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){ } for(i=0; inOp; i++){ char zHdr[100]; + i64 cnt = p->aOp[i].nExec; + i64 cycles = p->aOp[i].nCycle; sqlite3_snprintf(sizeof(zHdr), zHdr, "%6u %12llu %8llu ", - p->aOp[i].cnt, - p->aOp[i].cycles, - p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0 + cnt, + cycles, + cnt>0 ? cycles/cnt : 0 ); fprintf(out, "%s", zHdr); sqlite3VdbePrintOp(out, i, &p->aOp[i]); @@ -85572,7 +87395,7 @@ static void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){ assert( db!=0 ); assert( p->db==0 || p->db==db ); if( p->aColName ){ - releaseMemArray(p->aColName, p->nResColumn*COLNAME_N); + releaseMemArray(p->aColName, p->nResAlloc*COLNAME_N); sqlite3DbNNFreeNN(db, p->aColName); } for(pSub=p->pProgram; pSub; pSub=pNext){ @@ -85590,9 +87413,9 @@ static void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){ #ifdef SQLITE_ENABLE_NORMALIZE sqlite3DbFree(db, p->zNormSql); { - DblquoteStr *pThis, *pNext; - for(pThis=p->pDblStr; pThis; pThis=pNext){ - pNext = pThis->pNextStr; + DblquoteStr *pThis, *pNxt; + for(pThis=p->pDblStr; pThis; pThis=pNxt){ + pNxt = pThis->pNextStr; sqlite3DbFree(db, pThis); } } @@ -86172,6 +87995,15 @@ static int vdbeRecordCompareDebug( if( d1+(u64)serial_type1+2>(u64)nKey1 && d1+(u64)sqlite3VdbeSerialTypeLen(serial_type1)>(u64)nKey1 ){ + if( serial_type1>=1 + && serial_type1<=7 + && d1+(u64)sqlite3VdbeSerialTypeLen(serial_type1)<=(u64)nKey1+8 + && CORRUPT_DB + ){ + return 1; /* corrupt record not detected by + ** sqlite3VdbeRecordCompareWithSkip(). Return true + ** to avoid firing the assert() */ + } break; } @@ -86615,7 +88447,7 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompareWithSkip( /* Serial types 12 or greater are strings and blobs (greater than ** numbers). Types 10 and 11 are currently "reserved for future ** use", so it doesn't really matter what the results of comparing - ** them to numberic values are. */ + ** them to numeric values are. */ rc = serial_type==10 ? -1 : +1; }else if( serial_type==0 ){ rc = -1; @@ -87219,6 +89051,20 @@ SQLITE_PRIVATE int sqlite3NotPureFunc(sqlite3_context *pCtx){ return 1; } +#if defined(SQLITE_ENABLE_CURSOR_HINTS) && defined(SQLITE_DEBUG) +/* +** This Walker callback is used to help verify that calls to +** sqlite3BtreeCursorHint() with opcode BTREE_HINT_RANGE have +** byte-code register values correctly initialized. +*/ +SQLITE_PRIVATE int sqlite3CursorRangeHintExprCheck(Walker *pWalker, Expr *pExpr){ + if( pExpr->op==TK_REGISTER ){ + assert( (pWalker->u.aMem[pExpr->iTable].flags & MEM_Undefined)==0 ); + } + return WRC_Continue; +} +#endif /* SQLITE_ENABLE_CURSOR_HINTS && SQLITE_DEBUG */ + #ifndef SQLITE_OMIT_VIRTUALTABLE /* ** Transfer error message text from an sqlite3_vtab.zErrMsg (text stored @@ -87281,6 +89127,16 @@ SQLITE_PRIVATE void sqlite3VdbePreUpdateHook( PreUpdate preupdate; const char *zTbl = pTab->zName; static const u8 fakeSortOrder = 0; +#ifdef SQLITE_DEBUG + int nRealCol; + if( pTab->tabFlags & TF_WithoutRowid ){ + nRealCol = sqlite3PrimaryKeyIndex(pTab)->nColumn; + }else if( pTab->tabFlags & TF_HasVirtual ){ + nRealCol = pTab->nNVCol; + }else{ + nRealCol = pTab->nCol; + } +#endif assert( db->pPreUpdate==0 ); memset(&preupdate, 0, sizeof(PreUpdate)); @@ -87297,8 +89153,8 @@ SQLITE_PRIVATE void sqlite3VdbePreUpdateHook( assert( pCsr!=0 ); assert( pCsr->eCurType==CURTYPE_BTREE ); - assert( pCsr->nField==pTab->nCol - || (pCsr->nField==pTab->nCol+1 && op==SQLITE_DELETE && iReg==-1) + assert( pCsr->nField==nRealCol + || (pCsr->nField==nRealCol+1 && op==SQLITE_DELETE && iReg==-1) ); preupdate.v = v; @@ -87349,6 +89205,7 @@ SQLITE_PRIVATE void sqlite3VdbePreUpdateHook( */ /* #include "sqliteInt.h" */ /* #include "vdbeInt.h" */ +/* #include "opcodes.h" */ #ifndef SQLITE_OMIT_DEPRECATED /* @@ -87604,7 +89461,7 @@ SQLITE_API int sqlite3_value_type(sqlite3_value* pVal){ SQLITE_NULL, /* 0x1f (not possible) */ SQLITE_FLOAT, /* 0x20 INTREAL */ SQLITE_NULL, /* 0x21 (not possible) */ - SQLITE_TEXT, /* 0x22 INTREAL + TEXT */ + SQLITE_FLOAT, /* 0x22 INTREAL + TEXT */ SQLITE_NULL, /* 0x23 (not possible) */ SQLITE_FLOAT, /* 0x24 (not possible) */ SQLITE_NULL, /* 0x25 (not possible) */ @@ -87839,11 +89696,15 @@ SQLITE_API void sqlite3_result_text64( ){ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); assert( xDel!=SQLITE_DYNAMIC ); - if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE; + if( enc!=SQLITE_UTF8 ){ + if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE; + n &= ~(u64)1; + } if( n>0x7fffffff ){ (void)invokeValueDestructor(z, xDel, pCtx); }else{ setResultStrOrError(pCtx, z, (int)n, enc, xDel); + sqlite3VdbeMemZeroTerminateIfAble(pCtx->pOut); } } #ifndef SQLITE_OMIT_UTF16 @@ -87854,7 +89715,7 @@ SQLITE_API void sqlite3_result_text16( void (*xDel)(void *) ){ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); - setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel); + setResultStrOrError(pCtx, z, n & ~(u64)1, SQLITE_UTF16NATIVE, xDel); } SQLITE_API void sqlite3_result_text16be( sqlite3_context *pCtx, @@ -87863,7 +89724,7 @@ SQLITE_API void sqlite3_result_text16be( void (*xDel)(void *) ){ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); - setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel); + setResultStrOrError(pCtx, z, n & ~(u64)1, SQLITE_UTF16BE, xDel); } SQLITE_API void sqlite3_result_text16le( sqlite3_context *pCtx, @@ -87872,7 +89733,7 @@ SQLITE_API void sqlite3_result_text16le( void (*xDel)(void *) ){ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); - setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel); + setResultStrOrError(pCtx, z, n & ~(u64)1, SQLITE_UTF16LE, xDel); } #endif /* SQLITE_OMIT_UTF16 */ SQLITE_API void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){ @@ -88083,7 +89944,7 @@ static int sqlite3Step(Vdbe *p){ /* If the statement completed successfully, invoke the profile callback */ checkProfileCallback(db, p); #endif - + p->pResultRow = 0; if( rc==SQLITE_DONE && db->autoCommit ){ assert( p->rc==SQLITE_OK ); p->rc = doWalCallbacks(db); @@ -88212,6 +90073,17 @@ SQLITE_API int sqlite3_vtab_nochange(sqlite3_context *p){ return sqlite3_value_nochange(p->pOut); } +/* +** The destructor function for a ValueList object. This needs to be +** a separate function, unknowable to the application, to ensure that +** calls to sqlite3_vtab_in_first()/sqlite3_vtab_in_next() that are not +** preceded by activation of IN processing via sqlite3_vtab_int() do not +** try to access a fake ValueList object inserted by a hostile extension. +*/ +SQLITE_PRIVATE void sqlite3VdbeValueListFree(void *pToDelete){ + sqlite3_free(pToDelete); +} + /* ** Implementation of sqlite3_vtab_in_first() (if bNext==0) and ** sqlite3_vtab_in_next() (if bNext!=0). @@ -88226,8 +90098,15 @@ static int valueFromValueList( *ppOut = 0; if( pVal==0 ) return SQLITE_MISUSE; - pRhs = (ValueList*)sqlite3_value_pointer(pVal, "ValueList"); - if( pRhs==0 ) return SQLITE_MISUSE; + if( (pVal->flags & MEM_Dyn)==0 || pVal->xDel!=sqlite3VdbeValueListFree ){ + return SQLITE_ERROR; + }else{ + assert( (pVal->flags&(MEM_TypeMask|MEM_Term|MEM_Subtype)) == + (MEM_Null|MEM_Term|MEM_Subtype) ); + assert( pVal->eSubtype=='p' ); + assert( pVal->u.zPType!=0 && strcmp(pVal->u.zPType,"ValueList")==0 ); + pRhs = (ValueList*)pVal->z; + } if( bNext ){ rc = sqlite3BtreeNext(pRhs->pCsr, 0); }else{ @@ -88438,7 +90317,8 @@ SQLITE_API int sqlite3_aggregate_count(sqlite3_context *p){ */ SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt){ Vdbe *pVm = (Vdbe *)pStmt; - return pVm ? pVm->nResColumn : 0; + if( pVm==0 ) return 0; + return pVm->nResColumn; } /* @@ -88447,7 +90327,7 @@ SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt){ */ SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt){ Vdbe *pVm = (Vdbe *)pStmt; - if( pVm==0 || pVm->pResultSet==0 ) return 0; + if( pVm==0 || pVm->pResultRow==0 ) return 0; return pVm->nResColumn; } @@ -88502,8 +90382,8 @@ static Mem *columnMem(sqlite3_stmt *pStmt, int i){ if( pVm==0 ) return (Mem*)columnNullValue(); assert( pVm->db ); sqlite3_mutex_enter(pVm->db->mutex); - if( pVm->pResultSet!=0 && inResColumn && i>=0 ){ - pOut = &pVm->pResultSet[i]; + if( pVm->pResultRow!=0 && inResColumn && i>=0 ){ + pOut = &pVm->pResultRow[i]; }else{ sqlite3Error(pVm->db, SQLITE_RANGE); pOut = (Mem*)columnNullValue(); @@ -88527,7 +90407,7 @@ static Mem *columnMem(sqlite3_stmt *pStmt, int i){ ** sqlite3_column_real() ** sqlite3_column_bytes() ** sqlite3_column_bytes16() -** sqiite3_column_blob() +** sqlite3_column_blob() */ static void columnMallocFailure(sqlite3_stmt *pStmt) { @@ -88611,6 +90491,32 @@ SQLITE_API int sqlite3_column_type(sqlite3_stmt *pStmt, int i){ return iType; } +/* +** Column names appropriate for EXPLAIN or EXPLAIN QUERY PLAN. +*/ +static const char * const azExplainColNames8[] = { + "addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment", /* EXPLAIN */ + "id", "parent", "notused", "detail" /* EQP */ +}; +static const u16 azExplainColNames16data[] = { + /* 0 */ 'a', 'd', 'd', 'r', 0, + /* 5 */ 'o', 'p', 'c', 'o', 'd', 'e', 0, + /* 12 */ 'p', '1', 0, + /* 15 */ 'p', '2', 0, + /* 18 */ 'p', '3', 0, + /* 21 */ 'p', '4', 0, + /* 24 */ 'p', '5', 0, + /* 27 */ 'c', 'o', 'm', 'm', 'e', 'n', 't', 0, + /* 35 */ 'i', 'd', 0, + /* 38 */ 'p', 'a', 'r', 'e', 'n', 't', 0, + /* 45 */ 'n', 'o', 't', 'u', 's', 'e', 'd', 0, + /* 53 */ 'd', 'e', 't', 'a', 'i', 'l', 0 +}; +static const u8 iExplainColNames16[] = { + 0, 5, 12, 15, 18, 21, 24, 27, + 35, 38, 45, 53 +}; + /* ** Convert the N-th element of pStmt->pColName[] into a string using ** xFunc() then return that string. If N is out of range, return 0. @@ -88643,15 +90549,29 @@ static const void *columnName( return 0; } #endif + if( N<0 ) return 0; ret = 0; p = (Vdbe *)pStmt; db = p->db; assert( db!=0 ); - n = sqlite3_column_count(pStmt); - if( N=0 ){ + sqlite3_mutex_enter(db->mutex); + + if( p->explain ){ + if( useType>0 ) goto columnName_end; + n = p->explain==1 ? 8 : 4; + if( N>=n ) goto columnName_end; + if( useUtf16 ){ + int i = iExplainColNames16[N + 8*p->explain - 8]; + ret = (void*)&azExplainColNames16data[i]; + }else{ + ret = (void*)azExplainColNames8[N + 8*p->explain - 8]; + } + goto columnName_end; + } + n = p->nResColumn; + if( NmallocFailed; N += useType*n; - sqlite3_mutex_enter(db->mutex); - assert( db->mallocFailed==0 ); #ifndef SQLITE_OMIT_UTF16 if( useUtf16 ){ ret = sqlite3_value_text16((sqlite3_value*)&p->aColName[N]); @@ -88663,12 +90583,14 @@ static const void *columnName( /* A malloc may have failed inside of the _text() call. If this ** is the case, clear the mallocFailed flag and return NULL. */ - if( db->mallocFailed ){ + assert( db->mallocFailed==0 || db->mallocFailed==1 ); + if( db->mallocFailed > prior_mallocFailed ){ sqlite3OomClear(db); ret = 0; } - sqlite3_mutex_leave(db->mutex); } +columnName_end: + sqlite3_mutex_leave(db->mutex); return ret; } @@ -88761,7 +90683,7 @@ SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){ /* ** Unbind the value bound to variable i in virtual machine p. This is the ** the same as binding a NULL value to the column. If the "i" parameter is -** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK. +** out of range, then SQLITE_RANGE is returned. Otherwise SQLITE_OK. ** ** A successful evaluation of this routine acquires the mutex on p. ** the mutex is released if any kind of error occurs. @@ -88937,7 +90859,10 @@ SQLITE_API int sqlite3_bind_text64( unsigned char enc ){ assert( xDel!=SQLITE_DYNAMIC ); - if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE; + if( enc!=SQLITE_UTF8 ){ + if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE; + nData &= ~(u16)1; + } return bindText(pStmt, i, zData, nData, xDel, enc); } #ifndef SQLITE_OMIT_UTF16 @@ -88945,10 +90870,10 @@ SQLITE_API int sqlite3_bind_text16( sqlite3_stmt *pStmt, int i, const void *zData, - int nData, + int n, void (*xDel)(void*) ){ - return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE); + return bindText(pStmt, i, zData, n & ~(u64)1, xDel, SQLITE_UTF16NATIVE); } #endif /* SQLITE_OMIT_UTF16 */ SQLITE_API int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){ @@ -89122,6 +91047,39 @@ SQLITE_API int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt){ return pStmt ? ((Vdbe*)pStmt)->explain : 0; } +/* +** Set the explain mode for a statement. +*/ +SQLITE_API int sqlite3_stmt_explain(sqlite3_stmt *pStmt, int eMode){ + Vdbe *v = (Vdbe*)pStmt; + int rc; + sqlite3_mutex_enter(v->db->mutex); + if( ((int)v->explain)==eMode ){ + rc = SQLITE_OK; + }else if( eMode<0 || eMode>2 ){ + rc = SQLITE_ERROR; + }else if( (v->prepFlags & SQLITE_PREPARE_SAVESQL)==0 ){ + rc = SQLITE_ERROR; + }else if( v->eVdbeState!=VDBE_READY_STATE ){ + rc = SQLITE_BUSY; + }else if( v->nMem>=10 && (eMode!=2 || v->haveEqpOps) ){ + /* No reprepare necessary */ + v->explain = eMode; + rc = SQLITE_OK; + }else{ + v->explain = eMode; + rc = sqlite3Reprepare(v); + v->haveEqpOps = eMode==2; + } + if( v->explain ){ + v->nResColumn = 12 - 4*v->explain; + }else{ + v->nResColumn = v->nResAlloc; + } + sqlite3_mutex_leave(v->db->mutex); + return rc; +} + /* ** Return true if the prepared statement is in need of being reset. */ @@ -89439,23 +91397,69 @@ SQLITE_API int sqlite3_preupdate_new(sqlite3 *db, int iIdx, sqlite3_value **ppVa /* ** Return status data for a single loop within query pStmt. */ -SQLITE_API int sqlite3_stmt_scanstatus( +SQLITE_API int sqlite3_stmt_scanstatus_v2( sqlite3_stmt *pStmt, /* Prepared statement being queried */ - int idx, /* Index of loop to report on */ + int iScan, /* Index of loop to report on */ int iScanStatusOp, /* Which metric to return */ + int flags, void *pOut /* OUT: Write the answer here */ ){ Vdbe *p = (Vdbe*)pStmt; - ScanStatus *pScan; - if( idx<0 || idx>=p->nScan ) return 1; - pScan = &p->aScan[idx]; + VdbeOp *aOp = p->aOp; + int nOp = p->nOp; + ScanStatus *pScan = 0; + int idx; + + if( p->pFrame ){ + VdbeFrame *pFrame; + for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent); + aOp = pFrame->aOp; + nOp = pFrame->nOp; + } + + if( iScan<0 ){ + int ii; + if( iScanStatusOp==SQLITE_SCANSTAT_NCYCLE ){ + i64 res = 0; + for(ii=0; iiaScan[idx]; + }else{ + /* If the COMPLEX flag is clear, then this function must ignore any + ** ScanStatus structures with ScanStatus.addrLoop set to 0. */ + for(idx=0; idxnScan; idx++){ + pScan = &p->aScan[idx]; + if( pScan->zName ){ + iScan--; + if( iScan<0 ) break; + } + } + } + if( idx>=p->nScan ) return 1; + switch( iScanStatusOp ){ case SQLITE_SCANSTAT_NLOOP: { - *(sqlite3_int64*)pOut = p->anExec[pScan->addrLoop]; + if( pScan->addrLoop>0 ){ + *(sqlite3_int64*)pOut = aOp[pScan->addrLoop].nExec; + }else{ + *(sqlite3_int64*)pOut = -1; + } break; } case SQLITE_SCANSTAT_NVISIT: { - *(sqlite3_int64*)pOut = p->anExec[pScan->addrVisit]; + if( pScan->addrVisit>0 ){ + *(sqlite3_int64*)pOut = aOp[pScan->addrVisit].nExec; + }else{ + *(sqlite3_int64*)pOut = -1; + } break; } case SQLITE_SCANSTAT_EST: { @@ -89474,7 +91478,7 @@ SQLITE_API int sqlite3_stmt_scanstatus( } case SQLITE_SCANSTAT_EXPLAIN: { if( pScan->addrExplain ){ - *(const char**)pOut = p->aOp[ pScan->addrExplain ].p4.z; + *(const char**)pOut = aOp[ pScan->addrExplain ].p4.z; }else{ *(const char**)pOut = 0; } @@ -89482,12 +91486,51 @@ SQLITE_API int sqlite3_stmt_scanstatus( } case SQLITE_SCANSTAT_SELECTID: { if( pScan->addrExplain ){ - *(int*)pOut = p->aOp[ pScan->addrExplain ].p1; + *(int*)pOut = aOp[ pScan->addrExplain ].p1; }else{ *(int*)pOut = -1; } break; } + case SQLITE_SCANSTAT_PARENTID: { + if( pScan->addrExplain ){ + *(int*)pOut = aOp[ pScan->addrExplain ].p2; + }else{ + *(int*)pOut = -1; + } + break; + } + case SQLITE_SCANSTAT_NCYCLE: { + i64 res = 0; + if( pScan->aAddrRange[0]==0 ){ + res = -1; + }else{ + int ii; + for(ii=0; iiaAddrRange); ii+=2){ + int iIns = pScan->aAddrRange[ii]; + int iEnd = pScan->aAddrRange[ii+1]; + if( iIns==0 ) break; + if( iIns>0 ){ + while( iIns<=iEnd ){ + res += aOp[iIns].nCycle; + iIns++; + } + }else{ + int iOp; + for(iOp=0; iOpp1!=iEnd ) continue; + if( (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_NCYCLE)==0 ){ + continue; + } + res += aOp[iOp].nCycle; + } + } + } + } + *(i64*)pOut = res; + break; + } default: { return 1; } @@ -89495,12 +91538,29 @@ SQLITE_API int sqlite3_stmt_scanstatus( return 0; } +/* +** Return status data for a single loop within query pStmt. +*/ +SQLITE_API int sqlite3_stmt_scanstatus( + sqlite3_stmt *pStmt, /* Prepared statement being queried */ + int iScan, /* Index of loop to report on */ + int iScanStatusOp, /* Which metric to return */ + void *pOut /* OUT: Write the answer here */ +){ + return sqlite3_stmt_scanstatus_v2(pStmt, iScan, iScanStatusOp, 0, pOut); +} + /* ** Zero all counters associated with the sqlite3_stmt_scanstatus() data. */ SQLITE_API void sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){ Vdbe *p = (Vdbe*)pStmt; - memset(p->anExec, 0, p->nOp * sizeof(i64)); + int ii; + for(ii=0; iinOp; ii++){ + Op *pOp = &p->aOp[ii]; + pOp->nExec = 0; + pOp->nCycle = 0; + } } #endif /* SQLITE_ENABLE_STMT_SCANSTATUS */ @@ -89836,6 +91896,9 @@ SQLITE_API int sqlite3_found_count = 0; */ static void test_trace_breakpoint(int pc, Op *pOp, Vdbe *v){ static int n = 0; + (void)pc; + (void)pOp; + (void)v; n++; } #endif @@ -90074,6 +92137,10 @@ static void applyNumericAffinity(Mem *pRec, int bTryForInt){ ** always preferred, even if the affinity is REAL, because ** an integer representation is more space efficient on disk. ** +** SQLITE_AFF_FLEXNUM: +** If the value is text, then try to convert it into a number of +** some kind (integer or real) but do not make any other changes. +** ** SQLITE_AFF_TEXT: ** Convert pRec to a text representation. ** @@ -90088,11 +92155,11 @@ static void applyAffinity( ){ if( affinity>=SQLITE_AFF_NUMERIC ){ assert( affinity==SQLITE_AFF_INTEGER || affinity==SQLITE_AFF_REAL - || affinity==SQLITE_AFF_NUMERIC ); + || affinity==SQLITE_AFF_NUMERIC || affinity==SQLITE_AFF_FLEXNUM ); if( (pRec->flags & MEM_Int)==0 ){ /*OPTIMIZATION-IF-FALSE*/ - if( (pRec->flags & MEM_Real)==0 ){ + if( (pRec->flags & (MEM_Real|MEM_IntReal))==0 ){ if( pRec->flags & MEM_Str ) applyNumericAffinity(pRec,1); - }else{ + }else if( affinity<=SQLITE_AFF_REAL ){ sqlite3VdbeIntegerAffinity(pRec); } } @@ -90252,6 +92319,9 @@ SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, StrAccum *pStr){ sqlite3_str_appendchar(pStr, 1, (c>=0x20&&c<=0x7f) ? c : '.'); } sqlite3_str_appendf(pStr, "]%s", encnames[pMem->enc]); + if( f & MEM_Term ){ + sqlite3_str_appendf(pStr, "(0-term)"); + } } } #endif @@ -90320,17 +92390,6 @@ SQLITE_PRIVATE void sqlite3VdbeRegisterDump(Vdbe *v){ # define REGISTER_TRACE(R,M) #endif - -#ifdef VDBE_PROFILE - -/* -** hwtime.h contains inline assembler code for implementing -** high-performance timing routines. -*/ -/* #include "hwtime.h" */ - -#endif - #ifndef NDEBUG /* ** This function is only called from within an assert() expression. It @@ -90390,13 +92449,102 @@ static u64 filterHash(const Mem *aMem, const Op *pOp){ }else if( p->flags & MEM_Real ){ h += sqlite3VdbeIntValue(p); }else if( p->flags & (MEM_Str|MEM_Blob) ){ - h += p->n; - if( p->flags & MEM_Zero ) h += p->u.nZero; + /* All strings have the same hash and all blobs have the same hash, + ** though, at least, those hashes are different from each other and + ** from NULL. */ + h += 4093 + (p->flags & (MEM_Str|MEM_Blob)); } } return h; } + +/* +** For OP_Column, factor out the case where content is loaded from +** overflow pages, so that the code to implement this case is separate +** the common case where all content fits on the page. Factoring out +** the code reduces register pressure and helps the common case +** to run faster. +*/ +static SQLITE_NOINLINE int vdbeColumnFromOverflow( + VdbeCursor *pC, /* The BTree cursor from which we are reading */ + int iCol, /* The column to read */ + int t, /* The serial-type code for the column value */ + i64 iOffset, /* Offset to the start of the content value */ + u32 cacheStatus, /* Current Vdbe.cacheCtr value */ + u32 colCacheCtr, /* Current value of the column cache counter */ + Mem *pDest /* Store the value into this register. */ +){ + int rc; + sqlite3 *db = pDest->db; + int encoding = pDest->enc; + int len = sqlite3VdbeSerialTypeLen(t); + assert( pC->eCurType==CURTYPE_BTREE ); + if( len>db->aLimit[SQLITE_LIMIT_LENGTH] ) return SQLITE_TOOBIG; + if( len > 4000 && pC->pKeyInfo==0 ){ + /* Cache large column values that are on overflow pages using + ** an RCStr (reference counted string) so that if they are reloaded, + ** that do not have to be copied a second time. The overhead of + ** creating and managing the cache is such that this is only + ** profitable for larger TEXT and BLOB values. + ** + ** Only do this on table-btrees so that writes to index-btrees do not + ** need to clear the cache. This buys performance in the common case + ** in exchange for generality. + */ + VdbeTxtBlbCache *pCache; + char *pBuf; + if( pC->colCache==0 ){ + pC->pCache = sqlite3DbMallocZero(db, sizeof(VdbeTxtBlbCache) ); + if( pC->pCache==0 ) return SQLITE_NOMEM; + pC->colCache = 1; + } + pCache = pC->pCache; + if( pCache->pCValue==0 + || pCache->iCol!=iCol + || pCache->cacheStatus!=cacheStatus + || pCache->colCacheCtr!=colCacheCtr + || pCache->iOffset!=sqlite3BtreeOffset(pC->uc.pCursor) + ){ + if( pCache->pCValue ) sqlite3RCStrUnref(pCache->pCValue); + pBuf = pCache->pCValue = sqlite3RCStrNew( len+3 ); + if( pBuf==0 ) return SQLITE_NOMEM; + rc = sqlite3BtreePayload(pC->uc.pCursor, iOffset, len, pBuf); + if( rc ) return rc; + pBuf[len] = 0; + pBuf[len+1] = 0; + pBuf[len+2] = 0; + pCache->iCol = iCol; + pCache->cacheStatus = cacheStatus; + pCache->colCacheCtr = colCacheCtr; + pCache->iOffset = sqlite3BtreeOffset(pC->uc.pCursor); + }else{ + pBuf = pCache->pCValue; + } + assert( t>=12 ); + sqlite3RCStrRef(pBuf); + if( t&1 ){ + rc = sqlite3VdbeMemSetStr(pDest, pBuf, len, encoding, + (void(*)(void*))sqlite3RCStrUnref); + pDest->flags |= MEM_Term; + }else{ + rc = sqlite3VdbeMemSetStr(pDest, pBuf, len, 0, + (void(*)(void*))sqlite3RCStrUnref); + } + }else{ + rc = sqlite3VdbeMemFromBtree(pC->uc.pCursor, iOffset, len, pDest); + if( rc ) return rc; + sqlite3VdbeSerialGet((const u8*)pDest->z, t, pDest); + if( (t&1)!=0 && encoding==SQLITE_UTF8 ){ + pDest->z[len] = 0; + pDest->flags |= MEM_Term; + } + } + pDest->flags &= ~MEM_Ephem; + return rc; +} + + /* ** Return the symbolic name for the data type of a pMem */ @@ -90420,11 +92568,10 @@ SQLITE_PRIVATE int sqlite3VdbeExec( ){ Op *aOp = p->aOp; /* Copy of p->aOp */ Op *pOp = aOp; /* Current operation */ -#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE) - Op *pOrigOp; /* Value of pOp at the top of the loop */ -#endif #ifdef SQLITE_DEBUG + Op *pOrigOp; /* Value of pOp at the top of the loop */ int nExtraDelete = 0; /* Verifies FORDELETE and AUXDELETE flags */ + u8 iCompareIsInit = 0; /* iCompare is initialized */ #endif int rc = SQLITE_OK; /* Value to return */ sqlite3 *db = p->db; /* The database */ @@ -90440,13 +92587,17 @@ SQLITE_PRIVATE int sqlite3VdbeExec( Mem *pIn2 = 0; /* 2nd input operand */ Mem *pIn3 = 0; /* 3rd input operand */ Mem *pOut = 0; /* Output operand */ -#ifdef VDBE_PROFILE - u64 start; /* CPU clock count at start of opcode */ + u32 colCacheCtr = 0; /* Column cache counter */ +#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || defined(VDBE_PROFILE) + u64 *pnCycle = 0; + int bStmtScanStatus = IS_STMT_SCANSTATUS(db)!=0; #endif /*** INSERT STACK UNION HERE ***/ assert( p->eVdbeState==VDBE_RUN_STATE ); /* sqlite3_step() verifies this */ - sqlite3VdbeEnter(p); + if( DbMaskNonZero(p->lockMask) ){ + sqlite3VdbeEnter(p); + } #ifndef SQLITE_OMIT_PROGRESS_CALLBACK if( db->xProgress ){ u32 iPrior = p->aCounter[SQLITE_STMTSTATUS_VM_STEP]; @@ -90467,7 +92618,6 @@ SQLITE_PRIVATE int sqlite3VdbeExec( assert( p->bIsReader || p->readOnly!=0 ); p->iCurrentTime = 0; assert( p->explain==0 ); - p->pResultSet = 0; db->busyHandler.nBusy = 0; if( AtomicLoad(&db->u1.isInterrupted) ) goto abort_due_to_interrupt; sqlite3VdbeIOTraceSql(p); @@ -90504,12 +92654,18 @@ SQLITE_PRIVATE int sqlite3VdbeExec( assert( rc==SQLITE_OK ); assert( pOp>=aOp && pOp<&aOp[p->nOp]); -#ifdef VDBE_PROFILE - start = sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime(); -#endif nVmStep++; -#ifdef SQLITE_ENABLE_STMT_SCANSTATUS - if( p->anExec ) p->anExec[(int)(pOp-aOp)]++; + +#if defined(VDBE_PROFILE) + pOp->nExec++; + pnCycle = &pOp->nCycle; + if( sqlite3NProfileCnt==0 ) *pnCycle -= sqlite3Hwtime(); +#elif defined(SQLITE_ENABLE_STMT_SCANSTATUS) + if( bStmtScanStatus ){ + pOp->nExec++; + pnCycle = &pOp->nCycle; + *pnCycle -= sqlite3Hwtime(); + } #endif /* Only allow tracing if SQLITE_DEBUG is defined. @@ -90571,7 +92727,7 @@ SQLITE_PRIVATE int sqlite3VdbeExec( } } #endif -#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE) +#ifdef SQLITE_DEBUG pOrigOp = pOp; #endif @@ -90627,8 +92783,8 @@ SQLITE_PRIVATE int sqlite3VdbeExec( case OP_Goto: { /* jump */ #ifdef SQLITE_DEBUG - /* In debuggging mode, when the p5 flags is set on an OP_Goto, that - ** means we should really jump back to the preceeding OP_ReleaseReg + /* In debugging mode, when the p5 flags is set on an OP_Goto, that + ** means we should really jump back to the preceding OP_ReleaseReg ** instruction. */ if( pOp->p5 ){ assert( pOp->p2 < (int)(pOp - aOp) ); @@ -90836,7 +92992,7 @@ case OP_HaltIfNull: { /* in3 */ ** P5 is a value between 0 and 4, inclusive, that modifies the P4 string. ** ** 0: (no change) -** 1: NOT NULL contraint failed: P4 +** 1: NOT NULL constraint failed: P4 ** 2: UNIQUE constraint failed: P4 ** 3: CHECK constraint failed: P4 ** 4: FOREIGN KEY constraint failed: P4 @@ -90855,6 +93011,12 @@ case OP_Halt: { #ifdef SQLITE_DEBUG if( pOp->p2==OE_Abort ){ sqlite3VdbeAssertAbortable(p); } #endif + + /* A deliberately coded "OP_Halt SQLITE_INTERNAL * * * *" opcode indicates + ** something is wrong with the code generator. Raise an assertion in order + ** to bring this to the attention of fuzzers and other testing tools. */ + assert( pOp->p1!=SQLITE_INTERNAL ); + if( p->pFrame && pOp->p1==SQLITE_OK ){ /* Halt the sub-program. Return control to the parent frame. */ pFrame = p->pFrame; @@ -91296,10 +93458,10 @@ case OP_ResultRow: { assert( pOp->p1+pOp->p2<=(p->nMem+1 - p->nCursor)+1 ); p->cacheCtr = (p->cacheCtr + 2)|1; - p->pResultSet = &aMem[pOp->p1]; + p->pResultRow = &aMem[pOp->p1]; #ifdef SQLITE_DEBUG { - Mem *pMem = p->pResultSet; + Mem *pMem = p->pResultRow; int i; for(i=0; ip2; i++){ assert( memIsValid(&pMem[i]) ); @@ -91829,7 +93991,6 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */ flags1 = pIn1->flags; flags3 = pIn3->flags; if( (flags1 & flags3 & MEM_Int)!=0 ){ - assert( (pOp->p5 & SQLITE_AFF_MASK)!=SQLITE_AFF_TEXT || CORRUPT_DB ); /* Common case of comparison of two integers */ if( pIn3->u.i > pIn1->u.i ){ if( sqlite3aGTb[pOp->opcode] ){ @@ -91837,18 +93998,21 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */ goto jump_to_p2; } iCompare = +1; + VVA_ONLY( iCompareIsInit = 1; ) }else if( pIn3->u.i < pIn1->u.i ){ if( sqlite3aLTb[pOp->opcode] ){ VdbeBranchTaken(1, (pOp->p5 & SQLITE_NULLEQ)?2:3); goto jump_to_p2; } iCompare = -1; + VVA_ONLY( iCompareIsInit = 1; ) }else{ if( sqlite3aEQb[pOp->opcode] ){ VdbeBranchTaken(1, (pOp->p5 & SQLITE_NULLEQ)?2:3); goto jump_to_p2; } iCompare = 0; + VVA_ONLY( iCompareIsInit = 1; ) } VdbeBranchTaken(0, (pOp->p5 & SQLITE_NULLEQ)?2:3); break; @@ -91880,6 +94044,7 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */ goto jump_to_p2; } iCompare = 1; /* Operands are not equal */ + VVA_ONLY( iCompareIsInit = 1; ) break; } }else{ @@ -91890,14 +94055,14 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */ if( (flags1 | flags3)&MEM_Str ){ if( (flags1 & (MEM_Int|MEM_IntReal|MEM_Real|MEM_Str))==MEM_Str ){ applyNumericAffinity(pIn1,0); - testcase( flags3==pIn3->flags ); + assert( flags3==pIn3->flags || CORRUPT_DB ); flags3 = pIn3->flags; } if( (flags3 & (MEM_Int|MEM_IntReal|MEM_Real|MEM_Str))==MEM_Str ){ applyNumericAffinity(pIn3,0); } } - }else if( affinity==SQLITE_AFF_TEXT ){ + }else if( affinity==SQLITE_AFF_TEXT && ((flags1 | flags3) & MEM_Str)!=0 ){ if( (flags1 & MEM_Str)==0 && (flags1&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){ testcase( pIn1->flags & MEM_Int ); testcase( pIn1->flags & MEM_Real ); @@ -91905,7 +94070,7 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */ sqlite3VdbeMemStringify(pIn1, encoding, 1); testcase( (flags1&MEM_Dyn) != (pIn1->flags&MEM_Dyn) ); flags1 = (pIn1->flags & ~MEM_TypeMask) | (flags1 & MEM_TypeMask); - if( pIn1==pIn3 ) flags3 = flags1 | MEM_Str; + if( NEVER(pIn1==pIn3) ) flags3 = flags1 | MEM_Str; } if( (flags3 & MEM_Str)==0 && (flags3&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){ testcase( pIn3->flags & MEM_Int ); @@ -91936,6 +94101,7 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */ res2 = sqlite3aGTb[pOp->opcode]; } iCompare = res; + VVA_ONLY( iCompareIsInit = 1; ) /* Undo any changes made by applyAffinity() to the input registers. */ assert( (pIn3->flags & MEM_Dyn) == (flags3 & MEM_Dyn) ); @@ -91957,10 +94123,10 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */ ** opcodes are allowed to occur between this instruction and the previous ** OP_Lt or OP_Gt. ** -** If result of an OP_Eq comparison on the same two operands as the -** prior OP_Lt or OP_Gt would have been true, then jump to P2. -** If the result of an OP_Eq comparison on the two previous -** operands would have been false or NULL, then fall through. +** If the result of an OP_Eq comparison on the same two operands as +** the prior OP_Lt or OP_Gt would have been true, then jump to P2. If +** the result of an OP_Eq comparison on the two previous operands +** would have been false or NULL, then fall through. */ case OP_ElseEq: { /* same as TK_ESCAPE, jump */ @@ -91974,6 +94140,7 @@ case OP_ElseEq: { /* same as TK_ESCAPE, jump */ break; } #endif /* SQLITE_DEBUG */ + assert( iCompareIsInit ); VdbeBranchTaken(iCompare==0, 2); if( iCompare==0 ) goto jump_to_p2; break; @@ -92068,6 +94235,7 @@ case OP_Compare: { pColl = pKeyInfo->aColl[i]; bRev = (pKeyInfo->aSortFlags[i] & KEYINFO_ORDER_DESC); iCompare = sqlite3MemCompare(&aMem[p1+idx], &aMem[p2+idx], pColl); + VVA_ONLY( iCompareIsInit = 1; ) if( iCompare ){ if( (pKeyInfo->aSortFlags[i] & KEYINFO_ORDER_BIGNULL) && ((aMem[p1+idx].flags & MEM_Null) || (aMem[p2+idx].flags & MEM_Null)) @@ -92085,13 +94253,14 @@ case OP_Compare: { /* Opcode: Jump P1 P2 P3 * * ** ** Jump to the instruction at address P1, P2, or P3 depending on whether -** in the most recent OP_Compare instruction the P1 vector was less than +** in the most recent OP_Compare instruction the P1 vector was less than, ** equal to, or greater than the P2 vector, respectively. ** ** This opcode must immediately follow an OP_Compare opcode. */ case OP_Jump: { /* jump */ assert( pOp>aOp && pOp[-1].opcode==OP_Compare ); + assert( iCompareIsInit ); if( iCompare<0 ){ VdbeBranchTaken(0,4); pOp = &aOp[pOp->p1 - 1]; }else if( iCompare==0 ){ @@ -92311,6 +94480,12 @@ case OP_IsNull: { /* same as TK_ISNULL, jump, in1 */ ** (0x01) bit. SQLITE_FLOAT is the 0x02 bit. SQLITE_TEXT is 0x04. ** SQLITE_BLOB is 0x08. SQLITE_NULL is 0x10. ** +** WARNING: This opcode does not reliably distinguish between NULL and REAL +** when P1>=0. If the database contains a NaN value, this opcode will think +** that the datatype is REAL when it should be NULL. When P1<0 and the value +** is already stored in register P3, then this opcode does reliably +** distinguish between NULL and REAL. The problem only arises then P1>=0. +** ** Take the jump to address P2 if and only if the datatype of the ** value determined by P1 and P3 corresponds to one of the bits in the ** P5 bitmask. @@ -92381,7 +94556,7 @@ case OP_IsType: { /* jump */ /* Opcode: ZeroOrNull P1 P2 P3 * * ** Synopsis: r[P2] = 0 OR NULL ** -** If all both registers P1 and P3 are NOT NULL, then store a zero in +** If both registers P1 and P3 are NOT NULL, then store a zero in ** register P2. If either registers P1 or P3 are NULL then put ** a NULL in register P2. */ @@ -92424,7 +94599,7 @@ case OP_IfNullRow: { /* jump */ VdbeCursor *pC; assert( pOp->p1>=0 && pOp->p1nCursor ); pC = p->apCsr[pOp->p1]; - if( ALWAYS(pC) && pC->nullRow ){ + if( pC && pC->nullRow ){ sqlite3VdbeMemSetNull(aMem + pOp->p3); goto jump_to_p2; } @@ -92491,7 +94666,7 @@ case OP_Offset: { /* out3 */ ** typeof() function or the IS NULL or IS NOT NULL operators or the ** equivalent. In this case, all content loading can be omitted. */ -case OP_Column: { +case OP_Column: { /* ncycle */ u32 p2; /* column number to retrieve */ VdbeCursor *pC; /* The VDBE cursor */ BtCursor *pCrsr; /* The B-Tree cursor corresponding to pC */ @@ -92735,11 +94910,16 @@ case OP_Column: { pDest->flags = aFlag[t&1]; } }else{ + u8 p5; pDest->enc = encoding; + assert( pDest->db==db ); /* This branch happens only when content is on overflow pages */ - if( ((pOp->p5 & (OPFLAG_LENGTHARG|OPFLAG_TYPEOFARG))!=0 - && ((t>=12 && (t&1)==0) || (pOp->p5 & OPFLAG_TYPEOFARG)!=0)) - || (len = sqlite3VdbeSerialTypeLen(t))==0 + if( ((p5 = (pOp->p5 & OPFLAG_BYTELENARG))!=0 + && (p5==OPFLAG_TYPEOFARG + || (t>=12 && ((t&1)==0 || p5==OPFLAG_BYTELENARG)) + ) + ) + || sqlite3VdbeSerialTypeLen(t)==0 ){ /* Content is irrelevant for ** 1. the typeof() function, @@ -92756,11 +94936,13 @@ case OP_Column: { */ sqlite3VdbeSerialGet((u8*)sqlite3CtypeMap, t, pDest); }else{ - if( len>db->aLimit[SQLITE_LIMIT_LENGTH] ) goto too_big; - rc = sqlite3VdbeMemFromBtree(pC->uc.pCursor, aOffset[p2], len, pDest); - if( rc!=SQLITE_OK ) goto abort_due_to_error; - sqlite3VdbeSerialGet((const u8*)pDest->z, t, pDest); - pDest->flags &= ~MEM_Ephem; + rc = vdbeColumnFromOverflow(pC, p2, t, aOffset[p2], + p->cacheCtr, colCacheCtr, pDest); + if( rc ){ + if( rc==SQLITE_NOMEM ) goto no_mem; + if( rc==SQLITE_TOOBIG ) goto too_big; + goto abort_due_to_error; + } } } @@ -92840,7 +95022,7 @@ case OP_TypeCheck: { } case COLTYPE_REAL: { testcase( (pIn1->flags & (MEM_Real|MEM_IntReal))==MEM_Real ); - testcase( (pIn1->flags & (MEM_Real|MEM_IntReal))==MEM_IntReal ); + assert( (pIn1->flags & MEM_IntReal)==0 ); if( pIn1->flags & MEM_Int ){ /* When applying REAL affinity, if the result is still an MEM_Int ** that will fit in 6 bytes, then change the type to MEM_IntReal @@ -92919,7 +95101,7 @@ case OP_Affinity: { }else{ pIn1->u.r = (double)pIn1->u.i; pIn1->flags |= MEM_Real; - pIn1->flags &= ~MEM_Int; + pIn1->flags &= ~(MEM_Int|MEM_Str); } } REGISTER_TRACE((int)(pIn1-aMem), pIn1); @@ -93843,7 +96025,7 @@ case OP_SetCookie: { ** ** See also: OP_OpenRead, OP_ReopenIdx */ -case OP_ReopenIdx: { +case OP_ReopenIdx: { /* ncycle */ int nField; KeyInfo *pKeyInfo; u32 p2; @@ -93864,7 +96046,7 @@ case OP_ReopenIdx: { } /* If the cursor is not currently open or is open on a different ** index, then fall through into OP_OpenRead to force a reopen */ -case OP_OpenRead: +case OP_OpenRead: /* ncycle */ case OP_OpenWrite: assert( pOp->opcode==OP_OpenWrite || pOp->p5==0 || pOp->p5==OPFLAG_SEEKEQ ); @@ -93958,7 +96140,7 @@ case OP_OpenWrite: ** ** Duplicate ephemeral cursors are used for self-joins of materialized views. */ -case OP_OpenDup: { +case OP_OpenDup: { /* ncycle */ VdbeCursor *pOrig; /* The original cursor to be duplicated */ VdbeCursor *pCx; /* The new cursor */ @@ -94020,8 +96202,8 @@ case OP_OpenDup: { ** by this opcode will be used for automatically created transient ** indices in joins. */ -case OP_OpenAutoindex: -case OP_OpenEphemeral: { +case OP_OpenAutoindex: /* ncycle */ +case OP_OpenEphemeral: { /* ncycle */ VdbeCursor *pCx; KeyInfo *pKeyInfo; @@ -94044,7 +96226,7 @@ case OP_OpenEphemeral: { } pCx = p->apCsr[pOp->p1]; if( pCx && !pCx->noReuse && ALWAYS(pOp->p2<=pCx->nField) ){ - /* If the ephermeral table is already open and has no duplicates from + /* If the ephemeral table is already open and has no duplicates from ** OP_OpenDup, then erase all existing content so that the table is ** empty again, rather than creating a new table. */ assert( pCx->isEphemeral ); @@ -94179,7 +96361,7 @@ case OP_OpenPseudo: { ** Close a cursor previously opened as P1. If P1 is not ** currently open, this instruction is a no-op. */ -case OP_Close: { +case OP_Close: { /* ncycle */ assert( pOp->p1>=0 && pOp->p1nCursor ); sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]); p->apCsr[pOp->p1] = 0; @@ -94296,10 +96478,10 @@ case OP_ColumnsUsed: { ** ** See also: Found, NotFound, SeekGt, SeekGe, SeekLt */ -case OP_SeekLT: /* jump, in3, group */ -case OP_SeekLE: /* jump, in3, group */ -case OP_SeekGE: /* jump, in3, group */ -case OP_SeekGT: { /* jump, in3, group */ +case OP_SeekLT: /* jump, in3, group, ncycle */ +case OP_SeekLE: /* jump, in3, group, ncycle */ +case OP_SeekGE: /* jump, in3, group, ncycle */ +case OP_SeekGT: { /* jump, in3, group, ncycle */ int res; /* Comparison result */ int oc; /* Opcode */ VdbeCursor *pC; /* The cursor to seek */ @@ -94535,7 +96717,7 @@ case OP_SeekGT: { /* jump, in3, group */ ** row. If This.P5 is false (0) then a jump is made to SeekGE.P2. If ** This.P5 is true (non-zero) then a jump is made to This.P2. The P5==0 ** case occurs when there are no inequality constraints to the right of -** the IN constraing. The jump to SeekGE.P2 ends the loop. The P5!=0 case +** the IN constraint. The jump to SeekGE.P2 ends the loop. The P5!=0 case ** occurs when there are inequality constraints to the right of the IN ** operator. In that case, the This.P2 will point either directly to or ** to setup code prior to the OP_IdxGT or OP_IdxGE opcode that checks for @@ -94543,7 +96725,7 @@ case OP_SeekGT: { /* jump, in3, group */ ** ** Possible outcomes from this opcode:
      ** -**
    1. If the cursor is initally not pointed to any valid row, then +**
    2. If the cursor is initially not pointed to any valid row, then ** fall through into the subsequent OP_SeekGE opcode. ** **
    3. If the cursor is left pointing to a row that is before the target @@ -94565,7 +96747,7 @@ case OP_SeekGT: { /* jump, in3, group */ ** jump to SeekOP.P2 if This.P5==0 or to This.P2 if This.P5>0. **
    */ -case OP_SeekScan: { +case OP_SeekScan: { /* ncycle */ VdbeCursor *pC; int res; int nStep; @@ -94658,6 +96840,7 @@ case OP_SeekScan: { break; } nStep--; + pC->cacheStatus = CACHE_STALE; rc = sqlite3BtreeNext(pC->uc.pCursor, 0); if( rc ){ if( rc==SQLITE_DONE ){ @@ -94687,7 +96870,7 @@ case OP_SeekScan: { ** ** P1 must be a valid b-tree cursor. */ -case OP_SeekHit: { +case OP_SeekHit: { /* ncycle */ VdbeCursor *pC; assert( pOp->p1>=0 && pOp->p1nCursor ); pC = p->apCsr[pOp->p1]; @@ -94774,13 +96957,13 @@ case OP_IfNotOpen: { /* jump */ ** operands to OP_NotFound and OP_IdxGT. ** ** This opcode is an optimization attempt only. If this opcode always -** falls through, the correct answer is still obtained, but extra works +** falls through, the correct answer is still obtained, but extra work ** is performed. ** ** A value of N in the seekHit flag of cursor P1 means that there exists ** a key P3:N that will match some record in the index. We want to know ** if it is possible for a record P3:P4 to match some record in the -** index. If it is not possible, we can skips some work. So if seekHit +** index. If it is not possible, we can skip some work. So if seekHit ** is less than P4, attempt to find out if a match is possible by running ** OP_NotFound. ** @@ -94819,7 +97002,7 @@ case OP_IfNotOpen: { /* jump */ ** ** See also: NotFound, Found, NotExists */ -case OP_IfNoHope: { /* jump, in3 */ +case OP_IfNoHope: { /* jump, in3, ncycle */ VdbeCursor *pC; assert( pOp->p1>=0 && pOp->p1nCursor ); pC = p->apCsr[pOp->p1]; @@ -94833,9 +97016,9 @@ case OP_IfNoHope: { /* jump, in3 */ /* Fall through into OP_NotFound */ /* no break */ deliberate_fall_through } -case OP_NoConflict: /* jump, in3 */ -case OP_NotFound: /* jump, in3 */ -case OP_Found: { /* jump, in3 */ +case OP_NoConflict: /* jump, in3, ncycle */ +case OP_NotFound: /* jump, in3, ncycle */ +case OP_Found: { /* jump, in3, ncycle */ int alreadyExists; int ii; VdbeCursor *pC; @@ -94965,7 +97148,7 @@ case OP_Found: { /* jump, in3 */ ** ** See also: Found, NotFound, NoConflict, SeekRowid */ -case OP_SeekRowid: { /* jump, in3 */ +case OP_SeekRowid: { /* jump, in3, ncycle */ VdbeCursor *pC; BtCursor *pCrsr; int res; @@ -94990,7 +97173,7 @@ case OP_SeekRowid: { /* jump, in3 */ } /* Fall through into OP_NotExists */ /* no break */ deliberate_fall_through -case OP_NotExists: /* jump, in3 */ +case OP_NotExists: /* jump, in3, ncycle */ pIn3 = &aMem[pOp->p3]; assert( (pIn3->flags & MEM_Int)!=0 || pOp->opcode==OP_SeekRowid ); assert( pOp->p1>=0 && pOp->p1nCursor ); @@ -95270,8 +97453,11 @@ case OP_Insert: { if( pOp->p5 & OPFLAG_ISNOOP ) break; #endif - if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++; - if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = x.nKey; + assert( (pOp->p5 & OPFLAG_LASTROWID)==0 || (pOp->p5 & OPFLAG_NCHANGE)!=0 ); + if( pOp->p5 & OPFLAG_NCHANGE ){ + p->nChange++; + if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = x.nKey; + } assert( (pData->flags & (MEM_Blob|MEM_Str))!=0 || pData->n==0 ); x.pData = pData->z; x.nData = pData->n; @@ -95282,12 +97468,14 @@ case OP_Insert: { x.nZero = 0; } x.pKey = 0; + assert( BTREE_PREFORMAT==OPFLAG_PREFORMAT ); rc = sqlite3BtreeInsert(pC->uc.pCursor, &x, (pOp->p5 & (OPFLAG_APPEND|OPFLAG_SAVEPOSITION|OPFLAG_PREFORMAT)), seekResult ); pC->deferredMoveto = 0; pC->cacheStatus = CACHE_STALE; + colCacheCtr++; /* Invoke the update-hook if required. */ if( rc ) goto abort_due_to_error; @@ -95341,10 +97529,10 @@ case OP_RowCell: { ** left in an undefined state. ** ** If the OPFLAG_AUXDELETE bit is set on P5, that indicates that this -** delete one of several associated with deleting a table row and all its -** associated index entries. Exactly one of those deletes is the "primary" -** delete. The others are all on OPFLAG_FORDELETE cursors or else are -** marked with the AUXDELETE flag. +** delete is one of several associated with deleting a table row and +** all its associated index entries. Exactly one of those deletes is +** the "primary" delete. The others are all on OPFLAG_FORDELETE +** cursors or else are marked with the AUXDELETE flag. ** ** If the OPFLAG_NCHANGE flag of P2 (NB: P2 not P5) is set, then the row ** change count is incremented (otherwise not). @@ -95448,6 +97636,7 @@ case OP_Delete: { rc = sqlite3BtreeDelete(pC->uc.pCursor, pOp->p5); pC->cacheStatus = CACHE_STALE; + colCacheCtr++; pC->seekResult = 0; if( rc ) goto abort_due_to_error; @@ -95515,13 +97704,13 @@ case OP_SorterCompare: { ** Write into register P2 the current sorter data for sorter cursor P1. ** Then clear the column header cache on cursor P3. ** -** This opcode is normally use to move a record out of the sorter and into +** This opcode is normally used to move a record out of the sorter and into ** a register that is the source for a pseudo-table cursor created using ** OpenPseudo. That pseudo-table cursor is the one that is identified by ** parameter P3. Clearing the P3 column cache as part of this opcode saves ** us from having to issue a separate NullRow instruction to clear that cache. */ -case OP_SorterData: { +case OP_SorterData: { /* ncycle */ VdbeCursor *pC; pOut = &aMem[pOp->p2]; @@ -95613,7 +97802,7 @@ case OP_RowData: { ** be a separate OP_VRowid opcode for use with virtual tables, but this ** one opcode now works for both table types. */ -case OP_Rowid: { /* out2 */ +case OP_Rowid: { /* out2, ncycle */ VdbeCursor *pC; i64 v; sqlite3_vtab *pVtab; @@ -95712,8 +97901,8 @@ case OP_NullRow: { ** from the end toward the beginning. In other words, the cursor is ** configured to use Prev, not Next. */ -case OP_SeekEnd: -case OP_Last: { /* jump */ +case OP_SeekEnd: /* ncycle */ +case OP_Last: { /* jump, ncycle */ VdbeCursor *pC; BtCursor *pCrsr; int res; @@ -95796,8 +97985,8 @@ case OP_IfSmaller: { /* jump */ ** regression tests can determine whether or not the optimizer is ** correctly optimizing out sorts. */ -case OP_SorterSort: /* jump */ -case OP_Sort: { /* jump */ +case OP_SorterSort: /* jump ncycle */ +case OP_Sort: { /* jump ncycle */ #ifdef SQLITE_TEST sqlite3_sort_count++; sqlite3_search_count--; @@ -95814,17 +98003,22 @@ case OP_Sort: { /* jump */ ** If the table or index is not empty, fall through to the following ** instruction. ** +** If P2 is zero, that is an assertion that the P1 table is never +** empty and hence the jump will never be taken. +** ** This opcode leaves the cursor configured to move in forward order, ** from the beginning toward the end. In other words, the cursor is ** configured to use Next, not Prev. */ -case OP_Rewind: { /* jump */ +case OP_Rewind: { /* jump, ncycle */ VdbeCursor *pC; BtCursor *pCrsr; int res; assert( pOp->p1>=0 && pOp->p1nCursor ); assert( pOp->p5==0 ); + assert( pOp->p2>=0 && pOp->p2nOp ); + pC = p->apCsr[pOp->p1]; assert( pC!=0 ); assert( isSorter(pC)==(pOp->opcode==OP_SorterSort) ); @@ -95844,9 +98038,10 @@ case OP_Rewind: { /* jump */ } if( rc ) goto abort_due_to_error; pC->nullRow = (u8)res; - assert( pOp->p2>0 && pOp->p2nOp ); - VdbeBranchTaken(res!=0,2); - if( res ) goto jump_to_p2; + if( pOp->p2>0 ){ + VdbeBranchTaken(res!=0,2); + if( res ) goto jump_to_p2; + } break; } @@ -95912,7 +98107,7 @@ case OP_SorterNext: { /* jump */ rc = sqlite3VdbeSorterNext(db, pC); goto next_tail; -case OP_Prev: /* jump */ +case OP_Prev: /* jump, ncycle */ assert( pOp->p1>=0 && pOp->p1nCursor ); assert( pOp->p5==0 || pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP @@ -95927,7 +98122,7 @@ case OP_Prev: /* jump */ rc = sqlite3BtreePrevious(pC->uc.pCursor, pOp->p3); goto next_tail; -case OP_Next: /* jump */ +case OP_Next: /* jump, ncycle */ assert( pOp->p1>=0 && pOp->p1nCursor ); assert( pOp->p5==0 || pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP @@ -96119,8 +98314,8 @@ case OP_IdxDelete: { ** ** See also: Rowid, MakeRecord. */ -case OP_DeferredSeek: -case OP_IdxRowid: { /* out2 */ +case OP_DeferredSeek: /* ncycle */ +case OP_IdxRowid: { /* out2, ncycle */ VdbeCursor *pC; /* The P1 index cursor */ VdbeCursor *pTabCur; /* The P2 table cursor (OP_DeferredSeek only) */ i64 rowid; /* Rowid that P1 current points to */ @@ -96182,8 +98377,8 @@ case OP_IdxRowid: { /* out2 */ ** seek operation now, without further delay. If the cursor seek has ** already occurred, this instruction is a no-op. */ -case OP_FinishSeek: { - VdbeCursor *pC; /* The P1 index cursor */ +case OP_FinishSeek: { /* ncycle */ + VdbeCursor *pC; /* The P1 index cursor */ assert( pOp->p1>=0 && pOp->p1nCursor ); pC = p->apCsr[pOp->p1]; @@ -96238,10 +98433,10 @@ case OP_FinishSeek: { ** If the P1 index entry is less than or equal to the key value then jump ** to P2. Otherwise fall through to the next instruction. */ -case OP_IdxLE: /* jump */ -case OP_IdxGT: /* jump */ -case OP_IdxLT: /* jump */ -case OP_IdxGE: { /* jump */ +case OP_IdxLE: /* jump, ncycle */ +case OP_IdxGT: /* jump, ncycle */ +case OP_IdxLT: /* jump, ncycle */ +case OP_IdxGE: { /* jump, ncycle */ VdbeCursor *pC; int res; UnpackedRecord r; @@ -96318,7 +98513,7 @@ case OP_IdxGE: { /* jump */ ** file is given by P1. ** ** The table being destroyed is in the main database file if P3==0. If -** P3==1 then the table to be clear is in the auxiliary database file +** P3==1 then the table to be destroyed is in the auxiliary database file ** that is used to store tables create using CREATE TEMPORARY TABLE. ** ** If AUTOVACUUM is enabled then it is possible that another root page @@ -96378,8 +98573,8 @@ case OP_Destroy: { /* out2 */ ** in the database file is given by P1. But, unlike Destroy, do not ** remove the table or index from the database file. ** -** The table being clear is in the main database file if P2==0. If -** P2==1 then the table to be clear is in the auxiliary database file +** The table being cleared is in the main database file if P2==0. If +** P2==1 then the table to be cleared is in the auxiliary database file ** that is used to store tables create using CREATE TEMPORARY TABLE. ** ** If the P3 value is non-zero, then the row change count is incremented @@ -96652,13 +98847,14 @@ case OP_IntegrityCk: { pIn1 = &aMem[pOp->p1]; assert( pOp->p5nDb ); assert( DbMaskTest(p->btreeMask, pOp->p5) ); - z = sqlite3BtreeIntegrityCheck(db, db->aDb[pOp->p5].pBt, &aRoot[1], nRoot, - (int)pnErr->u.i+1, &nErr); + rc = sqlite3BtreeIntegrityCheck(db, db->aDb[pOp->p5].pBt, &aRoot[1], nRoot, + (int)pnErr->u.i+1, &nErr, &z); sqlite3VdbeMemSetNull(pIn1); if( nErr==0 ){ assert( z==0 ); - }else if( z==0 ){ - goto no_mem; + }else if( rc ){ + sqlite3_free(z); + goto abort_due_to_error; }else{ pnErr->u.i -= nErr-1; sqlite3VdbeMemSetStr(pIn1, z, -1, SQLITE_UTF8, sqlite3_free); @@ -96862,9 +99058,6 @@ case OP_Program: { /* jump */ pFrame->aOp = p->aOp; pFrame->nOp = p->nOp; pFrame->token = pProgram->token; -#ifdef SQLITE_ENABLE_STMT_SCANSTATUS - pFrame->anExec = p->anExec; -#endif #ifdef SQLITE_DEBUG pFrame->iFrameMagic = SQLITE_FRAME_MAGIC; #endif @@ -96901,9 +99094,6 @@ case OP_Program: { /* jump */ memset(pFrame->aOnce, 0, (pProgram->nOp + 7)/8); p->aOp = aOp = pProgram->aOp; p->nOp = pProgram->nOp; -#ifdef SQLITE_ENABLE_STMT_SCANSTATUS - p->anExec = 0; -#endif #ifdef SQLITE_DEBUG /* Verify that second and subsequent executions of the same trigger do not ** try to reuse register values from the first use. */ @@ -97210,7 +99400,7 @@ case OP_AggStep1: { /* If this function is inside of a trigger, the register array in aMem[] ** might change from one evaluation to the next. The next block of code ** checks to see if the register array has changed, and if so it - ** reinitializes the relavant parts of the sqlite3_context object */ + ** reinitializes the relevant parts of the sqlite3_context object */ if( pCtx->pMem != pMem ){ pCtx->pMem = pMem; for(i=pCtx->argc-1; i>=0; i--) pCtx->argv[i] = &aMem[pOp->p2+i]; @@ -97305,6 +99495,7 @@ case OP_AggFinal: { } sqlite3VdbeChangeEncoding(pMem, encoding); UPDATE_MAX_BLOBSIZE(pMem); + REGISTER_TRACE((int)(pMem-aMem), pMem); break; } @@ -97660,7 +99851,7 @@ case OP_VDestroy: { ** P1 is a cursor number. This opcode opens a cursor to the virtual ** table and stores that cursor in P1. */ -case OP_VOpen: { +case OP_VOpen: { /* ncycle */ VdbeCursor *pCur; sqlite3_vtab_cursor *pVCur; sqlite3_vtab *pVtab; @@ -97707,7 +99898,7 @@ case OP_VOpen: { ** cursor. Register P3 is used to hold the values returned by ** sqlite3_vtab_in_first() and sqlite3_vtab_in_next(). */ -case OP_VInitIn: { /* out2 */ +case OP_VInitIn: { /* out2, ncycle */ VdbeCursor *pC; /* The cursor containing the RHS values */ ValueList *pRhs; /* New ValueList object to put in reg[P2] */ @@ -97718,7 +99909,7 @@ case OP_VInitIn: { /* out2 */ pRhs->pOut = &aMem[pOp->p3]; pOut = out2Prerelease(p, pOp); pOut->flags = MEM_Null; - sqlite3VdbeMemSetPointer(pOut, pRhs, "ValueList", sqlite3_free); + sqlite3VdbeMemSetPointer(pOut, pRhs, "ValueList", sqlite3VdbeValueListFree); break; } #endif /* SQLITE_OMIT_VIRTUALTABLE */ @@ -97744,7 +99935,7 @@ case OP_VInitIn: { /* out2 */ ** ** A jump is made to P2 if the result set after filtering would be empty. */ -case OP_VFilter: { /* jump */ +case OP_VFilter: { /* jump, ncycle */ int nArg; int iQuery; const sqlite3_module *pModule; @@ -97804,7 +99995,7 @@ case OP_VFilter: { /* jump */ ** bits (OPFLAG_LENGTHARG or OPFLAG_TYPEOFARG) but those bits are ** unused by OP_VColumn. */ -case OP_VColumn: { +case OP_VColumn: { /* ncycle */ sqlite3_vtab *pVtab; const sqlite3_module *pModule; Mem *pDest; @@ -97856,7 +100047,7 @@ case OP_VColumn: { ** jump to instruction P2. Or, if the virtual table has reached ** the end of its result set, then fall through to the next instruction. */ -case OP_VNext: { /* jump */ +case OP_VNext: { /* jump, ncycle */ sqlite3_vtab *pVtab; const sqlite3_module *pModule; int res; @@ -98087,7 +100278,7 @@ case OP_MaxPgcnt: { /* out2 */ ** This opcode works exactly like OP_Function. The only difference is in ** its name. This opcode is used in places where the function must be ** purely non-deterministic. Some built-in date/time functions can be -** either determinitic of non-deterministic, depending on their arguments. +** either deterministic of non-deterministic, depending on their arguments. ** When those function are used in a non-deterministic way, they will check ** to see if they were called using OP_PureFunc instead of OP_Function, and ** if they were, they throw an error. @@ -98105,7 +100296,7 @@ case OP_Function: { /* group */ /* If this function is inside of a trigger, the register array in aMem[] ** might change from one evaluation to the next. The next block of code ** checks to see if the register array has changed, and if so it - ** reinitializes the relavant parts of the sqlite3_context object */ + ** reinitializes the relevant parts of the sqlite3_context object */ pOut = &aMem[pOp->p3]; if( pCtx->pOut != pOut ){ pCtx->pVdbe = p; @@ -98181,7 +100372,7 @@ case OP_FilterAdd: { printf("hash: %llu modulo %d -> %u\n", h, pIn1->n, (int)(h%pIn1->n)); } #endif - h %= pIn1->n; + h %= (pIn1->n*8); pIn1->z[h/8] |= 1<<(h&7); break; } @@ -98217,7 +100408,7 @@ case OP_Filter: { /* jump */ printf("hash: %llu modulo %d -> %u\n", h, pIn1->n, (int)(h%pIn1->n)); } #endif - h %= pIn1->n; + h %= (pIn1->n*8); if( (pIn1->z[h/8] & (1<<(h&7)))==0 ){ VdbeBranchTaken(1, 2); p->aCounter[SQLITE_STMTSTATUS_FILTER_HIT]++; @@ -98439,11 +100630,13 @@ default: { /* This is really OP_Noop, OP_Explain */ *****************************************************************************/ } -#ifdef VDBE_PROFILE - { - u64 endTime = sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime(); - if( endTime>start ) pOrigOp->cycles += endTime - start; - pOrigOp->cnt++; +#if defined(VDBE_PROFILE) + *pnCycle += sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime(); + pnCycle = 0; +#elif defined(SQLITE_ENABLE_STMT_SCANSTATUS) + if( pnCycle ){ + *pnCycle += sqlite3Hwtime(); + pnCycle = 0; } #endif @@ -98467,7 +100660,7 @@ default: { /* This is really OP_Noop, OP_Explain */ } if( opProperty==0xff ){ /* Never happens. This code exists to avoid a harmless linkage - ** warning aboud sqlite3VdbeRegisterDump() being defined but not + ** warning about sqlite3VdbeRegisterDump() being defined but not ** used. */ sqlite3VdbeRegisterDump(p); } @@ -98520,6 +100713,18 @@ default: { /* This is really OP_Noop, OP_Explain */ ** release the mutexes on btrees that were acquired at the ** top. */ vdbe_return: +#if defined(VDBE_PROFILE) + if( pnCycle ){ + *pnCycle += sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime(); + pnCycle = 0; + } +#elif defined(SQLITE_ENABLE_STMT_SCANSTATUS) + if( pnCycle ){ + *pnCycle += sqlite3Hwtime(); + pnCycle = 0; + } +#endif + #ifndef SQLITE_OMIT_PROGRESS_CALLBACK while( nVmStep>=nProgressLimit && db->xProgress!=0 ){ nProgressLimit += db->nProgressOps; @@ -98531,7 +100736,9 @@ default: { /* This is really OP_Noop, OP_Explain */ } #endif p->aCounter[SQLITE_STMTSTATUS_VM_STEP] += (int)nVmStep; - sqlite3VdbeLeave(p); + if( DbMaskNonZero(p->lockMask) ){ + sqlite3VdbeLeave(p); + } assert( rc!=SQLITE_OK || nExtraDelete==0 || sqlite3_strlike("DELETE%",p->zSql,0)!=0 ); @@ -98909,7 +101116,7 @@ SQLITE_API int sqlite3_blob_open( if( pBlob && pBlob->pStmt ) sqlite3VdbeFinalize((Vdbe *)pBlob->pStmt); sqlite3DbFree(db, pBlob); } - sqlite3ErrorWithMsg(db, rc, (zErr ? "%s" : 0), zErr); + sqlite3ErrorWithMsg(db, rc, (zErr ? "%s" : (char*)0), zErr); sqlite3DbFree(db, zErr); sqlite3ParseObjectReset(&sParse); rc = sqlite3ApiExit(db, rc); @@ -99068,7 +101275,7 @@ SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){ ((Vdbe*)p->pStmt)->rc = SQLITE_OK; rc = blobSeekToRow(p, iRow, &zErr); if( rc!=SQLITE_OK ){ - sqlite3ErrorWithMsg(db, rc, (zErr ? "%s" : 0), zErr); + sqlite3ErrorWithMsg(db, rc, (zErr ? "%s" : (char*)0), zErr); sqlite3DbFree(db, zErr); } assert( rc!=SQLITE_SCHEMA ); @@ -99171,7 +101378,7 @@ SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){ ** The threshold for the amount of main memory to use before flushing ** records to a PMA is roughly the same as the limit configured for the ** page-cache of the main database. Specifically, the threshold is set to -** the value returned by "PRAGMA main.page_size" multipled by +** the value returned by "PRAGMA main.page_size" multiplied by ** that returned by "PRAGMA main.cache_size", in bytes. ** ** If the sorter is running in single-threaded mode, then all PMAs generated @@ -99194,7 +101401,7 @@ SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){ ** ** If there are fewer than SORTER_MAX_MERGE_COUNT PMAs in total and the ** sorter is running in single-threaded mode, then these PMAs are merged -** incrementally as keys are retreived from the sorter by the VDBE. The +** incrementally as keys are retrieved from the sorter by the VDBE. The ** MergeEngine object, described in further detail below, performs this ** merge. ** @@ -99357,7 +101564,7 @@ struct MergeEngine { ** ** Essentially, this structure contains all those fields of the VdbeSorter ** structure for which each thread requires a separate instance. For example, -** each thread requries its own UnpackedRecord object to unpack records in +** each thread requeries its own UnpackedRecord object to unpack records in ** as part of comparison operations. ** ** Before a background thread is launched, variable bDone is set to 0. Then, @@ -99429,7 +101636,7 @@ struct VdbeSorter { ** PMA, in sorted order. The next key to be read is cached in nKey/aKey. ** aKey might point into aMap or into aBuffer. If neither of those locations ** contain a contiguous representation of the key, then aAlloc is allocated -** and the key is copied into aAlloc and aKey is made to poitn to aAlloc. +** and the key is copied into aAlloc and aKey is made to point to aAlloc. ** ** pFd==0 at EOF. */ @@ -100800,7 +103007,7 @@ static int vdbeSorterFlushPMA(VdbeSorter *pSorter){ ** the background thread from a sub-tasks previous turn is still running, ** skip it. If the first (pSorter->nTask-1) sub-tasks are all still busy, ** fall back to using the final sub-task. The first (pSorter->nTask-1) - ** sub-tasks are prefered as they use background threads - the final + ** sub-tasks are preferred as they use background threads - the final ** sub-task uses the main thread. */ for(i=0; iiPrev + i + 1) % nWorker; @@ -101284,7 +103491,7 @@ static int vdbePmaReaderIncrMergeInit(PmaReader *pReadr, int eMode){ rc = vdbeMergeEngineInit(pTask, pIncr->pMerger, eMode); - /* Set up the required files for pIncr. A multi-theaded IncrMerge object + /* Set up the required files for pIncr. A multi-threaded IncrMerge object ** requires two temp files to itself, whereas a single-threaded object ** only requires a region of pTask->file2. */ if( rc==SQLITE_OK ){ @@ -101924,6 +104131,8 @@ static int bytecodevtabConnect( "p5 INT," "comment TEXT," "subprog TEXT," + "nexec INT," + "ncycle INT," "stmt HIDDEN" ");", @@ -101938,6 +104147,9 @@ static int bytecodevtabConnect( ");" }; + (void)argc; + (void)argv; + (void)pzErr; rc = sqlite3_declare_vtab(db, azSchema[isTabUsed]); if( rc==SQLITE_OK ){ pNew = sqlite3_malloc( sizeof(*pNew) ); @@ -102083,7 +104295,7 @@ static int bytecodevtabColumn( } } } - i += 10; + i += 20; } } switch( i ){ @@ -102133,16 +104345,31 @@ static int bytecodevtabColumn( } break; } - case 10: /* tables_used.type */ + +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + case 9: /* nexec */ + sqlite3_result_int(ctx, pOp->nExec); + break; + case 10: /* ncycle */ + sqlite3_result_int(ctx, pOp->nCycle); + break; +#else + case 9: /* nexec */ + case 10: /* ncycle */ + sqlite3_result_int(ctx, 0); + break; +#endif + + case 20: /* tables_used.type */ sqlite3_result_text(ctx, pCur->zType, -1, SQLITE_STATIC); break; - case 11: /* tables_used.schema */ + case 21: /* tables_used.schema */ sqlite3_result_text(ctx, pCur->zSchema, -1, SQLITE_STATIC); break; - case 12: /* tables_used.name */ + case 22: /* tables_used.name */ sqlite3_result_text(ctx, pCur->zName, -1, SQLITE_STATIC); break; - case 13: /* tables_used.wr */ + case 23: /* tables_used.wr */ sqlite3_result_int(ctx, pOp->opcode==OP_OpenWrite); break; } @@ -102173,6 +104400,7 @@ static int bytecodevtabFilter( bytecodevtab_cursor *pCur = (bytecodevtab_cursor *)pVtabCursor; bytecodevtab *pVTab = (bytecodevtab *)pVtabCursor->pVtab; int rc = SQLITE_OK; + (void)idxStr; bytecodevtabCursorClear(pCur); pCur->iRowid = 0; @@ -102215,7 +104443,7 @@ static int bytecodevtabBestIndex( int rc = SQLITE_CONSTRAINT; struct sqlite3_index_constraint *p; bytecodevtab *pVTab = (bytecodevtab*)tab; - int iBaseCol = pVTab->bTablesUsed ? 4 : 8; + int iBaseCol = pVTab->bTablesUsed ? 4 : 10; pIdxInfo->estimatedCost = (double)100; pIdxInfo->estimatedRows = 100; pIdxInfo->idxNum = 0; @@ -102786,7 +105014,7 @@ static int walkWindowList(Walker *pWalker, Window *pList, int bOneOnly){ ** The return value from this routine is WRC_Abort to abandon the tree walk ** and WRC_Continue to continue. */ -static SQLITE_NOINLINE int walkExpr(Walker *pWalker, Expr *pExpr){ +SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3WalkExprNN(Walker *pWalker, Expr *pExpr){ int rc; testcase( ExprHasProperty(pExpr, EP_TokenOnly) ); testcase( ExprHasProperty(pExpr, EP_Reduced) ); @@ -102795,7 +105023,9 @@ static SQLITE_NOINLINE int walkExpr(Walker *pWalker, Expr *pExpr){ if( rc ) return rc & WRC_Abort; if( !ExprHasProperty(pExpr,(EP_TokenOnly|EP_Leaf)) ){ assert( pExpr->x.pList==0 || pExpr->pRight==0 ); - if( pExpr->pLeft && walkExpr(pWalker, pExpr->pLeft) ) return WRC_Abort; + if( pExpr->pLeft && sqlite3WalkExprNN(pWalker, pExpr->pLeft) ){ + return WRC_Abort; + } if( pExpr->pRight ){ assert( !ExprHasProperty(pExpr, EP_WinFunc) ); pExpr = pExpr->pRight; @@ -102819,7 +105049,7 @@ static SQLITE_NOINLINE int walkExpr(Walker *pWalker, Expr *pExpr){ return WRC_Continue; } SQLITE_PRIVATE int sqlite3WalkExpr(Walker *pWalker, Expr *pExpr){ - return pExpr ? walkExpr(pWalker,pExpr) : WRC_Continue; + return pExpr ? sqlite3WalkExprNN(pWalker,pExpr) : WRC_Continue; } /* @@ -102945,7 +105175,7 @@ SQLITE_PRIVATE int sqlite3WalkSelect(Walker *pWalker, Select *p){ } /* Increase the walkerDepth when entering a subquery, and -** descrease when leaving the subquery. +** decrease when leaving the subquery. */ SQLITE_PRIVATE int sqlite3WalkerDepthIncrease(Walker *pWalker, Select *pSelect){ UNUSED_PARAMETER(pSelect); @@ -103187,6 +105417,32 @@ static void extendFJMatch( } } +/* +** Return TRUE (non-zero) if zTab is a valid name for the schema table pTab. +*/ +static SQLITE_NOINLINE int isValidSchemaTableName( + const char *zTab, /* Name as it appears in the SQL */ + Table *pTab, /* The schema table we are trying to match */ + Schema *pSchema /* non-NULL if a database qualifier is present */ +){ + const char *zLegacy; + assert( pTab!=0 ); + assert( pTab->tnum==1 ); + if( sqlite3StrNICmp(zTab, "sqlite_", 7)!=0 ) return 0; + zLegacy = pTab->zName; + if( strcmp(zLegacy+7, &LEGACY_TEMP_SCHEMA_TABLE[7])==0 ){ + if( sqlite3StrICmp(zTab+7, &PREFERRED_TEMP_SCHEMA_TABLE[7])==0 ){ + return 1; + } + if( pSchema==0 ) return 0; + if( sqlite3StrICmp(zTab+7, &LEGACY_SCHEMA_TABLE[7])==0 ) return 1; + if( sqlite3StrICmp(zTab+7, &PREFERRED_SCHEMA_TABLE[7])==0 ) return 1; + }else{ + if( sqlite3StrICmp(zTab+7, &PREFERRED_SCHEMA_TABLE[7])==0 ) return 1; + } + return 0; +} + /* ** Given the name of a column of the form X.Y.Z or Y.Z or just Z, look up ** that name in the set of source tables in pSrcList and make the pExpr @@ -103340,15 +105596,17 @@ static int lookupName( } assert( zDb==0 || zTab!=0 ); if( zTab ){ - const char *zTabName; if( zDb ){ if( pTab->pSchema!=pSchema ) continue; if( pSchema==0 && strcmp(zDb,"*")!=0 ) continue; } - zTabName = pItem->zAlias ? pItem->zAlias : pTab->zName; - assert( zTabName!=0 ); - if( sqlite3StrICmp(zTabName, zTab)!=0 ){ - continue; + if( pItem->zAlias!=0 ){ + if( sqlite3StrICmp(zTab, pItem->zAlias)!=0 ){ + continue; + } + }else if( sqlite3StrICmp(zTab, pTab->zName)!=0 ){ + if( pTab->tnum!=1 ) continue; + if( !isValidSchemaTableName(zTab, pTab, pSchema) ) continue; } assert( ExprUseYTab(pExpr) ); if( IN_RENAME_OBJECT && pItem->zAlias ){ @@ -103424,7 +105682,8 @@ static int lookupName( assert( op==TK_DELETE || op==TK_UPDATE || op==TK_INSERT ); if( pParse->bReturning ){ if( (pNC->ncFlags & NC_UBaseReg)!=0 - && (zTab==0 || sqlite3StrICmp(zTab,pParse->pTriggerTab->zName)==0) + && ALWAYS(zTab==0 + || sqlite3StrICmp(zTab,pParse->pTriggerTab->zName)==0) ){ pExpr->iTable = op!=TK_DELETE; pTab = pParse->pTriggerTab; @@ -103491,6 +105750,7 @@ static int lookupName( if( pParse->bReturning ){ eNewExprOp = TK_REGISTER; pExpr->op2 = TK_COLUMN; + pExpr->iColumn = iCol; pExpr->iTable = pNC->uNC.iBaseReg + (pTab->nCol+1)*pExpr->iTable + sqlite3TableColumnToStorage(pTab, iCol) + 1; }else{ @@ -103903,14 +106163,10 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ if( 0==sqlite3ExprCanBeNull(pExpr->pLeft) && !IN_RENAME_OBJECT ){ testcase( ExprHasProperty(pExpr, EP_OuterON) ); assert( !ExprHasProperty(pExpr, EP_IntValue) ); - if( pExpr->op==TK_NOTNULL ){ - pExpr->u.zToken = "true"; - ExprSetProperty(pExpr, EP_IsTrue); - }else{ - pExpr->u.zToken = "false"; - ExprSetProperty(pExpr, EP_IsFalse); - } - pExpr->op = TK_TRUEFALSE; + pExpr->u.iValue = (pExpr->op==TK_NOTNULL); + pExpr->flags |= EP_IntValue; + pExpr->op = TK_INTEGER; + for(i=0, p=pNC; p && ipNext, i++){ p->nRef = anRef[i]; } @@ -104212,8 +106468,8 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ assert( pNC->nRef>=nRef ); if( nRef!=pNC->nRef ){ ExprSetProperty(pExpr, EP_VarSelect); - pNC->ncFlags |= NC_VarSelect; } + pNC->ncFlags |= NC_Subquery; } break; } @@ -104653,7 +106909,7 @@ static int resolveOrderGroupBy( } for(j=0; jpEList->nExpr; j++){ if( sqlite3ExprCompare(0, pE, pSelect->pEList->a[j].pExpr, -1)==0 ){ - /* Since this expresion is being changed into a reference + /* Since this expression is being changed into a reference ** to an identical expression in the result set, remove all Window ** objects belonging to the expression from the Select.pWin list. */ windowRemoveExprFromSelect(pSelect, pE); @@ -104976,7 +107232,8 @@ SQLITE_PRIVATE int sqlite3ResolveExprNames( return SQLITE_ERROR; } #endif - sqlite3WalkExpr(&w, pExpr); + assert( pExpr!=0 ); + sqlite3WalkExprNN(&w, pExpr); #if SQLITE_MAX_EXPR_DEPTH>0 w.pParse->nHeight -= pExpr->nHeight; #endif @@ -105018,7 +107275,7 @@ SQLITE_PRIVATE int sqlite3ResolveExprListNames( return WRC_Abort; } #endif - sqlite3WalkExpr(&w, pExpr); + sqlite3WalkExprNN(&w, pExpr); #if SQLITE_MAX_EXPR_DEPTH>0 w.pParse->nHeight -= pExpr->nHeight; #endif @@ -105040,7 +107297,7 @@ SQLITE_PRIVATE int sqlite3ResolveExprListNames( /* ** Resolve all names in all expressions of a SELECT and in all -** decendents of the SELECT, including compounds off of p->pPrior, +** descendants of the SELECT, including compounds off of p->pPrior, ** subqueries in expressions, and subqueries used as FROM clause ** terms. ** @@ -105167,48 +107424,122 @@ SQLITE_PRIVATE char sqlite3TableColumnAffinity(const Table *pTab, int iCol){ */ SQLITE_PRIVATE char sqlite3ExprAffinity(const Expr *pExpr){ int op; - while( ExprHasProperty(pExpr, EP_Skip|EP_IfNullRow) ){ - assert( pExpr->op==TK_COLLATE - || pExpr->op==TK_IF_NULL_ROW - || (pExpr->op==TK_REGISTER && pExpr->op2==TK_IF_NULL_ROW) ); - pExpr = pExpr->pLeft; - assert( pExpr!=0 ); - } op = pExpr->op; - if( op==TK_REGISTER ) op = pExpr->op2; - if( op==TK_COLUMN || op==TK_AGG_COLUMN ){ - assert( ExprUseYTab(pExpr) ); - assert( pExpr->y.pTab!=0 ); - return sqlite3TableColumnAffinity(pExpr->y.pTab, pExpr->iColumn); - } - if( op==TK_SELECT ){ - assert( ExprUseXSelect(pExpr) ); - assert( pExpr->x.pSelect!=0 ); - assert( pExpr->x.pSelect->pEList!=0 ); - assert( pExpr->x.pSelect->pEList->a[0].pExpr!=0 ); - return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr); - } + while( 1 /* exit-by-break */ ){ + if( op==TK_COLUMN || (op==TK_AGG_COLUMN && pExpr->y.pTab!=0) ){ + assert( ExprUseYTab(pExpr) ); + assert( pExpr->y.pTab!=0 ); + return sqlite3TableColumnAffinity(pExpr->y.pTab, pExpr->iColumn); + } + if( op==TK_SELECT ){ + assert( ExprUseXSelect(pExpr) ); + assert( pExpr->x.pSelect!=0 ); + assert( pExpr->x.pSelect->pEList!=0 ); + assert( pExpr->x.pSelect->pEList->a[0].pExpr!=0 ); + return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr); + } #ifndef SQLITE_OMIT_CAST - if( op==TK_CAST ){ - assert( !ExprHasProperty(pExpr, EP_IntValue) ); - return sqlite3AffinityType(pExpr->u.zToken, 0); - } + if( op==TK_CAST ){ + assert( !ExprHasProperty(pExpr, EP_IntValue) ); + return sqlite3AffinityType(pExpr->u.zToken, 0); + } #endif - if( op==TK_SELECT_COLUMN ){ - assert( pExpr->pLeft!=0 && ExprUseXSelect(pExpr->pLeft) ); - assert( pExpr->iColumn < pExpr->iTable ); - assert( pExpr->iTable==pExpr->pLeft->x.pSelect->pEList->nExpr ); - return sqlite3ExprAffinity( - pExpr->pLeft->x.pSelect->pEList->a[pExpr->iColumn].pExpr - ); - } - if( op==TK_VECTOR ){ - assert( ExprUseXList(pExpr) ); - return sqlite3ExprAffinity(pExpr->x.pList->a[0].pExpr); + if( op==TK_SELECT_COLUMN ){ + assert( pExpr->pLeft!=0 && ExprUseXSelect(pExpr->pLeft) ); + assert( pExpr->iColumn < pExpr->iTable ); + assert( pExpr->iColumn >= 0 ); + assert( pExpr->iTable==pExpr->pLeft->x.pSelect->pEList->nExpr ); + return sqlite3ExprAffinity( + pExpr->pLeft->x.pSelect->pEList->a[pExpr->iColumn].pExpr + ); + } + if( op==TK_VECTOR ){ + assert( ExprUseXList(pExpr) ); + return sqlite3ExprAffinity(pExpr->x.pList->a[0].pExpr); + } + if( ExprHasProperty(pExpr, EP_Skip|EP_IfNullRow) ){ + assert( pExpr->op==TK_COLLATE + || pExpr->op==TK_IF_NULL_ROW + || (pExpr->op==TK_REGISTER && pExpr->op2==TK_IF_NULL_ROW) ); + pExpr = pExpr->pLeft; + op = pExpr->op; + continue; + } + if( op!=TK_REGISTER || (op = pExpr->op2)==TK_REGISTER ) break; } return pExpr->affExpr; } +/* +** Make a guess at all the possible datatypes of the result that could +** be returned by an expression. Return a bitmask indicating the answer: +** +** 0x01 Numeric +** 0x02 Text +** 0x04 Blob +** +** If the expression must return NULL, then 0x00 is returned. +*/ +SQLITE_PRIVATE int sqlite3ExprDataType(const Expr *pExpr){ + while( pExpr ){ + switch( pExpr->op ){ + case TK_COLLATE: + case TK_IF_NULL_ROW: + case TK_UPLUS: { + pExpr = pExpr->pLeft; + break; + } + case TK_NULL: { + pExpr = 0; + break; + } + case TK_STRING: { + return 0x02; + } + case TK_BLOB: { + return 0x04; + } + case TK_CONCAT: { + return 0x06; + } + case TK_VARIABLE: + case TK_AGG_FUNCTION: + case TK_FUNCTION: { + return 0x07; + } + case TK_COLUMN: + case TK_AGG_COLUMN: + case TK_SELECT: + case TK_CAST: + case TK_SELECT_COLUMN: + case TK_VECTOR: { + int aff = sqlite3ExprAffinity(pExpr); + if( aff>=SQLITE_AFF_NUMERIC ) return 0x05; + if( aff==SQLITE_AFF_TEXT ) return 0x06; + return 0x07; + } + case TK_CASE: { + int res = 0; + int ii; + ExprList *pList = pExpr->x.pList; + assert( ExprUseXList(pExpr) && pList!=0 ); + assert( pList->nExpr > 0); + for(ii=1; iinExpr; ii+=2){ + res |= sqlite3ExprDataType(pList->a[ii].pExpr); + } + if( pList->nExpr % 2 ){ + res |= sqlite3ExprDataType(pList->a[pList->nExpr-1].pExpr); + } + return res; + } + default: { + return 0x01; + } + } /* End of switch(op) */ + } /* End of while(pExpr) */ + return 0x00; +} + /* ** Set the collating sequence for expression pExpr to be the collating ** sequence named by pToken. Return a pointer to a new Expr node that @@ -105296,7 +107627,9 @@ SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, const Expr *pExpr){ while( p ){ int op = p->op; if( op==TK_REGISTER ) op = p->op2; - if( op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_TRIGGER ){ + if( (op==TK_AGG_COLUMN && p->y.pTab!=0) + || op==TK_COLUMN || op==TK_TRIGGER + ){ int j; assert( ExprUseYTab(p) ); assert( p->y.pTab!=0 ); @@ -105326,11 +107659,10 @@ SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, const Expr *pExpr){ }else{ Expr *pNext = p->pRight; /* The Expr.x union is never used at the same time as Expr.pRight */ - assert( ExprUseXList(p) ); - assert( p->x.pList==0 || p->pRight==0 ); - if( p->x.pList!=0 && !db->mallocFailed ){ + assert( !ExprUseXList(p) || p->x.pList==0 || p->pRight==0 ); + if( ExprUseXList(p) && p->x.pList!=0 && !db->mallocFailed ){ int i; - for(i=0; ALWAYS(ix.pList->nExpr); i++){ + for(i=0; ix.pList->nExpr; i++){ if( ExprHasProperty(p->x.pList->a[i].pExpr, EP_Collate) ){ pNext = p->x.pList->a[i].pExpr; break; @@ -105352,7 +107684,7 @@ SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, const Expr *pExpr){ /* ** Return the collation sequence for the expression pExpr. If ** there is no defined collating sequence, return a pointer to the -** defautl collation sequence. +** default collation sequence. ** ** See also: sqlite3ExprCollSeq() ** @@ -105482,7 +107814,7 @@ SQLITE_PRIVATE CollSeq *sqlite3BinaryCompareCollSeq( return pColl; } -/* Expresssion p is a comparison operator. Return a collation sequence +/* Expression p is a comparison operator. Return a collation sequence ** appropriate for the comparison operator. ** ** This is normally just a wrapper around sqlite3BinaryCompareCollSeq(). @@ -105938,6 +108270,15 @@ SQLITE_PRIVATE void sqlite3ExprSetHeightAndFlags(Parse *pParse, Expr *p){ #define exprSetHeight(y) #endif /* SQLITE_MAX_EXPR_DEPTH>0 */ +/* +** Set the error offset for an Expr node, if possible. +*/ +SQLITE_PRIVATE void sqlite3ExprSetErrorOffset(Expr *pExpr, int iOfst){ + if( pExpr==0 ) return; + if( NEVER(ExprUseWJoin(pExpr)) ) return; + pExpr->w.iOfst = iOfst; +} + /* ** This routine is the core allocator for Expr nodes. ** @@ -106162,9 +108503,9 @@ SQLITE_PRIVATE Select *sqlite3ExprListToValues(Parse *pParse, int nElem, ExprLis ** Join two expressions using an AND operator. If either expression is ** NULL, then just return the other expression. ** -** If one side or the other of the AND is known to be false, then instead -** of returning an AND expression, just return a constant expression with -** a value of false. +** If one side or the other of the AND is known to be false, and neither side +** is part of an ON clause, then instead of returning an AND expression, +** just return a constant expression with a value of false. */ SQLITE_PRIVATE Expr *sqlite3ExprAnd(Parse *pParse, Expr *pLeft, Expr *pRight){ sqlite3 *db = pParse->db; @@ -106172,14 +108513,17 @@ SQLITE_PRIVATE Expr *sqlite3ExprAnd(Parse *pParse, Expr *pLeft, Expr *pRight){ return pRight; }else if( pRight==0 ){ return pLeft; - }else if( (ExprAlwaysFalse(pLeft) || ExprAlwaysFalse(pRight)) - && !IN_RENAME_OBJECT - ){ - sqlite3ExprDeferredDelete(pParse, pLeft); - sqlite3ExprDeferredDelete(pParse, pRight); - return sqlite3Expr(db, TK_INTEGER, "0"); }else{ - return sqlite3PExpr(pParse, TK_AND, pLeft, pRight); + u32 f = pLeft->flags | pRight->flags; + if( (f&(EP_OuterON|EP_InnerON|EP_IsFalse))==EP_IsFalse + && !IN_RENAME_OBJECT + ){ + sqlite3ExprDeferredDelete(pParse, pLeft); + sqlite3ExprDeferredDelete(pParse, pRight); + return sqlite3Expr(db, TK_INTEGER, "0"); + }else{ + return sqlite3PExpr(pParse, TK_AND, pLeft, pRight); + } } } @@ -106395,7 +108739,7 @@ SQLITE_PRIVATE void sqlite3ClearOnOrUsing(sqlite3 *db, OnOrUsing *p){ /* ** Arrange to cause pExpr to be deleted when the pParse is deleted. ** This is similar to sqlite3ExprDelete() except that the delete is -** deferred untilthe pParse is deleted. +** deferred until the pParse is deleted. ** ** The pExpr might be deleted immediately on an OOM error. ** @@ -107237,7 +109581,7 @@ SQLITE_PRIVATE int sqlite3ExprIdToTrueFalse(Expr *pExpr){ ** and 0 if it is FALSE. */ SQLITE_PRIVATE int sqlite3ExprTruthValue(const Expr *pExpr){ - pExpr = sqlite3ExprSkipCollate((Expr*)pExpr); + pExpr = sqlite3ExprSkipCollateAndLikely((Expr*)pExpr); assert( pExpr->op==TK_TRUEFALSE ); assert( !ExprHasProperty(pExpr, EP_IntValue) ); assert( sqlite3StrICmp(pExpr->u.zToken,"true")==0 @@ -107424,12 +109768,17 @@ SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){ } /* -** Check pExpr to see if it is an invariant constraint on data source pSrc. +** Check pExpr to see if it is an constraint on the single data source +** pSrc = &pSrcList->a[iSrc]. In other words, check to see if pExpr +** constrains pSrc but does not depend on any other tables or data +** sources anywhere else in the query. Return true (non-zero) if pExpr +** is a constraint on pSrc only. +** ** This is an optimization. False negatives will perhaps cause slower ** queries, but false positives will yield incorrect answers. So when in ** doubt, return 0. ** -** To be an invariant constraint, the following must be true: +** To be an single-source constraint, the following must be true: ** ** (1) pExpr cannot refer to any table other than pSrc->iCursor. ** @@ -107440,13 +109789,31 @@ SQLITE_PRIVATE int sqlite3ExprIsTableConstant(Expr *p, int iCur){ ** ** (4) If pSrc is the right operand of a LEFT JOIN, then... ** (4a) pExpr must come from an ON clause.. - (4b) and specifically the ON clause associated with the LEFT JOIN. +** (4b) and specifically the ON clause associated with the LEFT JOIN. ** ** (5) If pSrc is not the right operand of a LEFT JOIN or the left ** operand of a RIGHT JOIN, then pExpr must be from the WHERE ** clause, not an ON clause. +** +** (6) Either: +** +** (6a) pExpr does not originate in an ON or USING clause, or +** +** (6b) The ON or USING clause from which pExpr is derived is +** not to the left of a RIGHT JOIN (or FULL JOIN). +** +** Without this restriction, accepting pExpr as a single-table +** constraint might move the the ON/USING filter expression +** from the left side of a RIGHT JOIN over to the right side, +** which leads to incorrect answers. See also restriction (9) +** on push-down. */ -SQLITE_PRIVATE int sqlite3ExprIsTableConstraint(Expr *pExpr, const SrcItem *pSrc){ +SQLITE_PRIVATE int sqlite3ExprIsSingleTableConstraint( + Expr *pExpr, /* The constraint */ + const SrcList *pSrcList, /* Complete FROM clause */ + int iSrc /* Which element of pSrcList to use */ +){ + const SrcItem *pSrc = &pSrcList->a[iSrc]; if( pSrc->fg.jointype & JT_LTORJ ){ return 0; /* rule (3) */ } @@ -107456,6 +109823,19 @@ SQLITE_PRIVATE int sqlite3ExprIsTableConstraint(Expr *pExpr, const SrcItem *pSrc }else{ if( ExprHasProperty(pExpr, EP_OuterON) ) return 0; /* rule (5) */ } + if( ExprHasProperty(pExpr, EP_OuterON|EP_InnerON) /* (6a) */ + && (pSrcList->a[0].fg.jointype & JT_LTORJ)!=0 /* Fast pre-test of (6b) */ + ){ + int jj; + for(jj=0; jjw.iJoin==pSrcList->a[jj].iCursor ){ + if( (pSrcList->a[jj].fg.jointype & JT_LTORJ)!=0 ){ + return 0; /* restriction (6) */ + } + break; + } + } + } return sqlite3ExprIsTableConstant(pExpr, pSrc->iCursor); /* rules (1), (2) */ } @@ -107698,7 +110078,7 @@ SQLITE_PRIVATE int sqlite3IsRowid(const char *z){ ** pX is the RHS of an IN operator. If pX is a SELECT statement ** that can be simplified to a direct table access, then return ** a pointer to the SELECT statement. If pX is not a SELECT statement, -** or if the SELECT statement needs to be manifested into a transient +** or if the SELECT statement needs to be materialized into a transient ** table, then return NULL. */ #ifndef SQLITE_OMIT_SUBQUERY @@ -107794,7 +110174,7 @@ static int sqlite3InRhsIsConstant(Expr *pIn){ ** IN_INDEX_INDEX_ASC - The cursor was opened on an ascending index. ** IN_INDEX_INDEX_DESC - The cursor was opened on a descending index. ** IN_INDEX_EPH - The cursor was opened on a specially created and -** populated epheremal table. +** populated ephemeral table. ** IN_INDEX_NOOP - No cursor was allocated. The IN operator must be ** implemented as a sequence of comparisons. ** @@ -107807,7 +110187,7 @@ static int sqlite3InRhsIsConstant(Expr *pIn){ ** an ephemeral table might need to be generated from the RHS and then ** pX->iTable made to point to the ephemeral table instead of an ** existing table. In this case, the creation and initialization of the -** ephmeral table might be put inside of a subroutine, the EP_Subrtn flag +** ephemeral table might be put inside of a subroutine, the EP_Subrtn flag ** will be set on pX and the pX->y.sub fields will be set to show where ** the subroutine is coded. ** @@ -107819,12 +110199,12 @@ static int sqlite3InRhsIsConstant(Expr *pIn){ ** ** When IN_INDEX_LOOP is used (and the b-tree will be used to iterate ** through the set members) then the b-tree must not contain duplicates. -** An epheremal table will be created unless the selected columns are guaranteed +** An ephemeral table will be created unless the selected columns are guaranteed ** to be unique - either because it is an INTEGER PRIMARY KEY or due to ** a UNIQUE constraint or index. ** ** When IN_INDEX_MEMBERSHIP is used (and the b-tree will be used -** for fast set membership tests) then an epheremal table must +** for fast set membership tests) then an ephemeral table must ** be used unless is a single INTEGER PRIMARY KEY column or an ** index can be found with the specified as its left-most. ** @@ -107984,7 +110364,6 @@ SQLITE_PRIVATE int sqlite3FindInIndex( CollSeq *pReq = sqlite3BinaryCompareCollSeq(pParse, pLhs, pRhs); int j; - assert( pReq!=0 || pRhs->iColumn==XN_ROWID || pParse->nErr ); for(j=0; jaiColumn[j]!=pRhs->iColumn ) continue; assert( pIdx->azColl[j] ); @@ -108158,7 +110537,7 @@ SQLITE_PRIVATE void sqlite3VectorErrorMsg(Parse *pParse, Expr *pExpr){ ** x IN (SELECT a FROM b) -- IN operator with subquery on the right ** ** The pExpr parameter is the IN operator. The cursor number for the -** constructed ephermeral table is returned. The first time the ephemeral +** constructed ephemeral table is returned. The first time the ephemeral ** table is computed, the cursor number is also stored in pExpr->iTable, ** however the cursor number returned might not be the same, as it might ** have been duplicated using OP_OpenDup. @@ -108378,6 +110757,9 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(Parse *pParse, Expr *pExpr){ SelectDest dest; /* How to deal with SELECT result */ int nReg; /* Registers to allocate */ Expr *pLimit; /* New limit expression */ +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + int addrExplain; /* Address of OP_Explain instruction */ +#endif Vdbe *v = pParse->pVdbe; assert( v!=0 ); @@ -108430,8 +110812,9 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(Parse *pParse, Expr *pExpr){ ** In both cases, the query is augmented with "LIMIT 1". Any ** preexisting limit is discarded in place of the new LIMIT 1. */ - ExplainQueryPlan((pParse, 1, "%sSCALAR SUBQUERY %d", + ExplainQueryPlan2(addrExplain, (pParse, 1, "%sSCALAR SUBQUERY %d", addrOnce?"":"CORRELATED ", pSel->selId)); + sqlite3VdbeScanStatusCounters(v, addrExplain, addrExplain, -1); nReg = pExpr->op==TK_SELECT ? pSel->pEList->nExpr : 1; sqlite3SelectDestInit(&dest, 0, pParse->nMem+1); pParse->nMem += nReg; @@ -108474,6 +110857,7 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(Parse *pParse, Expr *pExpr){ if( addrOnce ){ sqlite3VdbeJumpHere(v, addrOnce); } + sqlite3VdbeScanStatusRange(v, addrExplain, addrExplain, -1); /* Subroutine return */ assert( ExprUseYSub(pExpr) ); @@ -108882,6 +111266,7 @@ SQLITE_PRIVATE void sqlite3ExprCodeGeneratedColumn( ){ int iAddr; Vdbe *v = pParse->pVdbe; + int nErr = pParse->nErr; assert( v!=0 ); assert( pParse->iSelfTab!=0 ); if( pParse->iSelfTab>0 ){ @@ -108894,6 +111279,7 @@ SQLITE_PRIVATE void sqlite3ExprCodeGeneratedColumn( sqlite3VdbeAddOp4(v, OP_Affinity, regOut, 1, 0, &pCol->affinity, 1); } if( iAddr ) sqlite3VdbeJumpHere(v, iAddr); + if( pParse->nErr>nErr ) pParse->db->errByteOffset = -1; } #endif /* SQLITE_OMIT_GENERATED_COLUMNS */ @@ -108910,6 +111296,7 @@ SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable( Column *pCol; assert( v!=0 ); assert( pTab!=0 ); + assert( iCol!=XN_EXPR ); if( iCol<0 || iCol==pTab->iPKey ){ sqlite3VdbeAddOp2(v, OP_Rowid, iTabCur, regOut); VdbeComment((v, "%s.rowid", pTab->zName)); @@ -108965,10 +111352,13 @@ SQLITE_PRIVATE int sqlite3ExprCodeGetColumn( u8 p5 /* P5 value for OP_Column + FLAGS */ ){ assert( pParse->pVdbe!=0 ); + assert( (p5 & (OPFLAG_NOCHNG|OPFLAG_TYPEOFARG|OPFLAG_LENGTHARG))==p5 ); + assert( IsVirtual(pTab) || (p5 & OPFLAG_NOCHNG)==0 ); sqlite3ExprCodeGetColumnOfTable(pParse->pVdbe, pTab, iTable, iColumn, iReg); if( p5 ){ VdbeOp *pOp = sqlite3VdbeGetLastOp(pParse->pVdbe); if( pOp->opcode==OP_Column ) pOp->p5 = p5; + if( pOp->opcode==OP_VColumn ) pOp->p5 = (p5 & OPFLAG_NOCHNG); } return iReg; } @@ -108997,7 +111387,7 @@ static void exprToRegister(Expr *pExpr, int iReg){ /* ** Evaluate an expression (either a vector or a scalar expression) and store -** the result in continguous temporary registers. Return the index of +** the result in contiguous temporary registers. Return the index of ** the first register used to store the result. ** ** If the returned result register is a temporary scalar, then also write @@ -109037,7 +111427,7 @@ static int exprCodeVector(Parse *pParse, Expr *p, int *piFreeable){ */ static void setDoNotMergeFlagOnCopy(Vdbe *v){ if( sqlite3VdbeGetLastOp(v)->opcode==OP_Copy ){ - sqlite3VdbeChangeP5(v, 1); /* Tag trailing OP_Copy as not mergable */ + sqlite3VdbeChangeP5(v, 1); /* Tag trailing OP_Copy as not mergeable */ } } @@ -109127,13 +111517,13 @@ static int exprCodeInlineFunction( } case INLINEFUNC_implies_nonnull_row: { - /* REsult of sqlite3ExprImpliesNonNullRow() */ + /* Result of sqlite3ExprImpliesNonNullRow() */ Expr *pA1; assert( nFarg==2 ); pA1 = pFarg->a[1].pExpr; if( pA1->op==TK_COLUMN ){ sqlite3VdbeAddOp2(v, OP_Integer, - sqlite3ExprImpliesNonNullRow(pFarg->a[0].pExpr,pA1->iTable), + sqlite3ExprImpliesNonNullRow(pFarg->a[0].pExpr,pA1->iTable,1), target); }else{ sqlite3VdbeAddOp2(v, OP_Null, 0, target); @@ -109146,10 +111536,13 @@ static int exprCodeInlineFunction( ** the type affinity of the argument. This is used for testing of ** the SQLite type logic. */ - const char *azAff[] = { "blob", "text", "numeric", "integer", "real" }; + const char *azAff[] = { "blob", "text", "numeric", "integer", + "real", "flexnum" }; char aff; assert( nFarg==1 ); aff = sqlite3ExprAffinity(pFarg->a[0].pExpr); + assert( aff<=SQLITE_AFF_NONE + || (aff>=SQLITE_AFF_BLOB && aff<=SQLITE_AFF_FLEXNUM) ); sqlite3VdbeLoadString(v, target, (aff<=SQLITE_AFF_NONE) ? "none" : azAff[aff-SQLITE_AFF_BLOB]); break; @@ -109160,7 +111553,7 @@ static int exprCodeInlineFunction( } /* -** Check to see if pExpr is one of the indexed expressions on pParse->pIdxExpr. +** Check to see if pExpr is one of the indexed expressions on pParse->pIdxEpr. ** If it is, then resolve the expression by reading from the index and ** return the register into which the value has been read. If pExpr is ** not an indexed expression, then return negative. @@ -109172,7 +111565,8 @@ static SQLITE_NOINLINE int sqlite3IndexedExprLookup( ){ IndexedExpr *p; Vdbe *v; - for(p=pParse->pIdxExpr; p; p=p->pIENext){ + for(p=pParse->pIdxEpr; p; p=p->pIENext){ + u8 exprAff; int iDataCur = p->iDataCur; if( iDataCur<0 ) continue; if( pParse->iSelfTab ){ @@ -109180,6 +111574,16 @@ static SQLITE_NOINLINE int sqlite3IndexedExprLookup( iDataCur = -1; } if( sqlite3ExprCompare(0, pExpr, p->pExpr, iDataCur)!=0 ) continue; + assert( p->aff>=SQLITE_AFF_BLOB && p->aff<=SQLITE_AFF_NUMERIC ); + exprAff = sqlite3ExprAffinity(pExpr); + if( (exprAff<=SQLITE_AFF_BLOB && p->aff!=SQLITE_AFF_BLOB) + || (exprAff==SQLITE_AFF_TEXT && p->aff!=SQLITE_AFF_TEXT) + || (exprAff>=SQLITE_AFF_NUMERIC && p->aff!=SQLITE_AFF_NUMERIC) + ){ + /* Affinity mismatch on a generated column */ + continue; + } + v = pParse->pVdbe; assert( v!=0 ); if( p->bMaybeNullRow ){ @@ -109192,10 +111596,10 @@ static SQLITE_NOINLINE int sqlite3IndexedExprLookup( sqlite3VdbeAddOp3(v, OP_Column, p->iIdxCur, p->iIdxCol, target); VdbeComment((v, "%s expr-column %d", p->zIdxName, p->iIdxCol)); sqlite3VdbeGoto(v, 0); - p = pParse->pIdxExpr; - pParse->pIdxExpr = 0; + p = pParse->pIdxEpr; + pParse->pIdxEpr = 0; sqlite3ExprCode(pParse, pExpr, target); - pParse->pIdxExpr = p; + pParse->pIdxEpr = p; sqlite3VdbeJumpHere(v, addr+2); }else{ sqlite3VdbeAddOp3(v, OP_Column, p->iIdxCur, p->iIdxCol, target); @@ -109234,7 +111638,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) expr_code_doover: if( pExpr==0 ){ op = TK_NULL; - }else if( pParse->pIdxExpr!=0 + }else if( pParse->pIdxEpr!=0 && !ExprHasProperty(pExpr, EP_Leaf) && (r1 = sqlite3IndexedExprLookup(pParse, pExpr, target))>=0 ){ @@ -109248,18 +111652,31 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) AggInfo *pAggInfo = pExpr->pAggInfo; struct AggInfo_col *pCol; assert( pAggInfo!=0 ); - assert( pExpr->iAgg>=0 && pExpr->iAggnColumn ); + assert( pExpr->iAgg>=0 ); + if( pExpr->iAgg>=pAggInfo->nColumn ){ + /* Happens when the left table of a RIGHT JOIN is null and + ** is using an expression index */ + sqlite3VdbeAddOp2(v, OP_Null, 0, target); +#ifdef SQLITE_VDBE_COVERAGE + /* Verify that the OP_Null above is exercised by tests + ** tag-20230325-2 */ + sqlite3VdbeAddOp2(v, OP_NotNull, target, 1); + VdbeCoverageNeverTaken(v); +#endif + break; + } pCol = &pAggInfo->aCol[pExpr->iAgg]; if( !pAggInfo->directMode ){ - assert( pCol->iMem>0 ); - return pCol->iMem; + return AggInfoColumnReg(pAggInfo, pExpr->iAgg); }else if( pAggInfo->useSortingIdx ){ Table *pTab = pCol->pTab; sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab, pCol->iSorterColumn, target); - if( pCol->iColumn<0 ){ + if( pTab==0 ){ + /* No comment added */ + }else if( pCol->iColumn<0 ){ VdbeComment((v,"%s.rowid",pTab->zName)); - }else if( ALWAYS(pTab!=0) ){ + }else{ VdbeComment((v,"%s.%s", pTab->zName, pTab->aCol[pCol->iColumn].zCnName)); if( pTab->aCol[pCol->iColumn].affinity==SQLITE_AFF_REAL ){ @@ -109267,6 +111684,11 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) } } return target; + }else if( pExpr->y.pTab==0 ){ + /* This case happens when the argument to an aggregate function + ** is rewritten by aggregateConvertIndexedExprRefToColumn() */ + sqlite3VdbeAddOp3(v, OP_Column, pExpr->iTable, pExpr->iColumn, target); + return target; } /* Otherwise, fall thru into the TK_COLUMN case */ /* no break */ deliberate_fall_through @@ -109277,7 +111699,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) if( ExprHasProperty(pExpr, EP_FixedCol) ){ /* This COLUMN expression is really a constant due to WHERE clause ** constraints, and that constant is coded by the pExpr->pLeft - ** expresssion. However, make sure the constant has the correct + ** expression. However, make sure the constant has the correct ** datatype by applying the Affinity of the table column to the ** constant. */ @@ -109287,7 +111709,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) assert( pExpr->y.pTab!=0 ); aff = sqlite3TableColumnAffinity(pExpr->y.pTab, pExpr->iColumn); if( aff>SQLITE_AFF_BLOB ){ - static const char zAff[] = "B\000C\000D\000E"; + static const char zAff[] = "B\000C\000D\000E\000F"; assert( SQLITE_AFF_BLOB=='A' ); assert( SQLITE_AFF_TEXT=='B' ); sqlite3VdbeAddOp4(v, OP_Affinity, iReg, 1, 0, @@ -109417,11 +111839,8 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) #ifndef SQLITE_OMIT_CAST case TK_CAST: { /* Expressions of the form: CAST(pLeft AS token) */ - inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); - if( inReg!=target ){ - sqlite3VdbeAddOp2(v, OP_SCopy, inReg, target); - inReg = target; - } + sqlite3ExprCode(pParse, pExpr->pLeft, target); + assert( inReg==target ); assert( !ExprHasProperty(pExpr, EP_IntValue) ); sqlite3VdbeAddOp2(v, OP_Cast, target, sqlite3AffinityType(pExpr->u.zToken, 0)); @@ -109564,7 +111983,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) assert( !ExprHasProperty(pExpr, EP_IntValue) ); sqlite3ErrorMsg(pParse, "misuse of aggregate: %#T()", pExpr); }else{ - return pInfo->aFunc[pExpr->iAgg].iMem; + return AggInfoFuncReg(pInfo, pExpr->iAgg); } break; } @@ -109606,7 +112025,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) sqlite3ErrorMsg(pParse, "unknown function: %#T()", pExpr); break; } - if( pDef->funcFlags & SQLITE_FUNC_INLINE ){ + if( (pDef->funcFlags & SQLITE_FUNC_INLINE)!=0 && ALWAYS(pFarg!=0) ){ assert( (pDef->funcFlags & SQLITE_FUNC_UNSAFE)==0 ); assert( (pDef->funcFlags & SQLITE_FUNC_DIRECT)==0 ); return exprCodeInlineFunction(pParse, pFarg, @@ -109632,10 +112051,10 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) r1 = sqlite3GetTempRange(pParse, nFarg); } - /* For length() and typeof() functions with a column argument, + /* For length() and typeof() and octet_length() functions, ** set the P5 parameter to the OP_Column opcode to OPFLAG_LENGTHARG - ** or OPFLAG_TYPEOFARG respectively, to avoid unnecessary data - ** loading. + ** or OPFLAG_TYPEOFARG or OPFLAG_BYTELENARG respectively, to avoid + ** unnecessary data loading. */ if( (pDef->funcFlags & (SQLITE_FUNC_LENGTH|SQLITE_FUNC_TYPEOF))!=0 ){ u8 exprOp; @@ -109645,14 +112064,16 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) if( exprOp==TK_COLUMN || exprOp==TK_AGG_COLUMN ){ assert( SQLITE_FUNC_LENGTH==OPFLAG_LENGTHARG ); assert( SQLITE_FUNC_TYPEOF==OPFLAG_TYPEOFARG ); - testcase( pDef->funcFlags & OPFLAG_LENGTHARG ); - pFarg->a[0].pExpr->op2 = - pDef->funcFlags & (OPFLAG_LENGTHARG|OPFLAG_TYPEOFARG); + assert( SQLITE_FUNC_BYTELEN==OPFLAG_BYTELENARG ); + assert( (OPFLAG_LENGTHARG|OPFLAG_TYPEOFARG)==OPFLAG_BYTELENARG ); + testcase( (pDef->funcFlags & OPFLAG_BYTELENARG)==OPFLAG_LENGTHARG ); + testcase( (pDef->funcFlags & OPFLAG_BYTELENARG)==OPFLAG_TYPEOFARG ); + testcase( (pDef->funcFlags & OPFLAG_BYTELENARG)==OPFLAG_BYTELENARG); + pFarg->a[0].pExpr->op2 = pDef->funcFlags & OPFLAG_BYTELENARG; } } - sqlite3ExprCodeExprList(pParse, pFarg, r1, 0, - SQLITE_ECEL_DUP|SQLITE_ECEL_FACTOR); + sqlite3ExprCodeExprList(pParse, pFarg, r1, 0, SQLITE_ECEL_FACTOR); }else{ r1 = 0; } @@ -109753,17 +112174,16 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) return target; } case TK_COLLATE: { - if( !ExprHasProperty(pExpr, EP_Collate) - && ALWAYS(pExpr->pLeft) - && pExpr->pLeft->op==TK_FUNCTION - ){ - inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); - if( inReg!=target ){ - sqlite3VdbeAddOp2(v, OP_SCopy, inReg, target); - inReg = target; - } - sqlite3VdbeAddOp1(v, OP_ClrSubtype, inReg); - return inReg; + if( !ExprHasProperty(pExpr, EP_Collate) ){ + /* A TK_COLLATE Expr node without the EP_Collate tag is a so-called + ** "SOFT-COLLATE" that is added to constraints that are pushed down + ** from outer queries into sub-queries by the push-down optimization. + ** Clear subtypes as subtypes may not cross a subquery boundary. + */ + assert( pExpr->pLeft ); + sqlite3ExprCode(pParse, pExpr->pLeft, target); + sqlite3VdbeAddOp1(v, OP_ClrSubtype, target); + return target; }else{ pExpr = pExpr->pLeft; goto expr_code_doover; /* 2018-04-28: Prevent deep recursion. */ @@ -109853,7 +112273,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) if( pAggInfo ){ assert( pExpr->iAgg>=0 && pExpr->iAggnColumn ); if( !pAggInfo->directMode ){ - inReg = pAggInfo->aCol[pExpr->iAgg].iMem; + inReg = AggInfoColumnReg(pAggInfo, pExpr->iAgg); break; } if( pExpr->pAggInfo->useSortingIdx ){ @@ -109864,16 +112284,19 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) break; } } - addrINR = sqlite3VdbeAddOp1(v, OP_IfNullRow, pExpr->iTable); - /* Temporarily disable factoring of constant expressions, since - ** even though expressions may appear to be constant, they are not - ** really constant because they originate from the right-hand side - ** of a LEFT JOIN. */ - pParse->okConstFactor = 0; - inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target); + addrINR = sqlite3VdbeAddOp3(v, OP_IfNullRow, pExpr->iTable, 0, target); + /* The OP_IfNullRow opcode above can overwrite the result register with + ** NULL. So we have to ensure that the result register is not a value + ** that is suppose to be a constant. Two defenses are needed: + ** (1) Temporarily disable factoring of constant expressions + ** (2) Make sure the computed value really is stored in register + ** "target" and not someplace else. + */ + pParse->okConstFactor = 0; /* note (1) above */ + sqlite3ExprCode(pParse, pExpr->pLeft, target); + assert( target==inReg ); pParse->okConstFactor = okConstFactor; sqlite3VdbeJumpHere(v, addrINR); - sqlite3VdbeChangeP3(v, addrINR, inReg); break; } @@ -110007,7 +112430,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) ** ** If regDest>=0 then the result is always stored in that register and the ** result is not reusable. If regDest<0 then this routine is free to -** store the value whereever it wants. The register where the expression +** store the value wherever it wants. The register where the expression ** is stored is returned. When regDest<0, two identical expressions might ** code to the same register, if they do not contain function calls and hence ** are factored out into the initialization section at the end of the @@ -110110,7 +112533,9 @@ SQLITE_PRIVATE void sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){ inReg = sqlite3ExprCodeTarget(pParse, pExpr, target); if( inReg!=target ){ u8 op; - if( ALWAYS(pExpr) && ExprHasProperty(pExpr,EP_Subquery) ){ + if( ALWAYS(pExpr) + && (ExprHasProperty(pExpr,EP_Subquery) || pExpr->op==TK_REGISTER) + ){ op = OP_Copy; }else{ op = OP_SCopy; @@ -110923,7 +113348,7 @@ static int exprImpliesNotNull( ** pE1: x!=123 pE2: x IS NOT NULL Result: true ** pE1: x!=?1 pE2: x IS NOT NULL Result: true ** pE1: x IS NULL pE2: x IS NOT NULL Result: false -** pE1: x IS ?2 pE2: x IS NOT NULL Reuslt: false +** pE1: x IS ?2 pE2: x IS NOT NULL Result: false ** ** When comparing TK_COLUMN nodes between pE1 and pE2, if pE2 has ** Expr.iTable<0 then assume a table number given by iTab. @@ -110960,11 +113385,29 @@ SQLITE_PRIVATE int sqlite3ExprImpliesExpr( return 0; } +/* This is a helper function to impliesNotNullRow(). In this routine, +** set pWalker->eCode to one only if *both* of the input expressions +** separately have the implies-not-null-row property. +*/ +static void bothImplyNotNullRow(Walker *pWalker, Expr *pE1, Expr *pE2){ + if( pWalker->eCode==0 ){ + sqlite3WalkExpr(pWalker, pE1); + if( pWalker->eCode ){ + pWalker->eCode = 0; + sqlite3WalkExpr(pWalker, pE2); + } + } +} + /* ** This is the Expr node callback for sqlite3ExprImpliesNonNullRow(). ** If the expression node requires that the table at pWalker->iCur ** have one or more non-NULL column, then set pWalker->eCode to 1 and abort. ** +** pWalker->mWFlags is non-zero if this inquiry is being undertaking on +** behalf of a RIGHT JOIN (or FULL JOIN). That makes a difference when +** evaluating terms in the ON clause of an inner join. +** ** This routine controls an optimization. False positives (setting ** pWalker->eCode to 1 when it should not be) are deadly, but false-negatives ** (never setting pWalker->eCode) is a harmless missed optimization. @@ -110973,28 +113416,33 @@ static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){ testcase( pExpr->op==TK_AGG_COLUMN ); testcase( pExpr->op==TK_AGG_FUNCTION ); if( ExprHasProperty(pExpr, EP_OuterON) ) return WRC_Prune; + if( ExprHasProperty(pExpr, EP_InnerON) && pWalker->mWFlags ){ + /* If iCur is used in an inner-join ON clause to the left of a + ** RIGHT JOIN, that does *not* mean that the table must be non-null. + ** But it is difficult to check for that condition precisely. + ** To keep things simple, any use of iCur from any inner-join is + ** ignored while attempting to simplify a RIGHT JOIN. */ + return WRC_Prune; + } switch( pExpr->op ){ case TK_ISNOT: case TK_ISNULL: case TK_NOTNULL: case TK_IS: - case TK_OR: case TK_VECTOR: - case TK_CASE: - case TK_IN: case TK_FUNCTION: case TK_TRUTH: + case TK_CASE: testcase( pExpr->op==TK_ISNOT ); testcase( pExpr->op==TK_ISNULL ); testcase( pExpr->op==TK_NOTNULL ); testcase( pExpr->op==TK_IS ); - testcase( pExpr->op==TK_OR ); testcase( pExpr->op==TK_VECTOR ); - testcase( pExpr->op==TK_CASE ); - testcase( pExpr->op==TK_IN ); testcase( pExpr->op==TK_FUNCTION ); testcase( pExpr->op==TK_TRUTH ); + testcase( pExpr->op==TK_CASE ); return WRC_Prune; + case TK_COLUMN: if( pWalker->u.iCur==pExpr->iTable ){ pWalker->eCode = 1; @@ -111002,21 +113450,38 @@ static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){ } return WRC_Prune; + case TK_OR: case TK_AND: - if( pWalker->eCode==0 ){ + /* Both sides of an AND or OR must separately imply non-null-row. + ** Consider these cases: + ** 1. NOT (x AND y) + ** 2. x OR y + ** If only one of x or y is non-null-row, then the overall expression + ** can be true if the other arm is false (case 1) or true (case 2). + */ + testcase( pExpr->op==TK_OR ); + testcase( pExpr->op==TK_AND ); + bothImplyNotNullRow(pWalker, pExpr->pLeft, pExpr->pRight); + return WRC_Prune; + + case TK_IN: + /* Beware of "x NOT IN ()" and "x NOT IN (SELECT 1 WHERE false)", + ** both of which can be true. But apart from these cases, if + ** the left-hand side of the IN is NULL then the IN itself will be + ** NULL. */ + if( ExprUseXList(pExpr) && ALWAYS(pExpr->x.pList->nExpr>0) ){ sqlite3WalkExpr(pWalker, pExpr->pLeft); - if( pWalker->eCode ){ - pWalker->eCode = 0; - sqlite3WalkExpr(pWalker, pExpr->pRight); - } } return WRC_Prune; case TK_BETWEEN: - if( sqlite3WalkExpr(pWalker, pExpr->pLeft)==WRC_Abort ){ - assert( pWalker->eCode ); - return WRC_Abort; - } + /* In "x NOT BETWEEN y AND z" either x must be non-null-row or else + ** both y and z must be non-null row */ + assert( ExprUseXList(pExpr) ); + assert( pExpr->x.pList->nExpr==2 ); + sqlite3WalkExpr(pWalker, pExpr->pLeft); + bothImplyNotNullRow(pWalker, pExpr->x.pList->a[0].pExpr, + pExpr->x.pList->a[1].pExpr); return WRC_Prune; /* Virtual tables are allowed to use constraints like x=NULL. So @@ -111078,7 +113543,7 @@ static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){ ** be non-NULL, then the LEFT JOIN can be safely converted into an ** ordinary join. */ -SQLITE_PRIVATE int sqlite3ExprImpliesNonNullRow(Expr *p, int iTab){ +SQLITE_PRIVATE int sqlite3ExprImpliesNonNullRow(Expr *p, int iTab, int isRJ){ Walker w; p = sqlite3ExprSkipCollateAndLikely(p); if( p==0 ) return 0; @@ -111086,7 +113551,7 @@ SQLITE_PRIVATE int sqlite3ExprImpliesNonNullRow(Expr *p, int iTab){ p = p->pLeft; }else{ while( p->op==TK_AND ){ - if( sqlite3ExprImpliesNonNullRow(p->pLeft, iTab) ) return 1; + if( sqlite3ExprImpliesNonNullRow(p->pLeft, iTab, isRJ) ) return 1; p = p->pRight; } } @@ -111094,6 +113559,7 @@ SQLITE_PRIVATE int sqlite3ExprImpliesNonNullRow(Expr *p, int iTab){ w.xSelectCallback = 0; w.xSelectCallback2 = 0; w.eCode = 0; + w.mWFlags = isRJ!=0; w.u.iCur = iTab; sqlite3WalkExpr(&w, p); return w.eCode; @@ -111154,7 +113620,7 @@ SQLITE_PRIVATE int sqlite3ExprCoveredByIndex( } -/* Structure used to pass information throught the Walker in order to +/* Structure used to pass information throughout the Walker in order to ** implement sqlite3ReferencesSrcList(). */ struct RefSrcList { @@ -111284,10 +113750,8 @@ SQLITE_PRIVATE int sqlite3ReferencesSrcList(Parse *pParse, Expr *pExpr, SrcList ** it does, make a copy. This is done because the pExpr argument is ** subject to change. ** -** The copy is stored on pParse->pConstExpr with a register number of 0. -** This will cause the expression to be deleted automatically when the -** Parse object is destroyed, but the zero register number means that it -** will not generate any code in the preamble. +** The copy is scheduled for deletion using the sqlite3ExprDeferredDelete() +** which builds on the sqlite3ParserAddCleanup() mechanism. */ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){ if( ALWAYS(!ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced)) @@ -111297,10 +113761,11 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){ int iAgg = pExpr->iAgg; Parse *pParse = pWalker->pParse; sqlite3 *db = pParse->db; + assert( iAgg>=0 ); if( pExpr->op!=TK_AGG_FUNCTION ){ - assert( pExpr->op==TK_AGG_COLUMN || pExpr->op==TK_IF_NULL_ROW ); - assert( iAgg>=0 && iAggnColumn ); - if( pAggInfo->aCol[iAgg].pCExpr==pExpr ){ + if( iAggnColumn + && pAggInfo->aCol[iAgg].pCExpr==pExpr + ){ pExpr = sqlite3ExprDup(db, pExpr, 0); if( pExpr ){ pAggInfo->aCol[iAgg].pCExpr = pExpr; @@ -111309,8 +113774,9 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){ } }else{ assert( pExpr->op==TK_AGG_FUNCTION ); - assert( iAgg>=0 && iAggnFunc ); - if( pAggInfo->aFunc[iAgg].pFExpr==pExpr ){ + if( ALWAYS(iAggnFunc) + && pAggInfo->aFunc[iAgg].pFExpr==pExpr + ){ pExpr = sqlite3ExprDup(db, pExpr, 0); if( pExpr ){ pAggInfo->aFunc[iAgg].pFExpr = pExpr; @@ -111365,6 +113831,74 @@ static int addAggInfoFunc(sqlite3 *db, AggInfo *pInfo){ return i; } +/* +** Search the AggInfo object for an aCol[] entry that has iTable and iColumn. +** Return the index in aCol[] of the entry that describes that column. +** +** If no prior entry is found, create a new one and return -1. The +** new column will have an index of pAggInfo->nColumn-1. +*/ +static void findOrCreateAggInfoColumn( + Parse *pParse, /* Parsing context */ + AggInfo *pAggInfo, /* The AggInfo object to search and/or modify */ + Expr *pExpr /* Expr describing the column to find or insert */ +){ + struct AggInfo_col *pCol; + int k; + + assert( pAggInfo->iFirstReg==0 ); + pCol = pAggInfo->aCol; + for(k=0; knColumn; k++, pCol++){ + if( pCol->pCExpr==pExpr ) return; + if( pCol->iTable==pExpr->iTable + && pCol->iColumn==pExpr->iColumn + && pExpr->op!=TK_IF_NULL_ROW + ){ + goto fix_up_expr; + } + } + k = addAggInfoColumn(pParse->db, pAggInfo); + if( k<0 ){ + /* OOM on resize */ + assert( pParse->db->mallocFailed ); + return; + } + pCol = &pAggInfo->aCol[k]; + assert( ExprUseYTab(pExpr) ); + pCol->pTab = pExpr->y.pTab; + pCol->iTable = pExpr->iTable; + pCol->iColumn = pExpr->iColumn; + pCol->iSorterColumn = -1; + pCol->pCExpr = pExpr; + if( pAggInfo->pGroupBy && pExpr->op!=TK_IF_NULL_ROW ){ + int j, n; + ExprList *pGB = pAggInfo->pGroupBy; + struct ExprList_item *pTerm = pGB->a; + n = pGB->nExpr; + for(j=0; jpExpr; + if( pE->op==TK_COLUMN + && pE->iTable==pExpr->iTable + && pE->iColumn==pExpr->iColumn + ){ + pCol->iSorterColumn = j; + break; + } + } + } + if( pCol->iSorterColumn<0 ){ + pCol->iSorterColumn = pAggInfo->nSortingColumn++; + } +fix_up_expr: + ExprSetVVAProperty(pExpr, EP_NoReduce); + assert( pExpr->pAggInfo==0 || pExpr->pAggInfo==pAggInfo ); + pExpr->pAggInfo = pAggInfo; + if( pExpr->op==TK_COLUMN ){ + pExpr->op = TK_AGG_COLUMN; + } + pExpr->iAgg = (i16)k; +} + /* ** This is the xExprCallback for a tree walker. It is used to ** implement sqlite3ExprAnalyzeAggregates(). See sqlite3ExprAnalyzeAggregates @@ -111378,7 +113912,45 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){ AggInfo *pAggInfo = pNC->uNC.pAggInfo; assert( pNC->ncFlags & NC_UAggInfo ); + assert( pAggInfo->iFirstReg==0 ); switch( pExpr->op ){ + default: { + IndexedExpr *pIEpr; + Expr tmp; + assert( pParse->iSelfTab==0 ); + if( (pNC->ncFlags & NC_InAggFunc)==0 ) break; + if( pParse->pIdxEpr==0 ) break; + for(pIEpr=pParse->pIdxEpr; pIEpr; pIEpr=pIEpr->pIENext){ + int iDataCur = pIEpr->iDataCur; + if( iDataCur<0 ) continue; + if( sqlite3ExprCompare(0, pExpr, pIEpr->pExpr, iDataCur)==0 ) break; + } + if( pIEpr==0 ) break; + if( NEVER(!ExprUseYTab(pExpr)) ) break; + for(i=0; inSrc; i++){ + if( pSrcList->a[0].iCursor==pIEpr->iDataCur ) break; + } + if( i>=pSrcList->nSrc ) break; + if( NEVER(pExpr->pAggInfo!=0) ) break; /* Resolved by outer context */ + if( pParse->nErr ){ return WRC_Abort; } + + /* If we reach this point, it means that expression pExpr can be + ** translated into a reference to an index column as described by + ** pIEpr. + */ + memset(&tmp, 0, sizeof(tmp)); + tmp.op = TK_AGG_COLUMN; + tmp.iTable = pIEpr->iIdxCur; + tmp.iColumn = pIEpr->iIdxCol; + findOrCreateAggInfoColumn(pParse, pAggInfo, &tmp); + if( pParse->nErr ){ return WRC_Abort; } + assert( pAggInfo->aCol!=0 ); + assert( tmp.iAggnColumn ); + pAggInfo->aCol[tmp.iAgg].pCExpr = pExpr; + pExpr->pAggInfo = pAggInfo; + pExpr->iAgg = tmp.iAgg; + return WRC_Prune; + } case TK_IF_NULL_ROW: case TK_AGG_COLUMN: case TK_COLUMN: { @@ -111390,72 +113962,14 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){ if( ALWAYS(pSrcList!=0) ){ SrcItem *pItem = pSrcList->a; for(i=0; inSrc; i++, pItem++){ - struct AggInfo_col *pCol; assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) ); if( pExpr->iTable==pItem->iCursor ){ - /* If we reach this point, it means that pExpr refers to a table - ** that is in the FROM clause of the aggregate query. - ** - ** Make an entry for the column in pAggInfo->aCol[] if there - ** is not an entry there already. - */ - int k; - pCol = pAggInfo->aCol; - for(k=0; knColumn; k++, pCol++){ - if( pCol->iTable==pExpr->iTable - && pCol->iColumn==pExpr->iColumn - && pExpr->op!=TK_IF_NULL_ROW - ){ - break; - } - } - if( (k>=pAggInfo->nColumn) - && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0 - ){ - pCol = &pAggInfo->aCol[k]; - assert( ExprUseYTab(pExpr) ); - pCol->pTab = pExpr->y.pTab; - pCol->iTable = pExpr->iTable; - pCol->iColumn = pExpr->iColumn; - pCol->iMem = ++pParse->nMem; - pCol->iSorterColumn = -1; - pCol->pCExpr = pExpr; - if( pAggInfo->pGroupBy && pExpr->op!=TK_IF_NULL_ROW ){ - int j, n; - ExprList *pGB = pAggInfo->pGroupBy; - struct ExprList_item *pTerm = pGB->a; - n = pGB->nExpr; - for(j=0; jpExpr; - if( pE->op==TK_COLUMN - && pE->iTable==pExpr->iTable - && pE->iColumn==pExpr->iColumn - ){ - pCol->iSorterColumn = j; - break; - } - } - } - if( pCol->iSorterColumn<0 ){ - pCol->iSorterColumn = pAggInfo->nSortingColumn++; - } - } - /* There is now an entry for pExpr in pAggInfo->aCol[] (either - ** because it was there before or because we just created it). - ** Convert the pExpr to be a TK_AGG_COLUMN referring to that - ** pAggInfo->aCol[] entry. - */ - ExprSetVVAProperty(pExpr, EP_NoReduce); - pExpr->pAggInfo = pAggInfo; - if( pExpr->op==TK_COLUMN ){ - pExpr->op = TK_AGG_COLUMN; - } - pExpr->iAgg = (i16)k; + findOrCreateAggInfoColumn(pParse, pAggInfo, pExpr); break; } /* endif pExpr->iTable==pItem->iCursor */ } /* end loop over pSrcList */ } - return WRC_Prune; + return WRC_Continue; } case TK_AGG_FUNCTION: { if( (pNC->ncFlags & NC_InAggFunc)==0 @@ -111480,7 +113994,6 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){ assert( !ExprHasProperty(pExpr, EP_xIsSelect) ); pItem = &pAggInfo->aFunc[i]; pItem->pFExpr = pExpr; - pItem->iMem = ++pParse->nMem; assert( ExprUseUToken(pExpr) ); pItem->pFunc = sqlite3FindFunction(pParse->db, pExpr->u.zToken, @@ -111609,6 +114122,37 @@ SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse *pParse){ pParse->nRangeReg = 0; } +/* +** Make sure sufficient registers have been allocated so that +** iReg is a valid register number. +*/ +SQLITE_PRIVATE void sqlite3TouchRegister(Parse *pParse, int iReg){ + if( pParse->nMemnMem = iReg; +} + +#if defined(SQLITE_ENABLE_STAT4) || defined(SQLITE_DEBUG) +/* +** Return the latest reusable register in the set of all registers. +** The value returned is no less than iMin. If any register iMin or +** greater is in permanent use, then return one more than that last +** permanent register. +*/ +SQLITE_PRIVATE int sqlite3FirstAvailableRegister(Parse *pParse, int iMin){ + const ExprList *pList = pParse->pConstExpr; + if( pList ){ + int i; + for(i=0; inExpr; i++){ + if( pList->a[i].u.iConstExprReg>=iMin ){ + iMin = pList->a[i].u.iConstExprReg + 1; + } + } + } + pParse->nTempReg = 0; + pParse->nRangeReg = 0; + return iMin; +} +#endif /* SQLITE_ENABLE_STAT4 || SQLITE_DEBUG */ + /* ** Validate that no temporary register falls within the range of ** iFirst..iLast, inclusive. This routine is only call from within assert() @@ -111628,6 +114172,14 @@ SQLITE_PRIVATE int sqlite3NoTempsInRange(Parse *pParse, int iFirst, int iLast){ return 0; } } + if( pParse->pConstExpr ){ + ExprList *pList = pParse->pConstExpr; + for(i=0; inExpr; i++){ + int iReg = pList->a[i].u.iConstExprReg; + if( iReg==0 ) continue; + if( iReg>=iFirst && iReg<=iLast ) return 0; + } + } return 1; } #endif /* SQLITE_DEBUG */ @@ -112178,7 +114730,7 @@ SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){ pNew->u.tab.pDfltList = sqlite3ExprListDup(db, pTab->u.tab.pDfltList, 0); pNew->pSchema = db->aDb[iDb].pSchema; pNew->u.tab.addColOffset = pTab->u.tab.addColOffset; - pNew->nTabRef = 1; + assert( pNew->nTabRef==1 ); exit_begin_add_column: sqlite3SrcListDelete(db, pSrc); @@ -112377,13 +114929,14 @@ static void renameTokenCheckAll(Parse *pParse, const void *pPtr){ assert( pParse->db->mallocFailed==0 || pParse->nErr!=0 ); if( pParse->nErr==0 ){ const RenameToken *p; - u8 i = 0; + u32 i = 1; for(p=pParse->pRename; p; p=p->pNext){ if( p->p ){ assert( p->p!=pPtr ); - i += *(u8*)(p->p); + i += *(u8*)(p->p) | 1; } } + assert( i>0 ); } } #else @@ -112682,7 +115235,7 @@ static RenameToken *renameColumnTokenNext(RenameCtx *pCtx){ } /* -** An error occured while parsing or otherwise processing a database +** An error occurred while parsing or otherwise processing a database ** object (either pParse->pNewTable, pNewIndex or pNewTrigger) as part of an ** ALTER TABLE RENAME COLUMN program. The error message emitted by the ** sub-routine is currently stored in pParse->zErrMsg. This function @@ -112914,6 +115467,19 @@ static int renameEditSql( return rc; } +/* +** Set all pEList->a[].fg.eEName fields in the expression-list to val. +*/ +static void renameSetENames(ExprList *pEList, int val){ + if( pEList ){ + int i; + for(i=0; inExpr; i++){ + assert( val==ENAME_NAME || pEList->a[i].fg.eEName==ENAME_NAME ); + pEList->a[i].fg.eEName = val; + } + } +} + /* ** Resolve all symbols in the trigger at pParse->pNewTrigger, assuming ** it was read from the schema of database zDb. Return SQLITE_OK if @@ -112961,7 +115527,17 @@ static int renameResolveTrigger(Parse *pParse){ pSrc = 0; rc = SQLITE_NOMEM; }else{ + /* pStep->pExprList contains an expression-list used for an UPDATE + ** statement. So the a[].zEName values are the RHS of the + ** "
  • = " clauses of the UPDATE statement. So, before + ** running SelectPrep(), change all the eEName values in + ** pStep->pExprList to ENAME_SPAN (from their current value of + ** ENAME_NAME). This is to prevent any ids in ON() clauses that are + ** part of pSrc from being incorrectly resolved against the + ** a[].zEName values as if they were column aliases. */ + renameSetENames(pStep->pExprList, ENAME_SPAN); sqlite3SelectPrep(pParse, pSel, 0); + renameSetENames(pStep->pExprList, ENAME_NAME); rc = pParse->nErr ? SQLITE_ERROR : SQLITE_OK; assert( pStep->pExprList==0 || pStep->pExprList==pSel->pEList ); assert( pSrc==pSel->pSrc ); @@ -114910,11 +117486,15 @@ static void analyzeOneTable( int regIdxname = iMem++; /* Register containing index name */ int regStat1 = iMem++; /* Value for the stat column of sqlite_stat1 */ int regPrev = iMem; /* MUST BE LAST (see below) */ +#ifdef SQLITE_ENABLE_STAT4 + int doOnce = 1; /* Flag for a one-time computation */ +#endif #ifdef SQLITE_ENABLE_PREUPDATE_HOOK Table *pStat1 = 0; #endif - pParse->nMem = MAX(pParse->nMem, iMem); + sqlite3TouchRegister(pParse, iMem); + assert( sqlite3NoTempsInRange(pParse, regNewRowid, iMem) ); v = sqlite3GetVdbe(pParse); if( v==0 || NEVER(pTab==0) ){ return; @@ -115020,7 +117600,7 @@ static void analyzeOneTable( ** the regPrev array and a trailing rowid (the rowid slot is required ** when building a record to insert into the sample column of ** the sqlite_stat4 table. */ - pParse->nMem = MAX(pParse->nMem, regPrev+nColTest); + sqlite3TouchRegister(pParse, regPrev+nColTest); /* Open a read-only cursor on the index being analyzed. */ assert( iDb==sqlite3SchemaToIndex(db, pIdx->pSchema) ); @@ -115192,7 +117772,35 @@ static void analyzeOneTable( int addrIsNull; u8 seekOp = HasRowid(pTab) ? OP_NotExists : OP_NotFound; - pParse->nMem = MAX(pParse->nMem, regCol+nCol); + if( doOnce ){ + int mxCol = nCol; + Index *pX; + + /* Compute the maximum number of columns in any index */ + for(pX=pTab->pIndex; pX; pX=pX->pNext){ + int nColX; /* Number of columns in pX */ + if( !HasRowid(pTab) && IsPrimaryKeyIndex(pX) ){ + nColX = pX->nKeyCol; + }else{ + nColX = pX->nColumn; + } + if( nColX>mxCol ) mxCol = nColX; + } + + /* Allocate space to compute results for the largest index */ + sqlite3TouchRegister(pParse, regCol+mxCol); + doOnce = 0; +#ifdef SQLITE_DEBUG + /* Verify that the call to sqlite3ClearTempRegCache() below + ** really is needed. + ** https://sqlite.org/forum/forumpost/83cb4a95a0 (2023-03-25) + */ + testcase( !sqlite3NoTempsInRange(pParse, regEq, regCol+mxCol) ); +#endif + sqlite3ClearTempRegCache(pParse); /* tag-20230325-1 */ + assert( sqlite3NoTempsInRange(pParse, regEq, regCol+mxCol) ); + } + assert( sqlite3NoTempsInRange(pParse, regEq, regCol+nCol) ); addrNext = sqlite3VdbeCurrentAddr(v); callStatGet(pParse, regStat, STAT_GET_ROWID, regSampleRowid); @@ -115273,6 +117881,11 @@ static void analyzeDatabase(Parse *pParse, int iDb){ for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){ Table *pTab = (Table*)sqliteHashData(k); analyzeOneTable(pParse, pTab, 0, iStatCur, iMem, iTab); +#ifdef SQLITE_ENABLE_STAT4 + iMem = sqlite3FirstAvailableRegister(pParse, iMem); +#else + assert( iMem==sqlite3FirstAvailableRegister(pParse,iMem) ); +#endif } loadAnalysis(pParse, iDb); } @@ -115513,6 +118126,8 @@ static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){ ** and its contents. */ SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3 *db, Index *pIdx){ + assert( db!=0 ); + assert( pIdx!=0 ); #ifdef SQLITE_ENABLE_STAT4 if( pIdx->aSample ){ int j; @@ -115522,7 +118137,7 @@ SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3 *db, Index *pIdx){ } sqlite3DbFree(db, pIdx->aSample); } - if( db && db->pnBytesFreed==0 ){ + if( db->pnBytesFreed==0 ){ pIdx->nSample = 0; pIdx->aSample = 0; } @@ -115658,6 +118273,10 @@ static int loadStatTbl( pIdx = findIndexOrPrimaryKey(db, zIndex, zDb); assert( pIdx==0 || pIdx->nSample==0 ); if( pIdx==0 ) continue; + if( pIdx->aSample!=0 ){ + /* The same index appears in sqlite_stat4 under multiple names */ + continue; + } assert( !HasRowid(pIdx->pTable) || pIdx->nColumn==pIdx->nKeyCol+1 ); if( !HasRowid(pIdx->pTable) && IsPrimaryKeyIndex(pIdx) ){ nIdxCol = pIdx->nKeyCol; @@ -115665,6 +118284,7 @@ static int loadStatTbl( nIdxCol = pIdx->nColumn; } pIdx->nSampleCol = nIdxCol; + pIdx->mxSample = nSample; nByte = sizeof(IndexSample) * nSample; nByte += sizeof(tRowcnt) * nIdxCol * 3 * nSample; nByte += nIdxCol * sizeof(tRowcnt); /* Space for Index.aAvgEq[] */ @@ -115704,6 +118324,11 @@ static int loadStatTbl( if( zIndex==0 ) continue; pIdx = findIndexOrPrimaryKey(db, zIndex, zDb); if( pIdx==0 ) continue; + if( pIdx->nSample>=pIdx->mxSample ){ + /* Too many slots used because the same index appears in + ** sqlite_stat4 using multiple names */ + continue; + } /* This next condition is true if data has already been loaded from ** the sqlite_stat4 table. */ nCol = pIdx->nSampleCol; @@ -115716,14 +118341,15 @@ static int loadStatTbl( decodeIntArray((char*)sqlite3_column_text(pStmt,2),nCol,pSample->anLt,0,0); decodeIntArray((char*)sqlite3_column_text(pStmt,3),nCol,pSample->anDLt,0,0); - /* Take a copy of the sample. Add two 0x00 bytes the end of the buffer. + /* Take a copy of the sample. Add 8 extra 0x00 bytes the end of the buffer. ** This is in case the sample record is corrupted. In that case, the ** sqlite3VdbeRecordCompare() may read up to two varints past the ** end of the allocated buffer before it realizes it is dealing with - ** a corrupt record. Adding the two 0x00 bytes prevents this from causing + ** a corrupt record. Or it might try to read a large integer from the + ** buffer. In any case, eight 0x00 bytes prevents this from causing ** a buffer overread. */ pSample->n = sqlite3_column_bytes(pStmt, 4); - pSample->p = sqlite3DbMallocZero(db, pSample->n + 2); + pSample->p = sqlite3DbMallocZero(db, pSample->n + 8); if( pSample->p==0 ){ sqlite3_finalize(pStmt); return SQLITE_NOMEM_BKPT; @@ -115747,11 +118373,12 @@ static int loadStat4(sqlite3 *db, const char *zDb){ const Table *pStat4; assert( db->lookaside.bDisable ); - if( (pStat4 = sqlite3FindTable(db, "sqlite_stat4", zDb))!=0 + if( OptimizationEnabled(db, SQLITE_Stat4) + && (pStat4 = sqlite3FindTable(db, "sqlite_stat4", zDb))!=0 && IsOrdinaryTable(pStat4) ){ rc = loadStatTbl(db, - "SELECT idx,count(*) FROM %Q.sqlite_stat4 GROUP BY idx", + "SELECT idx,count(*) FROM %Q.sqlite_stat4 GROUP BY idx COLLATE nocase", "SELECT idx,neq,nlt,ndlt,sample FROM %Q.sqlite_stat4", zDb ); @@ -115941,7 +118568,7 @@ static void attachFunc( char *zErr = 0; unsigned int flags; Db *aNew; /* New array of Db pointers */ - Db *pNew; /* Db object for the newly attached database */ + Db *pNew = 0; /* Db object for the newly attached database */ char *zErrDyn = 0; sqlite3_vfs *pVfs; @@ -115961,13 +118588,26 @@ static void attachFunc( /* This is not a real ATTACH. Instead, this routine is being called ** from sqlite3_deserialize() to close database db->init.iDb and ** reopen it as a MemDB */ + Btree *pNewBt = 0; pVfs = sqlite3_vfs_find("memdb"); if( pVfs==0 ) return; - pNew = &db->aDb[db->init.iDb]; - if( pNew->pBt ) sqlite3BtreeClose(pNew->pBt); - pNew->pBt = 0; - pNew->pSchema = 0; - rc = sqlite3BtreeOpen(pVfs, "x\0", db, &pNew->pBt, 0, SQLITE_OPEN_MAIN_DB); + rc = sqlite3BtreeOpen(pVfs, "x\0", db, &pNewBt, 0, SQLITE_OPEN_MAIN_DB); + if( rc==SQLITE_OK ){ + Schema *pNewSchema = sqlite3SchemaGet(db, pNewBt); + if( pNewSchema ){ + /* Both the Btree and the new Schema were allocated successfully. + ** Close the old db and update the aDb[] slot with the new memdb + ** values. */ + pNew = &db->aDb[db->init.iDb]; + if( ALWAYS(pNew->pBt) ) sqlite3BtreeClose(pNew->pBt); + pNew->pBt = pNewBt; + pNew->pSchema = pNewSchema; + }else{ + sqlite3BtreeClose(pNewBt); + rc = SQLITE_NOMEM; + } + } + if( rc ) goto attach_error; }else{ /* This is a real ATTACH ** @@ -116080,7 +118720,7 @@ static void attachFunc( } #endif if( rc ){ - if( !REOPEN_AS_MEMDB(db) ){ + if( ALWAYS(!REOPEN_AS_MEMDB(db)) ){ int iDb = db->nDb - 1; assert( iDb>=2 ); if( db->aDb[iDb].pBt ){ @@ -116197,6 +118837,8 @@ static void codeAttach( sqlite3* db = pParse->db; int regArgs; + if( SQLITE_OK!=sqlite3ReadSchema(pParse) ) goto attach_end; + if( pParse->nErr ) goto attach_end; memset(&sName, 0, sizeof(NameContext)); sName.pParse = pParse; @@ -116665,7 +119307,7 @@ SQLITE_PRIVATE int sqlite3AuthCheck( sqlite3 *db = pParse->db; int rc; - /* Don't do any authorization checks if the database is initialising + /* Don't do any authorization checks if the database is initializing ** or if the parser is being invoked from within sqlite3_declare_vtab. */ assert( !IN_RENAME_OBJECT || db->xAuth==0 ); @@ -116966,15 +119608,17 @@ SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){ pParse->nVtabLock = 0; #endif +#ifndef SQLITE_OMIT_SHARED_CACHE /* Once all the cookies have been verified and transactions opened, ** obtain the required table-locks. This is a no-op unless the ** shared-cache feature is enabled. */ - codeTableLocks(pParse); + if( pParse->nTableLock ) codeTableLocks(pParse); +#endif /* Initialize any AUTOINCREMENT data structures required. */ - sqlite3AutoincrementBegin(pParse); + if( pParse->pAinc ) sqlite3AutoincrementBegin(pParse); /* Code constant expressions that where factored out of inner loops. ** @@ -117039,6 +119683,7 @@ SQLITE_PRIVATE void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){ char saveBuf[PARSE_TAIL_SZ]; if( pParse->nErr ) return; + if( pParse->eParseMode ) return; assert( pParse->nested<10 ); /* Nesting should only be of limited depth */ va_start(ap, zFormat); zSql = sqlite3VMPrintf(db, zFormat, ap); @@ -117486,7 +120131,7 @@ SQLITE_PRIVATE void sqlite3ColumnSetColl( } /* -** Return the collating squence name for a column +** Return the collating sequence name for a column */ SQLITE_PRIVATE const char *sqlite3ColumnColl(Column *pCol){ const char *z; @@ -117579,7 +120224,7 @@ static void SQLITE_NOINLINE deleteTable(sqlite3 *db, Table *pTable){ if( IsOrdinaryTable(pTable) ){ sqlite3FkDelete(db, pTable); } -#ifndef SQLITE_OMIT_VIRTUAL_TABLE +#ifndef SQLITE_OMIT_VIRTUALTABLE else if( IsVirtual(pTable) ){ sqlite3VtabClear(db, pTable); } @@ -118182,7 +120827,7 @@ SQLITE_PRIVATE void sqlite3AddReturning(Parse *pParse, ExprList *pList){ if( pParse->pNewTrigger ){ sqlite3ErrorMsg(pParse, "cannot use RETURNING in a trigger"); }else{ - assert( pParse->bReturning==0 ); + assert( pParse->bReturning==0 || pParse->ifNotExists ); } pParse->bReturning = 1; pRet = sqlite3DbMallocZero(db, sizeof(*pRet)); @@ -118208,7 +120853,8 @@ SQLITE_PRIVATE void sqlite3AddReturning(Parse *pParse, ExprList *pList){ pRet->retTStep.pTrig = &pRet->retTrig; pRet->retTStep.pExprList = pList; pHash = &(db->aDb[1].pSchema->trigHash); - assert( sqlite3HashFind(pHash, RETURNING_TRIGGER_NAME)==0 || pParse->nErr ); + assert( sqlite3HashFind(pHash, RETURNING_TRIGGER_NAME)==0 + || pParse->nErr || pParse->ifNotExists ); if( sqlite3HashInsert(pHash, RETURNING_TRIGGER_NAME, &pRet->retTrig) ==&pRet->retTrig ){ sqlite3OomFault(db); @@ -118243,7 +120889,7 @@ SQLITE_PRIVATE void sqlite3AddColumn(Parse *pParse, Token sName, Token sType){ } if( !IN_RENAME_OBJECT ) sqlite3DequoteToken(&sName); - /* Because keywords GENERATE ALWAYS can be converted into indentifiers + /* Because keywords GENERATE ALWAYS can be converted into identifiers ** by the parser, we can sometimes end up with a typename that ends ** with "generated always". Check for this case and omit the surplus ** text. */ @@ -118464,7 +121110,7 @@ SQLITE_PRIVATE void sqlite3AddDefaultValue( Parse *pParse, /* Parsing context */ Expr *pExpr, /* The parsed expression of the default value */ const char *zStart, /* Start of the default value text */ - const char *zEnd /* First character past end of defaut value text */ + const char *zEnd /* First character past end of default value text */ ){ Table *p; Column *pCol; @@ -118736,6 +121382,14 @@ SQLITE_PRIVATE void sqlite3AddGenerated(Parse *pParse, Expr *pExpr, Token *pType if( pCol->colFlags & COLFLAG_PRIMKEY ){ makeColumnPartOfPrimaryKey(pParse, pCol); /* For the error message */ } + if( ALWAYS(pExpr) && pExpr->op==TK_ID ){ + /* The value of a generated column needs to be a real expression, not + ** just a reference to another column, in order for covering index + ** optimizations to work correctly. So if the value is not an expression, + ** turn it into one by adding a unary "+" operator. */ + pExpr = sqlite3PExpr(pParse, TK_UPLUS, pExpr, 0); + } + if( pExpr && pExpr->op!=TK_RAISE ) pExpr->affExpr = pCol->affinity; sqlite3ColumnSetExpr(pParse, pTab, pCol, pExpr); pExpr = 0; goto generated_done; @@ -118804,7 +121458,7 @@ static int identLength(const char *z){ ** to the specified offset in the buffer and updates *pIdx to refer ** to the first byte after the last byte written before returning. ** -** If the string zSignedIdent consists entirely of alpha-numeric +** If the string zSignedIdent consists entirely of alphanumeric ** characters, does not begin with a digit and is not an SQL keyword, ** then it is copied to the output buffer exactly as it is. Otherwise, ** it is quoted using double-quotes. @@ -118872,7 +121526,8 @@ static char *createTableStmt(sqlite3 *db, Table *p){ /* SQLITE_AFF_TEXT */ " TEXT", /* SQLITE_AFF_NUMERIC */ " NUM", /* SQLITE_AFF_INTEGER */ " INT", - /* SQLITE_AFF_REAL */ " REAL" + /* SQLITE_AFF_REAL */ " REAL", + /* SQLITE_AFF_FLEXNUM */ " NUM", }; int len; const char *zType; @@ -118888,10 +121543,12 @@ static char *createTableStmt(sqlite3 *db, Table *p){ testcase( pCol->affinity==SQLITE_AFF_NUMERIC ); testcase( pCol->affinity==SQLITE_AFF_INTEGER ); testcase( pCol->affinity==SQLITE_AFF_REAL ); + testcase( pCol->affinity==SQLITE_AFF_FLEXNUM ); zType = azType[pCol->affinity - SQLITE_AFF_BLOB]; len = sqlite3Strlen30(zType); assert( pCol->affinity==SQLITE_AFF_BLOB + || pCol->affinity==SQLITE_AFF_FLEXNUM || pCol->affinity==sqlite3AffinityType(zType, 0) ); memcpy(&zStmt[k], zType, len); k += len; @@ -118953,7 +121610,7 @@ static void estimateIndexWidth(Index *pIdx){ for(i=0; inColumn; i++){ i16 x = pIdx->aiColumn[i]; assert( xpTable->nCol ); - wIndex += x<0 ? 1 : aCol[pIdx->aiColumn[i]].szEst; + wIndex += x<0 ? 1 : aCol[x].szEst; } pIdx->szIdxRow = sqlite3LogEst(wIndex*4); } @@ -119306,6 +121963,7 @@ SQLITE_PRIVATE int sqlite3ShadowTableName(sqlite3 *db, const char *zName){ ** not pass them into code generator routines by mistake. */ static int markImmutableExprStep(Walker *pWalker, Expr *pExpr){ + (void)pWalker; ExprSetVVAProperty(pExpr, EP_Immutable); return WRC_Continue; } @@ -119872,8 +122530,7 @@ static SQLITE_NOINLINE int viewGetColumnNames(Parse *pParse, Table *pTable){ && pTable->nCol==pSel->pEList->nExpr ){ assert( db->mallocFailed==0 ); - sqlite3SelectAddColumnTypeAndCollation(pParse, pTable, pSel, - SQLITE_AFF_NONE); + sqlite3SubqueryColumnTypes(pParse, pTable, pSel, SQLITE_AFF_NONE); } }else{ /* CREATE VIEW name AS... without an argument list. Construct @@ -120691,7 +123348,7 @@ SQLITE_PRIVATE void sqlite3CreateIndex( #ifndef SQLITE_OMIT_TEMPDB /* If the index name was unqualified, check if the table ** is a temp table. If so, set the database to 1. Do not do this - ** if initialising a database schema. + ** if initializing a database schema. */ if( !db->init.busy ){ pTab = sqlite3SrcListLookup(pParse, pTblName); @@ -122348,7 +125005,7 @@ SQLITE_PRIVATE void sqlite3CteDelete(sqlite3 *db, Cte *pCte){ /* ** This routine is invoked once per CTE by the parser while parsing a -** WITH clause. The CTE described by teh third argument is added to +** WITH clause. The CTE described by the third argument is added to ** the WITH clause of the second argument. If the second argument is ** NULL, then a new WITH argument is created. */ @@ -122599,6 +125256,7 @@ SQLITE_PRIVATE void sqlite3SetTextEncoding(sqlite3 *db, u8 enc){ ** strings is BINARY. */ db->pDfltColl = sqlite3FindCollSeq(db, enc, sqlite3StrBINARY, 0); + sqlite3ExpirePreparedStatements(db, 1); } /* @@ -122989,8 +125647,9 @@ SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse *pParse, SrcList *pSrc){ Table *pTab; assert( pItem && pSrc->nSrc>=1 ); pTab = sqlite3LocateTableItem(pParse, 0, pItem); - sqlite3DeleteTable(pParse->db, pItem->pTab); + if( pItem->pTab ) sqlite3DeleteTable(pParse->db, pItem->pTab); pItem->pTab = pTab; + pItem->fg.notCte = 1; if( pTab ){ pTab->nTabRef++; if( pItem->fg.isIndexedBy && sqlite3IndexedByLookup(pParse, pItem) ){ @@ -123070,13 +125729,15 @@ static int tabIsReadOnly(Parse *pParse, Table *pTab){ ** If pTab is writable but other errors have occurred -> return 1. ** If pTab is writable and no prior errors -> return 0; */ -SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){ +SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, Trigger *pTrigger){ if( tabIsReadOnly(pParse, pTab) ){ sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName); return 1; } #ifndef SQLITE_OMIT_VIEW - if( !viewOk && IsView(pTab) ){ + if( IsView(pTab) + && (pTrigger==0 || (pTrigger->bReturning && pTrigger->pNext==0)) + ){ sqlite3ErrorMsg(pParse,"cannot modify %s because it is a view",pTab->zName); return 1; } @@ -123141,7 +125802,7 @@ SQLITE_PRIVATE Expr *sqlite3LimitWhere( sqlite3 *db = pParse->db; Expr *pLhs = NULL; /* LHS of IN(SELECT...) operator */ Expr *pInClause = NULL; /* WHERE rowid IN ( select ) */ - ExprList *pEList = NULL; /* Expression list contaning only pSelectRowid */ + ExprList *pEList = NULL; /* Expression list containing only pSelectRowid*/ SrcList *pSelectSrc = NULL; /* SELECT rowid FROM x ... (dup of pSrc) */ Select *pSelect = NULL; /* Complete SELECT tree */ Table *pTab; @@ -123179,14 +125840,20 @@ SQLITE_PRIVATE Expr *sqlite3LimitWhere( ); }else{ Index *pPk = sqlite3PrimaryKeyIndex(pTab); + assert( pPk!=0 ); + assert( pPk->nKeyCol>=1 ); if( pPk->nKeyCol==1 ){ - const char *zName = pTab->aCol[pPk->aiColumn[0]].zCnName; + const char *zName; + assert( pPk->aiColumn[0]>=0 && pPk->aiColumn[0]nCol ); + zName = pTab->aCol[pPk->aiColumn[0]].zCnName; pLhs = sqlite3Expr(db, TK_ID, zName); pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ID, zName)); }else{ int i; for(i=0; inKeyCol; i++){ - Expr *p = sqlite3Expr(db, TK_ID, pTab->aCol[pPk->aiColumn[i]].zCnName); + Expr *p; + assert( pPk->aiColumn[i]>=0 && pPk->aiColumn[i]nCol ); + p = sqlite3Expr(db, TK_ID, pTab->aCol[pPk->aiColumn[i]].zCnName); pEList = sqlite3ExprListAppend(pParse, pEList, p); } pLhs = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); @@ -123215,7 +125882,7 @@ SQLITE_PRIVATE Expr *sqlite3LimitWhere( pOrderBy,0,pLimit ); - /* now generate the new WHERE rowid IN clause for the DELETE/UDPATE */ + /* now generate the new WHERE rowid IN clause for the DELETE/UPDATE */ pInClause = sqlite3PExpr(pParse, TK_IN, pLhs, 0); sqlite3PExprAddSelect(pParse, pInClause, pSelect); return pInClause; @@ -123330,7 +125997,7 @@ SQLITE_PRIVATE void sqlite3DeleteFrom( goto delete_from_cleanup; } - if( sqlite3IsReadOnly(pParse, pTab, (pTrigger?1:0)) ){ + if( sqlite3IsReadOnly(pParse, pTab, pTrigger) ){ goto delete_from_cleanup; } iDb = sqlite3SchemaToIndex(db, pTab->pSchema); @@ -123439,12 +126106,12 @@ SQLITE_PRIVATE void sqlite3DeleteFrom( #endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */ { u16 wcf = WHERE_ONEPASS_DESIRED|WHERE_DUPLICATES_OK; - if( sNC.ncFlags & NC_VarSelect ) bComplex = 1; + if( sNC.ncFlags & NC_Subquery ) bComplex = 1; wcf |= (bComplex ? 0 : WHERE_ONEPASS_MULTIROW); if( HasRowid(pTab) ){ /* For a rowid table, initialize the RowSet to an empty set */ pPk = 0; - nPk = 1; + assert( nPk==1 ); iRowSet = ++pParse->nMem; sqlite3VdbeAddOp2(v, OP_Null, 0, iRowSet); }else{ @@ -123472,7 +126139,8 @@ SQLITE_PRIVATE void sqlite3DeleteFrom( if( pWInfo==0 ) goto delete_from_cleanup; eOnePass = sqlite3WhereOkOnePass(pWInfo, aiCurOnePass); assert( IsVirtual(pTab)==0 || eOnePass!=ONEPASS_MULTI ); - assert( IsVirtual(pTab) || bComplex || eOnePass!=ONEPASS_OFF ); + assert( IsVirtual(pTab) || bComplex || eOnePass!=ONEPASS_OFF + || OptimizationDisabled(db, SQLITE_OnePass) ); if( eOnePass!=ONEPASS_SINGLE ) sqlite3MultiWrite(pParse); if( sqlite3WhereUsesDeferredSeek(pWInfo) ){ sqlite3VdbeAddOp1(v, OP_FinishSeek, iTabCur); @@ -123809,9 +126477,11 @@ SQLITE_PRIVATE void sqlite3GenerateRowDelete( sqlite3FkActions(pParse, pTab, 0, iOld, 0, 0); /* Invoke AFTER DELETE trigger programs. */ - sqlite3CodeRowTrigger(pParse, pTrigger, - TK_DELETE, 0, TRIGGER_AFTER, pTab, iOld, onconf, iLabel - ); + if( pTrigger ){ + sqlite3CodeRowTrigger(pParse, pTrigger, + TK_DELETE, 0, TRIGGER_AFTER, pTab, iOld, onconf, iLabel + ); + } /* Jump here if the row had already been deleted before any BEFORE ** trigger programs were invoked. Or if a trigger program throws a @@ -124124,6 +126794,42 @@ static void lengthFunc( } } +/* +** Implementation of the octet_length() function +*/ +static void bytelengthFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + assert( argc==1 ); + UNUSED_PARAMETER(argc); + switch( sqlite3_value_type(argv[0]) ){ + case SQLITE_BLOB: { + sqlite3_result_int(context, sqlite3_value_bytes(argv[0])); + break; + } + case SQLITE_INTEGER: + case SQLITE_FLOAT: { + i64 m = sqlite3_context_db_handle(context)->enc<=SQLITE_UTF8 ? 1 : 2; + sqlite3_result_int64(context, sqlite3_value_bytes(argv[0])*m); + break; + } + case SQLITE_TEXT: { + if( sqlite3_value_encoding(argv[0])<=SQLITE_UTF8 ){ + sqlite3_result_int(context, sqlite3_value_bytes(argv[0])); + }else{ + sqlite3_result_int(context, sqlite3_value_bytes16(argv[0])); + } + break; + } + default: { + sqlite3_result_null(context); + break; + } + } +} + /* ** Implementation of the abs() function. ** @@ -124400,7 +127106,7 @@ static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){ }else if( n==0 ){ r = (double)((sqlite_int64)(r+(r<0?-0.5:+0.5))); }else{ - zBuf = sqlite3_mprintf("%.*f",n,r); + zBuf = sqlite3_mprintf("%!.*f",n,r); if( zBuf==0 ){ sqlite3_result_error_nomem(context); return; @@ -124600,7 +127306,7 @@ struct compareInfo { /* ** For LIKE and GLOB matching on EBCDIC machines, assume that every -** character is exactly one byte in size. Also, provde the Utf8Read() +** character is exactly one byte in size. Also, provide the Utf8Read() ** macro for fast reading of the next character in the common case where ** the next character is ASCII. */ @@ -124833,7 +127539,7 @@ SQLITE_API int sqlite3_like_count = 0; /* ** Implementation of the like() SQL function. This function implements -** the build-in LIKE operator. The first argument to the function is the +** the built-in LIKE operator. The first argument to the function is the ** pattern and the second argument is the string. So, the SQL statements: ** ** A LIKE B @@ -125057,7 +127763,7 @@ SQLITE_PRIVATE void sqlite3QuoteValue(StrAccum *pStr, sqlite3_value *pValue){ } case SQLITE_BLOB: { char const *zBlob = sqlite3_value_blob(pValue); - int nBlob = sqlite3_value_bytes(pValue); + i64 nBlob = sqlite3_value_bytes(pValue); assert( zBlob==sqlite3_value_blob(pValue) ); /* No encoding change */ sqlite3StrAccumEnlarge(pStr, nBlob*2 + 4); if( pStr->accError==0 ){ @@ -125166,6 +127872,7 @@ static void charFunc( *zOut++ = 0x80 + (u8)(c & 0x3F); } \ } + *zOut = 0; sqlite3_result_text64(context, (char*)z, zOut-z, sqlite3_free, SQLITE_UTF8); } @@ -125198,6 +127905,96 @@ static void hexFunc( } } +/* +** Buffer zStr contains nStr bytes of utf-8 encoded text. Return 1 if zStr +** contains character ch, or 0 if it does not. +*/ +static int strContainsChar(const u8 *zStr, int nStr, u32 ch){ + const u8 *zEnd = &zStr[nStr]; + const u8 *z = zStr; + while( zrSum; + volatile double t = s + r; + if( fabs(s) > fabs(r) ){ + pSum->rErr += (s - t) + r; + }else{ + pSum->rErr += (r - t) + s; + } + pSum->rSum = t; +} + +/* +** Add a (possibly large) integer to the running sum. +*/ +static void kahanBabuskaNeumaierStepInt64(volatile SumCtx *pSum, i64 iVal){ + if( iVal<=-4503599627370496LL || iVal>=+4503599627370496LL ){ + i64 iBig, iSm; + iSm = iVal % 16384; + iBig = iVal - iSm; + kahanBabuskaNeumaierStep(pSum, iBig); + kahanBabuskaNeumaierStep(pSum, iSm); + }else{ + kahanBabuskaNeumaierStep(pSum, (double)iVal); + } +} + +/* +** Initialize the Kahan-Babaska-Neumaier sum from a 64-bit integer +*/ +static void kahanBabuskaNeumaierInit( + volatile SumCtx *p, + i64 iVal +){ + if( iVal<=-4503599627370496LL || iVal>=+4503599627370496LL ){ + i64 iSm = iVal % 16384; + p->rSum = (double)(iVal - iSm); + p->rErr = (double)iSm; + }else{ + p->rSum = (double)iVal; + p->rErr = 0.0; + } +} + /* ** Routines used to compute the sum, average, and total. ** @@ -125542,15 +128397,29 @@ static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){ type = sqlite3_value_numeric_type(argv[0]); if( p && type!=SQLITE_NULL ){ p->cnt++; - if( type==SQLITE_INTEGER ){ - i64 v = sqlite3_value_int64(argv[0]); - p->rSum += v; - if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){ - p->approx = p->overflow = 1; + if( p->approx==0 ){ + if( type!=SQLITE_INTEGER ){ + kahanBabuskaNeumaierInit(p, p->iSum); + p->approx = 1; + kahanBabuskaNeumaierStep(p, sqlite3_value_double(argv[0])); + }else{ + i64 x = p->iSum; + if( sqlite3AddInt64(&x, sqlite3_value_int64(argv[0]))==0 ){ + p->iSum = x; + }else{ + p->ovrfl = 1; + kahanBabuskaNeumaierInit(p, p->iSum); + p->approx = 1; + kahanBabuskaNeumaierStepInt64(p, sqlite3_value_int64(argv[0])); + } } }else{ - p->rSum += sqlite3_value_double(argv[0]); - p->approx = 1; + if( type==SQLITE_INTEGER ){ + kahanBabuskaNeumaierStepInt64(p, sqlite3_value_int64(argv[0])); + }else{ + p->ovrfl = 0; + kahanBabuskaNeumaierStep(p, sqlite3_value_double(argv[0])); + } } } } @@ -125567,13 +128436,18 @@ static void sumInverse(sqlite3_context *context, int argc, sqlite3_value**argv){ if( ALWAYS(p) && type!=SQLITE_NULL ){ assert( p->cnt>0 ); p->cnt--; - assert( type==SQLITE_INTEGER || p->approx ); - if( type==SQLITE_INTEGER && p->approx==0 ){ - i64 v = sqlite3_value_int64(argv[0]); - p->rSum -= v; - p->iSum -= v; + if( !p->approx ){ + p->iSum -= sqlite3_value_int64(argv[0]); + }else if( type==SQLITE_INTEGER ){ + i64 iVal = sqlite3_value_int64(argv[0]); + if( iVal!=SMALLEST_INT64 ){ + kahanBabuskaNeumaierStepInt64(p, -iVal); + }else{ + kahanBabuskaNeumaierStepInt64(p, LARGEST_INT64); + kahanBabuskaNeumaierStepInt64(p, 1); + } }else{ - p->rSum -= sqlite3_value_double(argv[0]); + kahanBabuskaNeumaierStep(p, -sqlite3_value_double(argv[0])); } } } @@ -125584,10 +128458,14 @@ static void sumFinalize(sqlite3_context *context){ SumCtx *p; p = sqlite3_aggregate_context(context, 0); if( p && p->cnt>0 ){ - if( p->overflow ){ - sqlite3_result_error(context,"integer overflow",-1); - }else if( p->approx ){ - sqlite3_result_double(context, p->rSum); + if( p->approx ){ + if( p->ovrfl ){ + sqlite3_result_error(context,"integer overflow",-1); + }else if( !sqlite3IsNaN(p->rErr) ){ + sqlite3_result_double(context, p->rSum+p->rErr); + }else{ + sqlite3_result_double(context, p->rSum); + } }else{ sqlite3_result_int64(context, p->iSum); } @@ -125597,14 +128475,29 @@ static void avgFinalize(sqlite3_context *context){ SumCtx *p; p = sqlite3_aggregate_context(context, 0); if( p && p->cnt>0 ){ - sqlite3_result_double(context, p->rSum/(double)p->cnt); + double r; + if( p->approx ){ + r = p->rSum; + if( !sqlite3IsNaN(p->rErr) ) r += p->rErr; + }else{ + r = (double)(p->iSum); + } + sqlite3_result_double(context, r/(double)p->cnt); } } static void totalFinalize(sqlite3_context *context){ SumCtx *p; + double r = 0.0; p = sqlite3_aggregate_context(context, 0); - /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */ - sqlite3_result_double(context, p ? p->rSum : (double)0); + if( p ){ + if( p->approx ){ + r = p->rSum; + if( !sqlite3IsNaN(p->rErr) ) r += p->rErr; + }else{ + r = (double)(p->iSum); + } + } + sqlite3_result_double(context, r); } /* @@ -125826,7 +128719,7 @@ static void groupConcatInverse( if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; pGCC = (GroupConcatCtx*)sqlite3_aggregate_context(context, sizeof(*pGCC)); /* pGCC is always non-NULL since groupConcatStep() will have always - ** run frist to initialize it */ + ** run first to initialize it */ if( ALWAYS(pGCC) ){ int nVS; /* Must call sqlite3_value_text() to convert the argument into text prior @@ -125910,8 +128803,10 @@ SQLITE_PRIVATE void sqlite3RegisterPerConnectionBuiltinFunctions(sqlite3 *db){ ** sensitive. */ SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){ + FuncDef *pDef; struct compareInfo *pInfo; int flags; + int nArg; if( caseSensitive ){ pInfo = (struct compareInfo*)&likeInfoAlt; flags = SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE; @@ -125919,10 +128814,13 @@ SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive) pInfo = (struct compareInfo*)&likeInfoNorm; flags = SQLITE_FUNC_LIKE; } - sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0); - sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0, 0, 0); - sqlite3FindFunction(db, "like", 2, SQLITE_UTF8, 0)->funcFlags |= flags; - sqlite3FindFunction(db, "like", 3, SQLITE_UTF8, 0)->funcFlags |= flags; + for(nArg=2; nArg<=3; nArg++){ + sqlite3CreateFunc(db, "like", nArg, SQLITE_UTF8, pInfo, likeFunc, + 0, 0, 0, 0, 0); + pDef = sqlite3FindFunction(db, "like", nArg, SQLITE_UTF8, 0); + pDef->funcFlags |= flags; + pDef->funcFlags &= ~SQLITE_FUNC_UNSAFE; + } } /* @@ -126043,6 +128941,18 @@ static void ceilingFunc( static double xCeil(double x){ return ceil(x); } static double xFloor(double x){ return floor(x); } +/* +** Some systems do not have log2() and log10() in their standard math +** libraries. +*/ +#if defined(HAVE_LOG10) && HAVE_LOG10==0 +# define log10(X) (0.4342944819032517867*log(X)) +#endif +#if defined(HAVE_LOG2) && HAVE_LOG2==0 +# define log2(X) (1.442695040888963456*log(X)) +#endif + + /* ** Implementation of SQL functions: ** @@ -126081,17 +128991,15 @@ static void logFunc( } ans = log(x)/b; }else{ - ans = log(x); switch( SQLITE_PTR_TO_INT(sqlite3_user_data(context)) ){ case 1: - /* Convert from natural logarithm to log base 10 */ - ans /= M_LN10; + ans = log10(x); break; case 2: - /* Convert from natural logarithm to log base 2 */ - ans /= M_LN2; + ans = log2(x); break; default: + ans = log(x); break; } } @@ -126160,6 +129068,7 @@ static void piFunc( sqlite3_value **argv ){ assert( argc==0 ); + (void)argv; sqlite3_result_double(context, M_PI); } @@ -126183,6 +129092,37 @@ static void signFunc( sqlite3_result_int(context, x<0.0 ? -1 : x>0.0 ? +1 : 0); } +#ifdef SQLITE_DEBUG +/* +** Implementation of fpdecode(x,y,z) function. +** +** x is a real number that is to be decoded. y is the precision. +** z is the maximum real precision. +*/ +static void fpdecodeFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + FpDecode s; + double x; + int y, z; + char zBuf[100]; + UNUSED_PARAMETER(argc); + assert( argc==3 ); + x = sqlite3_value_double(argv[0]); + y = sqlite3_value_int(argv[1]); + z = sqlite3_value_int(argv[2]); + sqlite3FpDecode(&s, x, y, z); + if( s.isSpecial==2 ){ + sqlite3_snprintf(sizeof(zBuf), zBuf, "NaN"); + }else{ + sqlite3_snprintf(sizeof(zBuf), zBuf, "%c%.*s/%d", s.sign, s.n, s.z, s.iDP); + } + sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT); +} +#endif /* SQLITE_DEBUG */ + /* ** All of the FuncDef structures in the aBuiltinFunc[] array above ** to the global function hash table. This occurs at start-time (as @@ -126247,12 +129187,16 @@ SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(void){ FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF), FUNCTION2(subtype, 1, 0, 0, subtypeFunc, SQLITE_FUNC_TYPEOF), FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH), + FUNCTION2(octet_length, 1, 0, 0, bytelengthFunc,SQLITE_FUNC_BYTELEN), FUNCTION(instr, 2, 0, 0, instrFunc ), FUNCTION(printf, -1, 0, 0, printfFunc ), FUNCTION(format, -1, 0, 0, printfFunc ), FUNCTION(unicode, 1, 0, 0, unicodeFunc ), FUNCTION(char, -1, 0, 0, charFunc ), FUNCTION(abs, 1, 0, 0, absFunc ), +#ifdef SQLITE_DEBUG + FUNCTION(fpdecode, 3, 0, 0, fpdecodeFunc ), +#endif #ifndef SQLITE_OMIT_FLOATING_POINT FUNCTION(round, 1, 0, 0, roundFunc ), FUNCTION(round, 2, 0, 0, roundFunc ), @@ -126260,6 +129204,8 @@ SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(void){ FUNCTION(upper, 1, 0, 0, upperFunc ), FUNCTION(lower, 1, 0, 0, lowerFunc ), FUNCTION(hex, 1, 0, 0, hexFunc ), + FUNCTION(unhex, 1, 0, 0, unhexFunc ), + FUNCTION(unhex, 2, 0, 0, unhexFunc ), INLINE_FUNC(ifnull, 2, INLINEFUNC_coalesce, 0 ), VFUNCTION(random, 0, 0, 0, randomFunc ), VFUNCTION(randomblob, 1, 0, 0, randomBlob ), @@ -127690,22 +130636,22 @@ static Trigger *fkActionTrigger( if( action==OE_Restrict ){ int iDb = sqlite3SchemaToIndex(db, pTab->pSchema); - Token tFrom; - Token tDb; + SrcList *pSrc; Expr *pRaise; - tFrom.z = zFrom; - tFrom.n = nFrom; - tDb.z = db->aDb[iDb].zDbSName; - tDb.n = sqlite3Strlen30(tDb.z); - pRaise = sqlite3Expr(db, TK_RAISE, "FOREIGN KEY constraint failed"); if( pRaise ){ pRaise->affExpr = OE_Abort; } + pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0); + if( pSrc ){ + assert( pSrc->nSrc==1 ); + pSrc->a[0].zName = sqlite3DbStrDup(db, zFrom); + pSrc->a[0].zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zDbSName); + } pSelect = sqlite3SelectNew(pParse, sqlite3ExprListAppend(pParse, 0, pRaise), - sqlite3SrcListAppend(pParse, 0, &tDb, &tFrom), + pSrc, pWhere, 0, 0, 0, 0, 0 ); @@ -127821,9 +130767,8 @@ SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){ if( pFKey->pPrevTo ){ pFKey->pPrevTo->pNextTo = pFKey->pNextTo; }else{ - void *p = (void *)pFKey->pNextTo; - const char *z = (p ? pFKey->pNextTo->zTo : pFKey->zTo); - sqlite3HashInsert(&pTab->pSchema->fkeyHash, z, p); + const char *z = (pFKey->pNextTo ? pFKey->pNextTo->zTo : pFKey->zTo); + sqlite3HashInsert(&pTab->pSchema->fkeyHash, z, pFKey->pNextTo); } if( pFKey->pNextTo ){ pFKey->pNextTo->pPrevTo = pFKey->pPrevTo; @@ -127886,8 +130831,10 @@ SQLITE_PRIVATE void sqlite3OpenTable( assert( pParse->pVdbe!=0 ); v = pParse->pVdbe; assert( opcode==OP_OpenWrite || opcode==OP_OpenRead ); - sqlite3TableLock(pParse, iDb, pTab->tnum, - (opcode==OP_OpenWrite)?1:0, pTab->zName); + if( !pParse->db->noSharedCache ){ + sqlite3TableLock(pParse, iDb, pTab->tnum, + (opcode==OP_OpenWrite)?1:0, pTab->zName); + } if( HasRowid(pTab) ){ sqlite3VdbeAddOp4Int(v, opcode, iCur, pTab->tnum, iDb, pTab->nNVCol); VdbeComment((v, "%s", pTab->zName)); @@ -127921,46 +130868,48 @@ SQLITE_PRIVATE void sqlite3OpenTable( ** is managed along with the rest of the Index structure. It will be ** released when sqlite3DeleteIndex() is called. */ -SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(sqlite3 *db, Index *pIdx){ +static SQLITE_NOINLINE const char *computeIndexAffStr(sqlite3 *db, Index *pIdx){ + /* The first time a column affinity string for a particular index is + ** required, it is allocated and populated here. It is then stored as + ** a member of the Index structure for subsequent use. + ** + ** The column affinity string will eventually be deleted by + ** sqliteDeleteIndex() when the Index structure itself is cleaned + ** up. + */ + int n; + Table *pTab = pIdx->pTable; + pIdx->zColAff = (char *)sqlite3DbMallocRaw(0, pIdx->nColumn+1); if( !pIdx->zColAff ){ - /* The first time a column affinity string for a particular index is - ** required, it is allocated and populated here. It is then stored as - ** a member of the Index structure for subsequent use. - ** - ** The column affinity string will eventually be deleted by - ** sqliteDeleteIndex() when the Index structure itself is cleaned - ** up. - */ - int n; - Table *pTab = pIdx->pTable; - pIdx->zColAff = (char *)sqlite3DbMallocRaw(0, pIdx->nColumn+1); - if( !pIdx->zColAff ){ - sqlite3OomFault(db); - return 0; - } - for(n=0; nnColumn; n++){ - i16 x = pIdx->aiColumn[n]; - char aff; - if( x>=0 ){ - aff = pTab->aCol[x].affinity; - }else if( x==XN_ROWID ){ - aff = SQLITE_AFF_INTEGER; - }else{ - assert( x==XN_EXPR ); - assert( pIdx->bHasExpr ); - assert( pIdx->aColExpr!=0 ); - aff = sqlite3ExprAffinity(pIdx->aColExpr->a[n].pExpr); - } - if( affSQLITE_AFF_NUMERIC) aff = SQLITE_AFF_NUMERIC; - pIdx->zColAff[n] = aff; + sqlite3OomFault(db); + return 0; + } + for(n=0; nnColumn; n++){ + i16 x = pIdx->aiColumn[n]; + char aff; + if( x>=0 ){ + aff = pTab->aCol[x].affinity; + }else if( x==XN_ROWID ){ + aff = SQLITE_AFF_INTEGER; + }else{ + assert( x==XN_EXPR ); + assert( pIdx->bHasExpr ); + assert( pIdx->aColExpr!=0 ); + aff = sqlite3ExprAffinity(pIdx->aColExpr->a[n].pExpr); } - pIdx->zColAff[n] = 0; + if( affSQLITE_AFF_NUMERIC) aff = SQLITE_AFF_NUMERIC; + pIdx->zColAff[n] = aff; } - + pIdx->zColAff[n] = 0; + return pIdx->zColAff; +} +SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(sqlite3 *db, Index *pIdx){ + if( !pIdx->zColAff ) return computeIndexAffStr(db, pIdx); return pIdx->zColAff; } + /* ** Compute an affinity string for a table. Space is obtained ** from sqlite3DbMalloc(). The caller is responsible for freeing @@ -128014,7 +130963,7 @@ SQLITE_PRIVATE char *sqlite3TableAffinityStr(sqlite3 *db, const Table *pTab){ ** For STRICT tables: ** ------------------ ** -** Generate an appropropriate OP_TypeCheck opcode that will verify the +** Generate an appropriate OP_TypeCheck opcode that will verify the ** datatypes against the column definitions in pTab. If iReg==0, that ** means an OP_MakeRecord opcode has already been generated and should be ** the last opcode generated. The new OP_TypeCheck needs to be inserted @@ -128645,7 +131594,7 @@ SQLITE_PRIVATE void sqlite3Insert( /* Cannot insert into a read-only table. */ - if( sqlite3IsReadOnly(pParse, pTab, tmask) ){ + if( sqlite3IsReadOnly(pParse, pTab, pTrigger) ){ goto insert_cleanup; } @@ -129092,7 +132041,7 @@ SQLITE_PRIVATE void sqlite3Insert( } /* Copy the new data already generated. */ - assert( pTab->nNVCol>0 ); + assert( pTab->nNVCol>0 || pParse->nErr>0 ); sqlite3VdbeAddOp3(v, OP_Copy, regRowid+1, regCols+1, pTab->nNVCol-1); #ifndef SQLITE_OMIT_GENERATED_COLUMNS @@ -129306,7 +132255,7 @@ SQLITE_PRIVATE void sqlite3Insert( /* This is the Walker callback from sqlite3ExprReferencesUpdatedColumn(). * Set bit 0x01 of pWalker->eCode if pWalker->eCode to 0 and if this ** expression node references any of the -** columns that are being modifed by an UPDATE statement. +** columns that are being modified by an UPDATE statement. */ static int checkConstraintExprNode(Walker *pWalker, Expr *pExpr){ if( pExpr->op==TK_COLUMN ){ @@ -129529,7 +132478,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( int *aiChng, /* column i is unchanged if aiChng[i]<0 */ Upsert *pUpsert /* ON CONFLICT clauses, if any. NULL otherwise */ ){ - Vdbe *v; /* VDBE under constrution */ + Vdbe *v; /* VDBE under construction */ Index *pIdx; /* Pointer to one of the indices */ Index *pPk = 0; /* The PRIMARY KEY index for WITHOUT ROWID tables */ sqlite3 *db; /* Database connection */ @@ -129644,6 +132593,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( case OE_Fail: { char *zMsg = sqlite3MPrintf(db, "%s.%s", pTab->zName, pCol->zCnName); + testcase( zMsg==0 && db->mallocFailed==0 ); sqlite3VdbeAddOp3(v, OP_HaltIfNull, SQLITE_CONSTRAINT_NOTNULL, onError, iReg); sqlite3VdbeAppendP4(v, zMsg, P4_DYNAMIC); @@ -130011,7 +132961,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( pIdx; pIdx = indexIteratorNext(&sIdxIter, &ix) ){ - int regIdx; /* Range of registers hold conent for pIdx */ + int regIdx; /* Range of registers holding content for pIdx */ int regR; /* Range of registers holding conflicting PK */ int iThisCur; /* Cursor for this UNIQUE index */ int addrUniqueOk; /* Jump here if the UNIQUE constraint is satisfied */ @@ -130506,6 +133456,8 @@ SQLITE_PRIVATE int sqlite3OpenTableAndIndices( assert( op==OP_OpenRead || op==OP_OpenWrite ); assert( op==OP_OpenWrite || p5==0 ); + assert( piDataCur!=0 ); + assert( piIdxCur!=0 ); if( IsVirtual(pTab) ){ /* This routine is a no-op for virtual tables. Leave the output ** variables *piDataCur and *piIdxCur set to illegal cursor numbers @@ -130518,18 +133470,18 @@ SQLITE_PRIVATE int sqlite3OpenTableAndIndices( assert( v!=0 ); if( iBase<0 ) iBase = pParse->nTab; iDataCur = iBase++; - if( piDataCur ) *piDataCur = iDataCur; + *piDataCur = iDataCur; if( HasRowid(pTab) && (aToOpen==0 || aToOpen[0]) ){ sqlite3OpenTable(pParse, iDataCur, iDb, pTab, op); - }else{ + }else if( pParse->db->noSharedCache==0 ){ sqlite3TableLock(pParse, iDb, pTab->tnum, op==OP_OpenWrite, pTab->zName); } - if( piIdxCur ) *piIdxCur = iBase; + *piIdxCur = iBase; for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){ int iIdxCur = iBase++; assert( pIdx->pSchema==pTab->pSchema ); if( IsPrimaryKeyIndex(pIdx) && !HasRowid(pTab) ){ - if( piDataCur ) *piDataCur = iIdxCur; + *piDataCur = iIdxCur; p5 = 0; } if( aToOpen==0 || aToOpen[i+1] ){ @@ -130827,7 +133779,7 @@ static int xferOptimization( } #endif #ifndef SQLITE_OMIT_FOREIGN_KEY - /* Disallow the transfer optimization if the destination table constains + /* Disallow the transfer optimization if the destination table contains ** any foreign key constraints. This is more restrictive than necessary. ** But the main beneficiary of the transfer optimization is the VACUUM ** command, and the VACUUM command disables foreign key constraints. So @@ -131535,6 +134487,10 @@ struct sqlite3_api_routines { const char *(*db_name)(sqlite3*,int); /* Version 3.40.0 and later */ int (*value_encoding)(sqlite3_value*); + /* Version 3.41.0 and later */ + int (*is_interrupted)(sqlite3*); + /* Version 3.43.0 and later */ + int (*stmt_explain)(sqlite3_stmt*,int); }; /* @@ -131861,6 +134817,10 @@ typedef int (*sqlite3_loadext_entry)( #define sqlite3_db_name sqlite3_api->db_name /* Version 3.40.0 and later */ #define sqlite3_value_encoding sqlite3_api->value_encoding +/* Version 3.41.0 and later */ +#define sqlite3_is_interrupted sqlite3_api->is_interrupted +/* Version 3.43.0 and later */ +#define sqlite3_stmt_explain sqlite3_api->stmt_explain #endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ #if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) @@ -132375,7 +135335,11 @@ static const sqlite3_api_routines sqlite3Apis = { #endif sqlite3_db_name, /* Version 3.40.0 and later */ - sqlite3_value_encoding + sqlite3_value_encoding, + /* Version 3.41.0 and later */ + sqlite3_is_interrupted, + /* Version 3.43.0 and later */ + sqlite3_stmt_explain }; /* True if x is the directory separator character @@ -132448,15 +135412,25 @@ static int sqlite3LoadExtension( /* tag-20210611-1. Some dlopen() implementations will segfault if given ** an oversize filename. Most filesystems have a pathname limit of 4K, ** so limit the extension filename length to about twice that. - ** https://sqlite.org/forum/forumpost/08a0d6d9bf */ + ** https://sqlite.org/forum/forumpost/08a0d6d9bf + ** + ** Later (2023-03-25): Save an extra 6 bytes for the filename suffix. + ** See https://sqlite.org/forum/forumpost/24083b579d. + */ if( nMsg>SQLITE_MAX_PATHLEN ) goto extension_not_found; + /* Do not allow sqlite3_load_extension() to link to a copy of the + ** running application, by passing in an empty filename. */ + if( nMsg==0 ) goto extension_not_found; + handle = sqlite3OsDlOpen(pVfs, zFile); #if SQLITE_OS_UNIX || SQLITE_OS_WIN for(ii=0; iiaDb[iDb].zDbSName; sqlite3CodeVerifySchema(pParse, iDb); sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName); - if( pTab->nCol+regRow>pParse->nMem ) pParse->nMem = pTab->nCol + regRow; + sqlite3TouchRegister(pParse, pTab->nCol+regRow); sqlite3OpenTable(pParse, 0, iDb, pTab, OP_OpenRead); sqlite3VdbeLoadString(v, regResult, pTab->zName); assert( IsOrdinaryTable(pTab) ); @@ -134992,7 +137966,7 @@ SQLITE_PRIVATE void sqlite3Pragma( ** regRow..regRow+n. If any of the child key values are NULL, this ** row cannot cause an FK violation. Jump directly to addrOk in ** this case. */ - if( regRow+pFK->nCol>pParse->nMem ) pParse->nMem = regRow+pFK->nCol; + sqlite3TouchRegister(pParse, regRow + pFK->nCol); for(j=0; jnCol; j++){ int iCol = aiCols ? aiCols[j] : pFK->aCol[j].iFrom; sqlite3ExprCodeGetColumnOfTable(v, pTab, 0, iCol, regRow+j); @@ -135059,9 +138033,9 @@ SQLITE_PRIVATE void sqlite3Pragma( ** The "quick_check" is reduced version of ** integrity_check designed to detect most database corruption ** without the overhead of cross-checking indexes. Quick_check - ** is linear time wherease integrity_check is O(NlogN). + ** is linear time whereas integrity_check is O(NlogN). ** - ** The maximum nubmer of errors is 100 by default. A different default + ** The maximum number of errors is 100 by default. A different default ** can be specified using a numeric parameter N. ** ** Or, the parameter N can be the name of a table. In that case, only @@ -135121,6 +138095,7 @@ SQLITE_PRIVATE void sqlite3Pragma( if( iDb>=0 && i!=iDb ) continue; sqlite3CodeVerifySchema(pParse, i); + pParse->okConstFactor = 0; /* tag-20230327-1 */ /* Do an integrity check of the B-Tree ** @@ -135156,7 +138131,7 @@ SQLITE_PRIVATE void sqlite3Pragma( aRoot[0] = cnt; /* Make sure sufficient number of registers have been allocated */ - pParse->nMem = MAX( pParse->nMem, 8+mxIdx ); + sqlite3TouchRegister(pParse, 8+mxIdx); sqlite3ClearTempRegCache(pParse); /* Do the b-tree integrity checks */ @@ -135212,12 +138187,21 @@ SQLITE_PRIVATE void sqlite3Pragma( ** will also prepopulate the cursor column cache that is used ** by the OP_IsType code, so it is a required step. */ - mxCol = pTab->nCol-1; - while( mxCol>=0 - && ((pTab->aCol[mxCol].colFlags & COLFLAG_VIRTUAL)!=0 - || pTab->iPKey==mxCol) ) mxCol--; + assert( !IsVirtual(pTab) ); + if( HasRowid(pTab) ){ + mxCol = -1; + for(j=0; jnCol; j++){ + if( (pTab->aCol[j].colFlags & COLFLAG_VIRTUAL)==0 ) mxCol++; + } + if( mxCol==pTab->iPKey ) mxCol--; + }else{ + /* COLFLAG_VIRTUAL columns are not included in the WITHOUT ROWID + ** PK index column-count, so there is no need to account for them + ** in this case. */ + mxCol = sqlite3PrimaryKeyIndex(pTab)->nColumn-1; + } if( mxCol>=0 ){ - sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, mxCol, 3); + sqlite3VdbeAddOp3(v, OP_Column, iDataCur, mxCol, 3); sqlite3VdbeTypeofColumn(v, 3); } @@ -135297,15 +138281,29 @@ SQLITE_PRIVATE void sqlite3Pragma( labelOk = sqlite3VdbeMakeLabel(pParse); if( pCol->notNull ){ /* (1) NOT NULL columns may not contain a NULL */ + int jmp3; int jmp2 = sqlite3VdbeAddOp4Int(v, OP_IsType, p1, labelOk, p3, p4); - sqlite3VdbeChangeP5(v, 0x0f); VdbeCoverage(v); + if( p1<0 ){ + sqlite3VdbeChangeP5(v, 0x0f); /* INT, REAL, TEXT, or BLOB */ + jmp3 = jmp2; + }else{ + sqlite3VdbeChangeP5(v, 0x0d); /* INT, TEXT, or BLOB */ + /* OP_IsType does not detect NaN values in the database file + ** which should be treated as a NULL. So if the header type + ** is REAL, we have to load the actual data using OP_Column + ** to reliably determine if the value is a NULL. */ + sqlite3VdbeAddOp3(v, OP_Column, p1, p3, 3); + jmp3 = sqlite3VdbeAddOp2(v, OP_NotNull, 3, labelOk); + VdbeCoverage(v); + } zErr = sqlite3MPrintf(db, "NULL value in %s.%s", pTab->zName, pCol->zCnName); sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC); if( doTypeCheck ){ sqlite3VdbeGoto(v, labelError); sqlite3VdbeJumpHere(v, jmp2); + sqlite3VdbeJumpHere(v, jmp3); }else{ /* VDBE byte code will fall thru */ } @@ -135385,7 +138383,8 @@ SQLITE_PRIVATE void sqlite3Pragma( if( !isQuick ){ /* Omit the remaining tests for quick_check */ /* Validate index entries for the current row */ for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){ - int jmp2, jmp3, jmp4, jmp5; + int jmp2, jmp3, jmp4, jmp5, label6; + int kk; int ckUniq = sqlite3VdbeMakeLabel(pParse); if( pPk==pIdx ) continue; r1 = sqlite3GenerateIndexKey(pParse, pIdx, iDataCur, 0, 0, &jmp3, @@ -135403,13 +138402,49 @@ SQLITE_PRIVATE void sqlite3Pragma( sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3); jmp4 = integrityCheckResultRow(v); sqlite3VdbeJumpHere(v, jmp2); + + /* The OP_IdxRowid opcode is an optimized version of OP_Column + ** that extracts the rowid off the end of the index record. + ** But it only works correctly if index record does not have + ** any extra bytes at the end. Verify that this is the case. */ + if( HasRowid(pTab) ){ + int jmp7; + sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur+j, 3); + jmp7 = sqlite3VdbeAddOp3(v, OP_Eq, 3, 0, r1+pIdx->nColumn-1); + VdbeCoverageNeverNull(v); + sqlite3VdbeLoadString(v, 3, + "rowid not at end-of-record for row "); + sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3); + sqlite3VdbeLoadString(v, 4, " of index "); + sqlite3VdbeGoto(v, jmp5-1); + sqlite3VdbeJumpHere(v, jmp7); + } + + /* Any indexed columns with non-BINARY collations must still hold + ** the exact same text value as the table. */ + label6 = 0; + for(kk=0; kknKeyCol; kk++){ + if( pIdx->azColl[kk]==sqlite3StrBINARY ) continue; + if( label6==0 ) label6 = sqlite3VdbeMakeLabel(pParse); + sqlite3VdbeAddOp3(v, OP_Column, iIdxCur+j, kk, 3); + sqlite3VdbeAddOp3(v, OP_Ne, 3, label6, r1+kk); VdbeCoverage(v); + } + if( label6 ){ + int jmp6 = sqlite3VdbeAddOp0(v, OP_Goto); + sqlite3VdbeResolveLabel(v, label6); + sqlite3VdbeLoadString(v, 3, "row "); + sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3); + sqlite3VdbeLoadString(v, 4, " values differ from index "); + sqlite3VdbeGoto(v, jmp5-1); + sqlite3VdbeJumpHere(v, jmp6); + } + /* For UNIQUE indexes, verify that only one entry exists with the ** current key. The entry is unique if (1) any column is NULL ** or (2) the next entry has a different key */ if( IsUniqueIndex(pIdx) ){ int uniqOk = sqlite3VdbeMakeLabel(pParse); int jmp6; - int kk; for(kk=0; kknKeyCol; kk++){ int iCol = pIdx->aiColumn[kk]; assert( iCol!=XN_ROWID && iColnCol ); @@ -135758,7 +138793,7 @@ SQLITE_PRIVATE void sqlite3Pragma( Schema *pSchema; /* The current schema */ Table *pTab; /* A table in the schema */ Index *pIdx; /* An index of the table */ - LogEst szThreshold; /* Size threshold above which reanalysis is needd */ + LogEst szThreshold; /* Size threshold above which reanalysis needed */ char *zSubSql; /* SQL statement for the OP_SqlExec opcode */ u32 opMask; /* Mask of operations to perform */ @@ -136582,7 +139617,14 @@ SQLITE_PRIVATE int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg, u32 mFl #else encoding = SQLITE_UTF8; #endif - sqlite3SetTextEncoding(db, encoding); + if( db->nVdbeActive>0 && encoding!=ENC(db) + && (db->mDbFlags & DBFLAG_Vacuum)==0 + ){ + rc = SQLITE_LOCKED; + goto initone_error_out; + }else{ + sqlite3SetTextEncoding(db, encoding); + } }else{ /* If opening an attached database, the encoding much match ENC(db) */ if( (meta[BTREE_TEXT_ENCODING-1] & 3)!=ENC(db) ){ @@ -136796,8 +139838,8 @@ static void schemaIsValid(Parse *pParse){ sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&cookie); assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); if( cookie!=db->aDb[iDb].pSchema->schema_cookie ){ + if( DbHasProperty(db, iDb, DB_SchemaLoaded) ) pParse->rc = SQLITE_SCHEMA; sqlite3ResetOneSchema(db, iDb); - pParse->rc = SQLITE_SCHEMA; } /* Close the transaction, if one was opened. */ @@ -136877,7 +139919,7 @@ SQLITE_PRIVATE void sqlite3ParseObjectReset(Parse *pParse){ ** immediately. ** ** Use this mechanism for uncommon cleanups. There is a higher setup -** cost for this mechansim (an extra malloc), so it should not be used +** cost for this mechanism (an extra malloc), so it should not be used ** for common cleanups that happen on most calls. But for less ** common cleanups, we save a single NULL-pointer comparison in ** sqlite3ParseObjectReset(), which reduces the total CPU cycle count. @@ -136969,9 +140011,18 @@ static int sqlite3Prepare( sParse.pOuterParse = db->pParse; db->pParse = &sParse; sParse.db = db; - sParse.pReprepare = pReprepare; + if( pReprepare ){ + sParse.pReprepare = pReprepare; + sParse.explain = sqlite3_stmt_isexplain((sqlite3_stmt*)pReprepare); + }else{ + assert( sParse.pReprepare==0 ); + } assert( ppStmt && *ppStmt==0 ); - if( db->mallocFailed ) sqlite3ErrorMsg(&sParse, "out of memory"); + if( db->mallocFailed ){ + sqlite3ErrorMsg(&sParse, "out of memory"); + db->errCode = rc = SQLITE_NOMEM; + goto end_prepare; + } assert( sqlite3_mutex_held(db->mutex) ); /* For a long-term use prepared statement avoid the use of @@ -137408,6 +140459,10 @@ struct SortCtx { } aDefer[4]; #endif struct RowLoadInfo *pDeferredRowLoad; /* Deferred row loading info or NULL */ +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + int addrPush; /* First instruction to push data into sorter */ + int addrPushEnd; /* Last instruction that pushes data into sorter */ +#endif }; #define SORTFLAG_UseSorter 0x01 /* Use SorterOpen instead of OpenEphemeral */ @@ -137571,7 +140626,7 @@ static Select *findRightmost(Select *p){ ** NATURAL FULL OUTER JT_NATRUAL|JT_LEFT|JT_RIGHT ** ** To preserve historical compatibly, SQLite also accepts a variety -** of other non-standard and in many cases non-sensical join types. +** of other non-standard and in many cases nonsensical join types. ** This routine makes as much sense at it can from the nonsense join ** type and returns a result. Examples of accepted nonsense join types ** include but are not limited to: @@ -137842,7 +140897,7 @@ static int sqlite3ProcessJoin(Parse *pParse, Select *p){ if( NEVER(pLeft->pTab==0 || pRightTab==0) ) continue; joinType = (pRight->fg.jointype & JT_OUTER)!=0 ? EP_OuterON : EP_InnerON; - /* If this is a NATURAL join, synthesize an approprate USING clause + /* If this is a NATURAL join, synthesize an appropriate USING clause ** to specify which columns should be joined. */ if( pRight->fg.jointype & JT_NATURAL ){ @@ -138056,14 +141111,18 @@ static void pushOntoSorter( ** (2) All output columns are included in the sort record. In that ** case regData==regOrigData. ** (3) Some output columns are omitted from the sort record due to - ** the SQLITE_ENABLE_SORTER_REFERENCE optimization, or due to the + ** the SQLITE_ENABLE_SORTER_REFERENCES optimization, or due to the ** SQLITE_ECEL_OMITREF optimization, or due to the - ** SortCtx.pDeferredRowLoad optimiation. In any of these cases + ** SortCtx.pDeferredRowLoad optimization. In any of these cases ** regOrigData is 0 to prevent this routine from trying to copy ** values that might not yet exist. */ assert( nData==1 || regData==regOrigData || regOrigData==0 ); +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + pSort->addrPush = sqlite3VdbeCurrentAddr(v); +#endif + if( nPrefixReg ){ assert( nPrefixReg==nExpr+bSeq ); regBase = regData - nPrefixReg; @@ -138110,7 +141169,7 @@ static void pushOntoSorter( testcase( pKI->nAllField > pKI->nKeyField+2 ); pOp->p4.pKeyInfo = sqlite3KeyInfoFromExprList(pParse,pSort->pOrderBy,nOBSat, pKI->nAllField-pKI->nKeyField-1); - pOp = 0; /* Ensure pOp not used after sqltie3VdbeAddOp3() */ + pOp = 0; /* Ensure pOp not used after sqlite3VdbeAddOp3() */ addrJmp = sqlite3VdbeCurrentAddr(v); sqlite3VdbeAddOp3(v, OP_Jump, addrJmp+1, 0, addrJmp+1); VdbeCoverage(v); pSort->labelBkOut = sqlite3VdbeMakeLabel(pParse); @@ -138164,6 +141223,9 @@ static void pushOntoSorter( sqlite3VdbeChangeP2(v, iSkip, pSort->labelOBLopt ? pSort->labelOBLopt : sqlite3VdbeCurrentAddr(v)); } +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + pSort->addrPushEnd = sqlite3VdbeCurrentAddr(v)-1; +#endif } /* @@ -138201,7 +141263,7 @@ static void codeOffset( ** The returned value in this case is a copy of parameter iTab. ** ** WHERE_DISTINCT_ORDERED: -** In this case rows are being delivered sorted order. The ephermal +** In this case rows are being delivered sorted order. The ephemeral ** table is not required. Instead, the current set of values ** is compared against previous row. If they match, the new row ** is not distinct and control jumps to VM address addrRepeat. Otherwise, @@ -138630,9 +141692,16 @@ static void selectInnerLoop( testcase( eDest==SRT_Fifo ); testcase( eDest==SRT_DistFifo ); sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1+nPrefixReg); - if( pDest->zAffSdst ){ - sqlite3VdbeChangeP4(v, -1, pDest->zAffSdst, nResultCol); +#if !defined(SQLITE_ENABLE_NULL_TRIM) && defined(SQLITE_DEBUG) + /* A destination of SRT_Table and a non-zero iSDParm2 parameter means + ** that this is an "UPDATE ... FROM" on a virtual table or view. In this + ** case set the p5 parameter of the OP_MakeRecord to OPFLAG_NOCHNG_MAGIC. + ** This does not affect operation in any way - it just allows MakeRecord + ** to process OPFLAG_NOCHANGE values without an assert() failing. */ + if( eDest==SRT_Table && pDest->iSDParm2 ){ + sqlite3VdbeChangeP5(v, OPFLAG_NOCHNG_MAGIC); } +#endif #ifndef SQLITE_OMIT_CTE if( eDest==SRT_DistFifo ){ /* If the destination is DistFifo, then cursor (iParm+1) is open @@ -138990,6 +142059,16 @@ static void generateSortTail( int bSeq; /* True if sorter record includes seq. no. */ int nRefKey = 0; struct ExprList_item *aOutEx = p->pEList->a; +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + int addrExplain; /* Address of OP_Explain instruction */ +#endif + + ExplainQueryPlan2(addrExplain, (pParse, 0, + "USE TEMP B-TREE FOR %sORDER BY", pSort->nOBSat>0?"RIGHT PART OF ":"") + ); + sqlite3VdbeScanStatusRange(v, addrExplain,pSort->addrPush,pSort->addrPushEnd); + sqlite3VdbeScanStatusCounters(v, addrExplain, addrExplain, pSort->addrPush); + assert( addrBreak<0 ); if( pSort->labelBkOut ){ @@ -139102,6 +142181,7 @@ static void generateSortTail( VdbeComment((v, "%s", aOutEx[i].zEName)); } } + sqlite3VdbeScanStatusRange(v, addrExplain, addrExplain, -1); switch( eDest ){ case SRT_Table: case SRT_EphemTab: { @@ -139163,6 +142243,7 @@ static void generateSortTail( }else{ sqlite3VdbeAddOp2(v, OP_Next, iTab, addr); VdbeCoverage(v); } + sqlite3VdbeScanStatusRange(v, addrExplain, sqlite3VdbeCurrentAddr(v)-1, -1); if( pSort->regReturn ) sqlite3VdbeAddOp1(v, OP_Return, pSort->regReturn); sqlite3VdbeResolveLabel(v, addrBreak); } @@ -139424,17 +142505,10 @@ SQLITE_PRIVATE void sqlite3GenerateColumnNames( int fullName; /* TABLE.COLUMN if no AS clause and is a direct table ref */ int srcName; /* COLUMN or TABLE.COLUMN if no AS clause and is direct */ -#ifndef SQLITE_OMIT_EXPLAIN - /* If this is an EXPLAIN, skip this step */ - if( pParse->explain ){ - return; - } -#endif - if( pParse->colNamesSet ) return; /* Column names are determined by the left-most term of a compound select */ while( pSelect->pPrior ) pSelect = pSelect->pPrior; - SELECTTRACE(1,pParse,pSelect,("generating column names\n")); + TREETRACE(0x80,pParse,pSelect,("generating column names\n")); pTabList = pSelect->pSrc; pEList = pSelect->pEList; assert( v!=0 ); @@ -139534,7 +142608,7 @@ SQLITE_PRIVATE int sqlite3ColumnsFromExprList( *pnCol = nCol; *paCol = aCol; - for(i=0, pCol=aCol; imallocFailed; i++, pCol++){ + for(i=0, pCol=aCol; inErr; i++, pCol++){ struct ExprList_item *pX = &pEList->a[i]; struct ExprList_item *pCollide; /* Get an appropriate name for the column @@ -139584,7 +142658,10 @@ SQLITE_PRIVATE int sqlite3ColumnsFromExprList( if( zName[j]==':' ) nName = j; } zName = sqlite3MPrintf(db, "%.*z:%u", nName, zName, ++cnt); - if( cnt>3 ) sqlite3_randomness(sizeof(cnt), &cnt); + sqlite3ProgressCheck(pParse); + if( cnt>3 ){ + sqlite3_randomness(sizeof(cnt), &cnt); + } } pCol->zCnName = zName; pCol->hName = sqlite3StrIHash(zName); @@ -139597,71 +142674,104 @@ SQLITE_PRIVATE int sqlite3ColumnsFromExprList( } } sqlite3HashClear(&ht); - if( db->mallocFailed ){ + if( pParse->nErr ){ for(j=0; jrc; } return SQLITE_OK; } /* -** Add type and collation information to a column list based on -** a SELECT statement. +** pTab is a transient Table object that represents a subquery of some +** kind (maybe a parenthesized subquery in the FROM clause of a larger +** query, or a VIEW, or a CTE). This routine computes type information +** for that Table object based on the Select object that implements the +** subquery. For the purposes of this routine, "type information" means: ** -** The column list presumably came from selectColumnNamesFromExprList(). -** The column list has only names, not types or collations. This -** routine goes through and adds the types and collations. -** -** This routine requires that all identifiers in the SELECT -** statement be resolved. +** * The datatype name, as it might appear in a CREATE TABLE statement +** * Which collating sequence to use for the column +** * The affinity of the column */ -SQLITE_PRIVATE void sqlite3SelectAddColumnTypeAndCollation( - Parse *pParse, /* Parsing contexts */ - Table *pTab, /* Add column type information to this table */ - Select *pSelect, /* SELECT used to determine types and collations */ - char aff /* Default affinity for columns */ +SQLITE_PRIVATE void sqlite3SubqueryColumnTypes( + Parse *pParse, /* Parsing contexts */ + Table *pTab, /* Add column type information to this table */ + Select *pSelect, /* SELECT used to determine types and collations */ + char aff /* Default affinity. */ ){ sqlite3 *db = pParse->db; - NameContext sNC; Column *pCol; CollSeq *pColl; - int i; + int i,j; Expr *p; struct ExprList_item *a; + NameContext sNC; assert( pSelect!=0 ); assert( (pSelect->selFlags & SF_Resolved)!=0 ); - assert( pTab->nCol==pSelect->pEList->nExpr || db->mallocFailed ); - if( db->mallocFailed ) return; + assert( pTab->nCol==pSelect->pEList->nExpr || pParse->nErr>0 ); + assert( aff==SQLITE_AFF_NONE || aff==SQLITE_AFF_BLOB ); + if( db->mallocFailed || IN_RENAME_OBJECT ) return; + while( pSelect->pPrior ) pSelect = pSelect->pPrior; + a = pSelect->pEList->a; memset(&sNC, 0, sizeof(sNC)); sNC.pSrcList = pSelect->pSrc; - a = pSelect->pEList->a; for(i=0, pCol=pTab->aCol; inCol; i++, pCol++){ const char *zType; - i64 n, m; + i64 n; pTab->tabFlags |= (pCol->colFlags & COLFLAG_NOINSERT); p = a[i].pExpr; - zType = columnType(&sNC, p, 0, 0, 0); /* pCol->szEst = ... // Column size est for SELECT tables never used */ pCol->affinity = sqlite3ExprAffinity(p); + if( pCol->affinity<=SQLITE_AFF_NONE ){ + pCol->affinity = aff; + } + if( pCol->affinity>=SQLITE_AFF_TEXT && pSelect->pNext ){ + int m = 0; + Select *pS2; + for(m=0, pS2=pSelect->pNext; pS2; pS2=pS2->pNext){ + m |= sqlite3ExprDataType(pS2->pEList->a[i].pExpr); + } + if( pCol->affinity==SQLITE_AFF_TEXT && (m&0x01)!=0 ){ + pCol->affinity = SQLITE_AFF_BLOB; + }else + if( pCol->affinity>=SQLITE_AFF_NUMERIC && (m&0x02)!=0 ){ + pCol->affinity = SQLITE_AFF_BLOB; + } + if( pCol->affinity>=SQLITE_AFF_NUMERIC && p->op==TK_CAST ){ + pCol->affinity = SQLITE_AFF_FLEXNUM; + } + } + zType = columnType(&sNC, p, 0, 0, 0); + if( zType==0 || pCol->affinity!=sqlite3AffinityType(zType, 0) ){ + if( pCol->affinity==SQLITE_AFF_NUMERIC + || pCol->affinity==SQLITE_AFF_FLEXNUM + ){ + zType = "NUM"; + }else{ + zType = 0; + for(j=1; jaffinity ){ + zType = sqlite3StdType[j]; + break; + } + } + } + } if( zType ){ - m = sqlite3Strlen30(zType); + i64 m = sqlite3Strlen30(zType); n = sqlite3Strlen30(pCol->zCnName); pCol->zCnName = sqlite3DbReallocOrFree(db, pCol->zCnName, n+m+2); + pCol->colFlags &= ~(COLFLAG_HASTYPE|COLFLAG_HASCOLL); if( pCol->zCnName ){ memcpy(&pCol->zCnName[n+1], zType, m+1); pCol->colFlags |= COLFLAG_HASTYPE; - }else{ - testcase( pCol->colFlags & COLFLAG_HASTYPE ); - pCol->colFlags &= ~(COLFLAG_HASTYPE|COLFLAG_HASCOLL); } } - if( pCol->affinity<=SQLITE_AFF_NONE ) pCol->affinity = aff; pColl = sqlite3ExprCollSeq(pParse, p); if( pColl ){ assert( pTab->pIndex==0 ); @@ -139695,7 +142805,7 @@ SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect, c pTab->zName = 0; pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) ); sqlite3ColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol); - sqlite3SelectAddColumnTypeAndCollation(pParse, pTab, pSelect, aff); + sqlite3SubqueryColumnTypes(pParse, pTab, pSelect, aff); pTab->iPKey = -1; if( db->mallocFailed ){ sqlite3DeleteTable(db, pTab); @@ -139910,7 +143020,7 @@ static void generateWithRecursiveQuery( int iQueue; /* The Queue table */ int iDistinct = 0; /* To ensure unique results if UNION */ int eDest = SRT_Fifo; /* How to write to Queue */ - SelectDest destQueue; /* SelectDest targetting the Queue table */ + SelectDest destQueue; /* SelectDest targeting the Queue table */ int i; /* Loop counter */ int rc; /* Result code */ ExprList *pOrderBy; /* The ORDER BY clause */ @@ -140220,7 +143330,7 @@ static int multiSelect( pPrior->iLimit = p->iLimit; pPrior->iOffset = p->iOffset; pPrior->pLimit = p->pLimit; - SELECTTRACE(1, pParse, p, ("multiSelect UNION ALL left...\n")); + TREETRACE(0x200, pParse, p, ("multiSelect UNION ALL left...\n")); rc = sqlite3Select(pParse, pPrior, &dest); pPrior->pLimit = 0; if( rc ){ @@ -140238,7 +143348,7 @@ static int multiSelect( } } ExplainQueryPlan((pParse, 1, "UNION ALL")); - SELECTTRACE(1, pParse, p, ("multiSelect UNION ALL right...\n")); + TREETRACE(0x200, pParse, p, ("multiSelect UNION ALL right...\n")); rc = sqlite3Select(pParse, p, &dest); testcase( rc!=SQLITE_OK ); pDelete = p->pPrior; @@ -140291,7 +143401,7 @@ static int multiSelect( */ assert( !pPrior->pOrderBy ); sqlite3SelectDestInit(&uniondest, priorOp, unionTab); - SELECTTRACE(1, pParse, p, ("multiSelect EXCEPT/UNION left...\n")); + TREETRACE(0x200, pParse, p, ("multiSelect EXCEPT/UNION left...\n")); rc = sqlite3Select(pParse, pPrior, &uniondest); if( rc ){ goto multi_select_end; @@ -140311,7 +143421,7 @@ static int multiSelect( uniondest.eDest = op; ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE", sqlite3SelectOpName(p->op))); - SELECTTRACE(1, pParse, p, ("multiSelect EXCEPT/UNION right...\n")); + TREETRACE(0x200, pParse, p, ("multiSelect EXCEPT/UNION right...\n")); rc = sqlite3Select(pParse, p, &uniondest); testcase( rc!=SQLITE_OK ); assert( p->pOrderBy==0 ); @@ -140372,7 +143482,7 @@ static int multiSelect( /* Code the SELECTs to our left into temporary table "tab1". */ sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1); - SELECTTRACE(1, pParse, p, ("multiSelect INTERSECT left...\n")); + TREETRACE(0x400, pParse, p, ("multiSelect INTERSECT left...\n")); rc = sqlite3Select(pParse, pPrior, &intersectdest); if( rc ){ goto multi_select_end; @@ -140389,7 +143499,7 @@ static int multiSelect( intersectdest.iSDParm = tab2; ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE", sqlite3SelectOpName(p->op))); - SELECTTRACE(1, pParse, p, ("multiSelect INTERSECT right...\n")); + TREETRACE(0x400, pParse, p, ("multiSelect INTERSECT right...\n")); rc = sqlite3Select(pParse, p, &intersectdest); testcase( rc!=SQLITE_OK ); pDelete = p->pPrior; @@ -140510,7 +143620,7 @@ SQLITE_PRIVATE void sqlite3SelectWrongNumTermsError(Parse *pParse, Select *p){ /* ** Code an output subroutine for a coroutine implementation of a -** SELECT statment. +** SELECT statement. ** ** The data to be output is contained in pIn->iSdst. There are ** pIn->nSdst columns to be output. pDest is where the output should @@ -140732,7 +143842,7 @@ static int generateOutputSubroutine( ** ** We call AltB, AeqB, AgtB, EofA, and EofB "subroutines" but they are not ** actually called using Gosub and they do not Return. EofA and EofB loop -** until all data is exhausted then jump to the "end" labe. AltB, AeqB, +** until all data is exhausted then jump to the "end" label. AltB, AeqB, ** and AgtB jump to either L2 or to one of EofA or EofB. */ #ifndef SQLITE_OMIT_COMPOUND_SELECT @@ -140769,7 +143879,7 @@ static int multiSelectOrderBy( int savedOffset; /* Saved value of p->iOffset */ int labelCmpr; /* Label for the start of the merge algorithm */ int labelEnd; /* Label for the end of the overall SELECT stmt */ - int addr1; /* Jump instructions that get retargetted */ + int addr1; /* Jump instructions that get retargeted */ int op; /* One of TK_ALL, TK_UNION, TK_EXCEPT, TK_INTERSECT */ KeyInfo *pKeyDup = 0; /* Comparison information for duplicate removal */ KeyInfo *pKeyMerge; /* Comparison information for merging rows */ @@ -141138,16 +144248,21 @@ static Expr *substExpr( #endif { Expr *pNew; - int iColumn = pExpr->iColumn; - Expr *pCopy = pSubst->pEList->a[iColumn].pExpr; + int iColumn; + Expr *pCopy; Expr ifNullRow; + iColumn = pExpr->iColumn; + assert( iColumn>=0 ); assert( pSubst->pEList!=0 && iColumnpEList->nExpr ); assert( pExpr->pRight==0 ); + pCopy = pSubst->pEList->a[iColumn].pExpr; if( sqlite3ExprIsVector(pCopy) ){ sqlite3VectorErrorMsg(pSubst->pParse, pCopy); }else{ sqlite3 *db = pSubst->pParse->db; - if( pSubst->isOuterJoin && pCopy->op!=TK_COLUMN ){ + if( pSubst->isOuterJoin + && (pCopy->op!=TK_COLUMN || pCopy->iTable!=pSubst->iNewTable) + ){ memset(&ifNullRow, 0, sizeof(ifNullRow)); ifNullRow.op = TK_IF_NULL_ROW; ifNullRow.pLeft = pCopy; @@ -141393,6 +144508,34 @@ static ExprList *findLeftmostExprlist(Select *pSel){ return pSel->pEList; } +/* +** Return true if any of the result-set columns in the compound query +** have incompatible affinities on one or more arms of the compound. +*/ +static int compoundHasDifferentAffinities(Select *p){ + int ii; + ExprList *pList; + assert( p!=0 ); + assert( p->pEList!=0 ); + assert( p->pPrior!=0 ); + pList = p->pEList; + for(ii=0; iinExpr; ii++){ + char aff; + Select *pSub1; + assert( pList->a[ii].pExpr!=0 ); + aff = sqlite3ExprAffinity(pList->a[ii].pExpr); + for(pSub1=p->pPrior; pSub1; pSub1=pSub1->pPrior){ + assert( pSub1->pEList!=0 ); + assert( pSub1->pEList->nExpr>ii ); + assert( pSub1->pEList->a[ii].pExpr!=0 ); + if( sqlite3ExprAffinity(pSub1->pEList->a[ii].pExpr)!=aff ){ + return 1; + } + } + } + return 0; +} + #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) /* ** This routine attempts to flatten subqueries as a performance optimization. @@ -141461,7 +144604,7 @@ static ExprList *findLeftmostExprlist(Select *pSel){ ** (9) If the subquery uses LIMIT then the outer query may not be aggregate. ** ** (**) Restriction (10) was removed from the code on 2005-02-05 but we -** accidently carried the comment forward until 2014-09-15. Original +** accidentally carried the comment forward until 2014-09-15. Original ** constraint: "If the subquery is aggregate then the outer query ** may not use LIMIT." ** @@ -141553,7 +144696,8 @@ static ExprList *findLeftmostExprlist(Select *pSel){ ** (27b) the subquery is a compound query and the RIGHT JOIN occurs ** in any arm of the compound query. (See also (17g).) ** -** (28) The subquery is not a MATERIALIZED CTE. +** (28) The subquery is not a MATERIALIZED CTE. (This is handled +** in the caller before ever reaching this routine.) ** ** ** In this routine, the "p" parameter is a pointer to the outer query. @@ -141663,9 +144807,9 @@ static int flattenSubquery( if( iFrom>0 && (pSubSrc->a[0].fg.jointype & JT_LTORJ)!=0 ){ return 0; /* Restriction (27a) */ } - if( pSubitem->fg.isCte && pSubitem->u2.pCteUse->eM10d==M10d_Yes ){ - return 0; /* (28) */ - } + + /* Condition (28) is blocked by the caller */ + assert( !pSubitem->fg.isCte || pSubitem->u2.pCteUse->eM10d!=M10d_Yes ); /* Restriction (17): If the sub-query is a compound SELECT, then it must ** use only the UNION ALL operator. And none of the simple select queries @@ -141715,19 +144859,7 @@ static int flattenSubquery( if( (p->selFlags & SF_Recursive) ) return 0; /* Restriction (17h) */ - for(ii=0; iipEList->nExpr; ii++){ - char aff; - assert( pSub->pEList->a[ii].pExpr!=0 ); - aff = sqlite3ExprAffinity(pSub->pEList->a[ii].pExpr); - for(pSub1=pSub->pPrior; pSub1; pSub1=pSub1->pPrior){ - assert( pSub1->pEList!=0 ); - assert( pSub1->pEList->nExpr>ii ); - assert( pSub1->pEList->a[ii].pExpr!=0 ); - if( sqlite3ExprAffinity(pSub1->pEList->a[ii].pExpr)!=aff ){ - return 0; - } - } - } + if( compoundHasDifferentAffinities(pSub) ) return 0; if( pSrc->nSrc>1 ){ if( pParse->nSelect>500 ) return 0; @@ -141738,7 +144870,7 @@ static int flattenSubquery( } /***** If we reach this point, flattening is permitted. *****/ - SELECTTRACE(1,pParse,p,("flatten %u.%p from term %d\n", + TREETRACE(0x4,pParse,p,("flatten %u.%p from term %d\n", pSub->selId, pSub, iFrom)); /* Authorize the subquery */ @@ -141747,7 +144879,7 @@ static int flattenSubquery( testcase( i==SQLITE_DENY ); pParse->zAuthContext = zSavedAuthContext; - /* Delete the transient structures associated with thesubquery */ + /* Delete the transient structures associated with the subquery */ pSub1 = pSubitem->pSelect; sqlite3DbFree(db, pSubitem->zDatabase); sqlite3DbFree(db, pSubitem->zName); @@ -141817,7 +144949,7 @@ static int flattenSubquery( if( pPrior ) pPrior->pNext = pNew; pNew->pNext = p; p->pPrior = pNew; - SELECTTRACE(2,pParse,p,("compound-subquery flattener" + TREETRACE(0x4,pParse,p,("compound-subquery flattener" " creates %u as peer\n",pNew->selId)); } assert( pSubitem->pSelect==0 ); @@ -141929,7 +145061,7 @@ static int flattenSubquery( ** ORDER BY column expression is identical to the iOrderByCol'th ** expression returned by SELECT statement pSub. Since these values ** do not necessarily correspond to columns in SELECT statement pParent, - ** zero them before transfering the ORDER BY clause. + ** zero them before transferring the ORDER BY clause. ** ** Not doing this may cause an error if a subsequent call to this ** function attempts to flatten a compound sub-query into pParent @@ -141989,16 +145121,15 @@ static int flattenSubquery( } } - /* Finially, delete what is left of the subquery and return - ** success. + /* Finally, delete what is left of the subquery and return success. */ sqlite3AggInfoPersistWalkerInit(&w, pParse); sqlite3WalkSelect(&w,pSub1); sqlite3SelectDelete(db, pSub1); #if TREETRACE_ENABLED - if( sqlite3TreeTrace & 0x100 ){ - SELECTTRACE(0x100,pParse,p,("After flattening:\n")); + if( sqlite3TreeTrace & 0x4 ){ + TREETRACE(0x4,pParse,p,("After flattening:\n")); sqlite3TreeViewSelect(0, p, 0); } #endif @@ -142025,7 +145156,7 @@ struct WhereConst { /* ** Add a new entry to the pConst object. Except, do not add duplicate -** pColumn entires. Also, do not add if doing so would not be appropriate. +** pColumn entries. Also, do not add if doing so would not be appropriate. ** ** The caller guarantees the pColumn is a column and pValue is a constant. ** This routine has to do some additional checks before completing the @@ -142211,7 +145342,7 @@ static int propagateConstantExprRewrite(Walker *pWalker, Expr *pExpr){ ** SELECT * FROM t1 WHERE a=123 AND b=123; ** ** The two SELECT statements above should return different answers. b=a -** is alway true because the comparison uses numeric affinity, but b=123 +** is always true because the comparison uses numeric affinity, but b=123 ** is false because it uses text affinity and '0123' is not the same as '123'. ** To work around this, the expression tree is not actually changed from ** "b=a" to "b=123" but rather the "a" in "b=a" is tagged with EP_FixedCol @@ -142295,7 +145426,7 @@ static int propagateConstants( ** At the time this function is called it is guaranteed that ** ** * the sub-query uses only one distinct window frame, and -** * that the window frame has a PARTITION BY clase. +** * that the window frame has a PARTITION BY clause. */ static int pushDownWindowCheck(Parse *pParse, Select *pSubq, Expr *pExpr){ assert( pSubq->pWin->pPartition ); @@ -142372,12 +145503,28 @@ static int pushDownWindowCheck(Parse *pParse, Select *pSubq, Expr *pExpr){ ** be materialized. (This restriction is implemented in the calling ** routine.) ** -** (8) The subquery may not be a compound that uses UNION, INTERSECT, -** or EXCEPT. (We could, perhaps, relax this restriction to allow -** this case if none of the comparisons operators between left and -** right arms of the compound use a collation other than BINARY. -** But it is a lot of work to check that case for an obscure and -** minor optimization, so we omit it for now.) +** (8) If the subquery is a compound that uses UNION, INTERSECT, +** or EXCEPT, then all of the result set columns for all arms of +** the compound must use the BINARY collating sequence. +** +** (9) All three of the following are true: +** +** (9a) The WHERE clause expression originates in the ON or USING clause +** of a join (either an INNER or an OUTER join), and +** +** (9b) The subquery is to the right of the ON/USING clause +** +** (9c) There is a RIGHT JOIN (or FULL JOIN) in between the ON/USING +** clause and the subquery. +** +** Without this restriction, the push-down optimization might move +** the ON/USING filter expression from the left side of a RIGHT JOIN +** over to the right side, which leads to incorrect answers. See +** also restriction (6) in sqlite3ExprIsSingleTableConstraint(). +** +** (10) The inner query is not the right-hand table of a RIGHT JOIN. +** +** (11) The subquery is not a VALUES clause ** ** Return 0 if no changes are made and non-zero if one or more WHERE clause ** terms are duplicated into the subquery. @@ -142386,28 +145533,56 @@ static int pushDownWhereTerms( Parse *pParse, /* Parse context (for malloc() and error reporting) */ Select *pSubq, /* The subquery whose WHERE clause is to be augmented */ Expr *pWhere, /* The WHERE clause of the outer query */ - SrcItem *pSrc /* The subquery term of the outer FROM clause */ + SrcList *pSrcList, /* The complete from clause of the outer query */ + int iSrc /* Which FROM clause term to try to push into */ ){ Expr *pNew; + SrcItem *pSrc; /* The subquery FROM term into which WHERE is pushed */ int nChng = 0; + pSrc = &pSrcList->a[iSrc]; if( pWhere==0 ) return 0; - if( pSubq->selFlags & (SF_Recursive|SF_MultiPart) ) return 0; - if( pSrc->fg.jointype & (JT_LTORJ|JT_RIGHT) ) return 0; + if( pSubq->selFlags & (SF_Recursive|SF_MultiPart) ){ + return 0; /* restrictions (2) and (11) */ + } + if( pSrc->fg.jointype & (JT_LTORJ|JT_RIGHT) ){ + return 0; /* restrictions (10) */ + } -#ifndef SQLITE_OMIT_WINDOWFUNC if( pSubq->pPrior ){ Select *pSel; + int notUnionAll = 0; for(pSel=pSubq; pSel; pSel=pSel->pPrior){ u8 op = pSel->op; assert( op==TK_ALL || op==TK_SELECT || op==TK_UNION || op==TK_INTERSECT || op==TK_EXCEPT ); - if( op!=TK_ALL && op!=TK_SELECT ) return 0; /* restriction (8) */ + if( op!=TK_ALL && op!=TK_SELECT ){ + notUnionAll = 1; + } +#ifndef SQLITE_OMIT_WINDOWFUNC if( pSel->pWin ) return 0; /* restriction (6b) */ +#endif + } + if( notUnionAll ){ + /* If any of the compound arms are connected using UNION, INTERSECT, + ** or EXCEPT, then we must ensure that none of the columns use a + ** non-BINARY collating sequence. */ + for(pSel=pSubq; pSel; pSel=pSel->pPrior){ + int ii; + const ExprList *pList = pSel->pEList; + assert( pList!=0 ); + for(ii=0; iinExpr; ii++){ + CollSeq *pColl = sqlite3ExprCollSeq(pParse, pList->a[ii].pExpr); + if( !sqlite3IsBinary(pColl) ){ + return 0; /* Restriction (8) */ + } + } + } } }else{ +#ifndef SQLITE_OMIT_WINDOWFUNC if( pSubq->pWin && pSubq->pWin->pPartition==0 ) return 0; - } #endif + } #ifdef SQLITE_DEBUG /* Only the first term of a compound can have a WITH clause. But make @@ -142426,11 +145601,28 @@ static int pushDownWhereTerms( return 0; /* restriction (3) */ } while( pWhere->op==TK_AND ){ - nChng += pushDownWhereTerms(pParse, pSubq, pWhere->pRight, pSrc); + nChng += pushDownWhereTerms(pParse, pSubq, pWhere->pRight, pSrcList, iSrc); pWhere = pWhere->pLeft; } -#if 0 /* Legacy code. Checks now done by sqlite3ExprIsTableConstraint() */ +#if 0 /* These checks now done by sqlite3ExprIsSingleTableConstraint() */ + if( ExprHasProperty(pWhere, EP_OuterON|EP_InnerON) /* (9a) */ + && (pSrcList->a[0].fg.jointype & JT_LTORJ)!=0 /* Fast pre-test of (9c) */ + ){ + int jj; + for(jj=0; jjw.iJoin==pSrcList->a[jj].iCursor ){ + /* If we reach this point, both (9a) and (9b) are satisfied. + ** The following loop checks (9c): + */ + for(jj++; jja[jj].fg.jointype & JT_RIGHT)!=0 ){ + return 0; /* restriction (9) */ + } + } + } + } + } if( isLeftJoin && (ExprHasProperty(pWhere,EP_OuterON)==0 || pWhere->w.iJoin!=iCursor) @@ -142444,7 +145636,7 @@ static int pushDownWhereTerms( } #endif - if( sqlite3ExprIsTableConstraint(pWhere, pSrc) ){ + if( sqlite3ExprIsSingleTableConstraint(pWhere, pSrcList, iSrc) ){ nChng++; pSubq->selFlags |= SF_PushDown; while( pSubq ){ @@ -142478,6 +145670,78 @@ static int pushDownWhereTerms( } #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ +/* +** Check to see if a subquery contains result-set columns that are +** never used. If it does, change the value of those result-set columns +** to NULL so that they do not cause unnecessary work to compute. +** +** Return the number of column that were changed to NULL. +*/ +static int disableUnusedSubqueryResultColumns(SrcItem *pItem){ + int nCol; + Select *pSub; /* The subquery to be simplified */ + Select *pX; /* For looping over compound elements of pSub */ + Table *pTab; /* The table that describes the subquery */ + int j; /* Column number */ + int nChng = 0; /* Number of columns converted to NULL */ + Bitmask colUsed; /* Columns that may not be NULLed out */ + + assert( pItem!=0 ); + if( pItem->fg.isCorrelated || pItem->fg.isCte ){ + return 0; + } + assert( pItem->pTab!=0 ); + pTab = pItem->pTab; + assert( pItem->pSelect!=0 ); + pSub = pItem->pSelect; + assert( pSub->pEList->nExpr==pTab->nCol ); + for(pX=pSub; pX; pX=pX->pPrior){ + if( (pX->selFlags & (SF_Distinct|SF_Aggregate))!=0 ){ + testcase( pX->selFlags & SF_Distinct ); + testcase( pX->selFlags & SF_Aggregate ); + return 0; + } + if( pX->pPrior && pX->op!=TK_ALL ){ + /* This optimization does not work for compound subqueries that + ** use UNION, INTERSECT, or EXCEPT. Only UNION ALL is allowed. */ + return 0; + } +#ifndef SQLITE_OMIT_WINDOWFUNC + if( pX->pWin ){ + /* This optimization does not work for subqueries that use window + ** functions. */ + return 0; + } +#endif + } + colUsed = pItem->colUsed; + if( pSub->pOrderBy ){ + ExprList *pList = pSub->pOrderBy; + for(j=0; jnExpr; j++){ + u16 iCol = pList->a[j].u.x.iOrderByCol; + if( iCol>0 ){ + iCol--; + colUsed |= ((Bitmask)1)<<(iCol>=BMS ? BMS-1 : iCol); + } + } + } + nCol = pTab->nCol; + for(j=0; jpPrior) { + Expr *pY = pX->pEList->a[j].pExpr; + if( pY->op==TK_NULL ) continue; + pY->op = TK_NULL; + ExprClearProperty(pY, EP_Skip|EP_Unlikely); + pX->selFlags |= SF_PushDown; + nChng++; + } + } + return nChng; +} + + /* ** The pFunc is the only aggregate function in the query. Check to see ** if the query is a candidate for the min/max optimization. @@ -142869,9 +146133,6 @@ static int resolveFromTermToCte( pFrom->fg.isCte = 1; pFrom->u2.pCteUse = pCteUse; pCteUse->nUse++; - if( pCteUse->nUse>=2 && pCteUse->eM10d==M10d_Any ){ - pCteUse->eM10d = M10d_Yes; - } /* Check if this is a recursive CTE. */ pRecTerm = pSel = pFrom->pSelect; @@ -143245,10 +146506,16 @@ static int selectExpander(Walker *pWalker, Select *p){ ** expanded. */ int tableSeen = 0; /* Set to 1 when TABLE matches */ char *zTName = 0; /* text of name of TABLE */ + int iErrOfst; if( pE->op==TK_DOT ){ assert( pE->pLeft!=0 ); assert( !ExprHasProperty(pE->pLeft, EP_IntValue) ); zTName = pE->pLeft->u.zToken; + assert( ExprUseWOfst(pE->pLeft) ); + iErrOfst = pE->pRight->w.iOfst; + }else{ + assert( ExprUseWOfst(pE) ); + iErrOfst = pE->w.iOfst; } for(i=0, pFrom=pTabList->a; inSrc; i++, pFrom++){ Table *pTab = pFrom->pTab; /* Table for this data source */ @@ -143285,6 +146552,7 @@ static int selectExpander(Walker *pWalker, Select *p){ for(ii=0; iinId; ii++){ const char *zUName = pUsing->a[ii].zName; pRight = sqlite3Expr(db, TK_ID, zUName); + sqlite3ExprSetErrorOffset(pRight, iErrOfst); pNew = sqlite3ExprListAppend(pParse, pNew, pRight); if( pNew ){ struct ExprList_item *pX = &pNew->a[pNew->nExpr-1]; @@ -143357,6 +146625,7 @@ static int selectExpander(Walker *pWalker, Select *p){ }else{ pExpr = pRight; } + sqlite3ExprSetErrorOffset(pExpr, iErrOfst); pNew = sqlite3ExprListAppend(pParse, pNew, pExpr); if( pNew==0 ){ break; /* OOM */ @@ -143411,8 +146680,8 @@ static int selectExpander(Walker *pWalker, Select *p){ } } #if TREETRACE_ENABLED - if( sqlite3TreeTrace & 0x100 ){ - SELECTTRACE(0x100,pParse,p,("After result-set wildcard expansion:\n")); + if( sqlite3TreeTrace & 0x8 ){ + TREETRACE(0x8,pParse,p,("After result-set wildcard expansion:\n")); sqlite3TreeViewSelect(0, p, 0); } #endif @@ -143463,14 +146732,14 @@ static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){ ** This is a Walker.xSelectCallback callback for the sqlite3SelectTypeInfo() ** interface. ** -** For each FROM-clause subquery, add Column.zType and Column.zColl -** information to the Table structure that represents the result set -** of that subquery. +** For each FROM-clause subquery, add Column.zType, Column.zColl, and +** Column.affinity information to the Table structure that represents +** the result set of that subquery. ** ** The Table structure that represents the result set was constructed -** by selectExpander() but the type and collation information was omitted -** at that point because identifiers had not yet been resolved. This -** routine is called after identifier resolution. +** by selectExpander() but the type and collation and affinity information +** was omitted at that point because identifiers had not yet been resolved. +** This routine is called after identifier resolution. */ static void selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){ Parse *pParse; @@ -143490,9 +146759,7 @@ static void selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){ /* A sub-query in the FROM clause of a SELECT */ Select *pSel = pFrom->pSelect; if( pSel ){ - while( pSel->pPrior ) pSel = pSel->pPrior; - sqlite3SelectAddColumnTypeAndCollation(pParse, pTab, pSel, - SQLITE_AFF_NONE); + sqlite3SubqueryColumnTypes(pParse, pTab, pSel, SQLITE_AFF_NONE); } } } @@ -143547,6 +146814,178 @@ SQLITE_PRIVATE void sqlite3SelectPrep( sqlite3SelectAddTypeInfo(pParse, p); } +#if TREETRACE_ENABLED +/* +** Display all information about an AggInfo object +*/ +static void printAggInfo(AggInfo *pAggInfo){ + int ii; + for(ii=0; iinColumn; ii++){ + struct AggInfo_col *pCol = &pAggInfo->aCol[ii]; + sqlite3DebugPrintf( + "agg-column[%d] pTab=%s iTable=%d iColumn=%d iMem=%d" + " iSorterColumn=%d %s\n", + ii, pCol->pTab ? pCol->pTab->zName : "NULL", + pCol->iTable, pCol->iColumn, pAggInfo->iFirstReg+ii, + pCol->iSorterColumn, + ii>=pAggInfo->nAccumulator ? "" : " Accumulator"); + sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0); + } + for(ii=0; iinFunc; ii++){ + sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n", + ii, pAggInfo->iFirstReg+pAggInfo->nColumn+ii); + sqlite3TreeViewExpr(0, pAggInfo->aFunc[ii].pFExpr, 0); + } +} +#endif /* TREETRACE_ENABLED */ + +/* +** Analyze the arguments to aggregate functions. Create new pAggInfo->aCol[] +** entries for columns that are arguments to aggregate functions but which +** are not otherwise used. +** +** The aCol[] entries in AggInfo prior to nAccumulator are columns that +** are referenced outside of aggregate functions. These might be columns +** that are part of the GROUP by clause, for example. Other database engines +** would throw an error if there is a column reference that is not in the +** GROUP BY clause and that is not part of an aggregate function argument. +** But SQLite allows this. +** +** The aCol[] entries beginning with the aCol[nAccumulator] and following +** are column references that are used exclusively as arguments to +** aggregate functions. This routine is responsible for computing +** (or recomputing) those aCol[] entries. +*/ +static void analyzeAggFuncArgs( + AggInfo *pAggInfo, + NameContext *pNC +){ + int i; + assert( pAggInfo!=0 ); + assert( pAggInfo->iFirstReg==0 ); + pNC->ncFlags |= NC_InAggFunc; + for(i=0; inFunc; i++){ + Expr *pExpr = pAggInfo->aFunc[i].pFExpr; + assert( ExprUseXList(pExpr) ); + sqlite3ExprAnalyzeAggList(pNC, pExpr->x.pList); +#ifndef SQLITE_OMIT_WINDOWFUNC + assert( !IsWindowFunc(pExpr) ); + if( ExprHasProperty(pExpr, EP_WinFunc) ){ + sqlite3ExprAnalyzeAggregates(pNC, pExpr->y.pWin->pFilter); + } +#endif + } + pNC->ncFlags &= ~NC_InAggFunc; +} + +/* +** An index on expressions is being used in the inner loop of an +** aggregate query with a GROUP BY clause. This routine attempts +** to adjust the AggInfo object to take advantage of index and to +** perhaps use the index as a covering index. +** +*/ +static void optimizeAggregateUseOfIndexedExpr( + Parse *pParse, /* Parsing context */ + Select *pSelect, /* The SELECT statement being processed */ + AggInfo *pAggInfo, /* The aggregate info */ + NameContext *pNC /* Name context used to resolve agg-func args */ +){ + assert( pAggInfo->iFirstReg==0 ); + assert( pSelect!=0 ); + assert( pSelect->pGroupBy!=0 ); + pAggInfo->nColumn = pAggInfo->nAccumulator; + if( ALWAYS(pAggInfo->nSortingColumn>0) ){ + int mx = pSelect->pGroupBy->nExpr - 1; + int j, k; + for(j=0; jnColumn; j++){ + k = pAggInfo->aCol[j].iSorterColumn; + if( k>mx ) mx = k; + } + pAggInfo->nSortingColumn = mx+1; + } + analyzeAggFuncArgs(pAggInfo, pNC); +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x20 ){ + IndexedExpr *pIEpr; + TREETRACE(0x20, pParse, pSelect, + ("AggInfo (possibly) adjusted for Indexed Exprs\n")); + sqlite3TreeViewSelect(0, pSelect, 0); + for(pIEpr=pParse->pIdxEpr; pIEpr; pIEpr=pIEpr->pIENext){ + printf("data-cursor=%d index={%d,%d}\n", + pIEpr->iDataCur, pIEpr->iIdxCur, pIEpr->iIdxCol); + sqlite3TreeViewExpr(0, pIEpr->pExpr, 0); + } + printAggInfo(pAggInfo); + } +#else + UNUSED_PARAMETER(pSelect); + UNUSED_PARAMETER(pParse); +#endif +} + +/* +** Walker callback for aggregateConvertIndexedExprRefToColumn(). +*/ +static int aggregateIdxEprRefToColCallback(Walker *pWalker, Expr *pExpr){ + AggInfo *pAggInfo; + struct AggInfo_col *pCol; + UNUSED_PARAMETER(pWalker); + if( pExpr->pAggInfo==0 ) return WRC_Continue; + if( pExpr->op==TK_AGG_COLUMN ) return WRC_Continue; + if( pExpr->op==TK_AGG_FUNCTION ) return WRC_Continue; + if( pExpr->op==TK_IF_NULL_ROW ) return WRC_Continue; + pAggInfo = pExpr->pAggInfo; + if( NEVER(pExpr->iAgg>=pAggInfo->nColumn) ) return WRC_Continue; + assert( pExpr->iAgg>=0 ); + pCol = &pAggInfo->aCol[pExpr->iAgg]; + pExpr->op = TK_AGG_COLUMN; + pExpr->iTable = pCol->iTable; + pExpr->iColumn = pCol->iColumn; + ExprClearProperty(pExpr, EP_Skip|EP_Collate|EP_Unlikely); + return WRC_Prune; +} + +/* +** Convert every pAggInfo->aFunc[].pExpr such that any node within +** those expressions that has pAppInfo set is changed into a TK_AGG_COLUMN +** opcode. +*/ +static void aggregateConvertIndexedExprRefToColumn(AggInfo *pAggInfo){ + int i; + Walker w; + memset(&w, 0, sizeof(w)); + w.xExprCallback = aggregateIdxEprRefToColCallback; + for(i=0; inFunc; i++){ + sqlite3WalkExpr(&w, pAggInfo->aFunc[i].pFExpr); + } +} + + +/* +** Allocate a block of registers so that there is one register for each +** pAggInfo->aCol[] and pAggInfo->aFunc[] entry in pAggInfo. The first +** register in this block is stored in pAggInfo->iFirstReg. +** +** This routine may only be called once for each AggInfo object. Prior +** to calling this routine: +** +** * The aCol[] and aFunc[] arrays may be modified +** * The AggInfoColumnReg() and AggInfoFuncReg() macros may not be used +** +** After calling this routine: +** +** * The aCol[] and aFunc[] arrays are fixed +** * The AggInfoColumnReg() and AggInfoFuncReg() macros may be used +** +*/ +static void assignAggregateRegisters(Parse *pParse, AggInfo *pAggInfo){ + assert( pAggInfo!=0 ); + assert( pAggInfo->iFirstReg==0 ); + pAggInfo->iFirstReg = pParse->nMem + 1; + pParse->nMem += pAggInfo->nColumn + pAggInfo->nFunc; +} + /* ** Reset the aggregate accumulator. ** @@ -143560,24 +146999,13 @@ static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){ int i; struct AggInfo_func *pFunc; int nReg = pAggInfo->nFunc + pAggInfo->nColumn; + assert( pAggInfo->iFirstReg>0 ); assert( pParse->db->pParse==pParse ); assert( pParse->db->mallocFailed==0 || pParse->nErr!=0 ); if( nReg==0 ) return; if( pParse->nErr ) return; -#ifdef SQLITE_DEBUG - /* Verify that all AggInfo registers are within the range specified by - ** AggInfo.mnReg..AggInfo.mxReg */ - assert( nReg==pAggInfo->mxReg-pAggInfo->mnReg+1 ); - for(i=0; inColumn; i++){ - assert( pAggInfo->aCol[i].iMem>=pAggInfo->mnReg - && pAggInfo->aCol[i].iMem<=pAggInfo->mxReg ); - } - for(i=0; inFunc; i++){ - assert( pAggInfo->aFunc[i].iMem>=pAggInfo->mnReg - && pAggInfo->aFunc[i].iMem<=pAggInfo->mxReg ); - } -#endif - sqlite3VdbeAddOp3(v, OP_Null, 0, pAggInfo->mnReg, pAggInfo->mxReg); + sqlite3VdbeAddOp3(v, OP_Null, 0, pAggInfo->iFirstReg, + pAggInfo->iFirstReg+nReg-1); for(pFunc=pAggInfo->aFunc, i=0; inFunc; i++, pFunc++){ if( pFunc->iDistinct>=0 ){ Expr *pE = pFunc->pFExpr; @@ -143609,15 +147037,16 @@ static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){ ExprList *pList; assert( ExprUseXList(pF->pFExpr) ); pList = pF->pFExpr->x.pList; - sqlite3VdbeAddOp2(v, OP_AggFinal, pF->iMem, pList ? pList->nExpr : 0); + sqlite3VdbeAddOp2(v, OP_AggFinal, AggInfoFuncReg(pAggInfo,i), + pList ? pList->nExpr : 0); sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF); } } /* -** Update the accumulator memory cells for an aggregate based on -** the current cursor position. +** Generate code that will update the accumulator memory cells for an +** aggregate based on the current cursor position. ** ** If regAcc is non-zero and there are no min() or max() aggregates ** in pAggInfo, then only populate the pAggInfo->nAccumulator accumulator @@ -143637,6 +147066,8 @@ static void updateAccumulator( struct AggInfo_func *pF; struct AggInfo_col *pC; + assert( pAggInfo->iFirstReg>0 ); + if( pParse->nErr ) return; pAggInfo->directMode = 1; for(i=0, pF=pAggInfo->aFunc; inFunc; i++, pF++){ int nArg; @@ -143697,7 +147128,7 @@ static void updateAccumulator( if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem; sqlite3VdbeAddOp4(v, OP_CollSeq, regHit, 0, 0, (char *)pColl, P4_COLLSEQ); } - sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, pF->iMem); + sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, AggInfoFuncReg(pAggInfo,i)); sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF); sqlite3VdbeChangeP5(v, (u8)nArg); sqlite3ReleaseTempRange(pParse, regAgg, nArg); @@ -143712,7 +147143,7 @@ static void updateAccumulator( addrHitTest = sqlite3VdbeAddOp1(v, OP_If, regHit); VdbeCoverage(v); } for(i=0, pC=pAggInfo->aCol; inAccumulator; i++, pC++){ - sqlite3ExprCode(pParse, pC->pCExpr, pC->iMem); + sqlite3ExprCode(pParse, pC->pCExpr, AggInfoColumnReg(pAggInfo,i)); } pAggInfo->directMode = 0; @@ -143808,26 +147239,31 @@ static void havingToWhere(Parse *pParse, Select *p){ sqlite3WalkExpr(&sWalker, p->pHaving); #if TREETRACE_ENABLED if( sWalker.eCode && (sqlite3TreeTrace & 0x100)!=0 ){ - SELECTTRACE(0x100,pParse,p,("Move HAVING terms into WHERE:\n")); + TREETRACE(0x100,pParse,p,("Move HAVING terms into WHERE:\n")); sqlite3TreeViewSelect(0, p, 0); } #endif } /* -** Check to see if the pThis entry of pTabList is a self-join of a prior view. -** If it is, then return the SrcItem for the prior view. If it is not, -** then return 0. +** Check to see if the pThis entry of pTabList is a self-join of another view. +** Search FROM-clause entries in the range of iFirst..iEnd, including iFirst +** but stopping before iEnd. +** +** If pThis is a self-join, then return the SrcItem for the first other +** instance of that view found. If pThis is not a self-join then return 0. */ static SrcItem *isSelfJoinView( SrcList *pTabList, /* Search for self-joins in this FROM clause */ - SrcItem *pThis /* Search for prior reference to this subquery */ + SrcItem *pThis, /* Search for prior reference to this subquery */ + int iFirst, int iEnd /* Range of FROM-clause entries to search. */ ){ SrcItem *pItem; assert( pThis->pSelect!=0 ); if( pThis->pSelect->selFlags & SF_PushDown ) return 0; - for(pItem = pTabList->a; pItema[iFirst++]; if( pItem->pSelect==0 ) continue; if( pItem->fg.viaCoroutine ) continue; if( pItem->zName==0 ) continue; @@ -143860,7 +147296,6 @@ static void agginfoFree(sqlite3 *db, AggInfo *p){ sqlite3DbFreeNN(db, p); } -#ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION /* ** Attempt to transform a query of the form ** @@ -143888,7 +147323,9 @@ static int countOfViewOptimization(Parse *pParse, Select *p){ if( (p->selFlags & SF_Aggregate)==0 ) return 0; /* This is an aggregate */ if( p->pEList->nExpr!=1 ) return 0; /* Single result column */ if( p->pWhere ) return 0; + if( p->pHaving ) return 0; if( p->pGroupBy ) return 0; + if( p->pOrderBy ) return 0; pExpr = p->pEList->a[0].pExpr; if( pExpr->op!=TK_AGG_FUNCTION ) return 0; /* Result is an aggregate */ assert( ExprUseUToken(pExpr) ); @@ -143896,15 +147333,18 @@ static int countOfViewOptimization(Parse *pParse, Select *p){ assert( ExprUseXList(pExpr) ); if( pExpr->x.pList!=0 ) return 0; /* Must be count(*) */ if( p->pSrc->nSrc!=1 ) return 0; /* One table in FROM */ + if( ExprHasProperty(pExpr, EP_WinFunc) ) return 0;/* Not a window function */ pSub = p->pSrc->a[0].pSelect; if( pSub==0 ) return 0; /* The FROM is a subquery */ - if( pSub->pPrior==0 ) return 0; /* Must be a compound ry */ + if( pSub->pPrior==0 ) return 0; /* Must be a compound */ + if( pSub->selFlags & SF_CopyCte ) return 0; /* Not a CTE */ do{ if( pSub->op!=TK_ALL && pSub->pPrior ) return 0; /* Must be UNION ALL */ if( pSub->pWhere ) return 0; /* No WHERE clause */ if( pSub->pLimit ) return 0; /* No LIMIT clause */ if( pSub->selFlags & SF_Aggregate ) return 0; /* Not an aggregate */ - pSub = pSub->pPrior; /* Repeat over compound */ + assert( pSub->pHaving==0 ); /* Due to the previous */ + pSub = pSub->pPrior; /* Repeat over compound */ }while( pSub ); /* If we reach this point then it is OK to perform the transformation */ @@ -143940,14 +147380,13 @@ static int countOfViewOptimization(Parse *pParse, Select *p){ p->selFlags &= ~SF_Aggregate; #if TREETRACE_ENABLED - if( sqlite3TreeTrace & 0x400 ){ - SELECTTRACE(0x400,pParse,p,("After count-of-view optimization:\n")); + if( sqlite3TreeTrace & 0x200 ){ + TREETRACE(0x200,pParse,p,("After count-of-view optimization:\n")); sqlite3TreeViewSelect(0, p, 0); } #endif return 1; } -#endif /* SQLITE_COUNTOFVIEW_OPTIMIZATION */ /* ** If any term of pSrc, or any SF_NestedFrom sub-query, is not the same @@ -143972,6 +147411,68 @@ static int sameSrcAlias(SrcItem *p0, SrcList *pSrc){ return 0; } +/* +** Return TRUE (non-zero) if the i-th entry in the pTabList SrcList can +** be implemented as a co-routine. The i-th entry is guaranteed to be +** a subquery. +** +** The subquery is implemented as a co-routine if all of the following are +** true: +** +** (1) The subquery will likely be implemented in the outer loop of +** the query. This will be the case if any one of the following +** conditions hold: +** (a) The subquery is the only term in the FROM clause +** (b) The subquery is the left-most term and a CROSS JOIN or similar +** requires it to be the outer loop +** (c) All of the following are true: +** (i) The subquery is the left-most subquery in the FROM clause +** (ii) There is nothing that would prevent the subquery from +** being used as the outer loop if the sqlite3WhereBegin() +** routine nominates it to that position. +** (iii) The query is not a UPDATE ... FROM +** (2) The subquery is not a CTE that should be materialized because +** (a) the AS MATERIALIZED keyword is used, or +** (b) the CTE is used multiple times and does not have the +** NOT MATERIALIZED keyword +** (3) The subquery is not part of a left operand for a RIGHT JOIN +** (4) The SQLITE_Coroutine optimization disable flag is not set +** (5) The subquery is not self-joined +*/ +static int fromClauseTermCanBeCoroutine( + Parse *pParse, /* Parsing context */ + SrcList *pTabList, /* FROM clause */ + int i, /* Which term of the FROM clause holds the subquery */ + int selFlags /* Flags on the SELECT statement */ +){ + SrcItem *pItem = &pTabList->a[i]; + if( pItem->fg.isCte ){ + const CteUse *pCteUse = pItem->u2.pCteUse; + if( pCteUse->eM10d==M10d_Yes ) return 0; /* (2a) */ + if( pCteUse->nUse>=2 && pCteUse->eM10d!=M10d_No ) return 0; /* (2b) */ + } + if( pTabList->a[0].fg.jointype & JT_LTORJ ) return 0; /* (3) */ + if( OptimizationDisabled(pParse->db, SQLITE_Coroutines) ) return 0; /* (4) */ + if( isSelfJoinView(pTabList, pItem, i+1, pTabList->nSrc)!=0 ){ + return 0; /* (5) */ + } + if( i==0 ){ + if( pTabList->nSrc==1 ) return 1; /* (1a) */ + if( pTabList->a[1].fg.jointype & JT_CROSS ) return 1; /* (1b) */ + if( selFlags & SF_UpdateFrom ) return 0; /* (1c-iii) */ + return 1; + } + if( selFlags & SF_UpdateFrom ) return 0; /* (1c-iii) */ + while( 1 /*exit-by-break*/ ){ + if( pItem->fg.jointype & (JT_OUTER|JT_CROSS) ) return 0; /* (1c-ii) */ + if( i==0 ) break; + i--; + pItem--; + if( pItem->pSelect!=0 ) return 0; /* (1c-i) */ + } + return 1; +} + /* ** Generate code for the SELECT statement given in the p argument. ** @@ -144017,8 +147518,8 @@ SQLITE_PRIVATE int sqlite3Select( assert( db->mallocFailed==0 ); if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1; #if TREETRACE_ENABLED - SELECTTRACE(1,pParse,p, ("begin processing:\n", pParse->addrExplain)); - if( sqlite3TreeTrace & 0x10100 ){ + TREETRACE(0x1,pParse,p, ("begin processing:\n", pParse->addrExplain)); + if( sqlite3TreeTrace & 0x10000 ){ if( (sqlite3TreeTrace & 0x10001)==0x10000 ){ sqlite3TreeViewLine(0, "In sqlite3Select() at %s:%d", __FILE__, __LINE__); @@ -144038,8 +147539,8 @@ SQLITE_PRIVATE int sqlite3Select( /* All of these destinations are also able to ignore the ORDER BY clause */ if( p->pOrderBy ){ #if TREETRACE_ENABLED - SELECTTRACE(1,pParse,p, ("dropping superfluous ORDER BY:\n")); - if( sqlite3TreeTrace & 0x100 ){ + TREETRACE(0x800,pParse,p, ("dropping superfluous ORDER BY:\n")); + if( sqlite3TreeTrace & 0x800 ){ sqlite3TreeViewExprList(0, p->pOrderBy, 0, "ORDERBY"); } #endif @@ -144059,8 +147560,8 @@ SQLITE_PRIVATE int sqlite3Select( assert( db->mallocFailed==0 ); assert( p->pEList!=0 ); #if TREETRACE_ENABLED - if( sqlite3TreeTrace & 0x104 ){ - SELECTTRACE(0x104,pParse,p, ("after name resolution:\n")); + if( sqlite3TreeTrace & 0x10 ){ + TREETRACE(0x10,pParse,p, ("after name resolution:\n")); sqlite3TreeViewSelect(0, p, 0); } #endif @@ -144101,8 +147602,8 @@ SQLITE_PRIVATE int sqlite3Select( goto select_end; } #if TREETRACE_ENABLED - if( p->pWin && (sqlite3TreeTrace & 0x108)!=0 ){ - SELECTTRACE(0x104,pParse,p, ("after window rewrite:\n")); + if( p->pWin && (sqlite3TreeTrace & 0x40)!=0 ){ + TREETRACE(0x40,pParse,p, ("after window rewrite:\n")); sqlite3TreeViewSelect(0, p, 0); } #endif @@ -144126,22 +147627,59 @@ SQLITE_PRIVATE int sqlite3Select( ** to a real table */ assert( pTab!=0 ); - /* Convert LEFT JOIN into JOIN if there are terms of the right table - ** of the LEFT JOIN used in the WHERE clause. + /* Try to simplify joins: + ** + ** LEFT JOIN -> JOIN + ** RIGHT JOIN -> JOIN + ** FULL JOIN -> RIGHT JOIN + ** + ** If terms of the i-th table are used in the WHERE clause in such a + ** way that the i-th table cannot be the NULL row of a join, then + ** perform the appropriate simplification. This is called + ** "OUTER JOIN strength reduction" in the SQLite documentation. */ - if( (pItem->fg.jointype & (JT_LEFT|JT_RIGHT))==JT_LEFT - && sqlite3ExprImpliesNonNullRow(p->pWhere, pItem->iCursor) + if( (pItem->fg.jointype & (JT_LEFT|JT_LTORJ))!=0 + && sqlite3ExprImpliesNonNullRow(p->pWhere, pItem->iCursor, + pItem->fg.jointype & JT_LTORJ) && OptimizationEnabled(db, SQLITE_SimplifyJoin) ){ - SELECTTRACE(0x100,pParse,p, - ("LEFT-JOIN simplifies to JOIN on term %d\n",i)); - pItem->fg.jointype &= ~(JT_LEFT|JT_OUTER); + if( pItem->fg.jointype & JT_LEFT ){ + if( pItem->fg.jointype & JT_RIGHT ){ + TREETRACE(0x1000,pParse,p, + ("FULL-JOIN simplifies to RIGHT-JOIN on term %d\n",i)); + pItem->fg.jointype &= ~JT_LEFT; + }else{ + TREETRACE(0x1000,pParse,p, + ("LEFT-JOIN simplifies to JOIN on term %d\n",i)); + pItem->fg.jointype &= ~(JT_LEFT|JT_OUTER); + } + } + if( pItem->fg.jointype & JT_LTORJ ){ + for(j=i+1; jnSrc; j++){ + SrcItem *pI2 = &pTabList->a[j]; + if( pI2->fg.jointype & JT_RIGHT ){ + if( pI2->fg.jointype & JT_LEFT ){ + TREETRACE(0x1000,pParse,p, + ("FULL-JOIN simplifies to LEFT-JOIN on term %d\n",j)); + pI2->fg.jointype &= ~JT_RIGHT; + }else{ + TREETRACE(0x1000,pParse,p, + ("RIGHT-JOIN simplifies to JOIN on term %d\n",j)); + pI2->fg.jointype &= ~(JT_RIGHT|JT_OUTER); + } + } + } + for(j=pTabList->nSrc-1; j>=i; j--){ + pTabList->a[j].fg.jointype &= ~JT_LTORJ; + if( pTabList->a[j].fg.jointype & JT_RIGHT ) break; + } + } assert( pItem->iCursor>=0 ); unsetJoinExpr(p->pWhere, pItem->iCursor, pTabList->a[0].fg.jointype & JT_LTORJ); } - /* No futher action if this term of the FROM clause is no a subquery */ + /* No further action if this term of the FROM clause is not a subquery */ if( pSub==0 ) continue; /* Catch mismatch in the declared columns of a view and the number of @@ -144152,6 +147690,14 @@ SQLITE_PRIVATE int sqlite3Select( goto select_end; } + /* Do not attempt the usual optimizations (flattening and ORDER BY + ** elimination) on a MATERIALIZED common table expression because + ** a MATERIALIZED common table expression is an optimization fence. + */ + if( pItem->fg.isCte && pItem->u2.pCteUse->eM10d==M10d_Yes ){ + continue; + } + /* Do not try to flatten an aggregate subquery. ** ** Flattening an aggregate subquery is only possible if the outer query @@ -144181,6 +147727,8 @@ SQLITE_PRIVATE int sqlite3Select( ** (a) The outer query has a different ORDER BY clause ** (b) The subquery is part of a join ** See forum post 062d576715d277c8 + ** + ** Also retain the ORDER BY if the OmitOrderBy optimization is disabled. */ if( pSub->pOrderBy!=0 && (p->pOrderBy!=0 || pTabList->nSrc>1) /* Condition (5) */ @@ -144189,7 +147737,7 @@ SQLITE_PRIVATE int sqlite3Select( && (p->selFlags & SF_OrderByReqd)==0 /* Condition (3) and (4) */ && OptimizationEnabled(db, SQLITE_OmitOrderBy) ){ - SELECTTRACE(0x100,pParse,p, + TREETRACE(0x800,pParse,p, ("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1)); sqlite3ParserAddCleanup(pParse, (void(*)(sqlite3*,void*))sqlite3ExprListDelete, @@ -144244,8 +147792,8 @@ SQLITE_PRIVATE int sqlite3Select( if( p->pPrior ){ rc = multiSelect(pParse, p, pDest); #if TREETRACE_ENABLED - SELECTTRACE(0x1,pParse,p,("end compound-select processing\n")); - if( (sqlite3TreeTrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){ + TREETRACE(0x400,pParse,p,("end compound-select processing\n")); + if( (sqlite3TreeTrace & 0x400)!=0 && ExplainQueryPlanParent(pParse)==0 ){ sqlite3TreeViewSelect(0, p, 0); } #endif @@ -144265,24 +147813,21 @@ SQLITE_PRIVATE int sqlite3Select( && propagateConstants(pParse, p) ){ #if TREETRACE_ENABLED - if( sqlite3TreeTrace & 0x100 ){ - SELECTTRACE(0x100,pParse,p,("After constant propagation:\n")); + if( sqlite3TreeTrace & 0x2000 ){ + TREETRACE(0x2000,pParse,p,("After constant propagation:\n")); sqlite3TreeViewSelect(0, p, 0); } #endif }else{ - SELECTTRACE(0x100,pParse,p,("Constant propagation not helpful\n")); + TREETRACE(0x2000,pParse,p,("Constant propagation not helpful\n")); } -#ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION if( OptimizationEnabled(db, SQLITE_QueryFlattener|SQLITE_CountOfView) && countOfViewOptimization(pParse, p) ){ if( db->mallocFailed ) goto select_end; - pEList = p->pEList; pTabList = p->pSrc; } -#endif /* For each term in the FROM clause, do two things: ** (1) Authorized unreferenced tables @@ -144341,39 +147886,42 @@ SQLITE_PRIVATE int sqlite3Select( if( OptimizationEnabled(db, SQLITE_PushDown) && (pItem->fg.isCte==0 || (pItem->u2.pCteUse->eM10d!=M10d_Yes && pItem->u2.pCteUse->nUse<2)) - && pushDownWhereTerms(pParse, pSub, p->pWhere, pItem) + && pushDownWhereTerms(pParse, pSub, p->pWhere, pTabList, i) ){ #if TREETRACE_ENABLED - if( sqlite3TreeTrace & 0x100 ){ - SELECTTRACE(0x100,pParse,p, + if( sqlite3TreeTrace & 0x4000 ){ + TREETRACE(0x4000,pParse,p, ("After WHERE-clause push-down into subquery %d:\n", pSub->selId)); sqlite3TreeViewSelect(0, p, 0); } #endif assert( pItem->pSelect && (pItem->pSelect->selFlags & SF_PushDown)!=0 ); }else{ - SELECTTRACE(0x100,pParse,p,("Push-down not possible\n")); + TREETRACE(0x4000,pParse,p,("Push-down not possible\n")); + } + + /* Convert unused result columns of the subquery into simple NULL + ** expressions, to avoid unneeded searching and computation. + */ + if( OptimizationEnabled(db, SQLITE_NullUnusedCols) + && disableUnusedSubqueryResultColumns(pItem) + ){ +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x4000 ){ + TREETRACE(0x4000,pParse,p, + ("Change unused result columns to NULL for subquery %d:\n", + pSub->selId)); + sqlite3TreeViewSelect(0, p, 0); + } +#endif } zSavedAuthContext = pParse->zAuthContext; pParse->zAuthContext = pItem->zName; /* Generate code to implement the subquery - ** - ** The subquery is implemented as a co-routine if all of the following are - ** true: - ** - ** (1) the subquery is guaranteed to be the outer loop (so that - ** it does not need to be computed more than once), and - ** (2) the subquery is not a CTE that should be materialized - ** (3) the subquery is not part of a left operand for a RIGHT JOIN */ - if( i==0 - && (pTabList->nSrc==1 - || (pTabList->a[1].fg.jointype&(JT_OUTER|JT_CROSS))!=0) /* (1) */ - && (pItem->fg.isCte==0 || pItem->u2.pCteUse->eM10d!=M10d_Yes) /* (2) */ - && (pTabList->a[0].fg.jointype & JT_LTORJ)==0 /* (3) */ - ){ + if( fromClauseTermCanBeCoroutine(pParse, pTabList, i, p->selFlags) ){ /* Implement a co-routine that will return a single row of the result ** set on each invocation. */ @@ -144395,7 +147943,7 @@ SQLITE_PRIVATE int sqlite3Select( }else if( pItem->fg.isCte && pItem->u2.pCteUse->addrM9e>0 ){ /* This is a CTE for which materialization code has already been ** generated. Invoke the subroutine to compute the materialization, - ** the make the pItem->iCursor be a copy of the ephemerial table that + ** the make the pItem->iCursor be a copy of the ephemeral table that ** holds the result of the materialization. */ CteUse *pCteUse = pItem->u2.pCteUse; sqlite3VdbeAddOp2(v, OP_Gosub, pCteUse->regRtn, pCteUse->addrM9e); @@ -144404,7 +147952,7 @@ SQLITE_PRIVATE int sqlite3Select( VdbeComment((v, "%!S", pItem)); } pSub->nSelectRow = pCteUse->nRowEst; - }else if( (pPrior = isSelfJoinView(pTabList, pItem))!=0 ){ + }else if( (pPrior = isSelfJoinView(pTabList, pItem, 0, i))!=0 ){ /* This view has already been materialized by a prior entry in ** this same FROM clause. Reuse it. */ if( pPrior->addrFillSub ){ @@ -144418,6 +147966,9 @@ SQLITE_PRIVATE int sqlite3Select( ** the same view can reuse the materialization. */ int topAddr; int onceAddr = 0; +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + int addrExplain; +#endif pItem->regReturn = ++pParse->nMem; topAddr = sqlite3VdbeAddOp0(v, OP_Goto); @@ -144433,15 +147984,14 @@ SQLITE_PRIVATE int sqlite3Select( VdbeNoopComment((v, "materialize %!S", pItem)); } sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor); - ExplainQueryPlan((pParse, 1, "MATERIALIZE %!S", pItem)); - dest.zAffSdst = sqlite3TableAffinityStr(db, pItem->pTab); + + ExplainQueryPlan2(addrExplain, (pParse, 1, "MATERIALIZE %!S", pItem)); sqlite3Select(pParse, pSub, &dest); - sqlite3DbFree(db, dest.zAffSdst); - dest.zAffSdst = 0; pItem->pTab->nRowLogEst = pSub->nSelectRow; if( onceAddr ) sqlite3VdbeJumpHere(v, onceAddr); sqlite3VdbeAddOp2(v, OP_Return, pItem->regReturn, topAddr+1); VdbeComment((v, "end %!S", pItem)); + sqlite3VdbeScanStatusRange(v, addrExplain, addrExplain, -1); sqlite3VdbeJumpHere(v, topAddr); sqlite3ClearTempRegCache(pParse); if( pItem->fg.isCte && pItem->fg.isCorrelated==0 ){ @@ -144467,8 +148017,8 @@ SQLITE_PRIVATE int sqlite3Select( sDistinct.isTnct = (p->selFlags & SF_Distinct)!=0; #if TREETRACE_ENABLED - if( sqlite3TreeTrace & 0x400 ){ - SELECTTRACE(0x400,pParse,p,("After all FROM-clause analysis:\n")); + if( sqlite3TreeTrace & 0x8000 ){ + TREETRACE(0x8000,pParse,p,("After all FROM-clause analysis:\n")); sqlite3TreeViewSelect(0, p, 0); } #endif @@ -144504,8 +148054,8 @@ SQLITE_PRIVATE int sqlite3Select( sDistinct.isTnct = 2; #if TREETRACE_ENABLED - if( sqlite3TreeTrace & 0x400 ){ - SELECTTRACE(0x400,pParse,p,("Transform DISTINCT into GROUP BY:\n")); + if( sqlite3TreeTrace & 0x20000 ){ + TREETRACE(0x20000,pParse,p,("Transform DISTINCT into GROUP BY:\n")); sqlite3TreeViewSelect(0, p, 0); } #endif @@ -144591,7 +148141,7 @@ SQLITE_PRIVATE int sqlite3Select( /* Begin the database scan. */ - SELECTTRACE(1,pParse,p,("WhereBegin\n")); + TREETRACE(0x2,pParse,p,("WhereBegin\n")); pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, sSort.pOrderBy, p->pEList, p, wctrlFlags, p->nSelectRow); if( pWInfo==0 ) goto select_end; @@ -144608,7 +148158,7 @@ SQLITE_PRIVATE int sqlite3Select( sSort.pOrderBy = 0; } } - SELECTTRACE(1,pParse,p,("WhereBegin returns\n")); + TREETRACE(0x2,pParse,p,("WhereBegin returns\n")); /* If sorting index that was created by a prior OP_OpenEphemeral ** instruction ended up not being needed, then change the OP_OpenEphemeral @@ -144647,7 +148197,7 @@ SQLITE_PRIVATE int sqlite3Select( /* End the database scan loop. */ - SELECTTRACE(1,pParse,p,("WhereEnd\n")); + TREETRACE(0x2,pParse,p,("WhereEnd\n")); sqlite3WhereEnd(pWInfo); } }else{ @@ -144728,12 +148278,14 @@ SQLITE_PRIVATE int sqlite3Select( goto select_end; } pAggInfo->selId = p->selId; +#ifdef SQLITE_DEBUG + pAggInfo->pSelect = p; +#endif memset(&sNC, 0, sizeof(sNC)); sNC.pParse = pParse; sNC.pSrcList = pTabList; sNC.uNC.pAggInfo = pAggInfo; VVA_ONLY( sNC.ncFlags = NC_UAggInfo; ) - pAggInfo->mnReg = pParse->nMem+1; pAggInfo->nSortingColumn = pGroupBy ? pGroupBy->nExpr : 0; pAggInfo->pGroupBy = pGroupBy; sqlite3ExprAnalyzeAggList(&sNC, pEList); @@ -144754,45 +148306,17 @@ SQLITE_PRIVATE int sqlite3Select( }else{ minMaxFlag = WHERE_ORDERBY_NORMAL; } - for(i=0; inFunc; i++){ - Expr *pExpr = pAggInfo->aFunc[i].pFExpr; - assert( ExprUseXList(pExpr) ); - sNC.ncFlags |= NC_InAggFunc; - sqlite3ExprAnalyzeAggList(&sNC, pExpr->x.pList); -#ifndef SQLITE_OMIT_WINDOWFUNC - assert( !IsWindowFunc(pExpr) ); - if( ExprHasProperty(pExpr, EP_WinFunc) ){ - sqlite3ExprAnalyzeAggregates(&sNC, pExpr->y.pWin->pFilter); - } -#endif - sNC.ncFlags &= ~NC_InAggFunc; - } - pAggInfo->mxReg = pParse->nMem; + analyzeAggFuncArgs(pAggInfo, &sNC); if( db->mallocFailed ) goto select_end; #if TREETRACE_ENABLED - if( sqlite3TreeTrace & 0x400 ){ - int ii; - SELECTTRACE(0x400,pParse,p,("After aggregate analysis %p:\n", pAggInfo)); + if( sqlite3TreeTrace & 0x20 ){ + TREETRACE(0x20,pParse,p,("After aggregate analysis %p:\n", pAggInfo)); sqlite3TreeViewSelect(0, p, 0); if( minMaxFlag ){ sqlite3DebugPrintf("MIN/MAX Optimization (0x%02x) adds:\n", minMaxFlag); sqlite3TreeViewExprList(0, pMinMaxOrderBy, 0, "ORDERBY"); } - for(ii=0; iinColumn; ii++){ - struct AggInfo_col *pCol = &pAggInfo->aCol[ii]; - sqlite3DebugPrintf( - "agg-column[%d] pTab=%s iTable=%d iColumn=%d iMem=%d" - " iSorterColumn=%d\n", - ii, pCol->pTab ? pCol->pTab->zName : "NULL", - pCol->iTable, pCol->iColumn, pCol->iMem, - pCol->iSorterColumn); - sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0); - } - for(ii=0; iinFunc; ii++){ - sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n", - ii, pAggInfo->aFunc[ii].iMem); - sqlite3TreeViewExpr(0, pAggInfo->aFunc[ii].pFExpr, 0); - } + printAggInfo(pAggInfo); } #endif @@ -144802,7 +148326,7 @@ SQLITE_PRIVATE int sqlite3Select( */ if( pGroupBy ){ KeyInfo *pKeyInfo; /* Keying information for the group by clause */ - int addr1; /* A-vs-B comparision jump */ + int addr1; /* A-vs-B comparison jump */ int addrOutputRow; /* Start of subroutine that outputs a result row */ int regOutputRow; /* Return address register for output subroutine */ int addrSetAbort; /* Set the abort flag and return */ @@ -144861,7 +148385,7 @@ SQLITE_PRIVATE int sqlite3Select( ** in the right order to begin with. */ sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset); - SELECTTRACE(1,pParse,p,("WhereBegin\n")); + TREETRACE(0x2,pParse,p,("WhereBegin\n")); pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pGroupBy, pDistinct, p, (sDistinct.isTnct==2 ? WHERE_DISTINCTBY : WHERE_GROUPBY) | (orderByGrp ? WHERE_SORTBYGROUP : 0) | distFlag, 0 @@ -144870,8 +148394,12 @@ SQLITE_PRIVATE int sqlite3Select( sqlite3ExprListDelete(db, pDistinct); goto select_end; } + if( pParse->pIdxEpr ){ + optimizeAggregateUseOfIndexedExpr(pParse, p, pAggInfo, &sNC); + } + assignAggregateRegisters(pParse, pAggInfo); eDist = sqlite3WhereIsDistinct(pWInfo); - SELECTTRACE(1,pParse,p,("WhereBegin returns\n")); + TREETRACE(0x2,pParse,p,("WhereBegin returns\n")); if( sqlite3WhereIsOrdered(pWInfo)==pGroupBy->nExpr ){ /* The optimizer is able to deliver rows in group by order so ** we do not have to sort. The OP_OpenEphemeral table will be @@ -144889,9 +148417,13 @@ SQLITE_PRIVATE int sqlite3Select( int nCol; int nGroupBy; - explainTempTable(pParse, +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + int addrExp; /* Address of OP_Explain instruction */ +#endif + ExplainQueryPlan2(addrExp, (pParse, 0, "USE TEMP B-TREE FOR %s", (sDistinct.isTnct && (p->selFlags&SF_Distinct)==0) ? - "DISTINCT" : "GROUP BY"); + "DISTINCT" : "GROUP BY" + )); groupBySort = 1; nGroupBy = pGroupBy->nExpr; @@ -144916,18 +148448,40 @@ SQLITE_PRIVATE int sqlite3Select( } pAggInfo->directMode = 0; regRecord = sqlite3GetTempReg(pParse); + sqlite3VdbeScanStatusCounters(v, addrExp, 0, sqlite3VdbeCurrentAddr(v)); sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord); sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord); + sqlite3VdbeScanStatusRange(v, addrExp, sqlite3VdbeCurrentAddr(v)-2, -1); sqlite3ReleaseTempReg(pParse, regRecord); sqlite3ReleaseTempRange(pParse, regBase, nCol); - SELECTTRACE(1,pParse,p,("WhereEnd\n")); + TREETRACE(0x2,pParse,p,("WhereEnd\n")); sqlite3WhereEnd(pWInfo); pAggInfo->sortingIdxPTab = sortPTab = pParse->nTab++; sortOut = sqlite3GetTempReg(pParse); + sqlite3VdbeScanStatusCounters(v, addrExp, sqlite3VdbeCurrentAddr(v), 0); sqlite3VdbeAddOp3(v, OP_OpenPseudo, sortPTab, sortOut, nCol); sqlite3VdbeAddOp2(v, OP_SorterSort, pAggInfo->sortingIdx, addrEnd); VdbeComment((v, "GROUP BY sort")); VdbeCoverage(v); pAggInfo->useSortingIdx = 1; + sqlite3VdbeScanStatusRange(v, addrExp, -1, sortPTab); + sqlite3VdbeScanStatusRange(v, addrExp, -1, pAggInfo->sortingIdx); + } + + /* If there are entries in pAgggInfo->aFunc[] that contain subexpressions + ** that are indexed (and that were previously identified and tagged + ** in optimizeAggregateUseOfIndexedExpr()) then those subexpressions + ** must now be converted into a TK_AGG_COLUMN node so that the value + ** is correctly pulled from the index rather than being recomputed. */ + if( pParse->pIdxEpr ){ + aggregateConvertIndexedExprRefToColumn(pAggInfo); +#if TREETRACE_ENABLED + if( sqlite3TreeTrace & 0x20 ){ + TREETRACE(0x20, pParse, p, + ("AggInfo function expressions converted to reference index\n")); + sqlite3TreeViewSelect(0, p, 0); + printAggInfo(pAggInfo); + } +#endif } /* If the index or temporary table used by the GROUP BY sort @@ -144998,7 +148552,7 @@ SQLITE_PRIVATE int sqlite3Select( sqlite3VdbeAddOp2(v, OP_SorterNext, pAggInfo->sortingIdx,addrTopOfLoop); VdbeCoverage(v); }else{ - SELECTTRACE(1,pParse,p,("WhereEnd\n")); + TREETRACE(0x2,pParse,p,("WhereEnd\n")); sqlite3WhereEnd(pWInfo); sqlite3VdbeChangeToNoop(v, addrSortingIdx); } @@ -145108,7 +148662,8 @@ SQLITE_PRIVATE int sqlite3Select( if( pKeyInfo ){ sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO); } - sqlite3VdbeAddOp2(v, OP_Count, iCsr, pAggInfo->aFunc[0].iMem); + assignAggregateRegisters(pParse, pAggInfo); + sqlite3VdbeAddOp2(v, OP_Count, iCsr, AggInfoFuncReg(pAggInfo,0)); sqlite3VdbeAddOp1(v, OP_Close, iCsr); explainSimpleCount(pParse, pTab, pBest); }else{ @@ -145144,6 +148699,7 @@ SQLITE_PRIVATE int sqlite3Select( pDistinct = pAggInfo->aFunc[0].pFExpr->x.pList; distFlag = pDistinct ? (WHERE_WANT_DISTINCT|WHERE_AGG_DISTINCT) : 0; } + assignAggregateRegisters(pParse, pAggInfo); /* This case runs if the aggregate has no GROUP BY clause. The ** processing is much simpler since there is only a single row @@ -145160,13 +148716,13 @@ SQLITE_PRIVATE int sqlite3Select( assert( minMaxFlag==WHERE_ORDERBY_NORMAL || pMinMaxOrderBy!=0 ); assert( pMinMaxOrderBy==0 || pMinMaxOrderBy->nExpr==1 ); - SELECTTRACE(1,pParse,p,("WhereBegin\n")); + TREETRACE(0x2,pParse,p,("WhereBegin\n")); pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pMinMaxOrderBy, pDistinct, p, minMaxFlag|distFlag, 0); if( pWInfo==0 ){ goto select_end; } - SELECTTRACE(1,pParse,p,("WhereBegin returns\n")); + TREETRACE(0x2,pParse,p,("WhereBegin returns\n")); eDist = sqlite3WhereIsDistinct(pWInfo); updateAccumulator(pParse, regAcc, pAggInfo, eDist); if( eDist!=WHERE_DISTINCT_NOOP ){ @@ -145180,7 +148736,7 @@ SQLITE_PRIVATE int sqlite3Select( if( minMaxFlag ){ sqlite3WhereMinMaxOptEarlyOut(v, pWInfo); } - SELECTTRACE(1,pParse,p,("WhereEnd\n")); + TREETRACE(0x2,pParse,p,("WhereEnd\n")); sqlite3WhereEnd(pWInfo); finalizeAggFunctions(pParse, pAggInfo); } @@ -145202,8 +148758,6 @@ SQLITE_PRIVATE int sqlite3Select( ** and send them to the callback one by one. */ if( sSort.pOrderBy ){ - explainTempTable(pParse, - sSort.nOBSat>0 ? "RIGHT PART OF ORDER BY":"ORDER BY"); assert( p->pEList==pEList ); generateSortTail(pParse, p, &sSort, pEList->nExpr, pDest); } @@ -145227,7 +148781,7 @@ SQLITE_PRIVATE int sqlite3Select( if( pAggInfo && !db->mallocFailed ){ for(i=0; inColumn; i++){ Expr *pExpr = pAggInfo->aCol[i].pCExpr; - assert( pExpr!=0 ); + if( pExpr==0 ) continue; assert( pExpr->pAggInfo==pAggInfo ); assert( pExpr->iAgg==i ); } @@ -145241,8 +148795,8 @@ SQLITE_PRIVATE int sqlite3Select( #endif #if TREETRACE_ENABLED - SELECTTRACE(0x1,pParse,p,("end processing\n")); - if( (sqlite3TreeTrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){ + TREETRACE(0x1,pParse,p,("end processing\n")); + if( (sqlite3TreeTrace & 0x40000)!=0 && ExplainQueryPlanParent(pParse)==0 ){ sqlite3TreeViewSelect(0, p, 0); } #endif @@ -145657,6 +149211,7 @@ SQLITE_PRIVATE void sqlite3BeginTrigger( }else{ assert( !db->init.busy ); sqlite3CodeVerifySchema(pParse, iDb); + VVA_ONLY( pParse->ifNotExists = 1; ) } goto trigger_cleanup; } @@ -146438,7 +149993,7 @@ static void codeReturningTrigger( } sqlite3ExprListDelete(db, sSelect.pEList); pNew = sqlite3ExpandReturning(pParse, pReturning->pReturnEL, pTab); - if( !db->mallocFailed ){ + if( pParse->nErr==0 ){ NameContext sNC; memset(&sNC, 0, sizeof(sNC)); if( pReturning->nRetCol==0 ){ @@ -146907,6 +150462,9 @@ SQLITE_PRIVATE u32 sqlite3TriggerColmask( Trigger *p; assert( isNew==1 || isNew==0 ); + if( IsView(pTab) ){ + return 0xffffffff; + } for(p=pTrigger; p; p=p->pNext){ if( p->op==op && (tr_tm&p->tr_tm) @@ -147157,7 +150715,7 @@ static void updateFromSelect( assert( pTabList->nSrc>1 ); if( pSrc ){ - pSrc->a[0].fg.notCte = 1; + assert( pSrc->a[0].fg.notCte ); pSrc->a[0].iCursor = -1; pSrc->a[0].pTab->nTabRef--; pSrc->a[0].pTab = 0; @@ -147196,7 +150754,8 @@ static void updateFromSelect( } } pSelect = sqlite3SelectNew(pParse, pList, - pSrc, pWhere2, pGrp, 0, pOrderBy2, SF_UFSrcCheck|SF_IncludeHidden, pLimit2 + pSrc, pWhere2, pGrp, 0, pOrderBy2, + SF_UFSrcCheck|SF_IncludeHidden|SF_UpdateFrom, pLimit2 ); if( pSelect ) pSelect->selFlags |= SF_OrderByReqd; sqlite3SelectDestInit(&dest, eDest, iEph); @@ -147340,7 +150899,7 @@ SQLITE_PRIVATE void sqlite3Update( if( sqlite3ViewGetColumnNames(pParse, pTab) ){ goto update_cleanup; } - if( sqlite3IsReadOnly(pParse, pTab, tmask) ){ + if( sqlite3IsReadOnly(pParse, pTab, pTrigger) ){ goto update_cleanup; } @@ -147659,12 +151218,22 @@ SQLITE_PRIVATE void sqlite3Update( /* Begin the database scan. ** ** Do not consider a single-pass strategy for a multi-row update if - ** there are any triggers or foreign keys to process, or rows may - ** be deleted as a result of REPLACE conflict handling. Any of these - ** things might disturb a cursor being used to scan through the table - ** or index, causing a single-pass approach to malfunction. */ + ** there is anything that might disrupt the cursor being used to do + ** the UPDATE: + ** (1) This is a nested UPDATE + ** (2) There are triggers + ** (3) There are FOREIGN KEY constraints + ** (4) There are REPLACE conflict handlers + ** (5) There are subqueries in the WHERE clause + */ flags = WHERE_ONEPASS_DESIRED; - if( !pParse->nested && !pTrigger && !hasFK && !chngKey && !bReplace ){ + if( !pParse->nested + && !pTrigger + && !hasFK + && !chngKey + && !bReplace + && (pWhere==0 || !ExprHasProperty(pWhere, EP_Subquery)) + ){ flags |= WHERE_ONEPASS_MULTIROW; } pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere,0,0,0,flags,iIdxCur); @@ -147735,6 +151304,8 @@ SQLITE_PRIVATE void sqlite3Update( if( !isView ){ int addrOnce = 0; + int iNotUsed1 = 0; + int iNotUsed2 = 0; /* Open every index that needs updating. */ if( eOnePass!=ONEPASS_OFF ){ @@ -147746,7 +151317,7 @@ SQLITE_PRIVATE void sqlite3Update( addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); } sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenWrite, 0, iBaseCur, - aToOpen, 0, 0); + aToOpen, &iNotUsed1, &iNotUsed2); if( addrOnce ){ sqlite3VdbeJumpHereOrPopInst(v, addrOnce); } @@ -148037,8 +151608,10 @@ SQLITE_PRIVATE void sqlite3Update( sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1); } - sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, - TRIGGER_AFTER, pTab, regOldRowid, onError, labelContinue); + if( pTrigger ){ + sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges, + TRIGGER_AFTER, pTab, regOldRowid, onError, labelContinue); + } /* Repeat the above with the next record to be updated, until ** all record selected by the WHERE clause have been updated. @@ -148133,7 +151706,7 @@ static void updateVirtualTable( int nArg = 2 + pTab->nCol; /* Number of arguments to VUpdate */ int regArg; /* First register in VUpdate arg array */ int regRec; /* Register in which to assemble record */ - int regRowid; /* Register for ephem table rowid */ + int regRowid; /* Register for ephemeral table rowid */ int iCsr = pSrc->a[0].iCursor; /* Cursor used for virtual table scan */ int aDummy[2]; /* Unused arg for sqlite3WhereOkOnePass() */ int eOnePass; /* True to use onepass strategy */ @@ -148177,7 +151750,9 @@ static void updateVirtualTable( sqlite3ExprDup(db, pChanges->a[aXRef[i]].pExpr, 0) ); }else{ - pList = sqlite3ExprListAppend(pParse, pList, exprRowColumn(pParse, i)); + Expr *pRowExpr = exprRowColumn(pParse, i); + if( pRowExpr ) pRowExpr->op2 = OPFLAG_NOCHNG; + pList = sqlite3ExprListAppend(pParse, pList, pRowExpr); } } @@ -148254,7 +151829,7 @@ static void updateVirtualTable( sqlite3WhereEnd(pWInfo); } - /* Begin scannning through the ephemeral table. */ + /* Begin scanning through the ephemeral table. */ addr = sqlite3VdbeAddOp1(v, OP_Rewind, ephemTab); VdbeCoverage(v); /* Extract arguments from the current row of the ephemeral table and @@ -148462,7 +152037,7 @@ SQLITE_PRIVATE int sqlite3UpsertAnalyzeTarget( pExpr = &sCol[0]; } for(jj=0; jja[jj].pExpr,pExpr,iCursor)<2 ){ + if( sqlite3ExprCompare(0,pTarget->a[jj].pExpr,pExpr,iCursor)<2 ){ break; /* Column ii of the index matches column jj of target */ } } @@ -148811,7 +152386,7 @@ SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3RunVacuum( ** (possibly synchronous) transaction opened on the main database before ** sqlite3BtreeCopyFile() is called. ** - ** An optimisation would be to use a non-journaled pager. + ** An optimization would be to use a non-journaled pager. ** (Later:) I tried setting "PRAGMA vacuum_db.journal_mode=OFF" but ** that actually made the VACUUM run slower. Very little journalling ** actually occurs when doing a vacuum since the vacuum_db is initially @@ -149230,10 +152805,10 @@ SQLITE_PRIVATE void sqlite3VtabUnlock(VTable *pVTab){ pVTab->nRef--; if( pVTab->nRef==0 ){ sqlite3_vtab *p = pVTab->pVtab; - sqlite3VtabModuleUnref(pVTab->db, pVTab->pMod); if( p ){ p->pModule->xDisconnect(p); } + sqlite3VtabModuleUnref(pVTab->db, pVTab->pMod); sqlite3DbFree(db, pVTab); } } @@ -149500,7 +153075,7 @@ SQLITE_PRIVATE void sqlite3VtabFinishParse(Parse *pParse, Token *pEnd){ ** the information we've collected. ** ** The VM register number pParse->regRowid holds the rowid of an - ** entry in the sqlite_schema table tht was created for this vtab + ** entry in the sqlite_schema table that was created for this vtab ** by sqlite3StartTable(). */ iDb = sqlite3SchemaToIndex(db, pTab->pSchema); @@ -149629,7 +153204,9 @@ static int vtabCallConstructor( sCtx.pPrior = db->pVtabCtx; sCtx.bDeclared = 0; db->pVtabCtx = &sCtx; + pTab->nTabRef++; rc = xConstruct(db, pMod->pAux, nArg, azArg, &pVTable->pVtab, &zErr); + sqlite3DeleteTable(db, pTab); db->pVtabCtx = sCtx.pPrior; if( rc==SQLITE_NOMEM ) sqlite3OomFault(db); assert( sCtx.pTab==pTab ); @@ -150119,7 +153696,10 @@ SQLITE_PRIVATE int sqlite3VtabSavepoint(sqlite3 *db, int op, int iSavepoint){ break; } if( xMethod && pVTab->iSavepoint>iSavepoint ){ + u64 savedFlags = (db->flags & SQLITE_Defensive); + db->flags &= ~(u64)SQLITE_Defensive; rc = xMethod(pVTab->pVtab, iSavepoint); + db->flags |= savedFlags; } sqlite3VtabUnlock(pVTab); } @@ -150239,7 +153819,7 @@ SQLITE_PRIVATE void sqlite3VtabMakeWritable(Parse *pParse, Table *pTab){ ** ** An eponymous virtual table instance is one that is named after its ** module, and more importantly, does not require a CREATE VIRTUAL TABLE -** statement in order to come into existance. Eponymous virtual table +** statement in order to come into existence. Eponymous virtual table ** instances always exist. They cannot be DROP-ed. ** ** Any virtual table module for which xConnect and xCreate are the same @@ -150348,6 +153928,10 @@ SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){ p->pVTable->eVtabRisk = SQLITE_VTABRISK_High; break; } + case SQLITE_VTAB_USES_ALL_SCHEMAS: { + p->pVTable->bAllSchemas = 1; + break; + } default: { rc = SQLITE_MISUSE_BKPT; break; @@ -150426,7 +154010,7 @@ typedef struct WhereRightJoin WhereRightJoin; /* ** This object is a header on a block of allocated memory that will be -** automatically freed when its WInfo oject is destructed. +** automatically freed when its WInfo object is destructed. */ struct WhereMemBlock { WhereMemBlock *pNext; /* Next block in the chain */ @@ -150487,7 +154071,7 @@ struct WhereLevel { int iCur; /* The VDBE cursor used by this IN operator */ int addrInTop; /* Top of the IN loop */ int iBase; /* Base register of multi-key index record */ - int nPrefix; /* Number of prior entires in the key */ + int nPrefix; /* Number of prior entries in the key */ u8 eEndLoopOp; /* IN Loop terminator. OP_Next or OP_Prev */ } *aInLoop; /* Information about each nested IN operator */ } in; /* Used when pWLoop->wsFlags&WHERE_IN_ABLE */ @@ -150737,7 +154321,7 @@ struct WhereClause { int nTerm; /* Number of terms */ int nSlot; /* Number of entries in a[] */ int nBase; /* Number of terms through the last non-Virtual */ - WhereTerm *a; /* Each a[] describes a term of the WHERE cluase */ + WhereTerm *a; /* Each a[] describes a term of the WHERE clause */ #if defined(SQLITE_SMALL_STACK) WhereTerm aStatic[1]; /* Initial static space for a[] */ #else @@ -151023,6 +154607,7 @@ SQLITE_PRIVATE void sqlite3WhereTabFuncArgs(Parse*, SrcItem*, WhereClause*); #define WHERE_SELFCULL 0x00800000 /* nOut reduced by extra WHERE terms */ #define WHERE_OMIT_OFFSET 0x01000000 /* Set offset counter to zero */ #define WHERE_VIEWSCAN 0x02000000 /* A full-scan of a VIEW or subquery */ +#define WHERE_EXPRIDX 0x04000000 /* Uses an index-on-expressions */ #endif /* !defined(SQLITE_WHEREINT_H) */ @@ -151120,9 +154705,9 @@ static void explainIndexRange(StrAccum *pStr, WhereLoop *pLoop){ /* ** This function is a no-op unless currently processing an EXPLAIN QUERY PLAN -** command, or if either SQLITE_DEBUG or SQLITE_ENABLE_STMT_SCANSTATUS was -** defined at compile-time. If it is not a no-op, a single OP_Explain opcode -** is added to the output to describe the table scan strategy in pLevel. +** command, or if stmt_scanstatus_v2() stats are enabled, or if SQLITE_DEBUG +** was defined at compile-time. If it is not a no-op, a single OP_Explain +** opcode is added to the output to describe the table scan strategy in pLevel. ** ** If an OP_Explain opcode is added to the VM, its address is returned. ** Otherwise, if no OP_Explain is coded, zero is returned. @@ -151134,8 +154719,8 @@ SQLITE_PRIVATE int sqlite3WhereExplainOneScan( u16 wctrlFlags /* Flags passed to sqlite3WhereBegin() */ ){ int ret = 0; -#if !defined(SQLITE_DEBUG) && !defined(SQLITE_ENABLE_STMT_SCANSTATUS) - if( sqlite3ParseToplevel(pParse)->explain==2 ) +#if !defined(SQLITE_DEBUG) + if( sqlite3ParseToplevel(pParse)->explain==2 || IS_STMT_SCANSTATUS(pParse->db) ) #endif { SrcItem *pItem = &pTabList->a[pLevel->iFrom]; @@ -151279,6 +154864,8 @@ SQLITE_PRIVATE int sqlite3WhereExplainBloomFilter( zMsg = sqlite3StrAccumFinish(&str); ret = sqlite3VdbeAddOp4(v, OP_Explain, sqlite3VdbeCurrentAddr(v), pParse->addrExplain, 0, zMsg,P4_DYNAMIC); + + sqlite3VdbeScanStatus(v, sqlite3VdbeCurrentAddr(v)-1, 0, 0, 0, 0); return ret; } #endif /* SQLITE_OMIT_EXPLAIN */ @@ -151299,16 +154886,37 @@ SQLITE_PRIVATE void sqlite3WhereAddScanStatus( WhereLevel *pLvl, /* Level to add scanstatus() entry for */ int addrExplain /* Address of OP_Explain (or 0) */ ){ - const char *zObj = 0; - WhereLoop *pLoop = pLvl->pWLoop; - if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 && pLoop->u.btree.pIndex!=0 ){ - zObj = pLoop->u.btree.pIndex->zName; - }else{ - zObj = pSrclist->a[pLvl->iFrom].zName; + if( IS_STMT_SCANSTATUS( sqlite3VdbeDb(v) ) ){ + const char *zObj = 0; + WhereLoop *pLoop = pLvl->pWLoop; + int wsFlags = pLoop->wsFlags; + int viaCoroutine = 0; + + if( (wsFlags & WHERE_VIRTUALTABLE)==0 && pLoop->u.btree.pIndex!=0 ){ + zObj = pLoop->u.btree.pIndex->zName; + }else{ + zObj = pSrclist->a[pLvl->iFrom].zName; + viaCoroutine = pSrclist->a[pLvl->iFrom].fg.viaCoroutine; + } + sqlite3VdbeScanStatus( + v, addrExplain, pLvl->addrBody, pLvl->addrVisit, pLoop->nOut, zObj + ); + + if( viaCoroutine==0 ){ + if( (wsFlags & (WHERE_MULTI_OR|WHERE_AUTO_INDEX))==0 ){ + sqlite3VdbeScanStatusRange(v, addrExplain, -1, pLvl->iTabCur); + } + if( wsFlags & WHERE_INDEXED ){ + sqlite3VdbeScanStatusRange(v, addrExplain, -1, pLvl->iIdxCur); + } + }else{ + int addr = pSrclist->a[pLvl->iFrom].addrFillSub; + VdbeOp *pOp = sqlite3VdbeGetOp(v, addr-1); + assert( sqlite3VdbeDb(v)->mallocFailed || pOp->opcode==OP_InitCoroutine ); + assert( sqlite3VdbeDb(v)->mallocFailed || pOp->p2>addr ); + sqlite3VdbeScanStatusRange(v, addrExplain, addr, pOp->p2-1); + } } - sqlite3VdbeScanStatus( - v, addrExplain, pLvl->addrBody, pLvl->addrVisit, pLoop->nOut, zObj - ); } #endif @@ -151368,7 +154976,7 @@ static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){ pTerm->wtFlags |= TERM_CODED; } #ifdef WHERETRACE_ENABLED - if( sqlite3WhereTrace & 0x20000 ){ + if( (sqlite3WhereTrace & 0x4001)==0x4001 ){ sqlite3DebugPrintf("DISABLE-"); sqlite3WhereTermPrint(pTerm, (int)(pTerm - (pTerm->pWC->a))); } @@ -151483,68 +155091,75 @@ static Expr *removeUnindexableInClauseTerms( Expr *pX /* The IN expression to be reduced */ ){ sqlite3 *db = pParse->db; + Select *pSelect; /* Pointer to the SELECT on the RHS */ Expr *pNew; pNew = sqlite3ExprDup(db, pX, 0); if( db->mallocFailed==0 ){ - ExprList *pOrigRhs; /* Original unmodified RHS */ - ExprList *pOrigLhs; /* Original unmodified LHS */ - ExprList *pRhs = 0; /* New RHS after modifications */ - ExprList *pLhs = 0; /* New LHS after mods */ - int i; /* Loop counter */ - Select *pSelect; /* Pointer to the SELECT on the RHS */ - - assert( ExprUseXSelect(pNew) ); - pOrigRhs = pNew->x.pSelect->pEList; - assert( pNew->pLeft!=0 ); - assert( ExprUseXList(pNew->pLeft) ); - pOrigLhs = pNew->pLeft->x.pList; - for(i=iEq; inLTerm; i++){ - if( pLoop->aLTerm[i]->pExpr==pX ){ - int iField; - assert( (pLoop->aLTerm[i]->eOperator & (WO_OR|WO_AND))==0 ); - iField = pLoop->aLTerm[i]->u.x.iField - 1; - if( pOrigRhs->a[iField].pExpr==0 ) continue; /* Duplicate PK column */ - pRhs = sqlite3ExprListAppend(pParse, pRhs, pOrigRhs->a[iField].pExpr); - pOrigRhs->a[iField].pExpr = 0; - assert( pOrigLhs->a[iField].pExpr!=0 ); - pLhs = sqlite3ExprListAppend(pParse, pLhs, pOrigLhs->a[iField].pExpr); - pOrigLhs->a[iField].pExpr = 0; - } - } - sqlite3ExprListDelete(db, pOrigRhs); - sqlite3ExprListDelete(db, pOrigLhs); - pNew->pLeft->x.pList = pLhs; - pNew->x.pSelect->pEList = pRhs; - if( pLhs && pLhs->nExpr==1 ){ - /* Take care here not to generate a TK_VECTOR containing only a - ** single value. Since the parser never creates such a vector, some - ** of the subroutines do not handle this case. */ - Expr *p = pLhs->a[0].pExpr; - pLhs->a[0].pExpr = 0; - sqlite3ExprDelete(db, pNew->pLeft); - pNew->pLeft = p; - } - pSelect = pNew->x.pSelect; - if( pSelect->pOrderBy ){ - /* If the SELECT statement has an ORDER BY clause, zero the - ** iOrderByCol variables. These are set to non-zero when an - ** ORDER BY term exactly matches one of the terms of the - ** result-set. Since the result-set of the SELECT statement may - ** have been modified or reordered, these variables are no longer - ** set correctly. Since setting them is just an optimization, - ** it's easiest just to zero them here. */ - ExprList *pOrderBy = pSelect->pOrderBy; - for(i=0; inExpr; i++){ - pOrderBy->a[i].u.x.iOrderByCol = 0; + for(pSelect=pNew->x.pSelect; pSelect; pSelect=pSelect->pPrior){ + ExprList *pOrigRhs; /* Original unmodified RHS */ + ExprList *pOrigLhs = 0; /* Original unmodified LHS */ + ExprList *pRhs = 0; /* New RHS after modifications */ + ExprList *pLhs = 0; /* New LHS after mods */ + int i; /* Loop counter */ + + assert( ExprUseXSelect(pNew) ); + pOrigRhs = pSelect->pEList; + assert( pNew->pLeft!=0 ); + assert( ExprUseXList(pNew->pLeft) ); + if( pSelect==pNew->x.pSelect ){ + pOrigLhs = pNew->pLeft->x.pList; + } + for(i=iEq; inLTerm; i++){ + if( pLoop->aLTerm[i]->pExpr==pX ){ + int iField; + assert( (pLoop->aLTerm[i]->eOperator & (WO_OR|WO_AND))==0 ); + iField = pLoop->aLTerm[i]->u.x.iField - 1; + if( pOrigRhs->a[iField].pExpr==0 ) continue; /* Duplicate PK column */ + pRhs = sqlite3ExprListAppend(pParse, pRhs, pOrigRhs->a[iField].pExpr); + pOrigRhs->a[iField].pExpr = 0; + if( pOrigLhs ){ + assert( pOrigLhs->a[iField].pExpr!=0 ); + pLhs = sqlite3ExprListAppend(pParse,pLhs,pOrigLhs->a[iField].pExpr); + pOrigLhs->a[iField].pExpr = 0; + } + } + } + sqlite3ExprListDelete(db, pOrigRhs); + if( pOrigLhs ){ + sqlite3ExprListDelete(db, pOrigLhs); + pNew->pLeft->x.pList = pLhs; + } + pSelect->pEList = pRhs; + if( pLhs && pLhs->nExpr==1 ){ + /* Take care here not to generate a TK_VECTOR containing only a + ** single value. Since the parser never creates such a vector, some + ** of the subroutines do not handle this case. */ + Expr *p = pLhs->a[0].pExpr; + pLhs->a[0].pExpr = 0; + sqlite3ExprDelete(db, pNew->pLeft); + pNew->pLeft = p; + } + if( pSelect->pOrderBy ){ + /* If the SELECT statement has an ORDER BY clause, zero the + ** iOrderByCol variables. These are set to non-zero when an + ** ORDER BY term exactly matches one of the terms of the + ** result-set. Since the result-set of the SELECT statement may + ** have been modified or reordered, these variables are no longer + ** set correctly. Since setting them is just an optimization, + ** it's easiest just to zero them here. */ + ExprList *pOrderBy = pSelect->pOrderBy; + for(i=0; inExpr; i++){ + pOrderBy->a[i].u.x.iOrderByCol = 0; + } } - } #if 0 - printf("For indexing, change the IN expr:\n"); - sqlite3TreeViewExpr(0, pX, 0); - printf("Into:\n"); - sqlite3TreeViewExpr(0, pNew, 0); + printf("For indexing, change the IN expr:\n"); + sqlite3TreeViewExpr(0, pX, 0); + printf("Into:\n"); + sqlite3TreeViewExpr(0, pNew, 0); #endif + } } return pNew; } @@ -151797,7 +155412,7 @@ static int codeAllEqualityTerms( /* Figure out how many memory cells we will need then allocate them. */ regBase = pParse->nMem + 1; - nReg = pLoop->u.btree.nEq + nExtraReg; + nReg = nEq + nExtraReg; pParse->nMem += nReg; zAff = sqlite3DbStrDup(pParse->db,sqlite3IndexAffinityStr(pParse->db,pIdx)); @@ -151844,9 +155459,6 @@ static int codeAllEqualityTerms( sqlite3VdbeAddOp2(v, OP_Copy, r1, regBase+j); } } - } - for(j=nSkip; jaLTerm[j]; if( pTerm->eOperator & WO_IN ){ if( pTerm->pExpr->flags & EP_xIsSelect ){ /* No affinity ever needs to be (or should be) applied to a value @@ -151989,18 +155601,19 @@ static int codeCursorHintIsOrFunction(Walker *pWalker, Expr *pExpr){ ** 2) transform the expression node to a TK_REGISTER node that reads ** from the newly populated register. ** -** Also, if the node is a TK_COLUMN that does access the table idenified +** Also, if the node is a TK_COLUMN that does access the table identified ** by pCCurHint.iTabCur, and an index is being used (which we will ** know because CCurHint.pIdx!=0) then transform the TK_COLUMN into ** an access of the index rather than the original table. */ static int codeCursorHintFixExpr(Walker *pWalker, Expr *pExpr){ int rc = WRC_Continue; + int reg; struct CCurHint *pHint = pWalker->u.pCCurHint; if( pExpr->op==TK_COLUMN ){ if( pExpr->iTable!=pHint->iTabCur ){ - int reg = ++pWalker->pParse->nMem; /* Register for column value */ - sqlite3ExprCode(pWalker->pParse, pExpr, reg); + reg = ++pWalker->pParse->nMem; /* Register for column value */ + reg = sqlite3ExprCodeTarget(pWalker->pParse, pExpr, reg); pExpr->op = TK_REGISTER; pExpr->iTable = reg; }else if( pHint->pIdx!=0 ){ @@ -152008,15 +155621,15 @@ static int codeCursorHintFixExpr(Walker *pWalker, Expr *pExpr){ pExpr->iColumn = sqlite3TableColumnToIndex(pHint->pIdx, pExpr->iColumn); assert( pExpr->iColumn>=0 ); } - }else if( pExpr->op==TK_AGG_FUNCTION ){ - /* An aggregate function in the WHERE clause of a query means this must - ** be a correlated sub-query, and expression pExpr is an aggregate from - ** the parent context. Do not walk the function arguments in this case. - ** - ** todo: It should be possible to replace this node with a TK_REGISTER - ** expression, as the result of the expression must be stored in a - ** register at this point. The same holds for TK_AGG_COLUMN nodes. */ + }else if( pExpr->pAggInfo ){ rc = WRC_Prune; + reg = ++pWalker->pParse->nMem; /* Register for column value */ + reg = sqlite3ExprCodeTarget(pWalker->pParse, pExpr, reg); + pExpr->op = TK_REGISTER; + pExpr->iTable = reg; + }else if( pExpr->op==TK_TRUEFALSE ){ + /* Do not walk disabled expressions. tag-20230504-1 */ + return WRC_Prune; } return rc; } @@ -152118,7 +155731,7 @@ static void codeCursorHint( } if( pExpr!=0 ){ sWalker.xExprCallback = codeCursorHintFixExpr; - sqlite3WalkExpr(&sWalker, pExpr); + if( pParse->nErr==0 ) sqlite3WalkExpr(&sWalker, pExpr); sqlite3VdbeAddOp4(v, OP_CursorHint, (sHint.pIdx ? sHint.iIdxCur : sHint.iTabCur), 0, 0, (const char*)pExpr, P4_EXPR); @@ -152355,13 +155968,15 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( pLevel->notReady = notReady & ~sqlite3WhereGetMask(&pWInfo->sMaskSet, iCur); bRev = (pWInfo->revMask>>iLevel)&1; VdbeModuleComment((v, "Begin WHERE-loop%d: %s",iLevel,pTabItem->pTab->zName)); -#if WHERETRACE_ENABLED /* 0x20800 */ - if( sqlite3WhereTrace & 0x800 ){ +#if WHERETRACE_ENABLED /* 0x4001 */ + if( sqlite3WhereTrace & 0x1 ){ sqlite3DebugPrintf("Coding level %d of %d: notReady=%llx iFrom=%d\n", iLevel, pWInfo->nLevel, (u64)notReady, pLevel->iFrom); - sqlite3WhereLoopPrint(pLoop, pWC); + if( sqlite3WhereTrace & 0x1000 ){ + sqlite3WhereLoopPrint(pLoop, pWC); + } } - if( sqlite3WhereTrace & 0x20000 ){ + if( (sqlite3WhereTrace & 0x4001)==0x4001 ){ if( iLevel==0 ){ sqlite3DebugPrintf("WHERE clause being coded:\n"); sqlite3TreeViewExpr(0, pWInfo->pWhere, 0); @@ -152604,7 +156219,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( }; assert( TK_LE==TK_GT+1 ); /* Make sure the ordering.. */ assert( TK_LT==TK_GT+2 ); /* ... of the TK_xx values... */ - assert( TK_GE==TK_GT+3 ); /* ... is correcct. */ + assert( TK_GE==TK_GT+3 ); /* ... is correct. */ assert( (pStart->wtFlags & TERM_VNULL)==0 ); testcase( pStart->wtFlags & TERM_VIRTUAL ); @@ -152910,7 +156525,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( ** guess. */ addrSeekScan = sqlite3VdbeAddOp1(v, OP_SeekScan, (pIdx->aiRowLogEst[0]+9)/10); - if( pRangeStart ){ + if( pRangeStart || pRangeEnd ){ sqlite3VdbeChangeP5(v, 1); sqlite3VdbeChangeP2(v, addrSeekScan, sqlite3VdbeCurrentAddr(v)+1); addrSeekScan = 0; @@ -152951,16 +156566,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( assert( pLevel->p2==0 ); if( pRangeEnd ){ Expr *pRight = pRangeEnd->pExpr->pRight; - if( addrSeekScan ){ - /* For a seek-scan that has a range on the lowest term of the index, - ** we have to make the top of the loop be code that sets the end - ** condition of the range. Otherwise, the OP_SeekScan might jump - ** over that initialization, leaving the range-end value set to the - ** range-start value, resulting in a wrong answer. - ** See ticket 5981a8c041a3c2f3 (2021-11-02). - */ - pLevel->p2 = sqlite3VdbeCurrentAddr(v); - } + assert( addrSeekScan==0 ); codeExprOrVector(pParse, pRight, regBase+nEq, nTop); whereLikeOptimizationStringFixup(v, pLevel, pRangeEnd); if( (pRangeEnd->wtFlags & TERM_VNULL)==0 @@ -152994,7 +156600,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( if( zEndAff ) sqlite3DbNNFreeNN(db, zEndAff); /* Top of the loop body */ - if( pLevel->p2==0 ) pLevel->p2 = sqlite3VdbeCurrentAddr(v); + pLevel->p2 = sqlite3VdbeCurrentAddr(v); /* Check if the index cursor is past the end of the range. */ if( nConstraint ){ @@ -153285,7 +156891,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( } /* Loop through table entries that match term pOrTerm. */ ExplainQueryPlan((pParse, 1, "INDEX %d", ii+1)); - WHERETRACE(0xffff, ("Subplan for OR-clause:\n")); + WHERETRACE(0xffffffff, ("Subplan for OR-clause:\n")); pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrExpr, 0, 0, 0, WHERE_OR_SUBCLAUSE, iCovCur); assert( pSubWInfo || pParse->nErr ); @@ -153522,12 +157128,12 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( } #endif } -#ifdef WHERETRACE_ENABLED /* 0xffff */ +#ifdef WHERETRACE_ENABLED /* 0xffffffff */ if( sqlite3WhereTrace ){ VdbeNoopComment((v, "WhereTerm[%d] (%p) priority=%d", pWC->nTerm-j, pTerm, iLoop)); } - if( sqlite3WhereTrace & 0x800 ){ + if( sqlite3WhereTrace & 0x4000 ){ sqlite3DebugPrintf("Coding auxiliary constraint:\n"); sqlite3WhereTermPrint(pTerm, pWC->nTerm-j); } @@ -153556,8 +157162,8 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( if( pTerm->leftCursor!=iCur ) continue; if( pTabItem->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT) ) continue; pE = pTerm->pExpr; -#ifdef WHERETRACE_ENABLED /* 0x800 */ - if( sqlite3WhereTrace & 0x800 ){ +#ifdef WHERETRACE_ENABLED /* 0x4001 */ + if( (sqlite3WhereTrace & 0x4001)==0x4001 ){ sqlite3DebugPrintf("Coding transitive constraint:\n"); sqlite3WhereTermPrint(pTerm, pWC->nTerm-j); } @@ -153672,13 +157278,13 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( } } -#if WHERETRACE_ENABLED /* 0x20800 */ - if( sqlite3WhereTrace & 0x20000 ){ +#if WHERETRACE_ENABLED /* 0x4001 */ + if( sqlite3WhereTrace & 0x4000 ){ sqlite3DebugPrintf("All WHERE-clause terms after coding level %d:\n", iLevel); sqlite3WhereClausePrint(pWC); } - if( sqlite3WhereTrace & 0x800 ){ + if( sqlite3WhereTrace & 0x1 ){ sqlite3DebugPrintf("End Coding level %d: notReady=%llx\n", iLevel, (u64)pLevel->notReady); } @@ -153793,7 +157399,7 @@ SQLITE_PRIVATE SQLITE_NOINLINE void sqlite3WhereRightJoinLoop( ** the WHERE clause of SQL statements. ** ** This file was originally part of where.c but was split out to improve -** readability and editabiliity. This file contains utility routines for +** readability and editability. This file contains utility routines for ** analyzing Expr objects in the WHERE clause. */ /* #include "sqliteInt.h" */ @@ -154009,7 +157615,7 @@ static int isLikeOrGlob( ** range search. The third is because the caller assumes that the pattern ** consists of at least one character after all escapes have been ** removed. */ - if( cnt!=0 && 255!=(u8)z[cnt-1] && (cnt>1 || z[0]!=wc[3]) ){ + if( (cnt>1 || (cnt>0 && z[0]!=wc[3])) && 255!=(u8)z[cnt-1] ){ Expr *pPrefix; /* A "complete" match if the pattern ends with "*" or "%" */ @@ -154582,7 +158188,7 @@ static void exprAnalyzeOrTerm( pOrTerm->leftCursor))==0 ){ /* This term must be of the form t1.a==t2.b where t2 is in the ** chngToIN set but t1 is not. This term will be either preceded - ** or follwed by an inverted copy (t2.b==t1.a). Skip this term + ** or followed by an inverted copy (t2.b==t1.a). Skip this term ** and use its inversion. */ testcase( pOrTerm->wtFlags & TERM_COPIED ); testcase( pOrTerm->wtFlags & TERM_VIRTUAL ); @@ -154754,36 +158360,40 @@ static Bitmask exprSelectUsage(WhereMaskSet *pMaskSet, Select *pS){ */ static SQLITE_NOINLINE int exprMightBeIndexed2( SrcList *pFrom, /* The FROM clause */ - Bitmask mPrereq, /* Bitmask of FROM clause terms referenced by pExpr */ int *aiCurCol, /* Write the referenced table cursor and column here */ - Expr *pExpr /* An operand of a comparison operator */ + Expr *pExpr, /* An operand of a comparison operator */ + int j /* Start looking with the j-th pFrom entry */ ){ Index *pIdx; int i; int iCur; - for(i=0; mPrereq>1; i++, mPrereq>>=1){} - iCur = pFrom->a[i].iCursor; - for(pIdx=pFrom->a[i].pTab->pIndex; pIdx; pIdx=pIdx->pNext){ - if( pIdx->aColExpr==0 ) continue; - for(i=0; inKeyCol; i++){ - if( pIdx->aiColumn[i]!=XN_EXPR ) continue; - assert( pIdx->bHasExpr ); - if( sqlite3ExprCompareSkip(pExpr, pIdx->aColExpr->a[i].pExpr, iCur)==0 ){ - aiCurCol[0] = iCur; - aiCurCol[1] = XN_EXPR; - return 1; + do{ + iCur = pFrom->a[j].iCursor; + for(pIdx=pFrom->a[j].pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + if( pIdx->aColExpr==0 ) continue; + for(i=0; inKeyCol; i++){ + if( pIdx->aiColumn[i]!=XN_EXPR ) continue; + assert( pIdx->bHasExpr ); + if( sqlite3ExprCompareSkip(pExpr,pIdx->aColExpr->a[i].pExpr,iCur)==0 + && pExpr->op!=TK_STRING + ){ + aiCurCol[0] = iCur; + aiCurCol[1] = XN_EXPR; + return 1; + } } } - } + }while( ++j < pFrom->nSrc ); return 0; } static int exprMightBeIndexed( SrcList *pFrom, /* The FROM clause */ - Bitmask mPrereq, /* Bitmask of FROM clause terms referenced by pExpr */ int *aiCurCol, /* Write the referenced table cursor & column here */ Expr *pExpr, /* An operand of a comparison operator */ int op /* The specific comparison operator */ ){ + int i; + /* If this expression is a vector to the left or right of a ** inequality constraint (>, <, >= or <=), perform the processing ** on the first element of the vector. */ @@ -154793,7 +158403,6 @@ static int exprMightBeIndexed( if( pExpr->op==TK_VECTOR && (op>=TK_GT && ALWAYS(op<=TK_GE)) ){ assert( ExprUseXList(pExpr) ); pExpr = pExpr->x.pList->a[0].pExpr; - } if( pExpr->op==TK_COLUMN ){ @@ -154801,9 +158410,16 @@ static int exprMightBeIndexed( aiCurCol[1] = pExpr->iColumn; return 1; } - if( mPrereq==0 ) return 0; /* No table references */ - if( (mPrereq&(mPrereq-1))!=0 ) return 0; /* Refs more than one table */ - return exprMightBeIndexed2(pFrom,mPrereq,aiCurCol,pExpr); + + for(i=0; inSrc; i++){ + Index *pIdx; + for(pIdx=pFrom->a[i].pTab->pIndex; pIdx; pIdx=pIdx->pNext){ + if( pIdx->aColExpr ){ + return exprMightBeIndexed2(pFrom,aiCurCol,pExpr,i); + } + } + } + return 0; } @@ -154834,8 +158450,8 @@ static void exprAnalyze( WhereTerm *pTerm; /* The term to be analyzed */ WhereMaskSet *pMaskSet; /* Set of table index masks */ Expr *pExpr; /* The expression to be analyzed */ - Bitmask prereqLeft; /* Prerequesites of the pExpr->pLeft */ - Bitmask prereqAll; /* Prerequesites of pExpr */ + Bitmask prereqLeft; /* Prerequisites of the pExpr->pLeft */ + Bitmask prereqAll; /* Prerequisites of pExpr */ Bitmask extraRight = 0; /* Extra dependencies on LEFT JOIN */ Expr *pStr1 = 0; /* RHS of LIKE/GLOB operator */ int isComplete = 0; /* RHS of LIKE/GLOB ends with wildcard */ @@ -154929,7 +158545,7 @@ static void exprAnalyze( pLeft = pLeft->x.pList->a[pTerm->u.x.iField-1].pExpr; } - if( exprMightBeIndexed(pSrc, prereqLeft, aiCurCol, pLeft, op) ){ + if( exprMightBeIndexed(pSrc, aiCurCol, pLeft, op) ){ pTerm->leftCursor = aiCurCol[0]; assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 ); pTerm->u.x.leftColumn = aiCurCol[1]; @@ -154937,7 +158553,7 @@ static void exprAnalyze( } if( op==TK_IS ) pTerm->wtFlags |= TERM_IS; if( pRight - && exprMightBeIndexed(pSrc, pTerm->prereqRight, aiCurCol, pRight, op) + && exprMightBeIndexed(pSrc, aiCurCol, pRight, op) && !ExprHasProperty(pRight, EP_FixedCol) ){ WhereTerm *pNew; @@ -154981,7 +158597,7 @@ static void exprAnalyze( && 0==sqlite3ExprCanBeNull(pLeft) ){ assert( !ExprHasProperty(pExpr, EP_IntValue) ); - pExpr->op = TK_TRUEFALSE; + pExpr->op = TK_TRUEFALSE; /* See tag-20230504-1 */ pExpr->u.zToken = "false"; ExprSetProperty(pExpr, EP_IsFalse); pTerm->prereqAll = 0; @@ -155148,7 +158764,6 @@ static void exprAnalyze( transferJoinMarkings(pNewExpr1, pExpr); idxNew1 = whereClauseInsert(pWC, pNewExpr1, wtFlags); testcase( idxNew1==0 ); - exprAnalyze(pSrc, pWC, idxNew1); pNewExpr2 = sqlite3ExprDup(db, pLeft, 0); pNewExpr2 = sqlite3PExpr(pParse, TK_LT, sqlite3ExprAddCollateString(pParse,pNewExpr2,zCollSeqName), @@ -155156,6 +158771,7 @@ static void exprAnalyze( transferJoinMarkings(pNewExpr2, pExpr); idxNew2 = whereClauseInsert(pWC, pNewExpr2, wtFlags); testcase( idxNew2==0 ); + exprAnalyze(pSrc, pWC, idxNew1); exprAnalyze(pSrc, pWC, idxNew2); pTerm = &pWC->a[idxTerm]; if( isComplete ){ @@ -155212,7 +158828,7 @@ static void exprAnalyze( && pTerm->u.x.iField==0 && pExpr->pLeft->op==TK_VECTOR && ALWAYS( ExprUseXSelect(pExpr) ) - && pExpr->x.pSelect->pPrior==0 + && (pExpr->x.pSelect->pPrior==0 || (pExpr->x.pSelect->selFlags & SF_Values)) #ifndef SQLITE_OMIT_WINDOWFUNC && pExpr->x.pSelect->pWin==0 #endif @@ -155400,6 +159016,13 @@ SQLITE_PRIVATE void SQLITE_NOINLINE sqlite3WhereAddLimit(WhereClause *pWC, Selec assert( pWC->a[ii].eOperator==WO_ROWVAL ); continue; } + if( pWC->a[ii].nChild ){ + /* If this term has child terms, then they are also part of the + ** pWC->a[] array. So this term can be ignored, as a LIMIT clause + ** will only be added if each of the child terms passes the + ** (leftCursor==iCsr) test below. */ + continue; + } if( pWC->a[ii].leftCursor!=iCsr ) return; } @@ -155619,9 +159242,12 @@ SQLITE_PRIVATE void sqlite3WhereTabFuncArgs( pRhs = sqlite3PExpr(pParse, TK_UPLUS, sqlite3ExprDup(pParse->db, pArgs->a[j].pExpr, 0), 0); pTerm = sqlite3PExpr(pParse, TK_EQ, pColRef, pRhs); - if( pItem->fg.jointype & (JT_LEFT|JT_LTORJ) ){ + if( pItem->fg.jointype & (JT_LEFT|JT_RIGHT) ){ + testcase( pItem->fg.jointype & JT_LEFT ); /* testtag-20230227a */ + testcase( pItem->fg.jointype & JT_RIGHT ); /* testtag-20230227b */ joinType = EP_OuterON; }else{ + testcase( pItem->fg.jointype & JT_LTORJ ); /* testtag-20230227c */ joinType = EP_InnerON; } sqlite3SetJoinExpr(pTerm, pItem->iCursor, joinType); @@ -156338,7 +159964,7 @@ static void translateColumnToCopy( #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(WHERETRACE_ENABLED) static void whereTraceIndexInfoInputs(sqlite3_index_info *p){ int i; - if( !sqlite3WhereTrace ) return; + if( (sqlite3WhereTrace & 0x10)==0 ) return; for(i=0; inConstraint; i++){ sqlite3DebugPrintf( " constraint[%d]: col=%d termid=%d op=%d usabled=%d collseq=%s\n", @@ -156358,7 +159984,7 @@ static void whereTraceIndexInfoInputs(sqlite3_index_info *p){ } static void whereTraceIndexInfoOutputs(sqlite3_index_info *p){ int i; - if( !sqlite3WhereTrace ) return; + if( (sqlite3WhereTrace & 0x10)==0 ) return; for(i=0; inConstraint; i++){ sqlite3DebugPrintf(" usage[%d]: argvIdx=%d omit=%d\n", i, @@ -156445,6 +160071,57 @@ static int termCanDriveIndex( #ifndef SQLITE_OMIT_AUTOMATIC_INDEX + +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS +/* +** Argument pIdx represents an automatic index that the current statement +** will create and populate. Add an OP_Explain with text of the form: +** +** CREATE AUTOMATIC INDEX ON
    () [WHERE ] +** +** This is only required if sqlite3_stmt_scanstatus() is enabled, to +** associate an SQLITE_SCANSTAT_NCYCLE and SQLITE_SCANSTAT_NLOOP +** values with. In order to avoid breaking legacy code and test cases, +** the OP_Explain is not added if this is an EXPLAIN QUERY PLAN command. +*/ +static void explainAutomaticIndex( + Parse *pParse, + Index *pIdx, /* Automatic index to explain */ + int bPartial, /* True if pIdx is a partial index */ + int *pAddrExplain /* OUT: Address of OP_Explain */ +){ + if( IS_STMT_SCANSTATUS(pParse->db) && pParse->explain!=2 ){ + Table *pTab = pIdx->pTable; + const char *zSep = ""; + char *zText = 0; + int ii = 0; + sqlite3_str *pStr = sqlite3_str_new(pParse->db); + sqlite3_str_appendf(pStr,"CREATE AUTOMATIC INDEX ON %s(", pTab->zName); + assert( pIdx->nColumn>1 ); + assert( pIdx->aiColumn[pIdx->nColumn-1]==XN_ROWID ); + for(ii=0; ii<(pIdx->nColumn-1); ii++){ + const char *zName = 0; + int iCol = pIdx->aiColumn[ii]; + + zName = pTab->aCol[iCol].zCnName; + sqlite3_str_appendf(pStr, "%s%s", zSep, zName); + zSep = ", "; + } + zText = sqlite3_str_finish(pStr); + if( zText==0 ){ + sqlite3OomFault(pParse->db); + }else{ + *pAddrExplain = sqlite3VdbeExplain( + pParse, 0, "%s)%s", zText, (bPartial ? " WHERE " : "") + ); + sqlite3_free(zText); + } + } +} +#else +# define explainAutomaticIndex(a,b,c,d) +#endif + /* ** Generate code to construct the Index object for an automatic index ** and to set up the WhereLevel object pLevel so that the code generator @@ -156452,8 +160129,7 @@ static int termCanDriveIndex( */ static SQLITE_NOINLINE void constructAutomaticIndex( Parse *pParse, /* The parsing context */ - const WhereClause *pWC, /* The WHERE clause */ - const SrcItem *pSrc, /* The FROM clause term to get the next index */ + WhereClause *pWC, /* The WHERE clause */ const Bitmask notReady, /* Mask of cursors that are not available */ WhereLevel *pLevel /* Write new index here */ ){ @@ -156474,12 +160150,17 @@ static SQLITE_NOINLINE void constructAutomaticIndex( char *zNotUsed; /* Extra space on the end of pIdx */ Bitmask idxCols; /* Bitmap of columns used for indexing */ Bitmask extraCols; /* Bitmap of additional columns */ - u8 sentWarning = 0; /* True if a warnning has been issued */ + u8 sentWarning = 0; /* True if a warning has been issued */ + u8 useBloomFilter = 0; /* True to also add a Bloom filter */ Expr *pPartial = 0; /* Partial Index Expression */ int iContinue = 0; /* Jump here to skip excluded rows */ - SrcItem *pTabItem; /* FROM clause term being indexed */ + SrcList *pTabList; /* The complete FROM clause */ + SrcItem *pSrc; /* The FROM clause term to get the next index */ int addrCounter = 0; /* Address where integer counter is initialized */ int regBase; /* Array of registers where record is assembled */ +#ifdef SQLITE_ENABLE_STMT_SCANSTATUS + int addrExp = 0; /* Address of OP_Explain */ +#endif /* Generate code to skip over the creation and initialization of the ** transient index on 2nd and subsequent iterations of the loop. */ @@ -156490,6 +160171,8 @@ static SQLITE_NOINLINE void constructAutomaticIndex( /* Count the number of columns that will be added to the index ** and used to match WHERE clause constraints */ nKeyCol = 0; + pTabList = pWC->pWInfo->pTabList; + pSrc = &pTabList->a[pLevel->iFrom]; pTable = pSrc->pTab; pWCEnd = &pWC->a[pWC->nTerm]; pLoop = pLevel->pWLoop; @@ -156500,7 +160183,7 @@ static SQLITE_NOINLINE void constructAutomaticIndex( ** WHERE clause (or the ON clause of a LEFT join) that constrain which ** rows of the target table (pSrc) that can be used. */ if( (pTerm->wtFlags & TERM_VIRTUAL)==0 - && sqlite3ExprIsTableConstraint(pExpr, pSrc) + && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, pLevel->iFrom) ){ pPartial = sqlite3ExprAnd(pParse, pPartial, sqlite3ExprDup(pParse->db, pExpr, 0)); @@ -156541,7 +160224,11 @@ static SQLITE_NOINLINE void constructAutomaticIndex( ** original table changes and the index and table cannot both be used ** if they go out of sync. */ - extraCols = pSrc->colUsed & (~idxCols | MASKBIT(BMS-1)); + if( IsView(pTable) ){ + extraCols = ALLBITS; + }else{ + extraCols = pSrc->colUsed & (~idxCols | MASKBIT(BMS-1)); + } mxBitCol = MIN(BMS-1,pTable->nCol); testcase( pTable->nCol==BMS-1 ); testcase( pTable->nCol==BMS-2 ); @@ -156577,6 +160264,16 @@ static SQLITE_NOINLINE void constructAutomaticIndex( assert( pColl!=0 || pParse->nErr>0 ); /* TH3 collate01.800 */ pIdx->azColl[n] = pColl ? pColl->zName : sqlite3StrBINARY; n++; + if( ALWAYS(pX->pLeft!=0) + && sqlite3ExprAffinity(pX->pLeft)!=SQLITE_AFF_TEXT + ){ + /* TUNING: only use a Bloom filter on an automatic index + ** if one or more key columns has the ability to hold numeric + ** values, since strings all have the same hash in the Bloom + ** filter implementation and hence a Bloom filter on a text column + ** is not usually helpful. */ + useBloomFilter = 1; + } } } } @@ -156603,25 +160300,27 @@ static SQLITE_NOINLINE void constructAutomaticIndex( pIdx->azColl[n] = sqlite3StrBINARY; /* Create the automatic index */ + explainAutomaticIndex(pParse, pIdx, pPartial!=0, &addrExp); assert( pLevel->iIdxCur>=0 ); pLevel->iIdxCur = pParse->nTab++; sqlite3VdbeAddOp2(v, OP_OpenAutoindex, pLevel->iIdxCur, nKeyCol+1); sqlite3VdbeSetP4KeyInfo(pParse, pIdx); VdbeComment((v, "for %s", pTable->zName)); - if( OptimizationEnabled(pParse->db, SQLITE_BloomFilter) ){ + if( OptimizationEnabled(pParse->db, SQLITE_BloomFilter) && useBloomFilter ){ + sqlite3WhereExplainBloomFilter(pParse, pWC->pWInfo, pLevel); pLevel->regFilter = ++pParse->nMem; sqlite3VdbeAddOp2(v, OP_Blob, 10000, pLevel->regFilter); } /* Fill the automatic index with content */ - pTabItem = &pWC->pWInfo->pTabList->a[pLevel->iFrom]; - if( pTabItem->fg.viaCoroutine ){ - int regYield = pTabItem->regReturn; + assert( pSrc == &pWC->pWInfo->pTabList->a[pLevel->iFrom] ); + if( pSrc->fg.viaCoroutine ){ + int regYield = pSrc->regReturn; addrCounter = sqlite3VdbeAddOp2(v, OP_Integer, 0, 0); - sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, pTabItem->addrFillSub); + sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, pSrc->addrFillSub); addrTop = sqlite3VdbeAddOp1(v, OP_Yield, regYield); VdbeCoverage(v); - VdbeComment((v, "next row of %s", pTabItem->pTab->zName)); + VdbeComment((v, "next row of %s", pSrc->pTab->zName)); }else{ addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, pLevel->iTabCur); VdbeCoverage(v); } @@ -156638,17 +160337,18 @@ static SQLITE_NOINLINE void constructAutomaticIndex( sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pLevel->regFilter, 0, regBase, pLoop->u.btree.nEq); } + sqlite3VdbeScanStatusCounters(v, addrExp, addrExp, sqlite3VdbeCurrentAddr(v)); sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord); sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT); if( pPartial ) sqlite3VdbeResolveLabel(v, iContinue); - if( pTabItem->fg.viaCoroutine ){ + if( pSrc->fg.viaCoroutine ){ sqlite3VdbeChangeP2(v, addrCounter, regBase+n); testcase( pParse->db->mallocFailed ); assert( pLevel->iIdxCur>0 ); translateColumnToCopy(pParse, addrTop, pLevel->iTabCur, - pTabItem->regResult, pLevel->iIdxCur); + pSrc->regResult, pLevel->iIdxCur); sqlite3VdbeGoto(v, addrTop); - pTabItem->fg.viaCoroutine = 0; + pSrc->fg.viaCoroutine = 0; }else{ sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1); VdbeCoverage(v); sqlite3VdbeChangeP5(v, SQLITE_STMTSTATUS_AUTOINDEX); @@ -156658,6 +160358,7 @@ static SQLITE_NOINLINE void constructAutomaticIndex( /* Jump here when skipping the initialization */ sqlite3VdbeJumpHere(v, addrInit); + sqlite3VdbeScanStatusRange(v, addrExp, addrExp, -1); end_auto_index_create: sqlite3ExprDelete(pParse->db, pPartial); @@ -156699,6 +160400,10 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter( Vdbe *v = pParse->pVdbe; /* VDBE under construction */ WhereLoop *pLoop = pLevel->pWLoop; /* The loop being coded */ int iCur; /* Cursor for table getting the filter */ + IndexedExpr *saved_pIdxEpr; /* saved copy of Parse.pIdxEpr */ + + saved_pIdxEpr = pParse->pIdxEpr; + pParse->pIdxEpr = 0; assert( pLoop!=0 ); assert( v!=0 ); @@ -156706,9 +160411,11 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter( addrOnce = sqlite3VdbeAddOp0(v, OP_Once); VdbeCoverage(v); do{ + const SrcList *pTabList; const SrcItem *pItem; const Table *pTab; u64 sz; + int iSrc; sqlite3WhereExplainBloomFilter(pParse, pWInfo, pLevel); addrCont = sqlite3VdbeMakeLabel(pParse); iCur = pLevel->iTabCur; @@ -156722,7 +160429,9 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter( ** testing complicated. By basing the blob size on the value in the ** sqlite_stat1 table, testing is much easier. */ - pItem = &pWInfo->pTabList->a[pLevel->iFrom]; + pTabList = pWInfo->pTabList; + iSrc = pLevel->iFrom; + pItem = &pTabList->a[iSrc]; assert( pItem!=0 ); pTab = pItem->pTab; assert( pTab!=0 ); @@ -156739,7 +160448,7 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter( for(pTerm=pWInfo->sWC.a; pTermpExpr; if( (pTerm->wtFlags & TERM_VIRTUAL)==0 - && sqlite3ExprIsTableConstraint(pExpr, pItem) + && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, iSrc) ){ sqlite3ExprIfFalse(pParse, pTerm->pExpr, addrCont, SQLITE_JUMPIFNULL); } @@ -156755,9 +160464,8 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter( int r1 = sqlite3GetTempRange(pParse, n); int jj; for(jj=0; jjaiColumn[jj]; assert( pIdx->pTable==pItem->pTab ); - sqlite3ExprCodeGetColumnOfTable(v, pIdx->pTable, iCur, iCol,r1+jj); + sqlite3ExprCodeLoadIndexColumn(pParse, pIdx, iCur, jj, r1+jj); } sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pLevel->regFilter, 0, r1, n); sqlite3ReleaseTempRange(pParse, r1, n); @@ -156788,6 +160496,7 @@ static SQLITE_NOINLINE void sqlite3ConstructBloomFilter( } }while( iLevel < pWInfo->nLevel ); sqlite3VdbeJumpHere(v, addrOnce); + pParse->pIdxEpr = saved_pIdxEpr; } @@ -157043,6 +160752,9 @@ static int vtabBestIndex(Parse *pParse, Table *pTab, sqlite3_index_info *p){ sqlite3ErrorMsg(pParse, "%s", pVtab->zErrMsg); } } + if( pTab->u.vtab.p->bAllSchemas ){ + sqlite3VtabUsesAllSchemas(pParse); + } sqlite3_free(pVtab->zErrMsg); pVtab->zErrMsg = 0; return rc; @@ -157087,6 +160799,7 @@ static int whereKeyStats( assert( pIdx->nSample>0 ); assert( pRec->nField>0 ); + /* Do a binary search to find the first sample greater than or equal ** to pRec. If pRec contains a single field, the set of samples to search ** is simply the aSample[] array. If the samples in aSample[] contain more @@ -157131,7 +160844,12 @@ static int whereKeyStats( ** it is extended to two fields. The duplicates that this creates do not ** cause any problems. */ - nField = MIN(pRec->nField, pIdx->nSample); + if( !HasRowid(pIdx->pTable) && IsPrimaryKeyIndex(pIdx) ){ + nField = pIdx->nKeyCol; + }else{ + nField = pIdx->nColumn; + } + nField = MIN(pRec->nField, nField); iCol = 0; iSample = pIdx->nSample * nField; do{ @@ -157197,12 +160915,12 @@ static int whereKeyStats( if( iCol>0 ){ pRec->nField = iCol; assert( sqlite3VdbeRecordCompare(aSample[i].n, aSample[i].p, pRec)<=0 - || pParse->db->mallocFailed ); + || pParse->db->mallocFailed || CORRUPT_DB ); } if( i>0 ){ pRec->nField = nField; assert( sqlite3VdbeRecordCompare(aSample[i-1].n, aSample[i-1].p, pRec)<0 - || pParse->db->mallocFailed ); + || pParse->db->mallocFailed || CORRUPT_DB ); } } } @@ -157294,7 +161012,7 @@ SQLITE_PRIVATE char sqlite3IndexColumnAffinity(sqlite3 *db, Index *pIdx, int iCo ** Value pLoop->nOut is currently set to the estimated number of rows ** visited for scanning (a=? AND b=?). This function reduces that estimate ** by some factor to account for the (c BETWEEN ? AND ?) expression based -** on the stat4 data for the index. this scan will be peformed multiple +** on the stat4 data for the index. this scan will be performed multiple ** times (once for each (a,b) combination that matches a=?) is dealt with ** by the caller. ** @@ -157375,7 +161093,7 @@ static int whereRangeSkipScanEst( int nAdjust = (sqlite3LogEst(p->nSample) - sqlite3LogEst(nDiff)); pLoop->nOut -= nAdjust; *pbDone = 1; - WHERETRACE(0x10, ("range skip-scan regions: %u..%u adjust=%d est=%d\n", + WHERETRACE(0x20, ("range skip-scan regions: %u..%u adjust=%d est=%d\n", nLower, nUpper, nAdjust*-1, pLoop->nOut)); } @@ -157553,7 +161271,7 @@ static int whereRangeScanEst( if( nNewwtFlags & TERM_VNULL)==0 ); + assert( pUpper==0 || (pUpper->wtFlags & TERM_VNULL)==0 || pParse->nErr>0 ); nNew = whereRangeAdjust(pLower, nOut); nNew = whereRangeAdjust(pUpper, nNew); @@ -157586,7 +161304,7 @@ static int whereRangeScanEst( if( nNewnOut>nOut ){ - WHERETRACE(0x10,("Range scan lowers nOut from %d to %d\n", + WHERETRACE(0x20,("Range scan lowers nOut from %d to %d\n", pLoop->nOut, nOut)); } #endif @@ -157651,7 +161369,7 @@ static int whereEqualScanEst( pBuilder->nRecValid = nEq; whereKeyStats(pParse, p, pRec, 0, a); - WHERETRACE(0x10,("equality scan regions %s(%d): %d\n", + WHERETRACE(0x20,("equality scan regions %s(%d): %d\n", p->zName, nEq-1, (int)a[1])); *pnRow = a[1]; @@ -157699,9 +161417,9 @@ static int whereInScanEst( } if( rc==SQLITE_OK ){ - if( nRowEst > nRow0 ) nRowEst = nRow0; + if( nRowEst > (tRowcnt)nRow0 ) nRowEst = nRow0; *pnRow = nRowEst; - WHERETRACE(0x10,("IN row estimate: est=%d\n", nRowEst)); + WHERETRACE(0x20,("IN row estimate: est=%d\n", nRowEst)); } assert( pBuilder->nRecValid==nRecValid ); return rc; @@ -157810,7 +161528,7 @@ SQLITE_PRIVATE void sqlite3WhereLoopPrint(WhereLoop *p, WhereClause *pWC){ sqlite3DebugPrintf(" f %06x N %d", p->wsFlags, p->nLTerm); } sqlite3DebugPrintf(" cost %d,%d,%d\n", p->rSetup, p->rRun, p->nOut); - if( p->nLTerm && (sqlite3WhereTrace & 0x100)!=0 ){ + if( p->nLTerm && (sqlite3WhereTrace & 0x4000)!=0 ){ int i; for(i=0; inLTerm; i++){ sqlite3WhereTermPrint(p->aLTerm[i], i); @@ -158049,7 +161767,7 @@ static WhereLoop **whereLoopFindLesser( ** rSetup. Call this SETUP-INVARIANT */ assert( p->rSetup>=pTemplate->rSetup ); - /* Any loop using an appliation-defined index (or PRIMARY KEY or + /* Any loop using an application-defined index (or PRIMARY KEY or ** UNIQUE constraint) with one or more == constraints is better ** than an automatic index. Unless it is a skip-scan. */ if( (p->wsFlags & WHERE_AUTO_INDEX)!=0 @@ -158076,7 +161794,7 @@ static WhereLoop **whereLoopFindLesser( /* If pTemplate is always better than p, then cause p to be overwritten ** with pTemplate. pTemplate is better than p if: - ** (1) pTemplate has no more dependences than p, and + ** (1) pTemplate has no more dependencies than p, and ** (2) pTemplate has an equal or lower cost than p. */ if( (p->prereq & pTemplate->prereq)==pTemplate->prereq /* (1) */ @@ -158194,7 +161912,7 @@ static int whereLoopInsert(WhereLoopBuilder *pBuilder, WhereLoop *pTemplate){ }else{ /* We will be overwriting WhereLoop p[]. But before we do, first ** go through the rest of the list and delete any other entries besides - ** p[] that are also supplated by pTemplate */ + ** p[] that are also supplanted by pTemplate */ WhereLoop **ppTail = &p->pNextLoop; WhereLoop *pToDel; while( *ppTail ){ @@ -158274,6 +161992,7 @@ static void whereLoopOutputAdjust( if( pX->iParent>=0 && (&pWC->a[pX->iParent])==pTerm ) break; } if( j<0 ){ + sqlite3ProgressCheck(pWC->pWInfo->pParse); if( pLoop->maskSelf==pTerm->prereqAll ){ /* If there are extra terms in the WHERE clause not used by an index ** that depend only on the table being scanned, and that will tend to @@ -158393,7 +162112,7 @@ static int whereRangeVectorLen( } /* -** Adjust the cost C by the costMult facter T. This only occurs if +** Adjust the cost C by the costMult factor T. This only occurs if ** compiled with -DSQLITE_ENABLE_COSTMULT */ #ifdef SQLITE_ENABLE_COSTMULT @@ -158420,7 +162139,7 @@ static int whereLoopAddBtreeIndex( Index *pProbe, /* An index on pSrc */ LogEst nInMul /* log(Number of iterations due to IN) */ ){ - WhereInfo *pWInfo = pBuilder->pWInfo; /* WHERE analyse context */ + WhereInfo *pWInfo = pBuilder->pWInfo; /* WHERE analyze context */ Parse *pParse = pWInfo->pParse; /* Parsing context */ sqlite3 *db = pParse->db; /* Database connection malloc context */ WhereLoop *pNew; /* Template WhereLoop under construction */ @@ -158441,7 +162160,10 @@ static int whereLoopAddBtreeIndex( WhereTerm *pTop = 0, *pBtm = 0; /* Top and bottom range constraints */ pNew = pBuilder->pNew; - if( db->mallocFailed ) return SQLITE_NOMEM_BKPT; + assert( db->mallocFailed==0 || pParse->nErr>0 ); + if( pParse->nErr ){ + return pParse->rc; + } WHERETRACE(0x800, ("BEGIN %s.addBtreeIdx(%s), nEq=%d, nSkip=%d, rRun=%d\n", pProbe->pTable->zName,pProbe->zName, pNew->u.btree.nEq, pNew->nSkip, pNew->rRun)); @@ -158688,7 +162410,7 @@ static int whereLoopAddBtreeIndex( && pNew->nOut+10 > pProbe->aiRowLogEst[0] ){ #if WHERETRACE_ENABLED /* 0x01 */ - if( sqlite3WhereTrace & 0x01 ){ + if( sqlite3WhereTrace & 0x20 ){ sqlite3DebugPrintf( "STAT4 determines term has low selectivity:\n"); sqlite3WhereTermPrint(pTerm, 999); @@ -158725,9 +162447,17 @@ static int whereLoopAddBtreeIndex( ** seek only. Then, if this is a non-covering index, add the cost of ** visiting the rows in the main table. */ assert( pSrc->pTab->szTabRow>0 ); - rCostIdx = pNew->nOut + 1 + (15*pProbe->szIdxRow)/pSrc->pTab->szTabRow; + if( pProbe->idxType==SQLITE_IDXTYPE_IPK ){ + /* The pProbe->szIdxRow is low for an IPK table since the interior + ** pages are small. Thus szIdxRow gives a good estimate of seek cost. + ** But the leaf pages are full-size, so pProbe->szIdxRow would badly + ** under-estimate the scanning cost. */ + rCostIdx = pNew->nOut + 16; + }else{ + rCostIdx = pNew->nOut + 1 + (15*pProbe->szIdxRow)/pSrc->pTab->szTabRow; + } pNew->rRun = sqlite3LogEstAdd(rLogSize, rCostIdx); - if( (pNew->wsFlags & (WHERE_IDX_ONLY|WHERE_IPK))==0 ){ + if( (pNew->wsFlags & (WHERE_IDX_ONLY|WHERE_IPK|WHERE_EXPRIDX))==0 ){ pNew->rRun = sqlite3LogEstAdd(pNew->rRun, pNew->nOut + 16); } ApplyCostMultiplier(pNew->rRun, pProbe->pTable->costMult); @@ -158749,6 +162479,9 @@ static int whereLoopAddBtreeIndex( && (pNew->u.btree.nEqnKeyCol || pProbe->idxType!=SQLITE_IDXTYPE_PRIMARYKEY) ){ + if( pNew->u.btree.nEq>3 ){ + sqlite3ProgressCheck(pParse); + } whereLoopAddBtreeIndex(pBuilder, pSrc, pProbe, nInMul+nIn); } pNew->nOut = saved_nOut; @@ -158880,16 +162613,39 @@ static int whereUsablePartialIndex( return 0; } +/* +** pIdx is an index containing expressions. Check it see if any of the +** expressions in the index match the pExpr expression. +*/ +static int exprIsCoveredByIndex( + const Expr *pExpr, + const Index *pIdx, + int iTabCur +){ + int i; + for(i=0; inColumn; i++){ + if( pIdx->aiColumn[i]==XN_EXPR + && sqlite3ExprCompare(0, pExpr, pIdx->aColExpr->a[i].pExpr, iTabCur)==0 + ){ + return 1; + } + } + return 0; +} + /* ** Structure passed to the whereIsCoveringIndex Walker callback. */ +typedef struct CoveringIndexCheck CoveringIndexCheck; struct CoveringIndexCheck { Index *pIdx; /* The index */ int iTabCur; /* Cursor number for the corresponding table */ + u8 bExpr; /* Uses an indexed expression */ + u8 bUnidx; /* Uses an unindexed column not within an indexed expr */ }; /* -** Information passed in is pWalk->u.pCovIdxCk. Call is pCk. +** Information passed in is pWalk->u.pCovIdxCk. Call it pCk. ** ** If the Expr node references the table with cursor pCk->iTabCur, then ** make sure that column is covered by the index pCk->pIdx. We know that @@ -158901,71 +162657,103 @@ struct CoveringIndexCheck { ** ** If this node does not disprove that the index can be a covering index, ** then just return WRC_Continue, to continue the search. +** +** If pCk->pIdx contains indexed expressions and one of those expressions +** matches pExpr, then prune the search. */ static int whereIsCoveringIndexWalkCallback(Walker *pWalk, Expr *pExpr){ - int i; /* Loop counter */ - const Index *pIdx; /* The index of interest */ - const i16 *aiColumn; /* Columns contained in the index */ - u16 nColumn; /* Number of columns in the index */ - if( pExpr->op!=TK_COLUMN && pExpr->op!=TK_AGG_COLUMN ) return WRC_Continue; - if( pExpr->iColumn<(BMS-1) ) return WRC_Continue; - if( pExpr->iTable!=pWalk->u.pCovIdxCk->iTabCur ) return WRC_Continue; - pIdx = pWalk->u.pCovIdxCk->pIdx; - aiColumn = pIdx->aiColumn; - nColumn = pIdx->nColumn; - for(i=0; iiColumn ) return WRC_Continue; - } - pWalk->eCode = 1; - return WRC_Abort; + int i; /* Loop counter */ + const Index *pIdx; /* The index of interest */ + const i16 *aiColumn; /* Columns contained in the index */ + u16 nColumn; /* Number of columns in the index */ + CoveringIndexCheck *pCk; /* Info about this search */ + + pCk = pWalk->u.pCovIdxCk; + pIdx = pCk->pIdx; + if( (pExpr->op==TK_COLUMN || pExpr->op==TK_AGG_COLUMN) ){ + /* if( pExpr->iColumn<(BMS-1) && pIdx->bHasExpr==0 ) return WRC_Continue;*/ + if( pExpr->iTable!=pCk->iTabCur ) return WRC_Continue; + pIdx = pWalk->u.pCovIdxCk->pIdx; + aiColumn = pIdx->aiColumn; + nColumn = pIdx->nColumn; + for(i=0; iiColumn ) return WRC_Continue; + } + pCk->bUnidx = 1; + return WRC_Abort; + }else if( pIdx->bHasExpr + && exprIsCoveredByIndex(pExpr, pIdx, pWalk->u.pCovIdxCk->iTabCur) ){ + pCk->bExpr = 1; + return WRC_Prune; + } + return WRC_Continue; } /* ** pIdx is an index that covers all of the low-number columns used by -** pWInfo->pSelect (columns from 0 through 62). But there are columns -** in pWInfo->pSelect beyond 62. This routine tries to answer the question -** of whether pIdx covers *all* columns in the query. +** pWInfo->pSelect (columns from 0 through 62) or an index that has +** expressions terms. Hence, we cannot determine whether or not it is +** a covering index by using the colUsed bitmasks. We have to do a search +** to see if the index is covering. This routine does that search. +** +** The return value is one of these: +** +** 0 The index is definitely not a covering index +** +** WHERE_IDX_ONLY The index is definitely a covering index ** -** Return 0 if pIdx is a covering index. Return non-zero if pIdx is -** not a covering index or if we are unable to determine if pIdx is a -** covering index. +** WHERE_EXPRIDX The index is likely a covering index, but it is +** difficult to determine precisely because of the +** expressions that are indexed. Score it as a +** covering index, but still keep the main table open +** just in case we need it. ** -** This routine is an optimization. It is always safe to return non-zero. -** But returning zero when non-zero should have been returned can lead to -** incorrect bytecode and assertion faults. +** This routine is an optimization. It is always safe to return zero. +** But returning one of the other two values when zero should have been +** returned can lead to incorrect bytecode and assertion faults. */ static SQLITE_NOINLINE u32 whereIsCoveringIndex( WhereInfo *pWInfo, /* The WHERE clause context */ Index *pIdx, /* Index that is being tested */ int iTabCur /* Cursor for the table being indexed */ ){ - int i; + int i, rc; struct CoveringIndexCheck ck; Walker w; if( pWInfo->pSelect==0 ){ /* We don't have access to the full query, so we cannot check to see ** if pIdx is covering. Assume it is not. */ - return 1; - } - for(i=0; inColumn; i++){ - if( pIdx->aiColumn[i]>=BMS-1 ) break; + return 0; } - if( i>=pIdx->nColumn ){ - /* pIdx does not index any columns greater than 62, but we know from - ** colMask that columns greater than 62 are used, so this is not a - ** covering index */ - return 1; + if( pIdx->bHasExpr==0 ){ + for(i=0; inColumn; i++){ + if( pIdx->aiColumn[i]>=BMS-1 ) break; + } + if( i>=pIdx->nColumn ){ + /* pIdx does not index any columns greater than 62, but we know from + ** colMask that columns greater than 62 are used, so this is not a + ** covering index */ + return 0; + } } ck.pIdx = pIdx; ck.iTabCur = iTabCur; + ck.bExpr = 0; + ck.bUnidx = 0; memset(&w, 0, sizeof(w)); w.xExprCallback = whereIsCoveringIndexWalkCallback; w.xSelectCallback = sqlite3SelectWalkNoop; w.u.pCovIdxCk = &ck; - w.eCode = 0; sqlite3WalkSelect(&w, pWInfo->pSelect); - return w.eCode; + if( ck.bUnidx ){ + rc = 0; + }else if( ck.bExpr ){ + rc = WHERE_EXPRIDX; + }else{ + rc = WHERE_IDX_ONLY; + } + return rc; } /* @@ -159006,7 +162794,7 @@ static SQLITE_NOINLINE u32 whereIsCoveringIndex( */ static int whereLoopAddBtree( WhereLoopBuilder *pBuilder, /* WHERE clause information */ - Bitmask mPrereq /* Extra prerequesites for using this table */ + Bitmask mPrereq /* Extra prerequisites for using this table */ ){ WhereInfo *pWInfo; /* WHERE analysis context */ Index *pProbe; /* An index we are evaluating */ @@ -159050,7 +162838,7 @@ static int whereLoopAddBtree( sPk.aiRowLogEst = aiRowEstPk; sPk.onError = OE_Replace; sPk.pTable = pTab; - sPk.szIdxRow = pTab->szTabRow; + sPk.szIdxRow = 3; /* TUNING: Interior rows of IPK table are very small */ sPk.idxType = SQLITE_IDXTYPE_IPK; aiRowEstPk[0] = pTab->nRowLogEst; aiRowEstPk[1] = 0; @@ -159101,7 +162889,8 @@ static int whereLoopAddBtree( if( !IsView(pTab) && (pTab->tabFlags & TF_Ephemeral)==0 ){ pNew->rSetup += 28; }else{ - pNew->rSetup -= 10; + pNew->rSetup -= 25; /* Greatly reduced setup cost for auto indexes + ** on ephemeral materializations of views */ } ApplyCostMultiplier(pNew->rSetup, pTab->costMult); if( pNew->rSetup<0 ) pNew->rSetup = 0; @@ -159181,14 +162970,38 @@ static int whereLoopAddBtree( }else{ Bitmask m; if( pProbe->isCovering ){ - pNew->wsFlags = WHERE_IDX_ONLY | WHERE_INDEXED; m = 0; + pNew->wsFlags = WHERE_IDX_ONLY | WHERE_INDEXED; }else{ m = pSrc->colUsed & pProbe->colNotIdxed; - if( m==TOPBIT ){ - m = whereIsCoveringIndex(pWInfo, pProbe, pSrc->iCursor); + pNew->wsFlags = WHERE_INDEXED; + if( m==TOPBIT || (pProbe->bHasExpr && !pProbe->bHasVCol && m!=0) ){ + u32 isCov = whereIsCoveringIndex(pWInfo, pProbe, pSrc->iCursor); + if( isCov==0 ){ + WHERETRACE(0x200, + ("-> %s is not a covering index" + " according to whereIsCoveringIndex()\n", pProbe->zName)); + assert( m!=0 ); + }else{ + m = 0; + pNew->wsFlags |= isCov; + if( isCov & WHERE_IDX_ONLY ){ + WHERETRACE(0x200, + ("-> %s is a covering expression index" + " according to whereIsCoveringIndex()\n", pProbe->zName)); + }else{ + assert( isCov==WHERE_EXPRIDX ); + WHERETRACE(0x200, + ("-> %s might be a covering expression index" + " according to whereIsCoveringIndex()\n", pProbe->zName)); + } + } + }else if( m==0 ){ + WHERETRACE(0x200, + ("-> %s a covering index according to bitmasks\n", + pProbe->zName, m==0 ? "is" : "is not")); + pNew->wsFlags = WHERE_IDX_ONLY | WHERE_INDEXED; } - pNew->wsFlags = (m==0) ? (WHERE_IDX_ONLY|WHERE_INDEXED) : WHERE_INDEXED; } /* Full scan via index */ @@ -159361,7 +163174,7 @@ static int whereLoopAddVirtualOne( ** that the particular combination of parameters provided is unusable. ** Make no entries in the loop table. */ - WHERETRACE(0xffff, (" ^^^^--- non-viable plan rejected!\n")); + WHERETRACE(0xffffffff, (" ^^^^--- non-viable plan rejected!\n")); return SQLITE_OK; } return rc; @@ -159472,7 +163285,7 @@ static int whereLoopAddVirtualOne( sqlite3_free(pNew->u.vtab.idxStr); pNew->u.vtab.needFree = 0; } - WHERETRACE(0xffff, (" bIn=%d prereqIn=%04llx prereqOut=%04llx\n", + WHERETRACE(0xffffffff, (" bIn=%d prereqIn=%04llx prereqOut=%04llx\n", *pbIn, (sqlite3_uint64)mPrereq, (sqlite3_uint64)(pNew->prereq & ~mPrereq))); @@ -159488,7 +163301,7 @@ static int whereLoopAddVirtualOne( ** ** Return a pointer to the collation name: ** -** 1. If there is an explicit COLLATE operator on the constaint, return it. +** 1. If there is an explicit COLLATE operator on the constraint, return it. ** ** 2. Else, if the column has an alternative collation, return that. ** @@ -159573,32 +163386,27 @@ SQLITE_API int sqlite3_vtab_distinct(sqlite3_index_info *pIdxInfo){ return pHidden->eDistinct; } -#if (defined(SQLITE_ENABLE_DBPAGE_VTAB) || defined(SQLITE_TEST)) \ - && !defined(SQLITE_OMIT_VIRTUALTABLE) /* ** Cause the prepared statement that is associated with a call to -** xBestIndex to potentiall use all schemas. If the statement being +** xBestIndex to potentially use all schemas. If the statement being ** prepared is read-only, then just start read transactions on all ** schemas. But if this is a write operation, start writes on all ** schemas. ** ** This is used by the (built-in) sqlite_dbpage virtual table. */ -SQLITE_PRIVATE void sqlite3VtabUsesAllSchemas(sqlite3_index_info *pIdxInfo){ - HiddenIndexInfo *pHidden = (HiddenIndexInfo*)&pIdxInfo[1]; - Parse *pParse = pHidden->pParse; +SQLITE_PRIVATE void sqlite3VtabUsesAllSchemas(Parse *pParse){ int nDb = pParse->db->nDb; int i; for(i=0; iwriteMask ){ + if( DbMaskNonZero(pParse->writeMask) ){ for(i=0; ipTab->zName)); - WHERETRACE(0x40, (" VirtualOne: all usable\n")); + WHERETRACE(0x800, (" VirtualOne: all usable\n")); rc = whereLoopAddVirtualOne( pBuilder, mPrereq, ALLBITS, 0, p, mNoOmit, &bIn, &bRetry ); @@ -159689,7 +163497,7 @@ static int whereLoopAddVirtual( /* If the plan produced by the earlier call uses an IN(...) term, call ** xBestIndex again, this time with IN(...) terms disabled. */ if( bIn ){ - WHERETRACE(0x40, (" VirtualOne: all usable w/o IN\n")); + WHERETRACE(0x800, (" VirtualOne: all usable w/o IN\n")); rc = whereLoopAddVirtualOne( pBuilder, mPrereq, ALLBITS, WO_IN, p, mNoOmit, &bIn, 0); assert( bIn==0 ); @@ -159715,7 +163523,7 @@ static int whereLoopAddVirtual( mPrev = mNext; if( mNext==ALLBITS ) break; if( mNext==mBest || mNext==mBestNoIn ) continue; - WHERETRACE(0x40, (" VirtualOne: mPrev=%04llx mNext=%04llx\n", + WHERETRACE(0x800, (" VirtualOne: mPrev=%04llx mNext=%04llx\n", (sqlite3_uint64)mPrev, (sqlite3_uint64)mNext)); rc = whereLoopAddVirtualOne( pBuilder, mPrereq, mNext|mPrereq, 0, p, mNoOmit, &bIn, 0); @@ -159729,7 +163537,7 @@ static int whereLoopAddVirtual( ** that requires no source tables at all (i.e. one guaranteed to be ** usable), make a call here with all source tables disabled */ if( rc==SQLITE_OK && seenZero==0 ){ - WHERETRACE(0x40, (" VirtualOne: all disabled\n")); + WHERETRACE(0x800, (" VirtualOne: all disabled\n")); rc = whereLoopAddVirtualOne( pBuilder, mPrereq, mPrereq, 0, p, mNoOmit, &bIn, 0); if( bIn==0 ) seenZeroNoIN = 1; @@ -159739,7 +163547,7 @@ static int whereLoopAddVirtual( ** that requires no source tables at all and does not use an IN(...) ** operator, make a final call to obtain one here. */ if( rc==SQLITE_OK && seenZeroNoIN==0 ){ - WHERETRACE(0x40, (" VirtualOne: all disabled and w/o IN\n")); + WHERETRACE(0x800, (" VirtualOne: all disabled and w/o IN\n")); rc = whereLoopAddVirtualOne( pBuilder, mPrereq, mPrereq, WO_IN, p, mNoOmit, &bIn, 0); } @@ -159795,7 +163603,7 @@ static int whereLoopAddOr( sSubBuild = *pBuilder; sSubBuild.pOrSet = &sCur; - WHERETRACE(0x200, ("Begin processing OR-clause %p\n", pTerm)); + WHERETRACE(0x400, ("Begin processing OR-clause %p\n", pTerm)); for(pOrTerm=pOrWC->a; pOrTermeOperator & WO_AND)!=0 ){ sSubBuild.pWC = &pOrTerm->u.pAndInfo->wc; @@ -159812,9 +163620,9 @@ static int whereLoopAddOr( } sCur.n = 0; #ifdef WHERETRACE_ENABLED - WHERETRACE(0x200, ("OR-term %d of %p has %d subterms:\n", + WHERETRACE(0x400, ("OR-term %d of %p has %d subterms:\n", (int)(pOrTerm-pOrWC->a), pTerm, sSubBuild.pWC->nTerm)); - if( sqlite3WhereTrace & 0x400 ){ + if( sqlite3WhereTrace & 0x20000 ){ sqlite3WhereClausePrint(sSubBuild.pWC); } #endif @@ -159829,8 +163637,6 @@ static int whereLoopAddOr( if( rc==SQLITE_OK ){ rc = whereLoopAddOr(&sSubBuild, mPrereq, mUnusable); } - assert( rc==SQLITE_OK || rc==SQLITE_DONE || sCur.n==0 - || rc==SQLITE_NOMEM ); testcase( rc==SQLITE_NOMEM && sCur.n>0 ); testcase( rc==SQLITE_DONE ); if( sCur.n==0 ){ @@ -159876,7 +163682,7 @@ static int whereLoopAddOr( pNew->prereq = sSum.a[i].prereq; rc = whereLoopInsert(pBuilder, pNew); } - WHERETRACE(0x200, ("End processing OR-clause %p\n", pTerm)); + WHERETRACE(0x400, ("End processing OR-clause %p\n", pTerm)); } } return rc; @@ -160224,8 +164030,8 @@ static i8 wherePathSatisfiesOrderBy( if( pOBExpr->iTable!=iCur ) continue; if( pOBExpr->iColumn!=iColumn ) continue; }else{ - Expr *pIdxExpr = pIndex->aColExpr->a[j].pExpr; - if( sqlite3ExprCompareSkip(pOBExpr, pIdxExpr, iCur) ){ + Expr *pIxExpr = pIndex->aColExpr->a[j].pExpr; + if( sqlite3ExprCompareSkip(pOBExpr, pIxExpr, iCur) ){ continue; } } @@ -160357,37 +164163,56 @@ static const char *wherePathName(WherePath *pPath, int nLoop, WhereLoop *pLast){ ** order. */ static LogEst whereSortingCost( - WhereInfo *pWInfo, - LogEst nRow, - int nOrderBy, - int nSorted + WhereInfo *pWInfo, /* Query planning context */ + LogEst nRow, /* Estimated number of rows to sort */ + int nOrderBy, /* Number of ORDER BY clause terms */ + int nSorted /* Number of initial ORDER BY terms naturally in order */ ){ - /* TUNING: Estimated cost of a full external sort, where N is + /* Estimated cost of a full external sort, where N is ** the number of rows to sort is: ** - ** cost = (3.0 * N * log(N)). + ** cost = (K * N * log(N)). ** ** Or, if the order-by clause has X terms but only the last Y ** terms are out of order, then block-sorting will reduce the ** sorting cost to: ** - ** cost = (3.0 * N * log(N)) * (Y/X) + ** cost = (K * N * log(N)) * (Y/X) ** - ** The (Y/X) term is implemented using stack variable rScale - ** below. + ** The constant K is at least 2.0 but will be larger if there are a + ** large number of columns to be sorted, as the sorting time is + ** proportional to the amount of content to be sorted. The algorithm + ** does not currently distinguish between fat columns (BLOBs and TEXTs) + ** and skinny columns (INTs). It just uses the number of columns as + ** an approximation for the row width. + ** + ** And extra factor of 2.0 or 3.0 is added to the sorting cost if the sort + ** is built using OP_IdxInsert and OP_Sort rather than with OP_SorterInsert. */ - LogEst rScale, rSortCost; - assert( nOrderBy>0 && 66==sqlite3LogEst(100) ); - rScale = sqlite3LogEst((nOrderBy-nSorted)*100/nOrderBy) - 66; - rSortCost = nRow + rScale + 16; + LogEst rSortCost, nCol; + assert( pWInfo->pSelect!=0 ); + assert( pWInfo->pSelect->pEList!=0 ); + /* TUNING: sorting cost proportional to the number of output columns: */ + nCol = sqlite3LogEst((pWInfo->pSelect->pEList->nExpr+59)/30); + rSortCost = nRow + nCol; + if( nSorted>0 ){ + /* Scale the result by (Y/X) */ + rSortCost += sqlite3LogEst((nOrderBy-nSorted)*100/nOrderBy) - 66; + } /* Multiple by log(M) where M is the number of output rows. ** Use the LIMIT for M if it is smaller. Or if this sort is for ** a DISTINCT operator, M will be the number of distinct output ** rows, so fudge it downwards a bit. */ - if( (pWInfo->wctrlFlags & WHERE_USE_LIMIT)!=0 && pWInfo->iLimitiLimit; + if( (pWInfo->wctrlFlags & WHERE_USE_LIMIT)!=0 ){ + rSortCost += 10; /* TUNING: Extra 2.0x if using LIMIT */ + if( nSorted!=0 ){ + rSortCost += 6; /* TUNING: Extra 1.5x if also using partial sort */ + } + if( pWInfo->iLimitiLimit; + } }else if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT) ){ /* TUNING: In the sort for a DISTINCT operator, assume that the DISTINCT ** reduces the number of output rows by a factor of 2 */ @@ -160437,7 +164262,8 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ ** For joins of 3 or more tables, track the 10 best paths */ mxChoice = (nLoop<=1) ? 1 : (nLoop==2 ? 5 : 10); assert( nLoop<=pWInfo->pTabList->nSrc ); - WHERETRACE(0x002, ("---- begin solver. (nRowEst=%d)\n", nRowEst)); + WHERETRACE(0x002, ("---- begin solver. (nRowEst=%d, nQueryLoop=%d)\n", + nRowEst, pParse->nQueryLoop)); /* If nRowEst is zero and there is an ORDER BY clause, ignore it. In this ** case the purpose of this call is to estimate the number of rows returned @@ -160539,11 +164365,11 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ pWInfo, nRowEst, nOrderBy, isOrdered ); } - /* TUNING: Add a small extra penalty (5) to sorting as an - ** extra encouragment to the query planner to select a plan + /* TUNING: Add a small extra penalty (3) to sorting as an + ** extra encouragement to the query planner to select a plan ** where the rows emerge in the correct order without any sorting ** required. */ - rCost = sqlite3LogEstAdd(rUnsorted, aSortCost[isOrdered]) + 5; + rCost = sqlite3LogEstAdd(rUnsorted, aSortCost[isOrdered]) + 3; WHERETRACE(0x002, ("---- sort cost=%-3d (%d/%d) increases cost %3d to %-3d\n", @@ -160556,9 +164382,10 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ /* TUNING: A full-scan of a VIEW or subquery in the outer loop ** is not so bad. */ - if( iLoop==0 && (pWLoop->wsFlags & WHERE_VIEWSCAN)!=0 ){ + if( iLoop==0 && (pWLoop->wsFlags & WHERE_VIEWSCAN)!=0 && nLoop>1 ){ rCost += -10; nOut += -30; + WHERETRACE(0x80,("VIEWSCAN cost reduction for %c\n",pWLoop->cId)); } /* Check to see if pWLoop should be added to the set of @@ -160747,6 +164574,10 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ if( pFrom->isOrdered==pWInfo->pOrderBy->nExpr ){ pWInfo->eDistinct = WHERE_DISTINCT_ORDERED; } + if( pWInfo->pSelect->pOrderBy + && pWInfo->nOBSat > pWInfo->pSelect->pOrderBy->nExpr ){ + pWInfo->nOBSat = pWInfo->pSelect->pOrderBy->nExpr; + } }else{ pWInfo->revMask = pFrom->revLoop; if( pWInfo->nOBSat<=0 ){ @@ -160891,7 +164722,7 @@ static int whereShortCut(WhereLoopBuilder *pBuilder){ pLoop->cId = '0'; #endif #ifdef WHERETRACE_ENABLED - if( sqlite3WhereTrace ){ + if( sqlite3WhereTrace & 0x02 ){ sqlite3DebugPrintf("whereShortCut() used to compute solution\n"); } #endif @@ -160958,6 +164789,13 @@ static void showAllWhereLoops(WhereInfo *pWInfo, WhereClause *pWC){ ** at most a single row. ** 4) The table must not be referenced by any part of the query apart ** from its own USING or ON clause. +** 5) The table must not have an inner-join ON or USING clause if there is +** a RIGHT JOIN anywhere in the query. Otherwise the ON/USING clause +** might move from the right side to the left side of the RIGHT JOIN. +** Note: Due to (2), this condition can only arise if the table is +** the right-most table of a subquery that was flattened into the +** main query and that subquery was the right-hand operand of an +** inner join that held an ON or USING clause. ** ** For example, given: ** @@ -160983,6 +164821,7 @@ static SQLITE_NOINLINE Bitmask whereOmitNoopJoin( ){ int i; Bitmask tabUsed; + int hasRightJoin; /* Preconditions checked by the caller */ assert( pWInfo->nLevel>=2 ); @@ -160997,6 +164836,7 @@ static SQLITE_NOINLINE Bitmask whereOmitNoopJoin( if( pWInfo->pOrderBy ){ tabUsed |= sqlite3WhereExprListUsage(&pWInfo->sMaskSet, pWInfo->pOrderBy); } + hasRightJoin = (pWInfo->pTabList->a[0].fg.jointype & JT_LTORJ)!=0; for(i=pWInfo->nLevel-1; i>=1; i--){ WhereTerm *pTerm, *pEnd; SrcItem *pItem; @@ -161019,9 +164859,15 @@ static SQLITE_NOINLINE Bitmask whereOmitNoopJoin( break; } } + if( hasRightJoin + && ExprHasProperty(pTerm->pExpr, EP_InnerON) + && pTerm->pExpr->w.iJoin==pItem->iCursor + ){ + break; /* restriction (5) */ + } } if( pTerm drop loop %c not used\n", pLoop->cId)); + WHERETRACE(0xffffffff, ("-> drop loop %c not used\n", pLoop->cId)); notReady &= ~pLoop->maskSelf; for(pTerm=pWInfo->sWC.a; pTermprereqAll & pLoop->maskSelf)!=0 ){ @@ -161060,28 +164906,27 @@ static SQLITE_NOINLINE void whereCheckIfBloomFilterIsUseful( const WhereInfo *pWInfo ){ int i; - LogEst nSearch; + LogEst nSearch = 0; assert( pWInfo->nLevel>=2 ); assert( OptimizationEnabled(pWInfo->pParse->db, SQLITE_BloomFilter) ); - nSearch = pWInfo->a[0].pWLoop->nOut; - for(i=1; inLevel; i++){ + for(i=0; inLevel; i++){ WhereLoop *pLoop = pWInfo->a[i].pWLoop; const unsigned int reqFlags = (WHERE_SELFCULL|WHERE_COLUMN_EQ); - if( (pLoop->wsFlags & reqFlags)==reqFlags + SrcItem *pItem = &pWInfo->pTabList->a[pLoop->iTab]; + Table *pTab = pItem->pTab; + if( (pTab->tabFlags & TF_HasStat1)==0 ) break; + pTab->tabFlags |= TF_StatsUsed; + if( i>=1 + && (pLoop->wsFlags & reqFlags)==reqFlags /* vvvvvv--- Always the case if WHERE_COLUMN_EQ is defined */ && ALWAYS((pLoop->wsFlags & (WHERE_IPK|WHERE_INDEXED))!=0) ){ - SrcItem *pItem = &pWInfo->pTabList->a[pLoop->iTab]; - Table *pTab = pItem->pTab; - pTab->tabFlags |= TF_StatsUsed; - if( nSearch > pTab->nRowLogEst - && (pTab->tabFlags & TF_HasStat1)!=0 - ){ + if( nSearch > pTab->nRowLogEst ){ testcase( pItem->fg.jointype & JT_LEFT ); pLoop->wsFlags |= WHERE_BLOOMFILTER; pLoop->wsFlags &= ~WHERE_IDX_ONLY; - WHERETRACE(0xffff, ( + WHERETRACE(0xffffffff, ( "-> use Bloom-filter on loop %c because there are ~%.1e " "lookups into %s which has only ~%.1e rows\n", pLoop->cId, (double)sqlite3LogEstToInt(nSearch), pTab->zName, @@ -161094,13 +164939,13 @@ static SQLITE_NOINLINE void whereCheckIfBloomFilterIsUseful( /* ** This is an sqlite3ParserAddCleanup() callback that is invoked to -** free the Parse->pIdxExpr list when the Parse object is destroyed. +** free the Parse->pIdxEpr list when the Parse object is destroyed. */ static void whereIndexedExprCleanup(sqlite3 *db, void *pObject){ Parse *pParse = (Parse*)pObject; - while( pParse->pIdxExpr!=0 ){ - IndexedExpr *p = pParse->pIdxExpr; - pParse->pIdxExpr = p->pIENext; + while( pParse->pIdxEpr!=0 ){ + IndexedExpr *p = pParse->pIdxEpr; + pParse->pIdxEpr = p->pIENext; sqlite3ExprDelete(db, p->pExpr); sqlite3DbFreeNN(db, p); } @@ -161112,13 +164957,13 @@ static void whereIndexedExprCleanup(sqlite3 *db, void *pObject){ ** number for the index and iDataCur is the cursor number for the corresponding ** table. ** -** This routine adds IndexedExpr entries to the Parse->pIdxExpr field for +** This routine adds IndexedExpr entries to the Parse->pIdxEpr field for ** each of the expressions in the index so that the expression code generator ** will know to replace occurrences of the indexed expression with ** references to the corresponding column of the index. */ static SQLITE_NOINLINE void whereAddIndexedExpr( - Parse *pParse, /* Add IndexedExpr entries to pParse->pIdxExpr */ + Parse *pParse, /* Add IndexedExpr entries to pParse->pIdxEpr */ Index *pIdx, /* The index-on-expression that contains the expressions */ int iIdxCur, /* Cursor number for pIdx */ SrcItem *pTabItem /* The FROM clause entry for the table */ @@ -161147,22 +164992,53 @@ static SQLITE_NOINLINE void whereAddIndexedExpr( if( sqlite3ExprIsConstant(pExpr) ) continue; p = sqlite3DbMallocRaw(pParse->db, sizeof(IndexedExpr)); if( p==0 ) break; - p->pIENext = pParse->pIdxExpr; + p->pIENext = pParse->pIdxEpr; +#ifdef WHERETRACE_ENABLED + if( sqlite3WhereTrace & 0x200 ){ + sqlite3DebugPrintf("New pParse->pIdxEpr term {%d,%d}\n", iIdxCur, i); + if( sqlite3WhereTrace & 0x5000 ) sqlite3ShowExpr(pExpr); + } +#endif p->pExpr = sqlite3ExprDup(pParse->db, pExpr, 0); p->iDataCur = pTabItem->iCursor; p->iIdxCur = iIdxCur; p->iIdxCol = i; p->bMaybeNullRow = bMaybeNullRow; + if( sqlite3IndexAffinityStr(pParse->db, pIdx) ){ + p->aff = pIdx->zColAff[i]; + } #ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS p->zIdxName = pIdx->zName; #endif - pParse->pIdxExpr = p; + pParse->pIdxEpr = p; if( p->pIENext==0 ){ sqlite3ParserAddCleanup(pParse, whereIndexedExprCleanup, pParse); } } } +/* +** Set the reverse-scan order mask to one for all tables in the query +** with the exception of MATERIALIZED common table expressions that have +** their own internal ORDER BY clauses. +** +** This implements the PRAGMA reverse_unordered_selects=ON setting. +** (Also SQLITE_DBCONFIG_REVERSE_SCANORDER). +*/ +static SQLITE_NOINLINE void whereReverseScanOrder(WhereInfo *pWInfo){ + int ii; + for(ii=0; iipTabList->nSrc; ii++){ + SrcItem *pItem = &pWInfo->pTabList->a[ii]; + if( !pItem->fg.isCte + || pItem->u2.pCteUse->eM10d!=M10d_Yes + || NEVER(pItem->pSelect==0) + || pItem->pSelect->pOrderBy==0 + ){ + pWInfo->revMask |= MASKBIT(ii); + } + } +} + /* ** Generate the beginning of the loop used for WHERE clause processing. ** The return value is a pointer to an opaque structure that contains @@ -161221,7 +165097,7 @@ static SQLITE_NOINLINE void whereAddIndexedExpr( ** ** OUTER JOINS ** -** An outer join of tables t1 and t2 is conceptally coded as follows: +** An outer join of tables t1 and t2 is conceptually coded as follows: ** ** foreach row1 in t1 do ** flag = 0 @@ -161376,7 +165252,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( ** ** The N-th term of the FROM clause is assigned a bitmask of 1<nErr ) goto whereBeginError; - /* Special case: WHERE terms that do not refer to any tables in the join - ** (constant expressions). Evaluate each such term, and jump over all the - ** generated code if the result is not true. + /* The False-WHERE-Term-Bypass optimization: ** - ** Do not do this if the expression contains non-deterministic functions - ** that are not within a sub-select. This is not strictly required, but - ** preserves SQLite's legacy behaviour in the following two cases: + ** If there are WHERE terms that are false, then no rows will be output, + ** so skip over all of the code generated here. ** - ** FROM ... WHERE random()>0; -- eval random() once per row - ** FROM ... WHERE (SELECT random())>0; -- eval random() once overall + ** Conditions: + ** + ** (1) The WHERE term must not refer to any tables in the join. + ** (2) The term must not come from an ON clause on the + ** right-hand side of a LEFT or FULL JOIN. + ** (3) The term must not come from an ON clause, or there must be + ** no RIGHT or FULL OUTER joins in pTabList. + ** (4) If the expression contains non-deterministic functions + ** that are not within a sub-select. This is not required + ** for correctness but rather to preserves SQLite's legacy + ** behaviour in the following two cases: + ** + ** WHERE random()>0; -- eval random() once per row + ** WHERE (SELECT random())>0; -- eval random() just once overall + ** + ** Note that the Where term need not be a constant in order for this + ** optimization to apply, though it does need to be constant relative to + ** the current subquery (condition 1). The term might include variables + ** from outer queries so that the value of the term changes from one + ** invocation of the current subquery to the next. */ for(ii=0; iinBase; ii++){ - WhereTerm *pT = &sWLB.pWC->a[ii]; + WhereTerm *pT = &sWLB.pWC->a[ii]; /* A term of the WHERE clause */ + Expr *pX; /* The expression of pT */ if( pT->wtFlags & TERM_VIRTUAL ) continue; - if( pT->prereqAll==0 && (nTabList==0 || exprIsDeterministic(pT->pExpr)) ){ - sqlite3ExprIfFalse(pParse, pT->pExpr, pWInfo->iBreak, SQLITE_JUMPIFNULL); + pX = pT->pExpr; + assert( pX!=0 ); + assert( pT->prereqAll!=0 || !ExprHasProperty(pX, EP_OuterON) ); + if( pT->prereqAll==0 /* Conditions (1) and (2) */ + && (nTabList==0 || exprIsDeterministic(pX)) /* Condition (4) */ + && !(ExprHasProperty(pX, EP_InnerON) /* Condition (3) */ + && (pTabList->a[0].fg.jointype & JT_LTORJ)!=0 ) + ){ + sqlite3ExprIfFalse(pParse, pX, pWInfo->iBreak, SQLITE_JUMPIFNULL); pT->wtFlags |= TERM_CODED; } } @@ -161448,13 +165347,13 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( /* Construct the WhereLoop objects */ #if defined(WHERETRACE_ENABLED) - if( sqlite3WhereTrace & 0xffff ){ + if( sqlite3WhereTrace & 0xffffffff ){ sqlite3DebugPrintf("*** Optimizer Start *** (wctrlFlags: 0x%x",wctrlFlags); if( wctrlFlags & WHERE_USE_LIMIT ){ sqlite3DebugPrintf(", limit: %d", iAuxArg); } sqlite3DebugPrintf(")\n"); - if( sqlite3WhereTrace & 0x100 ){ + if( sqlite3WhereTrace & 0x8000 ){ Select sSelect; memset(&sSelect, 0, sizeof(sSelect)); sSelect.selFlags = SF_WhereBegin; @@ -161464,10 +165363,10 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( sSelect.pEList = pResultSet; sqlite3TreeViewSelect(0, &sSelect, 0); } - } - if( sqlite3WhereTrace & 0x100 ){ /* Display all terms of the WHERE clause */ - sqlite3DebugPrintf("---- WHERE clause at start of analysis:\n"); - sqlite3WhereClausePrint(sWLB.pWC); + if( sqlite3WhereTrace & 0x4000 ){ /* Display all WHERE clause terms */ + sqlite3DebugPrintf("---- WHERE clause at start of analysis:\n"); + sqlite3WhereClausePrint(sWLB.pWC); + } } #endif @@ -161483,7 +165382,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( ** loops will be built using the revised truthProb values. */ if( sWLB.bldFlags2 & SQLITE_BLDF2_2NDPASS ){ WHERETRACE_ALL_LOOPS(pWInfo, sWLB.pWC); - WHERETRACE(0xffff, + WHERETRACE(0xffffffff, ("**** Redo all loop computations due to" " TERM_HIGHTRUTH changes ****\n")); while( pWInfo->pLoops ){ @@ -161504,8 +165403,9 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( if( db->mallocFailed ) goto whereBeginError; } } + assert( pWInfo->pTabList!=0 ); if( pWInfo->pOrderBy==0 && (db->flags & SQLITE_ReverseOrder)!=0 ){ - pWInfo->revMask = ALLBITS; + whereReverseScanOrder(pWInfo); } if( pParse->nErr ){ goto whereBeginError; @@ -161569,11 +165469,11 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( } #if defined(WHERETRACE_ENABLED) - if( sqlite3WhereTrace & 0x100 ){ /* Display all terms of the WHERE clause */ + if( sqlite3WhereTrace & 0x4000 ){ /* Display all terms of the WHERE clause */ sqlite3DebugPrintf("---- WHERE clause at end of analysis:\n"); sqlite3WhereClausePrint(sWLB.pWC); } - WHERETRACE(0xffff,("*** Optimizer Finished ***\n")); + WHERETRACE(0xffffffff,("*** Optimizer Finished ***\n")); #endif pWInfo->pParse->nQueryLoop += pWInfo->nRowOut; @@ -161605,6 +165505,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( 0!=(wctrlFlags & WHERE_ONEPASS_MULTIROW) && !IsVirtual(pTabList->a[0].pTab) && (0==(wsFlags & WHERE_MULTI_OR) || (wctrlFlags & WHERE_DUPLICATES_OK)) + && OptimizationEnabled(db, SQLITE_OnePass) )){ pWInfo->eOnePass = bOnerow ? ONEPASS_SINGLE : ONEPASS_MULTI; if( HasRowid(pTabList->a[0].pTab) && (wsFlags & WHERE_IDX_ONLY) ){ @@ -161668,7 +165569,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( assert( n<=pTab->nCol ); } #ifdef SQLITE_ENABLE_CURSOR_HINTS - if( pLoop->u.btree.pIndex!=0 ){ + if( pLoop->u.btree.pIndex!=0 && (pTab->tabFlags & TF_WithoutRowid)==0 ){ sqlite3VdbeChangeP5(v, OPFLAG_SEEKEQ|bFordelete); }else #endif @@ -161805,11 +165706,11 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( sqlite3VdbeJumpHere(v, iOnce); } } + assert( pTabList == pWInfo->pTabList ); if( (wsFlags & (WHERE_AUTO_INDEX|WHERE_BLOOMFILTER))!=0 ){ if( (wsFlags & WHERE_AUTO_INDEX)!=0 ){ #ifndef SQLITE_OMIT_AUTOMATIC_INDEX - constructAutomaticIndex(pParse, &pWInfo->sWC, - &pTabList->a[pLevel->iFrom], notReady, pLevel); + constructAutomaticIndex(pParse, &pWInfo->sWC, notReady, pLevel); #endif }else{ sqlite3ConstructBloomFilter(pWInfo, ii, pLevel, notReady); @@ -162107,9 +166008,16 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ last = pWInfo->iEndWhere; } if( pIdx->bHasExpr ){ - IndexedExpr *p = pParse->pIdxExpr; + IndexedExpr *p = pParse->pIdxEpr; while( p ){ if( p->iIdxCur==pLevel->iIdxCur ){ +#ifdef WHERETRACE_ENABLED + if( sqlite3WhereTrace & 0x200 ){ + sqlite3DebugPrintf("Disable pParse->pIdxEpr term {%d,%d}\n", + p->iIdxCur, p->iIdxCol); + if( sqlite3WhereTrace & 0x5000 ) sqlite3ShowExpr(p->pExpr); + } +#endif p->iDataCur = -1; p->iIdxCur = -1; } @@ -162119,7 +166027,8 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ k = pLevel->addrBody + 1; #ifdef SQLITE_DEBUG if( db->flags & SQLITE_VdbeAddopTrace ){ - printf("TRANSLATE opcodes in range %d..%d\n", k, last-1); + printf("TRANSLATE cursor %d->%d in opcode range %d..%d\n", + pLevel->iTabCur, pLevel->iIdxCur, k, last-1); } /* Proof that the "+1" on the k value above is safe */ pOp = sqlite3VdbeGetOp(v, k - 1); @@ -162326,7 +166235,7 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ ** ** These are the same built-in window functions supported by Postgres. ** Although the behaviour of aggregate window functions (functions that -** can be used as either aggregates or window funtions) allows them to +** can be used as either aggregates or window functions) allows them to ** be implemented using an API, built-in window functions are much more ** esoteric. Additionally, some window functions (e.g. nth_value()) ** may only be implemented by caching the entire partition in memory. @@ -162856,7 +166765,7 @@ static Window *windowFind(Parse *pParse, Window *pList, const char *zName){ ** is the Window object representing the associated OVER clause. This ** function updates the contents of pWin as follows: ** -** * If the OVER clause refered to a named window (as in "max(x) OVER win"), +** * If the OVER clause referred to a named window (as in "max(x) OVER win"), ** search list pList for a matching WINDOW definition, and update pWin ** accordingly. If no such WINDOW clause can be found, leave an error ** in pParse. @@ -162994,6 +166903,7 @@ static int selectWindowRewriteExprCb(Walker *pWalker, Expr *pExpr){ } /* no break */ deliberate_fall_through + case TK_IF_NULL_ROW: case TK_AGG_FUNCTION: case TK_COLUMN: { int iCol = -1; @@ -163278,7 +167188,7 @@ SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, Select *p){ pSub = sqlite3SelectNew( pParse, pSublist, pSrc, pWhere, pGroupBy, pHaving, pSort, 0, 0 ); - SELECTTRACE(1,pParse,pSub, + TREETRACE(0x40,pParse,pSub, ("New window-function subquery in FROM clause of (%u/%p)\n", p->selId, p)); p->pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0); @@ -163288,6 +167198,7 @@ SQLITE_PRIVATE int sqlite3WindowRewrite(Parse *pParse, Select *p){ if( p->pSrc ){ Table *pTab2; p->pSrc->a[0].pSelect = pSub; + p->pSrc->a[0].fg.isCorrelated = 1; sqlite3SrcListAssignCursors(pParse, p->pSrc); pSub->selFlags |= SF_Expanded|SF_OrderByReqd; pTab2 = sqlite3ResultSetOfSelect(pParse, pSub, SQLITE_AFF_NONE); @@ -163475,7 +167386,7 @@ SQLITE_PRIVATE Window *sqlite3WindowAssemble( } /* -** Window *pWin has just been created from a WINDOW clause. Tokne pBase +** Window *pWin has just been created from a WINDOW clause. Token pBase ** is the base window. Earlier windows from the same WINDOW clause are ** stored in the linked list starting at pWin->pNextWin. This function ** either updates *pWin according to the base specification, or else @@ -163781,7 +167692,7 @@ struct WindowCsrAndReg { ** ** (ORDER BY a, b GROUPS BETWEEN 2 PRECEDING AND 2 FOLLOWING) ** -** The windows functions implmentation caches the input rows in a temp +** The windows functions implementation caches the input rows in a temp ** table, sorted by "a, b" (it actually populates the cache lazily, and ** aggressively removes rows once they are no longer required, but that's ** a mere detail). It keeps three cursors open on the temp table. One @@ -164790,7 +168701,7 @@ static int windowExprGtZero(Parse *pParse, Expr *pExpr){ ** ** For the most part, the patterns above are adapted to support UNBOUNDED by ** assuming that it is equivalent to "infinity PRECEDING/FOLLOWING" and -** CURRENT ROW by assuming that it is equivilent to "0 PRECEDING/FOLLOWING". +** CURRENT ROW by assuming that it is equivalent to "0 PRECEDING/FOLLOWING". ** This is optimized of course - branches that will never be taken and ** conditions that are always true are omitted from the VM code. The only ** exceptional case is: @@ -165069,7 +168980,7 @@ SQLITE_PRIVATE void sqlite3WindowCodeStep( } /* Allocate registers for the array of values from the sub-query, the - ** samve values in record form, and the rowid used to insert said record + ** same values in record form, and the rowid used to insert said record ** into the ephemeral table. */ regNew = pParse->nMem+1; pParse->nMem += nInput; @@ -165153,8 +169064,7 @@ SQLITE_PRIVATE void sqlite3WindowCodeStep( VdbeCoverageNeverNullIf(v, op==OP_Ge); /* NeverNull because bound */ VdbeCoverageNeverNullIf(v, op==OP_Le); /* values previously checked */ windowAggFinal(&s, 0); - sqlite3VdbeAddOp2(v, OP_Rewind, s.current.csr, 1); - VdbeCoverageNeverTaken(v); + sqlite3VdbeAddOp1(v, OP_Rewind, s.current.csr); windowReturnOneRow(&s); sqlite3VdbeAddOp1(v, OP_ResetSorter, s.current.csr); sqlite3VdbeAddOp2(v, OP_Goto, 0, lblWhereEnd); @@ -165166,13 +169076,10 @@ SQLITE_PRIVATE void sqlite3WindowCodeStep( } if( pMWin->eStart!=TK_UNBOUNDED ){ - sqlite3VdbeAddOp2(v, OP_Rewind, s.start.csr, 1); - VdbeCoverageNeverTaken(v); + sqlite3VdbeAddOp1(v, OP_Rewind, s.start.csr); } - sqlite3VdbeAddOp2(v, OP_Rewind, s.current.csr, 1); - VdbeCoverageNeverTaken(v); - sqlite3VdbeAddOp2(v, OP_Rewind, s.end.csr, 1); - VdbeCoverageNeverTaken(v); + sqlite3VdbeAddOp1(v, OP_Rewind, s.current.csr); + sqlite3VdbeAddOp1(v, OP_Rewind, s.end.csr); if( regPeer && pOrderBy ){ sqlite3VdbeAddOp3(v, OP_Copy, regNewPeer, regPeer, pOrderBy->nExpr-1); sqlite3VdbeAddOp3(v, OP_Copy, regPeer, s.start.reg, pOrderBy->nExpr-1); @@ -165314,7 +169221,8 @@ SQLITE_PRIVATE void sqlite3WindowCodeStep( /************** End of window.c **********************************************/ /************** Begin file parse.c *******************************************/ /* This file is automatically generated by Lemon from input grammar -** source file "parse.y". */ +** source file "parse.y". +*/ /* ** 2001-09-15 ** @@ -165331,7 +169239,7 @@ SQLITE_PRIVATE void sqlite3WindowCodeStep( ** The canonical source code to this file ("parse.y") is a Lemon grammar ** file that specifies the input grammar and actions to take while parsing. ** That input file is processed by Lemon to generate a C-language -** implementation of a parser for the given grammer. You might be reading +** implementation of a parser for the given grammar. You might be reading ** this comment as part of the translated C-code. Edits should be made ** to the original parse.y sources. */ @@ -165825,18 +169733,18 @@ typedef union { #define sqlite3ParserCTX_FETCH Parse *pParse=yypParser->pParse; #define sqlite3ParserCTX_STORE yypParser->pParse=pParse; #define YYFALLBACK 1 -#define YYNSTATE 576 -#define YYNRULE 405 -#define YYNRULE_WITH_ACTION 342 +#define YYNSTATE 575 +#define YYNRULE 403 +#define YYNRULE_WITH_ACTION 338 #define YYNTOKEN 185 -#define YY_MAX_SHIFT 575 -#define YY_MIN_SHIFTREDUCE 835 -#define YY_MAX_SHIFTREDUCE 1239 -#define YY_ERROR_ACTION 1240 -#define YY_ACCEPT_ACTION 1241 -#define YY_NO_ACTION 1242 -#define YY_MIN_REDUCE 1243 -#define YY_MAX_REDUCE 1647 +#define YY_MAX_SHIFT 574 +#define YY_MIN_SHIFTREDUCE 833 +#define YY_MAX_SHIFTREDUCE 1235 +#define YY_ERROR_ACTION 1236 +#define YY_ACCEPT_ACTION 1237 +#define YY_NO_ACTION 1238 +#define YY_MIN_REDUCE 1239 +#define YY_MAX_REDUCE 1641 /************* End control #defines *******************************************/ #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) @@ -165903,218 +169811,218 @@ typedef union { ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define YY_ACTTAB_COUNT (2098) +#define YY_ACTTAB_COUNT (2096) static const YYACTIONTYPE yy_action[] = { /* 0 */ 568, 208, 568, 118, 115, 229, 568, 118, 115, 229, - /* 10 */ 568, 1314, 377, 1293, 408, 562, 562, 562, 568, 409, - /* 20 */ 378, 1314, 1276, 41, 41, 41, 41, 208, 1526, 71, - /* 30 */ 71, 971, 419, 41, 41, 491, 303, 279, 303, 972, - /* 40 */ 397, 71, 71, 125, 126, 80, 1217, 1217, 1050, 1053, - /* 50 */ 1040, 1040, 123, 123, 124, 124, 124, 124, 476, 409, - /* 60 */ 1241, 1, 1, 575, 2, 1245, 550, 118, 115, 229, - /* 70 */ 317, 480, 146, 480, 524, 118, 115, 229, 529, 1327, - /* 80 */ 417, 523, 142, 125, 126, 80, 1217, 1217, 1050, 1053, - /* 90 */ 1040, 1040, 123, 123, 124, 124, 124, 124, 118, 115, + /* 10 */ 568, 1310, 377, 1289, 408, 562, 562, 562, 568, 409, + /* 20 */ 378, 1310, 1272, 41, 41, 41, 41, 208, 1520, 71, + /* 30 */ 71, 969, 419, 41, 41, 491, 303, 279, 303, 970, + /* 40 */ 397, 71, 71, 125, 126, 80, 1210, 1210, 1047, 1050, + /* 50 */ 1037, 1037, 123, 123, 124, 124, 124, 124, 476, 409, + /* 60 */ 1237, 1, 1, 574, 2, 1241, 550, 118, 115, 229, + /* 70 */ 317, 480, 146, 480, 524, 118, 115, 229, 529, 1323, + /* 80 */ 417, 523, 142, 125, 126, 80, 1210, 1210, 1047, 1050, + /* 90 */ 1037, 1037, 123, 123, 124, 124, 124, 124, 118, 115, /* 100 */ 229, 327, 122, 122, 122, 122, 121, 121, 120, 120, /* 110 */ 120, 119, 116, 444, 284, 284, 284, 284, 442, 442, - /* 120 */ 442, 1567, 376, 1569, 1192, 375, 1163, 565, 1163, 565, - /* 130 */ 409, 1567, 537, 259, 226, 444, 101, 145, 449, 316, + /* 120 */ 442, 1559, 376, 1561, 1186, 375, 1157, 565, 1157, 565, + /* 130 */ 409, 1559, 537, 259, 226, 444, 101, 145, 449, 316, /* 140 */ 559, 240, 122, 122, 122, 122, 121, 121, 120, 120, - /* 150 */ 120, 119, 116, 444, 125, 126, 80, 1217, 1217, 1050, - /* 160 */ 1053, 1040, 1040, 123, 123, 124, 124, 124, 124, 142, - /* 170 */ 294, 1192, 339, 448, 120, 120, 120, 119, 116, 444, - /* 180 */ 127, 1192, 1193, 1194, 148, 441, 440, 568, 119, 116, + /* 150 */ 120, 119, 116, 444, 125, 126, 80, 1210, 1210, 1047, + /* 160 */ 1050, 1037, 1037, 123, 123, 124, 124, 124, 124, 142, + /* 170 */ 294, 1186, 339, 448, 120, 120, 120, 119, 116, 444, + /* 180 */ 127, 1186, 1187, 1186, 148, 441, 440, 568, 119, 116, /* 190 */ 444, 124, 124, 124, 124, 117, 122, 122, 122, 122, /* 200 */ 121, 121, 120, 120, 120, 119, 116, 444, 454, 113, /* 210 */ 13, 13, 546, 122, 122, 122, 122, 121, 121, 120, - /* 220 */ 120, 120, 119, 116, 444, 422, 316, 559, 1192, 1193, - /* 230 */ 1194, 149, 1224, 409, 1224, 124, 124, 124, 124, 122, + /* 220 */ 120, 120, 119, 116, 444, 422, 316, 559, 1186, 1187, + /* 230 */ 1186, 149, 1218, 409, 1218, 124, 124, 124, 124, 122, /* 240 */ 122, 122, 122, 121, 121, 120, 120, 120, 119, 116, - /* 250 */ 444, 465, 342, 1037, 1037, 1051, 1054, 125, 126, 80, - /* 260 */ 1217, 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, - /* 270 */ 124, 124, 1279, 522, 222, 1192, 568, 409, 224, 514, + /* 250 */ 444, 465, 342, 1034, 1034, 1048, 1051, 125, 126, 80, + /* 260 */ 1210, 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, + /* 270 */ 124, 124, 1275, 522, 222, 1186, 568, 409, 224, 514, /* 280 */ 175, 82, 83, 122, 122, 122, 122, 121, 121, 120, - /* 290 */ 120, 120, 119, 116, 444, 1007, 16, 16, 1192, 133, - /* 300 */ 133, 125, 126, 80, 1217, 1217, 1050, 1053, 1040, 1040, + /* 290 */ 120, 120, 119, 116, 444, 1005, 16, 16, 1186, 133, + /* 300 */ 133, 125, 126, 80, 1210, 1210, 1047, 1050, 1037, 1037, /* 310 */ 123, 123, 124, 124, 124, 124, 122, 122, 122, 122, - /* 320 */ 121, 121, 120, 120, 120, 119, 116, 444, 1041, 546, - /* 330 */ 1192, 373, 1192, 1193, 1194, 252, 1434, 399, 504, 501, - /* 340 */ 500, 111, 560, 566, 4, 926, 926, 433, 499, 340, - /* 350 */ 460, 328, 360, 394, 1237, 1192, 1193, 1194, 563, 568, + /* 320 */ 121, 121, 120, 120, 120, 119, 116, 444, 1038, 546, + /* 330 */ 1186, 373, 1186, 1187, 1186, 252, 1429, 399, 504, 501, + /* 340 */ 500, 111, 560, 566, 4, 924, 924, 433, 499, 340, + /* 350 */ 460, 328, 360, 394, 1231, 1186, 1187, 1186, 563, 568, /* 360 */ 122, 122, 122, 122, 121, 121, 120, 120, 120, 119, - /* 370 */ 116, 444, 284, 284, 369, 1580, 1607, 441, 440, 154, - /* 380 */ 409, 445, 71, 71, 1286, 565, 1221, 1192, 1193, 1194, - /* 390 */ 85, 1223, 271, 557, 543, 515, 1561, 568, 98, 1222, - /* 400 */ 6, 1278, 472, 142, 125, 126, 80, 1217, 1217, 1050, - /* 410 */ 1053, 1040, 1040, 123, 123, 124, 124, 124, 124, 550, - /* 420 */ 13, 13, 1027, 507, 1224, 1192, 1224, 549, 109, 109, - /* 430 */ 222, 568, 1238, 175, 568, 427, 110, 197, 445, 570, - /* 440 */ 569, 430, 1552, 1017, 325, 551, 1192, 270, 287, 368, + /* 370 */ 116, 444, 284, 284, 369, 1572, 1598, 441, 440, 154, + /* 380 */ 409, 445, 71, 71, 1282, 565, 1215, 1186, 1187, 1186, + /* 390 */ 85, 1217, 271, 557, 543, 515, 515, 568, 98, 1216, + /* 400 */ 6, 1274, 472, 142, 125, 126, 80, 1210, 1210, 1047, + /* 410 */ 1050, 1037, 1037, 123, 123, 124, 124, 124, 124, 550, + /* 420 */ 13, 13, 1024, 507, 1218, 1186, 1218, 549, 109, 109, + /* 430 */ 222, 568, 1232, 175, 568, 427, 110, 197, 445, 569, + /* 440 */ 445, 430, 1546, 1014, 325, 551, 1186, 270, 287, 368, /* 450 */ 510, 363, 509, 257, 71, 71, 543, 71, 71, 359, - /* 460 */ 316, 559, 1613, 122, 122, 122, 122, 121, 121, 120, - /* 470 */ 120, 120, 119, 116, 444, 1017, 1017, 1019, 1020, 27, - /* 480 */ 284, 284, 1192, 1193, 1194, 1158, 568, 1612, 409, 901, - /* 490 */ 190, 550, 356, 565, 550, 937, 533, 517, 1158, 516, - /* 500 */ 413, 1158, 552, 1192, 1193, 1194, 568, 544, 1554, 51, - /* 510 */ 51, 214, 125, 126, 80, 1217, 1217, 1050, 1053, 1040, - /* 520 */ 1040, 123, 123, 124, 124, 124, 124, 1192, 474, 135, - /* 530 */ 135, 409, 284, 284, 1490, 505, 121, 121, 120, 120, - /* 540 */ 120, 119, 116, 444, 1007, 565, 518, 217, 541, 1561, - /* 550 */ 316, 559, 142, 6, 532, 125, 126, 80, 1217, 1217, - /* 560 */ 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, 124, - /* 570 */ 1555, 122, 122, 122, 122, 121, 121, 120, 120, 120, - /* 580 */ 119, 116, 444, 485, 1192, 1193, 1194, 482, 281, 1267, - /* 590 */ 957, 252, 1192, 373, 504, 501, 500, 1192, 340, 571, - /* 600 */ 1192, 571, 409, 292, 499, 957, 876, 191, 480, 316, + /* 460 */ 316, 559, 1604, 122, 122, 122, 122, 121, 121, 120, + /* 470 */ 120, 120, 119, 116, 444, 1014, 1014, 1016, 1017, 27, + /* 480 */ 284, 284, 1186, 1187, 1186, 1152, 568, 1603, 409, 899, + /* 490 */ 190, 550, 356, 565, 550, 935, 533, 517, 1152, 516, + /* 500 */ 413, 1152, 552, 1186, 1187, 1186, 568, 544, 544, 51, + /* 510 */ 51, 214, 125, 126, 80, 1210, 1210, 1047, 1050, 1037, + /* 520 */ 1037, 123, 123, 124, 124, 124, 124, 1186, 474, 135, + /* 530 */ 135, 409, 284, 284, 1484, 505, 121, 121, 120, 120, + /* 540 */ 120, 119, 116, 444, 1005, 565, 518, 217, 541, 541, + /* 550 */ 316, 559, 142, 6, 532, 125, 126, 80, 1210, 1210, + /* 560 */ 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, 124, + /* 570 */ 1548, 122, 122, 122, 122, 121, 121, 120, 120, 120, + /* 580 */ 119, 116, 444, 485, 1186, 1187, 1186, 482, 281, 1263, + /* 590 */ 955, 252, 1186, 373, 504, 501, 500, 1186, 340, 570, + /* 600 */ 1186, 570, 409, 292, 499, 955, 874, 191, 480, 316, /* 610 */ 559, 384, 290, 380, 122, 122, 122, 122, 121, 121, - /* 620 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1217, - /* 630 */ 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, - /* 640 */ 124, 409, 394, 1136, 1192, 869, 100, 284, 284, 1192, - /* 650 */ 1193, 1194, 373, 1093, 1192, 1193, 1194, 1192, 1193, 1194, - /* 660 */ 565, 455, 32, 373, 233, 125, 126, 80, 1217, 1217, - /* 670 */ 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, 124, - /* 680 */ 1433, 959, 568, 228, 958, 122, 122, 122, 122, 121, - /* 690 */ 121, 120, 120, 120, 119, 116, 444, 1158, 228, 1192, - /* 700 */ 157, 1192, 1193, 1194, 1553, 13, 13, 301, 957, 1232, - /* 710 */ 1158, 153, 409, 1158, 373, 1583, 1176, 5, 369, 1580, - /* 720 */ 429, 1238, 3, 957, 122, 122, 122, 122, 121, 121, - /* 730 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1217, - /* 740 */ 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, - /* 750 */ 124, 409, 208, 567, 1192, 1028, 1192, 1193, 1194, 1192, - /* 760 */ 388, 852, 155, 1552, 286, 402, 1098, 1098, 488, 568, - /* 770 */ 465, 342, 1319, 1319, 1552, 125, 126, 80, 1217, 1217, - /* 780 */ 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, 124, + /* 620 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1210, + /* 630 */ 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, + /* 640 */ 124, 409, 394, 1132, 1186, 867, 100, 284, 284, 1186, + /* 650 */ 1187, 1186, 373, 1089, 1186, 1187, 1186, 1186, 1187, 1186, + /* 660 */ 565, 455, 32, 373, 233, 125, 126, 80, 1210, 1210, + /* 670 */ 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, 124, + /* 680 */ 1428, 957, 568, 228, 956, 122, 122, 122, 122, 121, + /* 690 */ 121, 120, 120, 120, 119, 116, 444, 1152, 228, 1186, + /* 700 */ 157, 1186, 1187, 1186, 1547, 13, 13, 301, 955, 1226, + /* 710 */ 1152, 153, 409, 1152, 373, 1575, 1170, 5, 369, 1572, + /* 720 */ 429, 1232, 3, 955, 122, 122, 122, 122, 121, 121, + /* 730 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1210, + /* 740 */ 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, + /* 750 */ 124, 409, 208, 567, 1186, 1025, 1186, 1187, 1186, 1186, + /* 760 */ 388, 850, 155, 1546, 286, 402, 1094, 1094, 488, 568, + /* 770 */ 465, 342, 1315, 1315, 1546, 125, 126, 80, 1210, 1210, + /* 780 */ 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, 124, /* 790 */ 129, 568, 13, 13, 374, 122, 122, 122, 122, 121, /* 800 */ 121, 120, 120, 120, 119, 116, 444, 302, 568, 453, - /* 810 */ 528, 1192, 1193, 1194, 13, 13, 1192, 1193, 1194, 1297, - /* 820 */ 463, 1267, 409, 1317, 1317, 1552, 1012, 453, 452, 200, - /* 830 */ 299, 71, 71, 1265, 122, 122, 122, 122, 121, 121, - /* 840 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1217, - /* 850 */ 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, - /* 860 */ 124, 409, 227, 1073, 1158, 284, 284, 419, 312, 278, - /* 870 */ 278, 285, 285, 1419, 406, 405, 382, 1158, 565, 568, - /* 880 */ 1158, 1196, 565, 1600, 565, 125, 126, 80, 1217, 1217, - /* 890 */ 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, 124, - /* 900 */ 453, 1482, 13, 13, 1536, 122, 122, 122, 122, 121, + /* 810 */ 528, 1186, 1187, 1186, 13, 13, 1186, 1187, 1186, 1293, + /* 820 */ 463, 1263, 409, 1313, 1313, 1546, 1010, 453, 452, 200, + /* 830 */ 299, 71, 71, 1261, 122, 122, 122, 122, 121, 121, + /* 840 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1210, + /* 850 */ 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, + /* 860 */ 124, 409, 227, 1069, 1152, 284, 284, 419, 312, 278, + /* 870 */ 278, 285, 285, 1415, 406, 405, 382, 1152, 565, 568, + /* 880 */ 1152, 1189, 565, 1592, 565, 125, 126, 80, 1210, 1210, + /* 890 */ 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, 124, + /* 900 */ 453, 1476, 13, 13, 1530, 122, 122, 122, 122, 121, /* 910 */ 121, 120, 120, 120, 119, 116, 444, 201, 568, 354, - /* 920 */ 1586, 575, 2, 1245, 840, 841, 842, 1562, 317, 1212, - /* 930 */ 146, 6, 409, 255, 254, 253, 206, 1327, 9, 1196, + /* 920 */ 1578, 574, 2, 1241, 838, 839, 840, 1554, 317, 1205, + /* 930 */ 146, 6, 409, 255, 254, 253, 206, 1323, 9, 1189, /* 940 */ 262, 71, 71, 424, 122, 122, 122, 122, 121, 121, - /* 950 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1217, - /* 960 */ 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, - /* 970 */ 124, 568, 284, 284, 568, 1213, 409, 574, 313, 1245, - /* 980 */ 349, 1296, 352, 419, 317, 565, 146, 491, 525, 1643, - /* 990 */ 395, 371, 491, 1327, 70, 70, 1295, 71, 71, 240, - /* 1000 */ 1325, 104, 80, 1217, 1217, 1050, 1053, 1040, 1040, 123, + /* 950 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1210, + /* 960 */ 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, + /* 970 */ 124, 568, 284, 284, 568, 1206, 409, 573, 313, 1241, + /* 980 */ 349, 1292, 352, 419, 317, 565, 146, 491, 525, 1635, + /* 990 */ 395, 371, 491, 1323, 70, 70, 1291, 71, 71, 240, + /* 1000 */ 1321, 104, 80, 1210, 1210, 1047, 1050, 1037, 1037, 123, /* 1010 */ 123, 124, 124, 124, 124, 122, 122, 122, 122, 121, - /* 1020 */ 121, 120, 120, 120, 119, 116, 444, 1114, 284, 284, - /* 1030 */ 428, 448, 1525, 1213, 439, 284, 284, 1489, 1352, 311, - /* 1040 */ 474, 565, 1115, 971, 491, 491, 217, 1263, 565, 1538, - /* 1050 */ 568, 972, 207, 568, 1027, 240, 383, 1116, 519, 122, + /* 1020 */ 121, 120, 120, 120, 119, 116, 444, 1110, 284, 284, + /* 1030 */ 428, 448, 1519, 1206, 439, 284, 284, 1483, 1348, 311, + /* 1040 */ 474, 565, 1111, 969, 491, 491, 217, 1259, 565, 1532, + /* 1050 */ 568, 970, 207, 568, 1024, 240, 383, 1112, 519, 122, /* 1060 */ 122, 122, 122, 121, 121, 120, 120, 120, 119, 116, - /* 1070 */ 444, 1018, 107, 71, 71, 1017, 13, 13, 912, 568, - /* 1080 */ 1495, 568, 284, 284, 97, 526, 491, 448, 913, 1326, - /* 1090 */ 1322, 545, 409, 284, 284, 565, 151, 209, 1495, 1497, - /* 1100 */ 262, 450, 55, 55, 56, 56, 565, 1017, 1017, 1019, - /* 1110 */ 443, 332, 409, 527, 12, 295, 125, 126, 80, 1217, - /* 1120 */ 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, - /* 1130 */ 124, 347, 409, 864, 1534, 1213, 125, 126, 80, 1217, - /* 1140 */ 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, - /* 1150 */ 124, 1137, 1641, 474, 1641, 371, 125, 114, 80, 1217, - /* 1160 */ 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, - /* 1170 */ 124, 1495, 329, 474, 331, 122, 122, 122, 122, 121, - /* 1180 */ 121, 120, 120, 120, 119, 116, 444, 203, 1419, 568, - /* 1190 */ 1294, 864, 464, 1213, 436, 122, 122, 122, 122, 121, - /* 1200 */ 121, 120, 120, 120, 119, 116, 444, 553, 1137, 1642, - /* 1210 */ 539, 1642, 15, 15, 892, 122, 122, 122, 122, 121, + /* 1070 */ 444, 1015, 107, 71, 71, 1014, 13, 13, 910, 568, + /* 1080 */ 1489, 568, 284, 284, 97, 526, 491, 448, 911, 1322, + /* 1090 */ 1318, 545, 409, 284, 284, 565, 151, 209, 1489, 1491, + /* 1100 */ 262, 450, 55, 55, 56, 56, 565, 1014, 1014, 1016, + /* 1110 */ 443, 332, 409, 527, 12, 295, 125, 126, 80, 1210, + /* 1120 */ 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, + /* 1130 */ 124, 347, 409, 862, 1528, 1206, 125, 126, 80, 1210, + /* 1140 */ 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, + /* 1150 */ 124, 1133, 1633, 474, 1633, 371, 125, 114, 80, 1210, + /* 1160 */ 1210, 1047, 1050, 1037, 1037, 123, 123, 124, 124, 124, + /* 1170 */ 124, 1489, 329, 474, 331, 122, 122, 122, 122, 121, + /* 1180 */ 121, 120, 120, 120, 119, 116, 444, 203, 1415, 568, + /* 1190 */ 1290, 862, 464, 1206, 436, 122, 122, 122, 122, 121, + /* 1200 */ 121, 120, 120, 120, 119, 116, 444, 553, 1133, 1634, + /* 1210 */ 539, 1634, 15, 15, 890, 122, 122, 122, 122, 121, /* 1220 */ 121, 120, 120, 120, 119, 116, 444, 568, 298, 538, - /* 1230 */ 1135, 1419, 1559, 1560, 1331, 409, 6, 6, 1169, 1268, - /* 1240 */ 415, 320, 284, 284, 1419, 508, 565, 525, 300, 457, - /* 1250 */ 43, 43, 568, 893, 12, 565, 330, 478, 425, 407, - /* 1260 */ 126, 80, 1217, 1217, 1050, 1053, 1040, 1040, 123, 123, - /* 1270 */ 124, 124, 124, 124, 568, 57, 57, 288, 1192, 1419, - /* 1280 */ 496, 458, 392, 392, 391, 273, 389, 1135, 1558, 849, - /* 1290 */ 1169, 407, 6, 568, 321, 1158, 470, 44, 44, 1557, - /* 1300 */ 1114, 426, 234, 6, 323, 256, 540, 256, 1158, 431, - /* 1310 */ 568, 1158, 322, 17, 487, 1115, 58, 58, 122, 122, + /* 1230 */ 1131, 1415, 1552, 1553, 1327, 409, 6, 6, 1163, 1264, + /* 1240 */ 415, 320, 284, 284, 1415, 508, 565, 525, 300, 457, + /* 1250 */ 43, 43, 568, 891, 12, 565, 330, 478, 425, 407, + /* 1260 */ 126, 80, 1210, 1210, 1047, 1050, 1037, 1037, 123, 123, + /* 1270 */ 124, 124, 124, 124, 568, 57, 57, 288, 1186, 1415, + /* 1280 */ 496, 458, 392, 392, 391, 273, 389, 1131, 1551, 847, + /* 1290 */ 1163, 407, 6, 568, 321, 1152, 470, 44, 44, 1550, + /* 1300 */ 1110, 426, 234, 6, 323, 256, 540, 256, 1152, 431, + /* 1310 */ 568, 1152, 322, 17, 487, 1111, 58, 58, 122, 122, /* 1320 */ 122, 122, 121, 121, 120, 120, 120, 119, 116, 444, - /* 1330 */ 1116, 216, 481, 59, 59, 1192, 1193, 1194, 111, 560, + /* 1330 */ 1112, 216, 481, 59, 59, 1186, 1187, 1186, 111, 560, /* 1340 */ 324, 4, 236, 456, 526, 568, 237, 456, 568, 437, - /* 1350 */ 168, 556, 420, 141, 479, 563, 568, 293, 568, 1095, - /* 1360 */ 568, 293, 568, 1095, 531, 568, 872, 8, 60, 60, + /* 1350 */ 168, 556, 420, 141, 479, 563, 568, 293, 568, 1091, + /* 1360 */ 568, 293, 568, 1091, 531, 568, 870, 8, 60, 60, /* 1370 */ 235, 61, 61, 568, 414, 568, 414, 568, 445, 62, /* 1380 */ 62, 45, 45, 46, 46, 47, 47, 199, 49, 49, /* 1390 */ 557, 568, 359, 568, 100, 486, 50, 50, 63, 63, - /* 1400 */ 64, 64, 561, 415, 535, 410, 568, 1027, 568, 534, - /* 1410 */ 316, 559, 316, 559, 65, 65, 14, 14, 568, 1027, - /* 1420 */ 568, 512, 932, 872, 1018, 109, 109, 931, 1017, 66, - /* 1430 */ 66, 131, 131, 110, 451, 445, 570, 569, 416, 177, - /* 1440 */ 1017, 132, 132, 67, 67, 568, 467, 568, 932, 471, - /* 1450 */ 1364, 283, 226, 931, 315, 1363, 407, 568, 459, 407, - /* 1460 */ 1017, 1017, 1019, 239, 407, 86, 213, 1350, 52, 52, - /* 1470 */ 68, 68, 1017, 1017, 1019, 1020, 27, 1585, 1180, 447, - /* 1480 */ 69, 69, 288, 97, 108, 1541, 106, 392, 392, 391, - /* 1490 */ 273, 389, 568, 879, 849, 883, 568, 111, 560, 466, - /* 1500 */ 4, 568, 152, 30, 38, 568, 1132, 234, 396, 323, + /* 1400 */ 64, 64, 561, 415, 535, 410, 568, 1024, 568, 534, + /* 1410 */ 316, 559, 316, 559, 65, 65, 14, 14, 568, 1024, + /* 1420 */ 568, 512, 930, 870, 1015, 109, 109, 929, 1014, 66, + /* 1430 */ 66, 131, 131, 110, 451, 445, 569, 445, 416, 177, + /* 1440 */ 1014, 132, 132, 67, 67, 568, 467, 568, 930, 471, + /* 1450 */ 1360, 283, 226, 929, 315, 1359, 407, 568, 459, 407, + /* 1460 */ 1014, 1014, 1016, 239, 407, 86, 213, 1346, 52, 52, + /* 1470 */ 68, 68, 1014, 1014, 1016, 1017, 27, 1577, 1174, 447, + /* 1480 */ 69, 69, 288, 97, 108, 1535, 106, 392, 392, 391, + /* 1490 */ 273, 389, 568, 877, 847, 881, 568, 111, 560, 466, + /* 1500 */ 4, 568, 152, 30, 38, 568, 1128, 234, 396, 323, /* 1510 */ 111, 560, 527, 4, 563, 53, 53, 322, 568, 163, /* 1520 */ 163, 568, 337, 468, 164, 164, 333, 563, 76, 76, - /* 1530 */ 568, 289, 1514, 568, 31, 1513, 568, 445, 338, 483, - /* 1540 */ 100, 54, 54, 344, 72, 72, 296, 236, 1080, 557, - /* 1550 */ 445, 879, 1360, 134, 134, 168, 73, 73, 141, 161, - /* 1560 */ 161, 1574, 557, 535, 568, 319, 568, 348, 536, 1009, - /* 1570 */ 473, 261, 261, 891, 890, 235, 535, 568, 1027, 568, + /* 1530 */ 568, 289, 1508, 568, 31, 1507, 568, 445, 338, 483, + /* 1540 */ 100, 54, 54, 344, 72, 72, 296, 236, 1076, 557, + /* 1550 */ 445, 877, 1356, 134, 134, 168, 73, 73, 141, 161, + /* 1560 */ 161, 1566, 557, 535, 568, 319, 568, 348, 536, 1007, + /* 1570 */ 473, 261, 261, 889, 888, 235, 535, 568, 1024, 568, /* 1580 */ 475, 534, 261, 367, 109, 109, 521, 136, 136, 130, - /* 1590 */ 130, 1027, 110, 366, 445, 570, 569, 109, 109, 1017, - /* 1600 */ 162, 162, 156, 156, 568, 110, 1080, 445, 570, 569, - /* 1610 */ 410, 351, 1017, 568, 353, 316, 559, 568, 343, 568, - /* 1620 */ 100, 497, 357, 258, 100, 898, 899, 140, 140, 355, - /* 1630 */ 1310, 1017, 1017, 1019, 1020, 27, 139, 139, 362, 451, - /* 1640 */ 137, 137, 138, 138, 1017, 1017, 1019, 1020, 27, 1180, - /* 1650 */ 447, 568, 372, 288, 111, 560, 1021, 4, 392, 392, - /* 1660 */ 391, 273, 389, 568, 1141, 849, 568, 1076, 568, 258, - /* 1670 */ 492, 563, 568, 211, 75, 75, 555, 962, 234, 261, - /* 1680 */ 323, 111, 560, 929, 4, 113, 77, 77, 322, 74, - /* 1690 */ 74, 42, 42, 1373, 445, 48, 48, 1418, 563, 974, - /* 1700 */ 975, 1092, 1091, 1092, 1091, 862, 557, 150, 930, 1346, - /* 1710 */ 113, 1358, 554, 1424, 1021, 1275, 1266, 1254, 236, 1253, - /* 1720 */ 1255, 445, 1593, 1343, 308, 276, 168, 309, 11, 141, - /* 1730 */ 393, 310, 232, 557, 1405, 1027, 335, 291, 1400, 219, - /* 1740 */ 336, 109, 109, 936, 297, 1410, 235, 341, 477, 110, - /* 1750 */ 502, 445, 570, 569, 1393, 1409, 1017, 400, 1293, 365, - /* 1760 */ 223, 1486, 1027, 1485, 1355, 1356, 1354, 1353, 109, 109, - /* 1770 */ 204, 1596, 1232, 558, 265, 218, 110, 205, 445, 570, - /* 1780 */ 569, 410, 387, 1017, 1533, 179, 316, 559, 1017, 1017, - /* 1790 */ 1019, 1020, 27, 230, 1531, 1229, 79, 560, 85, 4, - /* 1800 */ 418, 215, 548, 81, 84, 188, 1406, 173, 181, 461, - /* 1810 */ 451, 35, 462, 563, 183, 1017, 1017, 1019, 1020, 27, - /* 1820 */ 184, 1491, 185, 186, 495, 242, 98, 398, 1412, 36, - /* 1830 */ 1411, 484, 91, 469, 401, 1414, 445, 192, 1480, 246, - /* 1840 */ 1502, 490, 346, 277, 248, 196, 493, 511, 557, 350, - /* 1850 */ 1256, 249, 250, 403, 1313, 1312, 111, 560, 432, 4, - /* 1860 */ 1311, 1304, 93, 1611, 883, 1610, 224, 404, 434, 520, - /* 1870 */ 263, 435, 1579, 563, 1283, 1282, 364, 1027, 306, 1281, - /* 1880 */ 264, 1609, 1565, 109, 109, 370, 1303, 307, 1564, 438, - /* 1890 */ 128, 110, 1378, 445, 570, 569, 445, 546, 1017, 10, - /* 1900 */ 1466, 105, 381, 1377, 34, 572, 99, 1336, 557, 314, - /* 1910 */ 1186, 530, 272, 274, 379, 210, 1335, 547, 385, 386, - /* 1920 */ 275, 573, 1251, 1246, 411, 412, 1518, 165, 178, 1519, - /* 1930 */ 1017, 1017, 1019, 1020, 27, 1517, 1516, 1027, 78, 147, - /* 1940 */ 166, 220, 221, 109, 109, 836, 304, 167, 446, 212, - /* 1950 */ 318, 110, 231, 445, 570, 569, 144, 1090, 1017, 1088, - /* 1960 */ 326, 180, 169, 1212, 182, 334, 238, 915, 241, 1104, + /* 1590 */ 130, 1024, 110, 366, 445, 569, 445, 109, 109, 1014, + /* 1600 */ 162, 162, 156, 156, 568, 110, 1076, 445, 569, 445, + /* 1610 */ 410, 351, 1014, 568, 353, 316, 559, 568, 343, 568, + /* 1620 */ 100, 497, 357, 258, 100, 896, 897, 140, 140, 355, + /* 1630 */ 1306, 1014, 1014, 1016, 1017, 27, 139, 139, 362, 451, + /* 1640 */ 137, 137, 138, 138, 1014, 1014, 1016, 1017, 27, 1174, + /* 1650 */ 447, 568, 372, 288, 111, 560, 1018, 4, 392, 392, + /* 1660 */ 391, 273, 389, 568, 1137, 847, 568, 1072, 568, 258, + /* 1670 */ 492, 563, 568, 211, 75, 75, 555, 960, 234, 261, + /* 1680 */ 323, 111, 560, 927, 4, 113, 77, 77, 322, 74, + /* 1690 */ 74, 42, 42, 1369, 445, 48, 48, 1414, 563, 972, + /* 1700 */ 973, 1088, 1087, 1088, 1087, 860, 557, 150, 928, 1342, + /* 1710 */ 113, 1354, 554, 1419, 1018, 1271, 1262, 1250, 236, 1249, + /* 1720 */ 1251, 445, 1585, 1339, 308, 276, 168, 309, 11, 141, + /* 1730 */ 393, 310, 232, 557, 1401, 1024, 335, 291, 1396, 219, + /* 1740 */ 336, 109, 109, 934, 297, 1406, 235, 341, 477, 110, + /* 1750 */ 502, 445, 569, 445, 1389, 1405, 1014, 400, 1289, 365, + /* 1760 */ 223, 1480, 1024, 1479, 1351, 1352, 1350, 1349, 109, 109, + /* 1770 */ 204, 1588, 1226, 558, 265, 218, 110, 205, 445, 569, + /* 1780 */ 445, 410, 387, 1014, 1527, 179, 316, 559, 1014, 1014, + /* 1790 */ 1016, 1017, 27, 230, 1525, 1223, 79, 560, 85, 4, + /* 1800 */ 418, 215, 548, 81, 84, 188, 1402, 173, 181, 461, + /* 1810 */ 451, 35, 462, 563, 183, 1014, 1014, 1016, 1017, 27, + /* 1820 */ 184, 1485, 185, 186, 495, 242, 98, 398, 1408, 36, + /* 1830 */ 1407, 484, 91, 469, 401, 1410, 445, 192, 1474, 246, + /* 1840 */ 1496, 490, 346, 277, 248, 196, 493, 511, 557, 350, + /* 1850 */ 1252, 249, 250, 403, 1309, 1308, 111, 560, 432, 4, + /* 1860 */ 1307, 1300, 93, 1602, 881, 1601, 224, 404, 434, 520, + /* 1870 */ 263, 435, 1571, 563, 1279, 1278, 364, 1024, 306, 1277, + /* 1880 */ 264, 1600, 1557, 109, 109, 370, 1299, 307, 1556, 438, + /* 1890 */ 128, 110, 1374, 445, 569, 445, 445, 546, 1014, 10, + /* 1900 */ 1461, 105, 381, 1373, 34, 571, 99, 1332, 557, 314, + /* 1910 */ 1180, 530, 272, 274, 379, 210, 1331, 547, 385, 386, + /* 1920 */ 275, 572, 1247, 1242, 411, 412, 1512, 165, 178, 1513, + /* 1930 */ 1014, 1014, 1016, 1017, 27, 1511, 1510, 1024, 78, 147, + /* 1940 */ 166, 220, 221, 109, 109, 834, 304, 167, 446, 212, + /* 1950 */ 318, 110, 231, 445, 569, 445, 144, 1086, 1014, 1084, + /* 1960 */ 326, 180, 169, 1205, 182, 334, 238, 913, 241, 1100, /* 1970 */ 187, 170, 171, 421, 87, 88, 423, 189, 89, 90, - /* 1980 */ 172, 1107, 243, 1103, 244, 158, 18, 245, 345, 247, - /* 1990 */ 1017, 1017, 1019, 1020, 27, 261, 1096, 193, 1226, 489, - /* 2000 */ 194, 37, 366, 851, 494, 251, 195, 506, 92, 19, - /* 2010 */ 498, 358, 20, 503, 881, 361, 94, 894, 305, 159, - /* 2020 */ 513, 39, 95, 1174, 160, 1056, 966, 1143, 96, 174, - /* 2030 */ 1142, 225, 280, 282, 198, 960, 113, 1164, 1160, 260, - /* 2040 */ 21, 22, 23, 1162, 1168, 1167, 1148, 24, 33, 25, - /* 2050 */ 202, 542, 26, 100, 1071, 102, 1057, 103, 7, 1055, - /* 2060 */ 1059, 1113, 1060, 1112, 266, 267, 28, 40, 390, 1022, - /* 2070 */ 863, 112, 29, 564, 1182, 1181, 268, 176, 143, 925, - /* 2080 */ 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, - /* 2090 */ 1242, 1242, 1242, 1242, 269, 1602, 1242, 1601, + /* 1980 */ 172, 1103, 243, 1099, 244, 158, 18, 245, 345, 247, + /* 1990 */ 1014, 1014, 1016, 1017, 27, 261, 1092, 193, 1220, 489, + /* 2000 */ 194, 37, 366, 849, 494, 251, 195, 506, 92, 19, + /* 2010 */ 498, 358, 20, 503, 879, 361, 94, 892, 305, 159, + /* 2020 */ 513, 39, 95, 1168, 160, 1053, 964, 1139, 96, 174, + /* 2030 */ 1138, 225, 280, 282, 198, 958, 113, 1158, 1154, 260, + /* 2040 */ 21, 22, 23, 1156, 1162, 1161, 1143, 24, 33, 25, + /* 2050 */ 202, 542, 26, 100, 1067, 102, 1054, 103, 7, 1052, + /* 2060 */ 1056, 1109, 1057, 1108, 266, 267, 28, 40, 390, 1019, + /* 2070 */ 861, 112, 29, 564, 1176, 1175, 268, 176, 143, 923, + /* 2080 */ 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, + /* 2090 */ 1238, 1238, 1238, 1238, 269, 1593, }; static const YYCODETYPE yy_lookahead[] = { /* 0 */ 193, 193, 193, 274, 275, 276, 193, 274, 275, 276, @@ -166326,7 +170234,7 @@ static const YYCODETYPE yy_lookahead[] = { /* 2060 */ 23, 23, 11, 23, 25, 22, 22, 22, 15, 23, /* 2070 */ 23, 22, 22, 25, 1, 1, 141, 25, 23, 135, /* 2080 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2090 */ 319, 319, 319, 319, 141, 141, 319, 141, 319, 319, + /* 2090 */ 319, 319, 319, 319, 141, 141, 319, 319, 319, 319, /* 2100 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, /* 2110 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, /* 2120 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, @@ -166345,9 +170253,9 @@ static const YYCODETYPE yy_lookahead[] = { /* 2250 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, /* 2260 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, /* 2270 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - /* 2280 */ 319, 319, 319, + /* 2280 */ 319, }; -#define YY_SHIFT_COUNT (575) +#define YY_SHIFT_COUNT (574) #define YY_SHIFT_MIN (0) #define YY_SHIFT_MAX (2074) static const unsigned short int yy_shift_ofst[] = { @@ -166367,12 +170275,12 @@ static const unsigned short int yy_shift_ofst[] = { /* 130 */ 137, 181, 181, 181, 181, 181, 181, 181, 94, 430, /* 140 */ 66, 65, 112, 366, 533, 533, 740, 1261, 533, 533, /* 150 */ 79, 79, 533, 412, 412, 412, 77, 412, 123, 113, - /* 160 */ 113, 22, 22, 2098, 2098, 328, 328, 328, 239, 468, + /* 160 */ 113, 22, 22, 2096, 2096, 328, 328, 328, 239, 468, /* 170 */ 468, 468, 468, 1015, 1015, 409, 366, 1129, 1186, 533, /* 180 */ 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, /* 190 */ 533, 533, 533, 533, 533, 533, 533, 533, 533, 969, /* 200 */ 621, 621, 533, 642, 788, 788, 1228, 1228, 822, 822, - /* 210 */ 67, 1274, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 1307, + /* 210 */ 67, 1274, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 1307, /* 220 */ 954, 954, 585, 472, 640, 387, 695, 538, 541, 700, /* 230 */ 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, /* 240 */ 222, 533, 533, 533, 533, 533, 533, 533, 533, 533, @@ -166390,8 +170298,8 @@ static const unsigned short int yy_shift_ofst[] = { /* 360 */ 1840, 1840, 1823, 1732, 1738, 1732, 1794, 1732, 1732, 1701, /* 370 */ 1844, 1758, 1758, 1823, 1633, 1789, 1789, 1807, 1807, 1742, /* 380 */ 1752, 1877, 1633, 1743, 1742, 1759, 1765, 1677, 1879, 1897, - /* 390 */ 1897, 1914, 1914, 1914, 2098, 2098, 2098, 2098, 2098, 2098, - /* 400 */ 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 207, + /* 390 */ 1897, 1914, 1914, 1914, 2096, 2096, 2096, 2096, 2096, 2096, + /* 400 */ 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 2096, 207, /* 410 */ 1095, 331, 620, 903, 806, 1074, 1483, 1432, 1481, 1322, /* 420 */ 1370, 1394, 1515, 1291, 1546, 1547, 1557, 1595, 1598, 1599, /* 430 */ 1434, 1453, 1618, 1462, 1567, 1489, 1644, 1654, 1616, 1660, @@ -166408,7 +170316,7 @@ static const unsigned short int yy_shift_ofst[] = { /* 540 */ 2015, 2023, 2026, 2027, 2025, 2028, 2018, 1913, 1915, 2031, /* 550 */ 2011, 2033, 2036, 2037, 2038, 2039, 2040, 2043, 2051, 2044, /* 560 */ 2045, 2046, 2047, 2049, 2050, 2048, 1944, 1935, 1953, 1954, - /* 570 */ 1956, 2052, 2055, 2053, 2073, 2074, + /* 570 */ 2052, 2055, 2053, 2073, 2074, }; #define YY_REDUCE_COUNT (408) #define YY_REDUCE_MIN (-271) @@ -166457,64 +170365,64 @@ static const short yy_reduce_ofst[] = { /* 400 */ 1722, 1723, 1733, 1717, 1724, 1727, 1728, 1725, 1740, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 1647, 1647, 1647, 1475, 1240, 1351, 1240, 1240, 1240, 1475, - /* 10 */ 1475, 1475, 1240, 1381, 1381, 1528, 1273, 1240, 1240, 1240, - /* 20 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1474, 1240, 1240, - /* 30 */ 1240, 1240, 1563, 1563, 1240, 1240, 1240, 1240, 1240, 1240, - /* 40 */ 1240, 1240, 1390, 1240, 1397, 1240, 1240, 1240, 1240, 1240, - /* 50 */ 1476, 1477, 1240, 1240, 1240, 1527, 1529, 1492, 1404, 1403, - /* 60 */ 1402, 1401, 1510, 1369, 1395, 1388, 1392, 1470, 1471, 1469, - /* 70 */ 1473, 1477, 1476, 1240, 1391, 1438, 1454, 1437, 1240, 1240, - /* 80 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - /* 90 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - /* 100 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - /* 110 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - /* 120 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - /* 130 */ 1446, 1453, 1452, 1451, 1460, 1450, 1447, 1440, 1439, 1441, - /* 140 */ 1442, 1240, 1240, 1264, 1240, 1240, 1261, 1315, 1240, 1240, - /* 150 */ 1240, 1240, 1240, 1547, 1546, 1240, 1443, 1240, 1273, 1432, - /* 160 */ 1431, 1457, 1444, 1456, 1455, 1535, 1599, 1598, 1493, 1240, - /* 170 */ 1240, 1240, 1240, 1240, 1240, 1563, 1240, 1240, 1240, 1240, - /* 180 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - /* 190 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1371, - /* 200 */ 1563, 1563, 1240, 1273, 1563, 1563, 1372, 1372, 1269, 1269, - /* 210 */ 1375, 1240, 1542, 1342, 1342, 1342, 1342, 1351, 1342, 1240, - /* 220 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - /* 230 */ 1240, 1240, 1240, 1240, 1532, 1530, 1240, 1240, 1240, 1240, - /* 240 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - /* 250 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - /* 260 */ 1240, 1240, 1240, 1347, 1240, 1240, 1240, 1240, 1240, 1240, - /* 270 */ 1240, 1240, 1240, 1240, 1240, 1592, 1240, 1505, 1329, 1347, - /* 280 */ 1347, 1347, 1347, 1349, 1330, 1328, 1341, 1274, 1247, 1639, - /* 290 */ 1407, 1396, 1348, 1396, 1636, 1394, 1407, 1407, 1394, 1407, - /* 300 */ 1348, 1636, 1290, 1615, 1285, 1381, 1381, 1381, 1371, 1371, - /* 310 */ 1371, 1371, 1375, 1375, 1472, 1348, 1341, 1240, 1639, 1639, - /* 320 */ 1357, 1357, 1638, 1638, 1357, 1493, 1623, 1416, 1318, 1324, - /* 330 */ 1324, 1324, 1324, 1357, 1258, 1394, 1623, 1623, 1394, 1416, - /* 340 */ 1318, 1394, 1318, 1394, 1357, 1258, 1509, 1633, 1357, 1258, - /* 350 */ 1483, 1357, 1258, 1357, 1258, 1483, 1316, 1316, 1316, 1305, - /* 360 */ 1240, 1240, 1483, 1316, 1290, 1316, 1305, 1316, 1316, 1581, - /* 370 */ 1240, 1487, 1487, 1483, 1357, 1573, 1573, 1384, 1384, 1389, - /* 380 */ 1375, 1478, 1357, 1240, 1389, 1387, 1385, 1394, 1308, 1595, - /* 390 */ 1595, 1591, 1591, 1591, 1644, 1644, 1542, 1608, 1273, 1273, - /* 400 */ 1273, 1273, 1608, 1292, 1292, 1274, 1274, 1273, 1608, 1240, - /* 410 */ 1240, 1240, 1240, 1240, 1240, 1603, 1240, 1537, 1494, 1361, - /* 420 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - /* 430 */ 1240, 1240, 1240, 1240, 1548, 1240, 1240, 1240, 1240, 1240, - /* 440 */ 1240, 1240, 1240, 1240, 1240, 1421, 1240, 1243, 1539, 1240, - /* 450 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1398, 1399, 1362, - /* 460 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1413, 1240, 1240, - /* 470 */ 1240, 1408, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - /* 480 */ 1635, 1240, 1240, 1240, 1240, 1240, 1240, 1508, 1507, 1240, - /* 490 */ 1240, 1359, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - /* 500 */ 1240, 1240, 1240, 1240, 1240, 1288, 1240, 1240, 1240, 1240, - /* 510 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - /* 520 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1386, - /* 530 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - /* 540 */ 1240, 1240, 1240, 1240, 1578, 1376, 1240, 1240, 1240, 1240, - /* 550 */ 1626, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, - /* 560 */ 1240, 1240, 1240, 1240, 1240, 1619, 1332, 1423, 1240, 1422, - /* 570 */ 1426, 1262, 1240, 1252, 1240, 1240, + /* 0 */ 1639, 1639, 1639, 1469, 1236, 1347, 1236, 1236, 1236, 1469, + /* 10 */ 1469, 1469, 1236, 1377, 1377, 1522, 1269, 1236, 1236, 1236, + /* 20 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1468, 1236, 1236, + /* 30 */ 1236, 1236, 1555, 1555, 1236, 1236, 1236, 1236, 1236, 1236, + /* 40 */ 1236, 1236, 1386, 1236, 1393, 1236, 1236, 1236, 1236, 1236, + /* 50 */ 1470, 1471, 1236, 1236, 1236, 1521, 1523, 1486, 1400, 1399, + /* 60 */ 1398, 1397, 1504, 1365, 1391, 1384, 1388, 1465, 1466, 1464, + /* 70 */ 1617, 1471, 1470, 1236, 1387, 1433, 1449, 1432, 1236, 1236, + /* 80 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + /* 90 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + /* 100 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + /* 110 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + /* 120 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + /* 130 */ 1441, 1448, 1447, 1446, 1455, 1445, 1442, 1435, 1434, 1436, + /* 140 */ 1437, 1236, 1236, 1260, 1236, 1236, 1257, 1311, 1236, 1236, + /* 150 */ 1236, 1236, 1236, 1541, 1540, 1236, 1438, 1236, 1269, 1427, + /* 160 */ 1426, 1452, 1439, 1451, 1450, 1529, 1591, 1590, 1487, 1236, + /* 170 */ 1236, 1236, 1236, 1236, 1236, 1555, 1236, 1236, 1236, 1236, + /* 180 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + /* 190 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1367, + /* 200 */ 1555, 1555, 1236, 1269, 1555, 1555, 1368, 1368, 1265, 1265, + /* 210 */ 1371, 1236, 1536, 1338, 1338, 1338, 1338, 1347, 1338, 1236, + /* 220 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + /* 230 */ 1236, 1236, 1236, 1236, 1526, 1524, 1236, 1236, 1236, 1236, + /* 240 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + /* 250 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + /* 260 */ 1236, 1236, 1236, 1343, 1236, 1236, 1236, 1236, 1236, 1236, + /* 270 */ 1236, 1236, 1236, 1236, 1236, 1584, 1236, 1499, 1325, 1343, + /* 280 */ 1343, 1343, 1343, 1345, 1326, 1324, 1337, 1270, 1243, 1631, + /* 290 */ 1403, 1392, 1344, 1392, 1628, 1390, 1403, 1403, 1390, 1403, + /* 300 */ 1344, 1628, 1286, 1606, 1281, 1377, 1377, 1377, 1367, 1367, + /* 310 */ 1367, 1367, 1371, 1371, 1467, 1344, 1337, 1236, 1631, 1631, + /* 320 */ 1353, 1353, 1630, 1630, 1353, 1487, 1614, 1412, 1314, 1320, + /* 330 */ 1320, 1320, 1320, 1353, 1254, 1390, 1614, 1614, 1390, 1412, + /* 340 */ 1314, 1390, 1314, 1390, 1353, 1254, 1503, 1625, 1353, 1254, + /* 350 */ 1477, 1353, 1254, 1353, 1254, 1477, 1312, 1312, 1312, 1301, + /* 360 */ 1236, 1236, 1477, 1312, 1286, 1312, 1301, 1312, 1312, 1573, + /* 370 */ 1236, 1481, 1481, 1477, 1353, 1565, 1565, 1380, 1380, 1385, + /* 380 */ 1371, 1472, 1353, 1236, 1385, 1383, 1381, 1390, 1304, 1587, + /* 390 */ 1587, 1583, 1583, 1583, 1636, 1636, 1536, 1599, 1269, 1269, + /* 400 */ 1269, 1269, 1599, 1288, 1288, 1270, 1270, 1269, 1599, 1236, + /* 410 */ 1236, 1236, 1236, 1236, 1236, 1594, 1236, 1531, 1488, 1357, + /* 420 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + /* 430 */ 1236, 1236, 1236, 1236, 1542, 1236, 1236, 1236, 1236, 1236, + /* 440 */ 1236, 1236, 1236, 1236, 1236, 1417, 1236, 1239, 1533, 1236, + /* 450 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1394, 1395, 1358, + /* 460 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1409, 1236, 1236, + /* 470 */ 1236, 1404, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + /* 480 */ 1627, 1236, 1236, 1236, 1236, 1236, 1236, 1502, 1501, 1236, + /* 490 */ 1236, 1355, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + /* 500 */ 1236, 1236, 1236, 1236, 1236, 1284, 1236, 1236, 1236, 1236, + /* 510 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + /* 520 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1382, + /* 530 */ 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + /* 540 */ 1236, 1236, 1236, 1236, 1570, 1372, 1236, 1236, 1236, 1236, + /* 550 */ 1618, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, 1236, + /* 560 */ 1236, 1236, 1236, 1236, 1236, 1610, 1328, 1418, 1236, 1421, + /* 570 */ 1258, 1236, 1248, 1236, 1236, }; /********** End of lemon-generated parsing tables *****************************/ @@ -167311,233 +171219,231 @@ static const char *const yyRuleName[] = { /* 175 */ "idlist ::= idlist COMMA nm", /* 176 */ "idlist ::= nm", /* 177 */ "expr ::= LP expr RP", - /* 178 */ "expr ::= ID|INDEXED", - /* 179 */ "expr ::= JOIN_KW", - /* 180 */ "expr ::= nm DOT nm", - /* 181 */ "expr ::= nm DOT nm DOT nm", - /* 182 */ "term ::= NULL|FLOAT|BLOB", - /* 183 */ "term ::= STRING", - /* 184 */ "term ::= INTEGER", - /* 185 */ "expr ::= VARIABLE", - /* 186 */ "expr ::= expr COLLATE ID|STRING", - /* 187 */ "expr ::= CAST LP expr AS typetoken RP", - /* 188 */ "expr ::= ID|INDEXED LP distinct exprlist RP", - /* 189 */ "expr ::= ID|INDEXED LP STAR RP", - /* 190 */ "expr ::= ID|INDEXED LP distinct exprlist RP filter_over", - /* 191 */ "expr ::= ID|INDEXED LP STAR RP filter_over", - /* 192 */ "term ::= CTIME_KW", - /* 193 */ "expr ::= LP nexprlist COMMA expr RP", - /* 194 */ "expr ::= expr AND expr", - /* 195 */ "expr ::= expr OR expr", - /* 196 */ "expr ::= expr LT|GT|GE|LE expr", - /* 197 */ "expr ::= expr EQ|NE expr", - /* 198 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", - /* 199 */ "expr ::= expr PLUS|MINUS expr", - /* 200 */ "expr ::= expr STAR|SLASH|REM expr", - /* 201 */ "expr ::= expr CONCAT expr", - /* 202 */ "likeop ::= NOT LIKE_KW|MATCH", - /* 203 */ "expr ::= expr likeop expr", - /* 204 */ "expr ::= expr likeop expr ESCAPE expr", - /* 205 */ "expr ::= expr ISNULL|NOTNULL", - /* 206 */ "expr ::= expr NOT NULL", - /* 207 */ "expr ::= expr IS expr", - /* 208 */ "expr ::= expr IS NOT expr", - /* 209 */ "expr ::= expr IS NOT DISTINCT FROM expr", - /* 210 */ "expr ::= expr IS DISTINCT FROM expr", - /* 211 */ "expr ::= NOT expr", - /* 212 */ "expr ::= BITNOT expr", - /* 213 */ "expr ::= PLUS|MINUS expr", - /* 214 */ "expr ::= expr PTR expr", - /* 215 */ "between_op ::= BETWEEN", - /* 216 */ "between_op ::= NOT BETWEEN", - /* 217 */ "expr ::= expr between_op expr AND expr", - /* 218 */ "in_op ::= IN", - /* 219 */ "in_op ::= NOT IN", - /* 220 */ "expr ::= expr in_op LP exprlist RP", - /* 221 */ "expr ::= LP select RP", - /* 222 */ "expr ::= expr in_op LP select RP", - /* 223 */ "expr ::= expr in_op nm dbnm paren_exprlist", - /* 224 */ "expr ::= EXISTS LP select RP", - /* 225 */ "expr ::= CASE case_operand case_exprlist case_else END", - /* 226 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", - /* 227 */ "case_exprlist ::= WHEN expr THEN expr", - /* 228 */ "case_else ::= ELSE expr", - /* 229 */ "case_else ::=", - /* 230 */ "case_operand ::= expr", - /* 231 */ "case_operand ::=", - /* 232 */ "exprlist ::=", - /* 233 */ "nexprlist ::= nexprlist COMMA expr", - /* 234 */ "nexprlist ::= expr", - /* 235 */ "paren_exprlist ::=", - /* 236 */ "paren_exprlist ::= LP exprlist RP", - /* 237 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt", - /* 238 */ "uniqueflag ::= UNIQUE", - /* 239 */ "uniqueflag ::=", - /* 240 */ "eidlist_opt ::=", - /* 241 */ "eidlist_opt ::= LP eidlist RP", - /* 242 */ "eidlist ::= eidlist COMMA nm collate sortorder", - /* 243 */ "eidlist ::= nm collate sortorder", - /* 244 */ "collate ::=", - /* 245 */ "collate ::= COLLATE ID|STRING", - /* 246 */ "cmd ::= DROP INDEX ifexists fullname", - /* 247 */ "cmd ::= VACUUM vinto", - /* 248 */ "cmd ::= VACUUM nm vinto", - /* 249 */ "vinto ::= INTO expr", - /* 250 */ "vinto ::=", - /* 251 */ "cmd ::= PRAGMA nm dbnm", - /* 252 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", - /* 253 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", - /* 254 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", - /* 255 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", - /* 256 */ "plus_num ::= PLUS INTEGER|FLOAT", - /* 257 */ "minus_num ::= MINUS INTEGER|FLOAT", - /* 258 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", - /* 259 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", - /* 260 */ "trigger_time ::= BEFORE|AFTER", - /* 261 */ "trigger_time ::= INSTEAD OF", - /* 262 */ "trigger_time ::=", - /* 263 */ "trigger_event ::= DELETE|INSERT", - /* 264 */ "trigger_event ::= UPDATE", - /* 265 */ "trigger_event ::= UPDATE OF idlist", - /* 266 */ "when_clause ::=", - /* 267 */ "when_clause ::= WHEN expr", - /* 268 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", - /* 269 */ "trigger_cmd_list ::= trigger_cmd SEMI", - /* 270 */ "trnm ::= nm DOT nm", - /* 271 */ "tridxby ::= INDEXED BY nm", - /* 272 */ "tridxby ::= NOT INDEXED", - /* 273 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt", - /* 274 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt", - /* 275 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt", - /* 276 */ "trigger_cmd ::= scanpt select scanpt", - /* 277 */ "expr ::= RAISE LP IGNORE RP", - /* 278 */ "expr ::= RAISE LP raisetype COMMA nm RP", - /* 279 */ "raisetype ::= ROLLBACK", - /* 280 */ "raisetype ::= ABORT", - /* 281 */ "raisetype ::= FAIL", - /* 282 */ "cmd ::= DROP TRIGGER ifexists fullname", - /* 283 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", - /* 284 */ "cmd ::= DETACH database_kw_opt expr", - /* 285 */ "key_opt ::=", - /* 286 */ "key_opt ::= KEY expr", - /* 287 */ "cmd ::= REINDEX", - /* 288 */ "cmd ::= REINDEX nm dbnm", - /* 289 */ "cmd ::= ANALYZE", - /* 290 */ "cmd ::= ANALYZE nm dbnm", - /* 291 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", - /* 292 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist", - /* 293 */ "cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm", - /* 294 */ "add_column_fullname ::= fullname", - /* 295 */ "cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm", - /* 296 */ "cmd ::= create_vtab", - /* 297 */ "cmd ::= create_vtab LP vtabarglist RP", - /* 298 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm", - /* 299 */ "vtabarg ::=", - /* 300 */ "vtabargtoken ::= ANY", - /* 301 */ "vtabargtoken ::= lp anylist RP", - /* 302 */ "lp ::= LP", - /* 303 */ "with ::= WITH wqlist", - /* 304 */ "with ::= WITH RECURSIVE wqlist", - /* 305 */ "wqas ::= AS", - /* 306 */ "wqas ::= AS MATERIALIZED", - /* 307 */ "wqas ::= AS NOT MATERIALIZED", - /* 308 */ "wqitem ::= nm eidlist_opt wqas LP select RP", - /* 309 */ "wqlist ::= wqitem", - /* 310 */ "wqlist ::= wqlist COMMA wqitem", - /* 311 */ "windowdefn_list ::= windowdefn", - /* 312 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn", - /* 313 */ "windowdefn ::= nm AS LP window RP", - /* 314 */ "window ::= PARTITION BY nexprlist orderby_opt frame_opt", - /* 315 */ "window ::= nm PARTITION BY nexprlist orderby_opt frame_opt", - /* 316 */ "window ::= ORDER BY sortlist frame_opt", - /* 317 */ "window ::= nm ORDER BY sortlist frame_opt", - /* 318 */ "window ::= frame_opt", - /* 319 */ "window ::= nm frame_opt", - /* 320 */ "frame_opt ::=", - /* 321 */ "frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt", - /* 322 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt", - /* 323 */ "range_or_rows ::= RANGE|ROWS|GROUPS", - /* 324 */ "frame_bound_s ::= frame_bound", - /* 325 */ "frame_bound_s ::= UNBOUNDED PRECEDING", - /* 326 */ "frame_bound_e ::= frame_bound", - /* 327 */ "frame_bound_e ::= UNBOUNDED FOLLOWING", - /* 328 */ "frame_bound ::= expr PRECEDING|FOLLOWING", - /* 329 */ "frame_bound ::= CURRENT ROW", - /* 330 */ "frame_exclude_opt ::=", - /* 331 */ "frame_exclude_opt ::= EXCLUDE frame_exclude", - /* 332 */ "frame_exclude ::= NO OTHERS", - /* 333 */ "frame_exclude ::= CURRENT ROW", - /* 334 */ "frame_exclude ::= GROUP|TIES", - /* 335 */ "window_clause ::= WINDOW windowdefn_list", - /* 336 */ "filter_over ::= filter_clause over_clause", - /* 337 */ "filter_over ::= over_clause", - /* 338 */ "filter_over ::= filter_clause", - /* 339 */ "over_clause ::= OVER LP window RP", - /* 340 */ "over_clause ::= OVER nm", - /* 341 */ "filter_clause ::= FILTER LP WHERE expr RP", - /* 342 */ "input ::= cmdlist", - /* 343 */ "cmdlist ::= cmdlist ecmd", - /* 344 */ "cmdlist ::= ecmd", - /* 345 */ "ecmd ::= SEMI", - /* 346 */ "ecmd ::= cmdx SEMI", - /* 347 */ "ecmd ::= explain cmdx SEMI", - /* 348 */ "trans_opt ::=", - /* 349 */ "trans_opt ::= TRANSACTION", - /* 350 */ "trans_opt ::= TRANSACTION nm", - /* 351 */ "savepoint_opt ::= SAVEPOINT", - /* 352 */ "savepoint_opt ::=", - /* 353 */ "cmd ::= create_table create_table_args", - /* 354 */ "table_option_set ::= table_option", - /* 355 */ "columnlist ::= columnlist COMMA columnname carglist", - /* 356 */ "columnlist ::= columnname carglist", - /* 357 */ "nm ::= ID|INDEXED", - /* 358 */ "nm ::= STRING", - /* 359 */ "nm ::= JOIN_KW", - /* 360 */ "typetoken ::= typename", - /* 361 */ "typename ::= ID|STRING", - /* 362 */ "signed ::= plus_num", - /* 363 */ "signed ::= minus_num", - /* 364 */ "carglist ::= carglist ccons", - /* 365 */ "carglist ::=", - /* 366 */ "ccons ::= NULL onconf", - /* 367 */ "ccons ::= GENERATED ALWAYS AS generated", - /* 368 */ "ccons ::= AS generated", - /* 369 */ "conslist_opt ::= COMMA conslist", - /* 370 */ "conslist ::= conslist tconscomma tcons", - /* 371 */ "conslist ::= tcons", - /* 372 */ "tconscomma ::=", - /* 373 */ "defer_subclause_opt ::= defer_subclause", - /* 374 */ "resolvetype ::= raisetype", - /* 375 */ "selectnowith ::= oneselect", - /* 376 */ "oneselect ::= values", - /* 377 */ "sclp ::= selcollist COMMA", - /* 378 */ "as ::= ID|STRING", - /* 379 */ "indexed_opt ::= indexed_by", - /* 380 */ "returning ::=", - /* 381 */ "expr ::= term", - /* 382 */ "likeop ::= LIKE_KW|MATCH", - /* 383 */ "exprlist ::= nexprlist", - /* 384 */ "nmnum ::= plus_num", - /* 385 */ "nmnum ::= nm", - /* 386 */ "nmnum ::= ON", - /* 387 */ "nmnum ::= DELETE", - /* 388 */ "nmnum ::= DEFAULT", - /* 389 */ "plus_num ::= INTEGER|FLOAT", - /* 390 */ "foreach_clause ::=", - /* 391 */ "foreach_clause ::= FOR EACH ROW", - /* 392 */ "trnm ::= nm", - /* 393 */ "tridxby ::=", - /* 394 */ "database_kw_opt ::= DATABASE", - /* 395 */ "database_kw_opt ::=", - /* 396 */ "kwcolumn_opt ::=", - /* 397 */ "kwcolumn_opt ::= COLUMNKW", - /* 398 */ "vtabarglist ::= vtabarg", - /* 399 */ "vtabarglist ::= vtabarglist COMMA vtabarg", - /* 400 */ "vtabarg ::= vtabarg vtabargtoken", - /* 401 */ "anylist ::=", - /* 402 */ "anylist ::= anylist LP anylist RP", - /* 403 */ "anylist ::= anylist ANY", - /* 404 */ "with ::=", + /* 178 */ "expr ::= ID|INDEXED|JOIN_KW", + /* 179 */ "expr ::= nm DOT nm", + /* 180 */ "expr ::= nm DOT nm DOT nm", + /* 181 */ "term ::= NULL|FLOAT|BLOB", + /* 182 */ "term ::= STRING", + /* 183 */ "term ::= INTEGER", + /* 184 */ "expr ::= VARIABLE", + /* 185 */ "expr ::= expr COLLATE ID|STRING", + /* 186 */ "expr ::= CAST LP expr AS typetoken RP", + /* 187 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP", + /* 188 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP", + /* 189 */ "expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over", + /* 190 */ "expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over", + /* 191 */ "term ::= CTIME_KW", + /* 192 */ "expr ::= LP nexprlist COMMA expr RP", + /* 193 */ "expr ::= expr AND expr", + /* 194 */ "expr ::= expr OR expr", + /* 195 */ "expr ::= expr LT|GT|GE|LE expr", + /* 196 */ "expr ::= expr EQ|NE expr", + /* 197 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", + /* 198 */ "expr ::= expr PLUS|MINUS expr", + /* 199 */ "expr ::= expr STAR|SLASH|REM expr", + /* 200 */ "expr ::= expr CONCAT expr", + /* 201 */ "likeop ::= NOT LIKE_KW|MATCH", + /* 202 */ "expr ::= expr likeop expr", + /* 203 */ "expr ::= expr likeop expr ESCAPE expr", + /* 204 */ "expr ::= expr ISNULL|NOTNULL", + /* 205 */ "expr ::= expr NOT NULL", + /* 206 */ "expr ::= expr IS expr", + /* 207 */ "expr ::= expr IS NOT expr", + /* 208 */ "expr ::= expr IS NOT DISTINCT FROM expr", + /* 209 */ "expr ::= expr IS DISTINCT FROM expr", + /* 210 */ "expr ::= NOT expr", + /* 211 */ "expr ::= BITNOT expr", + /* 212 */ "expr ::= PLUS|MINUS expr", + /* 213 */ "expr ::= expr PTR expr", + /* 214 */ "between_op ::= BETWEEN", + /* 215 */ "between_op ::= NOT BETWEEN", + /* 216 */ "expr ::= expr between_op expr AND expr", + /* 217 */ "in_op ::= IN", + /* 218 */ "in_op ::= NOT IN", + /* 219 */ "expr ::= expr in_op LP exprlist RP", + /* 220 */ "expr ::= LP select RP", + /* 221 */ "expr ::= expr in_op LP select RP", + /* 222 */ "expr ::= expr in_op nm dbnm paren_exprlist", + /* 223 */ "expr ::= EXISTS LP select RP", + /* 224 */ "expr ::= CASE case_operand case_exprlist case_else END", + /* 225 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", + /* 226 */ "case_exprlist ::= WHEN expr THEN expr", + /* 227 */ "case_else ::= ELSE expr", + /* 228 */ "case_else ::=", + /* 229 */ "case_operand ::=", + /* 230 */ "exprlist ::=", + /* 231 */ "nexprlist ::= nexprlist COMMA expr", + /* 232 */ "nexprlist ::= expr", + /* 233 */ "paren_exprlist ::=", + /* 234 */ "paren_exprlist ::= LP exprlist RP", + /* 235 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt", + /* 236 */ "uniqueflag ::= UNIQUE", + /* 237 */ "uniqueflag ::=", + /* 238 */ "eidlist_opt ::=", + /* 239 */ "eidlist_opt ::= LP eidlist RP", + /* 240 */ "eidlist ::= eidlist COMMA nm collate sortorder", + /* 241 */ "eidlist ::= nm collate sortorder", + /* 242 */ "collate ::=", + /* 243 */ "collate ::= COLLATE ID|STRING", + /* 244 */ "cmd ::= DROP INDEX ifexists fullname", + /* 245 */ "cmd ::= VACUUM vinto", + /* 246 */ "cmd ::= VACUUM nm vinto", + /* 247 */ "vinto ::= INTO expr", + /* 248 */ "vinto ::=", + /* 249 */ "cmd ::= PRAGMA nm dbnm", + /* 250 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", + /* 251 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", + /* 252 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", + /* 253 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", + /* 254 */ "plus_num ::= PLUS INTEGER|FLOAT", + /* 255 */ "minus_num ::= MINUS INTEGER|FLOAT", + /* 256 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", + /* 257 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", + /* 258 */ "trigger_time ::= BEFORE|AFTER", + /* 259 */ "trigger_time ::= INSTEAD OF", + /* 260 */ "trigger_time ::=", + /* 261 */ "trigger_event ::= DELETE|INSERT", + /* 262 */ "trigger_event ::= UPDATE", + /* 263 */ "trigger_event ::= UPDATE OF idlist", + /* 264 */ "when_clause ::=", + /* 265 */ "when_clause ::= WHEN expr", + /* 266 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", + /* 267 */ "trigger_cmd_list ::= trigger_cmd SEMI", + /* 268 */ "trnm ::= nm DOT nm", + /* 269 */ "tridxby ::= INDEXED BY nm", + /* 270 */ "tridxby ::= NOT INDEXED", + /* 271 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt", + /* 272 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt", + /* 273 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt", + /* 274 */ "trigger_cmd ::= scanpt select scanpt", + /* 275 */ "expr ::= RAISE LP IGNORE RP", + /* 276 */ "expr ::= RAISE LP raisetype COMMA nm RP", + /* 277 */ "raisetype ::= ROLLBACK", + /* 278 */ "raisetype ::= ABORT", + /* 279 */ "raisetype ::= FAIL", + /* 280 */ "cmd ::= DROP TRIGGER ifexists fullname", + /* 281 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", + /* 282 */ "cmd ::= DETACH database_kw_opt expr", + /* 283 */ "key_opt ::=", + /* 284 */ "key_opt ::= KEY expr", + /* 285 */ "cmd ::= REINDEX", + /* 286 */ "cmd ::= REINDEX nm dbnm", + /* 287 */ "cmd ::= ANALYZE", + /* 288 */ "cmd ::= ANALYZE nm dbnm", + /* 289 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", + /* 290 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist", + /* 291 */ "cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm", + /* 292 */ "add_column_fullname ::= fullname", + /* 293 */ "cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm", + /* 294 */ "cmd ::= create_vtab", + /* 295 */ "cmd ::= create_vtab LP vtabarglist RP", + /* 296 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm", + /* 297 */ "vtabarg ::=", + /* 298 */ "vtabargtoken ::= ANY", + /* 299 */ "vtabargtoken ::= lp anylist RP", + /* 300 */ "lp ::= LP", + /* 301 */ "with ::= WITH wqlist", + /* 302 */ "with ::= WITH RECURSIVE wqlist", + /* 303 */ "wqas ::= AS", + /* 304 */ "wqas ::= AS MATERIALIZED", + /* 305 */ "wqas ::= AS NOT MATERIALIZED", + /* 306 */ "wqitem ::= nm eidlist_opt wqas LP select RP", + /* 307 */ "wqlist ::= wqitem", + /* 308 */ "wqlist ::= wqlist COMMA wqitem", + /* 309 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn", + /* 310 */ "windowdefn ::= nm AS LP window RP", + /* 311 */ "window ::= PARTITION BY nexprlist orderby_opt frame_opt", + /* 312 */ "window ::= nm PARTITION BY nexprlist orderby_opt frame_opt", + /* 313 */ "window ::= ORDER BY sortlist frame_opt", + /* 314 */ "window ::= nm ORDER BY sortlist frame_opt", + /* 315 */ "window ::= nm frame_opt", + /* 316 */ "frame_opt ::=", + /* 317 */ "frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt", + /* 318 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt", + /* 319 */ "range_or_rows ::= RANGE|ROWS|GROUPS", + /* 320 */ "frame_bound_s ::= frame_bound", + /* 321 */ "frame_bound_s ::= UNBOUNDED PRECEDING", + /* 322 */ "frame_bound_e ::= frame_bound", + /* 323 */ "frame_bound_e ::= UNBOUNDED FOLLOWING", + /* 324 */ "frame_bound ::= expr PRECEDING|FOLLOWING", + /* 325 */ "frame_bound ::= CURRENT ROW", + /* 326 */ "frame_exclude_opt ::=", + /* 327 */ "frame_exclude_opt ::= EXCLUDE frame_exclude", + /* 328 */ "frame_exclude ::= NO OTHERS", + /* 329 */ "frame_exclude ::= CURRENT ROW", + /* 330 */ "frame_exclude ::= GROUP|TIES", + /* 331 */ "window_clause ::= WINDOW windowdefn_list", + /* 332 */ "filter_over ::= filter_clause over_clause", + /* 333 */ "filter_over ::= over_clause", + /* 334 */ "filter_over ::= filter_clause", + /* 335 */ "over_clause ::= OVER LP window RP", + /* 336 */ "over_clause ::= OVER nm", + /* 337 */ "filter_clause ::= FILTER LP WHERE expr RP", + /* 338 */ "input ::= cmdlist", + /* 339 */ "cmdlist ::= cmdlist ecmd", + /* 340 */ "cmdlist ::= ecmd", + /* 341 */ "ecmd ::= SEMI", + /* 342 */ "ecmd ::= cmdx SEMI", + /* 343 */ "ecmd ::= explain cmdx SEMI", + /* 344 */ "trans_opt ::=", + /* 345 */ "trans_opt ::= TRANSACTION", + /* 346 */ "trans_opt ::= TRANSACTION nm", + /* 347 */ "savepoint_opt ::= SAVEPOINT", + /* 348 */ "savepoint_opt ::=", + /* 349 */ "cmd ::= create_table create_table_args", + /* 350 */ "table_option_set ::= table_option", + /* 351 */ "columnlist ::= columnlist COMMA columnname carglist", + /* 352 */ "columnlist ::= columnname carglist", + /* 353 */ "nm ::= ID|INDEXED|JOIN_KW", + /* 354 */ "nm ::= STRING", + /* 355 */ "typetoken ::= typename", + /* 356 */ "typename ::= ID|STRING", + /* 357 */ "signed ::= plus_num", + /* 358 */ "signed ::= minus_num", + /* 359 */ "carglist ::= carglist ccons", + /* 360 */ "carglist ::=", + /* 361 */ "ccons ::= NULL onconf", + /* 362 */ "ccons ::= GENERATED ALWAYS AS generated", + /* 363 */ "ccons ::= AS generated", + /* 364 */ "conslist_opt ::= COMMA conslist", + /* 365 */ "conslist ::= conslist tconscomma tcons", + /* 366 */ "conslist ::= tcons", + /* 367 */ "tconscomma ::=", + /* 368 */ "defer_subclause_opt ::= defer_subclause", + /* 369 */ "resolvetype ::= raisetype", + /* 370 */ "selectnowith ::= oneselect", + /* 371 */ "oneselect ::= values", + /* 372 */ "sclp ::= selcollist COMMA", + /* 373 */ "as ::= ID|STRING", + /* 374 */ "indexed_opt ::= indexed_by", + /* 375 */ "returning ::=", + /* 376 */ "expr ::= term", + /* 377 */ "likeop ::= LIKE_KW|MATCH", + /* 378 */ "case_operand ::= expr", + /* 379 */ "exprlist ::= nexprlist", + /* 380 */ "nmnum ::= plus_num", + /* 381 */ "nmnum ::= nm", + /* 382 */ "nmnum ::= ON", + /* 383 */ "nmnum ::= DELETE", + /* 384 */ "nmnum ::= DEFAULT", + /* 385 */ "plus_num ::= INTEGER|FLOAT", + /* 386 */ "foreach_clause ::=", + /* 387 */ "foreach_clause ::= FOR EACH ROW", + /* 388 */ "trnm ::= nm", + /* 389 */ "tridxby ::=", + /* 390 */ "database_kw_opt ::= DATABASE", + /* 391 */ "database_kw_opt ::=", + /* 392 */ "kwcolumn_opt ::=", + /* 393 */ "kwcolumn_opt ::= COLUMNKW", + /* 394 */ "vtabarglist ::= vtabarg", + /* 395 */ "vtabarglist ::= vtabarglist COMMA vtabarg", + /* 396 */ "vtabarg ::= vtabarg vtabargtoken", + /* 397 */ "anylist ::=", + /* 398 */ "anylist ::= anylist LP anylist RP", + /* 399 */ "anylist ::= anylist ANY", + /* 400 */ "with ::=", + /* 401 */ "windowdefn_list ::= windowdefn", + /* 402 */ "window ::= frame_opt", }; #endif /* NDEBUG */ @@ -168222,233 +172128,231 @@ static const YYCODETYPE yyRuleInfoLhs[] = { 263, /* (175) idlist ::= idlist COMMA nm */ 263, /* (176) idlist ::= nm */ 217, /* (177) expr ::= LP expr RP */ - 217, /* (178) expr ::= ID|INDEXED */ - 217, /* (179) expr ::= JOIN_KW */ - 217, /* (180) expr ::= nm DOT nm */ - 217, /* (181) expr ::= nm DOT nm DOT nm */ - 216, /* (182) term ::= NULL|FLOAT|BLOB */ - 216, /* (183) term ::= STRING */ - 216, /* (184) term ::= INTEGER */ - 217, /* (185) expr ::= VARIABLE */ - 217, /* (186) expr ::= expr COLLATE ID|STRING */ - 217, /* (187) expr ::= CAST LP expr AS typetoken RP */ - 217, /* (188) expr ::= ID|INDEXED LP distinct exprlist RP */ - 217, /* (189) expr ::= ID|INDEXED LP STAR RP */ - 217, /* (190) expr ::= ID|INDEXED LP distinct exprlist RP filter_over */ - 217, /* (191) expr ::= ID|INDEXED LP STAR RP filter_over */ - 216, /* (192) term ::= CTIME_KW */ - 217, /* (193) expr ::= LP nexprlist COMMA expr RP */ - 217, /* (194) expr ::= expr AND expr */ - 217, /* (195) expr ::= expr OR expr */ - 217, /* (196) expr ::= expr LT|GT|GE|LE expr */ - 217, /* (197) expr ::= expr EQ|NE expr */ - 217, /* (198) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ - 217, /* (199) expr ::= expr PLUS|MINUS expr */ - 217, /* (200) expr ::= expr STAR|SLASH|REM expr */ - 217, /* (201) expr ::= expr CONCAT expr */ - 274, /* (202) likeop ::= NOT LIKE_KW|MATCH */ - 217, /* (203) expr ::= expr likeop expr */ - 217, /* (204) expr ::= expr likeop expr ESCAPE expr */ - 217, /* (205) expr ::= expr ISNULL|NOTNULL */ - 217, /* (206) expr ::= expr NOT NULL */ - 217, /* (207) expr ::= expr IS expr */ - 217, /* (208) expr ::= expr IS NOT expr */ - 217, /* (209) expr ::= expr IS NOT DISTINCT FROM expr */ - 217, /* (210) expr ::= expr IS DISTINCT FROM expr */ - 217, /* (211) expr ::= NOT expr */ - 217, /* (212) expr ::= BITNOT expr */ - 217, /* (213) expr ::= PLUS|MINUS expr */ - 217, /* (214) expr ::= expr PTR expr */ - 275, /* (215) between_op ::= BETWEEN */ - 275, /* (216) between_op ::= NOT BETWEEN */ - 217, /* (217) expr ::= expr between_op expr AND expr */ - 276, /* (218) in_op ::= IN */ - 276, /* (219) in_op ::= NOT IN */ - 217, /* (220) expr ::= expr in_op LP exprlist RP */ - 217, /* (221) expr ::= LP select RP */ - 217, /* (222) expr ::= expr in_op LP select RP */ - 217, /* (223) expr ::= expr in_op nm dbnm paren_exprlist */ - 217, /* (224) expr ::= EXISTS LP select RP */ - 217, /* (225) expr ::= CASE case_operand case_exprlist case_else END */ - 279, /* (226) case_exprlist ::= case_exprlist WHEN expr THEN expr */ - 279, /* (227) case_exprlist ::= WHEN expr THEN expr */ - 280, /* (228) case_else ::= ELSE expr */ - 280, /* (229) case_else ::= */ - 278, /* (230) case_operand ::= expr */ - 278, /* (231) case_operand ::= */ - 261, /* (232) exprlist ::= */ - 253, /* (233) nexprlist ::= nexprlist COMMA expr */ - 253, /* (234) nexprlist ::= expr */ - 277, /* (235) paren_exprlist ::= */ - 277, /* (236) paren_exprlist ::= LP exprlist RP */ - 190, /* (237) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ - 281, /* (238) uniqueflag ::= UNIQUE */ - 281, /* (239) uniqueflag ::= */ - 221, /* (240) eidlist_opt ::= */ - 221, /* (241) eidlist_opt ::= LP eidlist RP */ - 232, /* (242) eidlist ::= eidlist COMMA nm collate sortorder */ - 232, /* (243) eidlist ::= nm collate sortorder */ - 282, /* (244) collate ::= */ - 282, /* (245) collate ::= COLLATE ID|STRING */ - 190, /* (246) cmd ::= DROP INDEX ifexists fullname */ - 190, /* (247) cmd ::= VACUUM vinto */ - 190, /* (248) cmd ::= VACUUM nm vinto */ - 283, /* (249) vinto ::= INTO expr */ - 283, /* (250) vinto ::= */ - 190, /* (251) cmd ::= PRAGMA nm dbnm */ - 190, /* (252) cmd ::= PRAGMA nm dbnm EQ nmnum */ - 190, /* (253) cmd ::= PRAGMA nm dbnm LP nmnum RP */ - 190, /* (254) cmd ::= PRAGMA nm dbnm EQ minus_num */ - 190, /* (255) cmd ::= PRAGMA nm dbnm LP minus_num RP */ - 211, /* (256) plus_num ::= PLUS INTEGER|FLOAT */ - 212, /* (257) minus_num ::= MINUS INTEGER|FLOAT */ - 190, /* (258) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ - 285, /* (259) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ - 287, /* (260) trigger_time ::= BEFORE|AFTER */ - 287, /* (261) trigger_time ::= INSTEAD OF */ - 287, /* (262) trigger_time ::= */ - 288, /* (263) trigger_event ::= DELETE|INSERT */ - 288, /* (264) trigger_event ::= UPDATE */ - 288, /* (265) trigger_event ::= UPDATE OF idlist */ - 290, /* (266) when_clause ::= */ - 290, /* (267) when_clause ::= WHEN expr */ - 286, /* (268) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ - 286, /* (269) trigger_cmd_list ::= trigger_cmd SEMI */ - 292, /* (270) trnm ::= nm DOT nm */ - 293, /* (271) tridxby ::= INDEXED BY nm */ - 293, /* (272) tridxby ::= NOT INDEXED */ - 291, /* (273) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ - 291, /* (274) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ - 291, /* (275) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ - 291, /* (276) trigger_cmd ::= scanpt select scanpt */ - 217, /* (277) expr ::= RAISE LP IGNORE RP */ - 217, /* (278) expr ::= RAISE LP raisetype COMMA nm RP */ - 236, /* (279) raisetype ::= ROLLBACK */ - 236, /* (280) raisetype ::= ABORT */ - 236, /* (281) raisetype ::= FAIL */ - 190, /* (282) cmd ::= DROP TRIGGER ifexists fullname */ - 190, /* (283) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ - 190, /* (284) cmd ::= DETACH database_kw_opt expr */ - 295, /* (285) key_opt ::= */ - 295, /* (286) key_opt ::= KEY expr */ - 190, /* (287) cmd ::= REINDEX */ - 190, /* (288) cmd ::= REINDEX nm dbnm */ - 190, /* (289) cmd ::= ANALYZE */ - 190, /* (290) cmd ::= ANALYZE nm dbnm */ - 190, /* (291) cmd ::= ALTER TABLE fullname RENAME TO nm */ - 190, /* (292) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ - 190, /* (293) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ - 296, /* (294) add_column_fullname ::= fullname */ - 190, /* (295) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ - 190, /* (296) cmd ::= create_vtab */ - 190, /* (297) cmd ::= create_vtab LP vtabarglist RP */ - 298, /* (298) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ - 300, /* (299) vtabarg ::= */ - 301, /* (300) vtabargtoken ::= ANY */ - 301, /* (301) vtabargtoken ::= lp anylist RP */ - 302, /* (302) lp ::= LP */ - 266, /* (303) with ::= WITH wqlist */ - 266, /* (304) with ::= WITH RECURSIVE wqlist */ - 305, /* (305) wqas ::= AS */ - 305, /* (306) wqas ::= AS MATERIALIZED */ - 305, /* (307) wqas ::= AS NOT MATERIALIZED */ - 304, /* (308) wqitem ::= nm eidlist_opt wqas LP select RP */ - 241, /* (309) wqlist ::= wqitem */ - 241, /* (310) wqlist ::= wqlist COMMA wqitem */ - 306, /* (311) windowdefn_list ::= windowdefn */ - 306, /* (312) windowdefn_list ::= windowdefn_list COMMA windowdefn */ - 307, /* (313) windowdefn ::= nm AS LP window RP */ - 308, /* (314) window ::= PARTITION BY nexprlist orderby_opt frame_opt */ - 308, /* (315) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ - 308, /* (316) window ::= ORDER BY sortlist frame_opt */ - 308, /* (317) window ::= nm ORDER BY sortlist frame_opt */ - 308, /* (318) window ::= frame_opt */ - 308, /* (319) window ::= nm frame_opt */ - 309, /* (320) frame_opt ::= */ - 309, /* (321) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ - 309, /* (322) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ - 313, /* (323) range_or_rows ::= RANGE|ROWS|GROUPS */ - 315, /* (324) frame_bound_s ::= frame_bound */ - 315, /* (325) frame_bound_s ::= UNBOUNDED PRECEDING */ - 316, /* (326) frame_bound_e ::= frame_bound */ - 316, /* (327) frame_bound_e ::= UNBOUNDED FOLLOWING */ - 314, /* (328) frame_bound ::= expr PRECEDING|FOLLOWING */ - 314, /* (329) frame_bound ::= CURRENT ROW */ - 317, /* (330) frame_exclude_opt ::= */ - 317, /* (331) frame_exclude_opt ::= EXCLUDE frame_exclude */ - 318, /* (332) frame_exclude ::= NO OTHERS */ - 318, /* (333) frame_exclude ::= CURRENT ROW */ - 318, /* (334) frame_exclude ::= GROUP|TIES */ - 251, /* (335) window_clause ::= WINDOW windowdefn_list */ - 273, /* (336) filter_over ::= filter_clause over_clause */ - 273, /* (337) filter_over ::= over_clause */ - 273, /* (338) filter_over ::= filter_clause */ - 312, /* (339) over_clause ::= OVER LP window RP */ - 312, /* (340) over_clause ::= OVER nm */ - 311, /* (341) filter_clause ::= FILTER LP WHERE expr RP */ - 185, /* (342) input ::= cmdlist */ - 186, /* (343) cmdlist ::= cmdlist ecmd */ - 186, /* (344) cmdlist ::= ecmd */ - 187, /* (345) ecmd ::= SEMI */ - 187, /* (346) ecmd ::= cmdx SEMI */ - 187, /* (347) ecmd ::= explain cmdx SEMI */ - 192, /* (348) trans_opt ::= */ - 192, /* (349) trans_opt ::= TRANSACTION */ - 192, /* (350) trans_opt ::= TRANSACTION nm */ - 194, /* (351) savepoint_opt ::= SAVEPOINT */ - 194, /* (352) savepoint_opt ::= */ - 190, /* (353) cmd ::= create_table create_table_args */ - 203, /* (354) table_option_set ::= table_option */ - 201, /* (355) columnlist ::= columnlist COMMA columnname carglist */ - 201, /* (356) columnlist ::= columnname carglist */ - 193, /* (357) nm ::= ID|INDEXED */ - 193, /* (358) nm ::= STRING */ - 193, /* (359) nm ::= JOIN_KW */ - 208, /* (360) typetoken ::= typename */ - 209, /* (361) typename ::= ID|STRING */ - 210, /* (362) signed ::= plus_num */ - 210, /* (363) signed ::= minus_num */ - 207, /* (364) carglist ::= carglist ccons */ - 207, /* (365) carglist ::= */ - 215, /* (366) ccons ::= NULL onconf */ - 215, /* (367) ccons ::= GENERATED ALWAYS AS generated */ - 215, /* (368) ccons ::= AS generated */ - 202, /* (369) conslist_opt ::= COMMA conslist */ - 228, /* (370) conslist ::= conslist tconscomma tcons */ - 228, /* (371) conslist ::= tcons */ - 229, /* (372) tconscomma ::= */ - 233, /* (373) defer_subclause_opt ::= defer_subclause */ - 235, /* (374) resolvetype ::= raisetype */ - 239, /* (375) selectnowith ::= oneselect */ - 240, /* (376) oneselect ::= values */ - 254, /* (377) sclp ::= selcollist COMMA */ - 255, /* (378) as ::= ID|STRING */ - 264, /* (379) indexed_opt ::= indexed_by */ - 272, /* (380) returning ::= */ - 217, /* (381) expr ::= term */ - 274, /* (382) likeop ::= LIKE_KW|MATCH */ - 261, /* (383) exprlist ::= nexprlist */ - 284, /* (384) nmnum ::= plus_num */ - 284, /* (385) nmnum ::= nm */ - 284, /* (386) nmnum ::= ON */ - 284, /* (387) nmnum ::= DELETE */ - 284, /* (388) nmnum ::= DEFAULT */ - 211, /* (389) plus_num ::= INTEGER|FLOAT */ - 289, /* (390) foreach_clause ::= */ - 289, /* (391) foreach_clause ::= FOR EACH ROW */ - 292, /* (392) trnm ::= nm */ - 293, /* (393) tridxby ::= */ - 294, /* (394) database_kw_opt ::= DATABASE */ - 294, /* (395) database_kw_opt ::= */ - 297, /* (396) kwcolumn_opt ::= */ - 297, /* (397) kwcolumn_opt ::= COLUMNKW */ - 299, /* (398) vtabarglist ::= vtabarg */ - 299, /* (399) vtabarglist ::= vtabarglist COMMA vtabarg */ - 300, /* (400) vtabarg ::= vtabarg vtabargtoken */ - 303, /* (401) anylist ::= */ - 303, /* (402) anylist ::= anylist LP anylist RP */ - 303, /* (403) anylist ::= anylist ANY */ - 266, /* (404) with ::= */ + 217, /* (178) expr ::= ID|INDEXED|JOIN_KW */ + 217, /* (179) expr ::= nm DOT nm */ + 217, /* (180) expr ::= nm DOT nm DOT nm */ + 216, /* (181) term ::= NULL|FLOAT|BLOB */ + 216, /* (182) term ::= STRING */ + 216, /* (183) term ::= INTEGER */ + 217, /* (184) expr ::= VARIABLE */ + 217, /* (185) expr ::= expr COLLATE ID|STRING */ + 217, /* (186) expr ::= CAST LP expr AS typetoken RP */ + 217, /* (187) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */ + 217, /* (188) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */ + 217, /* (189) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */ + 217, /* (190) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */ + 216, /* (191) term ::= CTIME_KW */ + 217, /* (192) expr ::= LP nexprlist COMMA expr RP */ + 217, /* (193) expr ::= expr AND expr */ + 217, /* (194) expr ::= expr OR expr */ + 217, /* (195) expr ::= expr LT|GT|GE|LE expr */ + 217, /* (196) expr ::= expr EQ|NE expr */ + 217, /* (197) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ + 217, /* (198) expr ::= expr PLUS|MINUS expr */ + 217, /* (199) expr ::= expr STAR|SLASH|REM expr */ + 217, /* (200) expr ::= expr CONCAT expr */ + 274, /* (201) likeop ::= NOT LIKE_KW|MATCH */ + 217, /* (202) expr ::= expr likeop expr */ + 217, /* (203) expr ::= expr likeop expr ESCAPE expr */ + 217, /* (204) expr ::= expr ISNULL|NOTNULL */ + 217, /* (205) expr ::= expr NOT NULL */ + 217, /* (206) expr ::= expr IS expr */ + 217, /* (207) expr ::= expr IS NOT expr */ + 217, /* (208) expr ::= expr IS NOT DISTINCT FROM expr */ + 217, /* (209) expr ::= expr IS DISTINCT FROM expr */ + 217, /* (210) expr ::= NOT expr */ + 217, /* (211) expr ::= BITNOT expr */ + 217, /* (212) expr ::= PLUS|MINUS expr */ + 217, /* (213) expr ::= expr PTR expr */ + 275, /* (214) between_op ::= BETWEEN */ + 275, /* (215) between_op ::= NOT BETWEEN */ + 217, /* (216) expr ::= expr between_op expr AND expr */ + 276, /* (217) in_op ::= IN */ + 276, /* (218) in_op ::= NOT IN */ + 217, /* (219) expr ::= expr in_op LP exprlist RP */ + 217, /* (220) expr ::= LP select RP */ + 217, /* (221) expr ::= expr in_op LP select RP */ + 217, /* (222) expr ::= expr in_op nm dbnm paren_exprlist */ + 217, /* (223) expr ::= EXISTS LP select RP */ + 217, /* (224) expr ::= CASE case_operand case_exprlist case_else END */ + 279, /* (225) case_exprlist ::= case_exprlist WHEN expr THEN expr */ + 279, /* (226) case_exprlist ::= WHEN expr THEN expr */ + 280, /* (227) case_else ::= ELSE expr */ + 280, /* (228) case_else ::= */ + 278, /* (229) case_operand ::= */ + 261, /* (230) exprlist ::= */ + 253, /* (231) nexprlist ::= nexprlist COMMA expr */ + 253, /* (232) nexprlist ::= expr */ + 277, /* (233) paren_exprlist ::= */ + 277, /* (234) paren_exprlist ::= LP exprlist RP */ + 190, /* (235) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ + 281, /* (236) uniqueflag ::= UNIQUE */ + 281, /* (237) uniqueflag ::= */ + 221, /* (238) eidlist_opt ::= */ + 221, /* (239) eidlist_opt ::= LP eidlist RP */ + 232, /* (240) eidlist ::= eidlist COMMA nm collate sortorder */ + 232, /* (241) eidlist ::= nm collate sortorder */ + 282, /* (242) collate ::= */ + 282, /* (243) collate ::= COLLATE ID|STRING */ + 190, /* (244) cmd ::= DROP INDEX ifexists fullname */ + 190, /* (245) cmd ::= VACUUM vinto */ + 190, /* (246) cmd ::= VACUUM nm vinto */ + 283, /* (247) vinto ::= INTO expr */ + 283, /* (248) vinto ::= */ + 190, /* (249) cmd ::= PRAGMA nm dbnm */ + 190, /* (250) cmd ::= PRAGMA nm dbnm EQ nmnum */ + 190, /* (251) cmd ::= PRAGMA nm dbnm LP nmnum RP */ + 190, /* (252) cmd ::= PRAGMA nm dbnm EQ minus_num */ + 190, /* (253) cmd ::= PRAGMA nm dbnm LP minus_num RP */ + 211, /* (254) plus_num ::= PLUS INTEGER|FLOAT */ + 212, /* (255) minus_num ::= MINUS INTEGER|FLOAT */ + 190, /* (256) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ + 285, /* (257) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ + 287, /* (258) trigger_time ::= BEFORE|AFTER */ + 287, /* (259) trigger_time ::= INSTEAD OF */ + 287, /* (260) trigger_time ::= */ + 288, /* (261) trigger_event ::= DELETE|INSERT */ + 288, /* (262) trigger_event ::= UPDATE */ + 288, /* (263) trigger_event ::= UPDATE OF idlist */ + 290, /* (264) when_clause ::= */ + 290, /* (265) when_clause ::= WHEN expr */ + 286, /* (266) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ + 286, /* (267) trigger_cmd_list ::= trigger_cmd SEMI */ + 292, /* (268) trnm ::= nm DOT nm */ + 293, /* (269) tridxby ::= INDEXED BY nm */ + 293, /* (270) tridxby ::= NOT INDEXED */ + 291, /* (271) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ + 291, /* (272) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ + 291, /* (273) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ + 291, /* (274) trigger_cmd ::= scanpt select scanpt */ + 217, /* (275) expr ::= RAISE LP IGNORE RP */ + 217, /* (276) expr ::= RAISE LP raisetype COMMA nm RP */ + 236, /* (277) raisetype ::= ROLLBACK */ + 236, /* (278) raisetype ::= ABORT */ + 236, /* (279) raisetype ::= FAIL */ + 190, /* (280) cmd ::= DROP TRIGGER ifexists fullname */ + 190, /* (281) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ + 190, /* (282) cmd ::= DETACH database_kw_opt expr */ + 295, /* (283) key_opt ::= */ + 295, /* (284) key_opt ::= KEY expr */ + 190, /* (285) cmd ::= REINDEX */ + 190, /* (286) cmd ::= REINDEX nm dbnm */ + 190, /* (287) cmd ::= ANALYZE */ + 190, /* (288) cmd ::= ANALYZE nm dbnm */ + 190, /* (289) cmd ::= ALTER TABLE fullname RENAME TO nm */ + 190, /* (290) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ + 190, /* (291) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ + 296, /* (292) add_column_fullname ::= fullname */ + 190, /* (293) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ + 190, /* (294) cmd ::= create_vtab */ + 190, /* (295) cmd ::= create_vtab LP vtabarglist RP */ + 298, /* (296) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ + 300, /* (297) vtabarg ::= */ + 301, /* (298) vtabargtoken ::= ANY */ + 301, /* (299) vtabargtoken ::= lp anylist RP */ + 302, /* (300) lp ::= LP */ + 266, /* (301) with ::= WITH wqlist */ + 266, /* (302) with ::= WITH RECURSIVE wqlist */ + 305, /* (303) wqas ::= AS */ + 305, /* (304) wqas ::= AS MATERIALIZED */ + 305, /* (305) wqas ::= AS NOT MATERIALIZED */ + 304, /* (306) wqitem ::= nm eidlist_opt wqas LP select RP */ + 241, /* (307) wqlist ::= wqitem */ + 241, /* (308) wqlist ::= wqlist COMMA wqitem */ + 306, /* (309) windowdefn_list ::= windowdefn_list COMMA windowdefn */ + 307, /* (310) windowdefn ::= nm AS LP window RP */ + 308, /* (311) window ::= PARTITION BY nexprlist orderby_opt frame_opt */ + 308, /* (312) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ + 308, /* (313) window ::= ORDER BY sortlist frame_opt */ + 308, /* (314) window ::= nm ORDER BY sortlist frame_opt */ + 308, /* (315) window ::= nm frame_opt */ + 309, /* (316) frame_opt ::= */ + 309, /* (317) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ + 309, /* (318) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ + 313, /* (319) range_or_rows ::= RANGE|ROWS|GROUPS */ + 315, /* (320) frame_bound_s ::= frame_bound */ + 315, /* (321) frame_bound_s ::= UNBOUNDED PRECEDING */ + 316, /* (322) frame_bound_e ::= frame_bound */ + 316, /* (323) frame_bound_e ::= UNBOUNDED FOLLOWING */ + 314, /* (324) frame_bound ::= expr PRECEDING|FOLLOWING */ + 314, /* (325) frame_bound ::= CURRENT ROW */ + 317, /* (326) frame_exclude_opt ::= */ + 317, /* (327) frame_exclude_opt ::= EXCLUDE frame_exclude */ + 318, /* (328) frame_exclude ::= NO OTHERS */ + 318, /* (329) frame_exclude ::= CURRENT ROW */ + 318, /* (330) frame_exclude ::= GROUP|TIES */ + 251, /* (331) window_clause ::= WINDOW windowdefn_list */ + 273, /* (332) filter_over ::= filter_clause over_clause */ + 273, /* (333) filter_over ::= over_clause */ + 273, /* (334) filter_over ::= filter_clause */ + 312, /* (335) over_clause ::= OVER LP window RP */ + 312, /* (336) over_clause ::= OVER nm */ + 311, /* (337) filter_clause ::= FILTER LP WHERE expr RP */ + 185, /* (338) input ::= cmdlist */ + 186, /* (339) cmdlist ::= cmdlist ecmd */ + 186, /* (340) cmdlist ::= ecmd */ + 187, /* (341) ecmd ::= SEMI */ + 187, /* (342) ecmd ::= cmdx SEMI */ + 187, /* (343) ecmd ::= explain cmdx SEMI */ + 192, /* (344) trans_opt ::= */ + 192, /* (345) trans_opt ::= TRANSACTION */ + 192, /* (346) trans_opt ::= TRANSACTION nm */ + 194, /* (347) savepoint_opt ::= SAVEPOINT */ + 194, /* (348) savepoint_opt ::= */ + 190, /* (349) cmd ::= create_table create_table_args */ + 203, /* (350) table_option_set ::= table_option */ + 201, /* (351) columnlist ::= columnlist COMMA columnname carglist */ + 201, /* (352) columnlist ::= columnname carglist */ + 193, /* (353) nm ::= ID|INDEXED|JOIN_KW */ + 193, /* (354) nm ::= STRING */ + 208, /* (355) typetoken ::= typename */ + 209, /* (356) typename ::= ID|STRING */ + 210, /* (357) signed ::= plus_num */ + 210, /* (358) signed ::= minus_num */ + 207, /* (359) carglist ::= carglist ccons */ + 207, /* (360) carglist ::= */ + 215, /* (361) ccons ::= NULL onconf */ + 215, /* (362) ccons ::= GENERATED ALWAYS AS generated */ + 215, /* (363) ccons ::= AS generated */ + 202, /* (364) conslist_opt ::= COMMA conslist */ + 228, /* (365) conslist ::= conslist tconscomma tcons */ + 228, /* (366) conslist ::= tcons */ + 229, /* (367) tconscomma ::= */ + 233, /* (368) defer_subclause_opt ::= defer_subclause */ + 235, /* (369) resolvetype ::= raisetype */ + 239, /* (370) selectnowith ::= oneselect */ + 240, /* (371) oneselect ::= values */ + 254, /* (372) sclp ::= selcollist COMMA */ + 255, /* (373) as ::= ID|STRING */ + 264, /* (374) indexed_opt ::= indexed_by */ + 272, /* (375) returning ::= */ + 217, /* (376) expr ::= term */ + 274, /* (377) likeop ::= LIKE_KW|MATCH */ + 278, /* (378) case_operand ::= expr */ + 261, /* (379) exprlist ::= nexprlist */ + 284, /* (380) nmnum ::= plus_num */ + 284, /* (381) nmnum ::= nm */ + 284, /* (382) nmnum ::= ON */ + 284, /* (383) nmnum ::= DELETE */ + 284, /* (384) nmnum ::= DEFAULT */ + 211, /* (385) plus_num ::= INTEGER|FLOAT */ + 289, /* (386) foreach_clause ::= */ + 289, /* (387) foreach_clause ::= FOR EACH ROW */ + 292, /* (388) trnm ::= nm */ + 293, /* (389) tridxby ::= */ + 294, /* (390) database_kw_opt ::= DATABASE */ + 294, /* (391) database_kw_opt ::= */ + 297, /* (392) kwcolumn_opt ::= */ + 297, /* (393) kwcolumn_opt ::= COLUMNKW */ + 299, /* (394) vtabarglist ::= vtabarg */ + 299, /* (395) vtabarglist ::= vtabarglist COMMA vtabarg */ + 300, /* (396) vtabarg ::= vtabarg vtabargtoken */ + 303, /* (397) anylist ::= */ + 303, /* (398) anylist ::= anylist LP anylist RP */ + 303, /* (399) anylist ::= anylist ANY */ + 266, /* (400) with ::= */ + 306, /* (401) windowdefn_list ::= windowdefn */ + 308, /* (402) window ::= frame_opt */ }; /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number @@ -168632,233 +172536,231 @@ static const signed char yyRuleInfoNRhs[] = { -3, /* (175) idlist ::= idlist COMMA nm */ -1, /* (176) idlist ::= nm */ -3, /* (177) expr ::= LP expr RP */ - -1, /* (178) expr ::= ID|INDEXED */ - -1, /* (179) expr ::= JOIN_KW */ - -3, /* (180) expr ::= nm DOT nm */ - -5, /* (181) expr ::= nm DOT nm DOT nm */ - -1, /* (182) term ::= NULL|FLOAT|BLOB */ - -1, /* (183) term ::= STRING */ - -1, /* (184) term ::= INTEGER */ - -1, /* (185) expr ::= VARIABLE */ - -3, /* (186) expr ::= expr COLLATE ID|STRING */ - -6, /* (187) expr ::= CAST LP expr AS typetoken RP */ - -5, /* (188) expr ::= ID|INDEXED LP distinct exprlist RP */ - -4, /* (189) expr ::= ID|INDEXED LP STAR RP */ - -6, /* (190) expr ::= ID|INDEXED LP distinct exprlist RP filter_over */ - -5, /* (191) expr ::= ID|INDEXED LP STAR RP filter_over */ - -1, /* (192) term ::= CTIME_KW */ - -5, /* (193) expr ::= LP nexprlist COMMA expr RP */ - -3, /* (194) expr ::= expr AND expr */ - -3, /* (195) expr ::= expr OR expr */ - -3, /* (196) expr ::= expr LT|GT|GE|LE expr */ - -3, /* (197) expr ::= expr EQ|NE expr */ - -3, /* (198) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ - -3, /* (199) expr ::= expr PLUS|MINUS expr */ - -3, /* (200) expr ::= expr STAR|SLASH|REM expr */ - -3, /* (201) expr ::= expr CONCAT expr */ - -2, /* (202) likeop ::= NOT LIKE_KW|MATCH */ - -3, /* (203) expr ::= expr likeop expr */ - -5, /* (204) expr ::= expr likeop expr ESCAPE expr */ - -2, /* (205) expr ::= expr ISNULL|NOTNULL */ - -3, /* (206) expr ::= expr NOT NULL */ - -3, /* (207) expr ::= expr IS expr */ - -4, /* (208) expr ::= expr IS NOT expr */ - -6, /* (209) expr ::= expr IS NOT DISTINCT FROM expr */ - -5, /* (210) expr ::= expr IS DISTINCT FROM expr */ - -2, /* (211) expr ::= NOT expr */ - -2, /* (212) expr ::= BITNOT expr */ - -2, /* (213) expr ::= PLUS|MINUS expr */ - -3, /* (214) expr ::= expr PTR expr */ - -1, /* (215) between_op ::= BETWEEN */ - -2, /* (216) between_op ::= NOT BETWEEN */ - -5, /* (217) expr ::= expr between_op expr AND expr */ - -1, /* (218) in_op ::= IN */ - -2, /* (219) in_op ::= NOT IN */ - -5, /* (220) expr ::= expr in_op LP exprlist RP */ - -3, /* (221) expr ::= LP select RP */ - -5, /* (222) expr ::= expr in_op LP select RP */ - -5, /* (223) expr ::= expr in_op nm dbnm paren_exprlist */ - -4, /* (224) expr ::= EXISTS LP select RP */ - -5, /* (225) expr ::= CASE case_operand case_exprlist case_else END */ - -5, /* (226) case_exprlist ::= case_exprlist WHEN expr THEN expr */ - -4, /* (227) case_exprlist ::= WHEN expr THEN expr */ - -2, /* (228) case_else ::= ELSE expr */ - 0, /* (229) case_else ::= */ - -1, /* (230) case_operand ::= expr */ - 0, /* (231) case_operand ::= */ - 0, /* (232) exprlist ::= */ - -3, /* (233) nexprlist ::= nexprlist COMMA expr */ - -1, /* (234) nexprlist ::= expr */ - 0, /* (235) paren_exprlist ::= */ - -3, /* (236) paren_exprlist ::= LP exprlist RP */ - -12, /* (237) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ - -1, /* (238) uniqueflag ::= UNIQUE */ - 0, /* (239) uniqueflag ::= */ - 0, /* (240) eidlist_opt ::= */ - -3, /* (241) eidlist_opt ::= LP eidlist RP */ - -5, /* (242) eidlist ::= eidlist COMMA nm collate sortorder */ - -3, /* (243) eidlist ::= nm collate sortorder */ - 0, /* (244) collate ::= */ - -2, /* (245) collate ::= COLLATE ID|STRING */ - -4, /* (246) cmd ::= DROP INDEX ifexists fullname */ - -2, /* (247) cmd ::= VACUUM vinto */ - -3, /* (248) cmd ::= VACUUM nm vinto */ - -2, /* (249) vinto ::= INTO expr */ - 0, /* (250) vinto ::= */ - -3, /* (251) cmd ::= PRAGMA nm dbnm */ - -5, /* (252) cmd ::= PRAGMA nm dbnm EQ nmnum */ - -6, /* (253) cmd ::= PRAGMA nm dbnm LP nmnum RP */ - -5, /* (254) cmd ::= PRAGMA nm dbnm EQ minus_num */ - -6, /* (255) cmd ::= PRAGMA nm dbnm LP minus_num RP */ - -2, /* (256) plus_num ::= PLUS INTEGER|FLOAT */ - -2, /* (257) minus_num ::= MINUS INTEGER|FLOAT */ - -5, /* (258) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ - -11, /* (259) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ - -1, /* (260) trigger_time ::= BEFORE|AFTER */ - -2, /* (261) trigger_time ::= INSTEAD OF */ - 0, /* (262) trigger_time ::= */ - -1, /* (263) trigger_event ::= DELETE|INSERT */ - -1, /* (264) trigger_event ::= UPDATE */ - -3, /* (265) trigger_event ::= UPDATE OF idlist */ - 0, /* (266) when_clause ::= */ - -2, /* (267) when_clause ::= WHEN expr */ - -3, /* (268) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ - -2, /* (269) trigger_cmd_list ::= trigger_cmd SEMI */ - -3, /* (270) trnm ::= nm DOT nm */ - -3, /* (271) tridxby ::= INDEXED BY nm */ - -2, /* (272) tridxby ::= NOT INDEXED */ - -9, /* (273) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ - -8, /* (274) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ - -6, /* (275) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ - -3, /* (276) trigger_cmd ::= scanpt select scanpt */ - -4, /* (277) expr ::= RAISE LP IGNORE RP */ - -6, /* (278) expr ::= RAISE LP raisetype COMMA nm RP */ - -1, /* (279) raisetype ::= ROLLBACK */ - -1, /* (280) raisetype ::= ABORT */ - -1, /* (281) raisetype ::= FAIL */ - -4, /* (282) cmd ::= DROP TRIGGER ifexists fullname */ - -6, /* (283) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ - -3, /* (284) cmd ::= DETACH database_kw_opt expr */ - 0, /* (285) key_opt ::= */ - -2, /* (286) key_opt ::= KEY expr */ - -1, /* (287) cmd ::= REINDEX */ - -3, /* (288) cmd ::= REINDEX nm dbnm */ - -1, /* (289) cmd ::= ANALYZE */ - -3, /* (290) cmd ::= ANALYZE nm dbnm */ - -6, /* (291) cmd ::= ALTER TABLE fullname RENAME TO nm */ - -7, /* (292) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ - -6, /* (293) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ - -1, /* (294) add_column_fullname ::= fullname */ - -8, /* (295) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ - -1, /* (296) cmd ::= create_vtab */ - -4, /* (297) cmd ::= create_vtab LP vtabarglist RP */ - -8, /* (298) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ - 0, /* (299) vtabarg ::= */ - -1, /* (300) vtabargtoken ::= ANY */ - -3, /* (301) vtabargtoken ::= lp anylist RP */ - -1, /* (302) lp ::= LP */ - -2, /* (303) with ::= WITH wqlist */ - -3, /* (304) with ::= WITH RECURSIVE wqlist */ - -1, /* (305) wqas ::= AS */ - -2, /* (306) wqas ::= AS MATERIALIZED */ - -3, /* (307) wqas ::= AS NOT MATERIALIZED */ - -6, /* (308) wqitem ::= nm eidlist_opt wqas LP select RP */ - -1, /* (309) wqlist ::= wqitem */ - -3, /* (310) wqlist ::= wqlist COMMA wqitem */ - -1, /* (311) windowdefn_list ::= windowdefn */ - -3, /* (312) windowdefn_list ::= windowdefn_list COMMA windowdefn */ - -5, /* (313) windowdefn ::= nm AS LP window RP */ - -5, /* (314) window ::= PARTITION BY nexprlist orderby_opt frame_opt */ - -6, /* (315) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ - -4, /* (316) window ::= ORDER BY sortlist frame_opt */ - -5, /* (317) window ::= nm ORDER BY sortlist frame_opt */ - -1, /* (318) window ::= frame_opt */ - -2, /* (319) window ::= nm frame_opt */ - 0, /* (320) frame_opt ::= */ - -3, /* (321) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ - -6, /* (322) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ - -1, /* (323) range_or_rows ::= RANGE|ROWS|GROUPS */ - -1, /* (324) frame_bound_s ::= frame_bound */ - -2, /* (325) frame_bound_s ::= UNBOUNDED PRECEDING */ - -1, /* (326) frame_bound_e ::= frame_bound */ - -2, /* (327) frame_bound_e ::= UNBOUNDED FOLLOWING */ - -2, /* (328) frame_bound ::= expr PRECEDING|FOLLOWING */ - -2, /* (329) frame_bound ::= CURRENT ROW */ - 0, /* (330) frame_exclude_opt ::= */ - -2, /* (331) frame_exclude_opt ::= EXCLUDE frame_exclude */ - -2, /* (332) frame_exclude ::= NO OTHERS */ - -2, /* (333) frame_exclude ::= CURRENT ROW */ - -1, /* (334) frame_exclude ::= GROUP|TIES */ - -2, /* (335) window_clause ::= WINDOW windowdefn_list */ - -2, /* (336) filter_over ::= filter_clause over_clause */ - -1, /* (337) filter_over ::= over_clause */ - -1, /* (338) filter_over ::= filter_clause */ - -4, /* (339) over_clause ::= OVER LP window RP */ - -2, /* (340) over_clause ::= OVER nm */ - -5, /* (341) filter_clause ::= FILTER LP WHERE expr RP */ - -1, /* (342) input ::= cmdlist */ - -2, /* (343) cmdlist ::= cmdlist ecmd */ - -1, /* (344) cmdlist ::= ecmd */ - -1, /* (345) ecmd ::= SEMI */ - -2, /* (346) ecmd ::= cmdx SEMI */ - -3, /* (347) ecmd ::= explain cmdx SEMI */ - 0, /* (348) trans_opt ::= */ - -1, /* (349) trans_opt ::= TRANSACTION */ - -2, /* (350) trans_opt ::= TRANSACTION nm */ - -1, /* (351) savepoint_opt ::= SAVEPOINT */ - 0, /* (352) savepoint_opt ::= */ - -2, /* (353) cmd ::= create_table create_table_args */ - -1, /* (354) table_option_set ::= table_option */ - -4, /* (355) columnlist ::= columnlist COMMA columnname carglist */ - -2, /* (356) columnlist ::= columnname carglist */ - -1, /* (357) nm ::= ID|INDEXED */ - -1, /* (358) nm ::= STRING */ - -1, /* (359) nm ::= JOIN_KW */ - -1, /* (360) typetoken ::= typename */ - -1, /* (361) typename ::= ID|STRING */ - -1, /* (362) signed ::= plus_num */ - -1, /* (363) signed ::= minus_num */ - -2, /* (364) carglist ::= carglist ccons */ - 0, /* (365) carglist ::= */ - -2, /* (366) ccons ::= NULL onconf */ - -4, /* (367) ccons ::= GENERATED ALWAYS AS generated */ - -2, /* (368) ccons ::= AS generated */ - -2, /* (369) conslist_opt ::= COMMA conslist */ - -3, /* (370) conslist ::= conslist tconscomma tcons */ - -1, /* (371) conslist ::= tcons */ - 0, /* (372) tconscomma ::= */ - -1, /* (373) defer_subclause_opt ::= defer_subclause */ - -1, /* (374) resolvetype ::= raisetype */ - -1, /* (375) selectnowith ::= oneselect */ - -1, /* (376) oneselect ::= values */ - -2, /* (377) sclp ::= selcollist COMMA */ - -1, /* (378) as ::= ID|STRING */ - -1, /* (379) indexed_opt ::= indexed_by */ - 0, /* (380) returning ::= */ - -1, /* (381) expr ::= term */ - -1, /* (382) likeop ::= LIKE_KW|MATCH */ - -1, /* (383) exprlist ::= nexprlist */ - -1, /* (384) nmnum ::= plus_num */ - -1, /* (385) nmnum ::= nm */ - -1, /* (386) nmnum ::= ON */ - -1, /* (387) nmnum ::= DELETE */ - -1, /* (388) nmnum ::= DEFAULT */ - -1, /* (389) plus_num ::= INTEGER|FLOAT */ - 0, /* (390) foreach_clause ::= */ - -3, /* (391) foreach_clause ::= FOR EACH ROW */ - -1, /* (392) trnm ::= nm */ - 0, /* (393) tridxby ::= */ - -1, /* (394) database_kw_opt ::= DATABASE */ - 0, /* (395) database_kw_opt ::= */ - 0, /* (396) kwcolumn_opt ::= */ - -1, /* (397) kwcolumn_opt ::= COLUMNKW */ - -1, /* (398) vtabarglist ::= vtabarg */ - -3, /* (399) vtabarglist ::= vtabarglist COMMA vtabarg */ - -2, /* (400) vtabarg ::= vtabarg vtabargtoken */ - 0, /* (401) anylist ::= */ - -4, /* (402) anylist ::= anylist LP anylist RP */ - -2, /* (403) anylist ::= anylist ANY */ - 0, /* (404) with ::= */ + -1, /* (178) expr ::= ID|INDEXED|JOIN_KW */ + -3, /* (179) expr ::= nm DOT nm */ + -5, /* (180) expr ::= nm DOT nm DOT nm */ + -1, /* (181) term ::= NULL|FLOAT|BLOB */ + -1, /* (182) term ::= STRING */ + -1, /* (183) term ::= INTEGER */ + -1, /* (184) expr ::= VARIABLE */ + -3, /* (185) expr ::= expr COLLATE ID|STRING */ + -6, /* (186) expr ::= CAST LP expr AS typetoken RP */ + -5, /* (187) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */ + -4, /* (188) expr ::= ID|INDEXED|JOIN_KW LP STAR RP */ + -6, /* (189) expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */ + -5, /* (190) expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */ + -1, /* (191) term ::= CTIME_KW */ + -5, /* (192) expr ::= LP nexprlist COMMA expr RP */ + -3, /* (193) expr ::= expr AND expr */ + -3, /* (194) expr ::= expr OR expr */ + -3, /* (195) expr ::= expr LT|GT|GE|LE expr */ + -3, /* (196) expr ::= expr EQ|NE expr */ + -3, /* (197) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ + -3, /* (198) expr ::= expr PLUS|MINUS expr */ + -3, /* (199) expr ::= expr STAR|SLASH|REM expr */ + -3, /* (200) expr ::= expr CONCAT expr */ + -2, /* (201) likeop ::= NOT LIKE_KW|MATCH */ + -3, /* (202) expr ::= expr likeop expr */ + -5, /* (203) expr ::= expr likeop expr ESCAPE expr */ + -2, /* (204) expr ::= expr ISNULL|NOTNULL */ + -3, /* (205) expr ::= expr NOT NULL */ + -3, /* (206) expr ::= expr IS expr */ + -4, /* (207) expr ::= expr IS NOT expr */ + -6, /* (208) expr ::= expr IS NOT DISTINCT FROM expr */ + -5, /* (209) expr ::= expr IS DISTINCT FROM expr */ + -2, /* (210) expr ::= NOT expr */ + -2, /* (211) expr ::= BITNOT expr */ + -2, /* (212) expr ::= PLUS|MINUS expr */ + -3, /* (213) expr ::= expr PTR expr */ + -1, /* (214) between_op ::= BETWEEN */ + -2, /* (215) between_op ::= NOT BETWEEN */ + -5, /* (216) expr ::= expr between_op expr AND expr */ + -1, /* (217) in_op ::= IN */ + -2, /* (218) in_op ::= NOT IN */ + -5, /* (219) expr ::= expr in_op LP exprlist RP */ + -3, /* (220) expr ::= LP select RP */ + -5, /* (221) expr ::= expr in_op LP select RP */ + -5, /* (222) expr ::= expr in_op nm dbnm paren_exprlist */ + -4, /* (223) expr ::= EXISTS LP select RP */ + -5, /* (224) expr ::= CASE case_operand case_exprlist case_else END */ + -5, /* (225) case_exprlist ::= case_exprlist WHEN expr THEN expr */ + -4, /* (226) case_exprlist ::= WHEN expr THEN expr */ + -2, /* (227) case_else ::= ELSE expr */ + 0, /* (228) case_else ::= */ + 0, /* (229) case_operand ::= */ + 0, /* (230) exprlist ::= */ + -3, /* (231) nexprlist ::= nexprlist COMMA expr */ + -1, /* (232) nexprlist ::= expr */ + 0, /* (233) paren_exprlist ::= */ + -3, /* (234) paren_exprlist ::= LP exprlist RP */ + -12, /* (235) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ + -1, /* (236) uniqueflag ::= UNIQUE */ + 0, /* (237) uniqueflag ::= */ + 0, /* (238) eidlist_opt ::= */ + -3, /* (239) eidlist_opt ::= LP eidlist RP */ + -5, /* (240) eidlist ::= eidlist COMMA nm collate sortorder */ + -3, /* (241) eidlist ::= nm collate sortorder */ + 0, /* (242) collate ::= */ + -2, /* (243) collate ::= COLLATE ID|STRING */ + -4, /* (244) cmd ::= DROP INDEX ifexists fullname */ + -2, /* (245) cmd ::= VACUUM vinto */ + -3, /* (246) cmd ::= VACUUM nm vinto */ + -2, /* (247) vinto ::= INTO expr */ + 0, /* (248) vinto ::= */ + -3, /* (249) cmd ::= PRAGMA nm dbnm */ + -5, /* (250) cmd ::= PRAGMA nm dbnm EQ nmnum */ + -6, /* (251) cmd ::= PRAGMA nm dbnm LP nmnum RP */ + -5, /* (252) cmd ::= PRAGMA nm dbnm EQ minus_num */ + -6, /* (253) cmd ::= PRAGMA nm dbnm LP minus_num RP */ + -2, /* (254) plus_num ::= PLUS INTEGER|FLOAT */ + -2, /* (255) minus_num ::= MINUS INTEGER|FLOAT */ + -5, /* (256) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ + -11, /* (257) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ + -1, /* (258) trigger_time ::= BEFORE|AFTER */ + -2, /* (259) trigger_time ::= INSTEAD OF */ + 0, /* (260) trigger_time ::= */ + -1, /* (261) trigger_event ::= DELETE|INSERT */ + -1, /* (262) trigger_event ::= UPDATE */ + -3, /* (263) trigger_event ::= UPDATE OF idlist */ + 0, /* (264) when_clause ::= */ + -2, /* (265) when_clause ::= WHEN expr */ + -3, /* (266) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ + -2, /* (267) trigger_cmd_list ::= trigger_cmd SEMI */ + -3, /* (268) trnm ::= nm DOT nm */ + -3, /* (269) tridxby ::= INDEXED BY nm */ + -2, /* (270) tridxby ::= NOT INDEXED */ + -9, /* (271) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ + -8, /* (272) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ + -6, /* (273) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ + -3, /* (274) trigger_cmd ::= scanpt select scanpt */ + -4, /* (275) expr ::= RAISE LP IGNORE RP */ + -6, /* (276) expr ::= RAISE LP raisetype COMMA nm RP */ + -1, /* (277) raisetype ::= ROLLBACK */ + -1, /* (278) raisetype ::= ABORT */ + -1, /* (279) raisetype ::= FAIL */ + -4, /* (280) cmd ::= DROP TRIGGER ifexists fullname */ + -6, /* (281) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ + -3, /* (282) cmd ::= DETACH database_kw_opt expr */ + 0, /* (283) key_opt ::= */ + -2, /* (284) key_opt ::= KEY expr */ + -1, /* (285) cmd ::= REINDEX */ + -3, /* (286) cmd ::= REINDEX nm dbnm */ + -1, /* (287) cmd ::= ANALYZE */ + -3, /* (288) cmd ::= ANALYZE nm dbnm */ + -6, /* (289) cmd ::= ALTER TABLE fullname RENAME TO nm */ + -7, /* (290) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ + -6, /* (291) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ + -1, /* (292) add_column_fullname ::= fullname */ + -8, /* (293) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ + -1, /* (294) cmd ::= create_vtab */ + -4, /* (295) cmd ::= create_vtab LP vtabarglist RP */ + -8, /* (296) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ + 0, /* (297) vtabarg ::= */ + -1, /* (298) vtabargtoken ::= ANY */ + -3, /* (299) vtabargtoken ::= lp anylist RP */ + -1, /* (300) lp ::= LP */ + -2, /* (301) with ::= WITH wqlist */ + -3, /* (302) with ::= WITH RECURSIVE wqlist */ + -1, /* (303) wqas ::= AS */ + -2, /* (304) wqas ::= AS MATERIALIZED */ + -3, /* (305) wqas ::= AS NOT MATERIALIZED */ + -6, /* (306) wqitem ::= nm eidlist_opt wqas LP select RP */ + -1, /* (307) wqlist ::= wqitem */ + -3, /* (308) wqlist ::= wqlist COMMA wqitem */ + -3, /* (309) windowdefn_list ::= windowdefn_list COMMA windowdefn */ + -5, /* (310) windowdefn ::= nm AS LP window RP */ + -5, /* (311) window ::= PARTITION BY nexprlist orderby_opt frame_opt */ + -6, /* (312) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ + -4, /* (313) window ::= ORDER BY sortlist frame_opt */ + -5, /* (314) window ::= nm ORDER BY sortlist frame_opt */ + -2, /* (315) window ::= nm frame_opt */ + 0, /* (316) frame_opt ::= */ + -3, /* (317) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ + -6, /* (318) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ + -1, /* (319) range_or_rows ::= RANGE|ROWS|GROUPS */ + -1, /* (320) frame_bound_s ::= frame_bound */ + -2, /* (321) frame_bound_s ::= UNBOUNDED PRECEDING */ + -1, /* (322) frame_bound_e ::= frame_bound */ + -2, /* (323) frame_bound_e ::= UNBOUNDED FOLLOWING */ + -2, /* (324) frame_bound ::= expr PRECEDING|FOLLOWING */ + -2, /* (325) frame_bound ::= CURRENT ROW */ + 0, /* (326) frame_exclude_opt ::= */ + -2, /* (327) frame_exclude_opt ::= EXCLUDE frame_exclude */ + -2, /* (328) frame_exclude ::= NO OTHERS */ + -2, /* (329) frame_exclude ::= CURRENT ROW */ + -1, /* (330) frame_exclude ::= GROUP|TIES */ + -2, /* (331) window_clause ::= WINDOW windowdefn_list */ + -2, /* (332) filter_over ::= filter_clause over_clause */ + -1, /* (333) filter_over ::= over_clause */ + -1, /* (334) filter_over ::= filter_clause */ + -4, /* (335) over_clause ::= OVER LP window RP */ + -2, /* (336) over_clause ::= OVER nm */ + -5, /* (337) filter_clause ::= FILTER LP WHERE expr RP */ + -1, /* (338) input ::= cmdlist */ + -2, /* (339) cmdlist ::= cmdlist ecmd */ + -1, /* (340) cmdlist ::= ecmd */ + -1, /* (341) ecmd ::= SEMI */ + -2, /* (342) ecmd ::= cmdx SEMI */ + -3, /* (343) ecmd ::= explain cmdx SEMI */ + 0, /* (344) trans_opt ::= */ + -1, /* (345) trans_opt ::= TRANSACTION */ + -2, /* (346) trans_opt ::= TRANSACTION nm */ + -1, /* (347) savepoint_opt ::= SAVEPOINT */ + 0, /* (348) savepoint_opt ::= */ + -2, /* (349) cmd ::= create_table create_table_args */ + -1, /* (350) table_option_set ::= table_option */ + -4, /* (351) columnlist ::= columnlist COMMA columnname carglist */ + -2, /* (352) columnlist ::= columnname carglist */ + -1, /* (353) nm ::= ID|INDEXED|JOIN_KW */ + -1, /* (354) nm ::= STRING */ + -1, /* (355) typetoken ::= typename */ + -1, /* (356) typename ::= ID|STRING */ + -1, /* (357) signed ::= plus_num */ + -1, /* (358) signed ::= minus_num */ + -2, /* (359) carglist ::= carglist ccons */ + 0, /* (360) carglist ::= */ + -2, /* (361) ccons ::= NULL onconf */ + -4, /* (362) ccons ::= GENERATED ALWAYS AS generated */ + -2, /* (363) ccons ::= AS generated */ + -2, /* (364) conslist_opt ::= COMMA conslist */ + -3, /* (365) conslist ::= conslist tconscomma tcons */ + -1, /* (366) conslist ::= tcons */ + 0, /* (367) tconscomma ::= */ + -1, /* (368) defer_subclause_opt ::= defer_subclause */ + -1, /* (369) resolvetype ::= raisetype */ + -1, /* (370) selectnowith ::= oneselect */ + -1, /* (371) oneselect ::= values */ + -2, /* (372) sclp ::= selcollist COMMA */ + -1, /* (373) as ::= ID|STRING */ + -1, /* (374) indexed_opt ::= indexed_by */ + 0, /* (375) returning ::= */ + -1, /* (376) expr ::= term */ + -1, /* (377) likeop ::= LIKE_KW|MATCH */ + -1, /* (378) case_operand ::= expr */ + -1, /* (379) exprlist ::= nexprlist */ + -1, /* (380) nmnum ::= plus_num */ + -1, /* (381) nmnum ::= nm */ + -1, /* (382) nmnum ::= ON */ + -1, /* (383) nmnum ::= DELETE */ + -1, /* (384) nmnum ::= DEFAULT */ + -1, /* (385) plus_num ::= INTEGER|FLOAT */ + 0, /* (386) foreach_clause ::= */ + -3, /* (387) foreach_clause ::= FOR EACH ROW */ + -1, /* (388) trnm ::= nm */ + 0, /* (389) tridxby ::= */ + -1, /* (390) database_kw_opt ::= DATABASE */ + 0, /* (391) database_kw_opt ::= */ + 0, /* (392) kwcolumn_opt ::= */ + -1, /* (393) kwcolumn_opt ::= COLUMNKW */ + -1, /* (394) vtabarglist ::= vtabarg */ + -3, /* (395) vtabarglist ::= vtabarglist COMMA vtabarg */ + -2, /* (396) vtabarg ::= vtabarg vtabargtoken */ + 0, /* (397) anylist ::= */ + -4, /* (398) anylist ::= anylist LP anylist RP */ + -2, /* (399) anylist ::= anylist ANY */ + 0, /* (400) with ::= */ + -1, /* (401) windowdefn_list ::= windowdefn */ + -1, /* (402) window ::= frame_opt */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -168901,10 +172803,10 @@ static YYACTIONTYPE yy_reduce( /********** Begin reduce actions **********************************************/ YYMINORTYPE yylhsminor; case 0: /* explain ::= EXPLAIN */ -{ pParse->explain = 1; } +{ if( pParse->pReprepare==0 ) pParse->explain = 1; } break; case 1: /* explain ::= EXPLAIN QUERY PLAN */ -{ pParse->explain = 2; } +{ if( pParse->pReprepare==0 ) pParse->explain = 2; } break; case 2: /* cmdx ::= cmd */ { sqlite3FinishCoding(pParse); } @@ -168918,7 +172820,7 @@ static YYACTIONTYPE yy_reduce( case 5: /* transtype ::= DEFERRED */ case 6: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==6); case 7: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==7); - case 323: /* range_or_rows ::= RANGE|ROWS|GROUPS */ yytestcase(yyruleno==323); + case 319: /* range_or_rows ::= RANGE|ROWS|GROUPS */ yytestcase(yyruleno==319); {yymsp[0].minor.yy394 = yymsp[0].major; /*A-overwrites-X*/} break; case 8: /* cmd ::= COMMIT|END trans_opt */ @@ -168955,7 +172857,7 @@ static YYACTIONTYPE yy_reduce( case 72: /* defer_subclause_opt ::= */ yytestcase(yyruleno==72); case 81: /* ifexists ::= */ yytestcase(yyruleno==81); case 98: /* distinct ::= */ yytestcase(yyruleno==98); - case 244: /* collate ::= */ yytestcase(yyruleno==244); + case 242: /* collate ::= */ yytestcase(yyruleno==242); {yymsp[1].minor.yy394 = 0;} break; case 16: /* ifnotexists ::= IF NOT EXISTS */ @@ -169139,9 +173041,9 @@ static YYACTIONTYPE yy_reduce( break; case 63: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ case 80: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==80); - case 216: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==216); - case 219: /* in_op ::= NOT IN */ yytestcase(yyruleno==219); - case 245: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==245); + case 215: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==215); + case 218: /* in_op ::= NOT IN */ yytestcase(yyruleno==218); + case 243: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==243); {yymsp[-1].minor.yy394 = 1;} break; case 64: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ @@ -169214,7 +173116,6 @@ static YYACTIONTYPE yy_reduce( if( p ){ parserDoubleLinkSelect(pParse, p); } - yymsp[0].minor.yy47 = p; /*A-overwrites-X*/ } break; case 88: /* selectnowith ::= selectnowith multiselect_op oneselect */ @@ -169291,9 +173192,9 @@ static YYACTIONTYPE yy_reduce( case 99: /* sclp ::= */ case 132: /* orderby_opt ::= */ yytestcase(yyruleno==132); case 142: /* groupby_opt ::= */ yytestcase(yyruleno==142); - case 232: /* exprlist ::= */ yytestcase(yyruleno==232); - case 235: /* paren_exprlist ::= */ yytestcase(yyruleno==235); - case 240: /* eidlist_opt ::= */ yytestcase(yyruleno==240); + case 230: /* exprlist ::= */ yytestcase(yyruleno==230); + case 233: /* paren_exprlist ::= */ yytestcase(yyruleno==233); + case 238: /* eidlist_opt ::= */ yytestcase(yyruleno==238); {yymsp[1].minor.yy322 = 0;} break; case 100: /* selcollist ::= sclp scanpt expr scanpt as */ @@ -169306,21 +173207,24 @@ static YYACTIONTYPE yy_reduce( case 101: /* selcollist ::= sclp scanpt STAR */ { Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0); + sqlite3ExprSetErrorOffset(p, (int)(yymsp[0].minor.yy0.z - pParse->zTail)); yymsp[-2].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy322, p); } break; case 102: /* selcollist ::= sclp scanpt nm DOT STAR */ { - Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0); - Expr *pLeft = tokenExpr(pParse, TK_ID, yymsp[-2].minor.yy0); - Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight); + Expr *pRight, *pLeft, *pDot; + pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0); + sqlite3ExprSetErrorOffset(pRight, (int)(yymsp[0].minor.yy0.z - pParse->zTail)); + pLeft = tokenExpr(pParse, TK_ID, yymsp[-2].minor.yy0); + pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight); yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, pDot); } break; case 103: /* as ::= AS nm */ case 115: /* dbnm ::= DOT nm */ yytestcase(yyruleno==115); - case 256: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==256); - case 257: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==257); + case 254: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==254); + case 255: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==255); {yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;} break; case 105: /* from ::= */ @@ -169364,7 +173268,7 @@ static YYACTIONTYPE yy_reduce( { if( yymsp[-5].minor.yy131==0 && yymsp[-1].minor.yy0.n==0 && yymsp[0].minor.yy561.pOn==0 && yymsp[0].minor.yy561.pUsing==0 ){ yymsp[-5].minor.yy131 = yymsp[-3].minor.yy131; - }else if( yymsp[-3].minor.yy131->nSrc==1 ){ + }else if( ALWAYS(yymsp[-3].minor.yy131!=0) && yymsp[-3].minor.yy131->nSrc==1 ){ yymsp[-5].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy131,0,0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy561); if( yymsp[-5].minor.yy131 ){ SrcItem *pNew = &yymsp[-5].minor.yy131->a[yymsp[-5].minor.yy131->nSrc-1]; @@ -169492,16 +173396,16 @@ static YYACTIONTYPE yy_reduce( case 146: /* limit_opt ::= */ yytestcase(yyruleno==146); case 151: /* where_opt ::= */ yytestcase(yyruleno==151); case 153: /* where_opt_ret ::= */ yytestcase(yyruleno==153); - case 229: /* case_else ::= */ yytestcase(yyruleno==229); - case 231: /* case_operand ::= */ yytestcase(yyruleno==231); - case 250: /* vinto ::= */ yytestcase(yyruleno==250); + case 228: /* case_else ::= */ yytestcase(yyruleno==228); + case 229: /* case_operand ::= */ yytestcase(yyruleno==229); + case 248: /* vinto ::= */ yytestcase(yyruleno==248); {yymsp[1].minor.yy528 = 0;} break; case 145: /* having_opt ::= HAVING expr */ case 152: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==152); case 154: /* where_opt_ret ::= WHERE expr */ yytestcase(yyruleno==154); - case 228: /* case_else ::= ELSE expr */ yytestcase(yyruleno==228); - case 249: /* vinto ::= INTO expr */ yytestcase(yyruleno==249); + case 227: /* case_else ::= ELSE expr */ yytestcase(yyruleno==227); + case 247: /* vinto ::= INTO expr */ yytestcase(yyruleno==247); {yymsp[-1].minor.yy528 = yymsp[0].minor.yy528;} break; case 147: /* limit_opt ::= LIMIT expr */ @@ -169613,11 +173517,10 @@ static YYACTIONTYPE yy_reduce( case 177: /* expr ::= LP expr RP */ {yymsp[-2].minor.yy528 = yymsp[-1].minor.yy528;} break; - case 178: /* expr ::= ID|INDEXED */ - case 179: /* expr ::= JOIN_KW */ yytestcase(yyruleno==179); + case 178: /* expr ::= ID|INDEXED|JOIN_KW */ {yymsp[0].minor.yy528=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/} break; - case 180: /* expr ::= nm DOT nm */ + case 179: /* expr ::= nm DOT nm */ { Expr *temp1 = tokenExpr(pParse,TK_ID,yymsp[-2].minor.yy0); Expr *temp2 = tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); @@ -169625,7 +173528,7 @@ static YYACTIONTYPE yy_reduce( } yymsp[-2].minor.yy528 = yylhsminor.yy528; break; - case 181: /* expr ::= nm DOT nm DOT nm */ + case 180: /* expr ::= nm DOT nm DOT nm */ { Expr *temp1 = tokenExpr(pParse,TK_ID,yymsp[-4].minor.yy0); Expr *temp2 = tokenExpr(pParse,TK_ID,yymsp[-2].minor.yy0); @@ -169638,18 +173541,18 @@ static YYACTIONTYPE yy_reduce( } yymsp[-4].minor.yy528 = yylhsminor.yy528; break; - case 182: /* term ::= NULL|FLOAT|BLOB */ - case 183: /* term ::= STRING */ yytestcase(yyruleno==183); + case 181: /* term ::= NULL|FLOAT|BLOB */ + case 182: /* term ::= STRING */ yytestcase(yyruleno==182); {yymsp[0].minor.yy528=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/} break; - case 184: /* term ::= INTEGER */ + case 183: /* term ::= INTEGER */ { yylhsminor.yy528 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1); if( yylhsminor.yy528 ) yylhsminor.yy528->w.iOfst = (int)(yymsp[0].minor.yy0.z - pParse->zTail); } yymsp[0].minor.yy528 = yylhsminor.yy528; break; - case 185: /* expr ::= VARIABLE */ + case 184: /* expr ::= VARIABLE */ { if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){ u32 n = yymsp[0].minor.yy0.n; @@ -169671,50 +173574,50 @@ static YYACTIONTYPE yy_reduce( } } break; - case 186: /* expr ::= expr COLLATE ID|STRING */ + case 185: /* expr ::= expr COLLATE ID|STRING */ { yymsp[-2].minor.yy528 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy528, &yymsp[0].minor.yy0, 1); } break; - case 187: /* expr ::= CAST LP expr AS typetoken RP */ + case 186: /* expr ::= CAST LP expr AS typetoken RP */ { yymsp[-5].minor.yy528 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1); sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy528, yymsp[-3].minor.yy528, 0); } break; - case 188: /* expr ::= ID|INDEXED LP distinct exprlist RP */ + case 187: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP */ { yylhsminor.yy528 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy322, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy394); } yymsp[-4].minor.yy528 = yylhsminor.yy528; break; - case 189: /* expr ::= ID|INDEXED LP STAR RP */ + case 188: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP */ { yylhsminor.yy528 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0); } yymsp[-3].minor.yy528 = yylhsminor.yy528; break; - case 190: /* expr ::= ID|INDEXED LP distinct exprlist RP filter_over */ + case 189: /* expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over */ { yylhsminor.yy528 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy322, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy394); sqlite3WindowAttach(pParse, yylhsminor.yy528, yymsp[0].minor.yy41); } yymsp[-5].minor.yy528 = yylhsminor.yy528; break; - case 191: /* expr ::= ID|INDEXED LP STAR RP filter_over */ + case 190: /* expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over */ { yylhsminor.yy528 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0); sqlite3WindowAttach(pParse, yylhsminor.yy528, yymsp[0].minor.yy41); } yymsp[-4].minor.yy528 = yylhsminor.yy528; break; - case 192: /* term ::= CTIME_KW */ + case 191: /* term ::= CTIME_KW */ { yylhsminor.yy528 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0); } yymsp[0].minor.yy528 = yylhsminor.yy528; break; - case 193: /* expr ::= LP nexprlist COMMA expr RP */ + case 192: /* expr ::= LP nexprlist COMMA expr RP */ { ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy322, yymsp[-1].minor.yy528); yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); @@ -169728,22 +173631,22 @@ static YYACTIONTYPE yy_reduce( } } break; - case 194: /* expr ::= expr AND expr */ + case 193: /* expr ::= expr AND expr */ {yymsp[-2].minor.yy528=sqlite3ExprAnd(pParse,yymsp[-2].minor.yy528,yymsp[0].minor.yy528);} break; - case 195: /* expr ::= expr OR expr */ - case 196: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==196); - case 197: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==197); - case 198: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==198); - case 199: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==199); - case 200: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==200); - case 201: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==201); + case 194: /* expr ::= expr OR expr */ + case 195: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==195); + case 196: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==196); + case 197: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==197); + case 198: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==198); + case 199: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==199); + case 200: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==200); {yymsp[-2].minor.yy528=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy528,yymsp[0].minor.yy528);} break; - case 202: /* likeop ::= NOT LIKE_KW|MATCH */ + case 201: /* likeop ::= NOT LIKE_KW|MATCH */ {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/} break; - case 203: /* expr ::= expr likeop expr */ + case 202: /* expr ::= expr likeop expr */ { ExprList *pList; int bNot = yymsp[-1].minor.yy0.n & 0x80000000; @@ -169755,7 +173658,7 @@ static YYACTIONTYPE yy_reduce( if( yymsp[-2].minor.yy528 ) yymsp[-2].minor.yy528->flags |= EP_InfixFunc; } break; - case 204: /* expr ::= expr likeop expr ESCAPE expr */ + case 203: /* expr ::= expr likeop expr ESCAPE expr */ { ExprList *pList; int bNot = yymsp[-3].minor.yy0.n & 0x80000000; @@ -169768,47 +173671,47 @@ static YYACTIONTYPE yy_reduce( if( yymsp[-4].minor.yy528 ) yymsp[-4].minor.yy528->flags |= EP_InfixFunc; } break; - case 205: /* expr ::= expr ISNULL|NOTNULL */ + case 204: /* expr ::= expr ISNULL|NOTNULL */ {yymsp[-1].minor.yy528 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy528,0);} break; - case 206: /* expr ::= expr NOT NULL */ + case 205: /* expr ::= expr NOT NULL */ {yymsp[-2].minor.yy528 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy528,0);} break; - case 207: /* expr ::= expr IS expr */ + case 206: /* expr ::= expr IS expr */ { yymsp[-2].minor.yy528 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy528,yymsp[0].minor.yy528); binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-2].minor.yy528, TK_ISNULL); } break; - case 208: /* expr ::= expr IS NOT expr */ + case 207: /* expr ::= expr IS NOT expr */ { yymsp[-3].minor.yy528 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy528,yymsp[0].minor.yy528); binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-3].minor.yy528, TK_NOTNULL); } break; - case 209: /* expr ::= expr IS NOT DISTINCT FROM expr */ + case 208: /* expr ::= expr IS NOT DISTINCT FROM expr */ { yymsp[-5].minor.yy528 = sqlite3PExpr(pParse,TK_IS,yymsp[-5].minor.yy528,yymsp[0].minor.yy528); binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-5].minor.yy528, TK_ISNULL); } break; - case 210: /* expr ::= expr IS DISTINCT FROM expr */ + case 209: /* expr ::= expr IS DISTINCT FROM expr */ { yymsp[-4].minor.yy528 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-4].minor.yy528,yymsp[0].minor.yy528); binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-4].minor.yy528, TK_NOTNULL); } break; - case 211: /* expr ::= NOT expr */ - case 212: /* expr ::= BITNOT expr */ yytestcase(yyruleno==212); + case 210: /* expr ::= NOT expr */ + case 211: /* expr ::= BITNOT expr */ yytestcase(yyruleno==211); {yymsp[-1].minor.yy528 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy528, 0);/*A-overwrites-B*/} break; - case 213: /* expr ::= PLUS|MINUS expr */ + case 212: /* expr ::= PLUS|MINUS expr */ { yymsp[-1].minor.yy528 = sqlite3PExpr(pParse, yymsp[-1].major==TK_PLUS ? TK_UPLUS : TK_UMINUS, yymsp[0].minor.yy528, 0); /*A-overwrites-B*/ } break; - case 214: /* expr ::= expr PTR expr */ + case 213: /* expr ::= expr PTR expr */ { ExprList *pList = sqlite3ExprListAppend(pParse, 0, yymsp[-2].minor.yy528); pList = sqlite3ExprListAppend(pParse, pList, yymsp[0].minor.yy528); @@ -169816,11 +173719,11 @@ static YYACTIONTYPE yy_reduce( } yymsp[-2].minor.yy528 = yylhsminor.yy528; break; - case 215: /* between_op ::= BETWEEN */ - case 218: /* in_op ::= IN */ yytestcase(yyruleno==218); + case 214: /* between_op ::= BETWEEN */ + case 217: /* in_op ::= IN */ yytestcase(yyruleno==217); {yymsp[0].minor.yy394 = 0;} break; - case 217: /* expr ::= expr between_op expr AND expr */ + case 216: /* expr ::= expr between_op expr AND expr */ { ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy528); pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy528); @@ -169833,7 +173736,7 @@ static YYACTIONTYPE yy_reduce( if( yymsp[-3].minor.yy394 ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0); } break; - case 220: /* expr ::= expr in_op LP exprlist RP */ + case 219: /* expr ::= expr in_op LP exprlist RP */ { if( yymsp[-1].minor.yy322==0 ){ /* Expressions of the form @@ -169854,6 +173757,11 @@ static YYACTIONTYPE yy_reduce( sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322); pRHS = sqlite3PExpr(pParse, TK_UPLUS, pRHS, 0); yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_EQ, yymsp[-4].minor.yy528, pRHS); + }else if( yymsp[-1].minor.yy322->nExpr==1 && pRHS->op==TK_SELECT ){ + yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0); + sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy528, pRHS->x.pSelect); + pRHS->x.pSelect = 0; + sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322); }else{ yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0); if( yymsp[-4].minor.yy528==0 ){ @@ -169874,20 +173782,20 @@ static YYACTIONTYPE yy_reduce( } } break; - case 221: /* expr ::= LP select RP */ + case 220: /* expr ::= LP select RP */ { yymsp[-2].minor.yy528 = sqlite3PExpr(pParse, TK_SELECT, 0, 0); sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy528, yymsp[-1].minor.yy47); } break; - case 222: /* expr ::= expr in_op LP select RP */ + case 221: /* expr ::= expr in_op LP select RP */ { yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0); sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy528, yymsp[-1].minor.yy47); if( yymsp[-3].minor.yy394 ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0); } break; - case 223: /* expr ::= expr in_op nm dbnm paren_exprlist */ + case 222: /* expr ::= expr in_op nm dbnm paren_exprlist */ { SrcList *pSrc = sqlite3SrcListAppend(pParse, 0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0); @@ -169897,14 +173805,14 @@ static YYACTIONTYPE yy_reduce( if( yymsp[-3].minor.yy394 ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0); } break; - case 224: /* expr ::= EXISTS LP select RP */ + case 223: /* expr ::= EXISTS LP select RP */ { Expr *p; p = yymsp[-3].minor.yy528 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0); sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy47); } break; - case 225: /* expr ::= CASE case_operand case_exprlist case_else END */ + case 224: /* expr ::= CASE case_operand case_exprlist case_else END */ { yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy528, 0); if( yymsp[-4].minor.yy528 ){ @@ -169916,32 +173824,29 @@ static YYACTIONTYPE yy_reduce( } } break; - case 226: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ + case 225: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ { yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[-2].minor.yy528); yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[0].minor.yy528); } break; - case 227: /* case_exprlist ::= WHEN expr THEN expr */ + case 226: /* case_exprlist ::= WHEN expr THEN expr */ { yymsp[-3].minor.yy322 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy528); yymsp[-3].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322, yymsp[0].minor.yy528); } break; - case 230: /* case_operand ::= expr */ -{yymsp[0].minor.yy528 = yymsp[0].minor.yy528; /*A-overwrites-X*/} - break; - case 233: /* nexprlist ::= nexprlist COMMA expr */ + case 231: /* nexprlist ::= nexprlist COMMA expr */ {yymsp[-2].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy322,yymsp[0].minor.yy528);} break; - case 234: /* nexprlist ::= expr */ + case 232: /* nexprlist ::= expr */ {yymsp[0].minor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy528); /*A-overwrites-Y*/} break; - case 236: /* paren_exprlist ::= LP exprlist RP */ - case 241: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==241); + case 234: /* paren_exprlist ::= LP exprlist RP */ + case 239: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==239); {yymsp[-2].minor.yy322 = yymsp[-1].minor.yy322;} break; - case 237: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ + case 235: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ { sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy322, yymsp[-10].minor.yy394, @@ -169951,48 +173856,48 @@ static YYACTIONTYPE yy_reduce( } } break; - case 238: /* uniqueflag ::= UNIQUE */ - case 280: /* raisetype ::= ABORT */ yytestcase(yyruleno==280); + case 236: /* uniqueflag ::= UNIQUE */ + case 278: /* raisetype ::= ABORT */ yytestcase(yyruleno==278); {yymsp[0].minor.yy394 = OE_Abort;} break; - case 239: /* uniqueflag ::= */ + case 237: /* uniqueflag ::= */ {yymsp[1].minor.yy394 = OE_None;} break; - case 242: /* eidlist ::= eidlist COMMA nm collate sortorder */ + case 240: /* eidlist ::= eidlist COMMA nm collate sortorder */ { yymsp[-4].minor.yy322 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy322, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy394, yymsp[0].minor.yy394); } break; - case 243: /* eidlist ::= nm collate sortorder */ + case 241: /* eidlist ::= nm collate sortorder */ { yymsp[-2].minor.yy322 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy394, yymsp[0].minor.yy394); /*A-overwrites-Y*/ } break; - case 246: /* cmd ::= DROP INDEX ifexists fullname */ + case 244: /* cmd ::= DROP INDEX ifexists fullname */ {sqlite3DropIndex(pParse, yymsp[0].minor.yy131, yymsp[-1].minor.yy394);} break; - case 247: /* cmd ::= VACUUM vinto */ + case 245: /* cmd ::= VACUUM vinto */ {sqlite3Vacuum(pParse,0,yymsp[0].minor.yy528);} break; - case 248: /* cmd ::= VACUUM nm vinto */ + case 246: /* cmd ::= VACUUM nm vinto */ {sqlite3Vacuum(pParse,&yymsp[-1].minor.yy0,yymsp[0].minor.yy528);} break; - case 251: /* cmd ::= PRAGMA nm dbnm */ + case 249: /* cmd ::= PRAGMA nm dbnm */ {sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);} break; - case 252: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ + case 250: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);} break; - case 253: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ + case 251: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);} break; - case 254: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ + case 252: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);} break; - case 255: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ + case 253: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);} break; - case 258: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ + case 256: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ { Token all; all.z = yymsp[-3].minor.yy0.z; @@ -170000,50 +173905,50 @@ static YYACTIONTYPE yy_reduce( sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy33, &all); } break; - case 259: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ + case 257: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ { sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy394, yymsp[-4].minor.yy180.a, yymsp[-4].minor.yy180.b, yymsp[-2].minor.yy131, yymsp[0].minor.yy528, yymsp[-10].minor.yy394, yymsp[-8].minor.yy394); yymsp[-10].minor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); /*A-overwrites-T*/ } break; - case 260: /* trigger_time ::= BEFORE|AFTER */ + case 258: /* trigger_time ::= BEFORE|AFTER */ { yymsp[0].minor.yy394 = yymsp[0].major; /*A-overwrites-X*/ } break; - case 261: /* trigger_time ::= INSTEAD OF */ + case 259: /* trigger_time ::= INSTEAD OF */ { yymsp[-1].minor.yy394 = TK_INSTEAD;} break; - case 262: /* trigger_time ::= */ + case 260: /* trigger_time ::= */ { yymsp[1].minor.yy394 = TK_BEFORE; } break; - case 263: /* trigger_event ::= DELETE|INSERT */ - case 264: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==264); + case 261: /* trigger_event ::= DELETE|INSERT */ + case 262: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==262); {yymsp[0].minor.yy180.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy180.b = 0;} break; - case 265: /* trigger_event ::= UPDATE OF idlist */ + case 263: /* trigger_event ::= UPDATE OF idlist */ {yymsp[-2].minor.yy180.a = TK_UPDATE; yymsp[-2].minor.yy180.b = yymsp[0].minor.yy254;} break; - case 266: /* when_clause ::= */ - case 285: /* key_opt ::= */ yytestcase(yyruleno==285); + case 264: /* when_clause ::= */ + case 283: /* key_opt ::= */ yytestcase(yyruleno==283); { yymsp[1].minor.yy528 = 0; } break; - case 267: /* when_clause ::= WHEN expr */ - case 286: /* key_opt ::= KEY expr */ yytestcase(yyruleno==286); + case 265: /* when_clause ::= WHEN expr */ + case 284: /* key_opt ::= KEY expr */ yytestcase(yyruleno==284); { yymsp[-1].minor.yy528 = yymsp[0].minor.yy528; } break; - case 268: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ + case 266: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ { assert( yymsp[-2].minor.yy33!=0 ); yymsp[-2].minor.yy33->pLast->pNext = yymsp[-1].minor.yy33; yymsp[-2].minor.yy33->pLast = yymsp[-1].minor.yy33; } break; - case 269: /* trigger_cmd_list ::= trigger_cmd SEMI */ + case 267: /* trigger_cmd_list ::= trigger_cmd SEMI */ { assert( yymsp[-1].minor.yy33!=0 ); yymsp[-1].minor.yy33->pLast = yymsp[-1].minor.yy33; } break; - case 270: /* trnm ::= nm DOT nm */ + case 268: /* trnm ::= nm DOT nm */ { yymsp[-2].minor.yy0 = yymsp[0].minor.yy0; sqlite3ErrorMsg(pParse, @@ -170051,39 +173956,39 @@ static YYACTIONTYPE yy_reduce( "statements within triggers"); } break; - case 271: /* tridxby ::= INDEXED BY nm */ + case 269: /* tridxby ::= INDEXED BY nm */ { sqlite3ErrorMsg(pParse, "the INDEXED BY clause is not allowed on UPDATE or DELETE statements " "within triggers"); } break; - case 272: /* tridxby ::= NOT INDEXED */ + case 270: /* tridxby ::= NOT INDEXED */ { sqlite3ErrorMsg(pParse, "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements " "within triggers"); } break; - case 273: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ + case 271: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ {yylhsminor.yy33 = sqlite3TriggerUpdateStep(pParse, &yymsp[-6].minor.yy0, yymsp[-2].minor.yy131, yymsp[-3].minor.yy322, yymsp[-1].minor.yy528, yymsp[-7].minor.yy394, yymsp[-8].minor.yy0.z, yymsp[0].minor.yy522);} yymsp[-8].minor.yy33 = yylhsminor.yy33; break; - case 274: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ + case 272: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ { yylhsminor.yy33 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy254,yymsp[-2].minor.yy47,yymsp[-6].minor.yy394,yymsp[-1].minor.yy444,yymsp[-7].minor.yy522,yymsp[0].minor.yy522);/*yylhsminor.yy33-overwrites-yymsp[-6].minor.yy394*/ } yymsp[-7].minor.yy33 = yylhsminor.yy33; break; - case 275: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ + case 273: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ {yylhsminor.yy33 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy528, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy522);} yymsp[-5].minor.yy33 = yylhsminor.yy33; break; - case 276: /* trigger_cmd ::= scanpt select scanpt */ + case 274: /* trigger_cmd ::= scanpt select scanpt */ {yylhsminor.yy33 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy47, yymsp[-2].minor.yy522, yymsp[0].minor.yy522); /*yylhsminor.yy33-overwrites-yymsp[-1].minor.yy47*/} yymsp[-2].minor.yy33 = yylhsminor.yy33; break; - case 277: /* expr ::= RAISE LP IGNORE RP */ + case 275: /* expr ::= RAISE LP IGNORE RP */ { yymsp[-3].minor.yy528 = sqlite3PExpr(pParse, TK_RAISE, 0, 0); if( yymsp[-3].minor.yy528 ){ @@ -170091,7 +173996,7 @@ static YYACTIONTYPE yy_reduce( } } break; - case 278: /* expr ::= RAISE LP raisetype COMMA nm RP */ + case 276: /* expr ::= RAISE LP raisetype COMMA nm RP */ { yymsp[-5].minor.yy528 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1); if( yymsp[-5].minor.yy528 ) { @@ -170099,118 +174004,114 @@ static YYACTIONTYPE yy_reduce( } } break; - case 279: /* raisetype ::= ROLLBACK */ + case 277: /* raisetype ::= ROLLBACK */ {yymsp[0].minor.yy394 = OE_Rollback;} break; - case 281: /* raisetype ::= FAIL */ + case 279: /* raisetype ::= FAIL */ {yymsp[0].minor.yy394 = OE_Fail;} break; - case 282: /* cmd ::= DROP TRIGGER ifexists fullname */ + case 280: /* cmd ::= DROP TRIGGER ifexists fullname */ { sqlite3DropTrigger(pParse,yymsp[0].minor.yy131,yymsp[-1].minor.yy394); } break; - case 283: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ + case 281: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ { sqlite3Attach(pParse, yymsp[-3].minor.yy528, yymsp[-1].minor.yy528, yymsp[0].minor.yy528); } break; - case 284: /* cmd ::= DETACH database_kw_opt expr */ + case 282: /* cmd ::= DETACH database_kw_opt expr */ { sqlite3Detach(pParse, yymsp[0].minor.yy528); } break; - case 287: /* cmd ::= REINDEX */ + case 285: /* cmd ::= REINDEX */ {sqlite3Reindex(pParse, 0, 0);} break; - case 288: /* cmd ::= REINDEX nm dbnm */ + case 286: /* cmd ::= REINDEX nm dbnm */ {sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} break; - case 289: /* cmd ::= ANALYZE */ + case 287: /* cmd ::= ANALYZE */ {sqlite3Analyze(pParse, 0, 0);} break; - case 290: /* cmd ::= ANALYZE nm dbnm */ + case 288: /* cmd ::= ANALYZE nm dbnm */ {sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} break; - case 291: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ + case 289: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ { sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy131,&yymsp[0].minor.yy0); } break; - case 292: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ + case 290: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ { yymsp[-1].minor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-1].minor.yy0.z) + pParse->sLastToken.n; sqlite3AlterFinishAddColumn(pParse, &yymsp[-1].minor.yy0); } break; - case 293: /* cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ + case 291: /* cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ { sqlite3AlterDropColumn(pParse, yymsp[-3].minor.yy131, &yymsp[0].minor.yy0); } break; - case 294: /* add_column_fullname ::= fullname */ + case 292: /* add_column_fullname ::= fullname */ { disableLookaside(pParse); sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy131); } break; - case 295: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ + case 293: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ { sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy131, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); } break; - case 296: /* cmd ::= create_vtab */ + case 294: /* cmd ::= create_vtab */ {sqlite3VtabFinishParse(pParse,0);} break; - case 297: /* cmd ::= create_vtab LP vtabarglist RP */ + case 295: /* cmd ::= create_vtab LP vtabarglist RP */ {sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);} break; - case 298: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ + case 296: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ { sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy394); } break; - case 299: /* vtabarg ::= */ + case 297: /* vtabarg ::= */ {sqlite3VtabArgInit(pParse);} break; - case 300: /* vtabargtoken ::= ANY */ - case 301: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==301); - case 302: /* lp ::= LP */ yytestcase(yyruleno==302); + case 298: /* vtabargtoken ::= ANY */ + case 299: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==299); + case 300: /* lp ::= LP */ yytestcase(yyruleno==300); {sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);} break; - case 303: /* with ::= WITH wqlist */ - case 304: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==304); + case 301: /* with ::= WITH wqlist */ + case 302: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==302); { sqlite3WithPush(pParse, yymsp[0].minor.yy521, 1); } break; - case 305: /* wqas ::= AS */ + case 303: /* wqas ::= AS */ {yymsp[0].minor.yy516 = M10d_Any;} break; - case 306: /* wqas ::= AS MATERIALIZED */ + case 304: /* wqas ::= AS MATERIALIZED */ {yymsp[-1].minor.yy516 = M10d_Yes;} break; - case 307: /* wqas ::= AS NOT MATERIALIZED */ + case 305: /* wqas ::= AS NOT MATERIALIZED */ {yymsp[-2].minor.yy516 = M10d_No;} break; - case 308: /* wqitem ::= nm eidlist_opt wqas LP select RP */ + case 306: /* wqitem ::= nm eidlist_opt wqas LP select RP */ { yymsp[-5].minor.yy385 = sqlite3CteNew(pParse, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy322, yymsp[-1].minor.yy47, yymsp[-3].minor.yy516); /*A-overwrites-X*/ } break; - case 309: /* wqlist ::= wqitem */ + case 307: /* wqlist ::= wqitem */ { yymsp[0].minor.yy521 = sqlite3WithAdd(pParse, 0, yymsp[0].minor.yy385); /*A-overwrites-X*/ } break; - case 310: /* wqlist ::= wqlist COMMA wqitem */ + case 308: /* wqlist ::= wqlist COMMA wqitem */ { yymsp[-2].minor.yy521 = sqlite3WithAdd(pParse, yymsp[-2].minor.yy521, yymsp[0].minor.yy385); } break; - case 311: /* windowdefn_list ::= windowdefn */ -{ yylhsminor.yy41 = yymsp[0].minor.yy41; } - yymsp[0].minor.yy41 = yylhsminor.yy41; - break; - case 312: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */ + case 309: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */ { assert( yymsp[0].minor.yy41!=0 ); sqlite3WindowChain(pParse, yymsp[0].minor.yy41, yymsp[-2].minor.yy41); @@ -170219,7 +174120,7 @@ static YYACTIONTYPE yy_reduce( } yymsp[-2].minor.yy41 = yylhsminor.yy41; break; - case 313: /* windowdefn ::= nm AS LP window RP */ + case 310: /* windowdefn ::= nm AS LP window RP */ { if( ALWAYS(yymsp[-1].minor.yy41) ){ yymsp[-1].minor.yy41->zName = sqlite3DbStrNDup(pParse->db, yymsp[-4].minor.yy0.z, yymsp[-4].minor.yy0.n); @@ -170228,90 +174129,83 @@ static YYACTIONTYPE yy_reduce( } yymsp[-4].minor.yy41 = yylhsminor.yy41; break; - case 314: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */ + case 311: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */ { yymsp[-4].minor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, yymsp[-2].minor.yy322, yymsp[-1].minor.yy322, 0); } break; - case 315: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ + case 312: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ { yylhsminor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, yymsp[-2].minor.yy322, yymsp[-1].minor.yy322, &yymsp[-5].minor.yy0); } yymsp[-5].minor.yy41 = yylhsminor.yy41; break; - case 316: /* window ::= ORDER BY sortlist frame_opt */ + case 313: /* window ::= ORDER BY sortlist frame_opt */ { yymsp[-3].minor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, 0, yymsp[-1].minor.yy322, 0); } break; - case 317: /* window ::= nm ORDER BY sortlist frame_opt */ + case 314: /* window ::= nm ORDER BY sortlist frame_opt */ { yylhsminor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, 0, yymsp[-1].minor.yy322, &yymsp[-4].minor.yy0); } yymsp[-4].minor.yy41 = yylhsminor.yy41; break; - case 318: /* window ::= frame_opt */ - case 337: /* filter_over ::= over_clause */ yytestcase(yyruleno==337); -{ - yylhsminor.yy41 = yymsp[0].minor.yy41; -} - yymsp[0].minor.yy41 = yylhsminor.yy41; - break; - case 319: /* window ::= nm frame_opt */ + case 315: /* window ::= nm frame_opt */ { yylhsminor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, 0, 0, &yymsp[-1].minor.yy0); } yymsp[-1].minor.yy41 = yylhsminor.yy41; break; - case 320: /* frame_opt ::= */ + case 316: /* frame_opt ::= */ { yymsp[1].minor.yy41 = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0); } break; - case 321: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ + case 317: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ { yylhsminor.yy41 = sqlite3WindowAlloc(pParse, yymsp[-2].minor.yy394, yymsp[-1].minor.yy595.eType, yymsp[-1].minor.yy595.pExpr, TK_CURRENT, 0, yymsp[0].minor.yy516); } yymsp[-2].minor.yy41 = yylhsminor.yy41; break; - case 322: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ + case 318: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ { yylhsminor.yy41 = sqlite3WindowAlloc(pParse, yymsp[-5].minor.yy394, yymsp[-3].minor.yy595.eType, yymsp[-3].minor.yy595.pExpr, yymsp[-1].minor.yy595.eType, yymsp[-1].minor.yy595.pExpr, yymsp[0].minor.yy516); } yymsp[-5].minor.yy41 = yylhsminor.yy41; break; - case 324: /* frame_bound_s ::= frame_bound */ - case 326: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==326); + case 320: /* frame_bound_s ::= frame_bound */ + case 322: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==322); {yylhsminor.yy595 = yymsp[0].minor.yy595;} yymsp[0].minor.yy595 = yylhsminor.yy595; break; - case 325: /* frame_bound_s ::= UNBOUNDED PRECEDING */ - case 327: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==327); - case 329: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==329); + case 321: /* frame_bound_s ::= UNBOUNDED PRECEDING */ + case 323: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==323); + case 325: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==325); {yylhsminor.yy595.eType = yymsp[-1].major; yylhsminor.yy595.pExpr = 0;} yymsp[-1].minor.yy595 = yylhsminor.yy595; break; - case 328: /* frame_bound ::= expr PRECEDING|FOLLOWING */ + case 324: /* frame_bound ::= expr PRECEDING|FOLLOWING */ {yylhsminor.yy595.eType = yymsp[0].major; yylhsminor.yy595.pExpr = yymsp[-1].minor.yy528;} yymsp[-1].minor.yy595 = yylhsminor.yy595; break; - case 330: /* frame_exclude_opt ::= */ + case 326: /* frame_exclude_opt ::= */ {yymsp[1].minor.yy516 = 0;} break; - case 331: /* frame_exclude_opt ::= EXCLUDE frame_exclude */ + case 327: /* frame_exclude_opt ::= EXCLUDE frame_exclude */ {yymsp[-1].minor.yy516 = yymsp[0].minor.yy516;} break; - case 332: /* frame_exclude ::= NO OTHERS */ - case 333: /* frame_exclude ::= CURRENT ROW */ yytestcase(yyruleno==333); + case 328: /* frame_exclude ::= NO OTHERS */ + case 329: /* frame_exclude ::= CURRENT ROW */ yytestcase(yyruleno==329); {yymsp[-1].minor.yy516 = yymsp[-1].major; /*A-overwrites-X*/} break; - case 334: /* frame_exclude ::= GROUP|TIES */ + case 330: /* frame_exclude ::= GROUP|TIES */ {yymsp[0].minor.yy516 = yymsp[0].major; /*A-overwrites-X*/} break; - case 335: /* window_clause ::= WINDOW windowdefn_list */ + case 331: /* window_clause ::= WINDOW windowdefn_list */ { yymsp[-1].minor.yy41 = yymsp[0].minor.yy41; } break; - case 336: /* filter_over ::= filter_clause over_clause */ + case 332: /* filter_over ::= filter_clause over_clause */ { if( yymsp[0].minor.yy41 ){ yymsp[0].minor.yy41->pFilter = yymsp[-1].minor.yy528; @@ -170322,7 +174216,13 @@ static YYACTIONTYPE yy_reduce( } yymsp[-1].minor.yy41 = yylhsminor.yy41; break; - case 338: /* filter_over ::= filter_clause */ + case 333: /* filter_over ::= over_clause */ +{ + yylhsminor.yy41 = yymsp[0].minor.yy41; +} + yymsp[0].minor.yy41 = yylhsminor.yy41; + break; + case 334: /* filter_over ::= filter_clause */ { yylhsminor.yy41 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); if( yylhsminor.yy41 ){ @@ -170334,13 +174234,13 @@ static YYACTIONTYPE yy_reduce( } yymsp[0].minor.yy41 = yylhsminor.yy41; break; - case 339: /* over_clause ::= OVER LP window RP */ + case 335: /* over_clause ::= OVER LP window RP */ { yymsp[-3].minor.yy41 = yymsp[-1].minor.yy41; assert( yymsp[-3].minor.yy41!=0 ); } break; - case 340: /* over_clause ::= OVER nm */ + case 336: /* over_clause ::= OVER nm */ { yymsp[-1].minor.yy41 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); if( yymsp[-1].minor.yy41 ){ @@ -170348,73 +174248,75 @@ static YYACTIONTYPE yy_reduce( } } break; - case 341: /* filter_clause ::= FILTER LP WHERE expr RP */ + case 337: /* filter_clause ::= FILTER LP WHERE expr RP */ { yymsp[-4].minor.yy528 = yymsp[-1].minor.yy528; } break; default: - /* (342) input ::= cmdlist */ yytestcase(yyruleno==342); - /* (343) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==343); - /* (344) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=344); - /* (345) ecmd ::= SEMI */ yytestcase(yyruleno==345); - /* (346) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==346); - /* (347) ecmd ::= explain cmdx SEMI (NEVER REDUCES) */ assert(yyruleno!=347); - /* (348) trans_opt ::= */ yytestcase(yyruleno==348); - /* (349) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==349); - /* (350) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==350); - /* (351) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==351); - /* (352) savepoint_opt ::= */ yytestcase(yyruleno==352); - /* (353) cmd ::= create_table create_table_args */ yytestcase(yyruleno==353); - /* (354) table_option_set ::= table_option (OPTIMIZED OUT) */ assert(yyruleno!=354); - /* (355) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==355); - /* (356) columnlist ::= columnname carglist */ yytestcase(yyruleno==356); - /* (357) nm ::= ID|INDEXED */ yytestcase(yyruleno==357); - /* (358) nm ::= STRING */ yytestcase(yyruleno==358); - /* (359) nm ::= JOIN_KW */ yytestcase(yyruleno==359); - /* (360) typetoken ::= typename */ yytestcase(yyruleno==360); - /* (361) typename ::= ID|STRING */ yytestcase(yyruleno==361); - /* (362) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=362); - /* (363) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=363); - /* (364) carglist ::= carglist ccons */ yytestcase(yyruleno==364); - /* (365) carglist ::= */ yytestcase(yyruleno==365); - /* (366) ccons ::= NULL onconf */ yytestcase(yyruleno==366); - /* (367) ccons ::= GENERATED ALWAYS AS generated */ yytestcase(yyruleno==367); - /* (368) ccons ::= AS generated */ yytestcase(yyruleno==368); - /* (369) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==369); - /* (370) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==370); - /* (371) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=371); - /* (372) tconscomma ::= */ yytestcase(yyruleno==372); - /* (373) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=373); - /* (374) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=374); - /* (375) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=375); - /* (376) oneselect ::= values */ yytestcase(yyruleno==376); - /* (377) sclp ::= selcollist COMMA */ yytestcase(yyruleno==377); - /* (378) as ::= ID|STRING */ yytestcase(yyruleno==378); - /* (379) indexed_opt ::= indexed_by (OPTIMIZED OUT) */ assert(yyruleno!=379); - /* (380) returning ::= */ yytestcase(yyruleno==380); - /* (381) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=381); - /* (382) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==382); - /* (383) exprlist ::= nexprlist */ yytestcase(yyruleno==383); - /* (384) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=384); - /* (385) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=385); - /* (386) nmnum ::= ON */ yytestcase(yyruleno==386); - /* (387) nmnum ::= DELETE */ yytestcase(yyruleno==387); - /* (388) nmnum ::= DEFAULT */ yytestcase(yyruleno==388); - /* (389) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==389); - /* (390) foreach_clause ::= */ yytestcase(yyruleno==390); - /* (391) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==391); - /* (392) trnm ::= nm */ yytestcase(yyruleno==392); - /* (393) tridxby ::= */ yytestcase(yyruleno==393); - /* (394) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==394); - /* (395) database_kw_opt ::= */ yytestcase(yyruleno==395); - /* (396) kwcolumn_opt ::= */ yytestcase(yyruleno==396); - /* (397) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==397); - /* (398) vtabarglist ::= vtabarg */ yytestcase(yyruleno==398); - /* (399) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==399); - /* (400) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==400); - /* (401) anylist ::= */ yytestcase(yyruleno==401); - /* (402) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==402); - /* (403) anylist ::= anylist ANY */ yytestcase(yyruleno==403); - /* (404) with ::= */ yytestcase(yyruleno==404); + /* (338) input ::= cmdlist */ yytestcase(yyruleno==338); + /* (339) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==339); + /* (340) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=340); + /* (341) ecmd ::= SEMI */ yytestcase(yyruleno==341); + /* (342) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==342); + /* (343) ecmd ::= explain cmdx SEMI (NEVER REDUCES) */ assert(yyruleno!=343); + /* (344) trans_opt ::= */ yytestcase(yyruleno==344); + /* (345) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==345); + /* (346) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==346); + /* (347) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==347); + /* (348) savepoint_opt ::= */ yytestcase(yyruleno==348); + /* (349) cmd ::= create_table create_table_args */ yytestcase(yyruleno==349); + /* (350) table_option_set ::= table_option (OPTIMIZED OUT) */ assert(yyruleno!=350); + /* (351) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==351); + /* (352) columnlist ::= columnname carglist */ yytestcase(yyruleno==352); + /* (353) nm ::= ID|INDEXED|JOIN_KW */ yytestcase(yyruleno==353); + /* (354) nm ::= STRING */ yytestcase(yyruleno==354); + /* (355) typetoken ::= typename */ yytestcase(yyruleno==355); + /* (356) typename ::= ID|STRING */ yytestcase(yyruleno==356); + /* (357) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=357); + /* (358) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=358); + /* (359) carglist ::= carglist ccons */ yytestcase(yyruleno==359); + /* (360) carglist ::= */ yytestcase(yyruleno==360); + /* (361) ccons ::= NULL onconf */ yytestcase(yyruleno==361); + /* (362) ccons ::= GENERATED ALWAYS AS generated */ yytestcase(yyruleno==362); + /* (363) ccons ::= AS generated */ yytestcase(yyruleno==363); + /* (364) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==364); + /* (365) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==365); + /* (366) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=366); + /* (367) tconscomma ::= */ yytestcase(yyruleno==367); + /* (368) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=368); + /* (369) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=369); + /* (370) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=370); + /* (371) oneselect ::= values */ yytestcase(yyruleno==371); + /* (372) sclp ::= selcollist COMMA */ yytestcase(yyruleno==372); + /* (373) as ::= ID|STRING */ yytestcase(yyruleno==373); + /* (374) indexed_opt ::= indexed_by (OPTIMIZED OUT) */ assert(yyruleno!=374); + /* (375) returning ::= */ yytestcase(yyruleno==375); + /* (376) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=376); + /* (377) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==377); + /* (378) case_operand ::= expr */ yytestcase(yyruleno==378); + /* (379) exprlist ::= nexprlist */ yytestcase(yyruleno==379); + /* (380) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=380); + /* (381) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=381); + /* (382) nmnum ::= ON */ yytestcase(yyruleno==382); + /* (383) nmnum ::= DELETE */ yytestcase(yyruleno==383); + /* (384) nmnum ::= DEFAULT */ yytestcase(yyruleno==384); + /* (385) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==385); + /* (386) foreach_clause ::= */ yytestcase(yyruleno==386); + /* (387) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==387); + /* (388) trnm ::= nm */ yytestcase(yyruleno==388); + /* (389) tridxby ::= */ yytestcase(yyruleno==389); + /* (390) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==390); + /* (391) database_kw_opt ::= */ yytestcase(yyruleno==391); + /* (392) kwcolumn_opt ::= */ yytestcase(yyruleno==392); + /* (393) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==393); + /* (394) vtabarglist ::= vtabarg */ yytestcase(yyruleno==394); + /* (395) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==395); + /* (396) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==396); + /* (397) anylist ::= */ yytestcase(yyruleno==397); + /* (398) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==398); + /* (399) anylist ::= anylist ANY */ yytestcase(yyruleno==399); + /* (400) with ::= */ yytestcase(yyruleno==400); + /* (401) windowdefn_list ::= windowdefn (OPTIMIZED OUT) */ assert(yyruleno!=401); + /* (402) window ::= frame_opt (OPTIMIZED OUT) */ assert(yyruleno!=402); break; /********** End reduce actions ************************************************/ }; @@ -170990,7 +174892,7 @@ static const unsigned char aKWHash[127] = { /* aKWNext[] forms the hash collision chain. If aKWHash[i]==0 ** then the i-th keyword has no more hash collisions. Otherwise, ** the next keyword with the same hash is aKWHash[i]-1. */ -static const unsigned char aKWNext[147] = { +static const unsigned char aKWNext[148] = {0, 0, 0, 0, 0, 4, 0, 43, 0, 0, 106, 114, 0, 0, 0, 2, 0, 0, 143, 0, 0, 0, 13, 0, 0, 0, 0, 141, 0, 0, 119, 52, 0, 0, 137, 12, 0, 0, 62, 0, @@ -171005,7 +174907,7 @@ static const unsigned char aKWNext[147] = { 102, 0, 0, 87, }; /* aKWLen[i] is the length (in bytes) of the i-th keyword */ -static const unsigned char aKWLen[147] = { +static const unsigned char aKWLen[148] = {0, 7, 7, 5, 4, 6, 4, 5, 3, 6, 7, 3, 6, 6, 7, 7, 3, 8, 2, 6, 5, 4, 4, 3, 10, 4, 7, 6, 9, 4, 2, 6, 5, 9, 9, 4, 7, 3, 2, 4, @@ -171021,7 +174923,7 @@ static const unsigned char aKWLen[147] = { }; /* aKWOffset[i] is the index into zKWText[] of the start of ** the text for the i-th keyword. */ -static const unsigned short int aKWOffset[147] = { +static const unsigned short int aKWOffset[148] = {0, 0, 2, 2, 8, 9, 14, 16, 20, 23, 25, 25, 29, 33, 36, 41, 46, 48, 53, 54, 59, 62, 65, 67, 69, 78, 81, 86, 90, 90, 94, 99, 101, 105, 111, 119, 123, 123, 123, 126, @@ -171036,7 +174938,7 @@ static const unsigned short int aKWOffset[147] = { 648, 650, 655, 659, }; /* aKWCode[i] is the parser symbol code for the i-th keyword */ -static const unsigned char aKWCode[147] = { +static const unsigned char aKWCode[148] = {0, TK_REINDEX, TK_INDEXED, TK_INDEX, TK_DESC, TK_ESCAPE, TK_EACH, TK_CHECK, TK_KEY, TK_BEFORE, TK_FOREIGN, TK_FOR, TK_IGNORE, TK_LIKE_KW, TK_EXPLAIN, TK_INSTEAD, @@ -171203,185 +175105,185 @@ static const unsigned char aKWCode[147] = { static int keywordCode(const char *z, int n, int *pType){ int i, j; const char *zKW; - if( n>=2 ){ - i = ((charMap(z[0])*4) ^ (charMap(z[n-1])*3) ^ n*1) % 127; - for(i=((int)aKWHash[i])-1; i>=0; i=((int)aKWNext[i])-1){ - if( aKWLen[i]!=n ) continue; - zKW = &zKWText[aKWOffset[i]]; + assert( n>=2 ); + i = ((charMap(z[0])*4) ^ (charMap(z[n-1])*3) ^ n*1) % 127; + for(i=(int)aKWHash[i]; i>0; i=aKWNext[i]){ + if( aKWLen[i]!=n ) continue; + zKW = &zKWText[aKWOffset[i]]; #ifdef SQLITE_ASCII - if( (z[0]&~0x20)!=zKW[0] ) continue; - if( (z[1]&~0x20)!=zKW[1] ) continue; - j = 2; - while( j=2 ) keywordCode((char*)z, n, &id); return id; } #define SQLITE_N_KEYWORD 147 SQLITE_API int sqlite3_keyword_name(int i,const char **pzName,int *pnName){ if( i<0 || i>=SQLITE_N_KEYWORD ) return SQLITE_ERROR; + i++; *pzName = zKWText + aKWOffset[i]; *pnName = aKWLen[i]; return SQLITE_OK; @@ -171680,7 +175582,7 @@ SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *z, int *tokenType){ testcase( z[0]=='0' ); testcase( z[0]=='1' ); testcase( z[0]=='2' ); testcase( z[0]=='3' ); testcase( z[0]=='4' ); testcase( z[0]=='5' ); testcase( z[0]=='6' ); testcase( z[0]=='7' ); testcase( z[0]=='8' ); - testcase( z[0]=='9' ); + testcase( z[0]=='9' ); testcase( z[0]=='.' ); *tokenType = TK_INTEGER; #ifndef SQLITE_OMIT_HEX_INTEGER if( z[0]=='0' && (z[1]=='x' || z[1]=='X') && sqlite3Isxdigit(z[2]) ){ @@ -171752,7 +175654,8 @@ SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *z, int *tokenType){ return i; } case CC_KYWD0: { - for(i=1; aiClass[z[i]]<=CC_KYWD; i++){} + if( aiClass[z[1]]>CC_KYWD ){ i = 1; break; } + for(i=2; aiClass[z[i]]<=CC_KYWD; i++){} if( IdChar(z[i]) ){ /* This token started out using characters that can appear in keywords, ** but z[i] is a character not allowed within keywords, so this must @@ -172531,12 +176434,6 @@ static int sqlite3TestExtInit(sqlite3 *db){ ** Forward declarations of external module initializer functions ** for modules that need them. */ -#ifdef SQLITE_ENABLE_FTS1 -SQLITE_PRIVATE int sqlite3Fts1Init(sqlite3*); -#endif -#ifdef SQLITE_ENABLE_FTS2 -SQLITE_PRIVATE int sqlite3Fts2Init(sqlite3*); -#endif #ifdef SQLITE_ENABLE_FTS5 SQLITE_PRIVATE int sqlite3Fts5Init(sqlite3*); #endif @@ -172549,12 +176446,6 @@ SQLITE_PRIVATE int sqlite3StmtVtabInit(sqlite3*); ** built-in extensions. */ static int (*const sqlite3BuiltinExtensions[])(sqlite3*) = { -#ifdef SQLITE_ENABLE_FTS1 - sqlite3Fts1Init, -#endif -#ifdef SQLITE_ENABLE_FTS2 - sqlite3Fts2Init, -#endif #ifdef SQLITE_ENABLE_FTS3 sqlite3Fts3Init, #endif @@ -172920,9 +176811,21 @@ SQLITE_API int sqlite3_config(int op, ...){ va_list ap; int rc = SQLITE_OK; - /* sqlite3_config() shall return SQLITE_MISUSE if it is invoked while - ** the SQLite library is in use. */ - if( sqlite3GlobalConfig.isInit ) return SQLITE_MISUSE_BKPT; + /* sqlite3_config() normally returns SQLITE_MISUSE if it is invoked while + ** the SQLite library is in use. Except, a few selected opcodes + ** are allowed. + */ + if( sqlite3GlobalConfig.isInit ){ + static const u64 mAnytimeConfigOption = 0 + | MASKBIT64( SQLITE_CONFIG_LOG ) + | MASKBIT64( SQLITE_CONFIG_PCACHE_HDRSZ ) + ; + if( op<0 || op>63 || (MASKBIT64(op) & mAnytimeConfigOption)==0 ){ + return SQLITE_MISUSE_BKPT; + } + testcase( op==SQLITE_CONFIG_LOG ); + testcase( op==SQLITE_CONFIG_PCACHE_HDRSZ ); + } va_start(ap, op); switch( op ){ @@ -172991,6 +176894,7 @@ SQLITE_API int sqlite3_config(int op, ...){ break; } case SQLITE_CONFIG_MEMSTATUS: { + assert( !sqlite3GlobalConfig.isInit ); /* Cannot change at runtime */ /* EVIDENCE-OF: R-61275-35157 The SQLITE_CONFIG_MEMSTATUS option takes ** single argument of type int, interpreted as a boolean, which enables ** or disables the collection of memory allocation statistics. */ @@ -173114,8 +177018,10 @@ SQLITE_API int sqlite3_config(int op, ...){ ** sqlite3GlobalConfig.xLog = va_arg(ap, void(*)(void*,int,const char*)); */ typedef void(*LOGFUNC_t)(void*,int,const char*); - sqlite3GlobalConfig.xLog = va_arg(ap, LOGFUNC_t); - sqlite3GlobalConfig.pLogArg = va_arg(ap, void*); + LOGFUNC_t xLog = va_arg(ap, LOGFUNC_t); + void *pLogArg = va_arg(ap, void*); + AtomicStore(&sqlite3GlobalConfig.xLog, xLog); + AtomicStore(&sqlite3GlobalConfig.pLogArg, pLogArg); break; } @@ -173129,7 +177035,8 @@ SQLITE_API int sqlite3_config(int op, ...){ ** argument of type int. If non-zero, then URI handling is globally ** enabled. If the parameter is zero, then URI handling is globally ** disabled. */ - sqlite3GlobalConfig.bOpenUri = va_arg(ap, int); + int bOpenUri = va_arg(ap, int); + AtomicStore(&sqlite3GlobalConfig.bOpenUri, bOpenUri); break; } @@ -173444,6 +177351,8 @@ SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){ { SQLITE_DBCONFIG_DQS_DML, SQLITE_DqsDML }, { SQLITE_DBCONFIG_LEGACY_FILE_FORMAT, SQLITE_LegacyFileFmt }, { SQLITE_DBCONFIG_TRUSTED_SCHEMA, SQLITE_TrustedSchema }, + { SQLITE_DBCONFIG_STMT_SCANSTATUS, SQLITE_StmtScanStatus }, + { SQLITE_DBCONFIG_REVERSE_SCANORDER, SQLITE_ReverseOrder }, }; unsigned int i; rc = SQLITE_ERROR; /* IMP: R-42790-23372 */ @@ -174056,6 +177965,7 @@ SQLITE_PRIVATE const char *sqlite3ErrName(int rc){ case SQLITE_NOTICE_RECOVER_WAL: zName = "SQLITE_NOTICE_RECOVER_WAL";break; case SQLITE_NOTICE_RECOVER_ROLLBACK: zName = "SQLITE_NOTICE_RECOVER_ROLLBACK"; break; + case SQLITE_NOTICE_RBU: zName = "SQLITE_NOTICE_RBU"; break; case SQLITE_WARNING: zName = "SQLITE_WARNING"; break; case SQLITE_WARNING_AUTOINDEX: zName = "SQLITE_WARNING_AUTOINDEX"; break; case SQLITE_DONE: zName = "SQLITE_DONE"; break; @@ -174148,9 +178058,9 @@ static int sqliteDefaultBusyCallback( void *ptr, /* Database connection */ int count /* Number of times table has been busy */ ){ -#if SQLITE_OS_WIN || HAVE_USLEEP +#if SQLITE_OS_WIN || !defined(HAVE_NANOSLEEP) || HAVE_NANOSLEEP /* This case is for systems that have support for sleeping for fractions of - ** a second. Examples: All windows systems, unix systems with usleep() */ + ** a second. Examples: All windows systems, unix systems with nanosleep() */ static const u8 delays[] = { 1, 2, 5, 10, 15, 20, 25, 25, 25, 50, 50, 100 }; static const u8 totals[] = @@ -174285,7 +178195,9 @@ SQLITE_API int sqlite3_busy_timeout(sqlite3 *db, int ms){ */ SQLITE_API void sqlite3_interrupt(sqlite3 *db){ #ifdef SQLITE_ENABLE_API_ARMOR - if( !sqlite3SafetyCheckOk(db) && (db==0 || db->eOpenState!=SQLITE_STATE_ZOMBIE) ){ + if( !sqlite3SafetyCheckOk(db) + && (db==0 || db->eOpenState!=SQLITE_STATE_ZOMBIE) + ){ (void)SQLITE_MISUSE_BKPT; return; } @@ -174293,6 +178205,21 @@ SQLITE_API void sqlite3_interrupt(sqlite3 *db){ AtomicStore(&db->u1.isInterrupted, 1); } +/* +** Return true or false depending on whether or not an interrupt is +** pending on connection db. +*/ +SQLITE_API int sqlite3_is_interrupted(sqlite3 *db){ +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) + && (db==0 || db->eOpenState!=SQLITE_STATE_ZOMBIE) + ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + return AtomicLoad(&db->u1.isInterrupted)!=0; +} /* ** This function is exactly the same as sqlite3_create_function(), except @@ -174337,7 +178264,7 @@ SQLITE_PRIVATE int sqlite3CreateFunc( /* The SQLITE_INNOCUOUS flag is the same bit as SQLITE_FUNC_UNSAFE. But ** the meaning is inverted. So flip the bit. */ assert( SQLITE_FUNC_UNSAFE==SQLITE_INNOCUOUS ); - extraFlags ^= SQLITE_FUNC_UNSAFE; + extraFlags ^= SQLITE_FUNC_UNSAFE; /* tag-20230109-1 */ #ifndef SQLITE_OMIT_UTF16 @@ -174355,11 +178282,11 @@ SQLITE_PRIVATE int sqlite3CreateFunc( case SQLITE_ANY: { int rc; rc = sqlite3CreateFunc(db, zFunctionName, nArg, - (SQLITE_UTF8|extraFlags)^SQLITE_FUNC_UNSAFE, + (SQLITE_UTF8|extraFlags)^SQLITE_FUNC_UNSAFE, /* tag-20230109-1 */ pUserData, xSFunc, xStep, xFinal, xValue, xInverse, pDestructor); if( rc==SQLITE_OK ){ rc = sqlite3CreateFunc(db, zFunctionName, nArg, - (SQLITE_UTF16LE|extraFlags)^SQLITE_FUNC_UNSAFE, + (SQLITE_UTF16LE|extraFlags)^SQLITE_FUNC_UNSAFE, /* tag-20230109-1*/ pUserData, xSFunc, xStep, xFinal, xValue, xInverse, pDestructor); } if( rc!=SQLITE_OK ){ @@ -175411,9 +179338,9 @@ SQLITE_PRIVATE int sqlite3ParseUri( assert( *pzErrMsg==0 ); - if( ((flags & SQLITE_OPEN_URI) /* IMP: R-48725-32206 */ - || sqlite3GlobalConfig.bOpenUri) /* IMP: R-51689-46548 */ - && nUri>=5 && memcmp(zUri, "file:", 5)==0 /* IMP: R-57884-37496 */ + if( ((flags & SQLITE_OPEN_URI) /* IMP: R-48725-32206 */ + || AtomicLoad(&sqlite3GlobalConfig.bOpenUri)) /* IMP: R-51689-46548 */ + && nUri>=5 && memcmp(zUri, "file:", 5)==0 /* IMP: R-57884-37496 */ ){ char *zOpt; int eState; /* Parser state when parsing URI */ @@ -175771,7 +179698,7 @@ static int openDatabase( ** 0 off off ** ** Legacy behavior is 3 (double-quoted string literals are allowed anywhere) -** and so that is the default. But developers are encouranged to use +** and so that is the default. But developers are encouraged to use ** -DSQLITE_DQS=0 (best) or -DSQLITE_DQS=1 (second choice) if possible. */ #if !defined(SQLITE_DQS) @@ -175819,6 +179746,9 @@ static int openDatabase( #endif #if defined(SQLITE_DEFAULT_LEGACY_ALTER_TABLE) | SQLITE_LegacyAlter +#endif +#if defined(SQLITE_ENABLE_STMT_SCANSTATUS) + | SQLITE_StmtScanStatus #endif ; sqlite3HashInit(&db->aCollSeq); @@ -176303,7 +180233,7 @@ SQLITE_API int sqlite3_table_column_metadata( /* Find the column for which info is requested */ if( zColumnName==0 ){ - /* Query for existance of table only */ + /* Query for existence of table only */ }else{ for(iCol=0; iColnCol; iCol++){ pCol = &pTab->aCol[iCol]; @@ -176384,7 +180314,7 @@ SQLITE_API int sqlite3_sleep(int ms){ /* This function works in milliseconds, but the underlying OsSleep() ** API uses microseconds. Hence the 1000's. */ - rc = (sqlite3OsSleep(pVfs, 1000*ms)/1000); + rc = (sqlite3OsSleep(pVfs, ms<0 ? 0 : 1000*ms)/1000); return rc; } @@ -176623,10 +180553,12 @@ SQLITE_API int sqlite3_test_control(int op, ...){ sqlite3ShowSrcList(0); sqlite3ShowWith(0); sqlite3ShowUpsert(0); +#ifndef SQLITE_OMIT_TRIGGER sqlite3ShowTriggerStep(0); sqlite3ShowTriggerStepList(0); sqlite3ShowTrigger(0); sqlite3ShowTriggerList(0); +#endif #ifndef SQLITE_OMIT_WINDOWFUNC sqlite3ShowWindow(0); sqlite3ShowWinFunc(0); @@ -176743,7 +180675,7 @@ SQLITE_API int sqlite3_test_control(int op, ...){ ** formed and never corrupt. This flag is clear by default, indicating that ** database files might have arbitrary corruption. Setting the flag during ** testing causes certain assert() statements in the code to be activated - ** that demonstrat invariants on well-formed database files. + ** that demonstrate invariants on well-formed database files. */ case SQLITE_TESTCTRL_NEVER_CORRUPT: { sqlite3GlobalConfig.neverCorrupt = va_arg(ap, int); @@ -176897,7 +180829,7 @@ SQLITE_API int sqlite3_test_control(int op, ...){ ** ** op==0 Store the current sqlite3TreeTrace in *ptr ** op==1 Set sqlite3TreeTrace to the value *ptr - ** op==3 Store the current sqlite3WhereTrace in *ptr + ** op==2 Store the current sqlite3WhereTrace in *ptr ** op==3 Set sqlite3WhereTrace to the value *ptr */ case SQLITE_TESTCTRL_TRACEFLAGS: { @@ -176933,6 +180865,23 @@ SQLITE_API int sqlite3_test_control(int op, ...){ break; } +#if !defined(SQLITE_OMIT_WSD) + /* sqlite3_test_control(SQLITE_TESTCTRL_USELONGDOUBLE, int X); + ** + ** X<0 Make no changes to the bUseLongDouble. Just report value. + ** X==0 Disable bUseLongDouble + ** X==1 Enable bUseLongDouble + ** X==2 Set bUseLongDouble to its default value for this platform + */ + case SQLITE_TESTCTRL_USELONGDOUBLE: { + int b = va_arg(ap, int); + if( b==2 ) b = sizeof(LONGDOUBLE_TYPE)>8; + if( b>=0 ) sqlite3Config.bUseLongDouble = b>0; + rc = sqlite3Config.bUseLongDouble!=0; + break; + } +#endif + #if defined(SQLITE_DEBUG) && !defined(SQLITE_OMIT_WSD) /* sqlite3_test_control(SQLITE_TESTCTRL_TUNE, id, *piValue) @@ -177233,7 +181182,7 @@ SQLITE_API int sqlite3_snapshot_get( } /* -** Open a read-transaction on the snapshot idendified by pSnapshot. +** Open a read-transaction on the snapshot identified by pSnapshot. */ SQLITE_API int sqlite3_snapshot_open( sqlite3 *db, @@ -178941,6 +182890,8 @@ SQLITE_PRIVATE int sqlite3FtsUnicodeIsalnum(int); SQLITE_PRIVATE int sqlite3FtsUnicodeIsdiacritic(int); #endif +SQLITE_PRIVATE int sqlite3Fts3ExprIterate(Fts3Expr*, int (*x)(Fts3Expr*,int,void*), void*); + #endif /* !SQLITE_CORE || SQLITE_ENABLE_FTS3 */ #endif /* _FTSINT_H */ @@ -183944,9 +187895,8 @@ static void fts3EvalNextRow( Fts3Expr *pExpr, /* Expr. to advance to next matching row */ int *pRc /* IN/OUT: Error code */ ){ - if( *pRc==SQLITE_OK ){ + if( *pRc==SQLITE_OK && pExpr->bEof==0 ){ int bDescDoclist = pCsr->bDesc; /* Used by DOCID_CMP() macro */ - assert( pExpr->bEof==0 ); pExpr->bStart = 1; switch( pExpr->eType ){ @@ -184422,6 +188372,22 @@ static void fts3EvalUpdateCounts(Fts3Expr *pExpr, int nCol){ } } +/* +** This is an sqlite3Fts3ExprIterate() callback. If the Fts3Expr.aMI[] array +** has not yet been allocated, allocate and zero it. Otherwise, just zero +** it. +*/ +static int fts3AllocateMSI(Fts3Expr *pExpr, int iPhrase, void *pCtx){ + Fts3Table *pTab = (Fts3Table*)pCtx; + UNUSED_PARAMETER(iPhrase); + if( pExpr->aMI==0 ){ + pExpr->aMI = (u32 *)sqlite3_malloc64(pTab->nColumn * 3 * sizeof(u32)); + if( pExpr->aMI==0 ) return SQLITE_NOMEM; + } + memset(pExpr->aMI, 0, pTab->nColumn * 3 * sizeof(u32)); + return SQLITE_OK; +} + /* ** Expression pExpr must be of type FTSQUERY_PHRASE. ** @@ -184443,7 +188409,6 @@ static int fts3EvalGatherStats( if( pExpr->aMI==0 ){ Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab; Fts3Expr *pRoot; /* Root of NEAR expression */ - Fts3Expr *p; /* Iterator used for several purposes */ sqlite3_int64 iPrevId = pCsr->iPrevId; sqlite3_int64 iDocid; @@ -184451,7 +188416,9 @@ static int fts3EvalGatherStats( /* Find the root of the NEAR expression */ pRoot = pExpr; - while( pRoot->pParent && pRoot->pParent->eType==FTSQUERY_NEAR ){ + while( pRoot->pParent + && (pRoot->pParent->eType==FTSQUERY_NEAR || pRoot->bDeferred) + ){ pRoot = pRoot->pParent; } iDocid = pRoot->iDocid; @@ -184459,14 +188426,8 @@ static int fts3EvalGatherStats( assert( pRoot->bStart ); /* Allocate space for the aMSI[] array of each FTSQUERY_PHRASE node */ - for(p=pRoot; p; p=p->pLeft){ - Fts3Expr *pE = (p->eType==FTSQUERY_PHRASE?p:p->pRight); - assert( pE->aMI==0 ); - pE->aMI = (u32 *)sqlite3_malloc64(pTab->nColumn * 3 * sizeof(u32)); - if( !pE->aMI ) return SQLITE_NOMEM; - memset(pE->aMI, 0, pTab->nColumn * 3 * sizeof(u32)); - } - + rc = sqlite3Fts3ExprIterate(pRoot, fts3AllocateMSI, (void*)pTab); + if( rc!=SQLITE_OK ) return rc; fts3EvalRestart(pCsr, pRoot, &rc); while( pCsr->isEof==0 && rc==SQLITE_OK ){ @@ -184622,6 +188583,7 @@ SQLITE_PRIVATE int sqlite3Fts3EvalPhrasePoslist( u8 bTreeEof = 0; Fts3Expr *p; /* Used to iterate from pExpr to root */ Fts3Expr *pNear; /* Most senior NEAR ancestor (or pExpr) */ + Fts3Expr *pRun; /* Closest non-deferred ancestor of pNear */ int bMatch; /* Check if this phrase descends from an OR expression node. If not, @@ -184636,25 +188598,30 @@ SQLITE_PRIVATE int sqlite3Fts3EvalPhrasePoslist( if( p->bEof ) bTreeEof = 1; } if( bOr==0 ) return SQLITE_OK; + pRun = pNear; + while( pRun->bDeferred ){ + assert( pRun->pParent ); + pRun = pRun->pParent; + } /* This is the descendent of an OR node. In this case we cannot use ** an incremental phrase. Load the entire doclist for the phrase ** into memory in this case. */ if( pPhrase->bIncr ){ - int bEofSave = pNear->bEof; - fts3EvalRestart(pCsr, pNear, &rc); - while( rc==SQLITE_OK && !pNear->bEof ){ - fts3EvalNextRow(pCsr, pNear, &rc); - if( bEofSave==0 && pNear->iDocid==iDocid ) break; + int bEofSave = pRun->bEof; + fts3EvalRestart(pCsr, pRun, &rc); + while( rc==SQLITE_OK && !pRun->bEof ){ + fts3EvalNextRow(pCsr, pRun, &rc); + if( bEofSave==0 && pRun->iDocid==iDocid ) break; } assert( rc!=SQLITE_OK || pPhrase->bIncr==0 ); - if( rc==SQLITE_OK && pNear->bEof!=bEofSave ){ + if( rc==SQLITE_OK && pRun->bEof!=bEofSave ){ rc = FTS_CORRUPT_VTAB; } } if( bTreeEof ){ - while( rc==SQLITE_OK && !pNear->bEof ){ - fts3EvalNextRow(pCsr, pNear, &rc); + while( rc==SQLITE_OK && !pRun->bEof ){ + fts3EvalNextRow(pCsr, pRun, &rc); } } if( rc!=SQLITE_OK ) return rc; @@ -191570,16 +195537,18 @@ static int fts3MsrBufferData( char *pList, i64 nList ){ - if( nList>pMsr->nBuffer ){ + if( (nList+FTS3_NODE_PADDING)>pMsr->nBuffer ){ char *pNew; - pMsr->nBuffer = nList*2; - pNew = (char *)sqlite3_realloc64(pMsr->aBuffer, pMsr->nBuffer); + int nNew = nList*2 + FTS3_NODE_PADDING; + pNew = (char *)sqlite3_realloc64(pMsr->aBuffer, nNew); if( !pNew ) return SQLITE_NOMEM; pMsr->aBuffer = pNew; + pMsr->nBuffer = nNew; } assert( nList>0 ); memcpy(pMsr->aBuffer, pList, nList); + memset(&pMsr->aBuffer[nList], 0, FTS3_NODE_PADDING); return SQLITE_OK; } @@ -193248,6 +197217,7 @@ static int fts3IncrmergeLoad( for(i=nHeight; i>=0 && rc==SQLITE_OK; i--){ NodeReader reader; + memset(&reader, 0, sizeof(reader)); pNode = &pWriter->aNodeWriter[i]; if( pNode->block.a){ @@ -194118,7 +198088,7 @@ static u64 fts3ChecksumIndex( int rc; u64 cksum = 0; - assert( *pRc==SQLITE_OK ); + if( *pRc ) return 0; memset(&filter, 0, sizeof(filter)); memset(&csr, 0, sizeof(csr)); @@ -194761,7 +198731,7 @@ typedef sqlite3_int64 i64; /* -** Used as an fts3ExprIterate() context when loading phrase doclists to +** Used as an sqlite3Fts3ExprIterate() context when loading phrase doclists to ** Fts3Expr.aDoclist[]/nDoclist. */ typedef struct LoadDoclistCtx LoadDoclistCtx; @@ -194805,7 +198775,7 @@ struct SnippetFragment { }; /* -** This type is used as an fts3ExprIterate() context object while +** This type is used as an sqlite3Fts3ExprIterate() context object while ** accumulating the data returned by the matchinfo() function. */ typedef struct MatchInfo MatchInfo; @@ -194964,7 +198934,7 @@ static void fts3GetDeltaPosition(char **pp, i64 *piPos){ } /* -** Helper function for fts3ExprIterate() (see below). +** Helper function for sqlite3Fts3ExprIterate() (see below). */ static int fts3ExprIterate2( Fts3Expr *pExpr, /* Expression to iterate phrases of */ @@ -194998,7 +198968,7 @@ static int fts3ExprIterate2( ** Otherwise, SQLITE_OK is returned after a callback has been made for ** all eligible phrase nodes. */ -static int fts3ExprIterate( +SQLITE_PRIVATE int sqlite3Fts3ExprIterate( Fts3Expr *pExpr, /* Expression to iterate phrases of */ int (*x)(Fts3Expr*,int,void*), /* Callback function to invoke for phrases */ void *pCtx /* Second argument to pass to callback */ @@ -195007,10 +198977,9 @@ static int fts3ExprIterate( return fts3ExprIterate2(pExpr, &iPhrase, x, pCtx); } - /* -** This is an fts3ExprIterate() callback used while loading the doclists -** for each phrase into Fts3Expr.aDoclist[]/nDoclist. See also +** This is an sqlite3Fts3ExprIterate() callback used while loading the +** doclists for each phrase into Fts3Expr.aDoclist[]/nDoclist. See also ** fts3ExprLoadDoclists(). */ static int fts3ExprLoadDoclistsCb(Fts3Expr *pExpr, int iPhrase, void *ctx){ @@ -195042,9 +199011,9 @@ static int fts3ExprLoadDoclists( int *pnToken /* OUT: Number of tokens in query */ ){ int rc; /* Return Code */ - LoadDoclistCtx sCtx = {0,0,0}; /* Context for fts3ExprIterate() */ + LoadDoclistCtx sCtx = {0,0,0}; /* Context for sqlite3Fts3ExprIterate() */ sCtx.pCsr = pCsr; - rc = fts3ExprIterate(pCsr->pExpr, fts3ExprLoadDoclistsCb, (void *)&sCtx); + rc = sqlite3Fts3ExprIterate(pCsr->pExpr,fts3ExprLoadDoclistsCb,(void*)&sCtx); if( pnPhrase ) *pnPhrase = sCtx.nPhrase; if( pnToken ) *pnToken = sCtx.nToken; return rc; @@ -195057,7 +199026,7 @@ static int fts3ExprPhraseCountCb(Fts3Expr *pExpr, int iPhrase, void *ctx){ } static int fts3ExprPhraseCount(Fts3Expr *pExpr){ int nPhrase = 0; - (void)fts3ExprIterate(pExpr, fts3ExprPhraseCountCb, (void *)&nPhrase); + (void)sqlite3Fts3ExprIterate(pExpr, fts3ExprPhraseCountCb, (void *)&nPhrase); return nPhrase; } @@ -195185,8 +199154,9 @@ static void fts3SnippetDetails( } /* -** This function is an fts3ExprIterate() callback used by fts3BestSnippet(). -** Each invocation populates an element of the SnippetIter.aPhrase[] array. +** This function is an sqlite3Fts3ExprIterate() callback used by +** fts3BestSnippet(). Each invocation populates an element of the +** SnippetIter.aPhrase[] array. */ static int fts3SnippetFindPositions(Fts3Expr *pExpr, int iPhrase, void *ctx){ SnippetIter *p = (SnippetIter *)ctx; @@ -195276,7 +199246,9 @@ static int fts3BestSnippet( sIter.nSnippet = nSnippet; sIter.nPhrase = nList; sIter.iCurrent = -1; - rc = fts3ExprIterate(pCsr->pExpr, fts3SnippetFindPositions, (void*)&sIter); + rc = sqlite3Fts3ExprIterate( + pCsr->pExpr, fts3SnippetFindPositions, (void*)&sIter + ); if( rc==SQLITE_OK ){ /* Set the *pmSeen output variable. */ @@ -195637,10 +199609,10 @@ static int fts3ExprLHitGather( } /* -** fts3ExprIterate() callback used to collect the "global" matchinfo stats -** for a single query. +** sqlite3Fts3ExprIterate() callback used to collect the "global" matchinfo +** stats for a single query. ** -** fts3ExprIterate() callback to load the 'global' elements of a +** sqlite3Fts3ExprIterate() callback to load the 'global' elements of a ** FTS3_MATCHINFO_HITS matchinfo array. The global stats are those elements ** of the matchinfo array that are constant for all rows returned by the ** current query. @@ -195675,7 +199647,7 @@ static int fts3ExprGlobalHitsCb( } /* -** fts3ExprIterate() callback used to collect the "local" part of the +** sqlite3Fts3ExprIterate() callback used to collect the "local" part of the ** FTS3_MATCHINFO_HITS array. The local stats are those elements of the ** array that are different for each row returned by the query. */ @@ -195871,7 +199843,7 @@ static int fts3MatchinfoLcs(Fts3Cursor *pCsr, MatchInfo *pInfo){ **/ aIter = sqlite3Fts3MallocZero(sizeof(LcsIterator) * pCsr->nPhrase); if( !aIter ) return SQLITE_NOMEM; - (void)fts3ExprIterate(pCsr->pExpr, fts3MatchinfoLcsCb, (void*)aIter); + (void)sqlite3Fts3ExprIterate(pCsr->pExpr, fts3MatchinfoLcsCb, (void*)aIter); for(i=0; inPhrase; i++){ LcsIterator *pIter = &aIter[i]; @@ -196048,11 +200020,11 @@ static int fts3MatchinfoValues( rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &pInfo->nDoc,0,0); if( rc!=SQLITE_OK ) break; } - rc = fts3ExprIterate(pExpr, fts3ExprGlobalHitsCb,(void*)pInfo); + rc = sqlite3Fts3ExprIterate(pExpr, fts3ExprGlobalHitsCb,(void*)pInfo); sqlite3Fts3EvalTestDeferred(pCsr, &rc); if( rc!=SQLITE_OK ) break; } - (void)fts3ExprIterate(pExpr, fts3ExprLocalHitsCb,(void*)pInfo); + (void)sqlite3Fts3ExprIterate(pExpr, fts3ExprLocalHitsCb,(void*)pInfo); break; } } @@ -196275,7 +200247,7 @@ struct TermOffsetCtx { }; /* -** This function is an fts3ExprIterate() callback used by sqlite3Fts3Offsets(). +** This function is an sqlite3Fts3ExprIterate() callback used by sqlite3Fts3Offsets(). */ static int fts3ExprTermOffsetInit(Fts3Expr *pExpr, int iPhrase, void *ctx){ TermOffsetCtx *p = (TermOffsetCtx *)ctx; @@ -196357,7 +200329,9 @@ SQLITE_PRIVATE void sqlite3Fts3Offsets( */ sCtx.iCol = iCol; sCtx.iTerm = 0; - rc = fts3ExprIterate(pCsr->pExpr, fts3ExprTermOffsetInit, (void*)&sCtx); + rc = sqlite3Fts3ExprIterate( + pCsr->pExpr, fts3ExprTermOffsetInit, (void*)&sCtx + ); if( rc!=SQLITE_OK ) goto offsets_out; /* Retreive the text stored in column iCol. If an SQL NULL is stored @@ -197290,25 +201264,51 @@ SQLITE_PRIVATE int sqlite3FtsUnicodeFold(int c, int eRemoveDiacritic){ ** increase for the parser. (Ubuntu14.10 gcc 4.8.4 x64 with -Os). */ static const char jsonIsSpace[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; #define fast_isspace(x) (jsonIsSpace[(unsigned char)x]) +/* +** Characters that are special to JSON. Control charaters, +** '"' and '\\'. +*/ +static const char jsonIsOk[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +}; + + #if !defined(SQLITE_DEBUG) && !defined(SQLITE_COVERAGE_TEST) # define VVA(X) #else @@ -197319,6 +201319,7 @@ static const char jsonIsSpace[] = { typedef struct JsonString JsonString; typedef struct JsonNode JsonNode; typedef struct JsonParse JsonParse; +typedef struct JsonCleanup JsonCleanup; /* An instance of this object represents a JSON string ** under construction. Really, this is a generic string accumulator @@ -197334,16 +201335,26 @@ struct JsonString { char zSpace[100]; /* Initial static space */ }; +/* A deferred cleanup task. A list of JsonCleanup objects might be +** run when the JsonParse object is destroyed. +*/ +struct JsonCleanup { + JsonCleanup *pJCNext; /* Next in a list */ + void (*xOp)(void*); /* Routine to run */ + void *pArg; /* Argument to xOp() */ +}; + /* JSON type values */ -#define JSON_NULL 0 -#define JSON_TRUE 1 -#define JSON_FALSE 2 -#define JSON_INT 3 -#define JSON_REAL 4 -#define JSON_STRING 5 -#define JSON_ARRAY 6 -#define JSON_OBJECT 7 +#define JSON_SUBST 0 /* Special edit node. Uses u.iPrev */ +#define JSON_NULL 1 +#define JSON_TRUE 2 +#define JSON_FALSE 3 +#define JSON_INT 4 +#define JSON_REAL 5 +#define JSON_STRING 6 +#define JSON_ARRAY 7 +#define JSON_OBJECT 8 /* The "subtype" set for JSON values */ #define JSON_SUBTYPE 74 /* Ascii for "J" */ @@ -197352,59 +201363,97 @@ struct JsonString { ** Names of the various JSON types: */ static const char * const jsonType[] = { + "subst", "null", "true", "false", "integer", "real", "text", "array", "object" }; /* Bit values for the JsonNode.jnFlag field */ -#define JNODE_RAW 0x01 /* Content is raw, not JSON encoded */ -#define JNODE_ESCAPE 0x02 /* Content is text with \ escapes */ -#define JNODE_REMOVE 0x04 /* Do not output */ -#define JNODE_REPLACE 0x08 /* Replace with JsonNode.u.iReplace */ -#define JNODE_PATCH 0x10 /* Patch with JsonNode.u.pPatch */ -#define JNODE_APPEND 0x20 /* More ARRAY/OBJECT entries at u.iAppend */ -#define JNODE_LABEL 0x40 /* Is a label of an object */ +#define JNODE_RAW 0x01 /* Content is raw, not JSON encoded */ +#define JNODE_ESCAPE 0x02 /* Content is text with \ escapes */ +#define JNODE_REMOVE 0x04 /* Do not output */ +#define JNODE_REPLACE 0x08 /* Target of a JSON_SUBST node */ +#define JNODE_APPEND 0x10 /* More ARRAY/OBJECT entries at u.iAppend */ +#define JNODE_LABEL 0x20 /* Is a label of an object */ +#define JNODE_JSON5 0x40 /* Node contains JSON5 enhancements */ -/* A single node of parsed JSON +/* A single node of parsed JSON. An array of these nodes describes +** a parse of JSON + edits. +** +** Use the json_parse() SQL function (available when compiled with +** -DSQLITE_DEBUG) to see a dump of complete JsonParse objects, including +** a complete listing and decoding of the array of JsonNodes. */ struct JsonNode { u8 eType; /* One of the JSON_ type values */ u8 jnFlags; /* JNODE flags */ u8 eU; /* Which union element to use */ - u32 n; /* Bytes of content, or number of sub-nodes */ + u32 n; /* Bytes of content for INT, REAL or STRING + ** Number of sub-nodes for ARRAY and OBJECT + ** Node that SUBST applies to */ union { const char *zJContent; /* 1: Content for INT, REAL, and STRING */ u32 iAppend; /* 2: More terms for ARRAY and OBJECT */ u32 iKey; /* 3: Key for ARRAY objects in json_tree() */ - u32 iReplace; /* 4: Replacement content for JNODE_REPLACE */ - JsonNode *pPatch; /* 5: Node chain of patch for JNODE_PATCH */ + u32 iPrev; /* 4: Previous SUBST node, or 0 */ } u; }; -/* A completely parsed JSON string + +/* A parsed and possibly edited JSON string. Lifecycle: +** +** 1. JSON comes in and is parsed into an array aNode[]. The original +** JSON text is stored in zJson. +** +** 2. Zero or more changes are made (via json_remove() or json_replace() +** or similar) to the aNode[] array. +** +** 3. A new, edited and mimified JSON string is generated from aNode +** and stored in zAlt. The JsonParse object always owns zAlt. +** +** Step 1 always happens. Step 2 and 3 may or may not happen, depending +** on the operation. +** +** aNode[].u.zJContent entries typically point into zJson. Hence zJson +** must remain valid for the lifespan of the parse. For edits, +** aNode[].u.zJContent might point to malloced space other than zJson. +** Entries in pClup are responsible for freeing that extra malloced space. +** +** When walking the parse tree in aNode[], edits are ignored if useMod is +** false. */ struct JsonParse { u32 nNode; /* Number of slots of aNode[] used */ u32 nAlloc; /* Number of slots of aNode[] allocated */ JsonNode *aNode; /* Array of nodes containing the parse */ - const char *zJson; /* Original JSON string */ + char *zJson; /* Original JSON string (before edits) */ + char *zAlt; /* Revised and/or mimified JSON */ u32 *aUp; /* Index of parent of each node */ - u8 oom; /* Set to true if out of memory */ - u8 nErr; /* Number of errors seen */ + JsonCleanup *pClup;/* Cleanup operations prior to freeing this object */ u16 iDepth; /* Nesting depth */ + u8 nErr; /* Number of errors seen */ + u8 oom; /* Set to true if out of memory */ + u8 bJsonIsRCStr; /* True if zJson is an RCStr */ + u8 hasNonstd; /* True if input uses non-standard features like JSON5 */ + u8 useMod; /* Actually use the edits contain inside aNode */ + u8 hasMod; /* aNode contains edits from the original zJson */ + u32 nJPRef; /* Number of references to this object */ int nJson; /* Length of the zJson string in bytes */ - u32 iHold; /* Replace cache line with the lowest iHold value */ + int nAlt; /* Length of alternative JSON string zAlt, in bytes */ + u32 iErr; /* Error location in zJson[] */ + u32 iSubst; /* Last JSON_SUBST entry in aNode[] */ + u32 iHold; /* Age of this entry in the cache for LRU replacement */ }; /* ** Maximum nesting depth of JSON for this implementation. ** ** This limit is needed to avoid a stack overflow in the recursive -** descent parser. A depth of 2000 is far deeper than any sane JSON -** should go. +** descent parser. A depth of 1000 is far deeper than any sane JSON +** should go. Historical note: This limit was 2000 prior to version 3.42.0 */ -#define JSON_MAX_DEPTH 2000 +#define JSON_MAX_DEPTH 1000 /************************************************************************** ** Utility routines for dealing with JsonString objects @@ -197427,16 +201476,14 @@ static void jsonInit(JsonString *p, sqlite3_context *pCtx){ jsonZero(p); } - /* Free all allocated memory and reset the JsonString object back to its ** initial state. */ static void jsonReset(JsonString *p){ - if( !p->bStatic ) sqlite3_free(p->zBuf); + if( !p->bStatic ) sqlite3RCStrUnref(p->zBuf); jsonZero(p); } - /* Report an out-of-memory (OOM) condition */ static void jsonOom(JsonString *p){ @@ -197453,7 +201500,7 @@ static int jsonGrow(JsonString *p, u32 N){ char *zNew; if( p->bStatic ){ if( p->bErr ) return 1; - zNew = sqlite3_malloc64(nTotal); + zNew = sqlite3RCStrNew(nTotal); if( zNew==0 ){ jsonOom(p); return SQLITE_NOMEM; @@ -197462,12 +201509,12 @@ static int jsonGrow(JsonString *p, u32 N){ p->zBuf = zNew; p->bStatic = 0; }else{ - zNew = sqlite3_realloc64(p->zBuf, nTotal); - if( zNew==0 ){ - jsonOom(p); + p->zBuf = sqlite3RCStrResize(p->zBuf, nTotal); + if( p->zBuf==0 ){ + p->bErr = 1; + jsonZero(p); return SQLITE_NOMEM; } - p->zBuf = zNew; } p->nAlloc = nTotal; return SQLITE_OK; @@ -197475,12 +201522,35 @@ static int jsonGrow(JsonString *p, u32 N){ /* Append N bytes from zIn onto the end of the JsonString string. */ -static void jsonAppendRaw(JsonString *p, const char *zIn, u32 N){ - if( N==0 ) return; - if( (N+p->nUsed >= p->nAlloc) && jsonGrow(p,N)!=0 ) return; +static SQLITE_NOINLINE void jsonAppendExpand( + JsonString *p, + const char *zIn, + u32 N +){ + assert( N>0 ); + if( jsonGrow(p,N) ) return; memcpy(p->zBuf+p->nUsed, zIn, N); p->nUsed += N; } +static void jsonAppendRaw(JsonString *p, const char *zIn, u32 N){ + if( N==0 ) return; + if( N+p->nUsed >= p->nAlloc ){ + jsonAppendExpand(p,zIn,N); + }else{ + memcpy(p->zBuf+p->nUsed, zIn, N); + p->nUsed += N; + } +} +static void jsonAppendRawNZ(JsonString *p, const char *zIn, u32 N){ + assert( N>0 ); + if( N+p->nUsed >= p->nAlloc ){ + jsonAppendExpand(p,zIn,N); + }else{ + memcpy(p->zBuf+p->nUsed, zIn, N); + p->nUsed += N; + } +} + /* Append formatted text (not to exceed N bytes) to the JsonString. */ @@ -197495,10 +201565,35 @@ static void jsonPrintf(int N, JsonString *p, const char *zFormat, ...){ /* Append a single character */ -static void jsonAppendChar(JsonString *p, char c){ - if( p->nUsed>=p->nAlloc && jsonGrow(p,1)!=0 ) return; +static SQLITE_NOINLINE void jsonAppendCharExpand(JsonString *p, char c){ + if( jsonGrow(p,1) ) return; p->zBuf[p->nUsed++] = c; } +static void jsonAppendChar(JsonString *p, char c){ + if( p->nUsed>=p->nAlloc ){ + jsonAppendCharExpand(p,c); + }else{ + p->zBuf[p->nUsed++] = c; + } +} + +/* Try to force the string to be a zero-terminated RCStr string. +** +** Return true on success. Return false if an OOM prevents this +** from happening. +*/ +static int jsonForceRCStr(JsonString *p){ + jsonAppendChar(p, 0); + if( p->bErr ) return 0; + p->nUsed--; + if( p->bStatic==0 ) return 1; + p->nAlloc = 0; + p->nUsed++; + jsonGrow(p, p->nUsed); + p->nUsed--; + return p->bStatic==0; +} + /* Append a comma separator to the output buffer, if the previous ** character is not '[' or '{'. @@ -197507,7 +201602,8 @@ static void jsonAppendSeparator(JsonString *p){ char c; if( p->nUsed==0 ) return; c = p->zBuf[p->nUsed-1]; - if( c!='[' && c!='{' ) jsonAppendChar(p, ','); + if( c=='[' || c=='{' ) return; + jsonAppendChar(p, ','); } /* Append the N-byte string in zIn to the end of the JsonString string @@ -197521,11 +201617,16 @@ static void jsonAppendString(JsonString *p, const char *zIn, u32 N){ p->zBuf[p->nUsed++] = '"'; for(i=0; izBuf[p->nUsed++] = c; + }else if( c=='"' || c=='\\' ){ json_simple_escape: if( (p->nUsed+N+3-i > p->nAlloc) && jsonGrow(p,N+3-i)!=0 ) return; p->zBuf[p->nUsed++] = '\\'; - }else if( c<=0x1f ){ + p->zBuf[p->nUsed++] = c; + }else if( c=='\'' ){ + p->zBuf[p->nUsed++] = c; + }else{ static const char aSpecial[] = { 0, 0, 0, 0, 0, 0, 0, 0, 'b', 't', 'n', 0, 'f', 'r', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -197536,6 +201637,7 @@ static void jsonAppendString(JsonString *p, const char *zIn, u32 N){ assert( aSpecial['\n']=='n' ); assert( aSpecial['\r']=='r' ); assert( aSpecial['\t']=='t' ); + assert( c>=0 && czBuf[p->nUsed++] = 'u'; p->zBuf[p->nUsed++] = '0'; p->zBuf[p->nUsed++] = '0'; - p->zBuf[p->nUsed++] = '0' + (c>>4); - c = "0123456789abcdef"[c&0xf]; + p->zBuf[p->nUsed++] = "0123456789abcdef"[c>>4]; + p->zBuf[p->nUsed++] = "0123456789abcdef"[c&0xf]; } - p->zBuf[p->nUsed++] = c; } p->zBuf[p->nUsed++] = '"'; assert( p->nUsednAlloc ); } +/* +** The zIn[0..N] string is a JSON5 string literal. Append to p a translation +** of the string literal that standard JSON and that omits all JSON5 +** features. +*/ +static void jsonAppendNormalizedString(JsonString *p, const char *zIn, u32 N){ + u32 i; + jsonAppendChar(p, '"'); + zIn++; + N -= 2; + while( N>0 ){ + for(i=0; i0 ){ + jsonAppendRawNZ(p, zIn, i); + zIn += i; + N -= i; + if( N==0 ) break; + } + assert( zIn[0]=='\\' ); + switch( (u8)zIn[1] ){ + case '\'': + jsonAppendChar(p, '\''); + break; + case 'v': + jsonAppendRawNZ(p, "\\u0009", 6); + break; + case 'x': + jsonAppendRawNZ(p, "\\u00", 4); + jsonAppendRawNZ(p, &zIn[2], 2); + zIn += 2; + N -= 2; + break; + case '0': + jsonAppendRawNZ(p, "\\u0000", 6); + break; + case '\r': + if( zIn[2]=='\n' ){ + zIn++; + N--; + } + break; + case '\n': + break; + case 0xe2: + assert( N>=4 ); + assert( 0x80==(u8)zIn[2] ); + assert( 0xa8==(u8)zIn[3] || 0xa9==(u8)zIn[3] ); + zIn += 2; + N -= 2; + break; + default: + jsonAppendRawNZ(p, zIn, 2); + break; + } + zIn += 2; + N -= 2; + } + jsonAppendChar(p, '"'); +} + +/* +** The zIn[0..N] string is a JSON5 integer literal. Append to p a translation +** of the string literal that standard JSON and that omits all JSON5 +** features. +*/ +static void jsonAppendNormalizedInt(JsonString *p, const char *zIn, u32 N){ + if( zIn[0]=='+' ){ + zIn++; + N--; + }else if( zIn[0]=='-' ){ + jsonAppendChar(p, '-'); + zIn++; + N--; + } + if( zIn[0]=='0' && (zIn[1]=='x' || zIn[1]=='X') ){ + sqlite3_int64 i = 0; + int rc = sqlite3DecOrHexToI64(zIn, &i); + if( rc<=1 ){ + jsonPrintf(100,p,"%lld",i); + }else{ + assert( rc==2 ); + jsonAppendRawNZ(p, "9.0e999", 7); + } + return; + } + assert( N>0 ); + jsonAppendRawNZ(p, zIn, N); +} + +/* +** The zIn[0..N] string is a JSON5 real literal. Append to p a translation +** of the string literal that standard JSON and that omits all JSON5 +** features. +*/ +static void jsonAppendNormalizedReal(JsonString *p, const char *zIn, u32 N){ + u32 i; + if( zIn[0]=='+' ){ + zIn++; + N--; + }else if( zIn[0]=='-' ){ + jsonAppendChar(p, '-'); + zIn++; + N--; + } + if( zIn[0]=='.' ){ + jsonAppendChar(p, '0'); + } + for(i=0; i0 ){ + jsonAppendRawNZ(p, zIn, N); + } +} + + + /* ** Append a function parameter value to the JSON string under ** construction. @@ -197564,11 +201789,14 @@ static void jsonAppendValue( ){ switch( sqlite3_value_type(pValue) ){ case SQLITE_NULL: { - jsonAppendRaw(p, "null", 4); + jsonAppendRawNZ(p, "null", 4); break; } - case SQLITE_INTEGER: case SQLITE_FLOAT: { + jsonPrintf(100, p, "%!0.15g", sqlite3_value_double(pValue)); + break; + } + case SQLITE_INTEGER: { const char *z = (const char*)sqlite3_value_text(pValue); u32 n = (u32)sqlite3_value_bytes(pValue); jsonAppendRaw(p, z, n); @@ -197597,15 +201825,25 @@ static void jsonAppendValue( /* Make the JSON in p the result of the SQL function. +** +** The JSON string is reset. */ static void jsonResult(JsonString *p){ if( p->bErr==0 ){ - sqlite3_result_text64(p->pCtx, p->zBuf, p->nUsed, - p->bStatic ? SQLITE_TRANSIENT : sqlite3_free, - SQLITE_UTF8); - jsonZero(p); + if( p->bStatic ){ + sqlite3_result_text64(p->pCtx, p->zBuf, p->nUsed, + SQLITE_TRANSIENT, SQLITE_UTF8); + }else if( jsonForceRCStr(p) ){ + sqlite3RCStrRef(p->zBuf); + sqlite3_result_text64(p->pCtx, p->zBuf, p->nUsed, + (void(*)(void*))sqlite3RCStrUnref, + SQLITE_UTF8); + } } - assert( p->bStatic ); + if( p->bErr==1 ){ + sqlite3_result_error_nomem(p->pCtx); + } + jsonReset(p); } /************************************************************************** @@ -197630,20 +201868,73 @@ static u32 jsonNodeSize(JsonNode *pNode){ ** delete the JsonParse object itself. */ static void jsonParseReset(JsonParse *pParse){ - sqlite3_free(pParse->aNode); - pParse->aNode = 0; + while( pParse->pClup ){ + JsonCleanup *pTask = pParse->pClup; + pParse->pClup = pTask->pJCNext; + pTask->xOp(pTask->pArg); + sqlite3_free(pTask); + } + assert( pParse->nJPRef<=1 ); + if( pParse->aNode ){ + sqlite3_free(pParse->aNode); + pParse->aNode = 0; + } pParse->nNode = 0; pParse->nAlloc = 0; - sqlite3_free(pParse->aUp); - pParse->aUp = 0; + if( pParse->aUp ){ + sqlite3_free(pParse->aUp); + pParse->aUp = 0; + } + if( pParse->bJsonIsRCStr ){ + sqlite3RCStrUnref(pParse->zJson); + pParse->zJson = 0; + pParse->bJsonIsRCStr = 0; + } + if( pParse->zAlt ){ + sqlite3RCStrUnref(pParse->zAlt); + pParse->zAlt = 0; + } } /* ** Free a JsonParse object that was obtained from sqlite3_malloc(). +** +** Note that destroying JsonParse might call sqlite3RCStrUnref() to +** destroy the zJson value. The RCStr object might recursively invoke +** JsonParse to destroy this pParse object again. Take care to ensure +** that this recursive destructor sequence terminates harmlessly. */ static void jsonParseFree(JsonParse *pParse){ - jsonParseReset(pParse); - sqlite3_free(pParse); + if( pParse->nJPRef>1 ){ + pParse->nJPRef--; + }else{ + jsonParseReset(pParse); + sqlite3_free(pParse); + } +} + +/* +** Add a cleanup task to the JsonParse object. +** +** If an OOM occurs, the cleanup operation happens immediately +** and this function returns SQLITE_NOMEM. +*/ +static int jsonParseAddCleanup( + JsonParse *pParse, /* Add the cleanup task to this parser */ + void(*xOp)(void*), /* The cleanup task */ + void *pArg /* Argument to the cleanup */ +){ + JsonCleanup *pTask = sqlite3_malloc64( sizeof(*pTask) ); + if( pTask==0 ){ + pParse->oom = 1; + xOp(pArg); + return SQLITE_ERROR; + } + pTask->pJCNext = pParse->pClup; + pParse->pClup = pTask; + pTask->xOp = xOp; + pTask->pArg = pArg; + return SQLITE_OK; } /* @@ -197652,46 +201943,76 @@ static void jsonParseFree(JsonParse *pParse){ ** the number of JsonNode objects that are encoded. */ static void jsonRenderNode( + JsonParse *pParse, /* the complete parse of the JSON */ JsonNode *pNode, /* The node to render */ - JsonString *pOut, /* Write JSON here */ - sqlite3_value **aReplace /* Replacement values */ + JsonString *pOut /* Write JSON here */ ){ assert( pNode!=0 ); - if( pNode->jnFlags & (JNODE_REPLACE|JNODE_PATCH) ){ - if( (pNode->jnFlags & JNODE_REPLACE)!=0 && ALWAYS(aReplace!=0) ){ - assert( pNode->eU==4 ); - jsonAppendValue(pOut, aReplace[pNode->u.iReplace]); - return; + while( (pNode->jnFlags & JNODE_REPLACE)!=0 && pParse->useMod ){ + u32 idx = (u32)(pNode - pParse->aNode); + u32 i = pParse->iSubst; + while( 1 /*exit-by-break*/ ){ + assert( inNode ); + assert( pParse->aNode[i].eType==JSON_SUBST ); + assert( pParse->aNode[i].eU==4 ); + assert( pParse->aNode[i].u.iPrevaNode[i].n==idx ){ + pNode = &pParse->aNode[i+1]; + break; + } + i = pParse->aNode[i].u.iPrev; } - assert( pNode->eU==5 ); - pNode = pNode->u.pPatch; } switch( pNode->eType ){ default: { assert( pNode->eType==JSON_NULL ); - jsonAppendRaw(pOut, "null", 4); + jsonAppendRawNZ(pOut, "null", 4); break; } case JSON_TRUE: { - jsonAppendRaw(pOut, "true", 4); + jsonAppendRawNZ(pOut, "true", 4); break; } case JSON_FALSE: { - jsonAppendRaw(pOut, "false", 5); + jsonAppendRawNZ(pOut, "false", 5); break; } case JSON_STRING: { + assert( pNode->eU==1 ); if( pNode->jnFlags & JNODE_RAW ){ - assert( pNode->eU==1 ); - jsonAppendString(pOut, pNode->u.zJContent, pNode->n); - break; + if( pNode->jnFlags & JNODE_LABEL ){ + jsonAppendChar(pOut, '"'); + jsonAppendRaw(pOut, pNode->u.zJContent, pNode->n); + jsonAppendChar(pOut, '"'); + }else{ + jsonAppendString(pOut, pNode->u.zJContent, pNode->n); + } + }else if( pNode->jnFlags & JNODE_JSON5 ){ + jsonAppendNormalizedString(pOut, pNode->u.zJContent, pNode->n); + }else{ + assert( pNode->n>0 ); + jsonAppendRawNZ(pOut, pNode->u.zJContent, pNode->n); } - /* no break */ deliberate_fall_through + break; + } + case JSON_REAL: { + assert( pNode->eU==1 ); + if( pNode->jnFlags & JNODE_JSON5 ){ + jsonAppendNormalizedReal(pOut, pNode->u.zJContent, pNode->n); + }else{ + assert( pNode->n>0 ); + jsonAppendRawNZ(pOut, pNode->u.zJContent, pNode->n); + } + break; } - case JSON_REAL: case JSON_INT: { assert( pNode->eU==1 ); - jsonAppendRaw(pOut, pNode->u.zJContent, pNode->n); + if( pNode->jnFlags & JNODE_JSON5 ){ + jsonAppendNormalizedInt(pOut, pNode->u.zJContent, pNode->n); + }else{ + assert( pNode->n>0 ); + jsonAppendRawNZ(pOut, pNode->u.zJContent, pNode->n); + } break; } case JSON_ARRAY: { @@ -197699,15 +202020,16 @@ static void jsonRenderNode( jsonAppendChar(pOut, '['); for(;;){ while( j<=pNode->n ){ - if( (pNode[j].jnFlags & JNODE_REMOVE)==0 ){ + if( (pNode[j].jnFlags & JNODE_REMOVE)==0 || pParse->useMod==0 ){ jsonAppendSeparator(pOut); - jsonRenderNode(&pNode[j], pOut, aReplace); + jsonRenderNode(pParse, &pNode[j], pOut); } j += jsonNodeSize(&pNode[j]); } if( (pNode->jnFlags & JNODE_APPEND)==0 ) break; + if( pParse->useMod==0 ) break; assert( pNode->eU==2 ); - pNode = &pNode[pNode->u.iAppend]; + pNode = &pParse->aNode[pNode->u.iAppend]; j = 1; } jsonAppendChar(pOut, ']'); @@ -197718,17 +202040,18 @@ static void jsonRenderNode( jsonAppendChar(pOut, '{'); for(;;){ while( j<=pNode->n ){ - if( (pNode[j+1].jnFlags & JNODE_REMOVE)==0 ){ + if( (pNode[j+1].jnFlags & JNODE_REMOVE)==0 || pParse->useMod==0 ){ jsonAppendSeparator(pOut); - jsonRenderNode(&pNode[j], pOut, aReplace); + jsonRenderNode(pParse, &pNode[j], pOut); jsonAppendChar(pOut, ':'); - jsonRenderNode(&pNode[j+1], pOut, aReplace); + jsonRenderNode(pParse, &pNode[j+1], pOut); } j += 1 + jsonNodeSize(&pNode[j+1]); } if( (pNode->jnFlags & JNODE_APPEND)==0 ) break; + if( pParse->useMod==0 ) break; assert( pNode->eU==2 ); - pNode = &pNode[pNode->u.iAppend]; + pNode = &pParse->aNode[pNode->u.iAppend]; j = 1; } jsonAppendChar(pOut, '}'); @@ -197738,18 +202061,29 @@ static void jsonRenderNode( } /* -** Return a JsonNode and all its descendents as a JSON string. +** Return a JsonNode and all its descendants as a JSON string. */ static void jsonReturnJson( + JsonParse *pParse, /* The complete JSON */ JsonNode *pNode, /* Node to return */ sqlite3_context *pCtx, /* Return value for this function */ - sqlite3_value **aReplace /* Array of replacement values */ + int bGenerateAlt /* Also store the rendered text in zAlt */ ){ JsonString s; - jsonInit(&s, pCtx); - jsonRenderNode(pNode, &s, aReplace); - jsonResult(&s); - sqlite3_result_subtype(pCtx, JSON_SUBTYPE); + if( pParse->oom ){ + sqlite3_result_error_nomem(pCtx); + return; + } + if( pParse->nErr==0 ){ + jsonInit(&s, pCtx); + jsonRenderNode(pParse, pNode, &s); + if( bGenerateAlt && pParse->zAlt==0 && jsonForceRCStr(&s) ){ + pParse->zAlt = sqlite3RCStrRef(s.zBuf); + pParse->nAlt = s.nUsed; + } + jsonResult(&s); + sqlite3_result_subtype(pCtx, JSON_SUBTYPE); + } } /* @@ -197787,9 +202121,9 @@ static u32 jsonHexToInt4(const char *z){ ** Make the JsonNode the return value of the function. */ static void jsonReturn( + JsonParse *pParse, /* Complete JSON parse tree */ JsonNode *pNode, /* Node to return */ - sqlite3_context *pCtx, /* Return value for this function */ - sqlite3_value **aReplace /* Array of replacement values */ + sqlite3_context *pCtx /* Return value for this function */ ){ switch( pNode->eType ){ default: { @@ -197807,59 +202141,40 @@ static void jsonReturn( } case JSON_INT: { sqlite3_int64 i = 0; + int rc; + int bNeg = 0; const char *z; + assert( pNode->eU==1 ); z = pNode->u.zJContent; - if( z[0]=='-' ){ z++; } - while( z[0]>='0' && z[0]<='9' ){ - unsigned v = *(z++) - '0'; - if( i>=LARGEST_INT64/10 ){ - if( i>LARGEST_INT64/10 ) goto int_as_real; - if( z[0]>='0' && z[0]<='9' ) goto int_as_real; - if( v==9 ) goto int_as_real; - if( v==8 ){ - if( pNode->u.zJContent[0]=='-' ){ - sqlite3_result_int64(pCtx, SMALLEST_INT64); - goto int_done; - }else{ - goto int_as_real; - } - } - } - i = i*10 + v; + if( z[0]=='-' ){ z++; bNeg = 1; } + else if( z[0]=='+' ){ z++; } + rc = sqlite3DecOrHexToI64(z, &i); + if( rc<=1 ){ + sqlite3_result_int64(pCtx, bNeg ? -i : i); + }else if( rc==3 && bNeg ){ + sqlite3_result_int64(pCtx, SMALLEST_INT64); + }else{ + goto to_double; } - if( pNode->u.zJContent[0]=='-' ){ i = -i; } - sqlite3_result_int64(pCtx, i); - int_done: break; - int_as_real: ; /* no break */ deliberate_fall_through } case JSON_REAL: { double r; -#ifdef SQLITE_AMALGAMATION const char *z; assert( pNode->eU==1 ); + to_double: z = pNode->u.zJContent; sqlite3AtoF(z, &r, sqlite3Strlen30(z), SQLITE_UTF8); -#else - assert( pNode->eU==1 ); - r = strtod(pNode->u.zJContent, 0); -#endif sqlite3_result_double(pCtx, r); break; } case JSON_STRING: { -#if 0 /* Never happens because JNODE_RAW is only set by json_set(), - ** json_insert() and json_replace() and those routines do not - ** call jsonReturn() */ if( pNode->jnFlags & JNODE_RAW ){ assert( pNode->eU==1 ); sqlite3_result_text(pCtx, pNode->u.zJContent, pNode->n, SQLITE_TRANSIENT); - }else -#endif - assert( (pNode->jnFlags & JNODE_RAW)==0 ); - if( (pNode->jnFlags & JNODE_ESCAPE)==0 ){ + }else if( (pNode->jnFlags & JNODE_ESCAPE)==0 ){ /* JSON formatted without any backslash-escapes */ assert( pNode->eU==1 ); sqlite3_result_text(pCtx, pNode->u.zJContent+1, pNode->n-2, @@ -197871,18 +202186,17 @@ static void jsonReturn( const char *z; char *zOut; u32 j; + u32 nOut = n; assert( pNode->eU==1 ); z = pNode->u.zJContent; - zOut = sqlite3_malloc( n+1 ); + zOut = sqlite3_malloc( nOut+1 ); if( zOut==0 ){ sqlite3_result_error_nomem(pCtx); break; } for(i=1, j=0; iaNode after first expanding the +** size of the aNode array. Return the index of the new node. +** +** If an OOM error occurs, set pParse->oom and return -1. +*/ static JSON_NOINLINE int jsonParseAddNodeExpand( JsonParse *pParse, /* Append the node to this object */ u32 eType, /* Node type */ @@ -197975,7 +202313,7 @@ static JSON_NOINLINE int jsonParseAddNodeExpand( pParse->oom = 1; return -1; } - pParse->nAlloc = nNew; + pParse->nAlloc = sqlite3_msize(pNew)/sizeof(JsonNode); pParse->aNode = pNew; assert( pParse->nNodenAlloc ); return jsonParseAddNode(pParse, eType, n, zContent); @@ -197993,34 +202331,239 @@ static int jsonParseAddNode( const char *zContent /* Content */ ){ JsonNode *p; - if( pParse->aNode==0 || pParse->nNode>=pParse->nAlloc ){ + assert( pParse->aNode!=0 || pParse->nNode>=pParse->nAlloc ); + if( pParse->nNode>=pParse->nAlloc ){ return jsonParseAddNodeExpand(pParse, eType, n, zContent); } + assert( pParse->aNode!=0 ); p = &pParse->aNode[pParse->nNode]; - p->eType = (u8)eType; - p->jnFlags = 0; + assert( p!=0 ); + p->eType = (u8)(eType & 0xff); + p->jnFlags = (u8)(eType >> 8); VVA( p->eU = zContent ? 1 : 0 ); p->n = n; p->u.zJContent = zContent; return pParse->nNode++; } +/* +** Add an array of new nodes to the current pParse->aNode array. +** Return the index of the first node added. +** +** If an OOM error occurs, set pParse->oom. +*/ +static void jsonParseAddNodeArray( + JsonParse *pParse, /* Append the node to this object */ + JsonNode *aNode, /* Array of nodes to add */ + u32 nNode /* Number of elements in aNew */ +){ + assert( aNode!=0 ); + assert( nNode>=1 ); + if( pParse->nNode + nNode > pParse->nAlloc ){ + u32 nNew = pParse->nNode + nNode; + JsonNode *aNew = sqlite3_realloc64(pParse->aNode, nNew*sizeof(JsonNode)); + if( aNew==0 ){ + pParse->oom = 1; + return; + } + pParse->nAlloc = sqlite3_msize(aNew)/sizeof(JsonNode); + pParse->aNode = aNew; + } + memcpy(&pParse->aNode[pParse->nNode], aNode, nNode*sizeof(JsonNode)); + pParse->nNode += nNode; +} + +/* +** Add a new JSON_SUBST node. The node immediately following +** this new node will be the substitute content for iNode. +*/ +static int jsonParseAddSubstNode( + JsonParse *pParse, /* Add the JSON_SUBST here */ + u32 iNode /* References this node */ +){ + int idx = jsonParseAddNode(pParse, JSON_SUBST, iNode, 0); + if( pParse->oom ) return -1; + pParse->aNode[iNode].jnFlags |= JNODE_REPLACE; + pParse->aNode[idx].eU = 4; + pParse->aNode[idx].u.iPrev = pParse->iSubst; + pParse->iSubst = idx; + pParse->hasMod = 1; + pParse->useMod = 1; + return idx; +} + +/* +** Return true if z[] begins with 2 (or more) hexadecimal digits +*/ +static int jsonIs2Hex(const char *z){ + return sqlite3Isxdigit(z[0]) && sqlite3Isxdigit(z[1]); +} + /* ** Return true if z[] begins with 4 (or more) hexadecimal digits */ static int jsonIs4Hex(const char *z){ - int i; - for(i=0; i<4; i++) if( !sqlite3Isxdigit(z[i]) ) return 0; - return 1; + return jsonIs2Hex(z) && jsonIs2Hex(&z[2]); +} + +/* +** Return the number of bytes of JSON5 whitespace at the beginning of +** the input string z[]. +** +** JSON5 whitespace consists of any of the following characters: +** +** Unicode UTF-8 Name +** U+0009 09 horizontal tab +** U+000a 0a line feed +** U+000b 0b vertical tab +** U+000c 0c form feed +** U+000d 0d carriage return +** U+0020 20 space +** U+00a0 c2 a0 non-breaking space +** U+1680 e1 9a 80 ogham space mark +** U+2000 e2 80 80 en quad +** U+2001 e2 80 81 em quad +** U+2002 e2 80 82 en space +** U+2003 e2 80 83 em space +** U+2004 e2 80 84 three-per-em space +** U+2005 e2 80 85 four-per-em space +** U+2006 e2 80 86 six-per-em space +** U+2007 e2 80 87 figure space +** U+2008 e2 80 88 punctuation space +** U+2009 e2 80 89 thin space +** U+200a e2 80 8a hair space +** U+2028 e2 80 a8 line separator +** U+2029 e2 80 a9 paragraph separator +** U+202f e2 80 af narrow no-break space (NNBSP) +** U+205f e2 81 9f medium mathematical space (MMSP) +** U+3000 e3 80 80 ideographical space +** U+FEFF ef bb bf byte order mark +** +** In addition, comments between '/', '*' and '*', '/' and +** from '/', '/' to end-of-line are also considered to be whitespace. +*/ +static int json5Whitespace(const char *zIn){ + int n = 0; + const u8 *z = (u8*)zIn; + while( 1 /*exit by "goto whitespace_done"*/ ){ + switch( z[n] ){ + case 0x09: + case 0x0a: + case 0x0b: + case 0x0c: + case 0x0d: + case 0x20: { + n++; + break; + } + case '/': { + if( z[n+1]=='*' && z[n+2]!=0 ){ + int j; + for(j=n+3; z[j]!='/' || z[j-1]!='*'; j++){ + if( z[j]==0 ) goto whitespace_done; + } + n = j+1; + break; + }else if( z[n+1]=='/' ){ + int j; + char c; + for(j=n+2; (c = z[j])!=0; j++){ + if( c=='\n' || c=='\r' ) break; + if( 0xe2==(u8)c && 0x80==(u8)z[j+1] + && (0xa8==(u8)z[j+2] || 0xa9==(u8)z[j+2]) + ){ + j += 2; + break; + } + } + n = j; + if( z[n] ) n++; + break; + } + goto whitespace_done; + } + case 0xc2: { + if( z[n+1]==0xa0 ){ + n += 2; + break; + } + goto whitespace_done; + } + case 0xe1: { + if( z[n+1]==0x9a && z[n+2]==0x80 ){ + n += 3; + break; + } + goto whitespace_done; + } + case 0xe2: { + if( z[n+1]==0x80 ){ + u8 c = z[n+2]; + if( c<0x80 ) goto whitespace_done; + if( c<=0x8a || c==0xa8 || c==0xa9 || c==0xaf ){ + n += 3; + break; + } + }else if( z[n+1]==0x81 && z[n+2]==0x9f ){ + n += 3; + break; + } + goto whitespace_done; + } + case 0xe3: { + if( z[n+1]==0x80 && z[n+2]==0x80 ){ + n += 3; + break; + } + goto whitespace_done; + } + case 0xef: { + if( z[n+1]==0xbb && z[n+2]==0xbf ){ + n += 3; + break; + } + goto whitespace_done; + } + default: { + goto whitespace_done; + } + } + } + whitespace_done: + return n; } +/* +** Extra floating-point literals to allow in JSON. +*/ +static const struct NanInfName { + char c1; + char c2; + char n; + char eType; + char nRepl; + char *zMatch; + char *zRepl; +} aNanInfName[] = { + { 'i', 'I', 3, JSON_REAL, 7, "inf", "9.0e999" }, + { 'i', 'I', 8, JSON_REAL, 7, "infinity", "9.0e999" }, + { 'n', 'N', 3, JSON_NULL, 4, "NaN", "null" }, + { 'q', 'Q', 4, JSON_NULL, 4, "QNaN", "null" }, + { 's', 'S', 4, JSON_NULL, 4, "SNaN", "null" }, +}; + /* ** Parse a single JSON value which begins at pParse->zJson[i]. Return the ** index of the first character past the end of the value parsed. ** -** Return negative for a syntax error. Special cases: return -2 if the -** first non-whitespace character is '}' and return -3 if the first -** non-whitespace character is ']'. +** Special return values: +** +** 0 End of input +** -1 Syntax error +** -2 '}' seen +** -3 ']' seen +** -4 ',' seen +** -5 ':' seen */ static int jsonParseValue(JsonParse *pParse, u32 i){ char c; @@ -198029,175 +202572,457 @@ static int jsonParseValue(JsonParse *pParse, u32 i){ int x; JsonNode *pNode; const char *z = pParse->zJson; - while( fast_isspace(z[i]) ){ i++; } - if( (c = z[i])=='{' ){ +json_parse_restart: + switch( (u8)z[i] ){ + case '{': { /* Parse object */ iThis = jsonParseAddNode(pParse, JSON_OBJECT, 0, 0); if( iThis<0 ) return -1; + if( ++pParse->iDepth > JSON_MAX_DEPTH ){ + pParse->iErr = i; + return -1; + } for(j=i+1;;j++){ - while( fast_isspace(z[j]) ){ j++; } - if( ++pParse->iDepth > JSON_MAX_DEPTH ) return -1; + u32 nNode = pParse->nNode; x = jsonParseValue(pParse, j); - if( x<0 ){ - pParse->iDepth--; - if( x==(-2) && pParse->nNode==(u32)iThis+1 ) return j+1; - return -1; + if( x<=0 ){ + if( x==(-2) ){ + j = pParse->iErr; + if( pParse->nNode!=(u32)iThis+1 ) pParse->hasNonstd = 1; + break; + } + j += json5Whitespace(&z[j]); + if( sqlite3JsonId1(z[j]) + || (z[j]=='\\' && z[j+1]=='u' && jsonIs4Hex(&z[j+2])) + ){ + int k = j+1; + while( (sqlite3JsonId2(z[k]) && json5Whitespace(&z[k])==0) + || (z[k]=='\\' && z[k+1]=='u' && jsonIs4Hex(&z[k+2])) + ){ + k++; + } + jsonParseAddNode(pParse, JSON_STRING | (JNODE_RAW<<8), k-j, &z[j]); + pParse->hasNonstd = 1; + x = k; + }else{ + if( x!=-1 ) pParse->iErr = j; + return -1; + } } if( pParse->oom ) return -1; - pNode = &pParse->aNode[pParse->nNode-1]; - if( pNode->eType!=JSON_STRING ) return -1; + pNode = &pParse->aNode[nNode]; + if( pNode->eType!=JSON_STRING ){ + pParse->iErr = j; + return -1; + } pNode->jnFlags |= JNODE_LABEL; j = x; - while( fast_isspace(z[j]) ){ j++; } - if( z[j]!=':' ) return -1; - j++; + if( z[j]==':' ){ + j++; + }else{ + if( fast_isspace(z[j]) ){ + do{ j++; }while( fast_isspace(z[j]) ); + if( z[j]==':' ){ + j++; + goto parse_object_value; + } + } + x = jsonParseValue(pParse, j); + if( x!=(-5) ){ + if( x!=(-1) ) pParse->iErr = j; + return -1; + } + j = pParse->iErr+1; + } + parse_object_value: x = jsonParseValue(pParse, j); - pParse->iDepth--; - if( x<0 ) return -1; + if( x<=0 ){ + if( x!=(-1) ) pParse->iErr = j; + return -1; + } j = x; - while( fast_isspace(z[j]) ){ j++; } - c = z[j]; - if( c==',' ) continue; - if( c!='}' ) return -1; - break; + if( z[j]==',' ){ + continue; + }else if( z[j]=='}' ){ + break; + }else{ + if( fast_isspace(z[j]) ){ + do{ j++; }while( fast_isspace(z[j]) ); + if( z[j]==',' ){ + continue; + }else if( z[j]=='}' ){ + break; + } + } + x = jsonParseValue(pParse, j); + if( x==(-4) ){ + j = pParse->iErr; + continue; + } + if( x==(-2) ){ + j = pParse->iErr; + break; + } + } + pParse->iErr = j; + return -1; } pParse->aNode[iThis].n = pParse->nNode - (u32)iThis - 1; + pParse->iDepth--; return j+1; - }else if( c=='[' ){ + } + case '[': { /* Parse array */ iThis = jsonParseAddNode(pParse, JSON_ARRAY, 0, 0); if( iThis<0 ) return -1; + if( ++pParse->iDepth > JSON_MAX_DEPTH ){ + pParse->iErr = i; + return -1; + } memset(&pParse->aNode[iThis].u, 0, sizeof(pParse->aNode[iThis].u)); for(j=i+1;;j++){ - while( fast_isspace(z[j]) ){ j++; } - if( ++pParse->iDepth > JSON_MAX_DEPTH ) return -1; x = jsonParseValue(pParse, j); - pParse->iDepth--; - if( x<0 ){ - if( x==(-3) && pParse->nNode==(u32)iThis+1 ) return j+1; + if( x<=0 ){ + if( x==(-3) ){ + j = pParse->iErr; + if( pParse->nNode!=(u32)iThis+1 ) pParse->hasNonstd = 1; + break; + } + if( x!=(-1) ) pParse->iErr = j; return -1; } j = x; - while( fast_isspace(z[j]) ){ j++; } - c = z[j]; - if( c==',' ) continue; - if( c!=']' ) return -1; - break; + if( z[j]==',' ){ + continue; + }else if( z[j]==']' ){ + break; + }else{ + if( fast_isspace(z[j]) ){ + do{ j++; }while( fast_isspace(z[j]) ); + if( z[j]==',' ){ + continue; + }else if( z[j]==']' ){ + break; + } + } + x = jsonParseValue(pParse, j); + if( x==(-4) ){ + j = pParse->iErr; + continue; + } + if( x==(-3) ){ + j = pParse->iErr; + break; + } + } + pParse->iErr = j; + return -1; } pParse->aNode[iThis].n = pParse->nNode - (u32)iThis - 1; + pParse->iDepth--; return j+1; - }else if( c=='"' ){ + } + case '\'': { + u8 jnFlags; + char cDelim; + pParse->hasNonstd = 1; + jnFlags = JNODE_JSON5; + goto parse_string; + case '"': /* Parse string */ - u8 jnFlags = 0; - j = i+1; - for(;;){ + jnFlags = 0; + parse_string: + cDelim = z[i]; + for(j=i+1; 1; j++){ + if( jsonIsOk[(unsigned char)z[j]] ) continue; c = z[j]; - if( (c & ~0x1f)==0 ){ - /* Control characters are not allowed in strings */ - return -1; - } - if( c=='\\' ){ + if( c==cDelim ){ + break; + }else if( c=='\\' ){ c = z[++j]; if( c=='"' || c=='\\' || c=='/' || c=='b' || c=='f' || c=='n' || c=='r' || c=='t' - || (c=='u' && jsonIs4Hex(z+j+1)) ){ - jnFlags = JNODE_ESCAPE; + || (c=='u' && jsonIs4Hex(&z[j+1])) ){ + jnFlags |= JNODE_ESCAPE; + }else if( c=='\'' || c=='0' || c=='v' || c=='\n' + || (0xe2==(u8)c && 0x80==(u8)z[j+1] + && (0xa8==(u8)z[j+2] || 0xa9==(u8)z[j+2])) + || (c=='x' && jsonIs2Hex(&z[j+1])) ){ + jnFlags |= (JNODE_ESCAPE|JNODE_JSON5); + pParse->hasNonstd = 1; + }else if( c=='\r' ){ + if( z[j+1]=='\n' ) j++; + jnFlags |= (JNODE_ESCAPE|JNODE_JSON5); + pParse->hasNonstd = 1; }else{ + pParse->iErr = j; return -1; } - }else if( c=='"' ){ - break; + }else if( c<=0x1f ){ + /* Control characters are not allowed in strings */ + pParse->iErr = j; + return -1; } - j++; } - jsonParseAddNode(pParse, JSON_STRING, j+1-i, &z[i]); - if( !pParse->oom ) pParse->aNode[pParse->nNode-1].jnFlags = jnFlags; + jsonParseAddNode(pParse, JSON_STRING | (jnFlags<<8), j+1-i, &z[i]); return j+1; - }else if( c=='n' - && strncmp(z+i,"null",4)==0 - && !sqlite3Isalnum(z[i+4]) ){ - jsonParseAddNode(pParse, JSON_NULL, 0, 0); - return i+4; - }else if( c=='t' - && strncmp(z+i,"true",4)==0 - && !sqlite3Isalnum(z[i+4]) ){ - jsonParseAddNode(pParse, JSON_TRUE, 0, 0); - return i+4; - }else if( c=='f' - && strncmp(z+i,"false",5)==0 - && !sqlite3Isalnum(z[i+5]) ){ - jsonParseAddNode(pParse, JSON_FALSE, 0, 0); - return i+5; - }else if( c=='-' || (c>='0' && c<='9') ){ + } + case 't': { + if( strncmp(z+i,"true",4)==0 && !sqlite3Isalnum(z[i+4]) ){ + jsonParseAddNode(pParse, JSON_TRUE, 0, 0); + return i+4; + } + pParse->iErr = i; + return -1; + } + case 'f': { + if( strncmp(z+i,"false",5)==0 && !sqlite3Isalnum(z[i+5]) ){ + jsonParseAddNode(pParse, JSON_FALSE, 0, 0); + return i+5; + } + pParse->iErr = i; + return -1; + } + case '+': { + u8 seenDP, seenE, jnFlags; + pParse->hasNonstd = 1; + jnFlags = JNODE_JSON5; + goto parse_number; + case '.': + if( sqlite3Isdigit(z[i+1]) ){ + pParse->hasNonstd = 1; + jnFlags = JNODE_JSON5; + seenE = 0; + seenDP = JSON_REAL; + goto parse_number_2; + } + pParse->iErr = i; + return -1; + case '-': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': /* Parse number */ - u8 seenDP = 0; - u8 seenE = 0; + jnFlags = 0; + parse_number: + seenDP = JSON_INT; + seenE = 0; assert( '-' < '0' ); + assert( '+' < '0' ); + assert( '.' < '0' ); + c = z[i]; + if( c<='0' ){ - j = c=='-' ? i+1 : i; - if( z[j]=='0' && z[j+1]>='0' && z[j+1]<='9' ) return -1; + if( c=='0' ){ + if( (z[i+1]=='x' || z[i+1]=='X') && sqlite3Isxdigit(z[i+2]) ){ + assert( seenDP==JSON_INT ); + pParse->hasNonstd = 1; + jnFlags |= JNODE_JSON5; + for(j=i+3; sqlite3Isxdigit(z[j]); j++){} + goto parse_number_finish; + }else if( sqlite3Isdigit(z[i+1]) ){ + pParse->iErr = i+1; + return -1; + } + }else{ + if( !sqlite3Isdigit(z[i+1]) ){ + /* JSON5 allows for "+Infinity" and "-Infinity" using exactly + ** that case. SQLite also allows these in any case and it allows + ** "+inf" and "-inf". */ + if( (z[i+1]=='I' || z[i+1]=='i') + && sqlite3StrNICmp(&z[i+1], "inf",3)==0 + ){ + pParse->hasNonstd = 1; + if( z[i]=='-' ){ + jsonParseAddNode(pParse, JSON_REAL, 8, "-9.0e999"); + }else{ + jsonParseAddNode(pParse, JSON_REAL, 7, "9.0e999"); + } + return i + (sqlite3StrNICmp(&z[i+4],"inity",5)==0 ? 9 : 4); + } + if( z[i+1]=='.' ){ + pParse->hasNonstd = 1; + jnFlags |= JNODE_JSON5; + goto parse_number_2; + } + pParse->iErr = i; + return -1; + } + if( z[i+1]=='0' ){ + if( sqlite3Isdigit(z[i+2]) ){ + pParse->iErr = i+1; + return -1; + }else if( (z[i+2]=='x' || z[i+2]=='X') && sqlite3Isxdigit(z[i+3]) ){ + pParse->hasNonstd = 1; + jnFlags |= JNODE_JSON5; + for(j=i+4; sqlite3Isxdigit(z[j]); j++){} + goto parse_number_finish; + } + } + } } - j = i+1; - for(;; j++){ + parse_number_2: + for(j=i+1;; j++){ c = z[j]; - if( c>='0' && c<='9' ) continue; + if( sqlite3Isdigit(c) ) continue; if( c=='.' ){ - if( z[j-1]=='-' ) return -1; - if( seenDP ) return -1; - seenDP = 1; + if( seenDP==JSON_REAL ){ + pParse->iErr = j; + return -1; + } + seenDP = JSON_REAL; continue; } if( c=='e' || c=='E' ){ - if( z[j-1]<'0' ) return -1; - if( seenE ) return -1; - seenDP = seenE = 1; + if( z[j-1]<'0' ){ + if( ALWAYS(z[j-1]=='.') && ALWAYS(j-2>=i) && sqlite3Isdigit(z[j-2]) ){ + pParse->hasNonstd = 1; + jnFlags |= JNODE_JSON5; + }else{ + pParse->iErr = j; + return -1; + } + } + if( seenE ){ + pParse->iErr = j; + return -1; + } + seenDP = JSON_REAL; + seenE = 1; c = z[j+1]; if( c=='+' || c=='-' ){ j++; c = z[j+1]; } - if( c<'0' || c>'9' ) return -1; + if( c<'0' || c>'9' ){ + pParse->iErr = j; + return -1; + } continue; } break; } - if( z[j-1]<'0' ) return -1; - jsonParseAddNode(pParse, seenDP ? JSON_REAL : JSON_INT, - j - i, &z[i]); + if( z[j-1]<'0' ){ + if( ALWAYS(z[j-1]=='.') && ALWAYS(j-2>=i) && sqlite3Isdigit(z[j-2]) ){ + pParse->hasNonstd = 1; + jnFlags |= JNODE_JSON5; + }else{ + pParse->iErr = j; + return -1; + } + } + parse_number_finish: + jsonParseAddNode(pParse, seenDP | (jnFlags<<8), j - i, &z[i]); return j; - }else if( c=='}' ){ + } + case '}': { + pParse->iErr = i; return -2; /* End of {...} */ - }else if( c==']' ){ + } + case ']': { + pParse->iErr = i; return -3; /* End of [...] */ - }else if( c==0 ){ + } + case ',': { + pParse->iErr = i; + return -4; /* List separator */ + } + case ':': { + pParse->iErr = i; + return -5; /* Object label/value separator */ + } + case 0: { return 0; /* End of file */ - }else{ + } + case 0x09: + case 0x0a: + case 0x0d: + case 0x20: { + do{ + i++; + }while( fast_isspace(z[i]) ); + goto json_parse_restart; + } + case 0x0b: + case 0x0c: + case '/': + case 0xc2: + case 0xe1: + case 0xe2: + case 0xe3: + case 0xef: { + j = json5Whitespace(&z[i]); + if( j>0 ){ + i += j; + pParse->hasNonstd = 1; + goto json_parse_restart; + } + pParse->iErr = i; + return -1; + } + case 'n': { + if( strncmp(z+i,"null",4)==0 && !sqlite3Isalnum(z[i+4]) ){ + jsonParseAddNode(pParse, JSON_NULL, 0, 0); + return i+4; + } + /* fall-through into the default case that checks for NaN */ + } + default: { + u32 k; + int nn; + c = z[i]; + for(k=0; khasNonstd = 1; + return i + nn; + } + pParse->iErr = i; return -1; /* Syntax error */ } + } /* End switch(z[i]) */ } /* ** Parse a complete JSON string. Return 0 on success or non-zero if there -** are any errors. If an error occurs, free all memory associated with -** pParse. +** are any errors. If an error occurs, free all memory held by pParse, +** but not pParse itself. ** -** pParse is uninitialized when this routine is called. +** pParse must be initialized to an empty parse object prior to calling +** this routine. */ static int jsonParse( JsonParse *pParse, /* Initialize and fill this JsonParse object */ - sqlite3_context *pCtx, /* Report errors here */ - const char *zJson /* Input JSON text to be parsed */ + sqlite3_context *pCtx /* Report errors here */ ){ int i; - memset(pParse, 0, sizeof(*pParse)); - if( zJson==0 ) return 1; - pParse->zJson = zJson; + const char *zJson = pParse->zJson; i = jsonParseValue(pParse, 0); if( pParse->oom ) i = -1; if( i>0 ){ assert( pParse->iDepth==0 ); while( fast_isspace(zJson[i]) ) i++; - if( zJson[i] ) i = -1; + if( zJson[i] ){ + i += json5Whitespace(&zJson[i]); + if( zJson[i] ){ + jsonParseReset(pParse); + return 1; + } + pParse->hasNonstd = 1; + } } if( i<=0 ){ if( pCtx!=0 ){ @@ -198213,6 +203038,7 @@ static int jsonParse( return 0; } + /* Mark node i of pParse as being a child of iParent. Call recursively ** to fill in all the descendants of node i. */ @@ -198262,26 +203088,49 @@ static int jsonParseFindParents(JsonParse *pParse){ #define JSON_CACHE_SZ 4 /* Max number of cache entries */ /* -** Obtain a complete parse of the JSON found in the first argument -** of the argv array. Use the sqlite3_get_auxdata() cache for this -** parse if it is available. If the cache is not available or if it -** is no longer valid, parse the JSON again and return the new parse, -** and also register the new parse so that it will be available for +** Obtain a complete parse of the JSON found in the pJson argument +** +** Use the sqlite3_get_auxdata() cache to find a preexisting parse +** if it is available. If the cache is not available or if it +** is no longer valid, parse the JSON again and return the new parse. +** Also register the new parse so that it will be available for ** future sqlite3_get_auxdata() calls. +** +** If an error occurs and pErrCtx!=0 then report the error on pErrCtx +** and return NULL. +** +** The returned pointer (if it is not NULL) is owned by the cache in +** most cases, not the caller. The caller does NOT need to invoke +** jsonParseFree(), in most cases. +** +** Except, if an error occurs and pErrCtx==0 then return the JsonParse +** object with JsonParse.nErr non-zero and the caller will own the JsonParse +** object. In that case, it will be the responsibility of the caller to +** invoke jsonParseFree(). To summarize: +** +** pErrCtx!=0 || p->nErr==0 ==> Return value p is owned by the +** cache. Call does not need to +** free it. +** +** pErrCtx==0 && p->nErr!=0 ==> Return value is owned by the caller +** and so the caller must free it. */ static JsonParse *jsonParseCached( - sqlite3_context *pCtx, - sqlite3_value **argv, - sqlite3_context *pErrCtx + sqlite3_context *pCtx, /* Context to use for cache search */ + sqlite3_value *pJson, /* Function param containing JSON text */ + sqlite3_context *pErrCtx, /* Write parse errors here if not NULL */ + int bUnedited /* No prior edits allowed */ ){ - const char *zJson = (const char*)sqlite3_value_text(argv[0]); - int nJson = sqlite3_value_bytes(argv[0]); + char *zJson = (char*)sqlite3_value_text(pJson); + int nJson = sqlite3_value_bytes(pJson); JsonParse *p; JsonParse *pMatch = 0; int iKey; int iMinKey = 0; u32 iMinHold = 0xffffffff; u32 iMaxHold = 0; + int bJsonRCStr; + if( zJson==0 ) return 0; for(iKey=0; iKeynJson==nJson - && memcmp(p->zJson,zJson,nJson)==0 + && (p->hasMod==0 || bUnedited==0) + && (p->zJson==zJson || memcmp(p->zJson,zJson,nJson)==0) + ){ + p->nErr = 0; + p->useMod = 0; + pMatch = p; + }else + if( pMatch==0 + && p->zAlt!=0 + && bUnedited==0 + && p->nAlt==nJson + && memcmp(p->zAlt, zJson, nJson)==0 ){ p->nErr = 0; + p->useMod = 1; pMatch = p; }else if( p->iHoldiHold; @@ -198304,24 +203165,44 @@ static JsonParse *jsonParseCached( } } if( pMatch ){ + /* The input JSON text was found in the cache. Use the preexisting + ** parse of this JSON */ pMatch->nErr = 0; pMatch->iHold = iMaxHold+1; + assert( pMatch->nJPRef>0 ); /* pMatch is owned by the cache */ return pMatch; } - p = sqlite3_malloc64( sizeof(*p) + nJson + 1 ); + + /* The input JSON was not found anywhere in the cache. We will need + ** to parse it ourselves and generate a new JsonParse object. + */ + bJsonRCStr = sqlite3ValueIsOfClass(pJson,(void(*)(void*))sqlite3RCStrUnref); + p = sqlite3_malloc64( sizeof(*p) + (bJsonRCStr ? 0 : nJson+1) ); if( p==0 ){ sqlite3_result_error_nomem(pCtx); return 0; } memset(p, 0, sizeof(*p)); - p->zJson = (char*)&p[1]; - memcpy((char*)p->zJson, zJson, nJson+1); - if( jsonParse(p, pErrCtx, p->zJson) ){ - sqlite3_free(p); + if( bJsonRCStr ){ + p->zJson = sqlite3RCStrRef(zJson); + p->bJsonIsRCStr = 1; + }else{ + p->zJson = (char*)&p[1]; + memcpy(p->zJson, zJson, nJson+1); + } + p->nJPRef = 1; + if( jsonParse(p, pErrCtx) ){ + if( pErrCtx==0 ){ + p->nErr = 1; + assert( p->nJPRef==1 ); /* Caller will own the new JsonParse object p */ + return p; + } + jsonParseFree(p); return 0; } p->nJson = nJson; p->iHold = iMaxHold+1; + /* Transfer ownership of the new JsonParse to the cache */ sqlite3_set_auxdata(pCtx, JSON_CACHE_ID+iMinKey, p, (void(*)(void*))jsonParseFree); return (JsonParse*)sqlite3_get_auxdata(pCtx, JSON_CACHE_ID+iMinKey); @@ -198331,7 +203212,7 @@ static JsonParse *jsonParseCached( ** Compare the OBJECT label at pNode against zKey,nKey. Return true on ** a match. */ -static int jsonLabelCompare(JsonNode *pNode, const char *zKey, u32 nKey){ +static int jsonLabelCompare(const JsonNode *pNode, const char *zKey, u32 nKey){ assert( pNode->eU==1 ); if( pNode->jnFlags & JNODE_RAW ){ if( pNode->n!=nKey ) return 0; @@ -198341,6 +203222,15 @@ static int jsonLabelCompare(JsonNode *pNode, const char *zKey, u32 nKey){ return strncmp(pNode->u.zJContent+1, zKey, nKey)==0; } } +static int jsonSameLabel(const JsonNode *p1, const JsonNode *p2){ + if( p1->jnFlags & JNODE_RAW ){ + return jsonLabelCompare(p2, p1->u.zJContent, p1->n); + }else if( p2->jnFlags & JNODE_RAW ){ + return jsonLabelCompare(p1, p2->u.zJContent, p2->n); + }else{ + return p1->n==p2->n && strncmp(p1->u.zJContent,p2->u.zJContent,p1->n)==0; + } +} /* forward declaration */ static JsonNode *jsonLookupAppend(JsonParse*,const char*,int*,const char**); @@ -198363,9 +203253,31 @@ static JsonNode *jsonLookupStep( ){ u32 i, j, nKey; const char *zKey; - JsonNode *pRoot = &pParse->aNode[iRoot]; + JsonNode *pRoot; + if( pParse->oom ) return 0; + pRoot = &pParse->aNode[iRoot]; + if( pRoot->jnFlags & (JNODE_REPLACE|JNODE_REMOVE) && pParse->useMod ){ + while( (pRoot->jnFlags & JNODE_REPLACE)!=0 ){ + u32 idx = (u32)(pRoot - pParse->aNode); + i = pParse->iSubst; + while( 1 /*exit-by-break*/ ){ + assert( inNode ); + assert( pParse->aNode[i].eType==JSON_SUBST ); + assert( pParse->aNode[i].eU==4 ); + assert( pParse->aNode[i].u.iPrevaNode[i].n==idx ){ + pRoot = &pParse->aNode[i+1]; + iRoot = i+1; + break; + } + i = pParse->aNode[i].u.iPrev; + } + } + if( pRoot->jnFlags & JNODE_REMOVE ){ + return 0; + } + } if( zPath[0]==0 ) return pRoot; - if( pRoot->jnFlags & JNODE_REPLACE ) return 0; if( zPath[0]=='.' ){ if( pRoot->eType!=JSON_OBJECT ) return 0; zPath++; @@ -198399,14 +203311,16 @@ static JsonNode *jsonLookupStep( j += jsonNodeSize(&pRoot[j]); } if( (pRoot->jnFlags & JNODE_APPEND)==0 ) break; + if( pParse->useMod==0 ) break; assert( pRoot->eU==2 ); - iRoot += pRoot->u.iAppend; + iRoot = pRoot->u.iAppend; pRoot = &pParse->aNode[iRoot]; j = 1; } if( pApnd ){ u32 iStart, iLabel; JsonNode *pNode; + assert( pParse->useMod ); iStart = jsonParseAddNode(pParse, JSON_OBJECT, 2, 0); iLabel = jsonParseAddNode(pParse, JSON_STRING, nKey, zKey); zPath += i; @@ -198415,7 +203329,7 @@ static JsonNode *jsonLookupStep( if( pNode ){ pRoot = &pParse->aNode[iRoot]; assert( pRoot->eU==0 ); - pRoot->u.iAppend = iStart - iRoot; + pRoot->u.iAppend = iStart; pRoot->jnFlags |= JNODE_APPEND; VVA( pRoot->eU = 2 ); pParse->aNode[iLabel].jnFlags |= JNODE_RAW; @@ -198436,12 +203350,13 @@ static JsonNode *jsonLookupStep( if( pRoot->eType!=JSON_ARRAY ) return 0; for(;;){ while( j<=pBase->n ){ - if( (pBase[j].jnFlags & JNODE_REMOVE)==0 ) i++; + if( (pBase[j].jnFlags & JNODE_REMOVE)==0 || pParse->useMod==0 ) i++; j += jsonNodeSize(&pBase[j]); } if( (pBase->jnFlags & JNODE_APPEND)==0 ) break; + if( pParse->useMod==0 ) break; assert( pBase->eU==2 ); - iBase += pBase->u.iAppend; + iBase = pBase->u.iAppend; pBase = &pParse->aNode[iBase]; j = 1; } @@ -198469,13 +203384,16 @@ static JsonNode *jsonLookupStep( zPath += j + 1; j = 1; for(;;){ - while( j<=pRoot->n && (i>0 || (pRoot[j].jnFlags & JNODE_REMOVE)!=0) ){ - if( (pRoot[j].jnFlags & JNODE_REMOVE)==0 ) i--; + while( j<=pRoot->n + && (i>0 || ((pRoot[j].jnFlags & JNODE_REMOVE)!=0 && pParse->useMod)) + ){ + if( (pRoot[j].jnFlags & JNODE_REMOVE)==0 || pParse->useMod==0 ) i--; j += jsonNodeSize(&pRoot[j]); } if( (pRoot->jnFlags & JNODE_APPEND)==0 ) break; + if( pParse->useMod==0 ) break; assert( pRoot->eU==2 ); - iRoot += pRoot->u.iAppend; + iRoot = pRoot->u.iAppend; pRoot = &pParse->aNode[iRoot]; j = 1; } @@ -198485,13 +203403,14 @@ static JsonNode *jsonLookupStep( if( i==0 && pApnd ){ u32 iStart; JsonNode *pNode; + assert( pParse->useMod ); iStart = jsonParseAddNode(pParse, JSON_ARRAY, 1, 0); pNode = jsonLookupAppend(pParse, zPath, pApnd, pzErr); if( pParse->oom ) return 0; if( pNode ){ pRoot = &pParse->aNode[iRoot]; assert( pRoot->eU==0 ); - pRoot->u.iAppend = iStart - iRoot; + pRoot->u.iAppend = iStart; pRoot->jnFlags |= JNODE_APPEND; VVA( pRoot->eU = 2 ); } @@ -198618,47 +203537,90 @@ static void jsonRemoveAllNulls(JsonNode *pNode){ ** SQL functions used for testing and debugging ****************************************************************************/ +#if SQLITE_DEBUG +/* +** Print N node entries. +*/ +static void jsonDebugPrintNodeEntries( + JsonNode *aNode, /* First node entry to print */ + int N /* Number of node entries to print */ +){ + int i; + for(i=0; iaNode, p->nNode); +} +static void jsonDebugPrintNode(JsonNode *pNode){ + jsonDebugPrintNodeEntries(pNode, jsonNodeSize(pNode)); +} +#else + /* The usual case */ +# define jsonDebugPrintNode(X) +# define jsonDebugPrintParse(X) +#endif + #ifdef SQLITE_DEBUG /* -** The json_parse(JSON) function returns a string which describes -** a parse of the JSON provided. Or it returns NULL if JSON is not -** well-formed. +** SQL function: json_parse(JSON) +** +** Parse JSON using jsonParseCached(). Then print a dump of that +** parse on standard output. Return the mimified JSON result, just +** like the json() function. */ static void jsonParseFunc( sqlite3_context *ctx, int argc, sqlite3_value **argv ){ - JsonString s; /* Output string - not real JSON */ - JsonParse x; /* The parse */ - u32 i; + JsonParse *p; /* The parse */ assert( argc==1 ); - if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return; - jsonParseFindParents(&x); - jsonInit(&s, ctx); - for(i=0; inNode); + printf("nAlloc = %u\n", p->nAlloc); + printf("nJson = %d\n", p->nJson); + printf("nAlt = %d\n", p->nAlt); + printf("nErr = %u\n", p->nErr); + printf("oom = %u\n", p->oom); + printf("hasNonstd = %u\n", p->hasNonstd); + printf("useMod = %u\n", p->useMod); + printf("hasMod = %u\n", p->hasMod); + printf("nJPRef = %u\n", p->nJPRef); + printf("iSubst = %u\n", p->iSubst); + printf("iHold = %u\n", p->iHold); + jsonDebugPrintNodeEntries(p->aNode, p->nNode); + jsonReturnJson(p, p->aNode, ctx, 1); } /* @@ -198742,7 +203704,7 @@ static void jsonArrayLengthFunc( u32 i; JsonNode *pNode; - p = jsonParseCached(ctx, argv, ctx); + p = jsonParseCached(ctx, argv[0], ctx, 0); if( p==0 ) return; assert( p->nNode ); if( argc==2 ){ @@ -198755,9 +203717,16 @@ static void jsonArrayLengthFunc( return; } if( pNode->eType==JSON_ARRAY ){ - assert( (pNode->jnFlags & JNODE_APPEND)==0 ); - for(i=1; i<=pNode->n; n++){ - i += jsonNodeSize(&pNode[i]); + while( 1 /*exit-by-break*/ ){ + i = 1; + while( i<=pNode->n ){ + if( (pNode[i].jnFlags & JNODE_REMOVE)==0 ) n++; + i += jsonNodeSize(&pNode[i]); + } + if( (pNode->jnFlags & JNODE_APPEND)==0 ) break; + if( p->useMod==0 ) break; + assert( pNode->eU==2 ); + pNode = &p->aNode[pNode->u.iAppend]; } } sqlite3_result_int64(ctx, n); @@ -198804,14 +203773,14 @@ static void jsonExtractFunc( JsonString jx; if( argc<2 ) return; - p = jsonParseCached(ctx, argv, ctx); + p = jsonParseCached(ctx, argv[0], ctx, 0); if( p==0 ) return; if( argc==2 ){ /* With a single PATH argument */ zPath = (const char*)sqlite3_value_text(argv[1]); if( zPath==0 ) return; if( flags & JSON_ABPATH ){ - if( zPath[0]!='$' ){ + if( zPath[0]!='$' || (zPath[1]!='.' && zPath[1]!='[' && zPath[1]!=0) ){ /* The -> and ->> operators accept abbreviated PATH arguments. This ** is mostly for compatibility with PostgreSQL, but also for ** convenience. @@ -198822,11 +203791,11 @@ static void jsonExtractFunc( */ jsonInit(&jx, ctx); if( sqlite3Isdigit(zPath[0]) ){ - jsonAppendRaw(&jx, "$[", 2); + jsonAppendRawNZ(&jx, "$[", 2); jsonAppendRaw(&jx, zPath, (int)strlen(zPath)); - jsonAppendRaw(&jx, "]", 2); + jsonAppendRawNZ(&jx, "]", 2); }else{ - jsonAppendRaw(&jx, "$.", 1 + (zPath[0]!='[')); + jsonAppendRawNZ(&jx, "$.", 1 + (zPath[0]!='[')); jsonAppendRaw(&jx, zPath, (int)strlen(zPath)); jsonAppendChar(&jx, 0); } @@ -198837,15 +203806,15 @@ static void jsonExtractFunc( } if( pNode ){ if( flags & JSON_JSON ){ - jsonReturnJson(pNode, ctx, 0); + jsonReturnJson(p, pNode, ctx, 0); }else{ - jsonReturn(pNode, ctx, 0); + jsonReturn(p, pNode, ctx); sqlite3_result_subtype(ctx, 0); } } }else{ pNode = jsonLookup(p, zPath, 0, ctx); - if( p->nErr==0 && pNode ) jsonReturn(pNode, ctx, 0); + if( p->nErr==0 && pNode ) jsonReturn(p, pNode, ctx); } }else{ /* Two or more PATH arguments results in a JSON array with each @@ -198859,9 +203828,9 @@ static void jsonExtractFunc( if( p->nErr ) break; jsonAppendSeparator(&jx); if( pNode ){ - jsonRenderNode(pNode, &jx, 0); + jsonRenderNode(p, pNode, &jx); }else{ - jsonAppendRaw(&jx, "null", 4); + jsonAppendRawNZ(&jx, "null", 4); } } if( i==argc ){ @@ -198902,51 +203871,42 @@ static JsonNode *jsonMergePatch( assert( pPatch[i].eU==1 ); nKey = pPatch[i].n; zKey = pPatch[i].u.zJContent; - assert( (pPatch[i].jnFlags & JNODE_RAW)==0 ); for(j=1; jn; j += jsonNodeSize(&pTarget[j+1])+1 ){ assert( pTarget[j].eType==JSON_STRING ); assert( pTarget[j].jnFlags & JNODE_LABEL ); - assert( (pPatch[i].jnFlags & JNODE_RAW)==0 ); - if( pTarget[j].n==nKey && strncmp(pTarget[j].u.zJContent,zKey,nKey)==0 ){ - if( pTarget[j+1].jnFlags & (JNODE_REMOVE|JNODE_PATCH) ) break; + if( jsonSameLabel(&pPatch[i], &pTarget[j]) ){ + if( pTarget[j+1].jnFlags & (JNODE_REMOVE|JNODE_REPLACE) ) break; if( pPatch[i+1].eType==JSON_NULL ){ pTarget[j+1].jnFlags |= JNODE_REMOVE; }else{ JsonNode *pNew = jsonMergePatch(pParse, iTarget+j+1, &pPatch[i+1]); if( pNew==0 ) return 0; - pTarget = &pParse->aNode[iTarget]; - if( pNew!=&pTarget[j+1] ){ - assert( pTarget[j+1].eU==0 - || pTarget[j+1].eU==1 - || pTarget[j+1].eU==2 ); - testcase( pTarget[j+1].eU==1 ); - testcase( pTarget[j+1].eU==2 ); - VVA( pTarget[j+1].eU = 5 ); - pTarget[j+1].u.pPatch = pNew; - pTarget[j+1].jnFlags |= JNODE_PATCH; + if( pNew!=&pParse->aNode[iTarget+j+1] ){ + jsonParseAddSubstNode(pParse, iTarget+j+1); + jsonParseAddNodeArray(pParse, pNew, jsonNodeSize(pNew)); } + pTarget = &pParse->aNode[iTarget]; } break; } } if( j>=pTarget->n && pPatch[i+1].eType!=JSON_NULL ){ - int iStart, iPatch; - iStart = jsonParseAddNode(pParse, JSON_OBJECT, 2, 0); + int iStart; + JsonNode *pApnd; + u32 nApnd; + iStart = jsonParseAddNode(pParse, JSON_OBJECT, 0, 0); jsonParseAddNode(pParse, JSON_STRING, nKey, zKey); - iPatch = jsonParseAddNode(pParse, JSON_TRUE, 0, 0); + pApnd = &pPatch[i+1]; + if( pApnd->eType==JSON_OBJECT ) jsonRemoveAllNulls(pApnd); + nApnd = jsonNodeSize(pApnd); + jsonParseAddNodeArray(pParse, pApnd, jsonNodeSize(pApnd)); if( pParse->oom ) return 0; - jsonRemoveAllNulls(pPatch); - pTarget = &pParse->aNode[iTarget]; - assert( pParse->aNode[iRoot].eU==0 || pParse->aNode[iRoot].eU==2 ); - testcase( pParse->aNode[iRoot].eU==2 ); + pParse->aNode[iStart].n = 1+nApnd; pParse->aNode[iRoot].jnFlags |= JNODE_APPEND; + pParse->aNode[iRoot].u.iAppend = iStart; VVA( pParse->aNode[iRoot].eU = 2 ); - pParse->aNode[iRoot].u.iAppend = iStart - iRoot; iRoot = iStart; - assert( pParse->aNode[iPatch].eU==0 ); - VVA( pParse->aNode[iPatch].eU = 5 ); - pParse->aNode[iPatch].jnFlags |= JNODE_PATCH; - pParse->aNode[iPatch].u.pPatch = &pPatch[i+1]; + pTarget = &pParse->aNode[iTarget]; } } return pTarget; @@ -198962,25 +203922,28 @@ static void jsonPatchFunc( int argc, sqlite3_value **argv ){ - JsonParse x; /* The JSON that is being patched */ - JsonParse y; /* The patch */ + JsonParse *pX; /* The JSON that is being patched */ + JsonParse *pY; /* The patch */ JsonNode *pResult; /* The result of the merge */ UNUSED_PARAMETER(argc); - if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return; - if( jsonParse(&y, ctx, (const char*)sqlite3_value_text(argv[1])) ){ - jsonParseReset(&x); - return; - } - pResult = jsonMergePatch(&x, 0, y.aNode); - assert( pResult!=0 || x.oom ); - if( pResult ){ - jsonReturnJson(pResult, ctx, 0); + pX = jsonParseCached(ctx, argv[0], ctx, 1); + if( pX==0 ) return; + assert( pX->hasMod==0 ); + pX->hasMod = 1; + pY = jsonParseCached(ctx, argv[1], ctx, 1); + if( pY==0 ) return; + pX->useMod = 1; + pY->useMod = 1; + pResult = jsonMergePatch(pX, 0, pY->aNode); + assert( pResult!=0 || pX->oom ); + if( pResult && pX->oom==0 ){ + jsonDebugPrintParse(pX); + jsonDebugPrintNode(pResult); + jsonReturnJson(pX, pResult, ctx, 0); }else{ sqlite3_result_error_nomem(ctx); } - jsonParseReset(&x); - jsonParseReset(&y); } @@ -199036,26 +203999,118 @@ static void jsonRemoveFunc( int argc, sqlite3_value **argv ){ - JsonParse x; /* The parse */ + JsonParse *pParse; /* The parse */ JsonNode *pNode; const char *zPath; u32 i; if( argc<1 ) return; - if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return; - assert( x.nNode ); + pParse = jsonParseCached(ctx, argv[0], ctx, argc>1); + if( pParse==0 ) return; for(i=1; i<(u32)argc; i++){ zPath = (const char*)sqlite3_value_text(argv[i]); if( zPath==0 ) goto remove_done; - pNode = jsonLookup(&x, zPath, 0, ctx); - if( x.nErr ) goto remove_done; - if( pNode ) pNode->jnFlags |= JNODE_REMOVE; + pNode = jsonLookup(pParse, zPath, 0, ctx); + if( pParse->nErr ) goto remove_done; + if( pNode ){ + pNode->jnFlags |= JNODE_REMOVE; + pParse->hasMod = 1; + pParse->useMod = 1; + } } - if( (x.aNode[0].jnFlags & JNODE_REMOVE)==0 ){ - jsonReturnJson(x.aNode, ctx, 0); + if( (pParse->aNode[0].jnFlags & JNODE_REMOVE)==0 ){ + jsonReturnJson(pParse, pParse->aNode, ctx, 1); } remove_done: - jsonParseReset(&x); + jsonDebugPrintParse(p); +} + +/* +** Substitute the value at iNode with the pValue parameter. +*/ +static void jsonReplaceNode( + sqlite3_context *pCtx, + JsonParse *p, + int iNode, + sqlite3_value *pValue +){ + int idx = jsonParseAddSubstNode(p, iNode); + if( idx<=0 ){ + assert( p->oom ); + return; + } + switch( sqlite3_value_type(pValue) ){ + case SQLITE_NULL: { + jsonParseAddNode(p, JSON_NULL, 0, 0); + break; + } + case SQLITE_FLOAT: { + char *z = sqlite3_mprintf("%!0.15g", sqlite3_value_double(pValue)); + int n; + if( z==0 ){ + p->oom = 1; + break; + } + n = sqlite3Strlen30(z); + jsonParseAddNode(p, JSON_REAL, n, z); + jsonParseAddCleanup(p, sqlite3_free, z); + break; + } + case SQLITE_INTEGER: { + char *z = sqlite3_mprintf("%lld", sqlite3_value_int64(pValue)); + int n; + if( z==0 ){ + p->oom = 1; + break; + } + n = sqlite3Strlen30(z); + jsonParseAddNode(p, JSON_INT, n, z); + jsonParseAddCleanup(p, sqlite3_free, z); + + break; + } + case SQLITE_TEXT: { + const char *z = (const char*)sqlite3_value_text(pValue); + u32 n = (u32)sqlite3_value_bytes(pValue); + if( z==0 ){ + p->oom = 1; + break; + } + if( sqlite3_value_subtype(pValue)!=JSON_SUBTYPE ){ + char *zCopy = sqlite3DbStrDup(0, z); + int k; + if( zCopy ){ + jsonParseAddCleanup(p, sqlite3_free, zCopy); + }else{ + p->oom = 1; + sqlite3_result_error_nomem(pCtx); + } + k = jsonParseAddNode(p, JSON_STRING, n, zCopy); + assert( k>0 || p->oom ); + if( p->oom==0 ) p->aNode[k].jnFlags |= JNODE_RAW; + }else{ + JsonParse *pPatch = jsonParseCached(pCtx, pValue, pCtx, 1); + if( pPatch==0 ){ + p->oom = 1; + break; + } + jsonParseAddNodeArray(p, pPatch->aNode, pPatch->nNode); + /* The nodes copied out of pPatch and into p likely contain + ** u.zJContent pointers into pPatch->zJson. So preserve the + ** content of pPatch until p is destroyed. */ + assert( pPatch->nJPRef>=1 ); + pPatch->nJPRef++; + jsonParseAddCleanup(p, (void(*)(void*))jsonParseFree, pPatch); + } + break; + } + default: { + jsonParseAddNode(p, JSON_NULL, 0, 0); + sqlite3_result_error(pCtx, "JSON cannot hold BLOB values", -1); + p->nErr++; + break; + } + } } /* @@ -199069,7 +204124,7 @@ static void jsonReplaceFunc( int argc, sqlite3_value **argv ){ - JsonParse x; /* The parse */ + JsonParse *pParse; /* The parse */ JsonNode *pNode; const char *zPath; u32 i; @@ -199079,28 +204134,20 @@ static void jsonReplaceFunc( jsonWrongNumArgs(ctx, "replace"); return; } - if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return; - assert( x.nNode ); + pParse = jsonParseCached(ctx, argv[0], ctx, argc>1); + if( pParse==0 ) return; for(i=1; i<(u32)argc; i+=2){ zPath = (const char*)sqlite3_value_text(argv[i]); - pNode = jsonLookup(&x, zPath, 0, ctx); - if( x.nErr ) goto replace_err; + pParse->useMod = 1; + pNode = jsonLookup(pParse, zPath, 0, ctx); + if( pParse->nErr ) goto replace_err; if( pNode ){ - assert( pNode->eU==0 || pNode->eU==1 || pNode->eU==4 ); - testcase( pNode->eU!=0 && pNode->eU!=1 ); - pNode->jnFlags |= (u8)JNODE_REPLACE; - VVA( pNode->eU = 4 ); - pNode->u.iReplace = i + 1; + jsonReplaceNode(ctx, pParse, (u32)(pNode - pParse->aNode), argv[i+1]); } } - if( x.aNode[0].jnFlags & JNODE_REPLACE ){ - assert( x.aNode[0].eU==4 ); - sqlite3_result_value(ctx, argv[x.aNode[0].u.iReplace]); - }else{ - jsonReturnJson(x.aNode, ctx, argv); - } + jsonReturnJson(pParse, pParse->aNode, ctx, 1); replace_err: - jsonParseReset(&x); + jsonDebugPrintParse(pParse); } @@ -199121,7 +204168,7 @@ static void jsonSetFunc( int argc, sqlite3_value **argv ){ - JsonParse x; /* The parse */ + JsonParse *pParse; /* The parse */ JsonNode *pNode; const char *zPath; u32 i; @@ -199133,33 +204180,27 @@ static void jsonSetFunc( jsonWrongNumArgs(ctx, bIsSet ? "set" : "insert"); return; } - if( jsonParse(&x, ctx, (const char*)sqlite3_value_text(argv[0])) ) return; - assert( x.nNode ); + pParse = jsonParseCached(ctx, argv[0], ctx, argc>1); + if( pParse==0 ) return; for(i=1; i<(u32)argc; i+=2){ zPath = (const char*)sqlite3_value_text(argv[i]); bApnd = 0; - pNode = jsonLookup(&x, zPath, &bApnd, ctx); - if( x.oom ){ + pParse->useMod = 1; + pNode = jsonLookup(pParse, zPath, &bApnd, ctx); + if( pParse->oom ){ sqlite3_result_error_nomem(ctx); goto jsonSetDone; - }else if( x.nErr ){ + }else if( pParse->nErr ){ goto jsonSetDone; }else if( pNode && (bApnd || bIsSet) ){ - testcase( pNode->eU!=0 && pNode->eU!=1 ); - assert( pNode->eU!=3 && pNode->eU!=5 ); - VVA( pNode->eU = 4 ); - pNode->jnFlags |= (u8)JNODE_REPLACE; - pNode->u.iReplace = i + 1; + jsonReplaceNode(ctx, pParse, (u32)(pNode - pParse->aNode), argv[i+1]); } } - if( x.aNode[0].jnFlags & JNODE_REPLACE ){ - assert( x.aNode[0].eU==4 ); - sqlite3_result_value(ctx, argv[x.aNode[0].u.iReplace]); - }else{ - jsonReturnJson(x.aNode, ctx, argv); - } + jsonDebugPrintParse(pParse); + jsonReturnJson(pParse, pParse->aNode, ctx, 1); + jsonSetDone: - jsonParseReset(&x); + /* no cleanup required */; } /* @@ -199178,7 +204219,7 @@ static void jsonTypeFunc( const char *zPath; JsonNode *pNode; - p = jsonParseCached(ctx, argv, ctx); + p = jsonParseCached(ctx, argv[0], ctx, 0); if( p==0 ) return; if( argc==2 ){ zPath = (const char*)sqlite3_value_text(argv[1]); @@ -199194,8 +204235,8 @@ static void jsonTypeFunc( /* ** json_valid(JSON) ** -** Return 1 if JSON is a well-formed JSON string according to RFC-7159. -** Return 0 otherwise. +** Return 1 if JSON is a well-formed canonical JSON string according +** to RFC-7159. Return 0 otherwise. */ static void jsonValidFunc( sqlite3_context *ctx, @@ -199204,8 +204245,75 @@ static void jsonValidFunc( ){ JsonParse *p; /* The parse */ UNUSED_PARAMETER(argc); - p = jsonParseCached(ctx, argv, 0); - sqlite3_result_int(ctx, p!=0); + if( sqlite3_value_type(argv[0])==SQLITE_NULL ){ +#ifdef SQLITE_LEGACY_JSON_VALID + /* Incorrect legacy behavior was to return FALSE for a NULL input */ + sqlite3_result_int(ctx, 0); +#endif + return; + } + p = jsonParseCached(ctx, argv[0], 0, 0); + if( p==0 || p->oom ){ + sqlite3_result_error_nomem(ctx); + sqlite3_free(p); + }else{ + sqlite3_result_int(ctx, p->nErr==0 && (p->hasNonstd==0 || p->useMod)); + if( p->nErr ) jsonParseFree(p); + } +} + +/* +** json_error_position(JSON) +** +** If the argument is not an interpretable JSON string, then return the 1-based +** character position at which the parser first recognized that the input +** was in error. The left-most character is 1. If the string is valid +** JSON, then return 0. +** +** Note that json_valid() is only true for strictly conforming canonical JSON. +** But this routine returns zero if the input contains extension. Thus: +** +** (1) If the input X is strictly conforming canonical JSON: +** +** json_valid(X) returns true +** json_error_position(X) returns 0 +** +** (2) If the input X is JSON but it includes extension (such as JSON5) that +** are not part of RFC-8259: +** +** json_valid(X) returns false +** json_error_position(X) return 0 +** +** (3) If the input X cannot be interpreted as JSON even taking extensions +** into account: +** +** json_valid(X) return false +** json_error_position(X) returns 1 or more +*/ +static void jsonErrorFunc( + sqlite3_context *ctx, + int argc, + sqlite3_value **argv +){ + JsonParse *p; /* The parse */ + UNUSED_PARAMETER(argc); + if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return; + p = jsonParseCached(ctx, argv[0], 0, 0); + if( p==0 || p->oom ){ + sqlite3_result_error_nomem(ctx); + sqlite3_free(p); + }else if( p->nErr==0 ){ + sqlite3_result_int(ctx, 0); + }else{ + int n = 1; + u32 i; + const char *z = (const char*)sqlite3_value_text(argv[0]); + for(i=0; iiErr && ALWAYS(z[i]); i++){ + if( (z[i]&0xc0)!=0x80 ) n++; + } + sqlite3_result_int(ctx, n); + jsonParseFree(p); + } } @@ -199247,7 +204355,8 @@ static void jsonArrayCompute(sqlite3_context *ctx, int isFinal){ assert( pStr->bStatic ); }else if( isFinal ){ sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, - pStr->bStatic ? SQLITE_TRANSIENT : sqlite3_free); + pStr->bStatic ? SQLITE_TRANSIENT : + (void(*)(void*))sqlite3RCStrUnref); pStr->bStatic = 1; }else{ sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT); @@ -199288,7 +204397,7 @@ static void jsonGroupInverse( pStr = (JsonString*)sqlite3_aggregate_context(ctx, 0); #ifdef NEVER /* pStr is always non-NULL since jsonArrayStep() or jsonObjectStep() will - ** always have been called to initalize it */ + ** always have been called to initialize it */ if( NEVER(!pStr) ) return; #endif z = pStr->zBuf; @@ -199355,7 +204464,8 @@ static void jsonObjectCompute(sqlite3_context *ctx, int isFinal){ assert( pStr->bStatic ); }else if( isFinal ){ sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, - pStr->bStatic ? SQLITE_TRANSIENT : sqlite3_free); + pStr->bStatic ? SQLITE_TRANSIENT : + (void(*)(void*))sqlite3RCStrUnref); pStr->bStatic = 1; }else{ sqlite3_result_text(ctx, pStr->zBuf, (int)pStr->nUsed, SQLITE_TRANSIENT); @@ -199466,7 +204576,6 @@ static int jsonEachOpenTree(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ /* Reset a JsonEachCursor back to its original state. Free any memory ** held. */ static void jsonEachCursorReset(JsonEachCursor *p){ - sqlite3_free(p->zJson); sqlite3_free(p->zRoot); jsonParseReset(&p->sParse); p->iRowid = 0; @@ -199549,14 +204658,16 @@ static void jsonAppendObjectPathElement( assert( pNode->eU==1 ); z = pNode->u.zJContent; nn = pNode->n; - assert( nn>=2 ); - assert( z[0]=='"' ); - assert( z[nn-1]=='"' ); - if( nn>2 && sqlite3Isalpha(z[1]) ){ - for(jj=2; jjjnFlags & JNODE_RAW)==0 ){ + assert( nn>=2 ); + assert( z[0]=='"' || z[0]=='\'' ); + assert( z[nn-1]=='"' || z[0]=='\'' ); + if( nn>2 && sqlite3Isalpha(z[1]) ){ + for(jj=2; jji==0 ) break; if( p->eType==JSON_OBJECT ){ - jsonReturn(pThis, ctx, 0); + jsonReturn(&p->sParse, pThis, ctx); }else if( p->eType==JSON_ARRAY ){ u32 iKey; if( p->bRecursive ){ @@ -199618,7 +204729,7 @@ static int jsonEachColumn( } case JEACH_VALUE: { if( pThis->jnFlags & JNODE_LABEL ) pThis++; - jsonReturn(pThis, ctx, 0); + jsonReturn(&p->sParse, pThis, ctx); break; } case JEACH_TYPE: { @@ -199629,7 +204740,7 @@ static int jsonEachColumn( case JEACH_ATOM: { if( pThis->jnFlags & JNODE_LABEL ) pThis++; if( pThis->eType>=JSON_ARRAY ) break; - jsonReturn(pThis, ctx, 0); + jsonReturn(&p->sParse, pThis, ctx); break; } case JEACH_ID: { @@ -199733,6 +204844,13 @@ static int jsonEachBestIndex( idxMask |= iMask; } } + if( pIdxInfo->nOrderBy>0 + && pIdxInfo->aOrderBy[0].iColumn<0 + && pIdxInfo->aOrderBy[0].desc==0 + ){ + pIdxInfo->orderByConsumed = 1; + } + if( (unusableMask & ~idxMask)!=0 ){ /* If there are any unusable constraints on JSON or ROOT, then reject ** this entire plan */ @@ -199777,11 +204895,19 @@ static int jsonEachFilter( if( idxNum==0 ) return SQLITE_OK; z = (const char*)sqlite3_value_text(argv[0]); if( z==0 ) return SQLITE_OK; - n = sqlite3_value_bytes(argv[0]); - p->zJson = sqlite3_malloc64( n+1 ); - if( p->zJson==0 ) return SQLITE_NOMEM; - memcpy(p->zJson, z, (size_t)n+1); - if( jsonParse(&p->sParse, 0, p->zJson) ){ + memset(&p->sParse, 0, sizeof(p->sParse)); + p->sParse.nJPRef = 1; + if( sqlite3ValueIsOfClass(argv[0], (void(*)(void*))sqlite3RCStrUnref) ){ + p->sParse.zJson = sqlite3RCStrRef((char*)z); + }else{ + n = sqlite3_value_bytes(argv[0]); + p->sParse.zJson = sqlite3RCStrNew( n+1 ); + if( p->sParse.zJson==0 ) return SQLITE_NOMEM; + memcpy(p->sParse.zJson, z, (size_t)n+1); + } + p->sParse.bJsonIsRCStr = 1; + p->zJson = p->sParse.zJson; + if( jsonParse(&p->sParse, 0) ){ int rc = SQLITE_NOMEM; if( p->sParse.oom==0 ){ sqlite3_free(cur->pVtab->zErrMsg); @@ -199909,6 +205035,7 @@ SQLITE_PRIVATE void sqlite3RegisterJsonFunctions(void){ JFUNCTION(json_array, -1, 0, jsonArrayFunc), JFUNCTION(json_array_length, 1, 0, jsonArrayLengthFunc), JFUNCTION(json_array_length, 2, 0, jsonArrayLengthFunc), + JFUNCTION(json_error_position,1, 0, jsonErrorFunc), JFUNCTION(json_extract, -1, 0, jsonExtractFunc), JFUNCTION(->, 2, JSON_JSON, jsonExtractFunc), JFUNCTION(->>, 2, JSON_SQL, jsonExtractFunc), @@ -199928,10 +205055,10 @@ SQLITE_PRIVATE void sqlite3RegisterJsonFunctions(void){ #endif WAGGREGATE(json_group_array, 1, 0, 0, jsonArrayStep, jsonArrayFinal, jsonArrayValue, jsonGroupInverse, - SQLITE_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS), + SQLITE_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC), WAGGREGATE(json_group_object, 2, 0, 0, jsonObjectStep, jsonObjectFinal, jsonObjectValue, jsonGroupInverse, - SQLITE_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS) + SQLITE_SUBTYPE|SQLITE_UTF8|SQLITE_DETERMINISTIC) }; sqlite3InsertBuiltinFuncs(aJsonFunc, ArraySize(aJsonFunc)); #endif @@ -200058,6 +205185,11 @@ typedef unsigned int u32; #endif #endif /* !defined(SQLITE_AMALGAMATION) */ +/* Macro to check for 4-byte alignment. Only used inside of assert() */ +#ifdef SQLITE_DEBUG +# define FOUR_BYTE_ALIGNED(X) ((((char*)(X) - (char*)0) & 3)==0) +#endif + /* #include */ /* #include */ /* #include */ @@ -200433,16 +205565,17 @@ struct RtreeMatchArg { ** at run-time. */ #ifndef SQLITE_BYTEORDER -#if defined(i386) || defined(__i386__) || defined(_M_IX86) || \ - defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \ - defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \ - defined(__arm__) -# define SQLITE_BYTEORDER 1234 -#elif defined(sparc) || defined(__ppc__) -# define SQLITE_BYTEORDER 4321 -#else -# define SQLITE_BYTEORDER 0 /* 0 means "unknown at compile-time" */ -#endif +# if defined(i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) || \ + defined(_M_AMD64) || defined(_M_ARM) || defined(__x86) || \ + defined(__ARMEL__) || defined(__AARCH64EL__) || defined(_M_ARM64) +# define SQLITE_BYTEORDER 1234 +# elif defined(sparc) || defined(__ppc__) || \ + defined(__ARMEB__) || defined(__AARCH64EB__) +# define SQLITE_BYTEORDER 4321 +# else +# define SQLITE_BYTEORDER 0 +# endif #endif @@ -200463,7 +205596,7 @@ static int readInt16(u8 *p){ return (p[0]<<8) + p[1]; } static void readCoord(u8 *p, RtreeCoord *pCoord){ - assert( ((((char*)p) - (char*)0)&3)==0 ); /* p is always 4-byte aligned */ + assert( FOUR_BYTE_ALIGNED(p) ); #if SQLITE_BYTEORDER==1234 && MSVC_VERSION>=1300 pCoord->u = _byteswap_ulong(*(u32*)p); #elif SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 @@ -200517,7 +205650,7 @@ static void writeInt16(u8 *p, int i){ } static int writeCoord(u8 *p, RtreeCoord *pCoord){ u32 i; - assert( ((((char*)p) - (char*)0)&3)==0 ); /* p is always 4-byte aligned */ + assert( FOUR_BYTE_ALIGNED(p) ); assert( sizeof(RtreeCoord)==4 ); assert( sizeof(u32)==4 ); #if SQLITE_BYTEORDER==1234 && GCC_VERSION>=4003000 @@ -201245,7 +206378,7 @@ static void rtreeNonleafConstraint( assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_TRUE || p->op==RTREE_FALSE ); - assert( ((((char*)pCellData) - (char*)0)&3)==0 ); /* 4-byte aligned */ + assert( FOUR_BYTE_ALIGNED(pCellData) ); switch( p->op ){ case RTREE_TRUE: return; /* Always satisfied */ case RTREE_FALSE: break; /* Never satisfied */ @@ -201298,7 +206431,7 @@ static void rtreeLeafConstraint( || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_TRUE || p->op==RTREE_FALSE ); pCellData += 8 + p->iCoord*4; - assert( ((((char*)pCellData) - (char*)0)&3)==0 ); /* 4-byte aligned */ + assert( FOUR_BYTE_ALIGNED(pCellData) ); RTREE_DECODE_COORD(eInt, pCellData, xN); switch( p->op ){ case RTREE_TRUE: return; /* Always satisfied */ @@ -201868,7 +207001,20 @@ static int rtreeFilter( p->pInfo->nCoord = pRtree->nDim2; p->pInfo->anQueue = pCsr->anQueue; p->pInfo->mxLevel = pRtree->iDepth + 1; - }else if( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT ){ + }else if( eType==SQLITE_INTEGER ){ + sqlite3_int64 iVal = sqlite3_value_int64(argv[ii]); +#ifdef SQLITE_RTREE_INT_ONLY + p->u.rValue = iVal; +#else + p->u.rValue = (double)iVal; + if( iVal>=((sqlite3_int64)1)<<48 + || iVal<=-(((sqlite3_int64)1)<<48) + ){ + if( p->op==RTREE_LT ) p->op = RTREE_LE; + if( p->op==RTREE_GT ) p->op = RTREE_GE; + } +#endif + }else if( eType==SQLITE_FLOAT ){ #ifdef SQLITE_RTREE_INT_ONLY p->u.rValue = sqlite3_value_int64(argv[ii]); #else @@ -201999,11 +207145,12 @@ static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ || p->op==SQLITE_INDEX_CONSTRAINT_MATCH) ){ u8 op; + u8 doOmit = 1; switch( p->op ){ - case SQLITE_INDEX_CONSTRAINT_EQ: op = RTREE_EQ; break; - case SQLITE_INDEX_CONSTRAINT_GT: op = RTREE_GT; break; + case SQLITE_INDEX_CONSTRAINT_EQ: op = RTREE_EQ; doOmit = 0; break; + case SQLITE_INDEX_CONSTRAINT_GT: op = RTREE_GT; doOmit = 0; break; case SQLITE_INDEX_CONSTRAINT_LE: op = RTREE_LE; break; - case SQLITE_INDEX_CONSTRAINT_LT: op = RTREE_LT; break; + case SQLITE_INDEX_CONSTRAINT_LT: op = RTREE_LT; doOmit = 0; break; case SQLITE_INDEX_CONSTRAINT_GE: op = RTREE_GE; break; case SQLITE_INDEX_CONSTRAINT_MATCH: op = RTREE_MATCH; break; default: op = 0; break; @@ -202012,7 +207159,7 @@ static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ zIdxStr[iIdx++] = op; zIdxStr[iIdx++] = (char)(p->iColumn - 1 + '0'); pIdxInfo->aConstraintUsage[ii].argvIndex = (iIdx/2); - pIdxInfo->aConstraintUsage[ii].omit = 1; + pIdxInfo->aConstraintUsage[ii].omit = doOmit; } } } @@ -204670,7 +209817,7 @@ static GeoPoly *geopolyFuncParam( int nByte; testcase( pCtx==0 ); if( sqlite3_value_type(pVal)==SQLITE_BLOB - && (nByte = sqlite3_value_bytes(pVal))>=(4+6*sizeof(GeoCoord)) + && (nByte = sqlite3_value_bytes(pVal))>=(int)(4+6*sizeof(GeoCoord)) ){ const unsigned char *a = sqlite3_value_blob(pVal); int nVertex; @@ -204728,6 +209875,7 @@ static void geopolyBlobFunc( sqlite3_value **argv ){ GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + (void)argc; if( p ){ sqlite3_result_blob(context, p->hdr, 4+8*p->nVertex, SQLITE_TRANSIENT); @@ -204747,6 +209895,7 @@ static void geopolyJsonFunc( sqlite3_value **argv ){ GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + (void)argc; if( p ){ sqlite3 *db = sqlite3_context_db_handle(context); sqlite3_str *x = sqlite3_str_new(db); @@ -204828,6 +209977,7 @@ static void geopolyXformFunc( double F = sqlite3_value_double(argv[6]); GeoCoord x1, y1, x0, y0; int ii; + (void)argc; if( p ){ for(ii=0; iinVertex; ii++){ x0 = GeoX(p,ii); @@ -204878,6 +210028,7 @@ static void geopolyAreaFunc( sqlite3_value **argv ){ GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + (void)argc; if( p ){ sqlite3_result_double(context, geopolyArea(p)); sqlite3_free(p); @@ -204903,6 +210054,7 @@ static void geopolyCcwFunc( sqlite3_value **argv ){ GeoPoly *p = geopolyFuncParam(context, argv[0], 0); + (void)argc; if( p ){ if( geopolyArea(p)<0.0 ){ int ii, jj; @@ -204957,6 +210109,7 @@ static void geopolyRegularFunc( int n = sqlite3_value_int(argv[3]); int i; GeoPoly *p; + (void)argc; if( n<3 || r<=0.0 ) return; if( n>1000 ) n = 1000; @@ -205066,6 +210219,7 @@ static void geopolyBBoxFunc( sqlite3_value **argv ){ GeoPoly *p = geopolyBBox(context, argv[0], 0, 0); + (void)argc; if( p ){ sqlite3_result_blob(context, p->hdr, 4+8*p->nVertex, SQLITE_TRANSIENT); @@ -205093,6 +210247,7 @@ static void geopolyBBoxStep( ){ RtreeCoord a[4]; int rc = SQLITE_OK; + (void)argc; (void)geopolyBBox(context, argv[0], a, &rc); if( rc==SQLITE_OK ){ GeoBBox *pBBox; @@ -205181,6 +210336,8 @@ static void geopolyContainsPointFunc( int v = 0; int cnt = 0; int ii; + (void)argc; + if( p1==0 ) return; for(ii=0; iinVertex-1; ii++){ v = pointBeneathLine(x0,y0,GeoX(p1,ii), GeoY(p1,ii), @@ -205220,6 +210377,7 @@ static void geopolyWithinFunc( ){ GeoPoly *p1 = geopolyFuncParam(context, argv[0], 0); GeoPoly *p2 = geopolyFuncParam(context, argv[1], 0); + (void)argc; if( p1 && p2 ){ int x = geopolyOverlap(p1, p2); if( x<0 ){ @@ -205550,6 +210708,7 @@ static void geopolyOverlapFunc( ){ GeoPoly *p1 = geopolyFuncParam(context, argv[0], 0); GeoPoly *p2 = geopolyFuncParam(context, argv[1], 0); + (void)argc; if( p1 && p2 ){ int x = geopolyOverlap(p1, p2); if( x<0 ){ @@ -205570,8 +210729,12 @@ static void geopolyDebugFunc( int argc, sqlite3_value **argv ){ + (void)context; + (void)argc; #ifdef GEOPOLY_ENABLE_DEBUG geo_debug = sqlite3_value_int(argv[0]); +#else + (void)argv; #endif } @@ -205599,6 +210762,7 @@ static int geopolyInit( sqlite3_str *pSql; char *zSql; int ii; + (void)pAux; sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1); @@ -205715,6 +210879,7 @@ static int geopolyFilter( RtreeNode *pRoot = 0; int rc = SQLITE_OK; int iCell = 0; + (void)idxStr; rtreeReference(pRtree); @@ -205841,6 +211006,7 @@ static int geopolyBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ int iRowidTerm = -1; int iFuncTerm = -1; int idxNum = 0; + (void)tab; for(ii=0; iinConstraint; ii++){ struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[ii]; @@ -206087,6 +211253,8 @@ static int geopolyFindFunction( void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), void **ppArg ){ + (void)pVtab; + (void)nArg; if( sqlite3_stricmp(zName, "geopoly_overlap")==0 ){ *pxFunc = geopolyOverlapFunc; *ppArg = 0; @@ -206156,7 +211324,7 @@ static int sqlite3_geopoly_init(sqlite3 *db){ } aAgg[] = { { geopolyBBoxStep, geopolyBBoxFinal, "geopoly_group_bbox" }, }; - int i; + unsigned int i; for(i=0; i naming scheme. +** tables or views named using the data_ naming scheme. ** ** Instead of the plain data_ naming scheme, RBU database tables ** may also be named data_, where is any sequence @@ -207390,7 +212558,7 @@ SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule( ** ** If the target database table is a virtual table or a table that has no ** PRIMARY KEY declaration, the data_% table must also contain a column -** named "rbu_rowid". This column is mapped to the tables implicit primary +** named "rbu_rowid". This column is mapped to the table's implicit primary ** key column - "rowid". Virtual tables for which the "rowid" column does ** not function like a primary key value cannot be updated using RBU. For ** example, if the target db contains either of the following: @@ -210856,11 +216024,11 @@ static void rbuSetupCheckpoint(sqlite3rbu *p, RbuState *pState){ ** no-ops. These locks will not be released until the connection ** is closed. ** - ** * Attempting to xSync() the database file causes an SQLITE_INTERNAL + ** * Attempting to xSync() the database file causes an SQLITE_NOTICE ** error. ** ** As a result, unless an error (i.e. OOM or SQLITE_BUSY) occurs, the - ** checkpoint below fails with SQLITE_INTERNAL, and leaves the aFrame[] + ** checkpoint below fails with SQLITE_NOTICE, and leaves the aFrame[] ** array populated with a set of (frame -> page) mappings. Because the ** WRITER, CHECKPOINT and READ0 locks are still held, it is safe to copy ** data from the wal file into the database file according to the @@ -210870,7 +216038,7 @@ static void rbuSetupCheckpoint(sqlite3rbu *p, RbuState *pState){ int rc2; p->eStage = RBU_STAGE_CAPTURE; rc2 = sqlite3_exec(p->dbMain, "PRAGMA main.wal_checkpoint=restart", 0, 0,0); - if( rc2!=SQLITE_INTERNAL ) p->rc = rc2; + if( rc2!=SQLITE_NOTICE ) p->rc = rc2; } if( p->rc==SQLITE_OK && p->nFrame>0 ){ @@ -210916,7 +216084,7 @@ static int rbuCaptureWalRead(sqlite3rbu *pRbu, i64 iOff, int iAmt){ if( pRbu->mLock!=mReq ){ pRbu->rc = SQLITE_BUSY; - return SQLITE_INTERNAL; + return SQLITE_NOTICE_RBU; } pRbu->pgsz = iAmt; @@ -210966,6 +216134,11 @@ static void rbuCheckpointFrame(sqlite3rbu *p, RbuFrame *pFrame){ p->rc = pDb->pMethods->xWrite(pDb, p->aBuf, p->pgsz, iOff); } +/* +** This value is copied from the definition of ZIPVFS_CTRL_FILE_POINTER +** in zipvfs.h. +*/ +#define RBU_ZIPVFS_CTRL_FILE_POINTER 230439 /* ** Take an EXCLUSIVE lock on the database file. Return SQLITE_OK if @@ -210974,9 +216147,20 @@ static void rbuCheckpointFrame(sqlite3rbu *p, RbuFrame *pFrame){ static int rbuLockDatabase(sqlite3 *db){ int rc = SQLITE_OK; sqlite3_file *fd = 0; - sqlite3_file_control(db, "main", SQLITE_FCNTL_FILE_POINTER, &fd); - if( fd->pMethods ){ + sqlite3_file_control(db, "main", RBU_ZIPVFS_CTRL_FILE_POINTER, &fd); + if( fd ){ + sqlite3_file_control(db, "main", SQLITE_FCNTL_FILE_POINTER, &fd); + rc = fd->pMethods->xLock(fd, SQLITE_LOCK_SHARED); + if( rc==SQLITE_OK ){ + rc = fd->pMethods->xUnlock(fd, SQLITE_LOCK_NONE); + } + sqlite3_file_control(db, "main", RBU_ZIPVFS_CTRL_FILE_POINTER, &fd); + }else{ + sqlite3_file_control(db, "main", SQLITE_FCNTL_FILE_POINTER, &fd); + } + + if( rc==SQLITE_OK && fd->pMethods ){ rc = fd->pMethods->xLock(fd, SQLITE_LOCK_SHARED); if( rc==SQLITE_OK ){ rc = fd->pMethods->xLock(fd, SQLITE_LOCK_EXCLUSIVE); @@ -211655,7 +216839,8 @@ static void rbuSetupOal(sqlite3rbu *p, RbuState *pState){ static void rbuDeleteOalFile(sqlite3rbu *p){ char *zOal = rbuMPrintf(p, "%s-oal", p->zTarget); if( zOal ){ - sqlite3_vfs *pVfs = sqlite3_vfs_find(0); + sqlite3_vfs *pVfs = 0; + sqlite3_file_control(p->dbMain, "main", SQLITE_FCNTL_VFS_POINTER, &pVfs); assert( pVfs && p->rc==SQLITE_OK && p->zErrmsg==0 ); pVfs->xDelete(pVfs, zOal, 0); sqlite3_free(zOal); @@ -212303,7 +217488,7 @@ SQLITE_API void sqlite3rbu_rename_handler( ** database file are recorded. xShmLock() calls to unlock the same ** locks are no-ops (so that once obtained, these locks are never ** relinquished). Finally, calls to xSync() on the target database -** file fail with SQLITE_INTERNAL errors. +** file fail with SQLITE_NOTICE errors. */ static void rbuUnlockShm(rbu_file *p){ @@ -212412,9 +217597,12 @@ static int rbuVfsClose(sqlite3_file *pFile){ sqlite3_free(p->zDel); if( p->openFlags & SQLITE_OPEN_MAIN_DB ){ + const sqlite3_io_methods *pMeth = p->pReal->pMethods; rbuMainlistRemove(p); rbuUnlockShm(p); - p->pReal->pMethods->xShmUnmap(p->pReal, 0); + if( pMeth->iVersion>1 && pMeth->xShmUnmap ){ + pMeth->xShmUnmap(p->pReal, 0); + } } else if( (p->openFlags & SQLITE_OPEN_DELETEONCLOSE) && p->pRbu ){ rbuUpdateTempSize(p, 0); @@ -212582,7 +217770,7 @@ static int rbuVfsSync(sqlite3_file *pFile, int flags){ rbu_file *p = (rbu_file *)pFile; if( p->pRbu && p->pRbu->eStage==RBU_STAGE_CAPTURE ){ if( p->openFlags & SQLITE_OPEN_MAIN_DB ){ - return SQLITE_INTERNAL; + return SQLITE_NOTICE_RBU; } return SQLITE_OK; } @@ -212873,6 +218061,25 @@ static int rbuVfsOpen( rbuVfsShmUnmap, /* xShmUnmap */ 0, 0 /* xFetch, xUnfetch */ }; + static sqlite3_io_methods rbuvfs_io_methods1 = { + 1, /* iVersion */ + rbuVfsClose, /* xClose */ + rbuVfsRead, /* xRead */ + rbuVfsWrite, /* xWrite */ + rbuVfsTruncate, /* xTruncate */ + rbuVfsSync, /* xSync */ + rbuVfsFileSize, /* xFileSize */ + rbuVfsLock, /* xLock */ + rbuVfsUnlock, /* xUnlock */ + rbuVfsCheckReservedLock, /* xCheckReservedLock */ + rbuVfsFileControl, /* xFileControl */ + rbuVfsSectorSize, /* xSectorSize */ + rbuVfsDeviceCharacteristics, /* xDeviceCharacteristics */ + 0, 0, 0, 0, 0, 0 + }; + + + rbu_vfs *pRbuVfs = (rbu_vfs*)pVfs; sqlite3_vfs *pRealVfs = pRbuVfs->pRealVfs; rbu_file *pFd = (rbu_file *)pFile; @@ -212927,10 +218134,15 @@ static int rbuVfsOpen( rc = pRealVfs->xOpen(pRealVfs, zOpen, pFd->pReal, oflags, pOutFlags); } if( pFd->pReal->pMethods ){ + const sqlite3_io_methods *pMeth = pFd->pReal->pMethods; /* The xOpen() operation has succeeded. Set the sqlite3_file.pMethods ** pointer and, if the file is a main database file, link it into the ** mutex protected linked list of all such files. */ - pFile->pMethods = &rbuvfs_io_methods; + if( pMeth->iVersion<2 || pMeth->xShmLock==0 ){ + pFile->pMethods = &rbuvfs_io_methods1; + }else{ + pFile->pMethods = &rbuvfs_io_methods; + } if( flags & SQLITE_OPEN_MAIN_DB ){ rbuMainlistAdd(pFd); } @@ -213363,6 +218575,7 @@ static int statConnect( StatTable *pTab = 0; int rc = SQLITE_OK; int iDb; + (void)pAux; if( argc>=4 ){ Token nm; @@ -213416,6 +218629,7 @@ static int statBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ int iSchema = -1; int iName = -1; int iAgg = -1; + (void)tab; /* Look for a valid schema=? constraint. If found, change the idxNum to ** 1 and request the value of that constraint be sent to xFilter. And @@ -213941,6 +219155,8 @@ static int statFilter( int iArg = 0; /* Count of argv[] parameters used so far */ int rc = SQLITE_OK; /* Result of this operation */ const char *zName = 0; /* Only provide analysis of this table */ + (void)argc; + (void)idxStr; statResetCsr(pCsr); sqlite3_finalize(pCsr->pStmt); @@ -214024,16 +219240,16 @@ static int statColumn( } break; case 4: /* ncell */ - sqlite3_result_int(ctx, pCsr->nCell); + sqlite3_result_int64(ctx, pCsr->nCell); break; case 5: /* payload */ - sqlite3_result_int(ctx, pCsr->nPayload); + sqlite3_result_int64(ctx, pCsr->nPayload); break; case 6: /* unused */ - sqlite3_result_int(ctx, pCsr->nUnused); + sqlite3_result_int64(ctx, pCsr->nUnused); break; case 7: /* mx_payload */ - sqlite3_result_int(ctx, pCsr->nMxPayload); + sqlite3_result_int64(ctx, pCsr->nMxPayload); break; case 8: /* pgoffset */ if( !pCsr->isAgg ){ @@ -214041,7 +219257,7 @@ static int statColumn( } break; case 9: /* pgsize */ - sqlite3_result_int(ctx, pCsr->szPage); + sqlite3_result_int64(ctx, pCsr->szPage); break; case 10: { /* schema */ sqlite3 *db = sqlite3_context_db_handle(ctx); @@ -214175,8 +219391,13 @@ static int dbpageConnect( ){ DbpageTable *pTab = 0; int rc = SQLITE_OK; + (void)pAux; + (void)argc; + (void)argv; + (void)pzErr; sqlite3_vtab_config(db, SQLITE_VTAB_DIRECTONLY); + sqlite3_vtab_config(db, SQLITE_VTAB_USES_ALL_SCHEMAS); rc = sqlite3_declare_vtab(db, "CREATE TABLE x(pgno INTEGER PRIMARY KEY, data BLOB, schema HIDDEN)"); if( rc==SQLITE_OK ){ @@ -214213,6 +219434,7 @@ static int dbpageDisconnect(sqlite3_vtab *pVtab){ static int dbpageBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ int i; int iPlan = 0; + (void)tab; /* If there is a schema= constraint, it must be honored. Report a ** ridiculously large estimated cost if the schema= constraint is @@ -214259,7 +219481,6 @@ static int dbpageBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ ){ pIdxInfo->orderByConsumed = 1; } - sqlite3VtabUsesAllSchemas(pIdxInfo); return SQLITE_OK; } @@ -214328,6 +219549,8 @@ static int dbpageFilter( sqlite3 *db = pTab->db; Btree *pBt; + (void)idxStr; + /* Default setting is no rows of result */ pCsr->pgno = 1; pCsr->mxPgno = 0; @@ -214342,7 +219565,7 @@ static int dbpageFilter( pCsr->iDb = 0; } pBt = db->aDb[pCsr->iDb].pBt; - if( pBt==0 ) return SQLITE_OK; + if( NEVER(pBt==0) ) return SQLITE_OK; pCsr->pPager = sqlite3BtreePager(pBt); pCsr->szPage = sqlite3BtreeGetPageSize(pBt); pCsr->mxPgno = sqlite3BtreeLastPage(pBt); @@ -214423,6 +219646,7 @@ static int dbpageUpdate( Pager *pPager; int szPage; + (void)pRowid; if( pTab->db->flags & SQLITE_Defensive ){ zErr = "read-only"; goto update_fail; @@ -214432,18 +219656,20 @@ static int dbpageUpdate( goto update_fail; } pgno = sqlite3_value_int(argv[0]); - if( (Pgno)sqlite3_value_int(argv[1])!=pgno ){ + if( sqlite3_value_type(argv[0])==SQLITE_NULL + || (Pgno)sqlite3_value_int(argv[1])!=pgno + ){ zErr = "cannot insert"; goto update_fail; } zSchema = (const char*)sqlite3_value_text(argv[4]); - iDb = zSchema ? sqlite3FindDbName(pTab->db, zSchema) : -1; - if( iDb<0 ){ + iDb = ALWAYS(zSchema) ? sqlite3FindDbName(pTab->db, zSchema) : -1; + if( NEVER(iDb<0) ){ zErr = "no such schema"; goto update_fail; } pBt = pTab->db->aDb[iDb].pBt; - if( pgno<1 || pBt==0 || pgno>sqlite3BtreeLastPage(pBt) ){ + if( NEVER(pgno<1) || NEVER(pBt==0) || NEVER(pgno>sqlite3BtreeLastPage(pBt)) ){ zErr = "bad page number"; goto update_fail; } @@ -214482,12 +219708,11 @@ static int dbpageBegin(sqlite3_vtab *pVtab){ DbpageTable *pTab = (DbpageTable *)pVtab; sqlite3 *db = pTab->db; int i; - int rc = SQLITE_OK; - for(i=0; rc==SQLITE_OK && inDb; i++){ + for(i=0; inDb; i++){ Btree *pBt = db->aDb[i].pBt; - if( pBt ) rc = sqlite3BtreeBeginTrans(pBt, 1, 0); + if( pBt ) (void)sqlite3BtreeBeginTrans(pBt, 1, 0); } - return rc; + return SQLITE_OK; } @@ -214556,6 +219781,8 @@ typedef struct SessionInput SessionInput; # endif #endif +#define SESSIONS_ROWID "_rowid_" + static int sessions_strm_chunk_size = SESSIONS_STRM_CHUNK_SIZE; typedef struct SessionHook SessionHook; @@ -214577,6 +219804,7 @@ struct sqlite3_session { int bEnable; /* True if currently recording */ int bIndirect; /* True if all changes are indirect */ int bAutoAttach; /* True to auto-attach tables */ + int bImplicitPK; /* True to handle tables with implicit PK */ int rc; /* Non-zero if an error has occurred */ void *pFilterCtx; /* First argument to pass to xTableFilter */ int (*xTableFilter)(void *pCtx, const char *zTab); @@ -214653,6 +219881,7 @@ struct SessionTable { char *zName; /* Local name of table */ int nCol; /* Number of columns in table zName */ int bStat1; /* True if this is sqlite_stat1 */ + int bRowid; /* True if this table uses rowid for PK */ const char **azCol; /* Column names */ u8 *abPK; /* Array of primary key flags */ int nEntry; /* Total number of entries in hash table */ @@ -215045,6 +220274,7 @@ static unsigned int sessionHashAppendType(unsigned int h, int eType){ */ static int sessionPreupdateHash( sqlite3_session *pSession, /* Session object that owns pTab */ + i64 iRowid, SessionTable *pTab, /* Session table handle */ int bNew, /* True to hash the new.* PK */ int *piHash, /* OUT: Hash value */ @@ -215053,48 +220283,53 @@ static int sessionPreupdateHash( unsigned int h = 0; /* Hash value to return */ int i; /* Used to iterate through columns */ - assert( *pbNullPK==0 ); - assert( pTab->nCol==pSession->hook.xCount(pSession->hook.pCtx) ); - for(i=0; inCol; i++){ - if( pTab->abPK[i] ){ - int rc; - int eType; - sqlite3_value *pVal; - - if( bNew ){ - rc = pSession->hook.xNew(pSession->hook.pCtx, i, &pVal); - }else{ - rc = pSession->hook.xOld(pSession->hook.pCtx, i, &pVal); - } - if( rc!=SQLITE_OK ) return rc; + if( pTab->bRowid ){ + assert( pTab->nCol-1==pSession->hook.xCount(pSession->hook.pCtx) ); + h = sessionHashAppendI64(h, iRowid); + }else{ + assert( *pbNullPK==0 ); + assert( pTab->nCol==pSession->hook.xCount(pSession->hook.pCtx) ); + for(i=0; inCol; i++){ + if( pTab->abPK[i] ){ + int rc; + int eType; + sqlite3_value *pVal; - eType = sqlite3_value_type(pVal); - h = sessionHashAppendType(h, eType); - if( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT ){ - i64 iVal; - if( eType==SQLITE_INTEGER ){ - iVal = sqlite3_value_int64(pVal); + if( bNew ){ + rc = pSession->hook.xNew(pSession->hook.pCtx, i, &pVal); }else{ - double rVal = sqlite3_value_double(pVal); - assert( sizeof(iVal)==8 && sizeof(rVal)==8 ); - memcpy(&iVal, &rVal, 8); + rc = pSession->hook.xOld(pSession->hook.pCtx, i, &pVal); } - h = sessionHashAppendI64(h, iVal); - }else if( eType==SQLITE_TEXT || eType==SQLITE_BLOB ){ - const u8 *z; - int n; - if( eType==SQLITE_TEXT ){ - z = (const u8 *)sqlite3_value_text(pVal); + if( rc!=SQLITE_OK ) return rc; + + eType = sqlite3_value_type(pVal); + h = sessionHashAppendType(h, eType); + if( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT ){ + i64 iVal; + if( eType==SQLITE_INTEGER ){ + iVal = sqlite3_value_int64(pVal); + }else{ + double rVal = sqlite3_value_double(pVal); + assert( sizeof(iVal)==8 && sizeof(rVal)==8 ); + memcpy(&iVal, &rVal, 8); + } + h = sessionHashAppendI64(h, iVal); + }else if( eType==SQLITE_TEXT || eType==SQLITE_BLOB ){ + const u8 *z; + int n; + if( eType==SQLITE_TEXT ){ + z = (const u8 *)sqlite3_value_text(pVal); + }else{ + z = (const u8 *)sqlite3_value_blob(pVal); + } + n = sqlite3_value_bytes(pVal); + if( !z && (eType!=SQLITE_BLOB || n>0) ) return SQLITE_NOMEM; + h = sessionHashAppendBlob(h, n, z); }else{ - z = (const u8 *)sqlite3_value_blob(pVal); + assert( eType==SQLITE_NULL ); + assert( pTab->bStat1==0 || i!=1 ); + *pbNullPK = 1; } - n = sqlite3_value_bytes(pVal); - if( !z && (eType!=SQLITE_BLOB || n>0) ) return SQLITE_NOMEM; - h = sessionHashAppendBlob(h, n, z); - }else{ - assert( eType==SQLITE_NULL ); - assert( pTab->bStat1==0 || i!=1 ); - *pbNullPK = 1; } } } @@ -215377,6 +220612,7 @@ static int sessionMergeUpdate( */ static int sessionPreupdateEqual( sqlite3_session *pSession, /* Session object that owns SessionTable */ + i64 iRowid, /* Rowid value if pTab->bRowid */ SessionTable *pTab, /* Table associated with change */ SessionChange *pChange, /* Change to compare to */ int op /* Current pre-update operation */ @@ -215384,6 +220620,11 @@ static int sessionPreupdateEqual( int iCol; /* Used to iterate through columns */ u8 *a = pChange->aRecord; /* Cursor used to scan change record */ + if( pTab->bRowid ){ + if( a[0]!=SQLITE_INTEGER ) return 0; + return sessionGetI64(&a[1])==iRowid; + } + assert( op==SQLITE_INSERT || op==SQLITE_UPDATE || op==SQLITE_DELETE ); for(iCol=0; iColnCol; iCol++){ if( !pTab->abPK[iCol] ){ @@ -215406,6 +220647,7 @@ static int sessionPreupdateEqual( rc = pSession->hook.xOld(pSession->hook.pCtx, iCol, &pVal); } assert( rc==SQLITE_OK ); + (void)rc; /* Suppress warning about unused variable */ if( sqlite3_value_type(pVal)!=eType ) return 0; /* A SessionChange object never has a NULL value in a PK column */ @@ -215528,7 +220770,8 @@ static int sessionTableInfo( int *pnCol, /* OUT: number of columns */ const char **pzTab, /* OUT: Copy of zThis */ const char ***pazCol, /* OUT: Array of column names for table */ - u8 **pabPK /* OUT: Array of booleans - true for PK col */ + u8 **pabPK, /* OUT: Array of booleans - true for PK col */ + int *pbRowid /* OUT: True if only PK is a rowid */ ){ char *zPragma; sqlite3_stmt *pStmt; @@ -215540,6 +220783,7 @@ static int sessionTableInfo( u8 *pAlloc = 0; char **azCol = 0; u8 *abPK = 0; + int bRowid = 0; /* Set to true to use rowid as PK */ assert( pazCol && pabPK ); @@ -215584,10 +220828,15 @@ static int sessionTableInfo( } nByte = nThis + 1; + bRowid = (pbRowid!=0); while( SQLITE_ROW==sqlite3_step(pStmt) ){ nByte += sqlite3_column_bytes(pStmt, 1); nDbCol++; + if( sqlite3_column_int(pStmt, 5) ) bRowid = 0; } + if( nDbCol==0 ) bRowid = 0; + nDbCol += bRowid; + nByte += strlen(SESSIONS_ROWID); rc = sqlite3_reset(pStmt); if( rc==SQLITE_OK ){ @@ -215609,6 +220858,14 @@ static int sessionTableInfo( } i = 0; + if( bRowid ){ + size_t nName = strlen(SESSIONS_ROWID); + memcpy(pAlloc, SESSIONS_ROWID, nName+1); + azCol[i] = (char*)pAlloc; + pAlloc += nName+1; + abPK[i] = 1; + i++; + } while( SQLITE_ROW==sqlite3_step(pStmt) ){ int nName = sqlite3_column_bytes(pStmt, 1); const unsigned char *zName = sqlite3_column_text(pStmt, 1); @@ -215620,7 +220877,6 @@ static int sessionTableInfo( i++; } rc = sqlite3_reset(pStmt); - } /* If successful, populate the output variables. Otherwise, zero them and @@ -215637,6 +220893,7 @@ static int sessionTableInfo( if( pzTab ) *pzTab = 0; sessionFree(pSession, azCol); } + if( pbRowid ) *pbRowid = bRowid; sqlite3_finalize(pStmt); return rc; } @@ -215658,7 +220915,8 @@ static int sessionInitTable(sqlite3_session *pSession, SessionTable *pTab){ u8 *abPK; assert( pTab->azCol==0 || pTab->abPK==0 ); pSession->rc = sessionTableInfo(pSession, pSession->db, pSession->zDb, - pTab->zName, &pTab->nCol, 0, &pTab->azCol, &abPK + pTab->zName, &pTab->nCol, 0, &pTab->azCol, &abPK, + (pSession->bImplicitPK ? &pTab->bRowid : 0) ); if( pSession->rc==SQLITE_OK ){ int i; @@ -215730,6 +220988,7 @@ static int sessionUpdateMaxSize( ){ i64 nNew = 2; if( pC->op==SQLITE_INSERT ){ + if( pTab->bRowid ) nNew += 9; if( op!=SQLITE_DELETE ){ int ii; for(ii=0; iinCol; ii++){ @@ -215746,12 +221005,16 @@ static int sessionUpdateMaxSize( }else{ int ii; u8 *pCsr = pC->aRecord; - for(ii=0; iinCol; ii++){ + if( pTab->bRowid ){ + nNew += 9 + 1; + pCsr += 9; + } + for(ii=pTab->bRowid; iinCol; ii++){ int bChanged = 1; int nOld = 0; int eType; sqlite3_value *p = 0; - pSession->hook.xNew(pSession->hook.pCtx, ii, &p); + pSession->hook.xNew(pSession->hook.pCtx, ii-pTab->bRowid, &p); if( p==0 ){ return SQLITE_NOMEM; } @@ -215830,6 +221093,7 @@ static int sessionUpdateMaxSize( */ static void sessionPreupdateOneChange( int op, /* One of SQLITE_UPDATE, INSERT, DELETE */ + i64 iRowid, sqlite3_session *pSession, /* Session object pTab is attached to */ SessionTable *pTab /* Table that change applies to */ ){ @@ -215845,7 +221109,7 @@ static void sessionPreupdateOneChange( /* Check the number of columns in this xPreUpdate call matches the ** number of columns in the table. */ - if( pTab->nCol!=pSession->hook.xCount(pSession->hook.pCtx) ){ + if( (pTab->nCol-pTab->bRowid)!=pSession->hook.xCount(pSession->hook.pCtx) ){ pSession->rc = SQLITE_SCHEMA; return; } @@ -215878,14 +221142,16 @@ static void sessionPreupdateOneChange( /* Calculate the hash-key for this change. If the primary key of the row ** includes a NULL value, exit early. Such changes are ignored by the ** session module. */ - rc = sessionPreupdateHash(pSession, pTab, op==SQLITE_INSERT, &iHash, &bNull); + rc = sessionPreupdateHash( + pSession, iRowid, pTab, op==SQLITE_INSERT, &iHash, &bNull + ); if( rc!=SQLITE_OK ) goto error_out; if( bNull==0 ){ /* Search the hash table for an existing record for this row. */ SessionChange *pC; for(pC=pTab->apChange[iHash]; pC; pC=pC->pNext){ - if( sessionPreupdateEqual(pSession, pTab, pC, op) ) break; + if( sessionPreupdateEqual(pSession, iRowid, pTab, pC, op) ) break; } if( pC==0 ){ @@ -215900,7 +221166,7 @@ static void sessionPreupdateOneChange( /* Figure out how large an allocation is required */ nByte = sizeof(SessionChange); - for(i=0; inCol; i++){ + for(i=0; i<(pTab->nCol-pTab->bRowid); i++){ sqlite3_value *p = 0; if( op!=SQLITE_INSERT ){ TESTONLY(int trc = ) pSession->hook.xOld(pSession->hook.pCtx, i, &p); @@ -215915,6 +221181,9 @@ static void sessionPreupdateOneChange( rc = sessionSerializeValue(0, p, &nByte); if( rc!=SQLITE_OK ) goto error_out; } + if( pTab->bRowid ){ + nByte += 9; /* Size of rowid field - an integer */ + } /* Allocate the change object */ pC = (SessionChange *)sessionMalloc64(pSession, nByte); @@ -215931,7 +221200,12 @@ static void sessionPreupdateOneChange( ** required values and encodings have already been cached in memory. ** It is not possible for an OOM to occur in this block. */ nByte = 0; - for(i=0; inCol; i++){ + if( pTab->bRowid ){ + pC->aRecord[0] = SQLITE_INTEGER; + sessionPutI64(&pC->aRecord[1], iRowid); + nByte = 9; + } + for(i=0; i<(pTab->nCol-pTab->bRowid); i++){ sqlite3_value *p = 0; if( op!=SQLITE_INSERT ){ pSession->hook.xOld(pSession->hook.pCtx, i, &p); @@ -216030,6 +221304,8 @@ static void xPreUpdate( int nDb = sqlite3Strlen30(zDb); assert( sqlite3_mutex_held(db->mutex) ); + (void)iKey1; + (void)iKey2; for(pSession=(sqlite3_session *)pCtx; pSession; pSession=pSession->pNext){ SessionTable *pTab; @@ -216044,9 +221320,10 @@ static void xPreUpdate( pSession->rc = sessionFindTable(pSession, zName, &pTab); if( pTab ){ assert( pSession->rc==SQLITE_OK ); - sessionPreupdateOneChange(op, pSession, pTab); + assert( op==SQLITE_UPDATE || iKey1==iKey2 ); + sessionPreupdateOneChange(op, iKey1, pSession, pTab); if( op==SQLITE_UPDATE ){ - sessionPreupdateOneChange(SQLITE_INSERT, pSession, pTab); + sessionPreupdateOneChange(SQLITE_INSERT, iKey2, pSession, pTab); } } } @@ -216085,6 +221362,7 @@ static void sessionPreupdateHooks( typedef struct SessionDiffCtx SessionDiffCtx; struct SessionDiffCtx { sqlite3_stmt *pStmt; + int bRowid; int nOldOff; }; @@ -216093,19 +221371,20 @@ struct SessionDiffCtx { */ static int sessionDiffOld(void *pCtx, int iVal, sqlite3_value **ppVal){ SessionDiffCtx *p = (SessionDiffCtx*)pCtx; - *ppVal = sqlite3_column_value(p->pStmt, iVal+p->nOldOff); + *ppVal = sqlite3_column_value(p->pStmt, iVal+p->nOldOff+p->bRowid); return SQLITE_OK; } static int sessionDiffNew(void *pCtx, int iVal, sqlite3_value **ppVal){ SessionDiffCtx *p = (SessionDiffCtx*)pCtx; - *ppVal = sqlite3_column_value(p->pStmt, iVal); + *ppVal = sqlite3_column_value(p->pStmt, iVal+p->bRowid); return SQLITE_OK; } static int sessionDiffCount(void *pCtx){ SessionDiffCtx *p = (SessionDiffCtx*)pCtx; - return p->nOldOff ? p->nOldOff : sqlite3_column_count(p->pStmt); + return (p->nOldOff ? p->nOldOff : sqlite3_column_count(p->pStmt)) - p->bRowid; } static int sessionDiffDepth(void *pCtx){ + (void)pCtx; return 0; } @@ -216179,17 +221458,18 @@ static char *sessionExprCompareOther( } static char *sessionSelectFindNew( - int nCol, const char *zDb1, /* Pick rows in this db only */ const char *zDb2, /* But not in this one */ + int bRowid, const char *zTbl, /* Table name */ const char *zExpr ){ + const char *zSel = (bRowid ? SESSIONS_ROWID ", *" : "*"); char *zRet = sqlite3_mprintf( - "SELECT * FROM \"%w\".\"%w\" WHERE NOT EXISTS (" + "SELECT %s FROM \"%w\".\"%w\" WHERE NOT EXISTS (" " SELECT 1 FROM \"%w\".\"%w\" WHERE %s" ")", - zDb1, zTbl, zDb2, zTbl, zExpr + zSel, zDb1, zTbl, zDb2, zTbl, zExpr ); return zRet; } @@ -216203,7 +221483,9 @@ static int sessionDiffFindNew( char *zExpr ){ int rc = SQLITE_OK; - char *zStmt = sessionSelectFindNew(pTab->nCol, zDb1, zDb2, pTab->zName,zExpr); + char *zStmt = sessionSelectFindNew( + zDb1, zDb2, pTab->bRowid, pTab->zName, zExpr + ); if( zStmt==0 ){ rc = SQLITE_NOMEM; @@ -216214,8 +221496,10 @@ static int sessionDiffFindNew( SessionDiffCtx *pDiffCtx = (SessionDiffCtx*)pSession->hook.pCtx; pDiffCtx->pStmt = pStmt; pDiffCtx->nOldOff = 0; + pDiffCtx->bRowid = pTab->bRowid; while( SQLITE_ROW==sqlite3_step(pStmt) ){ - sessionPreupdateOneChange(op, pSession, pTab); + i64 iRowid = (pTab->bRowid ? sqlite3_column_int64(pStmt, 0) : 0); + sessionPreupdateOneChange(op, iRowid, pSession, pTab); } rc = sqlite3_finalize(pStmt); } @@ -216225,6 +221509,27 @@ static int sessionDiffFindNew( return rc; } +/* +** Return a comma-separated list of the fully-qualified (with both database +** and table name) column names from table pTab. e.g. +** +** "main"."t1"."a", "main"."t1"."b", "main"."t1"."c" +*/ +static char *sessionAllCols( + const char *zDb, + SessionTable *pTab +){ + int ii; + char *zRet = 0; + for(ii=0; iinCol; ii++){ + zRet = sqlite3_mprintf("%z%s\"%w\".\"%w\".\"%w\"", + zRet, (zRet ? ", " : ""), zDb, pTab->zName, pTab->azCol[ii] + ); + if( !zRet ) break; + } + return zRet; +} + static int sessionDiffFindModified( sqlite3_session *pSession, SessionTable *pTab, @@ -216239,11 +221544,13 @@ static int sessionDiffFindModified( if( zExpr2==0 ){ rc = SQLITE_NOMEM; }else{ + char *z1 = sessionAllCols(pSession->zDb, pTab); + char *z2 = sessionAllCols(zFrom, pTab); char *zStmt = sqlite3_mprintf( - "SELECT * FROM \"%w\".\"%w\", \"%w\".\"%w\" WHERE %s AND (%z)", - pSession->zDb, pTab->zName, zFrom, pTab->zName, zExpr, zExpr2 + "SELECT %s,%s FROM \"%w\".\"%w\", \"%w\".\"%w\" WHERE %s AND (%z)", + z1, z2, pSession->zDb, pTab->zName, zFrom, pTab->zName, zExpr, zExpr2 ); - if( zStmt==0 ){ + if( zStmt==0 || z1==0 || z2==0 ){ rc = SQLITE_NOMEM; }else{ sqlite3_stmt *pStmt; @@ -216254,12 +221561,15 @@ static int sessionDiffFindModified( pDiffCtx->pStmt = pStmt; pDiffCtx->nOldOff = pTab->nCol; while( SQLITE_ROW==sqlite3_step(pStmt) ){ - sessionPreupdateOneChange(SQLITE_UPDATE, pSession, pTab); + i64 iRowid = (pTab->bRowid ? sqlite3_column_int64(pStmt, 0) : 0); + sessionPreupdateOneChange(SQLITE_UPDATE, iRowid, pSession, pTab); } rc = sqlite3_finalize(pStmt); } - sqlite3_free(zStmt); } + sqlite3_free(zStmt); + sqlite3_free(z1); + sqlite3_free(z2); } return rc; @@ -216298,9 +221608,12 @@ SQLITE_API int sqlite3session_diff( int bHasPk = 0; int bMismatch = 0; int nCol; /* Columns in zFrom.zTbl */ + int bRowid = 0; u8 *abPK; const char **azCol = 0; - rc = sessionTableInfo(0, db, zFrom, zTbl, &nCol, 0, &azCol, &abPK); + rc = sessionTableInfo(0, db, zFrom, zTbl, &nCol, 0, &azCol, &abPK, + pSession->bImplicitPK ? &bRowid : 0 + ); if( rc==SQLITE_OK ){ if( pTo->nCol!=nCol ){ bMismatch = 1; @@ -216642,9 +221955,10 @@ static void sessionAppendStr( int *pRc ){ int nStr = sqlite3Strlen30(zStr); - if( 0==sessionBufferGrow(p, nStr, pRc) ){ + if( 0==sessionBufferGrow(p, nStr+1, pRc) ){ memcpy(&p->aBuf[p->nBuf], zStr, nStr); p->nBuf += nStr; + p->aBuf[p->nBuf] = 0x00; } } @@ -216666,6 +221980,27 @@ static void sessionAppendInteger( sessionAppendStr(p, aBuf, pRc); } +static void sessionAppendPrintf( + SessionBuffer *p, /* Buffer to append to */ + int *pRc, + const char *zFmt, + ... +){ + if( *pRc==SQLITE_OK ){ + char *zApp = 0; + va_list ap; + va_start(ap, zFmt); + zApp = sqlite3_vmprintf(zFmt, ap); + if( zApp==0 ){ + *pRc = SQLITE_NOMEM; + }else{ + sessionAppendStr(p, zApp, pRc); + } + va_end(ap); + sqlite3_free(zApp); + } +} + /* ** This function is a no-op if *pRc is other than SQLITE_OK when it is ** called. Otherwise, append the string zStr enclosed in quotes (") and @@ -216680,7 +222015,7 @@ static void sessionAppendIdent( const char *zStr, /* String to quote, escape and append */ int *pRc /* IN/OUT: Error code */ ){ - int nStr = sqlite3Strlen30(zStr)*2 + 2 + 1; + int nStr = sqlite3Strlen30(zStr)*2 + 2 + 2; if( 0==sessionBufferGrow(p, nStr, pRc) ){ char *zOut = (char *)&p->aBuf[p->nBuf]; const char *zIn = zStr; @@ -216691,6 +222026,7 @@ static void sessionAppendIdent( } *zOut++ = '"'; p->nBuf = (int)((u8 *)zOut - p->aBuf); + p->aBuf[p->nBuf] = 0x00; } } @@ -216826,7 +222162,7 @@ static int sessionAppendUpdate( /* If at least one field has been modified, this is not a no-op. */ if( bChanged ) bNoop = 0; - /* Add a field to the old.* record. This is omitted if this modules is + /* Add a field to the old.* record. This is omitted if this module is ** currently generating a patchset. */ if( bPatchset==0 ){ if( bChanged || abPK[i] ){ @@ -216915,12 +222251,20 @@ static int sessionAppendDelete( ** Formulate and prepare a SELECT statement to retrieve a row from table ** zTab in database zDb based on its primary key. i.e. ** -** SELECT * FROM zDb.zTab WHERE pk1 = ? AND pk2 = ? AND ... +** SELECT *, FROM zDb.zTab WHERE (pk1, pk2,...) IS (?1, ?2,...) +** +** where is: +** +** 1 AND (?A OR ?1 IS ) AND ... +** +** for each non-pk . */ static int sessionSelectStmt( sqlite3 *db, /* Database handle */ + int bIgnoreNoop, const char *zDb, /* Database name */ const char *zTab, /* Table name */ + int bRowid, int nCol, /* Number of columns in table */ const char **azCol, /* Names of table columns */ u8 *abPK, /* PRIMARY KEY array */ @@ -216928,8 +222272,50 @@ static int sessionSelectStmt( ){ int rc = SQLITE_OK; char *zSql = 0; + const char *zSep = ""; + const char *zCols = bRowid ? SESSIONS_ROWID ", *" : "*"; int nSql = -1; + int i; + + SessionBuffer nooptest = {0, 0, 0}; + SessionBuffer pkfield = {0, 0, 0}; + SessionBuffer pkvar = {0, 0, 0}; + + sessionAppendStr(&nooptest, ", 1", &rc); + if( 0==sqlite3_stricmp("sqlite_stat1", zTab) ){ + sessionAppendStr(&nooptest, " AND (?6 OR ?3 IS stat)", &rc); + sessionAppendStr(&pkfield, "tbl, idx", &rc); + sessionAppendStr(&pkvar, + "?1, (CASE WHEN ?2=X'' THEN NULL ELSE ?2 END)", &rc + ); + zCols = "tbl, ?2, stat"; + }else{ + for(i=0; izDb, zName, &nCol, 0,&azCol,&abPK); - if( !rc && (pTab->nCol!=nCol || memcmp(abPK, pTab->abPK, nCol)) ){ + rc = sessionTableInfo( + 0, db, pSession->zDb, zName, &nCol, 0, &azCol, &abPK, + (pSession->bImplicitPK ? &bRowid : 0) + ); + if( rc==SQLITE_OK && ( + pTab->nCol!=nCol + || pTab->bRowid!=bRowid + || memcmp(abPK, pTab->abPK, nCol) + )){ rc = SQLITE_SCHEMA; } @@ -217122,7 +222519,8 @@ static int sessionGenerateChangeset( /* Build and compile a statement to execute: */ if( rc==SQLITE_OK ){ rc = sessionSelectStmt( - db, pSession->zDb, zName, nCol, azCol, abPK, &pSel); + db, 0, pSession->zDb, zName, bRowid, nCol, azCol, abPK, &pSel + ); } nNoop = buf.nBuf; @@ -217205,7 +222603,7 @@ SQLITE_API int sqlite3session_changeset( int rc; if( pnChangeset==0 || ppChangeset==0 ) return SQLITE_MISUSE; - rc = sessionGenerateChangeset(pSession, 0, 0, 0, pnChangeset,ppChangeset); + rc = sessionGenerateChangeset(pSession, 0, 0, 0, pnChangeset, ppChangeset); assert( rc || pnChangeset==0 || pSession->bEnableSize==0 || *pnChangeset<=pSession->nMaxChangesetSize ); @@ -217323,6 +222721,19 @@ SQLITE_API int sqlite3session_object_config(sqlite3_session *pSession, int op, v break; } + case SQLITE_SESSION_OBJCONFIG_ROWID: { + int iArg = *(int*)pArg; + if( iArg>=0 ){ + if( pSession->pTable ){ + rc = SQLITE_MISUSE; + }else{ + pSession->bImplicitPK = (iArg!=0); + } + } + *(int*)pArg = pSession->bImplicitPK; + break; + } + default: rc = SQLITE_MISUSE; } @@ -217581,15 +222992,19 @@ static int sessionReadRecord( } } if( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT ){ - sqlite3_int64 v = sessionGetI64(aVal); - if( eType==SQLITE_INTEGER ){ - sqlite3VdbeMemSetInt64(apOut[i], v); + if( (pIn->nData-pIn->iNext)<8 ){ + rc = SQLITE_CORRUPT_BKPT; }else{ - double d; - memcpy(&d, &v, 8); - sqlite3VdbeMemSetDouble(apOut[i], d); + sqlite3_int64 v = sessionGetI64(aVal); + if( eType==SQLITE_INTEGER ){ + sqlite3VdbeMemSetInt64(apOut[i], v); + }else{ + double d; + memcpy(&d, &v, 8); + sqlite3VdbeMemSetDouble(apOut[i], d); + } + pIn->iNext += 8; } - pIn->iNext += 8; } } } @@ -218311,6 +223726,8 @@ struct SessionApplyCtx { SessionBuffer rebase; /* Rebase information (if any) here */ u8 bRebaseStarted; /* If table header is already in rebase */ u8 bRebase; /* True to collect rebase information */ + u8 bIgnoreNoop; /* True to ignore no-op conflicts */ + int bRowid; }; /* Number of prepared UPDATE statements to cache. */ @@ -218561,8 +223978,10 @@ static int sessionSelectRow( const char *zTab, /* Table name */ SessionApplyCtx *p /* Session changeset-apply context */ ){ - return sessionSelectStmt( - db, "main", zTab, p->nCol, p->azCol, p->abPK, &p->pSelect); + /* TODO */ + return sessionSelectStmt(db, p->bIgnoreNoop, + "main", zTab, p->bRowid, p->nCol, p->azCol, p->abPK, &p->pSelect + ); } /* @@ -218720,22 +224139,34 @@ static int sessionBindRow( ** UPDATE, bind values from the old.* record. */ static int sessionSeekToRow( - sqlite3 *db, /* Database handle */ sqlite3_changeset_iter *pIter, /* Changeset iterator */ - u8 *abPK, /* Primary key flags array */ - sqlite3_stmt *pSelect /* SELECT statement from sessionSelectRow() */ + SessionApplyCtx *p ){ + sqlite3_stmt *pSelect = p->pSelect; int rc; /* Return code */ int nCol; /* Number of columns in table */ int op; /* Changset operation (SQLITE_UPDATE etc.) */ const char *zDummy; /* Unused */ + sqlite3_clear_bindings(pSelect); sqlite3changeset_op(pIter, &zDummy, &nCol, &op, 0); rc = sessionBindRow(pIter, op==SQLITE_INSERT ? sqlite3changeset_new : sqlite3changeset_old, - nCol, abPK, pSelect + nCol, p->abPK, pSelect ); + if( op!=SQLITE_DELETE && p->bIgnoreNoop ){ + int ii; + for(ii=0; rc==SQLITE_OK && iiabPK[ii]==0 ){ + sqlite3_value *pVal = 0; + sqlite3changeset_new(pIter, ii, &pVal); + sqlite3_bind_int(pSelect, ii+1+nCol, (pVal==0)); + if( pVal ) rc = sessionBindValue(pSelect, ii+1, pVal); + } + } + } + if( rc==SQLITE_OK ){ rc = sqlite3_step(pSelect); if( rc!=SQLITE_ROW ) rc = sqlite3_reset(pSelect); @@ -218850,16 +224281,22 @@ static int sessionConflictHandler( /* Bind the new.* PRIMARY KEY values to the SELECT statement. */ if( pbReplace ){ - rc = sessionSeekToRow(p->db, pIter, p->abPK, p->pSelect); + rc = sessionSeekToRow(pIter, p); }else{ rc = SQLITE_OK; } if( rc==SQLITE_ROW ){ /* There exists another row with the new.* primary key. */ - pIter->pConflict = p->pSelect; - res = xConflict(pCtx, eType, pIter); - pIter->pConflict = 0; + if( p->bIgnoreNoop + && sqlite3_column_int(p->pSelect, sqlite3_column_count(p->pSelect)-1) + ){ + res = SQLITE_CHANGESET_OMIT; + }else{ + pIter->pConflict = p->pSelect; + res = xConflict(pCtx, eType, pIter); + pIter->pConflict = 0; + } rc = sqlite3_reset(p->pSelect); }else if( rc==SQLITE_OK ){ if( p->bDeferConstraints && eType==SQLITE_CHANGESET_CONFLICT ){ @@ -218967,7 +224404,7 @@ static int sessionApplyOneOp( sqlite3_step(p->pDelete); rc = sqlite3_reset(p->pDelete); - if( rc==SQLITE_OK && sqlite3_changes(p->db)==0 ){ + if( rc==SQLITE_OK && sqlite3_changes(p->db)==0 && p->bIgnoreNoop==0 ){ rc = sessionConflictHandler( SQLITE_CHANGESET_DATA, p, pIter, xConflict, pCtx, pbRetry ); @@ -219024,7 +224461,7 @@ static int sessionApplyOneOp( /* Check if there is a conflicting row. For sqlite_stat1, this needs ** to be done using a SELECT, as there is no PRIMARY KEY in the ** database schema to throw an exception if a duplicate is inserted. */ - rc = sessionSeekToRow(p->db, pIter, p->abPK, p->pSelect); + rc = sessionSeekToRow(pIter, p); if( rc==SQLITE_ROW ){ rc = SQLITE_CONSTRAINT; sqlite3_reset(p->pSelect); @@ -219201,6 +224638,7 @@ static int sessionChangesetApply( memset(&sApply, 0, sizeof(sApply)); sApply.bRebase = (ppRebase && pnRebase); sApply.bInvertConstraints = !!(flags & SQLITE_CHANGESETAPPLY_INVERT); + sApply.bIgnoreNoop = !!(flags & SQLITE_CHANGESETAPPLY_IGNORENOOP); sqlite3_mutex_enter(sqlite3_db_mutex(db)); if( (flags & SQLITE_CHANGESETAPPLY_NOSAVEPOINT)==0 ){ rc = sqlite3_exec(db, "SAVEPOINT changeset_apply", 0, 0, 0); @@ -219238,6 +224676,7 @@ static int sessionChangesetApply( sApply.bStat1 = 0; sApply.bDeferConstraints = 1; sApply.bRebaseStarted = 0; + sApply.bRowid = 0; memset(&sApply.constraints, 0, sizeof(SessionBuffer)); /* If an xFilter() callback was specified, invoke it now. If the @@ -219257,8 +224696,8 @@ static int sessionChangesetApply( int i; sqlite3changeset_pk(pIter, &abPK, 0); - rc = sessionTableInfo(0, - db, "main", zNew, &sApply.nCol, &zTab, &sApply.azCol, &sApply.abPK + rc = sessionTableInfo(0, db, "main", zNew, + &sApply.nCol, &zTab, &sApply.azCol, &sApply.abPK, &sApply.bRowid ); if( rc!=SQLITE_OK ) break; for(i=0; iiPos++; - if( p->iRangeEnd>0 ){ + if( p->iRangeEnd>=0 ){ if( iPosiRangeStart || iPos>p->iRangeEnd ) return SQLITE_OK; if( p->iRangeStart && iPos==p->iRangeStart ) p->iOff = iStartOff; } @@ -223469,7 +228930,7 @@ static int fts5HighlightCb( } if( iPos==p->iter.iEnd ){ - if( p->iRangeEnd && p->iter.iStartiRangeStart ){ + if( p->iRangeEnd>=0 && p->iter.iStartiRangeStart ){ fts5HighlightAppend(&rc, p, p->zOpen, -1); } fts5HighlightAppend(&rc, p, &p->zIn[p->iOff], iEndOff - p->iOff); @@ -223480,7 +228941,7 @@ static int fts5HighlightCb( } } - if( p->iRangeEnd>0 && iPos==p->iRangeEnd ){ + if( p->iRangeEnd>=0 && iPos==p->iRangeEnd ){ fts5HighlightAppend(&rc, p, &p->zIn[p->iOff], iEndOff - p->iOff); p->iOff = iEndOff; if( iPos>=p->iter.iStart && iPositer.iEnd ){ @@ -223515,6 +228976,7 @@ static void fts5HighlightFunction( memset(&ctx, 0, sizeof(HighlightContext)); ctx.zOpen = (const char*)sqlite3_value_text(apVal[1]); ctx.zClose = (const char*)sqlite3_value_text(apVal[2]); + ctx.iRangeEnd = -1; rc = pApi->xColumnText(pFts, iCol, &ctx.zIn, &ctx.nIn); if( ctx.zIn ){ @@ -223700,6 +229162,7 @@ static void fts5SnippetFunction( iCol = sqlite3_value_int(apVal[0]); ctx.zOpen = fts5ValueToText(apVal[1]); ctx.zClose = fts5ValueToText(apVal[2]); + ctx.iRangeEnd = -1; zEllips = fts5ValueToText(apVal[3]); nToken = sqlite3_value_int(apVal[4]); @@ -224440,6 +229903,8 @@ static void sqlite3Fts5TermsetFree(Fts5Termset *p){ #define FTS5_DEFAULT_CRISISMERGE 16 #define FTS5_DEFAULT_HASHSIZE (1024*1024) +#define FTS5_DEFAULT_DELETE_AUTOMERGE 10 /* default 10% */ + /* Maximum allowed page size */ #define FTS5_MAX_PAGE_SIZE (64*1024) @@ -224770,6 +230235,16 @@ static int fts5ConfigParseSpecial( return rc; } + if( sqlite3_strnicmp("contentless_delete", zCmd, nCmd)==0 ){ + if( (zArg[0]!='0' && zArg[0]!='1') || zArg[1]!='\0' ){ + *pzErr = sqlite3_mprintf("malformed contentless_delete=... directive"); + rc = SQLITE_ERROR; + }else{ + pConfig->bContentlessDelete = (zArg[0]=='1'); + } + return rc; + } + if( sqlite3_strnicmp("content_rowid", zCmd, nCmd)==0 ){ if( pConfig->zContentRowid ){ *pzErr = sqlite3_mprintf("multiple content_rowid=... directives"); @@ -224968,6 +230443,7 @@ static int sqlite3Fts5ConfigParse( rc = SQLITE_ERROR; } + assert( (pRet->abUnindexed && pRet->azCol) || rc!=SQLITE_OK ); for(i=3; rc==SQLITE_OK && ibContentlessDelete + && pRet->eContent!=FTS5_CONTENT_NONE + ){ + *pzErr = sqlite3_mprintf( + "contentless_delete=1 requires a contentless table" + ); + rc = SQLITE_ERROR; + } + + /* We only allow contentless_delete=1 if columnsize=0 is not present. + ** + ** This restriction may be removed at some point. + */ + if( rc==SQLITE_OK && pRet->bContentlessDelete && pRet->bColumnsize==0 ){ + *pzErr = sqlite3_mprintf( + "contentless_delete=1 is incompatible with columnsize=0" + ); + rc = SQLITE_ERROR; + } + /* If a tokenizer= option was successfully parsed, the tokenizer has ** already been allocated. Otherwise, allocate an instance of the default ** tokenizer (unicode61) now. */ @@ -225307,6 +230805,18 @@ static int sqlite3Fts5ConfigSetValue( } } + else if( 0==sqlite3_stricmp(zKey, "deletemerge") ){ + int nVal = -1; + if( SQLITE_INTEGER==sqlite3_value_numeric_type(pVal) ){ + nVal = sqlite3_value_int(pVal); + }else{ + *pbBadkey = 1; + } + if( nVal<0 ) nVal = FTS5_DEFAULT_DELETE_AUTOMERGE; + if( nVal>100 ) nVal = 0; + pConfig->nDeleteMerge = nVal; + } + else if( 0==sqlite3_stricmp(zKey, "rank") ){ const char *zIn = (const char*)sqlite3_value_text(pVal); char *zRank; @@ -225321,6 +230831,18 @@ static int sqlite3Fts5ConfigSetValue( rc = SQLITE_OK; *pbBadkey = 1; } + } + + else if( 0==sqlite3_stricmp(zKey, "secure-delete") ){ + int bVal = -1; + if( SQLITE_INTEGER==sqlite3_value_numeric_type(pVal) ){ + bVal = sqlite3_value_int(pVal); + } + if( bVal<0 ){ + *pbBadkey = 1; + }else{ + pConfig->bSecureDelete = (bVal ? 1 : 0); + } }else{ *pbBadkey = 1; } @@ -225343,6 +230865,7 @@ static int sqlite3Fts5ConfigLoad(Fts5Config *pConfig, int iCookie){ pConfig->nUsermerge = FTS5_DEFAULT_USERMERGE; pConfig->nCrisisMerge = FTS5_DEFAULT_CRISISMERGE; pConfig->nHashSize = FTS5_DEFAULT_HASHSIZE; + pConfig->nDeleteMerge = FTS5_DEFAULT_DELETE_AUTOMERGE; zSql = sqlite3Fts5Mprintf(&rc, zSelect, pConfig->zDb, pConfig->zName); if( zSql ){ @@ -225365,15 +230888,20 @@ static int sqlite3Fts5ConfigLoad(Fts5Config *pConfig, int iCookie){ rc = sqlite3_finalize(p); } - if( rc==SQLITE_OK && iVersion!=FTS5_CURRENT_VERSION ){ + if( rc==SQLITE_OK + && iVersion!=FTS5_CURRENT_VERSION + && iVersion!=FTS5_CURRENT_VERSION_SECUREDELETE + ){ rc = SQLITE_ERROR; if( pConfig->pzErrmsg ){ assert( 0==*pConfig->pzErrmsg ); - *pConfig->pzErrmsg = sqlite3_mprintf( - "invalid fts5 file format (found %d, expected %d) - run 'rebuild'", - iVersion, FTS5_CURRENT_VERSION + *pConfig->pzErrmsg = sqlite3_mprintf("invalid fts5 file format " + "(found %d, expected %d or %d) - run 'rebuild'", + iVersion, FTS5_CURRENT_VERSION, FTS5_CURRENT_VERSION_SECUREDELETE ); } + }else{ + pConfig->iVersion = iVersion; } if( rc==SQLITE_OK ){ @@ -225401,6 +230929,10 @@ static int sqlite3Fts5ConfigLoad(Fts5Config *pConfig, int iCookie){ /* #include "fts5Int.h" */ /* #include "fts5parse.h" */ +#ifndef SQLITE_FTS5_MAX_EXPR_DEPTH +# define SQLITE_FTS5_MAX_EXPR_DEPTH 256 +#endif + /* ** All token types in the generated fts5parse.h file are greater than 0. */ @@ -225441,11 +230973,17 @@ struct Fts5Expr { ** FTS5_NOT (nChild, apChild valid) ** FTS5_STRING (pNear valid) ** FTS5_TERM (pNear valid) +** +** iHeight: +** Distance from this node to furthest leaf. This is always 0 for nodes +** of type FTS5_STRING and FTS5_TERM. For all other nodes it is one +** greater than the largest child value. */ struct Fts5ExprNode { int eType; /* Node type */ int bEof; /* True at EOF */ int bNomatch; /* True if entry is not a match */ + int iHeight; /* Distance to tree leaf nodes */ /* Next method for this node. */ int (*xNext)(Fts5Expr*, Fts5ExprNode*, int, i64); @@ -225515,6 +231053,31 @@ struct Fts5Parse { int bPhraseToAnd; /* Convert "a+b" to "a AND b" */ }; +/* +** Check that the Fts5ExprNode.iHeight variables are set correctly in +** the expression tree passed as the only argument. +*/ +#ifndef NDEBUG +static void assert_expr_depth_ok(int rc, Fts5ExprNode *p){ + if( rc==SQLITE_OK ){ + if( p->eType==FTS5_TERM || p->eType==FTS5_STRING || p->eType==0 ){ + assert( p->iHeight==0 ); + }else{ + int ii; + int iMaxChild = 0; + for(ii=0; iinChild; ii++){ + Fts5ExprNode *pChild = p->apChild[ii]; + iMaxChild = MAX(iMaxChild, pChild->iHeight); + assert_expr_depth_ok(SQLITE_OK, pChild); + } + assert( p->iHeight==iMaxChild+1 ); + } + } +} +#else +# define assert_expr_depth_ok(rc, p) +#endif + static void sqlite3Fts5ParseError(Fts5Parse *pParse, const char *zFmt, ...){ va_list ap; va_start(ap, zFmt); @@ -225629,6 +231192,8 @@ static int sqlite3Fts5ExprNew( }while( sParse.rc==SQLITE_OK && t!=FTS5_EOF ); sqlite3Fts5ParserFree(pEngine, fts5ParseFree); + assert_expr_depth_ok(sParse.rc, sParse.pExpr); + /* If the LHS of the MATCH expression was a user column, apply the ** implicit column-filter. */ if( iColnCol && sParse.pExpr && sParse.rc==SQLITE_OK ){ @@ -225673,6 +231238,19 @@ static int sqlite3Fts5ExprNew( return sParse.rc; } +/* +** Assuming that buffer z is at least nByte bytes in size and contains a +** valid utf-8 string, return the number of characters in the string. +*/ +static int fts5ExprCountChar(const char *z, int nByte){ + int nRet = 0; + int ii; + for(ii=0; ii=3 ){ + + if( fts5ExprCountChar(&zText[iFirst], i-iFirst)>=3 ){ int jj; zExpr[iOut++] = '"'; for(jj=iFirst; jjnPhrase + p2->nPhrase; @@ -225802,7 +231381,7 @@ static int sqlite3Fts5ExprAnd(Fts5Expr **pp1, Fts5Expr *p2){ } sqlite3_free(p2->apExprPhrase); sqlite3_free(p2); - }else{ + }else if( p2 ){ *pp1 = p2; } @@ -227576,6 +233155,7 @@ static void fts5ExprAssignXNext(Fts5ExprNode *pNode){ } static void fts5ExprAddChildren(Fts5ExprNode *p, Fts5ExprNode *pSub){ + int ii = p->nChild; if( p->eType!=FTS5_NOT && pSub->eType==p->eType ){ int nByte = sizeof(Fts5ExprNode*) * pSub->nChild; memcpy(&p->apChild[p->nChild], pSub->apChild, nByte); @@ -227584,6 +233164,9 @@ static void fts5ExprAddChildren(Fts5ExprNode *p, Fts5ExprNode *pSub){ }else{ p->apChild[p->nChild++] = pSub; } + for( ; iinChild; ii++){ + p->iHeight = MAX(p->iHeight, p->apChild[ii]->iHeight + 1); + } } /* @@ -227614,6 +233197,7 @@ static Fts5ExprNode *fts5ParsePhraseToAnd( if( pRet ){ pRet->eType = FTS5_AND; pRet->nChild = nTerm; + pRet->iHeight = 1; fts5ExprAssignXNext(pRet); pParse->nPhrase--; for(ii=0; iiiHeight>SQLITE_FTS5_MAX_EXPR_DEPTH ){ + sqlite3Fts5ParseError(pParse, + "fts5 expression tree is too large (maximum depth %d)", + SQLITE_FTS5_MAX_EXPR_DEPTH + ); + sqlite3_free(pRet); + pRet = 0; + } } } } @@ -227797,7 +233389,7 @@ static Fts5ExprNode *sqlite3Fts5ParseImplicitAnd( return pRet; } -#ifdef SQLITE_TEST +#if defined(SQLITE_TEST) || defined(SQLITE_FTS5_DEBUG) static char *fts5ExprTermPrint(Fts5ExprTerm *pTerm){ sqlite3_int64 nByte = 0; Fts5ExprTerm *p; @@ -227903,6 +233495,8 @@ static char *fts5ExprPrintTcl( if( zRet==0 ) return 0; } + }else if( pExpr->eType==0 ){ + zRet = sqlite3_mprintf("{}"); }else{ char const *zOp = 0; int i; @@ -228164,14 +233758,14 @@ static void fts5ExprFold( sqlite3_result_int(pCtx, sqlite3Fts5UnicodeFold(iCode, bRemoveDiacritics)); } } -#endif /* ifdef SQLITE_TEST */ +#endif /* if SQLITE_TEST || SQLITE_FTS5_DEBUG */ /* ** This is called during initialization to register the fts5_expr() scalar ** UDF with the SQLite handle passed as the only argument. */ static int sqlite3Fts5ExprInit(Fts5Global *pGlobal, sqlite3 *db){ -#ifdef SQLITE_TEST +#if defined(SQLITE_TEST) || defined(SQLITE_FTS5_DEBUG) struct Fts5ExprFunc { const char *z; void (*x)(sqlite3_context*,int,sqlite3_value**); @@ -228931,7 +234525,6 @@ static int fts5HashEntrySort( pList = fts5HashEntryMerge(pList, ap[i]); } - pHash->nEntry = 0; sqlite3_free(ap); *ppSorted = pList; return SQLITE_OK; @@ -228985,6 +234578,28 @@ static int sqlite3Fts5HashScanInit( return fts5HashEntrySort(p, pTerm, nTerm, &p->pScan); } +#ifdef SQLITE_DEBUG +static int fts5HashCount(Fts5Hash *pHash){ + int nEntry = 0; + int ii; + for(ii=0; iinSlot; ii++){ + Fts5HashEntry *p = 0; + for(p=pHash->aSlot[ii]; p; p=p->pHashNext){ + nEntry++; + } + } + return nEntry; +} +#endif + +/* +** Return true if the hash table is empty, false otherwise. +*/ +static int sqlite3Fts5HashIsEmpty(Fts5Hash *pHash){ + assert( pHash->nEntry==fts5HashCount(pHash) ); + return pHash->nEntry==0; +} + static void sqlite3Fts5HashScanNext(Fts5Hash *p){ assert( !sqlite3Fts5HashScanEof(p) ); p->pScan = p->pScan->pScanNext; @@ -229071,6 +234686,26 @@ static void sqlite3Fts5HashScanEntry( # error "FTS5_MAX_PREFIX_INDEXES is too large" #endif +#define FTS5_MAX_LEVEL 64 + +/* +** There are two versions of the format used for the structure record: +** +** 1. the legacy format, that may be read by all fts5 versions, and +** +** 2. the V2 format, which is used by contentless_delete=1 databases. +** +** Both begin with a 4-byte "configuration cookie" value. Then, a legacy +** format structure record contains a varint - the number of levels in +** the structure. Whereas a V2 structure record contains the constant +** 4 bytes [0xff 0x00 0x00 0x01]. This is unambiguous as the value of a +** varint has to be at least 16256 to begin with "0xFF". And the default +** maximum number of levels is 64. +** +** See below for more on structure record formats. +*/ +#define FTS5_STRUCTURE_V2 "\xFF\x00\x00\x01" + /* ** Details: ** @@ -229078,7 +234713,7 @@ static void sqlite3Fts5HashScanEntry( ** ** CREATE TABLE %_data(id INTEGER PRIMARY KEY, block BLOB); ** -** , contains the following 5 types of records. See the comments surrounding +** , contains the following 6 types of records. See the comments surrounding ** the FTS5_*_ROWID macros below for a description of how %_data rowids are ** assigned to each fo them. ** @@ -229087,12 +234722,12 @@ static void sqlite3Fts5HashScanEntry( ** The set of segments that make up an index - the index structure - are ** recorded in a single record within the %_data table. The record consists ** of a single 32-bit configuration cookie value followed by a list of -** SQLite varints. If the FTS table features more than one index (because -** there are one or more prefix indexes), it is guaranteed that all share -** the same cookie value. +** SQLite varints. ** -** Immediately following the configuration cookie, the record begins with -** three varints: +** If the structure record is a V2 record, the configuration cookie is +** followed by the following 4 bytes: [0xFF 0x00 0x00 0x01]. +** +** Next, the record continues with three varints: ** ** + number of levels, ** + total number of segments on all levels, @@ -229107,6 +234742,12 @@ static void sqlite3Fts5HashScanEntry( ** + first leaf page number (often 1, always greater than 0) ** + final leaf page number ** +** Then, for V2 structures only: +** +** + lower origin counter value, +** + upper origin counter value, +** + the number of tombstone hash pages. +** ** 2. The Averages Record: ** ** A single record within the %_data table. The data is a list of varints. @@ -229222,6 +234863,38 @@ static void sqlite3Fts5HashScanEntry( ** * A list of delta-encoded varints - the first rowid on each subsequent ** child page. ** +** 6. Tombstone Hash Page +** +** These records are only ever present in contentless_delete=1 tables. +** There are zero or more of these associated with each segment. They +** are used to store the tombstone rowids for rows contained in the +** associated segments. +** +** The set of nHashPg tombstone hash pages associated with a single +** segment together form a single hash table containing tombstone rowids. +** To find the page of the hash on which a key might be stored: +** +** iPg = (rowid % nHashPg) +** +** Then, within page iPg, which has nSlot slots: +** +** iSlot = (rowid / nHashPg) % nSlot +** +** Each tombstone hash page begins with an 8 byte header: +** +** 1-byte: Key-size (the size in bytes of each slot). Either 4 or 8. +** 1-byte: rowid-0-tombstone flag. This flag is only valid on the +** first tombstone hash page for each segment (iPg=0). If set, +** the hash table contains rowid 0. If clear, it does not. +** Rowid 0 is handled specially. +** 2-bytes: unused. +** 4-bytes: Big-endian integer containing number of entries on page. +** +** Following this are nSlot 4 or 8 byte slots (depending on the key-size +** in the first byte of the page header). The number of slots may be +** determined based on the size of the page record and the key-size: +** +** nSlot = (nByte - 8) / key-size */ /* @@ -229255,6 +234928,7 @@ static void sqlite3Fts5HashScanEntry( #define FTS5_SEGMENT_ROWID(segid, pgno) fts5_dri(segid, 0, 0, pgno) #define FTS5_DLIDX_ROWID(segid, height, pgno) fts5_dri(segid, 1, height, pgno) +#define FTS5_TOMBSTONE_ROWID(segid,ipg) fts5_dri(segid+(1<<16), 0, 0, ipg) #ifdef SQLITE_DEBUG static int sqlite3Fts5Corrupt() { return SQLITE_CORRUPT_VTAB; } @@ -229290,6 +234964,12 @@ struct Fts5Data { /* ** One object per %_data table. +** +** nContentlessDelete: +** The number of contentless delete operations since the most recent +** call to fts5IndexFlush() or fts5IndexDiscardData(). This is tracked +** so that extra auto-merge work can be done by fts5IndexFlush() to +** account for the delete operations. */ struct Fts5Index { Fts5Config *pConfig; /* Virtual table configuration */ @@ -229304,6 +234984,8 @@ struct Fts5Index { int nPendingData; /* Current bytes of pending data */ i64 iWriteRowid; /* Rowid for current doc being written */ int bDelete; /* Current write is a delete */ + int nContentlessDelete; /* Number of contentless delete ops */ + int nPendingRow; /* Number of INSERT in hash table */ /* Error state. */ int rc; /* Current error code */ @@ -229317,6 +234999,8 @@ struct Fts5Index { sqlite3_stmt *pIdxSelect; int nRead; /* Total number of blocks read */ + sqlite3_stmt *pDeleteFromIdx; + sqlite3_stmt *pDataVersion; i64 iStructVersion; /* data_version when pStruct read */ Fts5Structure *pStruct; /* Current db structure (or NULL) */ @@ -229336,11 +235020,23 @@ struct Fts5DoclistIter { ** The contents of the "structure" record for each index are represented ** using an Fts5Structure record in memory. Which uses instances of the ** other Fts5StructureXXX types as components. +** +** nOriginCntr: +** This value is set to non-zero for structure records created for +** contentlessdelete=1 tables only. In that case it represents the +** origin value to apply to the next top-level segment created. */ struct Fts5StructureSegment { int iSegid; /* Segment id */ int pgnoFirst; /* First leaf page number in segment */ int pgnoLast; /* Last leaf page number in segment */ + + /* contentlessdelete=1 tables only: */ + u64 iOrigin1; + u64 iOrigin2; + int nPgTombstone; /* Number of tombstone hash table pages */ + u64 nEntryTombstone; /* Number of tombstone entries that "count" */ + u64 nEntry; /* Number of rows in this segment */ }; struct Fts5StructureLevel { int nMerge; /* Number of segments in incr-merge */ @@ -229350,6 +235046,7 @@ struct Fts5StructureLevel { struct Fts5Structure { int nRef; /* Object reference count */ u64 nWriteCounter; /* Total leaves written to level 0 */ + u64 nOriginCntr; /* Origin value for next top-level segment */ int nSegment; /* Total segments in this structure */ int nLevel; /* Number of levels in this index */ Fts5StructureLevel aLevel[1]; /* Array of nLevel level objects */ @@ -229409,9 +235106,6 @@ struct Fts5CResult { ** iLeafOffset: ** Byte offset within the current leaf that is the first byte of the ** position list data (one byte passed the position-list size field). -** rowid field of the current entry. Usually this is the size field of the -** position list data. The exception is if the rowid for the current entry -** is the last thing on the leaf page. ** ** pLeaf: ** Buffer containing current leaf page data. Set to NULL at EOF. @@ -229441,6 +235135,13 @@ struct Fts5CResult { ** ** iTermIdx: ** Index of current term on iTermLeafPgno. +** +** apTombstone/nTombstone: +** These are used for contentless_delete=1 tables only. When the cursor +** is first allocated, the apTombstone[] array is allocated so that it +** is large enough for all tombstones hash pages associated with the +** segment. The pages themselves are loaded lazily from the database as +** they are required. */ struct Fts5SegIter { Fts5StructureSegment *pSeg; /* Segment to iterate through */ @@ -229449,6 +235150,8 @@ struct Fts5SegIter { Fts5Data *pLeaf; /* Current leaf data */ Fts5Data *pNextLeaf; /* Leaf page (iLeafPgno+1) */ i64 iLeafOffset; /* Byte offset within current leaf */ + Fts5Data **apTombstone; /* Array of tombstone pages */ + int nTombstone; /* Next method */ void (*xNext)(Fts5Index*, Fts5SegIter*, int*); @@ -229578,6 +235281,60 @@ static u16 fts5GetU16(const u8 *aIn){ return ((u16)aIn[0] << 8) + aIn[1]; } +/* +** The only argument points to a buffer at least 8 bytes in size. This +** function interprets the first 8 bytes of the buffer as a 64-bit big-endian +** unsigned integer and returns the result. +*/ +static u64 fts5GetU64(u8 *a){ + return ((u64)a[0] << 56) + + ((u64)a[1] << 48) + + ((u64)a[2] << 40) + + ((u64)a[3] << 32) + + ((u64)a[4] << 24) + + ((u64)a[5] << 16) + + ((u64)a[6] << 8) + + ((u64)a[7] << 0); +} + +/* +** The only argument points to a buffer at least 4 bytes in size. This +** function interprets the first 4 bytes of the buffer as a 32-bit big-endian +** unsigned integer and returns the result. +*/ +static u32 fts5GetU32(const u8 *a){ + return ((u32)a[0] << 24) + + ((u32)a[1] << 16) + + ((u32)a[2] << 8) + + ((u32)a[3] << 0); +} + +/* +** Write iVal, formated as a 64-bit big-endian unsigned integer, to the +** buffer indicated by the first argument. +*/ +static void fts5PutU64(u8 *a, u64 iVal){ + a[0] = ((iVal >> 56) & 0xFF); + a[1] = ((iVal >> 48) & 0xFF); + a[2] = ((iVal >> 40) & 0xFF); + a[3] = ((iVal >> 32) & 0xFF); + a[4] = ((iVal >> 24) & 0xFF); + a[5] = ((iVal >> 16) & 0xFF); + a[6] = ((iVal >> 8) & 0xFF); + a[7] = ((iVal >> 0) & 0xFF); +} + +/* +** Write iVal, formated as a 32-bit big-endian unsigned integer, to the +** buffer indicated by the first argument. +*/ +static void fts5PutU32(u8 *a, u32 iVal){ + a[0] = ((iVal >> 24) & 0xFF); + a[1] = ((iVal >> 16) & 0xFF); + a[2] = ((iVal >> 8) & 0xFF); + a[3] = ((iVal >> 0) & 0xFF); +} + /* ** Allocate and return a buffer at least nByte bytes in size. ** @@ -229805,10 +235562,17 @@ static void fts5DataDelete(Fts5Index *p, i64 iFirst, i64 iLast){ /* ** Remove all records associated with segment iSegid. */ -static void fts5DataRemoveSegment(Fts5Index *p, int iSegid){ +static void fts5DataRemoveSegment(Fts5Index *p, Fts5StructureSegment *pSeg){ + int iSegid = pSeg->iSegid; i64 iFirst = FTS5_SEGMENT_ROWID(iSegid, 0); i64 iLast = FTS5_SEGMENT_ROWID(iSegid+1, 0)-1; fts5DataDelete(p, iFirst, iLast); + + if( pSeg->nPgTombstone ){ + i64 iTomb1 = FTS5_TOMBSTONE_ROWID(iSegid, 0); + i64 iTomb2 = FTS5_TOMBSTONE_ROWID(iSegid, pSeg->nPgTombstone-1); + fts5DataDelete(p, iTomb1, iTomb2); + } if( p->pIdxDeleter==0 ){ Fts5Config *pConfig = p->pConfig; fts5IndexPrepareStmt(p, &p->pIdxDeleter, sqlite3_mprintf( @@ -229919,11 +235683,19 @@ static int fts5StructureDecode( int nSegment = 0; sqlite3_int64 nByte; /* Bytes of space to allocate at pRet */ Fts5Structure *pRet = 0; /* Structure object to return */ + int bStructureV2 = 0; /* True for FTS5_STRUCTURE_V2 */ + u64 nOriginCntr = 0; /* Largest origin value seen so far */ /* Grab the cookie value */ if( piCookie ) *piCookie = sqlite3Fts5Get32(pData); i = 4; + /* Check if this is a V2 structure record. Set bStructureV2 if it is. */ + if( 0==memcmp(&pData[i], FTS5_STRUCTURE_V2, 4) ){ + i += 4; + bStructureV2 = 1; + } + /* Read the total number of levels and segments from the start of the ** structure record. */ i += fts5GetVarint32(&pData[i], nLevel); @@ -229970,9 +235742,18 @@ static int fts5StructureDecode( rc = FTS5_CORRUPT; break; } + assert( pSeg!=0 ); i += fts5GetVarint32(&pData[i], pSeg->iSegid); i += fts5GetVarint32(&pData[i], pSeg->pgnoFirst); i += fts5GetVarint32(&pData[i], pSeg->pgnoLast); + if( bStructureV2 ){ + i += fts5GetVarint(&pData[i], &pSeg->iOrigin1); + i += fts5GetVarint(&pData[i], &pSeg->iOrigin2); + i += fts5GetVarint32(&pData[i], pSeg->nPgTombstone); + i += fts5GetVarint(&pData[i], &pSeg->nEntryTombstone); + i += fts5GetVarint(&pData[i], &pSeg->nEntry); + nOriginCntr = MAX(nOriginCntr, pSeg->iOrigin2); + } if( pSeg->pgnoLastpgnoFirst ){ rc = FTS5_CORRUPT; break; @@ -229983,6 +235764,9 @@ static int fts5StructureDecode( } } if( nSegment!=0 && rc==SQLITE_OK ) rc = FTS5_CORRUPT; + if( bStructureV2 ){ + pRet->nOriginCntr = nOriginCntr+1; + } if( rc!=SQLITE_OK ){ fts5StructureRelease(pRet); @@ -230000,6 +235784,7 @@ static int fts5StructureDecode( */ static void fts5StructureAddLevel(int *pRc, Fts5Structure **ppStruct){ fts5StructureMakeWritable(pRc, ppStruct); + assert( (ppStruct!=0 && (*ppStruct)!=0) || (*pRc)!=SQLITE_OK ); if( *pRc==SQLITE_OK ){ Fts5Structure *pStruct = *ppStruct; int nLevel = pStruct->nLevel; @@ -230194,6 +235979,7 @@ static void fts5StructureWrite(Fts5Index *p, Fts5Structure *pStruct){ Fts5Buffer buf; /* Buffer to serialize record into */ int iLvl; /* Used to iterate through levels */ int iCookie; /* Cookie value to store */ + int nHdr = (pStruct->nOriginCntr>0 ? (4+4+9+9+9) : (4+9+9)); assert( pStruct->nSegment==fts5StructureCountSegments(pStruct) ); memset(&buf, 0, sizeof(Fts5Buffer)); @@ -230202,9 +235988,12 @@ static void fts5StructureWrite(Fts5Index *p, Fts5Structure *pStruct){ iCookie = p->pConfig->iCookie; if( iCookie<0 ) iCookie = 0; - if( 0==sqlite3Fts5BufferSize(&p->rc, &buf, 4+9+9+9) ){ + if( 0==sqlite3Fts5BufferSize(&p->rc, &buf, nHdr) ){ sqlite3Fts5Put32(buf.p, iCookie); buf.n = 4; + if( pStruct->nOriginCntr>0 ){ + fts5BufferSafeAppendBlob(&buf, FTS5_STRUCTURE_V2, 4); + } fts5BufferSafeAppendVarint(&buf, pStruct->nLevel); fts5BufferSafeAppendVarint(&buf, pStruct->nSegment); fts5BufferSafeAppendVarint(&buf, (i64)pStruct->nWriteCounter); @@ -230218,9 +236007,17 @@ static void fts5StructureWrite(Fts5Index *p, Fts5Structure *pStruct){ assert( pLvl->nMerge<=pLvl->nSeg ); for(iSeg=0; iSegnSeg; iSeg++){ - fts5BufferAppendVarint(&p->rc, &buf, pLvl->aSeg[iSeg].iSegid); - fts5BufferAppendVarint(&p->rc, &buf, pLvl->aSeg[iSeg].pgnoFirst); - fts5BufferAppendVarint(&p->rc, &buf, pLvl->aSeg[iSeg].pgnoLast); + Fts5StructureSegment *pSeg = &pLvl->aSeg[iSeg]; + fts5BufferAppendVarint(&p->rc, &buf, pSeg->iSegid); + fts5BufferAppendVarint(&p->rc, &buf, pSeg->pgnoFirst); + fts5BufferAppendVarint(&p->rc, &buf, pSeg->pgnoLast); + if( pStruct->nOriginCntr>0 ){ + fts5BufferAppendVarint(&p->rc, &buf, pSeg->iOrigin1); + fts5BufferAppendVarint(&p->rc, &buf, pSeg->iOrigin2); + fts5BufferAppendVarint(&p->rc, &buf, pSeg->nPgTombstone); + fts5BufferAppendVarint(&p->rc, &buf, pSeg->nEntryTombstone); + fts5BufferAppendVarint(&p->rc, &buf, pSeg->nEntry); + } } } @@ -230458,42 +236255,25 @@ static int fts5DlidxLvlPrev(Fts5DlidxLvl *pLvl){ pLvl->bEof = 1; }else{ u8 *a = pLvl->pData->p; - i64 iVal; - int iLimit; - int ii; - int nZero = 0; - - /* Currently iOff points to the first byte of a varint. This block - ** decrements iOff until it points to the first byte of the previous - ** varint. Taking care not to read any memory locations that occur - ** before the buffer in memory. */ - iLimit = (iOff>9 ? iOff-9 : 0); - for(iOff--; iOff>iLimit; iOff--){ - if( (a[iOff-1] & 0x80)==0 ) break; - } - - fts5GetVarint(&a[iOff], (u64*)&iVal); - pLvl->iRowid -= iVal; - pLvl->iLeafPgno--; - - /* Skip backwards past any 0x00 varints. */ - for(ii=iOff-1; ii>=pLvl->iFirstOff && a[ii]==0x00; ii--){ - nZero++; - } - if( ii>=pLvl->iFirstOff && (a[ii] & 0x80) ){ - /* The byte immediately before the last 0x00 byte has the 0x80 bit - ** set. So the last 0x00 is only a varint 0 if there are 8 more 0x80 - ** bytes before a[ii]. */ - int bZero = 0; /* True if last 0x00 counts */ - if( (ii-8)>=pLvl->iFirstOff ){ - int j; - for(j=1; j<=8 && (a[ii-j] & 0x80); j++); - bZero = (j>8); + + pLvl->iOff = 0; + fts5DlidxLvlNext(pLvl); + while( 1 ){ + int nZero = 0; + int ii = pLvl->iOff; + u64 delta = 0; + + while( a[ii]==0 ){ + nZero++; + ii++; } - if( bZero==0 ) nZero--; + ii += sqlite3Fts5GetVarint(&a[ii], &delta); + + if( ii>=iOff ) break; + pLvl->iLeafPgno += nZero+1; + pLvl->iRowid += delta; + pLvl->iOff = ii; } - pLvl->iLeafPgno -= nZero; - pLvl->iOff = iOff - nZero; } return pLvl->bEof; @@ -230689,7 +236469,7 @@ static void fts5SegIterLoadRowid(Fts5Index *p, Fts5SegIter *pIter){ i64 iOff = pIter->iLeafOffset; ASSERT_SZLEAF_OK(pIter->pLeaf); - if( iOff>=pIter->pLeaf->szLeaf ){ + while( iOff>=pIter->pLeaf->szLeaf ){ fts5SegIterNextPage(p, pIter); if( pIter->pLeaf==0 ){ if( p->rc==SQLITE_OK ) p->rc = FTS5_CORRUPT; @@ -230760,6 +236540,23 @@ static void fts5SegIterSetNext(Fts5Index *p, Fts5SegIter *pIter){ } } +/* +** Allocate a tombstone hash page array (pIter->apTombstone) for the +** iterator passed as the second argument. If an OOM error occurs, leave +** an error in the Fts5Index object. +*/ +static void fts5SegIterAllocTombstone(Fts5Index *p, Fts5SegIter *pIter){ + const int nTomb = pIter->pSeg->nPgTombstone; + if( nTomb>0 ){ + Fts5Data **apTomb = 0; + apTomb = (Fts5Data**)sqlite3Fts5MallocZero(&p->rc, sizeof(Fts5Data)*nTomb); + if( apTomb ){ + pIter->apTombstone = apTomb; + pIter->nTombstone = nTomb; + } + } +} + /* ** Initialize the iterator object pIter to iterate through the entries in ** segment pSeg. The iterator is left pointing to the first entry when @@ -230788,10 +236585,12 @@ static void fts5SegIterInit( fts5SegIterSetNext(p, pIter); pIter->pSeg = pSeg; pIter->iLeafPgno = pSeg->pgnoFirst-1; - fts5SegIterNextPage(p, pIter); + do { + fts5SegIterNextPage(p, pIter); + }while( p->rc==SQLITE_OK && pIter->pLeaf && pIter->pLeaf->nn==4 ); } - if( p->rc==SQLITE_OK ){ + if( p->rc==SQLITE_OK && pIter->pLeaf ){ pIter->iLeafOffset = 4; assert( pIter->pLeaf!=0 ); assert_nc( pIter->pLeaf->nn>4 ); @@ -230799,6 +236598,7 @@ static void fts5SegIterInit( pIter->iPgidxOff = pIter->pLeaf->szLeaf+1; fts5SegIterLoadTerm(p, pIter, 0); fts5SegIterLoadNPos(p, pIter); + fts5SegIterAllocTombstone(p, pIter); } } @@ -230985,7 +236785,7 @@ static void fts5SegIterNext_None( iOff = pIter->iLeafOffset; /* Next entry is on the next page */ - if( pIter->pSeg && iOff>=pIter->pLeaf->szLeaf ){ + while( pIter->pSeg && iOff>=pIter->pLeaf->szLeaf ){ fts5SegIterNextPage(p, pIter); if( p->rc || pIter->pLeaf==0 ) return; pIter->iRowid = 0; @@ -231178,7 +236978,7 @@ static void fts5SegIterReverse(Fts5Index *p, Fts5SegIter *pIter){ Fts5Data *pLast = 0; int pgnoLast = 0; - if( pDlidx ){ + if( pDlidx && p->pConfig->iVersion==FTS5_CURRENT_VERSION ){ int iSegid = pIter->pSeg->iSegid; pgnoLast = fts5DlidxIterPgno(pDlidx); pLast = fts5LeafRead(p, FTS5_SEGMENT_ROWID(iSegid, pgnoLast)); @@ -231500,6 +237300,7 @@ static void fts5SegIterSeekInit( } fts5SegIterSetNext(p, pIter); + fts5SegIterAllocTombstone(p, pIter); /* Either: ** @@ -231580,6 +237381,20 @@ static void fts5SegIterHashInit( fts5SegIterSetNext(p, pIter); } +/* +** Array ap[] contains n elements. Release each of these elements using +** fts5DataRelease(). Then free the array itself using sqlite3_free(). +*/ +static void fts5IndexFreeArray(Fts5Data **ap, int n){ + if( ap ){ + int ii; + for(ii=0; iiterm); fts5DataRelease(pIter->pLeaf); fts5DataRelease(pIter->pNextLeaf); + fts5IndexFreeArray(pIter->apTombstone, pIter->nTombstone); fts5DlidxIterFree(pIter->pDlidx); sqlite3_free(pIter->aRowidOffset); memset(pIter, 0, sizeof(Fts5SegIter)); @@ -231739,7 +237555,8 @@ static int fts5MultiIterDoCompare(Fts5Iter *pIter, int iOut){ /* ** Move the seg-iter so that it points to the first rowid on page iLeafPgno. -** It is an error if leaf iLeafPgno does not exist or contains no rowids. +** It is an error if leaf iLeafPgno does not exist. Unless the db is +** a 'secure-delete' db, if it contains no rowids then this is also an error. */ static void fts5SegIterGotoPage( Fts5Index *p, /* FTS5 backend object */ @@ -231754,21 +237571,23 @@ static void fts5SegIterGotoPage( fts5DataRelease(pIter->pNextLeaf); pIter->pNextLeaf = 0; pIter->iLeafPgno = iLeafPgno-1; - fts5SegIterNextPage(p, pIter); - assert( p->rc!=SQLITE_OK || pIter->iLeafPgno==iLeafPgno ); - if( p->rc==SQLITE_OK && ALWAYS(pIter->pLeaf!=0) ){ + while( p->rc==SQLITE_OK ){ int iOff; - u8 *a = pIter->pLeaf->p; - int n = pIter->pLeaf->szLeaf; - + fts5SegIterNextPage(p, pIter); + if( pIter->pLeaf==0 ) break; iOff = fts5LeafFirstRowidOff(pIter->pLeaf); - if( iOff<4 || iOff>=n ){ - p->rc = FTS5_CORRUPT; - }else{ - iOff += fts5GetVarint(&a[iOff], (u64*)&pIter->iRowid); - pIter->iLeafOffset = iOff; - fts5SegIterLoadNPos(p, pIter); + if( iOff>0 ){ + u8 *a = pIter->pLeaf->p; + int n = pIter->pLeaf->szLeaf; + if( iOff<4 || iOff>=n ){ + p->rc = FTS5_CORRUPT; + }else{ + iOff += fts5GetVarint(&a[iOff], (u64*)&pIter->iRowid); + pIter->iLeafOffset = iOff; + fts5SegIterLoadNPos(p, pIter); + } + break; } } } @@ -231921,6 +237740,84 @@ static void fts5MultiIterSetEof(Fts5Iter *pIter){ pIter->iSwitchRowid = pSeg->iRowid; } +/* +** The argument to this macro must be an Fts5Data structure containing a +** tombstone hash page. This macro returns the key-size of the hash-page. +*/ +#define TOMBSTONE_KEYSIZE(pPg) (pPg->p[0]==4 ? 4 : 8) + +#define TOMBSTONE_NSLOT(pPg) \ + ((pPg->nn > 16) ? ((pPg->nn-8) / TOMBSTONE_KEYSIZE(pPg)) : 1) + +/* +** Query a single tombstone hash table for rowid iRowid. Return true if +** it is found or false otherwise. The tombstone hash table is one of +** nHashTable tables. +*/ +static int fts5IndexTombstoneQuery( + Fts5Data *pHash, /* Hash table page to query */ + int nHashTable, /* Number of pages attached to segment */ + u64 iRowid /* Rowid to query hash for */ +){ + const int szKey = TOMBSTONE_KEYSIZE(pHash); + const int nSlot = TOMBSTONE_NSLOT(pHash); + int iSlot = (iRowid / nHashTable) % nSlot; + int nCollide = nSlot; + + if( iRowid==0 ){ + return pHash->p[1]; + }else if( szKey==4 ){ + u32 *aSlot = (u32*)&pHash->p[8]; + while( aSlot[iSlot] ){ + if( fts5GetU32((u8*)&aSlot[iSlot])==iRowid ) return 1; + if( nCollide--==0 ) break; + iSlot = (iSlot+1)%nSlot; + } + }else{ + u64 *aSlot = (u64*)&pHash->p[8]; + while( aSlot[iSlot] ){ + if( fts5GetU64((u8*)&aSlot[iSlot])==iRowid ) return 1; + if( nCollide--==0 ) break; + iSlot = (iSlot+1)%nSlot; + } + } + + return 0; +} + +/* +** Return true if the iterator passed as the only argument points +** to an segment entry for which there is a tombstone. Return false +** if there is no tombstone or if the iterator is already at EOF. +*/ +static int fts5MultiIterIsDeleted(Fts5Iter *pIter){ + int iFirst = pIter->aFirst[1].iFirst; + Fts5SegIter *pSeg = &pIter->aSeg[iFirst]; + + if( pSeg->pLeaf && pSeg->nTombstone ){ + /* Figure out which page the rowid might be present on. */ + int iPg = ((u64)pSeg->iRowid) % pSeg->nTombstone; + assert( iPg>=0 ); + + /* If tombstone hash page iPg has not yet been loaded from the + ** database, load it now. */ + if( pSeg->apTombstone[iPg]==0 ){ + pSeg->apTombstone[iPg] = fts5DataRead(pIter->pIndex, + FTS5_TOMBSTONE_ROWID(pSeg->pSeg->iSegid, iPg) + ); + if( pSeg->apTombstone[iPg]==0 ) return 0; + } + + return fts5IndexTombstoneQuery( + pSeg->apTombstone[iPg], + pSeg->nTombstone, + pSeg->iRowid + ); + } + + return 0; +} + /* ** Move the iterator to the next entry. ** @@ -231958,7 +237855,9 @@ static void fts5MultiIterNext( fts5AssertMultiIterSetup(p, pIter); assert( pSeg==&pIter->aSeg[pIter->aFirst[1].iFirst] && pSeg->pLeaf ); - if( pIter->bSkipEmpty==0 || pSeg->nPos ){ + if( (pIter->bSkipEmpty==0 || pSeg->nPos) + && 0==fts5MultiIterIsDeleted(pIter) + ){ pIter->xSetOutputs(pIter, pSeg); return; } @@ -231990,7 +237889,9 @@ static void fts5MultiIterNext2( } fts5AssertMultiIterSetup(p, pIter); - }while( fts5MultiIterIsEmpty(p, pIter) ); + }while( (fts5MultiIterIsEmpty(p, pIter) || fts5MultiIterIsDeleted(pIter)) + && (p->rc==SQLITE_OK) + ); } } @@ -232483,7 +238384,7 @@ static void fts5MultiIterNew( if( iLevel<0 ){ assert( pStruct->nSegment==fts5StructureCountSegments(pStruct) ); nSeg = pStruct->nSegment; - nSeg += (p->pHash ? 1 : 0); + nSeg += (p->pHash && 0==(flags & FTS5INDEX_QUERY_SKIPHASH)); }else{ nSeg = MIN(pStruct->aLevel[iLevel].nSeg, nSegment); } @@ -232504,7 +238405,7 @@ static void fts5MultiIterNew( if( p->rc==SQLITE_OK ){ if( iLevel<0 ){ Fts5StructureLevel *pEnd = &pStruct->aLevel[pStruct->nLevel]; - if( p->pHash ){ + if( p->pHash && 0==(flags & FTS5INDEX_QUERY_SKIPHASH) ){ /* Add a segment iterator for the current contents of the hash table. */ Fts5SegIter *pIter = &pNew->aSeg[iIter++]; fts5SegIterHashInit(p, pTerm, nTerm, flags, pIter); @@ -232545,7 +238446,9 @@ static void fts5MultiIterNew( fts5MultiIterSetEof(pNew); fts5AssertMultiIterSetup(p, pNew); - if( pNew->bSkipEmpty && fts5MultiIterIsEmpty(p, pNew) ){ + if( (pNew->bSkipEmpty && fts5MultiIterIsEmpty(p, pNew)) + || fts5MultiIterIsDeleted(pNew) + ){ fts5MultiIterNext(p, pNew, 0, 0); }else if( pNew->base.bEof==0 ){ Fts5SegIter *pSeg = &pNew->aSeg[pNew->aFirst[1].iFirst]; @@ -232723,7 +238626,9 @@ static void fts5IndexDiscardData(Fts5Index *p){ if( p->pHash ){ sqlite3Fts5HashClear(p->pHash); p->nPendingData = 0; + p->nPendingRow = 0; } + p->nContentlessDelete = 0; } /* @@ -233259,7 +239164,7 @@ static void fts5TrimSegments(Fts5Index *p, Fts5Iter *pIter){ fts5BufferAppendBlob(&p->rc, &buf, sizeof(aHdr), aHdr); fts5BufferAppendVarint(&p->rc, &buf, pSeg->term.n); fts5BufferAppendBlob(&p->rc, &buf, pSeg->term.n, pSeg->term.p); - fts5BufferAppendBlob(&p->rc, &buf, pData->szLeaf-iOff,&pData->p[iOff]); + fts5BufferAppendBlob(&p->rc, &buf,pData->szLeaf-iOff,&pData->p[iOff]); if( p->rc==SQLITE_OK ){ /* Set the szLeaf field */ fts5PutU16(&buf.p[2], (u16)buf.n); @@ -233360,6 +239265,12 @@ static void fts5IndexMergeLevel( /* Read input from all segments in the input level */ nInput = pLvl->nSeg; + + /* Set the range of origins that will go into the output segment. */ + if( pStruct->nOriginCntr>0 ){ + pSeg->iOrigin1 = pLvl->aSeg[0].iOrigin1; + pSeg->iOrigin2 = pLvl->aSeg[pLvl->nSeg-1].iOrigin2; + } } bOldest = (pLvlOut->nSeg==1 && pStruct->nLevel==iLvl+2); @@ -233419,8 +239330,11 @@ static void fts5IndexMergeLevel( int i; /* Remove the redundant segments from the %_data table */ + assert( pSeg->nEntry==0 ); for(i=0; iaSeg[i].iSegid); + Fts5StructureSegment *pOld = &pLvl->aSeg[i]; + pSeg->nEntry += (pOld->nEntry - pOld->nEntryTombstone); + fts5DataRemoveSegment(p, pOld); } /* Remove the redundant segments from the input level */ @@ -233446,6 +239360,43 @@ static void fts5IndexMergeLevel( if( pnRem ) *pnRem -= writer.nLeafWritten; } +/* +** If this is not a contentless_delete=1 table, or if the 'deletemerge' +** configuration option is set to 0, then this function always returns -1. +** Otherwise, it searches the structure object passed as the second argument +** for a level suitable for merging due to having a large number of +** tombstones in the tombstone hash. If one is found, its index is returned. +** Otherwise, if there is no suitable level, -1. +*/ +static int fts5IndexFindDeleteMerge(Fts5Index *p, Fts5Structure *pStruct){ + Fts5Config *pConfig = p->pConfig; + int iRet = -1; + if( pConfig->bContentlessDelete && pConfig->nDeleteMerge>0 ){ + int ii; + int nBest = 0; + + for(ii=0; iinLevel; ii++){ + Fts5StructureLevel *pLvl = &pStruct->aLevel[ii]; + i64 nEntry = 0; + i64 nTomb = 0; + int iSeg; + for(iSeg=0; iSegnSeg; iSeg++){ + nEntry += pLvl->aSeg[iSeg].nEntry; + nTomb += pLvl->aSeg[iSeg].nEntryTombstone; + } + assert_nc( nEntry>0 || pLvl->nSeg==0 ); + if( nEntry>0 ){ + int nPercent = (nTomb * 100) / nEntry; + if( nPercent>=pConfig->nDeleteMerge && nPercent>nBest ){ + iRet = ii; + nBest = nPercent; + } + } + } + } + return iRet; +} + /* ** Do up to nPg pages of automerge work on the index. ** @@ -233465,14 +239416,15 @@ static int fts5IndexMerge( int iBestLvl = 0; /* Level offering the most input segments */ int nBest = 0; /* Number of input segments on best level */ - /* Set iBestLvl to the level to read input segments from. */ + /* Set iBestLvl to the level to read input segments from. Or to -1 if + ** there is no level suitable to merge segments from. */ assert( pStruct->nLevel>0 ); for(iLvl=0; iLvlnLevel; iLvl++){ Fts5StructureLevel *pLvl = &pStruct->aLevel[iLvl]; if( pLvl->nMerge ){ if( pLvl->nMerge>nBest ){ iBestLvl = iLvl; - nBest = pLvl->nMerge; + nBest = nMin; } break; } @@ -233481,22 +239433,18 @@ static int fts5IndexMerge( iBestLvl = iLvl; } } - - /* If nBest is still 0, then the index must be empty. */ -#ifdef SQLITE_DEBUG - for(iLvl=0; nBest==0 && iLvlnLevel; iLvl++){ - assert( pStruct->aLevel[iLvl].nSeg==0 ); + if( nBestaLevel[iBestLvl].nMerge==0 ){ - break; - } + if( iBestLvl<0 ) break; bRet = 1; fts5IndexMergeLevel(p, &pStruct, iBestLvl, &nRem); if( p->rc==SQLITE_OK && pStruct->aLevel[iBestLvl].nMerge==0 ){ fts5StructurePromote(p, iBestLvl+1, pStruct); } + + if( nMin==1 ) nMin = 2; } *ppStruct = pStruct; return bRet; @@ -233537,16 +239485,16 @@ static void fts5IndexCrisismerge( ){ const int nCrisis = p->pConfig->nCrisisMerge; Fts5Structure *pStruct = *ppStruct; - int iLvl = 0; - - assert( p->rc!=SQLITE_OK || pStruct->nLevel>0 ); - while( p->rc==SQLITE_OK && pStruct->aLevel[iLvl].nSeg>=nCrisis ){ - fts5IndexMergeLevel(p, &pStruct, iLvl, 0); - assert( p->rc!=SQLITE_OK || pStruct->nLevel>(iLvl+1) ); - fts5StructurePromote(p, iLvl+1, pStruct); - iLvl++; + if( pStruct && pStruct->nLevel>0 ){ + int iLvl = 0; + while( p->rc==SQLITE_OK && pStruct->aLevel[iLvl].nSeg>=nCrisis ){ + fts5IndexMergeLevel(p, &pStruct, iLvl, 0); + assert( p->rc!=SQLITE_OK || pStruct->nLevel>(iLvl+1) ); + fts5StructurePromote(p, iLvl+1, pStruct); + iLvl++; + } + *ppStruct = pStruct; } - *ppStruct = pStruct; } static int fts5IndexReturn(Fts5Index *p){ @@ -233580,6 +239528,418 @@ static int fts5PoslistPrefix(const u8 *aBuf, int nMax){ return ret; } +/* +** Execute the SQL statement: +** +** DELETE FROM %_idx WHERE (segid, (pgno/2)) = ($iSegid, $iPgno); +** +** This is used when a secure-delete operation removes the last term +** from a segment leaf page. In that case the %_idx entry is removed +** too. This is done to ensure that if all instances of a token are +** removed from an fts5 database in secure-delete mode, no trace of +** the token itself remains in the database. +*/ +static void fts5SecureDeleteIdxEntry( + Fts5Index *p, /* FTS5 backend object */ + int iSegid, /* Id of segment to delete entry for */ + int iPgno /* Page number within segment */ +){ + if( iPgno!=1 ){ + assert( p->pConfig->iVersion==FTS5_CURRENT_VERSION_SECUREDELETE ); + if( p->pDeleteFromIdx==0 ){ + fts5IndexPrepareStmt(p, &p->pDeleteFromIdx, sqlite3_mprintf( + "DELETE FROM '%q'.'%q_idx' WHERE (segid, (pgno/2)) = (?1, ?2)", + p->pConfig->zDb, p->pConfig->zName + )); + } + if( p->rc==SQLITE_OK ){ + sqlite3_bind_int(p->pDeleteFromIdx, 1, iSegid); + sqlite3_bind_int(p->pDeleteFromIdx, 2, iPgno); + sqlite3_step(p->pDeleteFromIdx); + p->rc = sqlite3_reset(p->pDeleteFromIdx); + } + } +} + +/* +** This is called when a secure-delete operation removes a position-list +** that overflows onto segment page iPgno of segment pSeg. This function +** rewrites node iPgno, and possibly one or more of its right-hand peers, +** to remove this portion of the position list. +** +** Output variable (*pbLastInDoclist) is set to true if the position-list +** removed is followed by a new term or the end-of-segment, or false if +** it is followed by another rowid/position list. +*/ +static void fts5SecureDeleteOverflow( + Fts5Index *p, + Fts5StructureSegment *pSeg, + int iPgno, + int *pbLastInDoclist +){ + const int bDetailNone = (p->pConfig->eDetail==FTS5_DETAIL_NONE); + int pgno; + Fts5Data *pLeaf = 0; + assert( iPgno!=1 ); + + *pbLastInDoclist = 1; + for(pgno=iPgno; p->rc==SQLITE_OK && pgno<=pSeg->pgnoLast; pgno++){ + i64 iRowid = FTS5_SEGMENT_ROWID(pSeg->iSegid, pgno); + int iNext = 0; + u8 *aPg = 0; + + pLeaf = fts5DataRead(p, iRowid); + if( pLeaf==0 ) break; + aPg = pLeaf->p; + + iNext = fts5GetU16(&aPg[0]); + if( iNext!=0 ){ + *pbLastInDoclist = 0; + } + if( iNext==0 && pLeaf->szLeaf!=pLeaf->nn ){ + fts5GetVarint32(&aPg[pLeaf->szLeaf], iNext); + } + + if( iNext==0 ){ + /* The page contains no terms or rowids. Replace it with an empty + ** page and move on to the right-hand peer. */ + const u8 aEmpty[] = {0x00, 0x00, 0x00, 0x04}; + assert_nc( bDetailNone==0 || pLeaf->nn==4 ); + if( bDetailNone==0 ) fts5DataWrite(p, iRowid, aEmpty, sizeof(aEmpty)); + fts5DataRelease(pLeaf); + pLeaf = 0; + }else if( bDetailNone ){ + break; + }else if( iNext>=pLeaf->szLeaf || pLeaf->nnszLeaf || iNext<4 ){ + p->rc = FTS5_CORRUPT; + break; + }else{ + int nShift = iNext - 4; + int nPg; + + int nIdx = 0; + u8 *aIdx = 0; + + /* Unless the current page footer is 0 bytes in size (in which case + ** the new page footer will be as well), allocate and populate a + ** buffer containing the new page footer. Set stack variables aIdx + ** and nIdx accordingly. */ + if( pLeaf->nn>pLeaf->szLeaf ){ + int iFirst = 0; + int i1 = pLeaf->szLeaf; + int i2 = 0; + + i1 += fts5GetVarint32(&aPg[i1], iFirst); + if( iFirstrc = FTS5_CORRUPT; + break; + } + aIdx = sqlite3Fts5MallocZero(&p->rc, (pLeaf->nn-pLeaf->szLeaf)+2); + if( aIdx==0 ) break; + i2 = sqlite3Fts5PutVarint(aIdx, iFirst-nShift); + if( i1nn ){ + memcpy(&aIdx[i2], &aPg[i1], pLeaf->nn-i1); + i2 += (pLeaf->nn-i1); + } + nIdx = i2; + } + + /* Modify the contents of buffer aPg[]. Set nPg to the new size + ** in bytes. The new page is always smaller than the old. */ + nPg = pLeaf->szLeaf - nShift; + memmove(&aPg[4], &aPg[4+nShift], nPg-4); + fts5PutU16(&aPg[2], nPg); + if( fts5GetU16(&aPg[0]) ) fts5PutU16(&aPg[0], 4); + if( nIdx>0 ){ + memcpy(&aPg[nPg], aIdx, nIdx); + nPg += nIdx; + } + sqlite3_free(aIdx); + + /* Write the new page to disk and exit the loop */ + assert( nPg>4 || fts5GetU16(aPg)==0 ); + fts5DataWrite(p, iRowid, aPg, nPg); + break; + } + } + fts5DataRelease(pLeaf); +} + +/* +** Completely remove the entry that pSeg currently points to from +** the database. +*/ +static void fts5DoSecureDelete( + Fts5Index *p, + Fts5SegIter *pSeg +){ + const int bDetailNone = (p->pConfig->eDetail==FTS5_DETAIL_NONE); + int iSegid = pSeg->pSeg->iSegid; + u8 *aPg = pSeg->pLeaf->p; + int nPg = pSeg->pLeaf->nn; + int iPgIdx = pSeg->pLeaf->szLeaf; + + u64 iDelta = 0; + u64 iNextDelta = 0; + int iNextOff = 0; + int iOff = 0; + int nIdx = 0; + u8 *aIdx = 0; + int bLastInDoclist = 0; + int iIdx = 0; + int iStart = 0; + int iKeyOff = 0; + int iPrevKeyOff = 0; + int iDelKeyOff = 0; /* Offset of deleted key, if any */ + + nIdx = nPg-iPgIdx; + aIdx = sqlite3Fts5MallocZero(&p->rc, nIdx+16); + if( p->rc ) return; + memcpy(aIdx, &aPg[iPgIdx], nIdx); + + /* At this point segment iterator pSeg points to the entry + ** this function should remove from the b-tree segment. + ** + ** In detail=full or detail=column mode, pSeg->iLeafOffset is the + ** offset of the first byte in the position-list for the entry to + ** remove. Immediately before this comes two varints that will also + ** need to be removed: + ** + ** + the rowid or delta rowid value for the entry, and + ** + the size of the position list in bytes. + ** + ** Or, in detail=none mode, there is a single varint prior to + ** pSeg->iLeafOffset - the rowid or delta rowid value. + ** + ** This block sets the following variables: + ** + ** iStart: + ** iDelta: + */ + { + int iSOP; + if( pSeg->iLeafPgno==pSeg->iTermLeafPgno ){ + iStart = pSeg->iTermLeafOffset; + }else{ + iStart = fts5GetU16(&aPg[0]); + } + + iSOP = iStart + fts5GetVarint(&aPg[iStart], &iDelta); + assert_nc( iSOP<=pSeg->iLeafOffset ); + + if( bDetailNone ){ + while( iSOPiLeafOffset ){ + if( aPg[iSOP]==0x00 ) iSOP++; + if( aPg[iSOP]==0x00 ) iSOP++; + iStart = iSOP; + iSOP = iStart + fts5GetVarint(&aPg[iStart], &iDelta); + } + + iNextOff = iSOP; + if( iNextOffiEndofDoclist && aPg[iNextOff]==0x00 ) iNextOff++; + if( iNextOffiEndofDoclist && aPg[iNextOff]==0x00 ) iNextOff++; + + }else{ + int nPos = 0; + iSOP += fts5GetVarint32(&aPg[iSOP], nPos); + while( iSOPiLeafOffset ){ + iStart = iSOP + (nPos/2); + iSOP = iStart + fts5GetVarint(&aPg[iStart], &iDelta); + iSOP += fts5GetVarint32(&aPg[iSOP], nPos); + } + assert_nc( iSOP==pSeg->iLeafOffset ); + iNextOff = pSeg->iLeafOffset + pSeg->nPos; + } + } + + iOff = iStart; + if( iNextOff>=iPgIdx ){ + int pgno = pSeg->iLeafPgno+1; + fts5SecureDeleteOverflow(p, pSeg->pSeg, pgno, &bLastInDoclist); + iNextOff = iPgIdx; + }else{ + /* Set bLastInDoclist to true if the entry being removed is the last + ** in its doclist. */ + for(iIdx=0, iKeyOff=0; iIdxiTermLeafOffset && pSeg->iLeafPgno==pSeg->iTermLeafPgno + ){ + /* The entry being removed was the only position list in its + ** doclist. Therefore the term needs to be removed as well. */ + int iKey = 0; + for(iIdx=0, iKeyOff=0; iIdx(u32)iStart ) break; + iKeyOff += iVal; + } + + iDelKeyOff = iOff = iKeyOff; + if( iNextOff!=iPgIdx ){ + int nPrefix = 0; + int nSuffix = 0; + int nPrefix2 = 0; + int nSuffix2 = 0; + + iDelKeyOff = iNextOff; + iNextOff += fts5GetVarint32(&aPg[iNextOff], nPrefix2); + iNextOff += fts5GetVarint32(&aPg[iNextOff], nSuffix2); + + if( iKey!=1 ){ + iKeyOff += fts5GetVarint32(&aPg[iKeyOff], nPrefix); + } + iKeyOff += fts5GetVarint32(&aPg[iKeyOff], nSuffix); + + nPrefix = MIN(nPrefix, nPrefix2); + nSuffix = (nPrefix2 + nSuffix2) - nPrefix; + + if( (iKeyOff+nSuffix)>iPgIdx || (iNextOff+nSuffix2)>iPgIdx ){ + p->rc = FTS5_CORRUPT; + }else{ + if( iKey!=1 ){ + iOff += sqlite3Fts5PutVarint(&aPg[iOff], nPrefix); + } + iOff += sqlite3Fts5PutVarint(&aPg[iOff], nSuffix); + if( nPrefix2>pSeg->term.n ){ + p->rc = FTS5_CORRUPT; + }else if( nPrefix2>nPrefix ){ + memcpy(&aPg[iOff], &pSeg->term.p[nPrefix], nPrefix2-nPrefix); + iOff += (nPrefix2-nPrefix); + } + memmove(&aPg[iOff], &aPg[iNextOff], nSuffix2); + iOff += nSuffix2; + iNextOff += nSuffix2; + } + } + }else if( iStart==4 ){ + int iPgno; + + assert_nc( pSeg->iLeafPgno>pSeg->iTermLeafPgno ); + /* The entry being removed may be the only position list in + ** its doclist. */ + for(iPgno=pSeg->iLeafPgno-1; iPgno>pSeg->iTermLeafPgno; iPgno-- ){ + Fts5Data *pPg = fts5DataRead(p, FTS5_SEGMENT_ROWID(iSegid, iPgno)); + int bEmpty = (pPg && pPg->nn==4); + fts5DataRelease(pPg); + if( bEmpty==0 ) break; + } + + if( iPgno==pSeg->iTermLeafPgno ){ + i64 iId = FTS5_SEGMENT_ROWID(iSegid, pSeg->iTermLeafPgno); + Fts5Data *pTerm = fts5DataRead(p, iId); + if( pTerm && pTerm->szLeaf==pSeg->iTermLeafOffset ){ + u8 *aTermIdx = &pTerm->p[pTerm->szLeaf]; + int nTermIdx = pTerm->nn - pTerm->szLeaf; + int iTermIdx = 0; + int iTermOff = 0; + + while( 1 ){ + u32 iVal = 0; + int nByte = fts5GetVarint32(&aTermIdx[iTermIdx], iVal); + iTermOff += iVal; + if( (iTermIdx+nByte)>=nTermIdx ) break; + iTermIdx += nByte; + } + nTermIdx = iTermIdx; + + memmove(&pTerm->p[iTermOff], &pTerm->p[pTerm->szLeaf], nTermIdx); + fts5PutU16(&pTerm->p[2], iTermOff); + + fts5DataWrite(p, iId, pTerm->p, iTermOff+nTermIdx); + if( nTermIdx==0 ){ + fts5SecureDeleteIdxEntry(p, iSegid, pSeg->iTermLeafPgno); + } + } + fts5DataRelease(pTerm); + } + } + + if( p->rc==SQLITE_OK ){ + const int nMove = nPg - iNextOff; /* Number of bytes to move */ + int nShift = iNextOff - iOff; /* Distance to move them */ + + int iPrevKeyOut = 0; + int iKeyIn = 0; + + memmove(&aPg[iOff], &aPg[iNextOff], nMove); + iPgIdx -= nShift; + nPg = iPgIdx; + fts5PutU16(&aPg[2], iPgIdx); + + for(iIdx=0; iIdxiOff ? nShift : 0)); + nPg += sqlite3Fts5PutVarint(&aPg[nPg], iKeyOut - iPrevKeyOut); + iPrevKeyOut = iKeyOut; + } + } + + if( iPgIdx==nPg && nIdx>0 && pSeg->iLeafPgno!=1 ){ + fts5SecureDeleteIdxEntry(p, iSegid, pSeg->iLeafPgno); + } + + assert_nc( nPg>4 || fts5GetU16(aPg)==0 ); + fts5DataWrite(p, FTS5_SEGMENT_ROWID(iSegid,pSeg->iLeafPgno), aPg, nPg); + } + sqlite3_free(aIdx); +} + +/* +** This is called as part of flushing a delete to disk in 'secure-delete' +** mode. It edits the segments within the database described by argument +** pStruct to remove the entries for term zTerm, rowid iRowid. +*/ +static void fts5FlushSecureDelete( + Fts5Index *p, + Fts5Structure *pStruct, + const char *zTerm, + i64 iRowid +){ + const int f = FTS5INDEX_QUERY_SKIPHASH; + int nTerm = (int)strlen(zTerm); + Fts5Iter *pIter = 0; /* Used to find term instance */ + + fts5MultiIterNew(p, pStruct, f, 0, (const u8*)zTerm, nTerm, -1, 0, &pIter); + if( fts5MultiIterEof(p, pIter)==0 ){ + i64 iThis = fts5MultiIterRowid(pIter); + if( iThisrc==SQLITE_OK + && fts5MultiIterEof(p, pIter)==0 + && iRowid==fts5MultiIterRowid(pIter) + ){ + Fts5SegIter *pSeg = &pIter->aSeg[pIter->aFirst[1].iFirst]; + fts5DoSecureDelete(p, pSeg); + } + } + + fts5MultiIterFree(pIter); +} + + /* ** Flush the contents of in-memory hash table iHash to a new level-0 ** segment on disk. Also update the corresponding structure record. @@ -233596,146 +239956,197 @@ static void fts5FlushOneHash(Fts5Index *p){ /* Obtain a reference to the index structure and allocate a new segment-id ** for the new level-0 segment. */ pStruct = fts5StructureRead(p); - iSegid = fts5AllocateSegid(p, pStruct); fts5StructureInvalidate(p); - if( iSegid ){ - const int pgsz = p->pConfig->pgsz; - int eDetail = p->pConfig->eDetail; - Fts5StructureSegment *pSeg; /* New segment within pStruct */ - Fts5Buffer *pBuf; /* Buffer in which to assemble leaf page */ - Fts5Buffer *pPgidx; /* Buffer in which to assemble pgidx */ - - Fts5SegWriter writer; - fts5WriteInit(p, &writer, iSegid); - - pBuf = &writer.writer.buf; - pPgidx = &writer.writer.pgidx; + if( sqlite3Fts5HashIsEmpty(pHash)==0 ){ + iSegid = fts5AllocateSegid(p, pStruct); + if( iSegid ){ + const int pgsz = p->pConfig->pgsz; + int eDetail = p->pConfig->eDetail; + int bSecureDelete = p->pConfig->bSecureDelete; + Fts5StructureSegment *pSeg; /* New segment within pStruct */ + Fts5Buffer *pBuf; /* Buffer in which to assemble leaf page */ + Fts5Buffer *pPgidx; /* Buffer in which to assemble pgidx */ + + Fts5SegWriter writer; + fts5WriteInit(p, &writer, iSegid); + + pBuf = &writer.writer.buf; + pPgidx = &writer.writer.pgidx; + + /* fts5WriteInit() should have initialized the buffers to (most likely) + ** the maximum space required. */ + assert( p->rc || pBuf->nSpace>=(pgsz + FTS5_DATA_PADDING) ); + assert( p->rc || pPgidx->nSpace>=(pgsz + FTS5_DATA_PADDING) ); + + /* Begin scanning through hash table entries. This loop runs once for each + ** term/doclist currently stored within the hash table. */ + if( p->rc==SQLITE_OK ){ + p->rc = sqlite3Fts5HashScanInit(pHash, 0, 0); + } + while( p->rc==SQLITE_OK && 0==sqlite3Fts5HashScanEof(pHash) ){ + const char *zTerm; /* Buffer containing term */ + int nTerm; /* Size of zTerm in bytes */ + const u8 *pDoclist; /* Pointer to doclist for this term */ + int nDoclist; /* Size of doclist in bytes */ + + /* Get the term and doclist for this entry. */ + sqlite3Fts5HashScanEntry(pHash, &zTerm, &pDoclist, &nDoclist); + nTerm = (int)strlen(zTerm); + if( bSecureDelete==0 ){ + fts5WriteAppendTerm(p, &writer, nTerm, (const u8*)zTerm); + if( p->rc!=SQLITE_OK ) break; + assert( writer.bFirstRowidInPage==0 ); + } + + if( !bSecureDelete && pgsz>=(pBuf->n + pPgidx->n + nDoclist + 1) ){ + /* The entire doclist will fit on the current leaf. */ + fts5BufferSafeAppendBlob(pBuf, pDoclist, nDoclist); + }else{ + int bTermWritten = !bSecureDelete; + i64 iRowid = 0; + i64 iPrev = 0; + int iOff = 0; + + /* The entire doclist will not fit on this leaf. The following + ** loop iterates through the poslists that make up the current + ** doclist. */ + while( p->rc==SQLITE_OK && iOffrc!=SQLITE_OK || pDoclist[iOff]==0x01 ){ + iOff++; + continue; + } + } + } - /* fts5WriteInit() should have initialized the buffers to (most likely) - ** the maximum space required. */ - assert( p->rc || pBuf->nSpace>=(pgsz + FTS5_DATA_PADDING) ); - assert( p->rc || pPgidx->nSpace>=(pgsz + FTS5_DATA_PADDING) ); + if( p->rc==SQLITE_OK && bTermWritten==0 ){ + fts5WriteAppendTerm(p, &writer, nTerm, (const u8*)zTerm); + bTermWritten = 1; + assert( p->rc!=SQLITE_OK || writer.bFirstRowidInPage==0 ); + } - /* Begin scanning through hash table entries. This loop runs once for each - ** term/doclist currently stored within the hash table. */ - if( p->rc==SQLITE_OK ){ - p->rc = sqlite3Fts5HashScanInit(pHash, 0, 0); - } - while( p->rc==SQLITE_OK && 0==sqlite3Fts5HashScanEof(pHash) ){ - const char *zTerm; /* Buffer containing term */ - const u8 *pDoclist; /* Pointer to doclist for this term */ - int nDoclist; /* Size of doclist in bytes */ - - /* Write the term for this entry to disk. */ - sqlite3Fts5HashScanEntry(pHash, &zTerm, &pDoclist, &nDoclist); - fts5WriteAppendTerm(p, &writer, (int)strlen(zTerm), (const u8*)zTerm); - if( p->rc!=SQLITE_OK ) break; - - assert( writer.bFirstRowidInPage==0 ); - if( pgsz>=(pBuf->n + pPgidx->n + nDoclist + 1) ){ - /* The entire doclist will fit on the current leaf. */ - fts5BufferSafeAppendBlob(pBuf, pDoclist, nDoclist); - }else{ - i64 iRowid = 0; - u64 iDelta = 0; - int iOff = 0; - - /* The entire doclist will not fit on this leaf. The following - ** loop iterates through the poslists that make up the current - ** doclist. */ - while( p->rc==SQLITE_OK && iOffp[0], (u16)pBuf->n); /* first rowid on page */ - pBuf->n += sqlite3Fts5PutVarint(&pBuf->p[pBuf->n], iRowid); - writer.bFirstRowidInPage = 0; - fts5WriteDlidxAppend(p, &writer, iRowid); + if( writer.bFirstRowidInPage ){ + fts5PutU16(&pBuf->p[0], (u16)pBuf->n); /* first rowid on page */ + pBuf->n += sqlite3Fts5PutVarint(&pBuf->p[pBuf->n], iRowid); + writer.bFirstRowidInPage = 0; + fts5WriteDlidxAppend(p, &writer, iRowid); + }else{ + u64 iRowidDelta = (u64)iRowid - (u64)iPrev; + pBuf->n += sqlite3Fts5PutVarint(&pBuf->p[pBuf->n], iRowidDelta); + } if( p->rc!=SQLITE_OK ) break; - }else{ - pBuf->n += sqlite3Fts5PutVarint(&pBuf->p[pBuf->n], iDelta); - } - assert( pBuf->n<=pBuf->nSpace ); + assert( pBuf->n<=pBuf->nSpace ); + iPrev = iRowid; - if( eDetail==FTS5_DETAIL_NONE ){ - if( iOffp[pBuf->n++] = 0; - iOff++; + if( eDetail==FTS5_DETAIL_NONE ){ if( iOffp[pBuf->n++] = 0; iOff++; + if( iOffp[pBuf->n++] = 0; + iOff++; + } + } + if( (pBuf->n + pPgidx->n)>=pgsz ){ + fts5WriteFlushLeaf(p, &writer); } - } - if( (pBuf->n + pPgidx->n)>=pgsz ){ - fts5WriteFlushLeaf(p, &writer); - } - }else{ - int bDummy; - int nPos; - int nCopy = fts5GetPoslistSize(&pDoclist[iOff], &nPos, &bDummy); - nCopy += nPos; - if( (pBuf->n + pPgidx->n + nCopy) <= pgsz ){ - /* The entire poslist will fit on the current leaf. So copy - ** it in one go. */ - fts5BufferSafeAppendBlob(pBuf, &pDoclist[iOff], nCopy); }else{ - /* The entire poslist will not fit on this leaf. So it needs - ** to be broken into sections. The only qualification being - ** that each varint must be stored contiguously. */ - const u8 *pPoslist = &pDoclist[iOff]; - int iPos = 0; - while( p->rc==SQLITE_OK ){ - int nSpace = pgsz - pBuf->n - pPgidx->n; - int n = 0; - if( (nCopy - iPos)<=nSpace ){ - n = nCopy - iPos; - }else{ - n = fts5PoslistPrefix(&pPoslist[iPos], nSpace); - } - assert( n>0 ); - fts5BufferSafeAppendBlob(pBuf, &pPoslist[iPos], n); - iPos += n; - if( (pBuf->n + pPgidx->n)>=pgsz ){ - fts5WriteFlushLeaf(p, &writer); + int bDummy; + int nPos; + int nCopy = fts5GetPoslistSize(&pDoclist[iOff], &nPos, &bDummy); + nCopy += nPos; + if( (pBuf->n + pPgidx->n + nCopy) <= pgsz ){ + /* The entire poslist will fit on the current leaf. So copy + ** it in one go. */ + fts5BufferSafeAppendBlob(pBuf, &pDoclist[iOff], nCopy); + }else{ + /* The entire poslist will not fit on this leaf. So it needs + ** to be broken into sections. The only qualification being + ** that each varint must be stored contiguously. */ + const u8 *pPoslist = &pDoclist[iOff]; + int iPos = 0; + while( p->rc==SQLITE_OK ){ + int nSpace = pgsz - pBuf->n - pPgidx->n; + int n = 0; + if( (nCopy - iPos)<=nSpace ){ + n = nCopy - iPos; + }else{ + n = fts5PoslistPrefix(&pPoslist[iPos], nSpace); + } + assert( n>0 ); + fts5BufferSafeAppendBlob(pBuf, &pPoslist[iPos], n); + iPos += n; + if( (pBuf->n + pPgidx->n)>=pgsz ){ + fts5WriteFlushLeaf(p, &writer); + } + if( iPos>=nCopy ) break; } - if( iPos>=nCopy ) break; } + iOff += nCopy; } - iOff += nCopy; } } - } - /* TODO2: Doclist terminator written here. */ - /* pBuf->p[pBuf->n++] = '\0'; */ - assert( pBuf->n<=pBuf->nSpace ); - if( p->rc==SQLITE_OK ) sqlite3Fts5HashScanNext(pHash); - } - sqlite3Fts5HashClear(pHash); - fts5WriteFinish(p, &writer, &pgnoLast); + /* TODO2: Doclist terminator written here. */ + /* pBuf->p[pBuf->n++] = '\0'; */ + assert( pBuf->n<=pBuf->nSpace ); + if( p->rc==SQLITE_OK ) sqlite3Fts5HashScanNext(pHash); + } + sqlite3Fts5HashClear(pHash); + fts5WriteFinish(p, &writer, &pgnoLast); - /* Update the Fts5Structure. It is written back to the database by the - ** fts5StructureRelease() call below. */ - if( pStruct->nLevel==0 ){ - fts5StructureAddLevel(&p->rc, &pStruct); - } - fts5StructureExtendLevel(&p->rc, pStruct, 0, 1, 0); - if( p->rc==SQLITE_OK ){ - pSeg = &pStruct->aLevel[0].aSeg[ pStruct->aLevel[0].nSeg++ ]; - pSeg->iSegid = iSegid; - pSeg->pgnoFirst = 1; - pSeg->pgnoLast = pgnoLast; - pStruct->nSegment++; + assert( p->rc!=SQLITE_OK || bSecureDelete || pgnoLast>0 ); + if( pgnoLast>0 ){ + /* Update the Fts5Structure. It is written back to the database by the + ** fts5StructureRelease() call below. */ + if( pStruct->nLevel==0 ){ + fts5StructureAddLevel(&p->rc, &pStruct); + } + fts5StructureExtendLevel(&p->rc, pStruct, 0, 1, 0); + if( p->rc==SQLITE_OK ){ + pSeg = &pStruct->aLevel[0].aSeg[ pStruct->aLevel[0].nSeg++ ]; + pSeg->iSegid = iSegid; + pSeg->pgnoFirst = 1; + pSeg->pgnoLast = pgnoLast; + if( pStruct->nOriginCntr>0 ){ + pSeg->iOrigin1 = pStruct->nOriginCntr; + pSeg->iOrigin2 = pStruct->nOriginCntr; + pSeg->nEntry = p->nPendingRow; + pStruct->nOriginCntr++; + } + pStruct->nSegment++; + } + fts5StructurePromote(p, 0, pStruct); + } } - fts5StructurePromote(p, 0, pStruct); } - fts5IndexAutomerge(p, &pStruct, pgnoLast); + fts5IndexAutomerge(p, &pStruct, pgnoLast + p->nContentlessDelete); fts5IndexCrisismerge(p, &pStruct); fts5StructureWrite(p, pStruct); fts5StructureRelease(pStruct); + p->nContentlessDelete = 0; } /* @@ -233743,10 +240154,11 @@ static void fts5FlushOneHash(Fts5Index *p){ */ static void fts5IndexFlush(Fts5Index *p){ /* Unless it is empty, flush the hash table to disk */ - if( p->nPendingData ){ + if( p->nPendingData || p->nContentlessDelete ){ assert( p->pHash ); - p->nPendingData = 0; fts5FlushOneHash(p); + p->nPendingData = 0; + p->nPendingRow = 0; } } @@ -233762,17 +240174,22 @@ static Fts5Structure *fts5IndexOptimizeStruct( /* Figure out if this structure requires optimization. A structure does ** not require optimization if either: ** - ** + it consists of fewer than two segments, or - ** + all segments are on the same level, or - ** + all segments except one are currently inputs to a merge operation. + ** 1. it consists of fewer than two segments, or + ** 2. all segments are on the same level, or + ** 3. all segments except one are currently inputs to a merge operation. ** - ** In the first case, return NULL. In the second, increment the ref-count - ** on *pStruct and return a copy of the pointer to it. + ** In the first case, if there are no tombstone hash pages, return NULL. In + ** the second, increment the ref-count on *pStruct and return a copy of the + ** pointer to it. */ - if( nSeg<2 ) return 0; + if( nSeg==0 ) return 0; for(i=0; inLevel; i++){ int nThis = pStruct->aLevel[i].nSeg; - if( nThis==nSeg || (nThis==nSeg-1 && pStruct->aLevel[i].nMerge==nThis) ){ + int nMerge = pStruct->aLevel[i].nMerge; + if( nThis>0 && (nThis==nSeg || (nThis==nSeg-1 && nMerge==nThis)) ){ + if( nSeg==1 && nThis==1 && pStruct->aLevel[i].aSeg[0].nPgTombstone==0 ){ + return 0; + } fts5StructureRef(pStruct); return pStruct; } @@ -233785,10 +240202,11 @@ static Fts5Structure *fts5IndexOptimizeStruct( if( pNew ){ Fts5StructureLevel *pLvl; nByte = nSeg * sizeof(Fts5StructureSegment); - pNew->nLevel = pStruct->nLevel+1; + pNew->nLevel = MIN(pStruct->nLevel+1, FTS5_MAX_LEVEL); pNew->nRef = 1; pNew->nWriteCounter = pStruct->nWriteCounter; - pLvl = &pNew->aLevel[pStruct->nLevel]; + pNew->nOriginCntr = pStruct->nOriginCntr; + pLvl = &pNew->aLevel[pNew->nLevel-1]; pLvl->aSeg = (Fts5StructureSegment*)sqlite3Fts5MallocZero(&p->rc, nByte); if( pLvl->aSeg ){ int iLvl, iSeg; @@ -233818,6 +240236,7 @@ static int sqlite3Fts5IndexOptimize(Fts5Index *p){ assert( p->rc==SQLITE_OK ); fts5IndexFlush(p); + assert( p->nContentlessDelete==0 ); pStruct = fts5StructureRead(p); fts5StructureInvalidate(p); @@ -233847,7 +240266,10 @@ static int sqlite3Fts5IndexOptimize(Fts5Index *p){ ** INSERT command. */ static int sqlite3Fts5IndexMerge(Fts5Index *p, int nMerge){ - Fts5Structure *pStruct = fts5StructureRead(p); + Fts5Structure *pStruct = 0; + + fts5IndexFlush(p); + pStruct = fts5StructureRead(p); if( pStruct ){ int nMin = p->pConfig->nUsermerge; fts5StructureInvalidate(p); @@ -233855,7 +240277,7 @@ static int sqlite3Fts5IndexMerge(Fts5Index *p, int nMerge){ Fts5Structure *pNew = fts5IndexOptimizeStruct(p, pStruct); fts5StructureRelease(pStruct); pStruct = pNew; - nMin = 2; + nMin = 1; nMerge = nMerge*-1; } if( pStruct && pStruct->nLevel ){ @@ -234090,7 +240512,7 @@ static void fts5MergePrefixLists( /* Initialize a doclist-iterator for each input buffer. Arrange them in ** a linked-list starting at pHead in ascending order of rowid. Avoid ** linking any iterators already at EOF into the linked list at all. */ - assert( nBuf+1<=sizeof(aMerger)/sizeof(aMerger[0]) ); + assert( nBuf+1<=(int)(sizeof(aMerger)/sizeof(aMerger[0])) ); memset(aMerger, 0, sizeof(PrefixMerger)*(nBuf+1)); pHead = &aMerger[nBuf]; fts5DoclistIterInit(p1, &pHead->iter); @@ -234369,6 +240791,9 @@ static int sqlite3Fts5IndexBeginWrite(Fts5Index *p, int bDelete, i64 iRowid){ p->iWriteRowid = iRowid; p->bDelete = bDelete; + if( bDelete==0 ){ + p->nPendingRow++; + } return fts5IndexReturn(p); } @@ -234406,6 +240831,9 @@ static int sqlite3Fts5IndexReinit(Fts5Index *p){ fts5StructureInvalidate(p); fts5IndexDiscardData(p); memset(&s, 0, sizeof(Fts5Structure)); + if( p->pConfig->bContentlessDelete ){ + s.nOriginCntr = 1; + } fts5DataWrite(p, FTS5_AVERAGES_ROWID, (const u8*)"", 0); fts5StructureWrite(p, &s); return fts5IndexReturn(p); @@ -234470,6 +240898,7 @@ static int sqlite3Fts5IndexClose(Fts5Index *p){ sqlite3_finalize(p->pIdxDeleter); sqlite3_finalize(p->pIdxSelect); sqlite3_finalize(p->pDataVersion); + sqlite3_finalize(p->pDeleteFromIdx); sqlite3Fts5HashFree(p->pHash); sqlite3_free(p->zDataTbl); sqlite3_free(p); @@ -234796,6 +241225,347 @@ static int sqlite3Fts5IndexLoadConfig(Fts5Index *p){ return fts5IndexReturn(p); } +/* +** Retrieve the origin value that will be used for the segment currently +** being accumulated in the in-memory hash table when it is flushed to +** disk. If successful, SQLITE_OK is returned and (*piOrigin) set to +** the queried value. Or, if an error occurs, an error code is returned +** and the final value of (*piOrigin) is undefined. +*/ +static int sqlite3Fts5IndexGetOrigin(Fts5Index *p, i64 *piOrigin){ + Fts5Structure *pStruct; + pStruct = fts5StructureRead(p); + if( pStruct ){ + *piOrigin = pStruct->nOriginCntr; + fts5StructureRelease(pStruct); + } + return fts5IndexReturn(p); +} + +/* +** Buffer pPg contains a page of a tombstone hash table - one of nPg pages +** associated with the same segment. This function adds rowid iRowid to +** the hash table. The caller is required to guarantee that there is at +** least one free slot on the page. +** +** If parameter bForce is false and the hash table is deemed to be full +** (more than half of the slots are occupied), then non-zero is returned +** and iRowid not inserted. Or, if bForce is true or if the hash table page +** is not full, iRowid is inserted and zero returned. +*/ +static int fts5IndexTombstoneAddToPage( + Fts5Data *pPg, + int bForce, + int nPg, + u64 iRowid +){ + const int szKey = TOMBSTONE_KEYSIZE(pPg); + const int nSlot = TOMBSTONE_NSLOT(pPg); + const int nElem = fts5GetU32(&pPg->p[4]); + int iSlot = (iRowid / nPg) % nSlot; + int nCollide = nSlot; + + if( szKey==4 && iRowid>0xFFFFFFFF ) return 2; + if( iRowid==0 ){ + pPg->p[1] = 0x01; + return 0; + } + + if( bForce==0 && nElem>=(nSlot/2) ){ + return 1; + } + + fts5PutU32(&pPg->p[4], nElem+1); + if( szKey==4 ){ + u32 *aSlot = (u32*)&pPg->p[8]; + while( aSlot[iSlot] ){ + iSlot = (iSlot + 1) % nSlot; + if( nCollide--==0 ) return 0; + } + fts5PutU32((u8*)&aSlot[iSlot], (u32)iRowid); + }else{ + u64 *aSlot = (u64*)&pPg->p[8]; + while( aSlot[iSlot] ){ + iSlot = (iSlot + 1) % nSlot; + if( nCollide--==0 ) return 0; + } + fts5PutU64((u8*)&aSlot[iSlot], iRowid); + } + + return 0; +} + +/* +** This function attempts to build a new hash containing all the keys +** currently in the tombstone hash table for segment pSeg. The new +** hash will be stored in the nOut buffers passed in array apOut[]. +** All pages of the new hash use key-size szKey (4 or 8). +** +** Return 0 if the hash is successfully rebuilt into the nOut pages. +** Or non-zero if it is not (because one page became overfull). In this +** case the caller should retry with a larger nOut parameter. +** +** Parameter pData1 is page iPg1 of the hash table being rebuilt. +*/ +static int fts5IndexTombstoneRehash( + Fts5Index *p, + Fts5StructureSegment *pSeg, /* Segment to rebuild hash of */ + Fts5Data *pData1, /* One page of current hash - or NULL */ + int iPg1, /* Which page of the current hash is pData1 */ + int szKey, /* 4 or 8, the keysize */ + int nOut, /* Number of output pages */ + Fts5Data **apOut /* Array of output hash pages */ +){ + int ii; + int res = 0; + + /* Initialize the headers of all the output pages */ + for(ii=0; iip[0] = szKey; + fts5PutU32(&apOut[ii]->p[4], 0); + } + + /* Loop through the current pages of the hash table. */ + for(ii=0; res==0 && iinPgTombstone; ii++){ + Fts5Data *pData = 0; /* Page ii of the current hash table */ + Fts5Data *pFree = 0; /* Free this at the end of the loop */ + + if( iPg1==ii ){ + pData = pData1; + }else{ + pFree = pData = fts5DataRead(p, FTS5_TOMBSTONE_ROWID(pSeg->iSegid, ii)); + } + + if( pData ){ + int szKeyIn = TOMBSTONE_KEYSIZE(pData); + int nSlotIn = (pData->nn - 8) / szKeyIn; + int iIn; + for(iIn=0; iInp[8]; + if( aSlot[iIn] ) iVal = fts5GetU32((u8*)&aSlot[iIn]); + }else{ + u64 *aSlot = (u64*)&pData->p[8]; + if( aSlot[iIn] ) iVal = fts5GetU64((u8*)&aSlot[iIn]); + } + + /* If iVal is not 0 at this point, insert it into the new hash table */ + if( iVal ){ + Fts5Data *pPg = apOut[(iVal % nOut)]; + res = fts5IndexTombstoneAddToPage(pPg, 0, nOut, iVal); + if( res ) break; + } + } + + /* If this is page 0 of the old hash, copy the rowid-0-flag from the + ** old hash to the new. */ + if( ii==0 ){ + apOut[0]->p[1] = pData->p[1]; + } + } + fts5DataRelease(pFree); + } + + return res; +} + +/* +** This is called to rebuild the hash table belonging to segment pSeg. +** If parameter pData1 is not NULL, then one page of the existing hash table +** has already been loaded - pData1, which is page iPg1. The key-size for +** the new hash table is szKey (4 or 8). +** +** If successful, the new hash table is not written to disk. Instead, +** output parameter (*pnOut) is set to the number of pages in the new +** hash table, and (*papOut) to point to an array of buffers containing +** the new page data. +** +** If an error occurs, an error code is left in the Fts5Index object and +** both output parameters set to 0 before returning. +*/ +static void fts5IndexTombstoneRebuild( + Fts5Index *p, + Fts5StructureSegment *pSeg, /* Segment to rebuild hash of */ + Fts5Data *pData1, /* One page of current hash - or NULL */ + int iPg1, /* Which page of the current hash is pData1 */ + int szKey, /* 4 or 8, the keysize */ + int *pnOut, /* OUT: Number of output pages */ + Fts5Data ***papOut /* OUT: Output hash pages */ +){ + const int MINSLOT = 32; + int nSlotPerPage = MAX(MINSLOT, (p->pConfig->pgsz - 8) / szKey); + int nSlot = 0; /* Number of slots in each output page */ + int nOut = 0; + + /* Figure out how many output pages (nOut) and how many slots per + ** page (nSlot). There are three possibilities: + ** + ** 1. The hash table does not yet exist. In this case the new hash + ** table will consist of a single page with MINSLOT slots. + ** + ** 2. The hash table exists but is currently a single page. In this + ** case an attempt is made to grow the page to accommodate the new + ** entry. The page is allowed to grow up to nSlotPerPage (see above) + ** slots. + ** + ** 3. The hash table already consists of more than one page, or of + ** a single page already so large that it cannot be grown. In this + ** case the new hash consists of (nPg*2+1) pages of nSlotPerPage + ** slots each, where nPg is the current number of pages in the + ** hash table. + */ + if( pSeg->nPgTombstone==0 ){ + /* Case 1. */ + nOut = 1; + nSlot = MINSLOT; + }else if( pSeg->nPgTombstone==1 ){ + /* Case 2. */ + int nElem = (int)fts5GetU32(&pData1->p[4]); + assert( pData1 && iPg1==0 ); + nOut = 1; + nSlot = MAX(nElem*4, MINSLOT); + if( nSlot>nSlotPerPage ) nOut = 0; + } + if( nOut==0 ){ + /* Case 3. */ + nOut = (pSeg->nPgTombstone * 2 + 1); + nSlot = nSlotPerPage; + } + + /* Allocate the required array and output pages */ + while( 1 ){ + int res = 0; + int ii = 0; + int szPage = 0; + Fts5Data **apOut = 0; + + /* Allocate space for the new hash table */ + assert( nSlot>=MINSLOT ); + apOut = (Fts5Data**)sqlite3Fts5MallocZero(&p->rc, sizeof(Fts5Data*) * nOut); + szPage = 8 + nSlot*szKey; + for(ii=0; iirc, + sizeof(Fts5Data)+szPage + ); + if( pNew ){ + pNew->nn = szPage; + pNew->p = (u8*)&pNew[1]; + apOut[ii] = pNew; + } + } + + /* Rebuild the hash table. */ + if( p->rc==SQLITE_OK ){ + res = fts5IndexTombstoneRehash(p, pSeg, pData1, iPg1, szKey, nOut, apOut); + } + if( res==0 ){ + if( p->rc ){ + fts5IndexFreeArray(apOut, nOut); + apOut = 0; + nOut = 0; + } + *pnOut = nOut; + *papOut = apOut; + break; + } + + /* If control flows to here, it was not possible to rebuild the hash + ** table. Free all buffers and then try again with more pages. */ + assert( p->rc==SQLITE_OK ); + fts5IndexFreeArray(apOut, nOut); + nSlot = nSlotPerPage; + nOut = nOut*2 + 1; + } +} + + +/* +** Add a tombstone for rowid iRowid to segment pSeg. +*/ +static void fts5IndexTombstoneAdd( + Fts5Index *p, + Fts5StructureSegment *pSeg, + u64 iRowid +){ + Fts5Data *pPg = 0; + int iPg = -1; + int szKey = 0; + int nHash = 0; + Fts5Data **apHash = 0; + + p->nContentlessDelete++; + + if( pSeg->nPgTombstone>0 ){ + iPg = iRowid % pSeg->nPgTombstone; + pPg = fts5DataRead(p, FTS5_TOMBSTONE_ROWID(pSeg->iSegid,iPg)); + if( pPg==0 ){ + assert( p->rc!=SQLITE_OK ); + return; + } + + if( 0==fts5IndexTombstoneAddToPage(pPg, 0, pSeg->nPgTombstone, iRowid) ){ + fts5DataWrite(p, FTS5_TOMBSTONE_ROWID(pSeg->iSegid,iPg), pPg->p, pPg->nn); + fts5DataRelease(pPg); + return; + } + } + + /* Have to rebuild the hash table. First figure out the key-size (4 or 8). */ + szKey = pPg ? TOMBSTONE_KEYSIZE(pPg) : 4; + if( iRowid>0xFFFFFFFF ) szKey = 8; + + /* Rebuild the hash table */ + fts5IndexTombstoneRebuild(p, pSeg, pPg, iPg, szKey, &nHash, &apHash); + assert( p->rc==SQLITE_OK || (nHash==0 && apHash==0) ); + + /* If all has succeeded, write the new rowid into one of the new hash + ** table pages, then write them all out to disk. */ + if( nHash ){ + int ii = 0; + fts5IndexTombstoneAddToPage(apHash[iRowid % nHash], 1, nHash, iRowid); + for(ii=0; iiiSegid, ii); + fts5DataWrite(p, iTombstoneRowid, apHash[ii]->p, apHash[ii]->nn); + } + pSeg->nPgTombstone = nHash; + fts5StructureWrite(p, p->pStruct); + } + + fts5DataRelease(pPg); + fts5IndexFreeArray(apHash, nHash); +} + +/* +** Add iRowid to the tombstone list of the segment or segments that contain +** rows from origin iOrigin. Return SQLITE_OK if successful, or an SQLite +** error code otherwise. +*/ +static int sqlite3Fts5IndexContentlessDelete(Fts5Index *p, i64 iOrigin, i64 iRowid){ + Fts5Structure *pStruct; + pStruct = fts5StructureRead(p); + if( pStruct ){ + int bFound = 0; /* True after pSeg->nEntryTombstone incr. */ + int iLvl; + for(iLvl=pStruct->nLevel-1; iLvl>=0; iLvl--){ + int iSeg; + for(iSeg=pStruct->aLevel[iLvl].nSeg-1; iSeg>=0; iSeg--){ + Fts5StructureSegment *pSeg = &pStruct->aLevel[iLvl].aSeg[iSeg]; + if( pSeg->iOrigin1<=(u64)iOrigin && pSeg->iOrigin2>=(u64)iOrigin ){ + if( bFound==0 ){ + pSeg->nEntryTombstone++; + bFound = 1; + } + fts5IndexTombstoneAdd(p, pSeg, iRowid); + } + } + } + fts5StructureRelease(pStruct); + } + return fts5IndexReturn(p); +} /************************************************************************* ************************************************************************** @@ -235100,6 +241870,7 @@ static void fts5IndexIntegrityCheckSegment( Fts5StructureSegment *pSeg /* Segment to check internal consistency */ ){ Fts5Config *pConfig = p->pConfig; + int bSecureDelete = (pConfig->iVersion==FTS5_CURRENT_VERSION_SECUREDELETE); sqlite3_stmt *pStmt = 0; int rc2; int iIdxPrevLeaf = pSeg->pgnoFirst-1; @@ -235135,7 +241906,19 @@ static void fts5IndexIntegrityCheckSegment( ** is also a rowid pointer within the leaf page header, it points to a ** location before the term. */ if( pLeaf->nn<=pLeaf->szLeaf ){ - p->rc = FTS5_CORRUPT; + + if( nIdxTerm==0 + && pConfig->iVersion==FTS5_CURRENT_VERSION_SECUREDELETE + && pLeaf->nn==pLeaf->szLeaf + && pLeaf->nn==4 + ){ + /* special case - the very first page in a segment keeps its %_idx + ** entry even if all the terms are removed from it by secure-delete + ** operations. */ + }else{ + p->rc = FTS5_CORRUPT; + } + }else{ int iOff; /* Offset of first term on leaf */ int iRowidOff; /* Offset of first rowid on leaf */ @@ -235199,9 +241982,12 @@ static void fts5IndexIntegrityCheckSegment( ASSERT_SZLEAF_OK(pLeaf); if( iRowidOff>=pLeaf->szLeaf ){ p->rc = FTS5_CORRUPT; - }else{ + }else if( bSecureDelete==0 || iRowidOff>0 ){ + i64 iDlRowid = fts5DlidxIterRowid(pDlidx); fts5GetVarint(&pLeaf->p[iRowidOff], (u64*)&iRowid); - if( iRowid!=fts5DlidxIterRowid(pDlidx) ) p->rc = FTS5_CORRUPT; + if( iRowidrc = FTS5_CORRUPT; + } } fts5DataRelease(pLeaf); } @@ -235331,13 +242117,14 @@ static int sqlite3Fts5IndexIntegrityCheck(Fts5Index *p, u64 cksum, int bUseCksum ** function only. */ -#ifdef SQLITE_TEST +#if defined(SQLITE_TEST) || defined(SQLITE_FTS5_DEBUG) /* ** Decode a segment-data rowid from the %_data table. This function is ** the opposite of macro FTS5_SEGMENT_ROWID(). */ static void fts5DecodeRowid( i64 iRowid, /* Rowid from %_data table */ + int *pbTombstone, /* OUT: Tombstone hash flag */ int *piSegid, /* OUT: Segment id */ int *pbDlidx, /* OUT: Dlidx flag */ int *piHeight, /* OUT: Height */ @@ -235353,13 +242140,16 @@ static void fts5DecodeRowid( iRowid >>= FTS5_DATA_DLI_B; *piSegid = (int)(iRowid & (((i64)1 << FTS5_DATA_ID_B) - 1)); + iRowid >>= FTS5_DATA_ID_B; + + *pbTombstone = (int)(iRowid & 0x0001); } -#endif /* SQLITE_TEST */ +#endif /* SQLITE_TEST || SQLITE_FTS5_DEBUG */ -#ifdef SQLITE_TEST +#if defined(SQLITE_TEST) || defined(SQLITE_FTS5_DEBUG) static void fts5DebugRowid(int *pRc, Fts5Buffer *pBuf, i64 iKey){ - int iSegid, iHeight, iPgno, bDlidx; /* Rowid compenents */ - fts5DecodeRowid(iKey, &iSegid, &bDlidx, &iHeight, &iPgno); + int iSegid, iHeight, iPgno, bDlidx, bTomb; /* Rowid compenents */ + fts5DecodeRowid(iKey, &bTomb, &iSegid, &bDlidx, &iHeight, &iPgno); if( iSegid==0 ){ if( iKey==FTS5_AVERAGES_ROWID ){ @@ -235369,14 +242159,16 @@ static void fts5DebugRowid(int *pRc, Fts5Buffer *pBuf, i64 iKey){ } } else{ - sqlite3Fts5BufferAppendPrintf(pRc, pBuf, "{%ssegid=%d h=%d pgno=%d}", - bDlidx ? "dlidx " : "", iSegid, iHeight, iPgno + sqlite3Fts5BufferAppendPrintf(pRc, pBuf, "{%s%ssegid=%d h=%d pgno=%d}", + bDlidx ? "dlidx " : "", + bTomb ? "tombstone " : "", + iSegid, iHeight, iPgno ); } } -#endif /* SQLITE_TEST */ +#endif /* SQLITE_TEST || SQLITE_FTS5_DEBUG */ -#ifdef SQLITE_TEST +#if defined(SQLITE_TEST) || defined(SQLITE_FTS5_DEBUG) static void fts5DebugStructure( int *pRc, /* IN/OUT: error code */ Fts5Buffer *pBuf, @@ -235391,16 +242183,22 @@ static void fts5DebugStructure( ); for(iSeg=0; iSegnSeg; iSeg++){ Fts5StructureSegment *pSeg = &pLvl->aSeg[iSeg]; - sqlite3Fts5BufferAppendPrintf(pRc, pBuf, " {id=%d leaves=%d..%d}", + sqlite3Fts5BufferAppendPrintf(pRc, pBuf, " {id=%d leaves=%d..%d", pSeg->iSegid, pSeg->pgnoFirst, pSeg->pgnoLast ); + if( pSeg->iOrigin1>0 ){ + sqlite3Fts5BufferAppendPrintf(pRc, pBuf, " origin=%lld..%lld", + pSeg->iOrigin1, pSeg->iOrigin2 + ); + } + sqlite3Fts5BufferAppendPrintf(pRc, pBuf, "}"); } sqlite3Fts5BufferAppendPrintf(pRc, pBuf, "}"); } } -#endif /* SQLITE_TEST */ +#endif /* SQLITE_TEST || SQLITE_FTS5_DEBUG */ -#ifdef SQLITE_TEST +#if defined(SQLITE_TEST) || defined(SQLITE_FTS5_DEBUG) /* ** This is part of the fts5_decode() debugging aid. ** @@ -235425,9 +242223,9 @@ static void fts5DecodeStructure( fts5DebugStructure(pRc, pBuf, p); fts5StructureRelease(p); } -#endif /* SQLITE_TEST */ +#endif /* SQLITE_TEST || SQLITE_FTS5_DEBUG */ -#ifdef SQLITE_TEST +#if defined(SQLITE_TEST) || defined(SQLITE_FTS5_DEBUG) /* ** This is part of the fts5_decode() debugging aid. ** @@ -235450,9 +242248,9 @@ static void fts5DecodeAverages( zSpace = " "; } } -#endif /* SQLITE_TEST */ +#endif /* SQLITE_TEST || SQLITE_FTS5_DEBUG */ -#ifdef SQLITE_TEST +#if defined(SQLITE_TEST) || defined(SQLITE_FTS5_DEBUG) /* ** Buffer (a/n) is assumed to contain a list of serialized varints. Read ** each varint and append its string representation to buffer pBuf. Return @@ -235469,9 +242267,9 @@ static int fts5DecodePoslist(int *pRc, Fts5Buffer *pBuf, const u8 *a, int n){ } return iOff; } -#endif /* SQLITE_TEST */ +#endif /* SQLITE_TEST || SQLITE_FTS5_DEBUG */ -#ifdef SQLITE_TEST +#if defined(SQLITE_TEST) || defined(SQLITE_FTS5_DEBUG) /* ** The start of buffer (a/n) contains the start of a doclist. The doclist ** may or may not finish within the buffer. This function appends a text @@ -235504,9 +242302,9 @@ static int fts5DecodeDoclist(int *pRc, Fts5Buffer *pBuf, const u8 *a, int n){ return iOff; } -#endif /* SQLITE_TEST */ +#endif /* SQLITE_TEST || SQLITE_FTS5_DEBUG */ -#ifdef SQLITE_TEST +#if defined(SQLITE_TEST) || defined(SQLITE_FTS5_DEBUG) /* ** This function is part of the fts5_decode() debugging function. It is ** only ever used with detail=none tables. @@ -235547,9 +242345,9 @@ static void fts5DecodeRowidList( sqlite3Fts5BufferAppendPrintf(pRc, pBuf, " %lld%s", iRowid, zApp); } } -#endif /* SQLITE_TEST */ +#endif /* SQLITE_TEST || SQLITE_FTS5_DEBUG */ -#ifdef SQLITE_TEST +#if defined(SQLITE_TEST) || defined(SQLITE_FTS5_DEBUG) /* ** The implementation of user-defined scalar function fts5_decode(). */ @@ -235560,6 +242358,7 @@ static void fts5DecodeFunction( ){ i64 iRowid; /* Rowid for record being decoded */ int iSegid,iHeight,iPgno,bDlidx;/* Rowid components */ + int bTomb; const u8 *aBlob; int n; /* Record to decode */ u8 *a = 0; Fts5Buffer s; /* Build up text to return here */ @@ -235582,7 +242381,7 @@ static void fts5DecodeFunction( if( a==0 ) goto decode_out; if( n>0 ) memcpy(a, aBlob, n); - fts5DecodeRowid(iRowid, &iSegid, &bDlidx, &iHeight, &iPgno); + fts5DecodeRowid(iRowid, &bTomb, &iSegid, &bDlidx, &iHeight, &iPgno); fts5DebugRowid(&rc, &s, iRowid); if( bDlidx ){ @@ -235601,6 +242400,28 @@ static void fts5DecodeFunction( " %d(%lld)", lvl.iLeafPgno, lvl.iRowid ); } + }else if( bTomb ){ + u32 nElem = fts5GetU32(&a[4]); + int szKey = (aBlob[0]==4 || aBlob[0]==8) ? aBlob[0] : 8; + int nSlot = (n - 8) / szKey; + int ii; + sqlite3Fts5BufferAppendPrintf(&rc, &s, " nElem=%d", (int)nElem); + if( aBlob[1] ){ + sqlite3Fts5BufferAppendPrintf(&rc, &s, " 0"); + } + for(ii=0; iiszLeaf ){ + rc = FTS5_CORRUPT; + }else{ + fts5DecodeRowidList(&rc, &s, &a[iOff], iTermOff-iOff); + } iOff = iTermOff; if( iOffestimatedCost = (double)100; + pIdxInfo->estimatedRows = 100; + pIdxInfo->idxNum = 0; + for(i=0, p=pIdxInfo->aConstraint; inConstraint; i++, p++){ + if( p->usable==0 ) continue; + if( p->op==SQLITE_INDEX_CONSTRAINT_EQ && p->iColumn==11 ){ + rc = SQLITE_OK; + pIdxInfo->aConstraintUsage[i].omit = 1; + pIdxInfo->aConstraintUsage[i].argvIndex = 1; + break; + } + } + return rc; +} + +/* +** This method is the destructor for bytecodevtab objects. +*/ +static int fts5structDisconnectMethod(sqlite3_vtab *pVtab){ + Fts5StructVtab *p = (Fts5StructVtab*)pVtab; + sqlite3_free(p); + return SQLITE_OK; +} + +/* +** Constructor for a new bytecodevtab_cursor object. +*/ +static int fts5structOpenMethod(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCsr){ + int rc = SQLITE_OK; + Fts5StructVcsr *pNew = 0; + + pNew = sqlite3Fts5MallocZero(&rc, sizeof(*pNew)); + *ppCsr = (sqlite3_vtab_cursor*)pNew; + + return SQLITE_OK; +} + +/* +** Destructor for a bytecodevtab_cursor. +*/ +static int fts5structCloseMethod(sqlite3_vtab_cursor *cur){ + Fts5StructVcsr *pCsr = (Fts5StructVcsr*)cur; + fts5StructureRelease(pCsr->pStruct); + sqlite3_free(pCsr); + return SQLITE_OK; +} + + +/* +** Advance a bytecodevtab_cursor to its next row of output. +*/ +static int fts5structNextMethod(sqlite3_vtab_cursor *cur){ + Fts5StructVcsr *pCsr = (Fts5StructVcsr*)cur; + Fts5Structure *p = pCsr->pStruct; + + assert( pCsr->pStruct ); + pCsr->iSeg++; + pCsr->iRowid++; + while( pCsr->iLevelnLevel && pCsr->iSeg>=p->aLevel[pCsr->iLevel].nSeg ){ + pCsr->iLevel++; + pCsr->iSeg = 0; + } + if( pCsr->iLevel>=p->nLevel ){ + fts5StructureRelease(pCsr->pStruct); + pCsr->pStruct = 0; + } + return SQLITE_OK; +} + +/* +** Return TRUE if the cursor has been moved off of the last +** row of output. +*/ +static int fts5structEofMethod(sqlite3_vtab_cursor *cur){ + Fts5StructVcsr *pCsr = (Fts5StructVcsr*)cur; + return pCsr->pStruct==0; +} + +static int fts5structRowidMethod( + sqlite3_vtab_cursor *cur, + sqlite_int64 *piRowid +){ + Fts5StructVcsr *pCsr = (Fts5StructVcsr*)cur; + *piRowid = pCsr->iRowid; + return SQLITE_OK; +} + +/* +** Return values of columns for the row at which the bytecodevtab_cursor +** is currently pointing. +*/ +static int fts5structColumnMethod( + sqlite3_vtab_cursor *cur, /* The cursor */ + sqlite3_context *ctx, /* First argument to sqlite3_result_...() */ + int i /* Which column to return */ +){ + Fts5StructVcsr *pCsr = (Fts5StructVcsr*)cur; + Fts5Structure *p = pCsr->pStruct; + Fts5StructureSegment *pSeg = &p->aLevel[pCsr->iLevel].aSeg[pCsr->iSeg]; + + switch( i ){ + case 0: /* level */ + sqlite3_result_int(ctx, pCsr->iLevel); + break; + case 1: /* segment */ + sqlite3_result_int(ctx, pCsr->iSeg); + break; + case 2: /* merge */ + sqlite3_result_int(ctx, pCsr->iSeg < p->aLevel[pCsr->iLevel].nMerge); + break; + case 3: /* segid */ + sqlite3_result_int(ctx, pSeg->iSegid); + break; + case 4: /* leaf1 */ + sqlite3_result_int(ctx, pSeg->pgnoFirst); + break; + case 5: /* leaf2 */ + sqlite3_result_int(ctx, pSeg->pgnoLast); + break; + case 6: /* origin1 */ + sqlite3_result_int64(ctx, pSeg->iOrigin1); + break; + case 7: /* origin2 */ + sqlite3_result_int64(ctx, pSeg->iOrigin2); + break; + case 8: /* npgtombstone */ + sqlite3_result_int(ctx, pSeg->nPgTombstone); + break; + case 9: /* nentrytombstone */ + sqlite3_result_int64(ctx, pSeg->nEntryTombstone); + break; + case 10: /* nentry */ + sqlite3_result_int64(ctx, pSeg->nEntry); + break; + } + return SQLITE_OK; +} + +/* +** Initialize a cursor. +** +** idxNum==0 means show all subprograms +** idxNum==1 means show only the main bytecode and omit subprograms. +*/ +static int fts5structFilterMethod( + sqlite3_vtab_cursor *pVtabCursor, + int idxNum, const char *idxStr, + int argc, sqlite3_value **argv +){ + Fts5StructVcsr *pCsr = (Fts5StructVcsr *)pVtabCursor; + int rc = SQLITE_OK; + + const u8 *aBlob = 0; + int nBlob = 0; + + assert( argc==1 ); + fts5StructureRelease(pCsr->pStruct); + pCsr->pStruct = 0; + + nBlob = sqlite3_value_bytes(argv[0]); + aBlob = (const u8*)sqlite3_value_blob(argv[0]); + rc = fts5StructureDecode(aBlob, nBlob, 0, &pCsr->pStruct); + if( rc==SQLITE_OK ){ + pCsr->iLevel = 0; + pCsr->iRowid = 0; + pCsr->iSeg = -1; + rc = fts5structNextMethod(pVtabCursor); + } + + return rc; +} + +#endif /* SQLITE_TEST || SQLITE_FTS5_DEBUG */ /* ** This is called as part of registering the FTS5 module with database @@ -235805,7 +242857,7 @@ static void fts5RowidFunction( ** SQLite error code is returned instead. */ static int sqlite3Fts5IndexInit(sqlite3 *db){ -#ifdef SQLITE_TEST +#if defined(SQLITE_TEST) || defined(SQLITE_FTS5_DEBUG) int rc = sqlite3_create_function( db, "fts5_decode", 2, SQLITE_UTF8, 0, fts5DecodeFunction, 0, 0 ); @@ -235822,6 +242874,36 @@ static int sqlite3Fts5IndexInit(sqlite3 *db){ db, "fts5_rowid", -1, SQLITE_UTF8, 0, fts5RowidFunction, 0, 0 ); } + + if( rc==SQLITE_OK ){ + static const sqlite3_module fts5structure_module = { + 0, /* iVersion */ + 0, /* xCreate */ + fts5structConnectMethod, /* xConnect */ + fts5structBestIndexMethod, /* xBestIndex */ + fts5structDisconnectMethod, /* xDisconnect */ + 0, /* xDestroy */ + fts5structOpenMethod, /* xOpen */ + fts5structCloseMethod, /* xClose */ + fts5structFilterMethod, /* xFilter */ + fts5structNextMethod, /* xNext */ + fts5structEofMethod, /* xEof */ + fts5structColumnMethod, /* xColumn */ + fts5structRowidMethod, /* xRowid */ + 0, /* xUpdate */ + 0, /* xBegin */ + 0, /* xSync */ + 0, /* xCommit */ + 0, /* xRollback */ + 0, /* xFindFunction */ + 0, /* xRename */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0, /* xRollbackTo */ + 0 /* xShadowName */ + }; + rc = sqlite3_create_module(db, "fts5_structure", &fts5structure_module, 0); + } return rc; #else return SQLITE_OK; @@ -237463,6 +244545,7 @@ static int fts5UpdateMethod( Fts5Config *pConfig = pTab->p.pConfig; int eType0; /* value_type() of apVal[0] */ int rc = SQLITE_OK; /* Return code */ + int bUpdateOrDelete = 0; /* A transaction must be open when this is called. */ assert( pTab->ts.eState==1 || pTab->ts.eState==2 ); @@ -237473,6 +244556,11 @@ static int fts5UpdateMethod( || sqlite3_value_type(apVal[0])==SQLITE_NULL ); assert( pTab->p.pConfig->pzErrmsg==0 ); + if( pConfig->pgsz==0 ){ + rc = sqlite3Fts5IndexLoadConfig(pTab->p.pIndex); + if( rc!=SQLITE_OK ) return rc; + } + pTab->p.pConfig->pzErrmsg = &pTab->p.base.zErrMsg; /* Put any active cursors into REQUIRE_SEEK state. */ @@ -237487,7 +244575,14 @@ static int fts5UpdateMethod( if( pConfig->eContent!=FTS5_CONTENT_NORMAL && 0==sqlite3_stricmp("delete", z) ){ - rc = fts5SpecialDelete(pTab, apVal); + if( pConfig->bContentlessDelete ){ + fts5SetVtabError(pTab, + "'delete' may not be used with a contentless_delete=1 table" + ); + rc = SQLITE_ERROR; + }else{ + rc = fts5SpecialDelete(pTab, apVal); + } }else{ rc = fts5SpecialInsert(pTab, z, apVal[2 + pConfig->nCol + 1]); } @@ -237504,7 +244599,7 @@ static int fts5UpdateMethod( ** Cases 3 and 4 may violate the rowid constraint. */ int eConflict = SQLITE_ABORT; - if( pConfig->eContent==FTS5_CONTENT_NORMAL ){ + if( pConfig->eContent==FTS5_CONTENT_NORMAL || pConfig->bContentlessDelete ){ eConflict = sqlite3_vtab_on_conflict(pConfig->db); } @@ -237512,8 +244607,12 @@ static int fts5UpdateMethod( assert( nArg!=1 || eType0==SQLITE_INTEGER ); /* Filter out attempts to run UPDATE or DELETE on contentless tables. - ** This is not suported. */ - if( eType0==SQLITE_INTEGER && fts5IsContentless(pTab) ){ + ** This is not suported. Except - DELETE is supported if the CREATE + ** VIRTUAL TABLE statement contained "contentless_delete=1". */ + if( eType0==SQLITE_INTEGER + && pConfig->eContent==FTS5_CONTENT_NONE + && pConfig->bContentlessDelete==0 + ){ pTab->p.base.zErrMsg = sqlite3_mprintf( "cannot %s contentless fts5 table: %s", (nArg>1 ? "UPDATE" : "DELETE from"), pConfig->zName @@ -237525,6 +244624,7 @@ static int fts5UpdateMethod( else if( nArg==1 ){ i64 iDel = sqlite3_value_int64(apVal[0]); /* Rowid to delete */ rc = sqlite3Fts5StorageDelete(pTab->pStorage, iDel, 0); + bUpdateOrDelete = 1; } /* INSERT or UPDATE */ @@ -237540,6 +244640,7 @@ static int fts5UpdateMethod( if( eConflict==SQLITE_REPLACE && eType1==SQLITE_INTEGER ){ i64 iNew = sqlite3_value_int64(apVal[1]); /* Rowid to delete */ rc = sqlite3Fts5StorageDelete(pTab->pStorage, iNew, 0); + bUpdateOrDelete = 1; } fts5StorageInsert(&rc, pTab, apVal, pRowid); } @@ -237568,10 +244669,24 @@ static int fts5UpdateMethod( rc = sqlite3Fts5StorageDelete(pTab->pStorage, iOld, 0); fts5StorageInsert(&rc, pTab, apVal, pRowid); } + bUpdateOrDelete = 1; } } } + if( rc==SQLITE_OK + && bUpdateOrDelete + && pConfig->bSecureDelete + && pConfig->iVersion==FTS5_CURRENT_VERSION + ){ + rc = sqlite3Fts5StorageConfigValue( + pTab->pStorage, "version", 0, FTS5_CURRENT_VERSION_SECUREDELETE + ); + if( rc==SQLITE_OK ){ + pConfig->iVersion = FTS5_CURRENT_VERSION_SECUREDELETE; + } + } + pTab->p.pConfig->pzErrmsg = 0; return rc; } @@ -237584,8 +244699,7 @@ static int fts5SyncMethod(sqlite3_vtab *pVtab){ Fts5FullTable *pTab = (Fts5FullTable*)pVtab; fts5CheckTransactionState(pTab, FTS5_SYNC, 0); pTab->p.pConfig->pzErrmsg = &pTab->p.base.zErrMsg; - fts5TripCursors(pTab); - rc = sqlite3Fts5StorageSync(pTab->pStorage); + rc = sqlite3Fts5FlushToDisk(&pTab->p); pTab->p.pConfig->pzErrmsg = 0; return rc; } @@ -238352,6 +245466,12 @@ static int fts5ColumnMethod( sqlite3_result_value(pCtx, sqlite3_column_value(pCsr->pStmt, iCol+1)); } pConfig->pzErrmsg = 0; + }else if( pConfig->bContentlessDelete && sqlite3_vtab_nochange(pCtx) ){ + char *zErr = sqlite3_mprintf("cannot UPDATE a subset of " + "columns on fts5 contentless-delete table: %s", pConfig->zName + ); + sqlite3_result_error(pCtx, zErr, -1); + sqlite3_free(zErr); } return rc; } @@ -238431,6 +245551,7 @@ static int fts5RollbackToMethod(sqlite3_vtab *pVtab, int iSavepoint){ UNUSED_PARAM(iSavepoint); /* Call below is a no-op for NDEBUG builds */ fts5CheckTransactionState(pTab, FTS5_ROLLBACKTO, iSavepoint); fts5TripCursors(pTab); + pTab->p.pConfig->pgsz = 0; return sqlite3Fts5StorageRollback(pTab->pStorage); } @@ -238633,7 +245754,7 @@ static void fts5SourceIdFunc( ){ assert( nArg==0 ); UNUSED_PARAM2(nArg, apUnused); - sqlite3_result_text(pCtx, "fts5: 2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24", -1, SQLITE_TRANSIENT); + sqlite3_result_text(pCtx, "fts5: 2023-09-11 12:01:27 2d3a40c05c49e1a49264912b1a05bc2143ac0e7c3df588276ce80a4cbc9bd1b0", -1, SQLITE_TRANSIENT); } /* @@ -238706,7 +245827,9 @@ static int fts5Init(sqlite3 *db){ } if( rc==SQLITE_OK ){ rc = sqlite3_create_function( - db, "fts5_source_id", 0, SQLITE_UTF8, p, fts5SourceIdFunc, 0, 0 + db, "fts5_source_id", 0, + SQLITE_UTF8|SQLITE_DETERMINISTIC|SQLITE_INNOCUOUS, + p, fts5SourceIdFunc, 0, 0 ); } } @@ -238844,10 +245967,10 @@ static int fts5StorageGetStmt( "INSERT INTO %Q.'%q_content' VALUES(%s)", /* INSERT_CONTENT */ "REPLACE INTO %Q.'%q_content' VALUES(%s)", /* REPLACE_CONTENT */ "DELETE FROM %Q.'%q_content' WHERE id=?", /* DELETE_CONTENT */ - "REPLACE INTO %Q.'%q_docsize' VALUES(?,?)", /* REPLACE_DOCSIZE */ + "REPLACE INTO %Q.'%q_docsize' VALUES(?,?%s)", /* REPLACE_DOCSIZE */ "DELETE FROM %Q.'%q_docsize' WHERE id=?", /* DELETE_DOCSIZE */ - "SELECT sz FROM %Q.'%q_docsize' WHERE id=?", /* LOOKUP_DOCSIZE */ + "SELECT sz%s FROM %Q.'%q_docsize' WHERE id=?", /* LOOKUP_DOCSIZE */ "REPLACE INTO %Q.'%q_config' VALUES(?,?)", /* REPLACE_CONFIG */ "SELECT %s FROM %s AS T", /* SCAN */ @@ -238895,6 +246018,19 @@ static int fts5StorageGetStmt( break; } + case FTS5_STMT_REPLACE_DOCSIZE: + zSql = sqlite3_mprintf(azStmt[eStmt], pC->zDb, pC->zName, + (pC->bContentlessDelete ? ",?" : "") + ); + break; + + case FTS5_STMT_LOOKUP_DOCSIZE: + zSql = sqlite3_mprintf(azStmt[eStmt], + (pC->bContentlessDelete ? ",origin" : ""), + pC->zDb, pC->zName + ); + break; + default: zSql = sqlite3_mprintf(azStmt[eStmt], pC->zDb, pC->zName); break; @@ -239084,9 +246220,11 @@ static int sqlite3Fts5StorageOpen( } if( rc==SQLITE_OK && pConfig->bColumnsize ){ - rc = sqlite3Fts5CreateTable( - pConfig, "docsize", "id INTEGER PRIMARY KEY, sz BLOB", 0, pzErr - ); + const char *zCols = "id INTEGER PRIMARY KEY, sz BLOB"; + if( pConfig->bContentlessDelete ){ + zCols = "id INTEGER PRIMARY KEY, sz BLOB, origin INTEGER"; + } + rc = sqlite3Fts5CreateTable(pConfig, "docsize", zCols, 0, pzErr); } if( rc==SQLITE_OK ){ rc = sqlite3Fts5CreateTable( @@ -239163,7 +246301,7 @@ static int fts5StorageDeleteFromIndex( ){ Fts5Config *pConfig = p->pConfig; sqlite3_stmt *pSeek = 0; /* SELECT to read row iDel from %_data */ - int rc; /* Return code */ + int rc = SQLITE_OK; /* Return code */ int rc2; /* sqlite3_reset() return code */ int iCol; Fts5InsertCtx ctx; @@ -239179,7 +246317,6 @@ static int fts5StorageDeleteFromIndex( ctx.pStorage = p; ctx.iCol = -1; - rc = sqlite3Fts5IndexBeginWrite(p->pIndex, 1, iDel); for(iCol=1; rc==SQLITE_OK && iCol<=pConfig->nCol; iCol++){ if( pConfig->abUnindexed[iCol-1]==0 ){ const char *zText; @@ -239216,6 +246353,37 @@ static int fts5StorageDeleteFromIndex( return rc; } +/* +** This function is called to process a DELETE on a contentless_delete=1 +** table. It adds the tombstone required to delete the entry with rowid +** iDel. If successful, SQLITE_OK is returned. Or, if an error occurs, +** an SQLite error code. +*/ +static int fts5StorageContentlessDelete(Fts5Storage *p, i64 iDel){ + i64 iOrigin = 0; + sqlite3_stmt *pLookup = 0; + int rc = SQLITE_OK; + + assert( p->pConfig->bContentlessDelete ); + assert( p->pConfig->eContent==FTS5_CONTENT_NONE ); + + /* Look up the origin of the document in the %_docsize table. Store + ** this in stack variable iOrigin. */ + rc = fts5StorageGetStmt(p, FTS5_STMT_LOOKUP_DOCSIZE, &pLookup, 0); + if( rc==SQLITE_OK ){ + sqlite3_bind_int64(pLookup, 1, iDel); + if( SQLITE_ROW==sqlite3_step(pLookup) ){ + iOrigin = sqlite3_column_int64(pLookup, 1); + } + rc = sqlite3_reset(pLookup); + } + + if( rc==SQLITE_OK && iOrigin!=0 ){ + rc = sqlite3Fts5IndexContentlessDelete(p->pIndex, iOrigin, iDel); + } + + return rc; +} /* ** Insert a record into the %_docsize table. Specifically, do: @@ -239236,10 +246404,17 @@ static int fts5StorageInsertDocsize( rc = fts5StorageGetStmt(p, FTS5_STMT_REPLACE_DOCSIZE, &pReplace, 0); if( rc==SQLITE_OK ){ sqlite3_bind_int64(pReplace, 1, iRowid); - sqlite3_bind_blob(pReplace, 2, pBuf->p, pBuf->n, SQLITE_STATIC); - sqlite3_step(pReplace); - rc = sqlite3_reset(pReplace); - sqlite3_bind_null(pReplace, 2); + if( p->pConfig->bContentlessDelete ){ + i64 iOrigin = 0; + rc = sqlite3Fts5IndexGetOrigin(p->pIndex, &iOrigin); + sqlite3_bind_int64(pReplace, 3, iOrigin); + } + if( rc==SQLITE_OK ){ + sqlite3_bind_blob(pReplace, 2, pBuf->p, pBuf->n, SQLITE_STATIC); + sqlite3_step(pReplace); + rc = sqlite3_reset(pReplace); + sqlite3_bind_null(pReplace, 2); + } } } return rc; @@ -239303,7 +246478,15 @@ static int sqlite3Fts5StorageDelete(Fts5Storage *p, i64 iDel, sqlite3_value **ap /* Delete the index records */ if( rc==SQLITE_OK ){ - rc = fts5StorageDeleteFromIndex(p, iDel, apVal); + rc = sqlite3Fts5IndexBeginWrite(p->pIndex, 1, iDel); + } + + if( rc==SQLITE_OK ){ + if( p->pConfig->bContentlessDelete ){ + rc = fts5StorageContentlessDelete(p, iDel); + }else{ + rc = fts5StorageDeleteFromIndex(p, iDel, apVal); + } } /* Delete the %_docsize record */ @@ -243371,6 +250554,10 @@ static int stmtConnect( #define STMT_COLUMN_MEM 10 /* SQLITE_STMTSTATUS_MEMUSED */ + (void)pAux; + (void)argc; + (void)argv; + (void)pzErr; rc = sqlite3_declare_vtab(db, "CREATE TABLE x(sql,ncol,ro,busy,nscan,nsort,naidx,nstep," "reprep,run,mem)"); @@ -243490,6 +250677,10 @@ static int stmtFilter( sqlite3_int64 iRowid = 1; StmtRow **ppRow = 0; + (void)idxNum; + (void)idxStr; + (void)argc; + (void)argv; stmtCsrReset(pCur); ppRow = &pCur->pRow; for(p=sqlite3_next_stmt(pCur->db, 0); p; p=sqlite3_next_stmt(pCur->db, p)){ @@ -243545,6 +250736,7 @@ static int stmtBestIndex( sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo ){ + (void)tab; pIdxInfo->estimatedCost = (double)500; pIdxInfo->estimatedRows = 500; return SQLITE_OK; diff --git a/src/sqlite/SQLite-3.40.1/sqlite3.h b/src/sqlite/SQLite-3.43.1/sqlite3.h similarity index 96% rename from src/sqlite/SQLite-3.40.1/sqlite3.h rename to src/sqlite/SQLite-3.43.1/sqlite3.h index 24b916750..b9d069298 100644 --- a/src/sqlite/SQLite-3.40.1/sqlite3.h +++ b/src/sqlite/SQLite-3.43.1/sqlite3.h @@ -146,9 +146,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.40.1" -#define SQLITE_VERSION_NUMBER 3040001 -#define SQLITE_SOURCE_ID "2022-12-28 14:03:47 df5c253c0b3dd24916e4ec7cf77d3db5294cc9fd45ae7b9c5e82ad8197f38a24" +#define SQLITE_VERSION "3.43.1" +#define SQLITE_VERSION_NUMBER 3043001 +#define SQLITE_SOURCE_ID "2023-09-11 12:01:27 2d3a40c05c49e1a49264912b1a05bc2143ac0e7c3df588276ce80a4cbc9bd1b0" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -528,6 +528,7 @@ SQLITE_API int sqlite3_exec( #define SQLITE_IOERR_ROLLBACK_ATOMIC (SQLITE_IOERR | (31<<8)) #define SQLITE_IOERR_DATA (SQLITE_IOERR | (32<<8)) #define SQLITE_IOERR_CORRUPTFS (SQLITE_IOERR | (33<<8)) +#define SQLITE_IOERR_IN_PAGE (SQLITE_IOERR | (34<<8)) #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8)) #define SQLITE_LOCKED_VTAB (SQLITE_LOCKED | (2<<8)) #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8)) @@ -563,6 +564,7 @@ SQLITE_API int sqlite3_exec( #define SQLITE_CONSTRAINT_DATATYPE (SQLITE_CONSTRAINT |(12<<8)) #define SQLITE_NOTICE_RECOVER_WAL (SQLITE_NOTICE | (1<<8)) #define SQLITE_NOTICE_RECOVER_ROLLBACK (SQLITE_NOTICE | (2<<8)) +#define SQLITE_NOTICE_RBU (SQLITE_NOTICE | (3<<8)) #define SQLITE_WARNING_AUTOINDEX (SQLITE_WARNING | (1<<8)) #define SQLITE_AUTH_USER (SQLITE_AUTH | (1<<8)) #define SQLITE_OK_LOAD_PERMANENTLY (SQLITE_OK | (1<<8)) @@ -1175,7 +1177,6 @@ struct sqlite3_io_methods { ** in wal mode after the client has finished copying pages from the wal ** file to the database file, but before the *-shm file is updated to ** record the fact that the pages have been checkpointed. -** ** **
  • [[SQLITE_FCNTL_EXTERNAL_READER]] ** The EXPERIMENTAL [SQLITE_FCNTL_EXTERNAL_READER] opcode is used to detect @@ -1188,16 +1189,16 @@ struct sqlite3_io_methods { ** the database is not a wal-mode db, or if there is no such connection in any ** other process. This opcode cannot be used to detect transactions opened ** by clients within the current process, only within other processes. -** ** **
  • [[SQLITE_FCNTL_CKSM_FILE]] -** Used by the cksmvfs VFS module only. +** The [SQLITE_FCNTL_CKSM_FILE] opcode is for use internally by the +** [checksum VFS shim] only. ** **
  • [[SQLITE_FCNTL_RESET_CACHE]] ** If there is currently no transaction open on the database, and the -** database is not a temp db, then this file-control purges the contents -** of the in-memory page cache. If there is an open transaction, or if -** the db is a temp-db, it is a no-op, not an error. +** database is not a temp db, then the [SQLITE_FCNTL_RESET_CACHE] file-control +** purges the contents of the in-memory page cache. If there is an open +** transaction, or if the db is a temp-db, this opcode is a no-op, not an error. ** */ #define SQLITE_FCNTL_LOCKSTATE 1 @@ -1655,20 +1656,23 @@ SQLITE_API int sqlite3_os_end(void); ** must ensure that no other SQLite interfaces are invoked by other ** threads while sqlite3_config() is running. ** -** The sqlite3_config() interface -** may only be invoked prior to library initialization using -** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()]. -** ^If sqlite3_config() is called after [sqlite3_initialize()] and before -** [sqlite3_shutdown()] then it will return SQLITE_MISUSE. -** Note, however, that ^sqlite3_config() can be called as part of the -** implementation of an application-defined [sqlite3_os_init()]. -** ** The first argument to sqlite3_config() is an integer ** [configuration option] that determines ** what property of SQLite is to be configured. Subsequent arguments ** vary depending on the [configuration option] ** in the first argument. ** +** For most configuration options, the sqlite3_config() interface +** may only be invoked prior to library initialization using +** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()]. +** The exceptional configuration options that may be invoked at any time +** are called "anytime configuration options". +** ^If sqlite3_config() is called after [sqlite3_initialize()] and before +** [sqlite3_shutdown()] with a first argument that is not an anytime +** configuration option, then the sqlite3_config() call will return SQLITE_MISUSE. +** Note, however, that ^sqlite3_config() can be called as part of the +** implementation of an application-defined [sqlite3_os_init()]. +** ** ^When a configuration option is set, sqlite3_config() returns [SQLITE_OK]. ** ^If the option is unknown or SQLite is unable to set the option ** then this routine returns a non-zero [error code]. @@ -1776,6 +1780,23 @@ struct sqlite3_mem_methods { ** These constants are the available integer configuration options that ** can be passed as the first argument to the [sqlite3_config()] interface. ** +** Most of the configuration options for sqlite3_config() +** will only work if invoked prior to [sqlite3_initialize()] or after +** [sqlite3_shutdown()]. The few exceptions to this rule are called +** "anytime configuration options". +** ^Calling [sqlite3_config()] with a first argument that is not an +** anytime configuration option in between calls to [sqlite3_initialize()] and +** [sqlite3_shutdown()] is a no-op that returns SQLITE_MISUSE. +** +** The set of anytime configuration options can change (by insertions +** and/or deletions) from one release of SQLite to the next. +** As of SQLite version 3.42.0, the complete set of anytime configuration +** options is: +**
      +**
    • SQLITE_CONFIG_LOG +**
    • SQLITE_CONFIG_PCACHE_HDRSZ +**
    +** ** New configuration options may be added in future releases of SQLite. ** Existing configuration options might be discontinued. Applications ** should check the return code from [sqlite3_config()] to make sure that @@ -2122,28 +2143,28 @@ struct sqlite3_mem_methods { ** compile-time option is not set, then the default maximum is 1073741824. ** */ -#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ -#define SQLITE_CONFIG_MULTITHREAD 2 /* nil */ -#define SQLITE_CONFIG_SERIALIZED 3 /* nil */ -#define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */ -#define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */ -#define SQLITE_CONFIG_SCRATCH 6 /* No longer used */ -#define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */ -#define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */ -#define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */ -#define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */ -#define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */ -/* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */ -#define SQLITE_CONFIG_LOOKASIDE 13 /* int int */ -#define SQLITE_CONFIG_PCACHE 14 /* no-op */ -#define SQLITE_CONFIG_GETPCACHE 15 /* no-op */ -#define SQLITE_CONFIG_LOG 16 /* xFunc, void* */ -#define SQLITE_CONFIG_URI 17 /* int */ -#define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */ -#define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */ +#define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */ +#define SQLITE_CONFIG_MULTITHREAD 2 /* nil */ +#define SQLITE_CONFIG_SERIALIZED 3 /* nil */ +#define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */ +#define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */ +#define SQLITE_CONFIG_SCRATCH 6 /* No longer used */ +#define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */ +#define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */ +#define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */ +#define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */ +#define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */ +/* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */ +#define SQLITE_CONFIG_LOOKASIDE 13 /* int int */ +#define SQLITE_CONFIG_PCACHE 14 /* no-op */ +#define SQLITE_CONFIG_GETPCACHE 15 /* no-op */ +#define SQLITE_CONFIG_LOG 16 /* xFunc, void* */ +#define SQLITE_CONFIG_URI 17 /* int */ +#define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */ +#define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */ #define SQLITE_CONFIG_COVERING_INDEX_SCAN 20 /* int */ -#define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */ -#define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */ +#define SQLITE_CONFIG_SQLLOG 21 /* xSqllog, void* */ +#define SQLITE_CONFIG_MMAP_SIZE 22 /* sqlite3_int64, sqlite3_int64 */ #define SQLITE_CONFIG_WIN32_HEAPSIZE 23 /* int nByte */ #define SQLITE_CONFIG_PCACHE_HDRSZ 24 /* int *psz */ #define SQLITE_CONFIG_PMASZ 25 /* unsigned int szPma */ @@ -2184,7 +2205,7 @@ struct sqlite3_mem_methods { ** configuration for a database connection can only be changed when that ** connection is not currently using lookaside memory, or in other words ** when the "current value" returned by -** [sqlite3_db_status](D,[SQLITE_CONFIG_LOOKASIDE],...) is zero. +** [sqlite3_db_status](D,[SQLITE_DBSTATUS_LOOKASIDE_USED],...) is zero. ** Any attempt to change the lookaside memory configuration when lookaside ** memory is in use leaves the configuration unchanged and returns ** [SQLITE_BUSY].)^ @@ -2334,8 +2355,12 @@ struct sqlite3_mem_methods { **
  • sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0); ** ** Because resetting a database is destructive and irreversible, the -** process requires the use of this obscure API and multiple steps to help -** ensure that it does not happen by accident. +** process requires the use of this obscure API and multiple steps to +** help ensure that it does not happen by accident. Because this +** feature must be capable of resetting corrupt databases, and +** shutting down virtual tables may require access to that corrupt +** storage, the library must abandon any installed virtual tables +** without calling their xDestroy() methods. ** ** [[SQLITE_DBCONFIG_DEFENSIVE]]
    SQLITE_DBCONFIG_DEFENSIVE
    **
    The SQLITE_DBCONFIG_DEFENSIVE option activates or deactivates the @@ -2374,7 +2399,7 @@ struct sqlite3_mem_methods { **
    ** ** [[SQLITE_DBCONFIG_DQS_DML]] -**
    SQLITE_DBCONFIG_DQS_DML +**
    SQLITE_DBCONFIG_DQS_DML
    **
    The SQLITE_DBCONFIG_DQS_DML option activates or deactivates ** the legacy [double-quoted string literal] misfeature for DML statements ** only, that is DELETE, INSERT, SELECT, and UPDATE statements. The @@ -2383,7 +2408,7 @@ struct sqlite3_mem_methods { **
    ** ** [[SQLITE_DBCONFIG_DQS_DDL]] -**
    SQLITE_DBCONFIG_DQS_DDL +**
    SQLITE_DBCONFIG_DQS_DDL
    **
    The SQLITE_DBCONFIG_DQS option activates or deactivates ** the legacy [double-quoted string literal] misfeature for DDL statements, ** such as CREATE TABLE and CREATE INDEX. The @@ -2392,7 +2417,7 @@ struct sqlite3_mem_methods { **
    ** ** [[SQLITE_DBCONFIG_TRUSTED_SCHEMA]] -**
    SQLITE_DBCONFIG_TRUSTED_SCHEMA +**
    SQLITE_DBCONFIG_TRUSTED_SCHEMA
    **
    The SQLITE_DBCONFIG_TRUSTED_SCHEMA option tells SQLite to ** assume that database schemas are untainted by malicious content. ** When the SQLITE_DBCONFIG_TRUSTED_SCHEMA option is disabled, SQLite @@ -2412,7 +2437,7 @@ struct sqlite3_mem_methods { **
    ** ** [[SQLITE_DBCONFIG_LEGACY_FILE_FORMAT]] -**
    SQLITE_DBCONFIG_LEGACY_FILE_FORMAT +**
    SQLITE_DBCONFIG_LEGACY_FILE_FORMAT
    **
    The SQLITE_DBCONFIG_LEGACY_FILE_FORMAT option activates or deactivates ** the legacy file format flag. When activated, this flag causes all newly ** created database file to have a schema format version number (the 4-byte @@ -2421,7 +2446,7 @@ struct sqlite3_mem_methods { ** any SQLite version back to 3.0.0 ([dateof:3.0.0]). Without this setting, ** newly created databases are generally not understandable by SQLite versions ** prior to 3.3.0 ([dateof:3.3.0]). As these words are written, there -** is now scarcely any need to generated database files that are compatible +** is now scarcely any need to generate database files that are compatible ** all the way back to version 3.0.0, and so this setting is of little ** practical use, but is provided so that SQLite can continue to claim the ** ability to generate new database files that are compatible with version @@ -2430,8 +2455,40 @@ struct sqlite3_mem_methods { ** the [VACUUM] command will fail with an obscure error when attempting to ** process a table with generated columns and a descending index. This is ** not considered a bug since SQLite versions 3.3.0 and earlier do not support -** either generated columns or decending indexes. +** either generated columns or descending indexes. +**
    +** +** [[SQLITE_DBCONFIG_STMT_SCANSTATUS]] +**
    SQLITE_DBCONFIG_STMT_SCANSTATUS
    +**
    The SQLITE_DBCONFIG_STMT_SCANSTATUS option is only useful in +** SQLITE_ENABLE_STMT_SCANSTATUS builds. In this case, it sets or clears +** a flag that enables collection of the sqlite3_stmt_scanstatus_v2() +** statistics. For statistics to be collected, the flag must be set on +** the database handle both when the SQL statement is prepared and when it +** is stepped. The flag is set (collection of statistics is enabled) +** by default. This option takes two arguments: an integer and a pointer to +** an integer.. The first argument is 1, 0, or -1 to enable, disable, or +** leave unchanged the statement scanstatus option. If the second argument +** is not NULL, then the value of the statement scanstatus setting after +** processing the first argument is written into the integer that the second +** argument points to. +**
    +** +** [[SQLITE_DBCONFIG_REVERSE_SCANORDER]] +**
    SQLITE_DBCONFIG_REVERSE_SCANORDER
    +**
    The SQLITE_DBCONFIG_REVERSE_SCANORDER option changes the default order +** in which tables and indexes are scanned so that the scans start at the end +** and work toward the beginning rather than starting at the beginning and +** working toward the end. Setting SQLITE_DBCONFIG_REVERSE_SCANORDER is the +** same as setting [PRAGMA reverse_unordered_selects]. This option takes +** two arguments which are an integer and a pointer to an integer. The first +** argument is 1, 0, or -1 to enable, disable, or leave unchanged the +** reverse scan order flag, respectively. If the second argument is not NULL, +** then 0 or 1 is written into the integer that the second argument points to +** depending on if the reverse scan order flag is set after processing the +** first argument. **
    +** ** */ #define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */ @@ -2452,7 +2509,9 @@ struct sqlite3_mem_methods { #define SQLITE_DBCONFIG_ENABLE_VIEW 1015 /* int int* */ #define SQLITE_DBCONFIG_LEGACY_FILE_FORMAT 1016 /* int int* */ #define SQLITE_DBCONFIG_TRUSTED_SCHEMA 1017 /* int int* */ -#define SQLITE_DBCONFIG_MAX 1017 /* Largest DBCONFIG */ +#define SQLITE_DBCONFIG_STMT_SCANSTATUS 1018 /* int int* */ +#define SQLITE_DBCONFIG_REVERSE_SCANORDER 1019 /* int int* */ +#define SQLITE_DBCONFIG_MAX 1019 /* Largest DBCONFIG */ /* ** CAPI3REF: Enable Or Disable Extended Result Codes @@ -2674,8 +2733,13 @@ SQLITE_API sqlite3_int64 sqlite3_total_changes64(sqlite3*); ** ^A call to sqlite3_interrupt(D) that occurs when there are no running ** SQL statements is a no-op and has no effect on SQL statements ** that are started after the sqlite3_interrupt() call returns. +** +** ^The [sqlite3_is_interrupted(D)] interface can be used to determine whether +** or not an interrupt is currently in effect for [database connection] D. +** It returns 1 if an interrupt is currently in effect, or 0 otherwise. */ SQLITE_API void sqlite3_interrupt(sqlite3*); +SQLITE_API int sqlite3_is_interrupted(sqlite3*); /* ** CAPI3REF: Determine If An SQL Statement Is Complete @@ -3293,8 +3357,8 @@ SQLITE_API SQLITE_DEPRECATED void *sqlite3_profile(sqlite3*, **
    ^An SQLITE_TRACE_PROFILE callback provides approximately the same ** information as is provided by the [sqlite3_profile()] callback. ** ^The P argument is a pointer to the [prepared statement] and the -** X argument points to a 64-bit integer which is the estimated of -** the number of nanosecond that the prepared statement took to run. +** X argument points to a 64-bit integer which is approximately +** the number of nanoseconds that the prepared statement took to run. ** ^The SQLITE_TRACE_PROFILE callback is invoked when the statement finishes. ** ** [[SQLITE_TRACE_ROW]]
    SQLITE_TRACE_ROW
    @@ -3326,8 +3390,10 @@ SQLITE_API SQLITE_DEPRECATED void *sqlite3_profile(sqlite3*, ** M argument should be the bitwise OR-ed combination of ** zero or more [SQLITE_TRACE] constants. ** -** ^Each call to either sqlite3_trace() or sqlite3_trace_v2() overrides -** (cancels) any prior calls to sqlite3_trace() or sqlite3_trace_v2(). +** ^Each call to either sqlite3_trace(D,X,P) or sqlite3_trace_v2(D,M,X,P) +** overrides (cancels) all prior calls to sqlite3_trace(D,X,P) or +** sqlite3_trace_v2(D,M,X,P) for the [database connection] D. Each +** database connection may have at most one trace callback. ** ** ^The X callback is invoked whenever any of the events identified by ** mask M occur. ^The integer return value from the callback is currently @@ -3357,7 +3423,7 @@ SQLITE_API int sqlite3_trace_v2( ** ** ^The sqlite3_progress_handler(D,N,X,P) interface causes the callback ** function X to be invoked periodically during long running calls to -** [sqlite3_exec()], [sqlite3_step()] and [sqlite3_get_table()] for +** [sqlite3_step()] and [sqlite3_prepare()] and similar for ** database connection D. An example use for this ** interface is to keep a GUI updated during a large query. ** @@ -3382,6 +3448,13 @@ SQLITE_API int sqlite3_trace_v2( ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their ** database connections for the meaning of "modify" in this paragraph. ** +** The progress handler callback would originally only be invoked from the +** bytecode engine. It still might be invoked during [sqlite3_prepare()] +** and similar because those routines might force a reparse of the schema +** which involves running the bytecode engine. However, beginning with +** SQLite version 3.41.0, the progress handler callback might also be +** invoked directly from [sqlite3_prepare()] while analyzing and generating +** code for complex queries. */ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); @@ -3418,13 +3491,18 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*); ** **
    ** ^(
    [SQLITE_OPEN_READONLY]
    -**
    The database is opened in read-only mode. If the database does not -** already exist, an error is returned.
    )^ +**
    The database is opened in read-only mode. If the database does +** not already exist, an error is returned.
    )^ ** ** ^(
    [SQLITE_OPEN_READWRITE]
    -**
    The database is opened for reading and writing if possible, or reading -** only if the file is write protected by the operating system. In either -** case the database must already exist, otherwise an error is returned.
    )^ +**
    The database is opened for reading and writing if possible, or +** reading only if the file is write protected by the operating +** system. In either case the database must already exist, otherwise +** an error is returned. For historical reasons, if opening in +** read-write mode fails due to OS-level permissions, an attempt is +** made to open it in read-only mode. [sqlite3_db_readonly()] can be +** used to determine whether the database is actually +** read-write.
    )^ ** ** ^(
    [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]
    **
    The database is opened for reading and writing, and is created if @@ -3684,7 +3762,7 @@ SQLITE_API int sqlite3_open_v2( ** as F) must be one of: **
      **
    • A database filename pointer created by the SQLite core and -** passed into the xOpen() method of a VFS implemention, or +** passed into the xOpen() method of a VFS implementation, or **
    • A filename obtained from [sqlite3_db_filename()], or **
    • A new filename constructed using [sqlite3_create_filename()]. **
    @@ -3797,7 +3875,7 @@ SQLITE_API sqlite3_file *sqlite3_database_file_object(const char*); /* ** CAPI3REF: Create and Destroy VFS Filenames ** -** These interfces are provided for use by [VFS shim] implementations and +** These interfaces are provided for use by [VFS shim] implementations and ** are not useful outside of that context. ** ** The sqlite3_create_filename(D,J,W,N,P) allocates memory to hold a version of @@ -4344,6 +4422,41 @@ SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt); */ SQLITE_API int sqlite3_stmt_isexplain(sqlite3_stmt *pStmt); +/* +** CAPI3REF: Change The EXPLAIN Setting For A Prepared Statement +** METHOD: sqlite3_stmt +** +** The sqlite3_stmt_explain(S,E) interface changes the EXPLAIN +** setting for [prepared statement] S. If E is zero, then S becomes +** a normal prepared statement. If E is 1, then S behaves as if +** its SQL text began with "[EXPLAIN]". If E is 2, then S behaves as if +** its SQL text began with "[EXPLAIN QUERY PLAN]". +** +** Calling sqlite3_stmt_explain(S,E) might cause S to be reprepared. +** SQLite tries to avoid a reprepare, but a reprepare might be necessary +** on the first transition into EXPLAIN or EXPLAIN QUERY PLAN mode. +** +** Because of the potential need to reprepare, a call to +** sqlite3_stmt_explain(S,E) will fail with SQLITE_ERROR if S cannot be +** reprepared because it was created using [sqlite3_prepare()] instead of +** the newer [sqlite3_prepare_v2()] or [sqlite3_prepare_v3()] interfaces and +** hence has no saved SQL text with which to reprepare. +** +** Changing the explain setting for a prepared statement does not change +** the original SQL text for the statement. Hence, if the SQL text originally +** began with EXPLAIN or EXPLAIN QUERY PLAN, but sqlite3_stmt_explain(S,0) +** is called to convert the statement into an ordinary statement, the EXPLAIN +** or EXPLAIN QUERY PLAN keywords will still appear in the sqlite3_sql(S) +** output, even though the statement now acts like a normal SQL statement. +** +** This routine returns SQLITE_OK if the explain mode is successfully +** changed, or an error code if the explain mode could not be changed. +** The explain mode cannot be changed while a statement is active. +** Hence, it is good practice to call [sqlite3_reset(S)] +** immediately prior to calling sqlite3_stmt_explain(S,E). +*/ +SQLITE_API int sqlite3_stmt_explain(sqlite3_stmt *pStmt, int eMode); + /* ** CAPI3REF: Determine If A Prepared Statement Has Been Reset ** METHOD: sqlite3_stmt @@ -4507,7 +4620,7 @@ typedef struct sqlite3_context sqlite3_context; ** with it may be passed. ^It is called to dispose of the BLOB or string even ** if the call to the bind API fails, except the destructor is not called if ** the third parameter is a NULL pointer or the fourth parameter is negative. -** ^ (2) The special constant, [SQLITE_STATIC], may be passsed to indicate that +** ^ (2) The special constant, [SQLITE_STATIC], may be passed to indicate that ** the application remains responsible for disposing of the object. ^In this ** case, the object and the provided pointer to it must remain valid until ** either the prepared statement is finalized or the same SQL parameter is @@ -5186,14 +5299,26 @@ SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt); ** ^The [sqlite3_reset(S)] interface resets the [prepared statement] S ** back to the beginning of its program. ** -** ^If the most recent call to [sqlite3_step(S)] for the -** [prepared statement] S returned [SQLITE_ROW] or [SQLITE_DONE], -** or if [sqlite3_step(S)] has never before been called on S, -** then [sqlite3_reset(S)] returns [SQLITE_OK]. +** ^The return code from [sqlite3_reset(S)] indicates whether or not +** the previous evaluation of prepared statement S completed successfully. +** ^If [sqlite3_step(S)] has never before been called on S or if +** [sqlite3_step(S)] has not been called since the previous call +** to [sqlite3_reset(S)], then [sqlite3_reset(S)] will return +** [SQLITE_OK]. ** ** ^If the most recent call to [sqlite3_step(S)] for the ** [prepared statement] S indicated an error, then ** [sqlite3_reset(S)] returns an appropriate [error code]. +** ^The [sqlite3_reset(S)] interface might also return an [error code] +** if there were no prior errors but the process of resetting +** the prepared statement caused a new error. ^For example, if an +** [INSERT] statement with a [RETURNING] clause is only stepped one time, +** that one call to [sqlite3_step(S)] might return SQLITE_ROW but +** the overall statement might still fail and the [sqlite3_reset(S)] call +** might return SQLITE_BUSY if locking constraints prevent the +** database change from committing. Therefore, it is important that +** applications check the return code from [sqlite3_reset(S)] even if +** no prior call to [sqlite3_step(S)] indicated a problem. ** ** ^The [sqlite3_reset(S)] interface does not change the values ** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S. @@ -5405,10 +5530,21 @@ SQLITE_API int sqlite3_create_window_function( ** from top-level SQL, and cannot be used in VIEWs or TRIGGERs nor in ** schema structures such as [CHECK constraints], [DEFAULT clauses], ** [expression indexes], [partial indexes], or [generated columns]. -** The SQLITE_DIRECTONLY flags is a security feature which is recommended -** for all [application-defined SQL functions], and especially for functions -** that have side-effects or that could potentially leak sensitive -** information. +**

    +** The SQLITE_DIRECTONLY flag is recommended for any +** [application-defined SQL function] +** that has side-effects or that could potentially leak sensitive information. +** This will prevent attacks in which an application is tricked +** into using a database file that has had its schema surreptitiously +** modified to invoke the application-defined function in ways that are +** harmful. +**

    +** Some people say it is good practice to set SQLITE_DIRECTONLY on all +** [application-defined SQL functions], regardless of whether or not they +** are security sensitive, as doing so prevents those functions from being used +** inside of the database schema, and thus ensures that the database +** can be inspected and modified using generic tools (such as the [CLI]) +** that do not have access to the application-defined functions. **

    ** ** [[SQLITE_INNOCUOUS]]
    SQLITE_INNOCUOUS
    @@ -5549,16 +5685,6 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** then the conversion is performed. Otherwise no conversion occurs. ** The [SQLITE_INTEGER | datatype] after conversion is returned.)^ ** -** ^(The sqlite3_value_encoding(X) interface returns one of [SQLITE_UTF8], -** [SQLITE_UTF16BE], or [SQLITE_UTF16LE] according to the current encoding -** of the value X, assuming that X has type TEXT.)^ If sqlite3_value_type(X) -** returns something other than SQLITE_TEXT, then the return value from -** sqlite3_value_encoding(X) is meaningless. ^Calls to -** sqlite3_value_text(X), sqlite3_value_text16(X), sqlite3_value_text16be(X), -** sqlite3_value_text16le(X), sqlite3_value_bytes(X), or -** sqlite3_value_bytes16(X) might change the encoding of the value X and -** thus change the return from subsequent calls to sqlite3_value_encoding(X). -** ** ^Within the [xUpdate] method of a [virtual table], the ** sqlite3_value_nochange(X) interface returns true if and only if ** the column corresponding to X is unchanged by the UPDATE operation @@ -5623,6 +5749,27 @@ SQLITE_API int sqlite3_value_type(sqlite3_value*); SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*); SQLITE_API int sqlite3_value_nochange(sqlite3_value*); SQLITE_API int sqlite3_value_frombind(sqlite3_value*); + +/* +** CAPI3REF: Report the internal text encoding state of an sqlite3_value object +** METHOD: sqlite3_value +** +** ^(The sqlite3_value_encoding(X) interface returns one of [SQLITE_UTF8], +** [SQLITE_UTF16BE], or [SQLITE_UTF16LE] according to the current text encoding +** of the value X, assuming that X has type TEXT.)^ If sqlite3_value_type(X) +** returns something other than SQLITE_TEXT, then the return value from +** sqlite3_value_encoding(X) is meaningless. ^Calls to +** [sqlite3_value_text(X)], [sqlite3_value_text16(X)], [sqlite3_value_text16be(X)], +** [sqlite3_value_text16le(X)], [sqlite3_value_bytes(X)], or +** [sqlite3_value_bytes16(X)] might change the encoding of the value X and +** thus change the return from subsequent calls to sqlite3_value_encoding(X). +** +** This routine is intended for used by applications that test and validate +** the SQLite implementation. This routine is inquiring about the opaque +** internal state of an [sqlite3_value] object. Ordinary applications should +** not need to know what the internal state of an sqlite3_value object is and +** hence should not need to use this interface. +*/ SQLITE_API int sqlite3_value_encoding(sqlite3_value*); /* @@ -6159,6 +6306,13 @@ SQLITE_API void sqlite3_activate_cerod( ** of the default VFS is not implemented correctly, or not implemented at ** all, then the behavior of sqlite3_sleep() may deviate from the description ** in the previous paragraphs. +** +** If a negative argument is passed to sqlite3_sleep() the results vary by +** VFS and operating system. Some system treat a negative argument as an +** instruction to sleep forever. Others understand it to mean do not sleep +** at all. ^In SQLite version 3.42.0 and later, a negative +** argument passed into sqlite3_sleep() is changed to zero before it is relayed +** down into the xSleep method of the VFS. */ SQLITE_API int sqlite3_sleep(int); @@ -7003,15 +7157,6 @@ SQLITE_API int sqlite3_cancel_auto_extension(void(*xEntryPoint)(void)); */ SQLITE_API void sqlite3_reset_auto_extension(void); -/* -** The interface to the virtual-table mechanism is currently considered -** to be experimental. The interface might change in incompatible ways. -** If this is a problem for you, do not use the interface at this time. -** -** When the virtual-table mechanism stabilizes, we will declare the -** interface fixed, support it indefinitely, and remove this comment. -*/ - /* ** Structures used by the virtual table interface */ @@ -7130,10 +7275,10 @@ struct sqlite3_module { ** when the omit flag is true there is no guarantee that the constraint will ** not be checked again using byte code.)^ ** -** ^The idxNum and idxPtr values are recorded and passed into the +** ^The idxNum and idxStr values are recorded and passed into the ** [xFilter] method. -** ^[sqlite3_free()] is used to free idxPtr if and only if -** needToFreeIdxPtr is true. +** ^[sqlite3_free()] is used to free idxStr if and only if +** needToFreeIdxStr is true. ** ** ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in ** the correct order to satisfy the ORDER BY clause so that no separate @@ -7253,7 +7398,7 @@ struct sqlite3_index_info { ** the [sqlite3_vtab_collation()] interface. For most real-world virtual ** tables, the collating sequence of constraints does not matter (for example ** because the constraints are numeric) and so the sqlite3_vtab_collation() -** interface is no commonly needed. +** interface is not commonly needed. */ #define SQLITE_INDEX_CONSTRAINT_EQ 2 #define SQLITE_INDEX_CONSTRAINT_GT 4 @@ -7412,16 +7557,6 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3*, const char *zSQL); */ SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg); -/* -** The interface to the virtual-table mechanism defined above (back up -** to a comment remarkably similar to this one) is currently considered -** to be experimental. The interface might change in incompatible ways. -** If this is a problem for you, do not use the interface at this time. -** -** When the virtual-table mechanism stabilizes, we will declare the -** interface fixed, support it indefinitely, and remove this comment. -*/ - /* ** CAPI3REF: A Handle To An Open BLOB ** KEYWORDS: {BLOB handle} {BLOB handles} @@ -7805,9 +7940,9 @@ SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*); ** is undefined if the mutex is not currently entered by the ** calling thread or is not currently allocated. ** -** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or -** sqlite3_mutex_leave() is a NULL pointer, then all three routines -** behave as no-ops. +** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), +** sqlite3_mutex_leave(), or sqlite3_mutex_free() is a NULL pointer, +** then any of the four routines behaves as a no-op. ** ** See also: [sqlite3_mutex_held()] and [sqlite3_mutex_notheld()]. */ @@ -8077,7 +8212,8 @@ SQLITE_API int sqlite3_test_control(int op, ...); #define SQLITE_TESTCTRL_TRACEFLAGS 31 #define SQLITE_TESTCTRL_TUNE 32 #define SQLITE_TESTCTRL_LOGEST 33 -#define SQLITE_TESTCTRL_LAST 33 /* Largest TESTCTRL */ +#define SQLITE_TESTCTRL_USELONGDOUBLE 34 +#define SQLITE_TESTCTRL_LAST 34 /* Largest TESTCTRL */ /* ** CAPI3REF: SQL Keyword Checking @@ -9109,8 +9245,8 @@ SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p); ** blocked connection already has a registered unlock-notify callback, ** then the new callback replaces the old.)^ ^If sqlite3_unlock_notify() is ** called with a NULL pointer as its second argument, then any existing -** unlock-notify callback is canceled. ^The blocked connections -** unlock-notify callback may also be canceled by closing the blocked +** unlock-notify callback is cancelled. ^The blocked connections +** unlock-notify callback may also be cancelled by closing the blocked ** connection using [sqlite3_close()]. ** ** The unlock-notify callback is not reentrant. If an application invokes @@ -9533,7 +9669,7 @@ SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...); ** [[SQLITE_VTAB_DIRECTONLY]]
    SQLITE_VTAB_DIRECTONLY
    **
    Calls of the form ** [sqlite3_vtab_config](db,SQLITE_VTAB_DIRECTONLY) from within the -** the [xConnect] or [xCreate] methods of a [virtual table] implmentation +** the [xConnect] or [xCreate] methods of a [virtual table] implementation ** prohibits that virtual table from being used from within triggers and ** views. **
    @@ -9541,18 +9677,28 @@ SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...); ** [[SQLITE_VTAB_INNOCUOUS]]
    SQLITE_VTAB_INNOCUOUS
    **
    Calls of the form ** [sqlite3_vtab_config](db,SQLITE_VTAB_INNOCUOUS) from within the -** the [xConnect] or [xCreate] methods of a [virtual table] implmentation +** the [xConnect] or [xCreate] methods of a [virtual table] implementation ** identify that virtual table as being safe to use from within triggers ** and views. Conceptually, the SQLITE_VTAB_INNOCUOUS tag means that the ** virtual table can do no serious harm even if it is controlled by a ** malicious hacker. Developers should avoid setting the SQLITE_VTAB_INNOCUOUS ** flag unless absolutely necessary. **
    +** +** [[SQLITE_VTAB_USES_ALL_SCHEMAS]]
    SQLITE_VTAB_USES_ALL_SCHEMAS
    +**
    Calls of the form +** [sqlite3_vtab_config](db,SQLITE_VTAB_USES_ALL_SCHEMA) from within the +** the [xConnect] or [xCreate] methods of a [virtual table] implementation +** instruct the query planner to begin at least a read transaction on +** all schemas ("main", "temp", and any ATTACH-ed databases) whenever the +** virtual table is used. +**
    **
    */ #define SQLITE_VTAB_CONSTRAINT_SUPPORT 1 #define SQLITE_VTAB_INNOCUOUS 2 #define SQLITE_VTAB_DIRECTONLY 3 +#define SQLITE_VTAB_USES_ALL_SCHEMAS 4 /* ** CAPI3REF: Determine The Virtual Table Conflict Policy @@ -9625,7 +9771,7 @@ SQLITE_API int sqlite3_vtab_nochange(sqlite3_context*); **
  • Otherwise, "BINARY" is returned. ** */ -SQLITE_API SQLITE_EXPERIMENTAL const char *sqlite3_vtab_collation(sqlite3_index_info*,int); +SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info*,int); /* ** CAPI3REF: Determine if a virtual table query is DISTINCT @@ -9713,7 +9859,7 @@ SQLITE_API int sqlite3_vtab_distinct(sqlite3_index_info*); ** communicated to the xBestIndex method as a ** [SQLITE_INDEX_CONSTRAINT_EQ] constraint.)^ If xBestIndex wants to use ** this constraint, it must set the corresponding -** aConstraintUsage[].argvIndex to a postive integer. ^(Then, under +** aConstraintUsage[].argvIndex to a positive integer. ^(Then, under ** the usual mode of handling IN operators, SQLite generates [bytecode] ** that invokes the [xFilter|xFilter() method] once for each value ** on the right-hand side of the IN operator.)^ Thus the virtual table @@ -9782,21 +9928,20 @@ SQLITE_API int sqlite3_vtab_in(sqlite3_index_info*, int iCons, int bHandle); ** is undefined and probably harmful. ** ** The X parameter in a call to sqlite3_vtab_in_first(X,P) or -** sqlite3_vtab_in_next(X,P) must be one of the parameters to the +** sqlite3_vtab_in_next(X,P) should be one of the parameters to the ** xFilter method which invokes these routines, and specifically ** a parameter that was previously selected for all-at-once IN constraint ** processing use the [sqlite3_vtab_in()] interface in the ** [xBestIndex|xBestIndex method]. ^(If the X parameter is not ** an xFilter argument that was selected for all-at-once IN constraint -** processing, then these routines return [SQLITE_MISUSE])^ or perhaps -** exhibit some other undefined or harmful behavior. +** processing, then these routines return [SQLITE_ERROR].)^ ** ** ^(Use these routines to access all values on the right-hand side ** of the IN constraint using code like the following: ** **

     **    for(rc=sqlite3_vtab_in_first(pList, &pVal);
    -**        rc==SQLITE_OK && pVal
    +**        rc==SQLITE_OK && pVal;
     **        rc=sqlite3_vtab_in_next(pList, &pVal)
     **    ){
     **      // do something with pVal
    @@ -9894,6 +10039,10 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value **
     ** managed by the prepared statement S and will be automatically freed when
     ** S is finalized.
     **
    +** Not all values are available for all query elements. When a value is
    +** not available, the output variable is set to -1 if the value is numeric,
    +** or to NULL if it is a string (SQLITE_SCANSTAT_NAME).
    +**
     ** 
    ** [[SQLITE_SCANSTAT_NLOOP]]
    SQLITE_SCANSTAT_NLOOP
    **
    ^The [sqlite3_int64] variable pointed to by the V parameter will be @@ -9921,12 +10070,24 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value ** ** to a zero-terminated UTF-8 string containing the [EXPLAIN QUERY PLAN] ** description for the X-th loop. ** -** [[SQLITE_SCANSTAT_SELECTID]]
    SQLITE_SCANSTAT_SELECT
    +** [[SQLITE_SCANSTAT_SELECTID]]
    SQLITE_SCANSTAT_SELECTID
    **
    ^The "int" variable pointed to by the V parameter will be set to the -** "select-id" for the X-th loop. The select-id identifies which query or -** subquery the loop is part of. The main query has a select-id of zero. -** The select-id is the same value as is output in the first column -** of an [EXPLAIN QUERY PLAN] query. +** id for the X-th query plan element. The id value is unique within the +** statement. The select-id is the same value as is output in the first +** column of an [EXPLAIN QUERY PLAN] query. +** +** [[SQLITE_SCANSTAT_PARENTID]]
    SQLITE_SCANSTAT_PARENTID
    +**
    The "int" variable pointed to by the V parameter will be set to the +** the id of the parent of the current query element, if applicable, or +** to zero if the query element has no parent. This is the same value as +** returned in the second column of an [EXPLAIN QUERY PLAN] query. +** +** [[SQLITE_SCANSTAT_NCYCLE]]
    SQLITE_SCANSTAT_NCYCLE
    +**
    The sqlite3_int64 output value is set to the number of cycles, +** according to the processor time-stamp counter, that elapsed while the +** query element was being processed. This value is not available for +** all query elements - if it is unavailable the output variable is +** set to -1. **
    */ #define SQLITE_SCANSTAT_NLOOP 0 @@ -9935,12 +10096,14 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value ** #define SQLITE_SCANSTAT_NAME 3 #define SQLITE_SCANSTAT_EXPLAIN 4 #define SQLITE_SCANSTAT_SELECTID 5 +#define SQLITE_SCANSTAT_PARENTID 6 +#define SQLITE_SCANSTAT_NCYCLE 7 /* ** CAPI3REF: Prepared Statement Scan Status ** METHOD: sqlite3_stmt ** -** This interface returns information about the predicted and measured +** These interfaces return information about the predicted and measured ** performance for pStmt. Advanced applications can use this ** interface to compare the predicted and the measured performance and ** issue warnings and/or rerun [ANALYZE] if discrepancies are found. @@ -9951,19 +10114,25 @@ SQLITE_API int sqlite3_vtab_rhs_value(sqlite3_index_info*, int, sqlite3_value ** ** ** The "iScanStatusOp" parameter determines which status information to return. ** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior -** of this interface is undefined. -** ^The requested measurement is written into a variable pointed to by -** the "pOut" parameter. -** Parameter "idx" identifies the specific loop to retrieve statistics for. -** Loops are numbered starting from zero. ^If idx is out of range - less than -** zero or greater than or equal to the total number of loops used to implement -** the statement - a non-zero value is returned and the variable that pOut -** points to is unchanged. -** -** ^Statistics might not be available for all loops in all statements. ^In cases -** where there exist loops with no available statistics, this function behaves -** as if the loop did not exist - it returns non-zero and leave the variable -** that pOut points to unchanged. +** of this interface is undefined. ^The requested measurement is written into +** a variable pointed to by the "pOut" parameter. +** +** The "flags" parameter must be passed a mask of flags. At present only +** one flag is defined - SQLITE_SCANSTAT_COMPLEX. If SQLITE_SCANSTAT_COMPLEX +** is specified, then status information is available for all elements +** of a query plan that are reported by "EXPLAIN QUERY PLAN" output. If +** SQLITE_SCANSTAT_COMPLEX is not specified, then only query plan elements +** that correspond to query loops (the "SCAN..." and "SEARCH..." elements of +** the EXPLAIN QUERY PLAN output) are available. Invoking API +** sqlite3_stmt_scanstatus() is equivalent to calling +** sqlite3_stmt_scanstatus_v2() with a zeroed flags parameter. +** +** Parameter "idx" identifies the specific query element to retrieve statistics +** for. Query elements are numbered starting from zero. A value of -1 may be +** to query for statistics regarding the entire query. ^If idx is out of range +** - less than -1 or greater than or equal to the total number of query +** elements used to implement the statement - a non-zero value is returned and +** the variable that pOut points to is unchanged. ** ** See also: [sqlite3_stmt_scanstatus_reset()] */ @@ -9973,6 +10142,19 @@ SQLITE_API int sqlite3_stmt_scanstatus( int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */ void *pOut /* Result written here */ ); +SQLITE_API int sqlite3_stmt_scanstatus_v2( + sqlite3_stmt *pStmt, /* Prepared statement for which info desired */ + int idx, /* Index of loop to report on */ + int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */ + int flags, /* Mask of flags defined below */ + void *pOut /* Result written here */ +); + +/* +** CAPI3REF: Prepared Statement Scan Status +** KEYWORDS: {scan status flags} +*/ +#define SQLITE_SCANSTAT_COMPLEX 0x0001 /* ** CAPI3REF: Zero Scan-Status Counters @@ -10063,6 +10245,10 @@ SQLITE_API int sqlite3_db_cacheflush(sqlite3*); ** function is not defined for operations on WITHOUT ROWID tables, or for ** DELETE operations on rowid tables. ** +** ^The sqlite3_preupdate_hook(D,C,P) function returns the P argument from +** the previous call on the same [database connection] D, or NULL for +** the first call on D. +** ** The [sqlite3_preupdate_old()], [sqlite3_preupdate_new()], ** [sqlite3_preupdate_count()], and [sqlite3_preupdate_depth()] interfaces ** provide additional information about a preupdate event. These routines @@ -10102,7 +10288,7 @@ SQLITE_API int sqlite3_db_cacheflush(sqlite3*); ** When the [sqlite3_blob_write()] API is used to update a blob column, ** the pre-update hook is invoked with SQLITE_DELETE. This is because the ** in this case the new values are not available. In this case, when a -** callback made with op==SQLITE_DELETE is actuall a write using the +** callback made with op==SQLITE_DELETE is actually a write using the ** sqlite3_blob_write() API, the [sqlite3_preupdate_blobwrite()] returns ** the index of the column being written. In other cases, where the ** pre-update hook is being invoked for some other reason, including a @@ -10468,6 +10654,19 @@ SQLITE_API int sqlite3_deserialize( # undef double #endif +#if defined(__wasi__) +# undef SQLITE_WASI +# define SQLITE_WASI 1 +# undef SQLITE_OMIT_WAL +# define SQLITE_OMIT_WAL 1/* because it requires shared memory APIs */ +# ifndef SQLITE_OMIT_LOAD_EXTENSION +# define SQLITE_OMIT_LOAD_EXTENSION +# endif +# ifndef SQLITE_THREADSAFE +# define SQLITE_THREADSAFE 0 +# endif +#endif + #ifdef __cplusplus } /* End of the 'extern "C"' block */ #endif @@ -10674,16 +10873,20 @@ SQLITE_API int sqlite3session_create( SQLITE_API void sqlite3session_delete(sqlite3_session *pSession); /* -** CAPIREF: Conigure a Session Object +** CAPI3REF: Configure a Session Object ** METHOD: sqlite3_session ** ** This method is used to configure a session object after it has been -** created. At present the only valid value for the second parameter is -** [SQLITE_SESSION_OBJCONFIG_SIZE]. +** created. At present the only valid values for the second parameter are +** [SQLITE_SESSION_OBJCONFIG_SIZE] and [SQLITE_SESSION_OBJCONFIG_ROWID]. ** -** Arguments for sqlite3session_object_config() +*/ +SQLITE_API int sqlite3session_object_config(sqlite3_session*, int op, void *pArg); + +/* +** CAPI3REF: Options for sqlite3session_object_config ** -** The following values may passed as the the 4th parameter to +** The following values may passed as the the 2nd parameter to ** sqlite3session_object_config(). ** **
    SQLITE_SESSION_OBJCONFIG_SIZE
    @@ -10699,12 +10902,21 @@ SQLITE_API void sqlite3session_delete(sqlite3_session *pSession); ** ** It is an error (SQLITE_MISUSE) to attempt to modify this setting after ** the first table has been attached to the session object. +** +**
    SQLITE_SESSION_OBJCONFIG_ROWID
    +** This option is used to set, clear or query the flag that enables +** collection of data for tables with no explicit PRIMARY KEY. +** +** Normally, tables with no explicit PRIMARY KEY are simply ignored +** by the sessions module. However, if this flag is set, it behaves +** as if such tables have a column "_rowid_ INTEGER PRIMARY KEY" inserted +** as their leftmost columns. +** +** It is an error (SQLITE_MISUSE) to attempt to modify this setting after +** the first table has been attached to the session object. */ -SQLITE_API int sqlite3session_object_config(sqlite3_session*, int op, void *pArg); - -/* -*/ -#define SQLITE_SESSION_OBJCONFIG_SIZE 1 +#define SQLITE_SESSION_OBJCONFIG_SIZE 1 +#define SQLITE_SESSION_OBJCONFIG_ROWID 2 /* ** CAPI3REF: Enable Or Disable A Session Object @@ -11837,9 +12049,23 @@ SQLITE_API int sqlite3changeset_apply_v2( ** Invert the changeset before applying it. This is equivalent to inverting ** a changeset using sqlite3changeset_invert() before applying it. It is ** an error to specify this flag with a patchset. +** +**
    SQLITE_CHANGESETAPPLY_IGNORENOOP
    +** Do not invoke the conflict handler callback for any changes that +** would not actually modify the database even if they were applied. +** Specifically, this means that the conflict handler is not invoked +** for: +**
      +**
    • a delete change if the row being deleted cannot be found, +**
    • an update change if the modified fields are already set to +** their new values in the conflicting row, or +**
    • an insert change if all fields of the conflicting row match +** the row being inserted. +**
    */ #define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001 #define SQLITE_CHANGESETAPPLY_INVERT 0x0002 +#define SQLITE_CHANGESETAPPLY_IGNORENOOP 0x0004 /* ** CAPI3REF: Constants Passed To The Conflict Handler @@ -12580,7 +12806,7 @@ struct Fts5PhraseIter { ** See xPhraseFirstColumn above. */ struct Fts5ExtensionApi { - int iVersion; /* Currently always set to 3 */ + int iVersion; /* Currently always set to 2 */ void *(*xUserData)(Fts5Context*); @@ -12809,8 +13035,8 @@ struct Fts5ExtensionApi { ** as separate queries of the FTS index are required for each synonym. ** ** When using methods (2) or (3), it is important that the tokenizer only -** provide synonyms when tokenizing document text (method (2)) or query -** text (method (3)), not both. Doing so will not cause any errors, but is +** provide synonyms when tokenizing document text (method (3)) or query +** text (method (2)), not both. Doing so will not cause any errors, but is ** inefficient. */ typedef struct Fts5Tokenizer Fts5Tokenizer; @@ -12858,7 +13084,7 @@ struct fts5_api { int (*xCreateTokenizer)( fts5_api *pApi, const char *zName, - void *pContext, + void *pUserData, fts5_tokenizer *pTokenizer, void (*xDestroy)(void*) ); @@ -12867,7 +13093,7 @@ struct fts5_api { int (*xFindTokenizer)( fts5_api *pApi, const char *zName, - void **ppContext, + void **ppUserData, fts5_tokenizer *pTokenizer ); @@ -12875,7 +13101,7 @@ struct fts5_api { int (*xCreateFunction)( fts5_api *pApi, const char *zName, - void *pContext, + void *pUserData, fts5_extension_function xFunction, void (*xDestroy)(void*) ); diff --git a/src/sqlite/SQLite-3.40.1/sqlite3.pc.in b/src/sqlite/SQLite-3.43.1/sqlite3.pc.in similarity index 100% rename from src/sqlite/SQLite-3.40.1/sqlite3.pc.in rename to src/sqlite/SQLite-3.43.1/sqlite3.pc.in diff --git a/src/sqlite/SQLite-3.40.1/sqlite3.rc b/src/sqlite/SQLite-3.43.1/sqlite3.rc similarity index 100% rename from src/sqlite/SQLite-3.40.1/sqlite3.rc rename to src/sqlite/SQLite-3.43.1/sqlite3.rc diff --git a/src/sqlite/SQLite-3.40.1/sqlite3ext.h b/src/sqlite/SQLite-3.43.1/sqlite3ext.h similarity index 99% rename from src/sqlite/SQLite-3.40.1/sqlite3ext.h rename to src/sqlite/SQLite-3.43.1/sqlite3ext.h index 79702d7b2..711638099 100644 --- a/src/sqlite/SQLite-3.40.1/sqlite3ext.h +++ b/src/sqlite/SQLite-3.43.1/sqlite3ext.h @@ -359,6 +359,10 @@ struct sqlite3_api_routines { const char *(*db_name)(sqlite3*,int); /* Version 3.40.0 and later */ int (*value_encoding)(sqlite3_value*); + /* Version 3.41.0 and later */ + int (*is_interrupted)(sqlite3*); + /* Version 3.43.0 and later */ + int (*stmt_explain)(sqlite3_stmt*,int); }; /* @@ -685,6 +689,10 @@ typedef int (*sqlite3_loadext_entry)( #define sqlite3_db_name sqlite3_api->db_name /* Version 3.40.0 and later */ #define sqlite3_value_encoding sqlite3_api->value_encoding +/* Version 3.41.0 and later */ +#define sqlite3_is_interrupted sqlite3_api->is_interrupted +/* Version 3.43.0 and later */ +#define sqlite3_stmt_explain sqlite3_api->stmt_explain #endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ #if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) diff --git a/src/sqlite/SQLite-3.40.1/sqlite3rc.h b/src/sqlite/SQLite-3.43.1/sqlite3rc.h similarity index 50% rename from src/sqlite/SQLite-3.40.1/sqlite3rc.h rename to src/sqlite/SQLite-3.43.1/sqlite3rc.h index abe983cb0..9fe5a4812 100644 --- a/src/sqlite/SQLite-3.40.1/sqlite3rc.h +++ b/src/sqlite/SQLite-3.43.1/sqlite3rc.h @@ -1,3 +1,3 @@ #ifndef SQLITE_RESOURCE_VERSION -#define SQLITE_RESOURCE_VERSION 3,40,1 +#define SQLITE_RESOURCE_VERSION 3,43,1 #endif diff --git a/src/sqlite/SQLite-3.40.1/tea/Makefile.in b/src/sqlite/SQLite-3.43.1/tea/Makefile.in similarity index 100% rename from src/sqlite/SQLite-3.40.1/tea/Makefile.in rename to src/sqlite/SQLite-3.43.1/tea/Makefile.in diff --git a/src/sqlite/SQLite-3.40.1/tea/README b/src/sqlite/SQLite-3.43.1/tea/README similarity index 100% rename from src/sqlite/SQLite-3.40.1/tea/README rename to src/sqlite/SQLite-3.43.1/tea/README diff --git a/src/sqlite/SQLite-3.40.1/tea/aclocal.m4 b/src/sqlite/SQLite-3.43.1/tea/aclocal.m4 similarity index 100% rename from src/sqlite/SQLite-3.40.1/tea/aclocal.m4 rename to src/sqlite/SQLite-3.43.1/tea/aclocal.m4 diff --git a/src/sqlite/SQLite-3.40.1/tea/configure b/src/sqlite/SQLite-3.43.1/tea/configure similarity index 99% rename from src/sqlite/SQLite-3.40.1/tea/configure rename to src/sqlite/SQLite-3.43.1/tea/configure index c9cb3764a..91d3e953e 100755 --- a/src/sqlite/SQLite-3.40.1/tea/configure +++ b/src/sqlite/SQLite-3.43.1/tea/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for sqlite 3.40.0. +# Generated by GNU Autoconf 2.71 for sqlite 3.43.1. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @@ -608,8 +608,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='sqlite' PACKAGE_TARNAME='sqlite' -PACKAGE_VERSION='3.40.0' -PACKAGE_STRING='sqlite 3.40.0' +PACKAGE_VERSION='3.43.1' +PACKAGE_STRING='sqlite 3.43.1' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -1331,7 +1331,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sqlite 3.40.0 to adapt to many kinds of systems. +\`configure' configures sqlite 3.43.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1393,7 +1393,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sqlite 3.40.0:";; + short | recursive ) echo "Configuration of sqlite 3.43.1:";; esac cat <<\_ACEOF @@ -1496,7 +1496,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sqlite configure 3.40.0 +sqlite configure 3.43.1 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -1795,7 +1795,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sqlite $as_me 3.40.0, which was +It was created by sqlite $as_me 3.43.1, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -9560,7 +9560,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sqlite $as_me 3.40.0, which was +This file was extended by sqlite $as_me 3.43.1, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -9615,7 +9615,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -sqlite config.status 3.40.0 +sqlite config.status 3.43.1 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" @@ -10175,5 +10175,3 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi - - diff --git a/src/sqlite/SQLite-3.40.1/tea/configure.ac b/src/sqlite/SQLite-3.43.1/tea/configure.ac similarity index 99% rename from src/sqlite/SQLite-3.40.1/tea/configure.ac rename to src/sqlite/SQLite-3.43.1/tea/configure.ac index 3e17b8b0b..24c2c0577 100644 --- a/src/sqlite/SQLite-3.40.1/tea/configure.ac +++ b/src/sqlite/SQLite-3.43.1/tea/configure.ac @@ -19,7 +19,7 @@ dnl to configure the system for the local environment. # so that we create the export library with the dll. #----------------------------------------------------------------------- -AC_INIT([sqlite],[3.40.0]) +AC_INIT([sqlite],[3.43.1]) #-------------------------------------------------------------------- # Call TEA_INIT as the first TEA_ macro to set up initial vars. diff --git a/src/sqlite/SQLite-3.40.1/tea/doc/sqlite3.n b/src/sqlite/SQLite-3.43.1/tea/doc/sqlite3.n similarity index 100% rename from src/sqlite/SQLite-3.40.1/tea/doc/sqlite3.n rename to src/sqlite/SQLite-3.43.1/tea/doc/sqlite3.n diff --git a/src/sqlite/SQLite-3.40.1/tea/generic/tclsqlite3.c b/src/sqlite/SQLite-3.43.1/tea/generic/tclsqlite3.c similarity index 99% rename from src/sqlite/SQLite-3.40.1/tea/generic/tclsqlite3.c rename to src/sqlite/SQLite-3.43.1/tea/generic/tclsqlite3.c index d9792f9b5..0810b079e 100644 --- a/src/sqlite/SQLite-3.40.1/tea/generic/tclsqlite3.c +++ b/src/sqlite/SQLite-3.43.1/tea/generic/tclsqlite3.c @@ -60,6 +60,25 @@ # include # include typedef unsigned char u8; +# ifndef SQLITE_PTRSIZE +# if defined(__SIZEOF_POINTER__) +# define SQLITE_PTRSIZE __SIZEOF_POINTER__ +# elif defined(i386) || defined(__i386__) || defined(_M_IX86) || \ + defined(_M_ARM) || defined(__arm__) || defined(__x86) || \ + (defined(__APPLE__) && defined(__POWERPC__)) || \ + (defined(__TOS_AIX__) && !defined(__64BIT__)) +# define SQLITE_PTRSIZE 4 +# else +# define SQLITE_PTRSIZE 8 +# endif +# endif /* SQLITE_PTRSIZE */ +# if defined(HAVE_STDINT_H) + typedef uintptr_t uptr; +# elif SQLITE_PTRSIZE==4 + typedef unsigned int uptr; +# else + typedef sqlite3_uint64 uptr; +# endif #endif #include @@ -680,7 +699,7 @@ static int DbTraceV2Handler( pCmd = Tcl_NewStringObj(pDb->zTraceV2, -1); Tcl_IncrRefCount(pCmd); Tcl_ListObjAppendElement(pDb->interp, pCmd, - Tcl_NewWideIntObj((Tcl_WideInt)pStmt)); + Tcl_NewWideIntObj((Tcl_WideInt)(uptr)pStmt)); Tcl_ListObjAppendElement(pDb->interp, pCmd, Tcl_NewStringObj(zSql, -1)); Tcl_EvalObjEx(pDb->interp, pCmd, TCL_EVAL_DIRECT); @@ -695,7 +714,7 @@ static int DbTraceV2Handler( pCmd = Tcl_NewStringObj(pDb->zTraceV2, -1); Tcl_IncrRefCount(pCmd); Tcl_ListObjAppendElement(pDb->interp, pCmd, - Tcl_NewWideIntObj((Tcl_WideInt)pStmt)); + Tcl_NewWideIntObj((Tcl_WideInt)(uptr)pStmt)); Tcl_ListObjAppendElement(pDb->interp, pCmd, Tcl_NewWideIntObj((Tcl_WideInt)ns)); Tcl_EvalObjEx(pDb->interp, pCmd, TCL_EVAL_DIRECT); @@ -709,7 +728,7 @@ static int DbTraceV2Handler( pCmd = Tcl_NewStringObj(pDb->zTraceV2, -1); Tcl_IncrRefCount(pCmd); Tcl_ListObjAppendElement(pDb->interp, pCmd, - Tcl_NewWideIntObj((Tcl_WideInt)pStmt)); + Tcl_NewWideIntObj((Tcl_WideInt)(uptr)pStmt)); Tcl_EvalObjEx(pDb->interp, pCmd, TCL_EVAL_DIRECT); Tcl_DecrRefCount(pCmd); Tcl_ResetResult(pDb->interp); @@ -721,7 +740,7 @@ static int DbTraceV2Handler( pCmd = Tcl_NewStringObj(pDb->zTraceV2, -1); Tcl_IncrRefCount(pCmd); Tcl_ListObjAppendElement(pDb->interp, pCmd, - Tcl_NewWideIntObj((Tcl_WideInt)db)); + Tcl_NewWideIntObj((Tcl_WideInt)(uptr)db)); Tcl_EvalObjEx(pDb->interp, pCmd, TCL_EVAL_DIRECT); Tcl_DecrRefCount(pCmd); Tcl_ResetResult(pDb->interp); @@ -1785,7 +1804,7 @@ static Tcl_Obj *dbEvalColumnValue(DbEvalContext *p, int iCol){ /* ** If using Tcl version 8.6 or greater, use the NR functions to avoid -** recursive evalution of scripts by the [db eval] and [db trans] +** recursive evaluation of scripts by the [db eval] and [db trans] ** commands. Even if the headers used while compiling the extension ** are 8.6 or newer, the code still tests the Tcl version at runtime. ** This allows stubs-enabled builds to be used with older Tcl libraries. @@ -2446,7 +2465,7 @@ static int SQLITE_TCLAPI DbObjCmd( ** ** This command usage is equivalent to the sqlite2.x COPY statement, ** which imports file data into a table using the PostgreSQL COPY file format: - ** $db copy $conflit_algo $table_name $filename \t \\N + ** $db copy $conflict_algorithm $table_name $filename \t \\N */ case DB_COPY: { char *zTable; /* Insert data into this table */ @@ -3059,6 +3078,9 @@ static int SQLITE_TCLAPI DbObjCmd( if( pDb->zProgress ){ Tcl_AppendResult(interp, pDb->zProgress, (char*)0); } +#ifndef SQLITE_OMIT_PROGRESS_CALLBACK + sqlite3_progress_handler(pDb->db, 0, 0, 0); +#endif }else if( objc==4 ){ char *zProgress; int len; @@ -3429,7 +3451,7 @@ static int SQLITE_TCLAPI DbObjCmd( ** Start a new transaction (if we are not already in the midst of a ** transaction) and execute the TCL script SCRIPT. After SCRIPT ** completes, either commit the transaction or roll it back if SCRIPT - ** throws an exception. Or if no new transation was started, do nothing. + ** throws an exception. Or if no new transaction was started, do nothing. ** pass the exception on up the stack. ** ** This command was inspired by Dave Thomas's talk on Ruby at the diff --git a/src/sqlite/SQLite-3.40.1/tea/license.terms b/src/sqlite/SQLite-3.43.1/tea/license.terms similarity index 100% rename from src/sqlite/SQLite-3.40.1/tea/license.terms rename to src/sqlite/SQLite-3.43.1/tea/license.terms diff --git a/src/sqlite/SQLite-3.40.1/tea/pkgIndex.tcl.in b/src/sqlite/SQLite-3.43.1/tea/pkgIndex.tcl.in similarity index 100% rename from src/sqlite/SQLite-3.40.1/tea/pkgIndex.tcl.in rename to src/sqlite/SQLite-3.43.1/tea/pkgIndex.tcl.in diff --git a/src/sqlite/SQLite-3.40.1/tea/tclconfig/install-sh b/src/sqlite/SQLite-3.43.1/tea/tclconfig/install-sh similarity index 100% rename from src/sqlite/SQLite-3.40.1/tea/tclconfig/install-sh rename to src/sqlite/SQLite-3.43.1/tea/tclconfig/install-sh diff --git a/src/sqlite/SQLite-3.40.1/tea/tclconfig/tcl.m4 b/src/sqlite/SQLite-3.43.1/tea/tclconfig/tcl.m4 similarity index 100% rename from src/sqlite/SQLite-3.40.1/tea/tclconfig/tcl.m4 rename to src/sqlite/SQLite-3.43.1/tea/tclconfig/tcl.m4 diff --git a/src/sqlite/SQLite-3.40.1/tea/win/makefile.vc b/src/sqlite/SQLite-3.43.1/tea/win/makefile.vc similarity index 100% rename from src/sqlite/SQLite-3.40.1/tea/win/makefile.vc rename to src/sqlite/SQLite-3.43.1/tea/win/makefile.vc diff --git a/src/sqlite/SQLite-3.40.1/tea/win/nmakehlp.c b/src/sqlite/SQLite-3.43.1/tea/win/nmakehlp.c similarity index 100% rename from src/sqlite/SQLite-3.40.1/tea/win/nmakehlp.c rename to src/sqlite/SQLite-3.43.1/tea/win/nmakehlp.c diff --git a/src/sqlite/SQLite-3.40.1/tea/win/rules.vc b/src/sqlite/SQLite-3.43.1/tea/win/rules.vc similarity index 100% rename from src/sqlite/SQLite-3.40.1/tea/win/rules.vc rename to src/sqlite/SQLite-3.43.1/tea/win/rules.vc diff --git a/src/sqlite/sqlite3-3.40.1-x64.dll b/src/sqlite/sqlite3-3.40.1-x64.dll deleted file mode 100644 index e4f4e9ad7f8983427da12aa9c7c9165d50584376..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2165760 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

    XL*~ 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%0A;g~TqN}QlC5B7f#gyk;;)iJF0i#|cRsd^>*#)Mu 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 G8Q;K8eZcTOuTDrP5jlFR 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 z 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

    Xan^q5yn2q7}igY4@B1Pw^LcWZu7C*1p!*S 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

  • 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π8H#DMcKqbJNrKmLV}_NCNx_Wpok=BD3i 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�-oFZ!< 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 r>uK&iobx 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 z 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⪚-|SdxT>B+1?kp99aKxRbzUNltMH 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 z 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

    )d`ey?9qgz`)0$7#M<;pNfI{bH+f)S3wNSf;wEm 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%0AUqoJEwcox*J@!d@Sj$g7c%#Q1y2pZUzS(l@ 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 8 -# define DEF_MEM_LEVEL 8 -# else -# define DEF_MEM_LEVEL MAX_MEM_LEVEL -# endif -#endif -/* default memLevel */ - -/* tm_zip contain date/time info */ -typedef struct tm_zip_s -{ - int tm_sec; /* seconds after the minute - [0,59] */ - int tm_min; /* minutes after the hour - [0,59] */ - int tm_hour; /* hours since midnight - [0,23] */ - int tm_mday; /* day of the month - [1,31] */ - int tm_mon; /* months since January - [0,11] */ - int tm_year; /* years - [1980..2044] */ -} tm_zip; - -typedef struct -{ - tm_zip tmz_date; /* date in understandable format */ - uLong dosDate; /* if dos_date == 0, tmu_date is used */ -/* uLong flag; */ /* general purpose bit flag 2 bytes */ - - uLong internal_fa; /* internal file attributes 2 bytes */ - uLong external_fa; /* external file attributes 4 bytes */ -} zip_fileinfo; - -typedef const char* zipcharpc; - - -#define APPEND_STATUS_CREATE (0) -#define APPEND_STATUS_CREATEAFTER (1) -#define APPEND_STATUS_ADDINZIP (2) - -extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append)); -extern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append)); -/* - Create a zipfile. - pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on - an Unix computer "zlib/zlib113.zip". - if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip - will be created at the end of the file. - (useful if the file contain a self extractor code) - if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will - add files in existing zip (be sure you don't add file that doesn't exist) - If the zipfile cannot be opened, the return value is NULL. - Else, the return value is a zipFile Handle, usable with other function - of this zip package. -*/ - -/* Note : there is no delete function into a zipfile. - If you want delete file into a zipfile, you must open a zipfile, and create another - Of couse, you can use RAW reading and writing to copy the file you did not want delte -*/ - -extern zipFile ZEXPORT zipOpen2 OF((const char *pathname, - int append, - zipcharpc* globalcomment, - zlib_filefunc_def* pzlib_filefunc_def)); - -extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname, - int append, - zipcharpc* globalcomment, - zlib_filefunc64_def* pzlib_filefunc_def)); - -extern zipFile ZEXPORT zipOpen3 OF((const void *pathname, - int append, - zipcharpc* globalcomment, - zlib_filefunc64_32_def* pzlib_filefunc64_32_def)); - -extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file, - const char* filename, - const zip_fileinfo* zipfi, - const void* extrafield_local, - uInt size_extrafield_local, - const void* extrafield_global, - uInt size_extrafield_global, - const char* comment, - int method, - int level)); - -extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file, - const char* filename, - const zip_fileinfo* zipfi, - const void* extrafield_local, - uInt size_extrafield_local, - const void* extrafield_global, - uInt size_extrafield_global, - const char* comment, - int method, - int level, - int zip64)); - -/* - Open a file in the ZIP for writing. - filename : the filename in zip (if NULL, '-' without quote will be used - *zipfi contain supplemental information - if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local - contains the extrafield data the the local header - if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global - contains the extrafield data the the local header - if comment != NULL, comment contain the comment string - method contain the compression method (0 for store, Z_DEFLATED for deflate) - level contain the level of compression (can be Z_DEFAULT_COMPRESSION) - zip64 is set to 1 if a zip64 extended information block should be added to the local file header. - this MUST be '1' if the uncompressed size is >= 0xffffffff. - -*/ - - -extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file, - const char* filename, - const zip_fileinfo* zipfi, - const void* extrafield_local, - uInt size_extrafield_local, - const void* extrafield_global, - uInt size_extrafield_global, - const char* comment, - int method, - int level, - int raw)); - - -extern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file, - const char* filename, - const zip_fileinfo* zipfi, - const void* extrafield_local, - uInt size_extrafield_local, - const void* extrafield_global, - uInt size_extrafield_global, - const char* comment, - int method, - int level, - int raw, - int zip64)); -/* - Same than zipOpenNewFileInZip, except if raw=1, we write raw file - */ - -extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file, - const char* filename, - const zip_fileinfo* zipfi, - const void* extrafield_local, - uInt size_extrafield_local, - const void* extrafield_global, - uInt size_extrafield_global, - const char* comment, - int method, - int level, - int raw, - int windowBits, - int memLevel, - int strategy, - const char* password, - uLong crcForCrypting)); - -extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file, - const char* filename, - const zip_fileinfo* zipfi, - const void* extrafield_local, - uInt size_extrafield_local, - const void* extrafield_global, - uInt size_extrafield_global, - const char* comment, - int method, - int level, - int raw, - int windowBits, - int memLevel, - int strategy, - const char* password, - uLong crcForCrypting, - int zip64 - )); - -/* - Same than zipOpenNewFileInZip2, except - windowBits,memLevel,,strategy : see parameter strategy in deflateInit2 - password : crypting password (NULL for no crypting) - crcForCrypting : crc of file to compress (needed for crypting) - */ - -extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file, - const char* filename, - const zip_fileinfo* zipfi, - const void* extrafield_local, - uInt size_extrafield_local, - const void* extrafield_global, - uInt size_extrafield_global, - const char* comment, - int method, - int level, - int raw, - int windowBits, - int memLevel, - int strategy, - const char* password, - uLong crcForCrypting, - uLong versionMadeBy, - uLong flagBase - )); - - -extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file, - const char* filename, - const zip_fileinfo* zipfi, - const void* extrafield_local, - uInt size_extrafield_local, - const void* extrafield_global, - uInt size_extrafield_global, - const char* comment, - int method, - int level, - int raw, - int windowBits, - int memLevel, - int strategy, - const char* password, - uLong crcForCrypting, - uLong versionMadeBy, - uLong flagBase, - int zip64 - )); -/* - Same than zipOpenNewFileInZip4, except - versionMadeBy : value for Version made by field - flag : value for flag field (compression level info will be added) - */ - - -extern int ZEXPORT zipWriteInFileInZip OF((zipFile file, - const void* buf, - unsigned len)); -/* - Write data in the zipfile -*/ - -extern int ZEXPORT zipCloseFileInZip OF((zipFile file)); -/* - Close the current file in the zipfile -*/ - -extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file, - uLong uncompressed_size, - uLong crc32)); - -extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file, - ZPOS64_T uncompressed_size, - uLong crc32)); - -/* - Close the current file in the zipfile, for file opened with - parameter raw=1 in zipOpenNewFileInZip2 - uncompressed_size and crc32 are value for the uncompressed size -*/ - -extern int ZEXPORT zipClose OF((zipFile file, - const char* global_comment)); -/* - Close the zipfile -*/ - - -extern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader)); -/* - zipRemoveExtraInfoBlock - Added by Mathias Svensson - - Remove extra information block from a extra information data for the local file header or central directory header - - It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode. - - 0x0001 is the signature header for the ZIP64 extra information blocks - - usage. - Remove ZIP64 Extra information from a central director extra field data - zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001); - - Remove ZIP64 Extra information from a Local File Header extra field data - zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001); -*/ - -#ifdef __cplusplus -} -#endif - -#endif /* _zip64_H */ diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc9/zlib.rc b/src/zlib/zlib-1.2.13/contrib/vstudio/vc9/zlib.rc deleted file mode 100644 index 876027498..000000000 --- a/src/zlib/zlib-1.2.13/contrib/vstudio/vc9/zlib.rc +++ /dev/null @@ -1,32 +0,0 @@ -#include - -#define IDR_VERSION1 1 -IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 1, 2, 13, 0 - PRODUCTVERSION 1, 2, 13, 0 - FILEFLAGSMASK VS_FFI_FILEFLAGSMASK - FILEFLAGS 0 - FILEOS VOS_DOS_WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE 0 // not used -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904E4" - //language ID = U.S. English, char set = Windows, Multilingual - - BEGIN - VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" - VALUE "FileVersion", "1.2.13\0" - VALUE "InternalName", "zlib\0" - VALUE "OriginalFilename", "zlibwapi.dll\0" - VALUE "ProductName", "ZLib.DLL\0" - VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" - VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x0409, 1252 - END -END diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc9/zlibvc.def b/src/zlib/zlib-1.2.13/contrib/vstudio/vc9/zlibvc.def deleted file mode 100644 index ba09bc1b9..000000000 --- a/src/zlib/zlib-1.2.13/contrib/vstudio/vc9/zlibvc.def +++ /dev/null @@ -1,158 +0,0 @@ -LIBRARY -; zlib data compression and ZIP file I/O library - -VERSION 1.2 - -EXPORTS - adler32 @1 - compress @2 - crc32 @3 - deflate @4 - deflateCopy @5 - deflateEnd @6 - deflateInit2_ @7 - deflateInit_ @8 - deflateParams @9 - deflateReset @10 - deflateSetDictionary @11 - gzclose @12 - gzdopen @13 - gzerror @14 - gzflush @15 - gzopen @16 - gzread @17 - gzwrite @18 - inflate @19 - inflateEnd @20 - inflateInit2_ @21 - inflateInit_ @22 - inflateReset @23 - inflateSetDictionary @24 - inflateSync @25 - uncompress @26 - zlibVersion @27 - gzprintf @28 - gzputc @29 - gzgetc @30 - gzseek @31 - gzrewind @32 - gztell @33 - gzeof @34 - gzsetparams @35 - zError @36 - inflateSyncPoint @37 - get_crc_table @38 - compress2 @39 - gzputs @40 - gzgets @41 - inflateCopy @42 - inflateBackInit_ @43 - inflateBack @44 - inflateBackEnd @45 - compressBound @46 - deflateBound @47 - gzclearerr @48 - gzungetc @49 - zlibCompileFlags @50 - deflatePrime @51 - deflatePending @52 - - unzOpen @61 - unzClose @62 - unzGetGlobalInfo @63 - unzGetCurrentFileInfo @64 - unzGoToFirstFile @65 - unzGoToNextFile @66 - unzOpenCurrentFile @67 - unzReadCurrentFile @68 - unzOpenCurrentFile3 @69 - unztell @70 - unzeof @71 - unzCloseCurrentFile @72 - unzGetGlobalComment @73 - unzStringFileNameCompare @74 - unzLocateFile @75 - unzGetLocalExtrafield @76 - unzOpen2 @77 - unzOpenCurrentFile2 @78 - unzOpenCurrentFilePassword @79 - - zipOpen @80 - zipOpenNewFileInZip @81 - zipWriteInFileInZip @82 - zipCloseFileInZip @83 - zipClose @84 - zipOpenNewFileInZip2 @86 - zipCloseFileInZipRaw @87 - zipOpen2 @88 - zipOpenNewFileInZip3 @89 - - unzGetFilePos @100 - unzGoToFilePos @101 - - fill_win32_filefunc @110 - -; zlibwapi v1.2.4 added: - fill_win32_filefunc64 @111 - fill_win32_filefunc64A @112 - fill_win32_filefunc64W @113 - - unzOpen64 @120 - unzOpen2_64 @121 - unzGetGlobalInfo64 @122 - unzGetCurrentFileInfo64 @124 - unzGetCurrentFileZStreamPos64 @125 - unztell64 @126 - unzGetFilePos64 @127 - unzGoToFilePos64 @128 - - zipOpen64 @130 - zipOpen2_64 @131 - zipOpenNewFileInZip64 @132 - zipOpenNewFileInZip2_64 @133 - zipOpenNewFileInZip3_64 @134 - zipOpenNewFileInZip4_64 @135 - zipCloseFileInZipRaw64 @136 - -; zlib1 v1.2.4 added: - adler32_combine @140 - crc32_combine @142 - deflateSetHeader @144 - deflateTune @145 - gzbuffer @146 - gzclose_r @147 - gzclose_w @148 - gzdirect @149 - gzoffset @150 - inflateGetHeader @156 - inflateMark @157 - inflatePrime @158 - inflateReset2 @159 - inflateUndermine @160 - -; zlib1 v1.2.6 added: - gzgetc_ @161 - inflateResetKeep @163 - deflateResetKeep @164 - -; zlib1 v1.2.7 added: - gzopen_w @165 - -; zlib1 v1.2.8 added: - inflateGetDictionary @166 - gzvprintf @167 - -; zlib1 v1.2.9 added: - inflateCodesUsed @168 - inflateValidate @169 - uncompress2 @170 - gzfread @171 - gzfwrite @172 - deflateGetDictionary @173 - adler32_z @174 - crc32_z @175 - -; zlib1 v1.2.12 added: - crc32_combine_gen @176 - crc32_combine_gen64 @177 - crc32_combine_op @178 diff --git a/src/zlib/zlib-1.2.13/examples/zran.c b/src/zlib/zlib-1.2.13/examples/zran.c deleted file mode 100644 index 879c47ccf..000000000 --- a/src/zlib/zlib-1.2.13/examples/zran.c +++ /dev/null @@ -1,479 +0,0 @@ -/* zran.c -- example of zlib/gzip stream indexing and random access - * Copyright (C) 2005, 2012, 2018 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - * Version 1.2 14 Oct 2018 Mark Adler */ - -/* Version History: - 1.0 29 May 2005 First version - 1.1 29 Sep 2012 Fix memory reallocation error - 1.2 14 Oct 2018 Handle gzip streams with multiple members - Add a header file to facilitate usage in applications - */ - -/* Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary() - for random access of a compressed file. A file containing a zlib or gzip - stream is provided on the command line. The compressed stream is decoded in - its entirety, and an index built with access points about every SPAN bytes - in the uncompressed output. The compressed file is left open, and can then - be read randomly, having to decompress on the average SPAN/2 uncompressed - bytes before getting to the desired block of data. - - An access point can be created at the start of any deflate block, by saving - the starting file offset and bit of that block, and the 32K bytes of - uncompressed data that precede that block. Also the uncompressed offset of - that block is saved to provide a reference for locating a desired starting - point in the uncompressed stream. deflate_index_build() works by - decompressing the input zlib or gzip stream a block at a time, and at the - end of each block deciding if enough uncompressed data has gone by to - justify the creation of a new access point. If so, that point is saved in a - data structure that grows as needed to accommodate the points. - - To use the index, an offset in the uncompressed data is provided, for which - the latest access point at or preceding that offset is located in the index. - The input file is positioned to the specified location in the index, and if - necessary the first few bits of the compressed data is read from the file. - inflate is initialized with those bits and the 32K of uncompressed data, and - the decompression then proceeds until the desired offset in the file is - reached. Then the decompression continues to read the desired uncompressed - data from the file. - - Another approach would be to generate the index on demand. In that case, - requests for random access reads from the compressed data would try to use - the index, but if a read far enough past the end of the index is required, - then further index entries would be generated and added. - - There is some fair bit of overhead to starting inflation for the random - access, mainly copying the 32K byte dictionary. So if small pieces of the - file are being accessed, it would make sense to implement a cache to hold - some lookahead and avoid many calls to deflate_index_extract() for small - lengths. - - Another way to build an index would be to use inflateCopy(). That would - not be constrained to have access points at block boundaries, but requires - more memory per access point, and also cannot be saved to file due to the - use of pointers in the state. The approach here allows for storage of the - index in a file. - */ - -#include -#include -#include -#include "zlib.h" -#include "zran.h" - -#define WINSIZE 32768U /* sliding window size */ -#define CHUNK 16384 /* file input buffer size */ - -/* Access point entry. */ -struct point { - off_t out; /* corresponding offset in uncompressed data */ - off_t in; /* offset in input file of first full byte */ - int bits; /* number of bits (1-7) from byte at in-1, or 0 */ - unsigned char window[WINSIZE]; /* preceding 32K of uncompressed data */ -}; - -/* See comments in zran.h. */ -void deflate_index_free(struct deflate_index *index) -{ - if (index != NULL) { - free(index->list); - free(index); - } -} - -/* Add an entry to the access point list. If out of memory, deallocate the - existing list and return NULL. index->gzip is the allocated size of the - index in point entries, until it is time for deflate_index_build() to - return, at which point gzip is set to indicate a gzip file or not. - */ -static struct deflate_index *addpoint(struct deflate_index *index, int bits, - off_t in, off_t out, unsigned left, - unsigned char *window) -{ - struct point *next; - - /* if list is empty, create it (start with eight points) */ - if (index == NULL) { - index = malloc(sizeof(struct deflate_index)); - if (index == NULL) return NULL; - index->list = malloc(sizeof(struct point) << 3); - if (index->list == NULL) { - free(index); - return NULL; - } - index->gzip = 8; - index->have = 0; - } - - /* if list is full, make it bigger */ - else if (index->have == index->gzip) { - index->gzip <<= 1; - next = realloc(index->list, sizeof(struct point) * index->gzip); - if (next == NULL) { - deflate_index_free(index); - return NULL; - } - index->list = next; - } - - /* fill in entry and increment how many we have */ - next = (struct point *)(index->list) + index->have; - next->bits = bits; - next->in = in; - next->out = out; - if (left) - memcpy(next->window, window + WINSIZE - left, left); - if (left < WINSIZE) - memcpy(next->window + left, window, WINSIZE - left); - index->have++; - - /* return list, possibly reallocated */ - return index; -} - -/* See comments in zran.h. */ -int deflate_index_build(FILE *in, off_t span, struct deflate_index **built) -{ - int ret; - int gzip = 0; /* true if reading a gzip file */ - off_t totin, totout; /* our own total counters to avoid 4GB limit */ - off_t last; /* totout value of last access point */ - struct deflate_index *index; /* access points being generated */ - z_stream strm; - unsigned char input[CHUNK]; - unsigned char window[WINSIZE]; - - /* initialize inflate */ - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - strm.opaque = Z_NULL; - strm.avail_in = 0; - strm.next_in = Z_NULL; - ret = inflateInit2(&strm, 47); /* automatic zlib or gzip decoding */ - if (ret != Z_OK) - return ret; - - /* inflate the input, maintain a sliding window, and build an index -- this - also validates the integrity of the compressed data using the check - information in the gzip or zlib stream */ - totin = totout = last = 0; - index = NULL; /* will be allocated by first addpoint() */ - strm.avail_out = 0; - do { - /* get some compressed data from input file */ - strm.avail_in = fread(input, 1, CHUNK, in); - if (ferror(in)) { - ret = Z_ERRNO; - goto deflate_index_build_error; - } - if (strm.avail_in == 0) { - ret = Z_DATA_ERROR; - goto deflate_index_build_error; - } - strm.next_in = input; - - /* check for a gzip stream */ - if (totin == 0 && strm.avail_in >= 3 && - input[0] == 31 && input[1] == 139 && input[2] == 8) - gzip = 1; - - /* process all of that, or until end of stream */ - do { - /* reset sliding window if necessary */ - if (strm.avail_out == 0) { - strm.avail_out = WINSIZE; - strm.next_out = window; - } - - /* inflate until out of input, output, or at end of block -- - update the total input and output counters */ - totin += strm.avail_in; - totout += strm.avail_out; - ret = inflate(&strm, Z_BLOCK); /* return at end of block */ - totin -= strm.avail_in; - totout -= strm.avail_out; - if (ret == Z_NEED_DICT) - ret = Z_DATA_ERROR; - if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR) - goto deflate_index_build_error; - if (ret == Z_STREAM_END) { - if (gzip && - (strm.avail_in || ungetc(getc(in), in) != EOF)) { - ret = inflateReset(&strm); - if (ret != Z_OK) - goto deflate_index_build_error; - continue; - } - break; - } - - /* if at end of block, consider adding an index entry (note that if - data_type indicates an end-of-block, then all of the - uncompressed data from that block has been delivered, and none - of the compressed data after that block has been consumed, - except for up to seven bits) -- the totout == 0 provides an - entry point after the zlib or gzip header, and assures that the - index always has at least one access point; we avoid creating an - access point after the last block by checking bit 6 of data_type - */ - if ((strm.data_type & 128) && !(strm.data_type & 64) && - (totout == 0 || totout - last > span)) { - index = addpoint(index, strm.data_type & 7, totin, - totout, strm.avail_out, window); - if (index == NULL) { - ret = Z_MEM_ERROR; - goto deflate_index_build_error; - } - last = totout; - } - } while (strm.avail_in != 0); - } while (ret != Z_STREAM_END); - - /* clean up and return index (release unused entries in list) */ - (void)inflateEnd(&strm); - index->list = realloc(index->list, sizeof(struct point) * index->have); - index->gzip = gzip; - index->length = totout; - *built = index; - return index->have; - - /* return error */ - deflate_index_build_error: - (void)inflateEnd(&strm); - deflate_index_free(index); - return ret; -} - -/* See comments in zran.h. */ -int deflate_index_extract(FILE *in, struct deflate_index *index, off_t offset, - unsigned char *buf, int len) -{ - int ret, skip; - z_stream strm; - struct point *here; - unsigned char input[CHUNK]; - unsigned char discard[WINSIZE]; - - /* proceed only if something reasonable to do */ - if (len < 0) - return 0; - - /* find where in stream to start */ - here = index->list; - ret = index->have; - while (--ret && here[1].out <= offset) - here++; - - /* initialize file and inflate state to start there */ - strm.zalloc = Z_NULL; - strm.zfree = Z_NULL; - strm.opaque = Z_NULL; - strm.avail_in = 0; - strm.next_in = Z_NULL; - ret = inflateInit2(&strm, -15); /* raw inflate */ - if (ret != Z_OK) - return ret; - ret = fseeko(in, here->in - (here->bits ? 1 : 0), SEEK_SET); - if (ret == -1) - goto deflate_index_extract_ret; - if (here->bits) { - ret = getc(in); - if (ret == -1) { - ret = ferror(in) ? Z_ERRNO : Z_DATA_ERROR; - goto deflate_index_extract_ret; - } - (void)inflatePrime(&strm, here->bits, ret >> (8 - here->bits)); - } - (void)inflateSetDictionary(&strm, here->window, WINSIZE); - - /* skip uncompressed bytes until offset reached, then satisfy request */ - offset -= here->out; - strm.avail_in = 0; - skip = 1; /* while skipping to offset */ - do { - /* define where to put uncompressed data, and how much */ - if (offset > WINSIZE) { /* skip WINSIZE bytes */ - strm.avail_out = WINSIZE; - strm.next_out = discard; - offset -= WINSIZE; - } - else if (offset > 0) { /* last skip */ - strm.avail_out = (unsigned)offset; - strm.next_out = discard; - offset = 0; - } - else if (skip) { /* at offset now */ - strm.avail_out = len; - strm.next_out = buf; - skip = 0; /* only do this once */ - } - - /* uncompress until avail_out filled, or end of stream */ - do { - if (strm.avail_in == 0) { - strm.avail_in = fread(input, 1, CHUNK, in); - if (ferror(in)) { - ret = Z_ERRNO; - goto deflate_index_extract_ret; - } - if (strm.avail_in == 0) { - ret = Z_DATA_ERROR; - goto deflate_index_extract_ret; - } - strm.next_in = input; - } - ret = inflate(&strm, Z_NO_FLUSH); /* normal inflate */ - if (ret == Z_NEED_DICT) - ret = Z_DATA_ERROR; - if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR) - goto deflate_index_extract_ret; - if (ret == Z_STREAM_END) { - /* the raw deflate stream has ended */ - if (index->gzip == 0) - /* this is a zlib stream that has ended -- done */ - break; - - /* near the end of a gzip member, which might be followed by - another gzip member -- skip the gzip trailer and see if - there is more input after it */ - if (strm.avail_in < 8) { - fseeko(in, 8 - strm.avail_in, SEEK_CUR); - strm.avail_in = 0; - } - else { - strm.avail_in -= 8; - strm.next_in += 8; - } - if (strm.avail_in == 0 && ungetc(getc(in), in) == EOF) - /* the input ended after the gzip trailer -- done */ - break; - - /* there is more input, so another gzip member should follow -- - validate and skip the gzip header */ - ret = inflateReset2(&strm, 31); - if (ret != Z_OK) - goto deflate_index_extract_ret; - do { - if (strm.avail_in == 0) { - strm.avail_in = fread(input, 1, CHUNK, in); - if (ferror(in)) { - ret = Z_ERRNO; - goto deflate_index_extract_ret; - } - if (strm.avail_in == 0) { - ret = Z_DATA_ERROR; - goto deflate_index_extract_ret; - } - strm.next_in = input; - } - ret = inflate(&strm, Z_BLOCK); - if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR) - goto deflate_index_extract_ret; - } while ((strm.data_type & 128) == 0); - - /* set up to continue decompression of the raw deflate stream - that follows the gzip header */ - ret = inflateReset2(&strm, -15); - if (ret != Z_OK) - goto deflate_index_extract_ret; - } - - /* continue to process the available input before reading more */ - } while (strm.avail_out != 0); - - if (ret == Z_STREAM_END) - /* reached the end of the compressed data -- return the data that - was available, possibly less than requested */ - break; - - /* do until offset reached and requested data read */ - } while (skip); - - /* compute the number of uncompressed bytes read after the offset */ - ret = skip ? 0 : len - strm.avail_out; - - /* clean up and return the bytes read, or the negative error */ - deflate_index_extract_ret: - (void)inflateEnd(&strm); - return ret; -} - -#ifdef TEST - -#define SPAN 1048576L /* desired distance between access points */ -#define LEN 16384 /* number of bytes to extract */ - -/* Demonstrate the use of deflate_index_build() and deflate_index_extract() by - processing the file provided on the command line, and extracting LEN bytes - from 2/3rds of the way through the uncompressed output, writing that to - stdout. An offset can be provided as the second argument, in which case the - data is extracted from there instead. */ -int main(int argc, char **argv) -{ - int len; - off_t offset = -1; - FILE *in; - struct deflate_index *index = NULL; - unsigned char buf[LEN]; - - /* open input file */ - if (argc < 2 || argc > 3) { - fprintf(stderr, "usage: zran file.gz [offset]\n"); - return 1; - } - in = fopen(argv[1], "rb"); - if (in == NULL) { - fprintf(stderr, "zran: could not open %s for reading\n", argv[1]); - return 1; - } - - /* get optional offset */ - if (argc == 3) { - char *end; - offset = strtoll(argv[2], &end, 10); - if (*end || offset < 0) { - fprintf(stderr, "zran: %s is not a valid offset\n", argv[2]); - return 1; - } - } - - /* build index */ - len = deflate_index_build(in, SPAN, &index); - if (len < 0) { - fclose(in); - switch (len) { - case Z_MEM_ERROR: - fprintf(stderr, "zran: out of memory\n"); - break; - case Z_DATA_ERROR: - fprintf(stderr, "zran: compressed data error in %s\n", argv[1]); - break; - case Z_ERRNO: - fprintf(stderr, "zran: read error on %s\n", argv[1]); - break; - default: - fprintf(stderr, "zran: error %d while building index\n", len); - } - return 1; - } - fprintf(stderr, "zran: built index with %d access points\n", len); - - /* use index by reading some bytes from an arbitrary offset */ - if (offset == -1) - offset = (index->length << 1) / 3; - len = deflate_index_extract(in, index, offset, buf, LEN); - if (len < 0) - fprintf(stderr, "zran: extraction failed: %s error\n", - len == Z_MEM_ERROR ? "out of memory" : "input corrupted"); - else { - fwrite(buf, 1, len, stdout); - fprintf(stderr, "zran: extracted %d bytes at %llu\n", len, offset); - } - - /* clean up and exit */ - deflate_index_free(index); - fclose(in); - return 0; -} - -#endif diff --git a/src/zlib/zlib-1.2.13/examples/zran.h b/src/zlib/zlib-1.2.13/examples/zran.h deleted file mode 100644 index 2314125d6..000000000 --- a/src/zlib/zlib-1.2.13/examples/zran.h +++ /dev/null @@ -1,40 +0,0 @@ -/* zran.h -- example of zlib/gzip stream indexing and random access - * Copyright (C) 2005, 2012, 2018 Mark Adler - * For conditions of distribution and use, see copyright notice in zlib.h - * Version 1.2 14 Oct 2018 Mark Adler */ - -#include -#include "zlib.h" - -/* Access point list. */ -struct deflate_index { - int have; /* number of list entries */ - int gzip; /* 1 if the index is of a gzip file, 0 if it is of a - zlib stream */ - off_t length; /* total length of uncompressed data */ - void *list; /* allocated list of entries */ -}; - -/* Make one entire pass through a zlib or gzip compressed stream and build an - index, with access points about every span bytes of uncompressed output. - gzip files with multiple members are indexed in their entirety. span should - be chosen to balance the speed of random access against the memory - requirements of the list, about 32K bytes per access point. The return value - is the number of access points on success (>= 1), Z_MEM_ERROR for out of - memory, Z_DATA_ERROR for an error in the input file, or Z_ERRNO for a file - read error. On success, *built points to the resulting index. */ -int deflate_index_build(FILE *in, off_t span, struct deflate_index **built); - -/* Deallocate an index built by deflate_index_build() */ -void deflate_index_free(struct deflate_index *index); - -/* Use the index to read len bytes from offset into buf. Return bytes read or - negative for error (Z_DATA_ERROR or Z_MEM_ERROR). If data is requested past - the end of the uncompressed data, then deflate_index_extract() will return a - value less than len, indicating how much was actually read into buf. This - function should not return a data error unless the file was modified since - the index was generated, since deflate_index_build() validated all of the - input. deflate_index_extract() will return Z_ERRNO if there is an error on - reading or seeking the input file. */ -int deflate_index_extract(FILE *in, struct deflate_index *index, off_t offset, - unsigned char *buf, int len); diff --git a/src/zlib/zlib-1.2.13/zlib.3.pdf b/src/zlib/zlib-1.2.13/zlib.3.pdf deleted file mode 100644 index 8132d840c861ea6823b8ec0b41ee5050ea56ff15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19366 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 Zj2jY$Kwc>oL`aYy3cQd@PF)`F{{hl>t`h(N diff --git a/src/zlib/zlib-1.2.13/zlib2ansi b/src/zlib/zlib-1.2.13/zlib2ansi deleted file mode 100755 index 23b2a1d5a..000000000 --- a/src/zlib/zlib-1.2.13/zlib2ansi +++ /dev/null @@ -1,152 +0,0 @@ -#!/usr/bin/perl - -# Transform K&R C function definitions into ANSI equivalent. -# -# Author: Paul Marquess -# Version: 1.0 -# Date: 3 October 2006 - -# TODO -# -# Assumes no function pointer parameters. unless they are typedefed. -# Assumes no literal strings that look like function definitions -# Assumes functions start at the beginning of a line - -use strict; -use warnings; - -local $/; -$_ = <>; - -my $sp = qr{ \s* (?: /\* .*? \*/ )? \s* }x; # assume no nested comments - -my $d1 = qr{ $sp (?: [\w\*\s]+ $sp)* $sp \w+ $sp [\[\]\s]* $sp }x ; -my $decl = qr{ $sp (?: \w+ $sp )+ $d1 }xo ; -my $dList = qr{ $sp $decl (?: $sp , $d1 )* $sp ; $sp }xo ; - - -while (s/^ - ( # Start $1 - ( # Start $2 - .*? # Minimal eat content - ( ^ \w [\w\s\*]+ ) # $3 -- function name - \s* # optional whitespace - ) # $2 - Matched up to before parameter list - - \( \s* # Literal "(" + optional whitespace - ( [^\)]+ ) # $4 - one or more anythings except ")" - \s* \) # optional whitespace surrounding a Literal ")" - - ( (?: $dList )+ ) # $5 - - $sp ^ { # literal "{" at start of line - ) # Remember to $1 - //xsom - ) -{ - my $all = $1 ; - my $prefix = $2; - my $param_list = $4 ; - my $params = $5; - - StripComments($params); - StripComments($param_list); - $param_list =~ s/^\s+//; - $param_list =~ s/\s+$//; - - my $i = 0 ; - my %pList = map { $_ => $i++ } - split /\s*,\s*/, $param_list; - my $pMatch = '(\b' . join('|', keys %pList) . '\b)\W*$' ; - - my @params = split /\s*;\s*/, $params; - my @outParams = (); - foreach my $p (@params) - { - if ($p =~ /,/) - { - my @bits = split /\s*,\s*/, $p; - my $first = shift @bits; - $first =~ s/^\s*//; - push @outParams, $first; - $first =~ /^(\w+\s*)/; - my $type = $1 ; - push @outParams, map { $type . $_ } @bits; - } - else - { - $p =~ s/^\s+//; - push @outParams, $p; - } - } - - - my %tmp = map { /$pMatch/; $_ => $pList{$1} } - @outParams ; - - @outParams = map { " $_" } - sort { $tmp{$a} <=> $tmp{$b} } - @outParams ; - - print $prefix ; - print "(\n" . join(",\n", @outParams) . ")\n"; - print "{" ; - -} - -# Output any trailing code. -print ; -exit 0; - - -sub StripComments -{ - - no warnings; - - # Strip C & C++ comments - # From the perlfaq - $_[0] =~ - - s{ - /\* ## Start of /* ... */ comment - [^*]*\*+ ## Non-* followed by 1-or-more *'s - ( - [^/*][^*]*\*+ - )* ## 0-or-more things which don't start with / - ## but do end with '*' - / ## End of /* ... */ comment - - | ## OR C++ Comment - // ## Start of C++ comment // - [^\n]* ## followed by 0-or-more non end of line characters - - | ## OR various things which aren't comments: - - ( - " ## Start of " ... " string - ( - \\. ## Escaped char - | ## OR - [^"\\] ## Non "\ - )* - " ## End of " ... " string - - | ## OR - - ' ## Start of ' ... ' string - ( - \\. ## Escaped char - | ## OR - [^'\\] ## Non '\ - )* - ' ## End of ' ... ' string - - | ## OR - - . ## Anything other char - [^/"'\\]* ## Chars which doesn't start a comment, string or escape - ) - }{$2}gxs; - -} diff --git a/src/zlib/zlib-1.2.13/CMakeLists.txt b/src/zlib/zlib-1.3/CMakeLists.txt similarity index 99% rename from src/zlib/zlib-1.2.13/CMakeLists.txt rename to src/zlib/zlib-1.3/CMakeLists.txt index b412dc7fe..7f1b69f4a 100644 --- a/src/zlib/zlib-1.2.13/CMakeLists.txt +++ b/src/zlib/zlib-1.3/CMakeLists.txt @@ -1,9 +1,9 @@ -cmake_minimum_required(VERSION 2.4.4) +cmake_minimum_required(VERSION 2.4.4...3.15.0) set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) project(zlib C) -set(VERSION "1.2.13") +set(VERSION "1.3") set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables") set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries") diff --git a/src/zlib/zlib-1.2.13/ChangeLog b/src/zlib/zlib-1.3/ChangeLog similarity index 98% rename from src/zlib/zlib-1.2.13/ChangeLog rename to src/zlib/zlib-1.3/ChangeLog index 457526bc6..8707988ac 100644 --- a/src/zlib/zlib-1.2.13/ChangeLog +++ b/src/zlib/zlib-1.3/ChangeLog @@ -1,6 +1,24 @@ ChangeLog file for zlib +Changes in 1.3 (18 Aug 2023) +- Remove K&R function definitions and zlib2ansi +- Fix bug in deflateBound() for level 0 and memLevel 9 +- Fix bug when gzungetc() is used immediately after gzopen() +- Fix bug when using gzflush() with a very small buffer +- Fix crash when gzsetparams() attempted for transparent write +- Fix test/example.c to work with FORCE_STORED +- Rewrite of zran in examples (see zran.c version history) +- Fix minizip to allow it to open an empty zip file +- Fix reading disk number start on zip64 files in minizip +- Fix logic error in minizip argument processing +- Add minizip testing to Makefile +- Read multiple bytes instead of byte-by-byte in minizip unzip.c +- Add memory sanitizer to configure (--memory) +- Various portability improvements +- Various documentation improvements +- Various spelling and typo corrections + Changes in 1.2.13 (13 Oct 2022) - Fix configure issue that discarded provided CC definition - Correct incorrect inputs provided to the CRC functions @@ -1445,7 +1463,7 @@ Changes in 0.99 (27 Jan 96) - fix typo in Make_vms.com (f$trnlnm -> f$getsyi) - in fcalloc, normalize pointer if size > 65520 bytes - don't use special fcalloc for 32 bit Borland C++ -- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc... +- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc. - use Z_BINARY instead of BINARY - document that gzclose after gzdopen will close the file - allow "a" as mode in gzopen diff --git a/src/zlib/zlib-1.2.13/FAQ b/src/zlib/zlib-1.3/FAQ similarity index 99% rename from src/zlib/zlib-1.2.13/FAQ rename to src/zlib/zlib-1.3/FAQ index 99b7cf92e..55f1cdc22 100644 --- a/src/zlib/zlib-1.2.13/FAQ +++ b/src/zlib/zlib-1.3/FAQ @@ -4,7 +4,7 @@ If your question is not there, please check the zlib home page http://zlib.net/ which may have more recent information. -The lastest zlib FAQ is at http://zlib.net/zlib_faq.html +The latest zlib FAQ is at http://zlib.net/zlib_faq.html 1. Is zlib Y2K-compliant? diff --git a/src/zlib/zlib-1.2.13/INDEX b/src/zlib/zlib-1.3/INDEX similarity index 100% rename from src/zlib/zlib-1.2.13/INDEX rename to src/zlib/zlib-1.3/INDEX diff --git a/src/zlib/zlib-1.2.13/LICENSE b/src/zlib/zlib-1.3/LICENSE similarity index 100% rename from src/zlib/zlib-1.2.13/LICENSE rename to src/zlib/zlib-1.3/LICENSE diff --git a/src/zlib/zlib-1.2.13/Makefile b/src/zlib/zlib-1.3/Makefile similarity index 100% rename from src/zlib/zlib-1.2.13/Makefile rename to src/zlib/zlib-1.3/Makefile diff --git a/src/zlib/zlib-1.2.13/Makefile.in b/src/zlib/zlib-1.3/Makefile.in similarity index 98% rename from src/zlib/zlib-1.2.13/Makefile.in rename to src/zlib/zlib-1.3/Makefile.in index 7d2713f4c..34d3cd722 100644 --- a/src/zlib/zlib-1.2.13/Makefile.in +++ b/src/zlib/zlib-1.3/Makefile.in @@ -28,7 +28,7 @@ CPP=$(CC) -E STATICLIB=libz.a SHAREDLIB=libz.so -SHAREDLIBV=libz.so.1.2.13 +SHAREDLIBV=libz.so.1.3 SHAREDLIBM=libz.so.1 LIBS=$(STATICLIB) $(SHAREDLIBV) @@ -359,8 +359,14 @@ zconf.h.cmakein: $(SRCDIR)zconf.h.in zconf: $(SRCDIR)zconf.h.in cp -p $(SRCDIR)zconf.h.in zconf.h +minizip-test: static + cd contrib/minizip && { CFLAGS="$(CFLAGS)" $(MAKE) test ; cd ../.. ; } + +minizip-clean: + cd contrib/minizip && { $(MAKE) clean ; cd ../.. ; } + mostlyclean: clean -clean: +clean: minizip-clean rm -f *.o *.lo *~ \ example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \ example64$(EXE) minigzip64$(EXE) \ diff --git a/src/zlib/zlib-1.2.13/README b/src/zlib/zlib-1.3/README similarity index 87% rename from src/zlib/zlib-1.2.13/README rename to src/zlib/zlib-1.3/README index ba34d1894..e02fc5aa2 100644 --- a/src/zlib/zlib-1.2.13/README +++ b/src/zlib/zlib-1.3/README @@ -1,6 +1,6 @@ ZLIB DATA COMPRESSION LIBRARY -zlib 1.2.13 is a general purpose data compression library. All the code is +zlib 1.3 is a general purpose data compression library. All the code is thread safe. The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and @@ -29,18 +29,17 @@ PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help. Mark Nelson wrote an article about zlib for the Jan. 1997 issue of Dr. Dobb's Journal; a copy of the article is available at -http://marknelson.us/1997/01/01/zlib-engine/ . +https://marknelson.us/posts/1997/01/01/zlib-engine.html . -The changes made in version 1.2.13 are documented in the file ChangeLog. +The changes made in version 1.3 are documented in the file ChangeLog. Unsupported third party contributions are provided in directory contrib/ . -zlib is available in Java using the java.util.zip package, documented at -http://java.sun.com/developer/technicalArticles/Programming/compression/ . +zlib is available in Java using the java.util.zip package. Follow the API +Documentation link at: https://docs.oracle.com/search/?q=java.util.zip . -A Perl interface to zlib written by Paul Marquess is available -at CPAN (Comprehensive Perl Archive Network) sites, including -http://search.cpan.org/~pmqs/IO-Compress-Zlib/ . +A Perl interface to zlib and bzip2 written by Paul Marquess +can be found at https://github.com/pmqs/IO-Compress . A Python interface to zlib written by A.M. Kuchling is available in Python 1.5 and later versions, see @@ -64,7 +63,7 @@ Notes for some targets: - zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works when compiled with cc. -- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is +- On Digital Unix 4.0D (formerly OSF/1) on AlphaServer, the cc option -std1 is necessary to get gzprintf working correctly. This is done by configure. - zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with @@ -84,7 +83,7 @@ Acknowledgments: Copyright notice: - (C) 1995-2022 Jean-loup Gailly and Mark Adler + (C) 1995-2023 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/src/zlib/zlib-1.2.13/adler32.c b/src/zlib/zlib-1.3/adler32.c similarity index 88% rename from src/zlib/zlib-1.2.13/adler32.c rename to src/zlib/zlib-1.3/adler32.c index d0be4380a..04b81d29b 100644 --- a/src/zlib/zlib-1.2.13/adler32.c +++ b/src/zlib/zlib-1.3/adler32.c @@ -7,8 +7,6 @@ #include "zutil.h" -local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2)); - #define BASE 65521U /* largest prime smaller than 65536 */ #define NMAX 5552 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ @@ -60,11 +58,7 @@ local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2)); #endif /* ========================================================================= */ -uLong ZEXPORT adler32_z(adler, buf, len) - uLong adler; - const Bytef *buf; - z_size_t len; -{ +uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, z_size_t len) { unsigned long sum2; unsigned n; @@ -131,20 +125,12 @@ uLong ZEXPORT adler32_z(adler, buf, len) } /* ========================================================================= */ -uLong ZEXPORT adler32(adler, buf, len) - uLong adler; - const Bytef *buf; - uInt len; -{ +uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len) { return adler32_z(adler, buf, len); } /* ========================================================================= */ -local uLong adler32_combine_(adler1, adler2, len2) - uLong adler1; - uLong adler2; - z_off64_t len2; -{ +local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2) { unsigned long sum1; unsigned long sum2; unsigned rem; @@ -169,18 +155,10 @@ local uLong adler32_combine_(adler1, adler2, len2) } /* ========================================================================= */ -uLong ZEXPORT adler32_combine(adler1, adler2, len2) - uLong adler1; - uLong adler2; - z_off_t len2; -{ +uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, z_off_t len2) { return adler32_combine_(adler1, adler2, len2); } -uLong ZEXPORT adler32_combine64(adler1, adler2, len2) - uLong adler1; - uLong adler2; - z_off64_t len2; -{ +uLong ZEXPORT adler32_combine64(uLong adler1, uLong adler2, z_off64_t len2) { return adler32_combine_(adler1, adler2, len2); } diff --git a/src/zlib/zlib-1.2.13/amiga/Makefile.pup b/src/zlib/zlib-1.3/amiga/Makefile.pup similarity index 100% rename from src/zlib/zlib-1.2.13/amiga/Makefile.pup rename to src/zlib/zlib-1.3/amiga/Makefile.pup diff --git a/src/zlib/zlib-1.2.13/amiga/Makefile.sas b/src/zlib/zlib-1.3/amiga/Makefile.sas similarity index 100% rename from src/zlib/zlib-1.2.13/amiga/Makefile.sas rename to src/zlib/zlib-1.3/amiga/Makefile.sas diff --git a/src/zlib/zlib-1.2.13/compress.c b/src/zlib/zlib-1.3/compress.c similarity index 86% rename from src/zlib/zlib-1.2.13/compress.c rename to src/zlib/zlib-1.3/compress.c index 2ad5326c1..f43bacf7a 100644 --- a/src/zlib/zlib-1.2.13/compress.c +++ b/src/zlib/zlib-1.3/compress.c @@ -19,13 +19,8 @@ memory, Z_BUF_ERROR if there was not enough room in the output buffer, Z_STREAM_ERROR if the level parameter is invalid. */ -int ZEXPORT compress2(dest, destLen, source, sourceLen, level) - Bytef *dest; - uLongf *destLen; - const Bytef *source; - uLong sourceLen; - int level; -{ +int ZEXPORT compress2(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong sourceLen, int level) { z_stream stream; int err; const uInt max = (uInt)-1; @@ -65,12 +60,8 @@ int ZEXPORT compress2(dest, destLen, source, sourceLen, level) /* =========================================================================== */ -int ZEXPORT compress(dest, destLen, source, sourceLen) - Bytef *dest; - uLongf *destLen; - const Bytef *source; - uLong sourceLen; -{ +int ZEXPORT compress(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong sourceLen) { return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); } @@ -78,9 +69,7 @@ int ZEXPORT compress(dest, destLen, source, sourceLen) If the default memLevel or windowBits for deflateInit() is changed, then this function needs to be updated. */ -uLong ZEXPORT compressBound(sourceLen) - uLong sourceLen; -{ +uLong ZEXPORT compressBound(uLong sourceLen) { return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + (sourceLen >> 25) + 13; } diff --git a/src/zlib/zlib-1.2.13/configure b/src/zlib/zlib-1.3/configure similarity index 97% rename from src/zlib/zlib-1.2.13/configure rename to src/zlib/zlib-1.3/configure index fa4d5daab..cc867c944 100755 --- a/src/zlib/zlib-1.2.13/configure +++ b/src/zlib/zlib-1.3/configure @@ -44,8 +44,6 @@ STATICLIB=libz.a # extract zlib version numbers from zlib.h VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < ${SRCDIR}zlib.h` -VER3=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\\.[0-9]*\).*/\1/p' < ${SRCDIR}zlib.h` -VER2=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\)\\..*/\1/p' < ${SRCDIR}zlib.h` VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < ${SRCDIR}zlib.h` # establish commands for library building @@ -90,7 +88,8 @@ build64=0 gcc=0 warn=0 debug=0 -sanitize=0 +address=0 +memory=0 old_cc="$CC" old_cflags="$CFLAGS" OBJC='$(OBJZ) $(OBJG)' @@ -102,7 +101,7 @@ leave() if test "$*" != "0"; then echo "** $0 aborting." | tee -a configure.log fi - rm -f $test.[co] $test $test$shared_ext $test.gcno ./--version + rm -rf $test.[co] $test $test$shared_ext $test.gcno $test.dSYM ./--version echo -------------------- >> configure.log echo >> configure.log echo >> configure.log @@ -141,7 +140,9 @@ case "$1" in -c* | --const) zconst=1; shift ;; -w* | --warn) warn=1; shift ;; -d* | --debug) debug=1; shift ;; - --sanitize) sanitize=1; shift ;; + --sanitize) address=1; shift ;; + --address) address=1; shift ;; + --memory) memory=1; shift ;; *) echo "unknown option: $1" | tee -a configure.log echo "$0 --help for help" | tee -a configure.log @@ -211,8 +212,11 @@ if test "$gcc" -eq 1 && ($cc -c $test.c) >> configure.log 2>&1; then CFLAGS="${CFLAGS} -Wall -Wextra" fi fi - if test $sanitize -eq 1; then - CFLAGS="${CFLAGS} -g -fsanitize=address" + if test $address -eq 1; then + CFLAGS="${CFLAGS} -g -fsanitize=address -fno-omit-frame-pointer" + fi + if test $memory -eq 1; then + CFLAGS="${CFLAGS} -g -fsanitize=memory -fno-omit-frame-pointer" fi if test $debug -eq 1; then CFLAGS="${CFLAGS} -DZLIB_DEBUG" @@ -259,8 +263,10 @@ if test "$gcc" -eq 1 && ($cc -c $test.c) >> configure.log 2>&1; then SHAREDLIB=libz$shared_ext SHAREDLIBV=libz.$VER$shared_ext SHAREDLIBM=libz.$VER1$shared_ext - LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER3"} - if libtool -V 2>&1 | grep Apple > /dev/null; then + LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER"} + if "${CROSS_PREFIX}libtool" -V 2>&1 | grep Apple > /dev/null; then + AR="${CROSS_PREFIX}libtool" + elif libtool -V 2>&1 | grep Apple > /dev/null; then AR="libtool" else AR="/usr/bin/libtool" @@ -860,7 +866,7 @@ echo prefix = $prefix >> configure.log echo sharedlibdir = $sharedlibdir >> configure.log echo uname = $uname >> configure.log -# udpate Makefile with the configure results +# update Makefile with the configure results sed < ${SRCDIR}Makefile.in " /^CC *=/s#=.*#=$CC# /^CFLAGS *=/s#=.*#=$CFLAGS# diff --git a/src/zlib/zlib-1.2.13/contrib/README.contrib b/src/zlib/zlib-1.3/contrib/README.contrib similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/README.contrib rename to src/zlib/zlib-1.3/contrib/README.contrib diff --git a/src/zlib/zlib-1.2.13/contrib/ada/buffer_demo.adb b/src/zlib/zlib-1.3/contrib/ada/buffer_demo.adb similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/ada/buffer_demo.adb rename to src/zlib/zlib-1.3/contrib/ada/buffer_demo.adb diff --git a/src/zlib/zlib-1.2.13/contrib/ada/mtest.adb b/src/zlib/zlib-1.3/contrib/ada/mtest.adb similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/ada/mtest.adb rename to src/zlib/zlib-1.3/contrib/ada/mtest.adb diff --git a/src/zlib/zlib-1.2.13/contrib/ada/read.adb b/src/zlib/zlib-1.3/contrib/ada/read.adb similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/ada/read.adb rename to src/zlib/zlib-1.3/contrib/ada/read.adb diff --git a/src/zlib/zlib-1.2.13/contrib/ada/readme.txt b/src/zlib/zlib-1.3/contrib/ada/readme.txt similarity index 93% rename from src/zlib/zlib-1.2.13/contrib/ada/readme.txt rename to src/zlib/zlib-1.3/contrib/ada/readme.txt index ce4d2cadf..efdd639fb 100644 --- a/src/zlib/zlib-1.2.13/contrib/ada/readme.txt +++ b/src/zlib/zlib-1.3/contrib/ada/readme.txt @@ -8,8 +8,8 @@ It provides Ada-style access to the ZLib C library. Here are the main changes since ZLib.Ada 1.2: -- Attension: ZLib.Read generic routine have a initialization requirement - for Read_Last parameter now. It is a bit incompartible with previous version, +- Attention: ZLib.Read generic routine have a initialization requirement + for Read_Last parameter now. It is a bit incompatible with previous version, but extends functionality, we could use new parameters Allow_Read_Some and Flush now. diff --git a/src/zlib/zlib-1.2.13/contrib/ada/test.adb b/src/zlib/zlib-1.3/contrib/ada/test.adb similarity index 99% rename from src/zlib/zlib-1.2.13/contrib/ada/test.adb rename to src/zlib/zlib-1.3/contrib/ada/test.adb index 90773acfa..8b3503150 100644 --- a/src/zlib/zlib-1.2.13/contrib/ada/test.adb +++ b/src/zlib/zlib-1.3/contrib/ada/test.adb @@ -65,12 +65,12 @@ procedure Test is Time_Stamp : Ada.Calendar.Time; procedure Generate_File; - -- Generate file of spetsified size with some random data. + -- Generate file of specified size with some random data. -- The random data is repeatable, for the good compression. procedure Compare_Streams (Left, Right : in out Root_Stream_Type'Class); - -- The procedure compearing data in 2 streams. + -- The procedure comparing data in 2 streams. -- It is for compare data before and after compression/decompression. procedure Compare_Files (Left, Right : String); diff --git a/src/zlib/zlib-1.2.13/contrib/ada/zlib-streams.adb b/src/zlib/zlib-1.3/contrib/ada/zlib-streams.adb similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/ada/zlib-streams.adb rename to src/zlib/zlib-1.3/contrib/ada/zlib-streams.adb diff --git a/src/zlib/zlib-1.2.13/contrib/ada/zlib-streams.ads b/src/zlib/zlib-1.3/contrib/ada/zlib-streams.ads similarity index 98% rename from src/zlib/zlib-1.2.13/contrib/ada/zlib-streams.ads rename to src/zlib/zlib-1.3/contrib/ada/zlib-streams.ads index 8e26cd450..af136933e 100644 --- a/src/zlib/zlib-1.2.13/contrib/ada/zlib-streams.ads +++ b/src/zlib/zlib-1.3/contrib/ada/zlib-streams.ads @@ -62,7 +62,7 @@ package ZLib.Streams is := Default_Buffer_Size; Write_Buffer_Size : in Ada.Streams.Stream_Element_Offset := Default_Buffer_Size); - -- Create the Comression/Decompression stream. + -- Create the Compression/Decompression stream. -- If mode is In_Stream then Write operation is disabled. -- If mode is Out_Stream then Read operation is disabled. diff --git a/src/zlib/zlib-1.2.13/contrib/ada/zlib-thin.adb b/src/zlib/zlib-1.3/contrib/ada/zlib-thin.adb similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/ada/zlib-thin.adb rename to src/zlib/zlib-1.3/contrib/ada/zlib-thin.adb diff --git a/src/zlib/zlib-1.2.13/contrib/ada/zlib-thin.ads b/src/zlib/zlib-1.3/contrib/ada/zlib-thin.ads similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/ada/zlib-thin.ads rename to src/zlib/zlib-1.3/contrib/ada/zlib-thin.ads diff --git a/src/zlib/zlib-1.2.13/contrib/ada/zlib.adb b/src/zlib/zlib-1.3/contrib/ada/zlib.adb similarity index 99% rename from src/zlib/zlib-1.2.13/contrib/ada/zlib.adb rename to src/zlib/zlib-1.3/contrib/ada/zlib.adb index 8b6fd686a..c1abe791d 100644 --- a/src/zlib/zlib-1.2.13/contrib/ada/zlib.adb +++ b/src/zlib/zlib-1.3/contrib/ada/zlib.adb @@ -204,7 +204,7 @@ package body ZLib is end if; -- We allow ZLib to make header only in case of default header type. - -- Otherwise we would either do header by ourselfs, or do not do + -- Otherwise we would either do header by ourselves, or do not do -- header at all. if Header = None or else Header = GZip then diff --git a/src/zlib/zlib-1.2.13/contrib/ada/zlib.ads b/src/zlib/zlib-1.3/contrib/ada/zlib.ads similarity index 99% rename from src/zlib/zlib-1.2.13/contrib/ada/zlib.ads rename to src/zlib/zlib-1.3/contrib/ada/zlib.ads index 79ffc4095..81aaf1b6a 100644 --- a/src/zlib/zlib-1.2.13/contrib/ada/zlib.ads +++ b/src/zlib/zlib-1.3/contrib/ada/zlib.ads @@ -114,7 +114,7 @@ package ZLib is -- Compression strategy constants -- ------------------------------------ - -- RLE stategy could be used only in version 1.2.0 and later. + -- RLE strategy could be used only in version 1.2.0 and later. Filtered : constant Strategy_Type; Huffman_Only : constant Strategy_Type; diff --git a/src/zlib/zlib-1.2.13/contrib/ada/zlib.gpr b/src/zlib/zlib-1.3/contrib/ada/zlib.gpr similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/ada/zlib.gpr rename to src/zlib/zlib-1.3/contrib/ada/zlib.gpr diff --git a/src/zlib/zlib-1.2.13/contrib/blast/Makefile b/src/zlib/zlib-1.3/contrib/blast/Makefile similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/blast/Makefile rename to src/zlib/zlib-1.3/contrib/blast/Makefile diff --git a/src/zlib/zlib-1.2.13/contrib/blast/README b/src/zlib/zlib-1.3/contrib/blast/README similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/blast/README rename to src/zlib/zlib-1.3/contrib/blast/README diff --git a/src/zlib/zlib-1.2.13/contrib/blast/blast.c b/src/zlib/zlib-1.3/contrib/blast/blast.c similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/blast/blast.c rename to src/zlib/zlib-1.3/contrib/blast/blast.c diff --git a/src/zlib/zlib-1.2.13/contrib/blast/blast.h b/src/zlib/zlib-1.3/contrib/blast/blast.h similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/blast/blast.h rename to src/zlib/zlib-1.3/contrib/blast/blast.h diff --git a/src/zlib/zlib-1.2.13/contrib/blast/test.pk b/src/zlib/zlib-1.3/contrib/blast/test.pk similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/blast/test.pk rename to src/zlib/zlib-1.3/contrib/blast/test.pk diff --git a/src/zlib/zlib-1.2.13/contrib/blast/test.txt b/src/zlib/zlib-1.3/contrib/blast/test.txt similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/blast/test.txt rename to src/zlib/zlib-1.3/contrib/blast/test.txt diff --git a/src/zlib/zlib-1.2.13/contrib/delphi/ZLib.pas b/src/zlib/zlib-1.3/contrib/delphi/ZLib.pas similarity index 99% rename from src/zlib/zlib-1.2.13/contrib/delphi/ZLib.pas rename to src/zlib/zlib-1.3/contrib/delphi/ZLib.pas index 8be5fa22c..814ffa670 100644 --- a/src/zlib/zlib-1.2.13/contrib/delphi/ZLib.pas +++ b/src/zlib/zlib-1.3/contrib/delphi/ZLib.pas @@ -152,7 +152,7 @@ procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; const OutBuf: Pointer; BufSize: Integer); const - zlib_version = '1.2.13'; + zlib_version = '1.3.0'; type EZlibError = class(Exception); diff --git a/src/zlib/zlib-1.2.13/contrib/delphi/ZLibConst.pas b/src/zlib/zlib-1.3/contrib/delphi/ZLibConst.pas similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/delphi/ZLibConst.pas rename to src/zlib/zlib-1.3/contrib/delphi/ZLibConst.pas diff --git a/src/zlib/zlib-1.2.13/contrib/delphi/readme.txt b/src/zlib/zlib-1.3/contrib/delphi/readme.txt similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/delphi/readme.txt rename to src/zlib/zlib-1.3/contrib/delphi/readme.txt diff --git a/src/zlib/zlib-1.2.13/contrib/delphi/zlibd32.mak b/src/zlib/zlib-1.3/contrib/delphi/zlibd32.mak similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/delphi/zlibd32.mak rename to src/zlib/zlib-1.3/contrib/delphi/zlibd32.mak diff --git a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib.build b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib.build similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib.build rename to src/zlib/zlib-1.3/contrib/dotzlib/DotZLib.build diff --git a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib.chm b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib.chm similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib.chm rename to src/zlib/zlib-1.3/contrib/dotzlib/DotZLib.chm diff --git a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib.sln b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib.sln similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib.sln rename to src/zlib/zlib-1.3/contrib/dotzlib/DotZLib.sln diff --git a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/AssemblyInfo.cs b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/AssemblyInfo.cs similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/AssemblyInfo.cs rename to src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/AssemblyInfo.cs diff --git a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/ChecksumImpl.cs b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/ChecksumImpl.cs similarity index 97% rename from src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/ChecksumImpl.cs rename to src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/ChecksumImpl.cs index 788b2fcec..c1230bf03 100644 --- a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/ChecksumImpl.cs +++ b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/ChecksumImpl.cs @@ -61,7 +61,7 @@ public ChecksumGeneratorBase(uint initialValue) /// The sum of offset and count is larger than the length of data /// data is a null reference /// Offset or count is negative. - /// All the other Update methods are implmeneted in terms of this one. + /// All the other Update methods are implemented in terms of this one. /// This is therefore the only method a derived class has to implement public abstract void Update(byte[] data, int offset, int count); diff --git a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/CircularBuffer.cs b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/CircularBuffer.cs similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/CircularBuffer.cs rename to src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/CircularBuffer.cs diff --git a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/CodecBase.cs b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/CodecBase.cs similarity index 96% rename from src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/CodecBase.cs rename to src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/CodecBase.cs index 42e6da3a5..c4bc8b879 100644 --- a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/CodecBase.cs +++ b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/CodecBase.cs @@ -139,7 +139,7 @@ public void Dispose() /// This must be implemented by a derived class protected abstract void CleanUp(); - // performs the release of the handles and calls the dereived CleanUp() + // performs the release of the handles and calls the derived CleanUp() private void CleanUp(bool isDisposing) { if (!_isDisposed) @@ -160,7 +160,7 @@ private void CleanUp(bool isDisposing) #region Helper methods ///

    - /// Copies a number of bytes to the internal codec buffer - ready for proccesing + /// Copies a number of bytes to the internal codec buffer - ready for processing /// /// The byte array that contains the data to copy /// The index of the first byte to copy diff --git a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/Deflater.cs b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/Deflater.cs similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/Deflater.cs rename to src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/Deflater.cs diff --git a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/DotZLib.cs b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/DotZLib.cs similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/DotZLib.cs rename to src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/DotZLib.cs diff --git a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/DotZLib.csproj b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/DotZLib.csproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/DotZLib.csproj rename to src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/DotZLib.csproj diff --git a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/GZipStream.cs b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/GZipStream.cs similarity index 96% rename from src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/GZipStream.cs rename to src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/GZipStream.cs index b161300b1..58091d3a3 100644 --- a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/GZipStream.cs +++ b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/GZipStream.cs @@ -246,7 +246,7 @@ public override void SetLength(long value) } /// - /// Not suppported. + /// Not supported. /// /// /// @@ -268,7 +268,7 @@ public override void Flush() } /// - /// Gets/sets the current position in the GZipStream. Not suppported. + /// Gets/sets the current position in the GZipStream. Not supported. /// /// In this implementation this property is not supported /// Always thrown @@ -285,7 +285,7 @@ public override long Position } /// - /// Gets the size of the stream. Not suppported. + /// Gets the size of the stream. Not supported. /// /// In this implementation this property is not supported /// Always thrown diff --git a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/Inflater.cs b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/Inflater.cs similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/Inflater.cs rename to src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/Inflater.cs diff --git a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/UnitTests.cs b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/UnitTests.cs similarity index 95% rename from src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/UnitTests.cs rename to src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/UnitTests.cs index 16a0ebb07..c5fce221a 100644 --- a/src/zlib/zlib-1.2.13/contrib/dotzlib/DotZLib/UnitTests.cs +++ b/src/zlib/zlib-1.3/contrib/dotzlib/DotZLib/UnitTests.cs @@ -156,7 +156,7 @@ public class InfoTests public void Info_Version() { Info info = new Info(); - Assert.AreEqual("1.2.13", Info.Version); + Assert.AreEqual("1.3.0", Info.Version); Assert.AreEqual(32, info.SizeOfUInt); Assert.AreEqual(32, info.SizeOfULong); Assert.AreEqual(32, info.SizeOfPointer); diff --git a/src/zlib/zlib-1.2.13/contrib/dotzlib/LICENSE_1_0.txt b/src/zlib/zlib-1.3/contrib/dotzlib/LICENSE_1_0.txt similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/dotzlib/LICENSE_1_0.txt rename to src/zlib/zlib-1.3/contrib/dotzlib/LICENSE_1_0.txt diff --git a/src/zlib/zlib-1.2.13/contrib/dotzlib/readme.txt b/src/zlib/zlib-1.3/contrib/dotzlib/readme.txt similarity index 94% rename from src/zlib/zlib-1.2.13/contrib/dotzlib/readme.txt rename to src/zlib/zlib-1.3/contrib/dotzlib/readme.txt index b2395720d..47454fce3 100644 --- a/src/zlib/zlib-1.2.13/contrib/dotzlib/readme.txt +++ b/src/zlib/zlib-1.3/contrib/dotzlib/readme.txt @@ -36,7 +36,7 @@ Build instructions: in the same directory as the DotZLib.build file. You can define 2 properties on the nant command-line to control the build: debug={true|false} to toggle between release/debug builds (default=true). - nunit={true|false} to include or esclude unit tests (default=true). + nunit={true|false} to include or exclude unit tests (default=true). Also the target clean will remove binaries. Output file (DotZLib.dll) will be found in either ./DotZLib/bin/release or ./DotZLib/bin/debug, depending on whether you are building the release diff --git a/src/zlib/zlib-1.2.13/contrib/gcc_gvmat64/gvmat64.S b/src/zlib/zlib-1.3/contrib/gcc_gvmat64/gvmat64.S similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/gcc_gvmat64/gvmat64.S rename to src/zlib/zlib-1.3/contrib/gcc_gvmat64/gvmat64.S diff --git a/src/zlib/zlib-1.2.13/contrib/infback9/README b/src/zlib/zlib-1.3/contrib/infback9/README similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/infback9/README rename to src/zlib/zlib-1.3/contrib/infback9/README diff --git a/src/zlib/zlib-1.2.13/contrib/infback9/infback9.c b/src/zlib/zlib-1.3/contrib/infback9/infback9.c similarity index 98% rename from src/zlib/zlib-1.2.13/contrib/infback9/infback9.c rename to src/zlib/zlib-1.3/contrib/infback9/infback9.c index 05fb3e338..742a39214 100644 --- a/src/zlib/zlib-1.2.13/contrib/infback9/infback9.c +++ b/src/zlib/zlib-1.3/contrib/infback9/infback9.c @@ -16,12 +16,8 @@ window is a user-supplied window and output buffer that is 64K bytes. */ -int ZEXPORT inflateBack9Init_(strm, window, version, stream_size) -z_stream FAR *strm; -unsigned char FAR *window; -const char *version; -int stream_size; -{ +int ZEXPORT inflateBack9Init_(z_stream FAR *strm, unsigned char FAR *window, + const char *version, int stream_size) { struct inflate_state FAR *state; if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || @@ -51,8 +47,7 @@ int stream_size; #ifdef MAKEFIXED #include -void makefixed9(void) -{ +void makefixed9(void) { unsigned sym, bits, low, size; code *next, *lenfix, *distfix; struct inflate_state state; @@ -214,13 +209,8 @@ void makefixed9(void) inflateBack() can also return Z_STREAM_ERROR if the input parameters are not correct, i.e. strm is Z_NULL or the state was not initialized. */ -int ZEXPORT inflateBack9(strm, in, in_desc, out, out_desc) -z_stream FAR *strm; -in_func in; -void FAR *in_desc; -out_func out; -void FAR *out_desc; -{ +int ZEXPORT inflateBack9(z_stream FAR *strm, in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc) { struct inflate_state FAR *state; z_const unsigned char FAR *next; /* next input */ unsigned char FAR *put; /* next output */ @@ -603,9 +593,7 @@ void FAR *out_desc; return ret; } -int ZEXPORT inflateBack9End(strm) -z_stream FAR *strm; -{ +int ZEXPORT inflateBack9End(z_stream FAR *strm) { if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) return Z_STREAM_ERROR; ZFREE(strm, strm->state); diff --git a/src/zlib/zlib-1.2.13/contrib/infback9/infback9.h b/src/zlib/zlib-1.3/contrib/infback9/infback9.h similarity index 68% rename from src/zlib/zlib-1.2.13/contrib/infback9/infback9.h rename to src/zlib/zlib-1.3/contrib/infback9/infback9.h index 1073c0a38..8371b4ec7 100644 --- a/src/zlib/zlib-1.2.13/contrib/infback9/infback9.h +++ b/src/zlib/zlib-1.3/contrib/infback9/infback9.h @@ -20,14 +20,14 @@ extern "C" { #endif -ZEXTERN int ZEXPORT inflateBack9 OF((z_stream FAR *strm, - in_func in, void FAR *in_desc, - out_func out, void FAR *out_desc)); -ZEXTERN int ZEXPORT inflateBack9End OF((z_stream FAR *strm)); -ZEXTERN int ZEXPORT inflateBack9Init_ OF((z_stream FAR *strm, - unsigned char FAR *window, - const char *version, - int stream_size)); +ZEXTERN int ZEXPORT inflateBack9(z_stream FAR *strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc); +ZEXTERN int ZEXPORT inflateBack9End(z_stream FAR *strm); +ZEXTERN int ZEXPORT inflateBack9Init_(z_stream FAR *strm, + unsigned char FAR *window, + const char *version, + int stream_size); #define inflateBack9Init(strm, window) \ inflateBack9Init_((strm), (window), \ ZLIB_VERSION, sizeof(z_stream)) diff --git a/src/zlib/zlib-1.2.13/contrib/infback9/inffix9.h b/src/zlib/zlib-1.3/contrib/infback9/inffix9.h similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/infback9/inffix9.h rename to src/zlib/zlib-1.3/contrib/infback9/inffix9.h diff --git a/src/zlib/zlib-1.2.13/contrib/infback9/inflate9.h b/src/zlib/zlib-1.3/contrib/infback9/inflate9.h similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/infback9/inflate9.h rename to src/zlib/zlib-1.3/contrib/infback9/inflate9.h diff --git a/src/zlib/zlib-1.2.13/contrib/infback9/inftree9.c b/src/zlib/zlib-1.3/contrib/infback9/inftree9.c similarity index 97% rename from src/zlib/zlib-1.2.13/contrib/infback9/inftree9.c rename to src/zlib/zlib-1.3/contrib/infback9/inftree9.c index 10827a6aa..dc38f24de 100644 --- a/src/zlib/zlib-1.2.13/contrib/infback9/inftree9.c +++ b/src/zlib/zlib-1.3/contrib/infback9/inftree9.c @@ -1,5 +1,5 @@ /* inftree9.c -- generate Huffman trees for efficient decoding - * Copyright (C) 1995-2022 Mark Adler + * Copyright (C) 1995-2023 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -9,7 +9,7 @@ #define MAXBITS 15 const char inflate9_copyright[] = - " inflate9 1.2.13 Copyright 1995-2022 Mark Adler "; + " inflate9 1.3 Copyright 1995-2023 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -29,14 +29,9 @@ const char inflate9_copyright[] = table index bits. It will differ if the request is greater than the longest code or if it is less than the shortest code. */ -int inflate_table9(type, lens, codes, table, bits, work) -codetype type; -unsigned short FAR *lens; -unsigned codes; -code FAR * FAR *table; -unsigned FAR *bits; -unsigned short FAR *work; -{ +int inflate_table9(codetype type, unsigned short FAR *lens, unsigned codes, + code FAR * FAR *table, unsigned FAR *bits, + unsigned short FAR *work) { unsigned len; /* a code's length in bits */ unsigned sym; /* index of code symbols */ unsigned min, max; /* minimum and maximum code lengths */ @@ -64,7 +59,7 @@ unsigned short FAR *work; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132, - 133, 133, 133, 133, 144, 194, 65}; + 133, 133, 133, 133, 144, 198, 203}; static const unsigned short dbase[32] = { /* Distance codes 0..31 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, diff --git a/src/zlib/zlib-1.2.13/contrib/infback9/inftree9.h b/src/zlib/zlib-1.3/contrib/infback9/inftree9.h similarity index 92% rename from src/zlib/zlib-1.2.13/contrib/infback9/inftree9.h rename to src/zlib/zlib-1.3/contrib/infback9/inftree9.h index 3b394978e..2c1252f57 100644 --- a/src/zlib/zlib-1.2.13/contrib/infback9/inftree9.h +++ b/src/zlib/zlib-1.3/contrib/infback9/inftree9.h @@ -56,6 +56,6 @@ typedef enum { DISTS } codetype; -extern int inflate_table9 OF((codetype type, unsigned short FAR *lens, - unsigned codes, code FAR * FAR *table, - unsigned FAR *bits, unsigned short FAR *work)); +extern int inflate_table9(codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work); diff --git a/src/zlib/zlib-1.2.13/contrib/iostream/test.cpp b/src/zlib/zlib-1.3/contrib/iostream/test.cpp similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/iostream/test.cpp rename to src/zlib/zlib-1.3/contrib/iostream/test.cpp diff --git a/src/zlib/zlib-1.2.13/contrib/iostream/zfstream.cpp b/src/zlib/zlib-1.3/contrib/iostream/zfstream.cpp similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/iostream/zfstream.cpp rename to src/zlib/zlib-1.3/contrib/iostream/zfstream.cpp diff --git a/src/zlib/zlib-1.2.13/contrib/iostream/zfstream.h b/src/zlib/zlib-1.3/contrib/iostream/zfstream.h similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/iostream/zfstream.h rename to src/zlib/zlib-1.3/contrib/iostream/zfstream.h diff --git a/src/zlib/zlib-1.2.13/contrib/iostream2/zstream.h b/src/zlib/zlib-1.3/contrib/iostream2/zstream.h similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/iostream2/zstream.h rename to src/zlib/zlib-1.3/contrib/iostream2/zstream.h diff --git a/src/zlib/zlib-1.2.13/contrib/iostream2/zstream_test.cpp b/src/zlib/zlib-1.3/contrib/iostream2/zstream_test.cpp similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/iostream2/zstream_test.cpp rename to src/zlib/zlib-1.3/contrib/iostream2/zstream_test.cpp diff --git a/src/zlib/zlib-1.2.13/contrib/iostream3/README b/src/zlib/zlib-1.3/contrib/iostream3/README similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/iostream3/README rename to src/zlib/zlib-1.3/contrib/iostream3/README diff --git a/src/zlib/zlib-1.2.13/contrib/iostream3/TODO b/src/zlib/zlib-1.3/contrib/iostream3/TODO similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/iostream3/TODO rename to src/zlib/zlib-1.3/contrib/iostream3/TODO diff --git a/src/zlib/zlib-1.2.13/contrib/iostream3/test.cc b/src/zlib/zlib-1.3/contrib/iostream3/test.cc similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/iostream3/test.cc rename to src/zlib/zlib-1.3/contrib/iostream3/test.cc diff --git a/src/zlib/zlib-1.2.13/contrib/iostream3/zfstream.cc b/src/zlib/zlib-1.3/contrib/iostream3/zfstream.cc similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/iostream3/zfstream.cc rename to src/zlib/zlib-1.3/contrib/iostream3/zfstream.cc diff --git a/src/zlib/zlib-1.2.13/contrib/iostream3/zfstream.h b/src/zlib/zlib-1.3/contrib/iostream3/zfstream.h similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/iostream3/zfstream.h rename to src/zlib/zlib-1.3/contrib/iostream3/zfstream.h diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/Makefile b/src/zlib/zlib-1.3/contrib/minizip/Makefile similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/minizip/Makefile rename to src/zlib/zlib-1.3/contrib/minizip/Makefile diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/Makefile.am b/src/zlib/zlib-1.3/contrib/minizip/Makefile.am similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/minizip/Makefile.am rename to src/zlib/zlib-1.3/contrib/minizip/Makefile.am diff --git a/src/zlib/zlib-1.3/contrib/minizip/MiniZip64_Changes.txt b/src/zlib/zlib-1.3/contrib/minizip/MiniZip64_Changes.txt new file mode 100644 index 000000000..375946811 --- /dev/null +++ b/src/zlib/zlib-1.3/contrib/minizip/MiniZip64_Changes.txt @@ -0,0 +1,6 @@ + +MiniZip 1.1 was derived from MiniZip at version 1.01f + +Change in 1.0 (Okt 2009) + - **TODO - Add history** + diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/MiniZip64_info.txt b/src/zlib/zlib-1.3/contrib/minizip/MiniZip64_info.txt similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/minizip/MiniZip64_info.txt rename to src/zlib/zlib-1.3/contrib/minizip/MiniZip64_info.txt diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/configure.ac b/src/zlib/zlib-1.3/contrib/minizip/configure.ac similarity index 93% rename from src/zlib/zlib-1.2.13/contrib/minizip/configure.ac rename to src/zlib/zlib-1.3/contrib/minizip/configure.ac index bff300b30..df80e5b7e 100644 --- a/src/zlib/zlib-1.2.13/contrib/minizip/configure.ac +++ b/src/zlib/zlib-1.3/contrib/minizip/configure.ac @@ -1,7 +1,7 @@ # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. -AC_INIT([minizip], [1.2.13], [bugzilla.redhat.com]) +AC_INIT([minizip], [1.3.0], [bugzilla.redhat.com]) AC_CONFIG_SRCDIR([minizip.c]) AM_INIT_AUTOMAKE([foreign]) LT_INIT diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/crypt.h b/src/zlib/zlib-1.3/contrib/minizip/crypt.h similarity index 94% rename from src/zlib/zlib-1.2.13/contrib/minizip/crypt.h rename to src/zlib/zlib-1.3/contrib/minizip/crypt.h index 1cc41f19d..f4b93b78d 100644 --- a/src/zlib/zlib-1.2.13/contrib/minizip/crypt.h +++ b/src/zlib/zlib-1.3/contrib/minizip/crypt.h @@ -32,8 +32,7 @@ /*********************************************************************** * Return the next byte in the pseudo-random sequence */ -static int decrypt_byte(unsigned long* pkeys, const z_crc_t* pcrc_32_tab) -{ +static int decrypt_byte(unsigned long* pkeys, const z_crc_t* pcrc_32_tab) { unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an * unpredictable manner on 16-bit systems; not a problem * with any known compiler so far, though */ @@ -46,8 +45,7 @@ static int decrypt_byte(unsigned long* pkeys, const z_crc_t* pcrc_32_tab) /*********************************************************************** * Update the encryption keys with the next byte of plain text */ -static int update_keys(unsigned long* pkeys,const z_crc_t* pcrc_32_tab,int c) -{ +static int update_keys(unsigned long* pkeys, const z_crc_t* pcrc_32_tab, int c) { (*(pkeys+0)) = CRC32((*(pkeys+0)), c); (*(pkeys+1)) += (*(pkeys+0)) & 0xff; (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1; @@ -63,8 +61,7 @@ static int update_keys(unsigned long* pkeys,const z_crc_t* pcrc_32_tab,int c) * Initialize the encryption keys and the random header according to * the given password. */ -static void init_keys(const char* passwd,unsigned long* pkeys,const z_crc_t* pcrc_32_tab) -{ +static void init_keys(const char* passwd, unsigned long* pkeys, const z_crc_t* pcrc_32_tab) { *(pkeys+0) = 305419896L; *(pkeys+1) = 591751049L; *(pkeys+2) = 878082192L; @@ -93,8 +90,7 @@ static unsigned crypthead(const char* passwd, /* password string */ int bufSize, unsigned long* pkeys, const z_crc_t* pcrc_32_tab, - unsigned long crcForCrypting) -{ + unsigned long crcForCrypting) { unsigned n; /* index in random header */ int t; /* temporary */ int c; /* random byte */ diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/ioapi.c b/src/zlib/zlib-1.3/contrib/minizip/ioapi.c similarity index 74% rename from src/zlib/zlib-1.2.13/contrib/minizip/ioapi.c rename to src/zlib/zlib-1.3/contrib/minizip/ioapi.c index 814a6fd38..782d32469 100644 --- a/src/zlib/zlib-1.2.13/contrib/minizip/ioapi.c +++ b/src/zlib/zlib-1.3/contrib/minizip/ioapi.c @@ -14,7 +14,7 @@ #define _CRT_SECURE_NO_WARNINGS #endif -#if defined(__APPLE__) || defined(IOAPI_NO_64) +#if defined(__APPLE__) || defined(IOAPI_NO_64) || defined(__HAIKU__) || defined(MINIZIP_FOPEN_NO_64) // In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions #define FOPEN_FUNC(filename, mode) fopen(filename, mode) #define FTELLO_FUNC(stream) ftello(stream) @@ -28,8 +28,7 @@ #include "ioapi.h" -voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode) -{ +voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc, const void*filename, int mode) { if (pfilefunc->zfile_func64.zopen64_file != NULL) return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode); else @@ -38,8 +37,7 @@ voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename } } -long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin) -{ +long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin) { if (pfilefunc->zfile_func64.zseek64_file != NULL) return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin); else @@ -52,8 +50,7 @@ long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZP } } -ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream) -{ +ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc, voidpf filestream) { if (pfilefunc->zfile_func64.zseek64_file != NULL) return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream); else @@ -66,11 +63,9 @@ ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream } } -void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32) -{ +void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32, const zlib_filefunc_def* p_filefunc32) { p_filefunc64_32->zfile_func64.zopen64_file = NULL; p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file; - p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file; p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file; p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file; p_filefunc64_32->zfile_func64.ztell64_file = NULL; @@ -84,16 +79,7 @@ void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filef -static voidpf ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode)); -static uLong ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size)); -static uLong ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size)); -static ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream)); -static long ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)); -static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream)); -static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream)); - -static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode) -{ +static voidpf ZCALLBACK fopen_file_func(voidpf opaque, const char* filename, int mode) { FILE* file = NULL; const char* mode_fopen = NULL; (void)opaque; @@ -111,8 +97,7 @@ static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, in return file; } -static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode) -{ +static voidpf ZCALLBACK fopen64_file_func(voidpf opaque, const void* filename, int mode) { FILE* file = NULL; const char* mode_fopen = NULL; (void)opaque; @@ -131,24 +116,21 @@ static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, } -static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size) -{ +static uLong ZCALLBACK fread_file_func(voidpf opaque, voidpf stream, void* buf, uLong size) { uLong ret; (void)opaque; ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream); return ret; } -static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size) -{ +static uLong ZCALLBACK fwrite_file_func(voidpf opaque, voidpf stream, const void* buf, uLong size) { uLong ret; (void)opaque; ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream); return ret; } -static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream) -{ +static long ZCALLBACK ftell_file_func(voidpf opaque, voidpf stream) { long ret; (void)opaque; ret = ftell((FILE *)stream); @@ -156,16 +138,14 @@ static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream) } -static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream) -{ +static ZPOS64_T ZCALLBACK ftell64_file_func(voidpf opaque, voidpf stream) { ZPOS64_T ret; (void)opaque; ret = (ZPOS64_T)FTELLO_FUNC((FILE *)stream); return ret; } -static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin) -{ +static long ZCALLBACK fseek_file_func(voidpf opaque, voidpf stream, uLong offset, int origin) { int fseek_origin=0; long ret; (void)opaque; @@ -188,8 +168,7 @@ static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offs return ret; } -static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin) -{ +static long ZCALLBACK fseek64_file_func(voidpf opaque, voidpf stream, ZPOS64_T offset, int origin) { int fseek_origin=0; long ret; (void)opaque; @@ -208,32 +187,28 @@ static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T } ret = 0; - if(FSEEKO_FUNC((FILE *)stream, (z_off_t)offset, fseek_origin) != 0) + if(FSEEKO_FUNC((FILE *)stream, (z_off64_t)offset, fseek_origin) != 0) ret = -1; return ret; } -static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream) -{ +static int ZCALLBACK fclose_file_func(voidpf opaque, voidpf stream) { int ret; (void)opaque; ret = fclose((FILE *)stream); return ret; } -static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream) -{ +static int ZCALLBACK ferror_file_func(voidpf opaque, voidpf stream) { int ret; (void)opaque; ret = ferror((FILE *)stream); return ret; } -void fill_fopen_filefunc (pzlib_filefunc_def) - zlib_filefunc_def* pzlib_filefunc_def; -{ +void fill_fopen_filefunc(zlib_filefunc_def* pzlib_filefunc_def) { pzlib_filefunc_def->zopen_file = fopen_file_func; pzlib_filefunc_def->zread_file = fread_file_func; pzlib_filefunc_def->zwrite_file = fwrite_file_func; @@ -244,8 +219,7 @@ void fill_fopen_filefunc (pzlib_filefunc_def) pzlib_filefunc_def->opaque = NULL; } -void fill_fopen64_filefunc (zlib_filefunc64_def* pzlib_filefunc_def) -{ +void fill_fopen64_filefunc(zlib_filefunc64_def* pzlib_filefunc_def) { pzlib_filefunc_def->zopen64_file = fopen64_file_func; pzlib_filefunc_def->zread_file = fread_file_func; pzlib_filefunc_def->zwrite_file = fwrite_file_func; diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/ioapi.h b/src/zlib/zlib-1.3/contrib/minizip/ioapi.h similarity index 77% rename from src/zlib/zlib-1.2.13/contrib/minizip/ioapi.h rename to src/zlib/zlib-1.3/contrib/minizip/ioapi.h index ae9ca7e83..c588a18d0 100644 --- a/src/zlib/zlib-1.2.13/contrib/minizip/ioapi.h +++ b/src/zlib/zlib-1.3/contrib/minizip/ioapi.h @@ -50,7 +50,7 @@ #define ftello64 ftell #define fseeko64 fseek #else -#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) +#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__HAIKU__) || defined(MINIZIP_FOPEN_NO_64) #define fopen64 fopen #define ftello64 ftello #define fseeko64 fseeko @@ -82,7 +82,7 @@ #include "mz64conf.h" #endif -/* a type choosen by DEFINE */ +/* a type chosen by DEFINE */ #ifdef HAVE_64BIT_INT_CUSTOM typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T; #else @@ -134,14 +134,14 @@ extern "C" { -typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode)); -typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size)); -typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); -typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream)); -typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream)); +typedef voidpf (ZCALLBACK *open_file_func) (voidpf opaque, const char* filename, int mode); +typedef uLong (ZCALLBACK *read_file_func) (voidpf opaque, voidpf stream, void* buf, uLong size); +typedef uLong (ZCALLBACK *write_file_func) (voidpf opaque, voidpf stream, const void* buf, uLong size); +typedef int (ZCALLBACK *close_file_func) (voidpf opaque, voidpf stream); +typedef int (ZCALLBACK *testerror_file_func) (voidpf opaque, voidpf stream); -typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream)); -typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin)); +typedef long (ZCALLBACK *tell_file_func) (voidpf opaque, voidpf stream); +typedef long (ZCALLBACK *seek_file_func) (voidpf opaque, voidpf stream, uLong offset, int origin); /* here is the "old" 32 bits structure structure */ @@ -157,9 +157,9 @@ typedef struct zlib_filefunc_def_s voidpf opaque; } zlib_filefunc_def; -typedef ZPOS64_T (ZCALLBACK *tell64_file_func) OF((voidpf opaque, voidpf stream)); -typedef long (ZCALLBACK *seek64_file_func) OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)); -typedef voidpf (ZCALLBACK *open64_file_func) OF((voidpf opaque, const void* filename, int mode)); +typedef ZPOS64_T (ZCALLBACK *tell64_file_func) (voidpf opaque, voidpf stream); +typedef long (ZCALLBACK *seek64_file_func) (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin); +typedef voidpf (ZCALLBACK *open64_file_func) (voidpf opaque, const void* filename, int mode); typedef struct zlib_filefunc64_def_s { @@ -173,8 +173,8 @@ typedef struct zlib_filefunc64_def_s voidpf opaque; } zlib_filefunc64_def; -void fill_fopen64_filefunc OF((zlib_filefunc64_def* pzlib_filefunc_def)); -void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); +void fill_fopen64_filefunc(zlib_filefunc64_def* pzlib_filefunc_def); +void fill_fopen_filefunc(zlib_filefunc_def* pzlib_filefunc_def); /* now internal definition, only for zip.c and unzip.h */ typedef struct zlib_filefunc64_32_def_s @@ -193,11 +193,11 @@ typedef struct zlib_filefunc64_32_def_s #define ZCLOSE64(filefunc,filestream) ((*((filefunc).zfile_func64.zclose_file)) ((filefunc).zfile_func64.opaque,filestream)) #define ZERROR64(filefunc,filestream) ((*((filefunc).zfile_func64.zerror_file)) ((filefunc).zfile_func64.opaque,filestream)) -voidpf call_zopen64 OF((const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)); -long call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)); -ZPOS64_T call_ztell64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)); +voidpf call_zopen64(const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode); +long call_zseek64(const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin); +ZPOS64_T call_ztell64(const zlib_filefunc64_32_def* pfilefunc,voidpf filestream); -void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32); +void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32); #define ZOPEN64(filefunc,filename,mode) (call_zopen64((&(filefunc)),(filename),(mode))) #define ZTELL64(filefunc,filestream) (call_ztell64((&(filefunc)),(filestream))) diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/iowin32.c b/src/zlib/zlib-1.3/contrib/minizip/iowin32.c similarity index 87% rename from src/zlib/zlib-1.2.13/contrib/minizip/iowin32.c rename to src/zlib/zlib-1.3/contrib/minizip/iowin32.c index 7df525172..08536e94b 100644 --- a/src/zlib/zlib-1.2.13/contrib/minizip/iowin32.c +++ b/src/zlib/zlib-1.3/contrib/minizip/iowin32.c @@ -38,14 +38,6 @@ #endif #endif -voidpf ZCALLBACK win32_open_file_func OF((voidpf opaque, const char* filename, int mode)); -uLong ZCALLBACK win32_read_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size)); -uLong ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size)); -ZPOS64_T ZCALLBACK win32_tell64_file_func OF((voidpf opaque, voidpf stream)); -long ZCALLBACK win32_seek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)); -int ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream)); -int ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream)); - typedef struct { HANDLE hf; @@ -57,8 +49,7 @@ static void win32_translate_open_mode(int mode, DWORD* lpdwDesiredAccess, DWORD* lpdwCreationDisposition, DWORD* lpdwShareMode, - DWORD* lpdwFlagsAndAttributes) -{ + DWORD* lpdwFlagsAndAttributes) { *lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0; if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) @@ -79,8 +70,7 @@ static void win32_translate_open_mode(int mode, } } -static voidpf win32_build_iowin(HANDLE hFile) -{ +static voidpf win32_build_iowin(HANDLE hFile) { voidpf ret=NULL; if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE)) @@ -98,8 +88,7 @@ static voidpf win32_build_iowin(HANDLE hFile) return ret; } -voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int mode) -{ +voidpf ZCALLBACK win32_open64_file_func(voidpf opaque, const void* filename, int mode) { const char* mode_fopen = NULL; DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; HANDLE hFile = NULL; @@ -127,8 +116,7 @@ voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int } -voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int mode) -{ +voidpf ZCALLBACK win32_open64_file_funcA(voidpf opaque, const void* filename, int mode) { const char* mode_fopen = NULL; DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; HANDLE hFile = NULL; @@ -151,8 +139,7 @@ voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int } -voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int mode) -{ +voidpf ZCALLBACK win32_open64_file_funcW(voidpf opaque, const void* filename, int mode) { const char* mode_fopen = NULL; DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; HANDLE hFile = NULL; @@ -171,8 +158,7 @@ voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int } -voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mode) -{ +voidpf ZCALLBACK win32_open_file_func(voidpf opaque, const char* filename, int mode) { const char* mode_fopen = NULL; DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; HANDLE hFile = NULL; @@ -200,8 +186,7 @@ voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mo } -uLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uLong size) -{ +uLong ZCALLBACK win32_read_file_func(voidpf opaque, voidpf stream, void* buf,uLong size) { uLong ret=0; HANDLE hFile = NULL; if (stream!=NULL) @@ -222,8 +207,7 @@ uLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uL } -uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* buf,uLong size) -{ +uLong ZCALLBACK win32_write_file_func(voidpf opaque, voidpf stream, const void* buf, uLong size) { uLong ret=0; HANDLE hFile = NULL; if (stream!=NULL) @@ -243,8 +227,7 @@ uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* b return ret; } -static BOOL MySetFilePointerEx(HANDLE hFile, LARGE_INTEGER pos, LARGE_INTEGER *newPos, DWORD dwMoveMethod) -{ +static BOOL MySetFilePointerEx(HANDLE hFile, LARGE_INTEGER pos, LARGE_INTEGER *newPos, DWORD dwMoveMethod) { #ifdef IOWIN32_USING_WINRT_API return SetFilePointerEx(hFile, pos, newPos, dwMoveMethod); #else @@ -263,8 +246,7 @@ static BOOL MySetFilePointerEx(HANDLE hFile, LARGE_INTEGER pos, LARGE_INTEGER *n #endif } -long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream) -{ +long ZCALLBACK win32_tell_file_func(voidpf opaque, voidpf stream) { long ret=-1; HANDLE hFile = NULL; if (stream!=NULL) @@ -286,8 +268,7 @@ long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream) return ret; } -ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream) -{ +ZPOS64_T ZCALLBACK win32_tell64_file_func(voidpf opaque, voidpf stream) { ZPOS64_T ret= (ZPOS64_T)-1; HANDLE hFile = NULL; if (stream!=NULL) @@ -311,8 +292,7 @@ ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream) } -long ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,int origin) -{ +long ZCALLBACK win32_seek_file_func(voidpf opaque, voidpf stream, uLong offset, int origin) { DWORD dwMoveMethod=0xFFFFFFFF; HANDLE hFile = NULL; @@ -349,8 +329,7 @@ long ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,in return ret; } -long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T offset,int origin) -{ +long ZCALLBACK win32_seek64_file_func(voidpf opaque, voidpf stream, ZPOS64_T offset, int origin) { DWORD dwMoveMethod=0xFFFFFFFF; HANDLE hFile = NULL; long ret=-1; @@ -388,8 +367,7 @@ long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T off return ret; } -int ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream) -{ +int ZCALLBACK win32_close_file_func(voidpf opaque, voidpf stream) { int ret=-1; if (stream!=NULL) @@ -406,8 +384,7 @@ int ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream) return ret; } -int ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream) -{ +int ZCALLBACK win32_error_file_func(voidpf opaque, voidpf stream) { int ret=-1; if (stream!=NULL) { @@ -416,8 +393,7 @@ int ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream) return ret; } -void fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def) -{ +void fill_win32_filefunc(zlib_filefunc_def* pzlib_filefunc_def) { pzlib_filefunc_def->zopen_file = win32_open_file_func; pzlib_filefunc_def->zread_file = win32_read_file_func; pzlib_filefunc_def->zwrite_file = win32_write_file_func; @@ -428,8 +404,7 @@ void fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def) pzlib_filefunc_def->opaque = NULL; } -void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def) -{ +void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def) { pzlib_filefunc_def->zopen64_file = win32_open64_file_func; pzlib_filefunc_def->zread_file = win32_read_file_func; pzlib_filefunc_def->zwrite_file = win32_write_file_func; @@ -441,8 +416,7 @@ void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def) } -void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def) -{ +void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def) { pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA; pzlib_filefunc_def->zread_file = win32_read_file_func; pzlib_filefunc_def->zwrite_file = win32_write_file_func; @@ -454,8 +428,7 @@ void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def) } -void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def) -{ +void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def) { pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW; pzlib_filefunc_def->zread_file = win32_read_file_func; pzlib_filefunc_def->zwrite_file = win32_write_file_func; diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/iowin32.h b/src/zlib/zlib-1.3/contrib/minizip/iowin32.h similarity index 65% rename from src/zlib/zlib-1.2.13/contrib/minizip/iowin32.h rename to src/zlib/zlib-1.3/contrib/minizip/iowin32.h index 0ca0969a7..a23a65d43 100644 --- a/src/zlib/zlib-1.2.13/contrib/minizip/iowin32.h +++ b/src/zlib/zlib-1.3/contrib/minizip/iowin32.h @@ -18,10 +18,10 @@ extern "C" { #endif -void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def)); -void fill_win32_filefunc64 OF((zlib_filefunc64_def* pzlib_filefunc_def)); -void fill_win32_filefunc64A OF((zlib_filefunc64_def* pzlib_filefunc_def)); -void fill_win32_filefunc64W OF((zlib_filefunc64_def* pzlib_filefunc_def)); +void fill_win32_filefunc(zlib_filefunc_def* pzlib_filefunc_def); +void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def); +void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def); +void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def); #ifdef __cplusplus } diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/make_vms.com b/src/zlib/zlib-1.3/contrib/minizip/make_vms.com similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/minizip/make_vms.com rename to src/zlib/zlib-1.3/contrib/minizip/make_vms.com diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/miniunz.c b/src/zlib/zlib-1.3/contrib/minizip/miniunz.c similarity index 92% rename from src/zlib/zlib-1.2.13/contrib/minizip/miniunz.c rename to src/zlib/zlib-1.3/contrib/minizip/miniunz.c index 0dc9b5081..a12aec8be 100644 --- a/src/zlib/zlib-1.2.13/contrib/minizip/miniunz.c +++ b/src/zlib/zlib-1.3/contrib/minizip/miniunz.c @@ -27,7 +27,7 @@ #endif #endif -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__HAIKU__) || defined(MINIZIP_FOPEN_NO_64) // In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions #define FOPEN_FUNC(filename, mode) fopen(filename, mode) #define FTELLO_FUNC(stream) ftello(stream) @@ -81,11 +81,7 @@ filename : the filename of the file where date/time must be modified dosdate : the new date at the MSDos format (4 bytes) tmu_date : the SAME new date at the tm_unz format */ -static void change_file_date(filename,dosdate,tmu_date) - const char *filename; - uLong dosdate; - tm_unz tmu_date; -{ +static void change_file_date(const char *filename, uLong dosdate, tm_unz tmu_date) { #ifdef _WIN32 HANDLE hFile; FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite; @@ -115,6 +111,10 @@ static void change_file_date(filename,dosdate,tmu_date) ut.actime=ut.modtime=mktime(&newdate); utime(filename,&ut); +#else + (void)filename; + (void)dosdate; + (void)tmu_date; #endif #endif } @@ -123,9 +123,7 @@ static void change_file_date(filename,dosdate,tmu_date) /* mymkdir and change_file_date are not 100 % portable As I don't know well Unix, I wait feedback for the unix portion */ -static int mymkdir(dirname) - const char* dirname; -{ +static int mymkdir(const char* dirname) { int ret=0; #ifdef _WIN32 ret = _mkdir(dirname); @@ -133,13 +131,13 @@ static int mymkdir(dirname) ret = mkdir (dirname,0775); #elif __APPLE__ ret = mkdir (dirname,0775); +#else + (void)dirname; #endif return ret; } -static int makedir (newdir) - const char *newdir; -{ +static int makedir(const char *newdir) { char *buffer ; char *p; size_t len = strlen(newdir); @@ -187,14 +185,12 @@ static int makedir (newdir) return 1; } -static void do_banner() -{ +static void do_banner(void) { printf("MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\n"); printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n"); } -static void do_help() -{ +static void do_help(void) { printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\n\n" \ " -e Extract without pathname (junk paths)\n" \ " -x Extract with pathname\n" \ @@ -202,11 +198,10 @@ static void do_help() " -l list files\n" \ " -d directory to extract into\n" \ " -o overwrite files without prompting\n" \ - " -p extract crypted file using password\n\n"); + " -p extract encrypted file using password\n\n"); } -static void Display64BitsSize(ZPOS64_T n, int size_char) -{ +static void Display64BitsSize(ZPOS64_T n, int size_char) { /* to avoid compatibility problem , we do here the conversion */ char number[21]; int offset=19; @@ -233,9 +228,7 @@ static void Display64BitsSize(ZPOS64_T n, int size_char) printf("%s",&number[pos_string]); } -static int do_list(uf) - unzFile uf; -{ +static int do_list(unzFile uf) { uLong i; unz_global_info64 gi; int err; @@ -250,7 +243,7 @@ static int do_list(uf) char filename_inzip[256]; unz_file_info64 file_info; uLong ratio=0; - const char *string_method; + const char *string_method = ""; char charCrypt=' '; err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0); if (err!=UNZ_OK) @@ -261,7 +254,7 @@ static int do_list(uf) if (file_info.uncompressed_size>0) ratio = (uLong)((file_info.compressed_size*100)/file_info.uncompressed_size); - /* display a '*' if the file is crypted */ + /* display a '*' if the file is encrypted */ if ((file_info.flag & 1) != 0) charCrypt='*'; @@ -311,12 +304,7 @@ static int do_list(uf) } -static int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password) - unzFile uf; - const int* popt_extract_without_path; - int* popt_overwrite; - const char* password; -{ +static int do_extract_currentfile(unzFile uf, const int* popt_extract_without_path, int* popt_overwrite, const char* password) { char filename_inzip[256]; char* filename_withoutpath; char* p; @@ -473,12 +461,7 @@ static int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,pa } -static int do_extract(uf,opt_extract_without_path,opt_overwrite,password) - unzFile uf; - int opt_extract_without_path; - int opt_overwrite; - const char* password; -{ +static int do_extract(unzFile uf, int opt_extract_without_path, int opt_overwrite, const char* password) { uLong i; unz_global_info64 gi; int err; @@ -508,13 +491,7 @@ static int do_extract(uf,opt_extract_without_path,opt_overwrite,password) return 0; } -static int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password) - unzFile uf; - const char* filename; - int opt_extract_without_path; - int opt_overwrite; - const char* password; -{ +static int do_extract_onefile(unzFile uf, const char* filename, int opt_extract_without_path, int opt_overwrite, const char* password) { if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK) { printf("file %s not found in the zipfile\n",filename); @@ -530,10 +507,7 @@ static int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite } -int main(argc,argv) - int argc; - char *argv[]; -{ +int main(int argc, char *argv[]) { const char *zipfilename=NULL; const char *filename_to_extract=NULL; const char *password=NULL; @@ -606,7 +580,7 @@ int main(argc,argv) # endif strncpy(filename_try, zipfilename,MAXFILENAME-1); - /* strncpy doesnt append the trailing NULL, of the string is too long. */ + /* strncpy doesn't append the trailing NULL, of the string is too long. */ filename_try[ MAXFILENAME ] = '\0'; # ifdef USEWIN32IOAPI diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/miniunzip.1 b/src/zlib/zlib-1.3/contrib/minizip/miniunzip.1 similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/minizip/miniunzip.1 rename to src/zlib/zlib-1.3/contrib/minizip/miniunzip.1 diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/minizip.1 b/src/zlib/zlib-1.3/contrib/minizip/minizip.1 similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/minizip/minizip.1 rename to src/zlib/zlib-1.3/contrib/minizip/minizip.1 diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/minizip.c b/src/zlib/zlib-1.3/contrib/minizip/minizip.c similarity index 91% rename from src/zlib/zlib-1.2.13/contrib/minizip/minizip.c rename to src/zlib/zlib-1.3/contrib/minizip/minizip.c index e8561b15f..26ee8d029 100644 --- a/src/zlib/zlib-1.2.13/contrib/minizip/minizip.c +++ b/src/zlib/zlib-1.3/contrib/minizip/minizip.c @@ -28,7 +28,7 @@ #endif #endif -#ifdef __APPLE__ +#if defined(__APPLE__) || defined(__HAIKU__) || defined(MINIZIP_FOPEN_NO_64) // In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions #define FOPEN_FUNC(filename, mode) fopen(filename, mode) #define FTELLO_FUNC(stream) ftello(stream) @@ -71,11 +71,9 @@ #define MAXFILENAME (256) #ifdef _WIN32 -static int filetime(f, tmzip, dt) - const char *f; /* name of file to get info on */ - tm_zip *tmzip; /* return value: access, modific. and creation times */ - uLong *dt; /* dostime */ -{ +/* f: name of file to get info on, tmzip: return value: access, + modification and creation times, dt: dostime */ +static int filetime(const char *f, tm_zip *tmzip, uLong *dt) { int ret = 0; { FILETIME ftLocal; @@ -95,11 +93,9 @@ static int filetime(f, tmzip, dt) } #else #if defined(unix) || defined(__APPLE__) -static int filetime(f, tmzip, dt) - const char *f; /* name of file to get info on */ - tm_zip *tmzip; /* return value: access, modific. and creation times */ - uLong *dt; /* dostime */ -{ +/* f: name of file to get info on, tmzip: return value: access, + modification and creation times, dt: dostime */ +static int filetime(const char *f, tm_zip *tmzip, uLong *dt) { (void)dt; int ret=0; struct stat s; /* results of stat() */ @@ -114,7 +110,7 @@ static int filetime(f, tmzip, dt) len = MAXFILENAME; strncpy(name, f,MAXFILENAME-1); - /* strncpy doesnt append the trailing NULL, of the string is too long. */ + /* strncpy doesn't append the trailing NULL, of the string is too long. */ name[ MAXFILENAME ] = '\0'; if (name[len - 1] == '/') @@ -138,11 +134,12 @@ static int filetime(f, tmzip, dt) return ret; } #else -uLong filetime(f, tmzip, dt) - const char *f; /* name of file to get info on */ - tm_zip *tmzip; /* return value: access, modific. and creation times */ - uLong *dt; /* dostime */ -{ +/* f: name of file to get info on, tmzip: return value: access, + modification and creation times, dt: dostime */ +static int filetime(const char *f, tm_zip *tmzip, uLong *dt) { + (void)f; + (void)tmzip; + (void)dt; return 0; } #endif @@ -151,9 +148,7 @@ uLong filetime(f, tmzip, dt) -static int check_exist_file(filename) - const char* filename; -{ +static int check_exist_file(const char* filename) { FILE* ftestexist; int ret = 1; ftestexist = FOPEN_FUNC(filename,"rb"); @@ -164,14 +159,12 @@ static int check_exist_file(filename) return ret; } -static void do_banner() -{ +static void do_banner(void) { printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n"); printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n"); } -static void do_help() -{ +static void do_help(void) { printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \ " -o Overwrite existing file.zip\n" \ " -a Append to existing file.zip\n" \ @@ -183,8 +176,7 @@ static void do_help() /* calculate the CRC32 of a file, because to encrypt a file, we need known the CRC32 of the file before */ -static int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc) -{ +static int getFileCrc(const char* filenameinzip, void* buf, unsigned long size_buf, unsigned long* result_crc) { unsigned long calculate_crc=0; int err=ZIP_OK; FILE * fin = FOPEN_FUNC(filenameinzip,"rb"); @@ -222,8 +214,7 @@ static int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf, return err; } -static int isLargeFile(const char* filename) -{ +static int isLargeFile(const char* filename) { int largeFile = 0; ZPOS64_T pos = 0; FILE* pFile = FOPEN_FUNC(filename, "rb"); @@ -233,7 +224,7 @@ static int isLargeFile(const char* filename) FSEEKO_FUNC(pFile, 0, SEEK_END); pos = (ZPOS64_T)FTELLO_FUNC(pFile); - printf("File : %s is %lld bytes\n", filename, pos); + printf("File : %s is %llu bytes\n", filename, pos); if(pos >= 0xffffffff) largeFile = 1; @@ -244,10 +235,7 @@ static int isLargeFile(const char* filename) return largeFile; } -int main(argc,argv) - int argc; - char *argv[]; -{ +int main(int argc, char *argv[]) { int i; int opt_overwrite=0; int opt_compress_level=Z_DEFAULT_COMPRESSION; @@ -323,7 +311,7 @@ int main(argc,argv) zipok = 1 ; strncpy(filename_try, argv[zipfilenamearg],MAXFILENAME-1); - /* strncpy doesnt append the trailing NULL, of the string is too long. */ + /* strncpy doesn't append the trailing NULL, of the string is too long. */ filename_try[ MAXFILENAME ] = '\0'; len=(int)strlen(filename_try); @@ -393,10 +381,10 @@ int main(argc,argv) ((argv[i][1]=='o') || (argv[i][1]=='O') || (argv[i][1]=='a') || (argv[i][1]=='A') || (argv[i][1]=='p') || (argv[i][1]=='P') || - ((argv[i][1]>='0') || (argv[i][1]<='9'))) && + ((argv[i][1]>='0') && (argv[i][1]<='9'))) && (strlen(argv[i]) == 2))) { - FILE * fin; + FILE * fin = NULL; size_t size_read; const char* filenameinzip = argv[i]; const char *savefilenameinzip; diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/minizip.pc.in b/src/zlib/zlib-1.3/contrib/minizip/minizip.pc.in similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/minizip/minizip.pc.in rename to src/zlib/zlib-1.3/contrib/minizip/minizip.pc.in diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/mztools.c b/src/zlib/zlib-1.3/contrib/minizip/mztools.c similarity index 97% rename from src/zlib/zlib-1.2.13/contrib/minizip/mztools.c rename to src/zlib/zlib-1.3/contrib/minizip/mztools.c index 96891c2e0..c8d237561 100644 --- a/src/zlib/zlib-1.2.13/contrib/minizip/mztools.c +++ b/src/zlib/zlib-1.3/contrib/minizip/mztools.c @@ -27,13 +27,7 @@ WRITE_16((unsigned char*)(buff) + 2, (n) >> 16); \ } while(0) -extern int ZEXPORT unzRepair(file, fileOut, fileOutTmp, nRecovered, bytesRecovered) -const char* file; -const char* fileOut; -const char* fileOutTmp; -uLong* nRecovered; -uLong* bytesRecovered; -{ +extern int ZEXPORT unzRepair(const char* file, const char* fileOut, const char* fileOutTmp, uLong* nRecovered, uLong* bytesRecovered) { int err = Z_OK; FILE* fpZip = fopen(file, "rb"); FILE* fpOut = fopen(fileOut, "wb"); diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/mztools.h b/src/zlib/zlib-1.3/contrib/minizip/mztools.h similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/minizip/mztools.h rename to src/zlib/zlib-1.3/contrib/minizip/mztools.h diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/unzip.c b/src/zlib/zlib-1.3/contrib/minizip/unzip.c similarity index 81% rename from src/zlib/zlib-1.2.13/contrib/minizip/unzip.c rename to src/zlib/zlib-1.3/contrib/minizip/unzip.c index 3036b470b..ed763f89f 100644 --- a/src/zlib/zlib-1.2.13/contrib/minizip/unzip.c +++ b/src/zlib/zlib-1.3/contrib/minizip/unzip.c @@ -49,12 +49,12 @@ Copyright (C) 2007-2008 Even Rouault - Oct-2009 - Mathias Svensson - Removed cpl_* from symbol names (Even Rouault added them but since this is now moved to a new project (minizip64) I renamed them again). + Oct-2009 - Mathias Svensson - Removed cpl_* from symbol names (Even Rouault added them but since this is now moved to a new project (minizip64) I renamed them again). Oct-2009 - Mathias Svensson - Fixed problem if uncompressed size was > 4G and compressed size was <4G should only read the compressed/uncompressed size from the Zip64 format if the size from normal header was 0xFFFFFFFF - Oct-2009 - Mathias Svensson - Applied some bug fixes from paches recived from Gilles Vollant - Oct-2009 - Mathias Svensson - Applied support to unzip files with compression mathod BZIP2 (bzip2 lib is required) + Oct-2009 - Mathias Svensson - Applied some bug fixes from patches received from Gilles Vollant + Oct-2009 - Mathias Svensson - Applied support to unzip files with compression method BZIP2 (bzip2 lib is required) Patch created by Daniel Borca Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer @@ -77,8 +77,6 @@ #ifdef STDC # include -# include -# include #endif #ifdef NO_ERRNO_H extern int errno; @@ -111,9 +109,6 @@ #ifndef ALLOC # define ALLOC(size) (malloc(size)) #endif -#ifndef TRYFREE -# define TRYFREE(p) { free(p);} -#endif #define SIZECENTRALDIRITEM (0x2e) #define SIZEZIPLOCALHEADER (0x1e) @@ -153,7 +148,7 @@ typedef struct ZPOS64_T rest_read_compressed; /* number of byte to be decompressed */ ZPOS64_T rest_read_uncompressed;/*number of byte to be obtained after decomp*/ zlib_filefunc64_32_def z_filefunc; - voidpf filestream; /* io structore of the zipfile */ + voidpf filestream; /* io structure of the zipfile */ uLong compression_method; /* compression method (0==store) */ ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ int raw; @@ -166,7 +161,7 @@ typedef struct { zlib_filefunc64_32_def z_filefunc; int is64bitOpenFunction; - voidpf filestream; /* io structore of the zipfile */ + voidpf filestream; /* io structure of the zipfile */ unz_global_info64 gi; /* public global information */ ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ ZPOS64_T num_file; /* number of the current file in the zipfile*/ @@ -197,29 +192,24 @@ typedef struct #include "crypt.h" #endif + /* =========================================================================== - Read a byte from a gz_stream; update next_in and avail_in. Return EOF - for end of file. - IN assertion: the stream s has been successfully opened for reading. + Reads a long in LSB order from the given gz_stream. Sets */ - -local int unz64local_getByte OF(( - const zlib_filefunc64_32_def* pzlib_filefunc_def, - voidpf filestream, - int *pi)); - -local int unz64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi) -{ - unsigned char c; - int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1); - if (err==1) +local int unz64local_getShort(const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + uLong *pX) { + unsigned char c[2]; + int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,c,2); + if (err==2) { - *pi = (int)c; + *pX = c[0] | ((uLong)c[1] << 8); return UNZ_OK; } else { + *pX = 0; if (ZERROR64(*pzlib_filefunc_def,filestream)) return UNZ_ERRNO; else @@ -227,127 +217,50 @@ local int unz64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, v } } - -/* =========================================================================== - Reads a long in LSB order from the given gz_stream. Sets -*/ -local int unz64local_getShort OF(( - const zlib_filefunc64_32_def* pzlib_filefunc_def, - voidpf filestream, - uLong *pX)); - -local int unz64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def, +local int unz64local_getLong(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, - uLong *pX) -{ - uLong x ; - int i = 0; - int err; - - err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); - x = (uLong)i; - - if (err==UNZ_OK) - err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); - x |= ((uLong)i)<<8; - - if (err==UNZ_OK) - *pX = x; - else - *pX = 0; - return err; -} - -local int unz64local_getLong OF(( - const zlib_filefunc64_32_def* pzlib_filefunc_def, - voidpf filestream, - uLong *pX)); - -local int unz64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def, - voidpf filestream, - uLong *pX) -{ - uLong x ; - int i = 0; - int err; - - err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); - x = (uLong)i; - - if (err==UNZ_OK) - err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); - x |= ((uLong)i)<<8; - - if (err==UNZ_OK) - err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); - x |= ((uLong)i)<<16; - - if (err==UNZ_OK) - err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); - x += ((uLong)i)<<24; - - if (err==UNZ_OK) - *pX = x; + uLong *pX) { + unsigned char c[4]; + int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,c,4); + if (err==4) + { + *pX = c[0] | ((uLong)c[1] << 8) | ((uLong)c[2] << 16) | ((uLong)c[3] << 24); + return UNZ_OK; + } else + { *pX = 0; - return err; + if (ZERROR64(*pzlib_filefunc_def,filestream)) + return UNZ_ERRNO; + else + return UNZ_EOF; + } } -local int unz64local_getLong64 OF(( - const zlib_filefunc64_32_def* pzlib_filefunc_def, - voidpf filestream, - ZPOS64_T *pX)); - - -local int unz64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def, - voidpf filestream, - ZPOS64_T *pX) -{ - ZPOS64_T x ; - int i = 0; - int err; - - err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); - x = (ZPOS64_T)i; - - if (err==UNZ_OK) - err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); - x |= ((ZPOS64_T)i)<<8; - - if (err==UNZ_OK) - err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); - x |= ((ZPOS64_T)i)<<16; - - if (err==UNZ_OK) - err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); - x |= ((ZPOS64_T)i)<<24; - - if (err==UNZ_OK) - err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); - x |= ((ZPOS64_T)i)<<32; - - if (err==UNZ_OK) - err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); - x |= ((ZPOS64_T)i)<<40; - if (err==UNZ_OK) - err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); - x |= ((ZPOS64_T)i)<<48; - - if (err==UNZ_OK) - err = unz64local_getByte(pzlib_filefunc_def,filestream,&i); - x |= ((ZPOS64_T)i)<<56; - - if (err==UNZ_OK) - *pX = x; +local int unz64local_getLong64(const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + ZPOS64_T *pX) { + unsigned char c[8]; + int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,c,8); + if (err==8) + { + *pX = c[0] | ((ZPOS64_T)c[1] << 8) | ((ZPOS64_T)c[2] << 16) | ((ZPOS64_T)c[3] << 24) + | ((ZPOS64_T)c[4] << 32) | ((ZPOS64_T)c[5] << 40) | ((ZPOS64_T)c[6] << 48) | ((ZPOS64_T)c[7] << 56); + return UNZ_OK; + } else + { *pX = 0; - return err; + if (ZERROR64(*pzlib_filefunc_def,filestream)) + return UNZ_ERRNO; + else + return UNZ_EOF; + } } /* My own strcmpi / strcasecmp */ -local int strcmpcasenosensitive_internal (const char* fileName1, const char* fileName2) -{ +local int strcmpcasenosensitive_internal(const char* fileName1, const char* fileName2) { for (;;) { char c1=*(fileName1++); @@ -379,19 +292,17 @@ local int strcmpcasenosensitive_internal (const char* fileName1, const char* fil #endif /* - Compare two filename (fileName1,fileName2). - If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) - If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi + Compare two filenames (fileName1,fileName2). + If iCaseSensitivity = 1, comparison is case sensitive (like strcmp) + If iCaseSensitivity = 2, comparison is not case sensitive (like strcmpi or strcasecmp) - If iCaseSenisivity = 0, case sensitivity is defaut of your operating system + If iCaseSensitivity = 0, case sensitivity is default of your operating system (like 1 on Unix, 2 on Windows) */ extern int ZEXPORT unzStringFileNameCompare (const char* fileName1, - const char* fileName2, - int iCaseSensitivity) - -{ + const char* fileName2, + int iCaseSensitivity) { if (iCaseSensitivity==0) iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE; @@ -405,21 +316,23 @@ extern int ZEXPORT unzStringFileNameCompare (const char* fileName1, #define BUFREADCOMMENT (0x400) #endif +#ifndef CENTRALDIRINVALID +#define CENTRALDIRINVALID ((ZPOS64_T)(-1)) +#endif + /* Locate the Central directory of a zipfile (at the end, just before the global comment) */ -local ZPOS64_T unz64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)); -local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) -{ +local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) { unsigned char* buf; ZPOS64_T uSizeFile; ZPOS64_T uBackRead; ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ - ZPOS64_T uPosFound=0; + ZPOS64_T uPosFound=CENTRALDIRINVALID; if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) - return 0; + return CENTRALDIRINVALID; uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); @@ -429,7 +342,7 @@ local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); if (buf==NULL) - return 0; + return CENTRALDIRINVALID; uBackRead = 4; while (uBackReadz_filefunc, s->filestream); - TRYFREE(s); + free(s); return UNZ_OK; } @@ -825,8 +727,7 @@ extern int ZEXPORT unzClose (unzFile file) Write info about the ZipFile in the *pglobal_info structure. No preparation of the structure is needed return UNZ_OK if there is no problem. */ -extern int ZEXPORT unzGetGlobalInfo64 (unzFile file, unz_global_info64* pglobal_info) -{ +extern int ZEXPORT unzGetGlobalInfo64(unzFile file, unz_global_info64* pglobal_info) { unz64_s* s; if (file==NULL) return UNZ_PARAMERROR; @@ -835,8 +736,7 @@ extern int ZEXPORT unzGetGlobalInfo64 (unzFile file, unz_global_info64* pglobal_ return UNZ_OK; } -extern int ZEXPORT unzGetGlobalInfo (unzFile file, unz_global_info* pglobal_info32) -{ +extern int ZEXPORT unzGetGlobalInfo(unzFile file, unz_global_info* pglobal_info32) { unz64_s* s; if (file==NULL) return UNZ_PARAMERROR; @@ -847,10 +747,9 @@ extern int ZEXPORT unzGetGlobalInfo (unzFile file, unz_global_info* pglobal_info return UNZ_OK; } /* - Translate date/time from Dos format to tm_unz (readable more easilty) + Translate date/time from Dos format to tm_unz (readable more easily) */ -local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm) -{ +local void unz64local_DosDateToTmuDate(ZPOS64_T ulDosDate, tm_unz* ptm) { ZPOS64_T uDate; uDate = (ZPOS64_T)(ulDosDate>>16); ptm->tm_mday = (int)(uDate&0x1f) ; @@ -865,28 +764,16 @@ local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm) /* Get Info about the current file in the zipfile, with internal only info */ -local int unz64local_GetCurrentFileInfoInternal OF((unzFile file, - unz_file_info64 *pfile_info, - unz_file_info64_internal - *pfile_info_internal, - char *szFileName, - uLong fileNameBufferSize, - void *extraField, - uLong extraFieldBufferSize, - char *szComment, - uLong commentBufferSize)); - -local int unz64local_GetCurrentFileInfoInternal (unzFile file, - unz_file_info64 *pfile_info, - unz_file_info64_internal - *pfile_info_internal, - char *szFileName, - uLong fileNameBufferSize, - void *extraField, - uLong extraFieldBufferSize, - char *szComment, - uLong commentBufferSize) -{ +local int unz64local_GetCurrentFileInfoInternal(unzFile file, + unz_file_info64 *pfile_info, + unz_file_info64_internal + *pfile_info_internal, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize) { unz64_s* s; unz_file_info64 file_info; unz_file_info64_internal file_info_internal; @@ -1038,33 +925,31 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file, /* ZIP64 extra fields */ if (headerId == 0x0001) { - uLong uL; - - if(file_info.uncompressed_size == MAXU32) - { - if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK) - err=UNZ_ERRNO; - } - - if(file_info.compressed_size == MAXU32) - { - if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK) - err=UNZ_ERRNO; - } - - if(file_info_internal.offset_curfile == MAXU32) - { - /* Relative Header offset */ - if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK) - err=UNZ_ERRNO; - } - - if(file_info.disk_num_start == MAXU32) - { - /* Disk Start Number */ - if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) - err=UNZ_ERRNO; - } + if(file_info.uncompressed_size == MAXU32) + { + if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK) + err=UNZ_ERRNO; + } + + if(file_info.compressed_size == MAXU32) + { + if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK) + err=UNZ_ERRNO; + } + + if(file_info_internal.offset_curfile == MAXU32) + { + /* Relative Header offset */ + if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK) + err=UNZ_ERRNO; + } + + if(file_info.disk_num_start == 0xffff) + { + /* Disk Start Number */ + if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK) + err=UNZ_ERRNO; + } } else @@ -1121,24 +1006,22 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file, No preparation of the structure is needed return UNZ_OK if there is no problem. */ -extern int ZEXPORT unzGetCurrentFileInfo64 (unzFile file, - unz_file_info64 * pfile_info, - char * szFileName, uLong fileNameBufferSize, - void *extraField, uLong extraFieldBufferSize, - char* szComment, uLong commentBufferSize) -{ +extern int ZEXPORT unzGetCurrentFileInfo64(unzFile file, + unz_file_info64 * pfile_info, + char * szFileName, uLong fileNameBufferSize, + void *extraField, uLong extraFieldBufferSize, + char* szComment, uLong commentBufferSize) { return unz64local_GetCurrentFileInfoInternal(file,pfile_info,NULL, - szFileName,fileNameBufferSize, - extraField,extraFieldBufferSize, - szComment,commentBufferSize); + szFileName,fileNameBufferSize, + extraField,extraFieldBufferSize, + szComment,commentBufferSize); } -extern int ZEXPORT unzGetCurrentFileInfo (unzFile file, - unz_file_info * pfile_info, - char * szFileName, uLong fileNameBufferSize, - void *extraField, uLong extraFieldBufferSize, - char* szComment, uLong commentBufferSize) -{ +extern int ZEXPORT unzGetCurrentFileInfo(unzFile file, + unz_file_info * pfile_info, + char * szFileName, uLong fileNameBufferSize, + void *extraField, uLong extraFieldBufferSize, + char* szComment, uLong commentBufferSize) { int err; unz_file_info64 file_info64; err = unz64local_GetCurrentFileInfoInternal(file,&file_info64,NULL, @@ -1162,7 +1045,7 @@ extern int ZEXPORT unzGetCurrentFileInfo (unzFile file, pfile_info->internal_fa = file_info64.internal_fa; pfile_info->external_fa = file_info64.external_fa; - pfile_info->tmu_date = file_info64.tmu_date, + pfile_info->tmu_date = file_info64.tmu_date; pfile_info->compressed_size = (uLong)file_info64.compressed_size; @@ -1175,8 +1058,7 @@ extern int ZEXPORT unzGetCurrentFileInfo (unzFile file, Set the current file of the zipfile to the first file. return UNZ_OK if there is no problem */ -extern int ZEXPORT unzGoToFirstFile (unzFile file) -{ +extern int ZEXPORT unzGoToFirstFile(unzFile file) { int err=UNZ_OK; unz64_s* s; if (file==NULL) @@ -1196,8 +1078,7 @@ extern int ZEXPORT unzGoToFirstFile (unzFile file) return UNZ_OK if there is no problem return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. */ -extern int ZEXPORT unzGoToNextFile (unzFile file) -{ +extern int ZEXPORT unzGoToNextFile(unzFile file) { unz64_s* s; int err; @@ -1229,8 +1110,7 @@ extern int ZEXPORT unzGoToNextFile (unzFile file) UNZ_OK if the file is found. It becomes the current file. UNZ_END_OF_LIST_OF_FILE if the file is not found */ -extern int ZEXPORT unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity) -{ +extern int ZEXPORT unzLocateFile(unzFile file, const char *szFileName, int iCaseSensitivity) { unz64_s* s; int err; @@ -1305,8 +1185,7 @@ typedef struct unz_file_pos_s } unz_file_pos; */ -extern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos* file_pos) -{ +extern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos* file_pos) { unz64_s* s; if (file==NULL || file_pos==NULL) @@ -1321,10 +1200,7 @@ extern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos* file_pos) return UNZ_OK; } -extern int ZEXPORT unzGetFilePos( - unzFile file, - unz_file_pos* file_pos) -{ +extern int ZEXPORT unzGetFilePos(unzFile file, unz_file_pos* file_pos) { unz64_file_pos file_pos64; int err = unzGetFilePos64(file,&file_pos64); if (err==UNZ_OK) @@ -1335,8 +1211,7 @@ extern int ZEXPORT unzGetFilePos( return err; } -extern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos) -{ +extern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos) { unz64_s* s; int err; @@ -1357,10 +1232,7 @@ extern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos return err; } -extern int ZEXPORT unzGoToFilePos( - unzFile file, - unz_file_pos* file_pos) -{ +extern int ZEXPORT unzGoToFilePos(unzFile file, unz_file_pos* file_pos) { unz64_file_pos file_pos64; if (file_pos == NULL) return UNZ_PARAMERROR; @@ -1382,10 +1254,9 @@ extern int ZEXPORT unzGoToFilePos( store in *piSizeVar the size of extra info in local header (filename and size of extra field data) */ -local int unz64local_CheckCurrentFileCoherencyHeader (unz64_s* s, uInt* piSizeVar, - ZPOS64_T * poffset_local_extrafield, - uInt * psize_local_extrafield) -{ +local int unz64local_CheckCurrentFileCoherencyHeader(unz64_s* s, uInt* piSizeVar, + ZPOS64_T * poffset_local_extrafield, + uInt * psize_local_extrafield) { uLong uMagic,uData,uFlags; uLong size_filename; uLong size_extra_field; @@ -1469,9 +1340,8 @@ local int unz64local_CheckCurrentFileCoherencyHeader (unz64_s* s, uInt* piSizeVa Open for reading data the current file in the zipfile. If there is no error and the file is opened, the return value is UNZ_OK. */ -extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method, - int* level, int raw, const char* password) -{ +extern int ZEXPORT unzOpenCurrentFile3(unzFile file, int* method, + int* level, int raw, const char* password) { int err=UNZ_OK; uInt iSizeVar; unz64_s* s; @@ -1509,7 +1379,7 @@ extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method, if (pfile_in_zip_read_info->read_buffer==NULL) { - TRYFREE(pfile_in_zip_read_info); + free(pfile_in_zip_read_info); return UNZ_INTERNALERROR; } @@ -1566,8 +1436,8 @@ extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method, pfile_in_zip_read_info->stream_initialised=Z_BZIP2ED; else { - TRYFREE(pfile_in_zip_read_info->read_buffer); - TRYFREE(pfile_in_zip_read_info); + free(pfile_in_zip_read_info->read_buffer); + free(pfile_in_zip_read_info); return err; } #else @@ -1587,8 +1457,8 @@ extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method, pfile_in_zip_read_info->stream_initialised=Z_DEFLATED; else { - TRYFREE(pfile_in_zip_read_info->read_buffer); - TRYFREE(pfile_in_zip_read_info); + free(pfile_in_zip_read_info->read_buffer); + free(pfile_in_zip_read_info); return err; } /* windowBits is passed < 0 to tell that there is no zlib header. @@ -1640,25 +1510,21 @@ extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method, return UNZ_OK; } -extern int ZEXPORT unzOpenCurrentFile (unzFile file) -{ +extern int ZEXPORT unzOpenCurrentFile(unzFile file) { return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL); } -extern int ZEXPORT unzOpenCurrentFilePassword (unzFile file, const char* password) -{ +extern int ZEXPORT unzOpenCurrentFilePassword(unzFile file, const char* password) { return unzOpenCurrentFile3(file, NULL, NULL, 0, password); } -extern int ZEXPORT unzOpenCurrentFile2 (unzFile file, int* method, int* level, int raw) -{ +extern int ZEXPORT unzOpenCurrentFile2(unzFile file, int* method, int* level, int raw) { return unzOpenCurrentFile3(file, method, level, raw, NULL); } /** Addition for GDAL : START */ -extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64( unzFile file) -{ +extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64(unzFile file) { unz64_s* s; file_in_zip64_read_info_s* pfile_in_zip_read_info; s=(unz64_s*)file; @@ -1678,13 +1544,12 @@ extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64( unzFile file) buf contain buffer where data must be copied len the size of buf. - return the number of byte copied if somes bytes are copied + return the number of byte copied if some bytes are copied return 0 if the end of file was reached return <0 with error code if there is an error (UNZ_ERRNO for IO error, or zLib error for uncompress error) */ -extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len) -{ +extern int ZEXPORT unzReadCurrentFile(unzFile file, voidp buf, unsigned len) { int err=UNZ_OK; uInt iRead = 0; unz64_s* s; @@ -1891,8 +1756,7 @@ extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len) /* Give the current position in uncompressed data */ -extern z_off_t ZEXPORT unztell (unzFile file) -{ +extern z_off_t ZEXPORT unztell(unzFile file) { unz64_s* s; file_in_zip64_read_info_s* pfile_in_zip_read_info; if (file==NULL) @@ -1906,8 +1770,7 @@ extern z_off_t ZEXPORT unztell (unzFile file) return (z_off_t)pfile_in_zip_read_info->stream.total_out; } -extern ZPOS64_T ZEXPORT unztell64 (unzFile file) -{ +extern ZPOS64_T ZEXPORT unztell64(unzFile file) { unz64_s* s; file_in_zip64_read_info_s* pfile_in_zip_read_info; @@ -1926,8 +1789,7 @@ extern ZPOS64_T ZEXPORT unztell64 (unzFile file) /* return 1 if the end of file was reached, 0 elsewhere */ -extern int ZEXPORT unzeof (unzFile file) -{ +extern int ZEXPORT unzeof(unzFile file) { unz64_s* s; file_in_zip64_read_info_s* pfile_in_zip_read_info; if (file==NULL) @@ -1958,8 +1820,7 @@ more info in the local-header version than in the central-header) the return value is the number of bytes copied in buf, or (if <0) the error code */ -extern int ZEXPORT unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len) -{ +extern int ZEXPORT unzGetLocalExtrafield(unzFile file, voidp buf, unsigned len) { unz64_s* s; file_in_zip64_read_info_s* pfile_in_zip_read_info; uInt read_now; @@ -2006,8 +1867,7 @@ extern int ZEXPORT unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len) Close the file in zip opened with unzOpenCurrentFile Return UNZ_CRCERROR if all the file was read but the CRC is not good */ -extern int ZEXPORT unzCloseCurrentFile (unzFile file) -{ +extern int ZEXPORT unzCloseCurrentFile(unzFile file) { int err=UNZ_OK; unz64_s* s; @@ -2029,7 +1889,7 @@ extern int ZEXPORT unzCloseCurrentFile (unzFile file) } - TRYFREE(pfile_in_zip_read_info->read_buffer); + free(pfile_in_zip_read_info->read_buffer); pfile_in_zip_read_info->read_buffer = NULL; if (pfile_in_zip_read_info->stream_initialised == Z_DEFLATED) inflateEnd(&pfile_in_zip_read_info->stream); @@ -2040,7 +1900,7 @@ extern int ZEXPORT unzCloseCurrentFile (unzFile file) pfile_in_zip_read_info->stream_initialised = 0; - TRYFREE(pfile_in_zip_read_info); + free(pfile_in_zip_read_info); s->pfile_in_zip_read=NULL; @@ -2053,8 +1913,7 @@ extern int ZEXPORT unzCloseCurrentFile (unzFile file) uSizeBuf is the size of the szComment buffer. return the number of byte copied or an error code <0 */ -extern int ZEXPORT unzGetGlobalComment (unzFile file, char * szComment, uLong uSizeBuf) -{ +extern int ZEXPORT unzGetGlobalComment(unzFile file, char * szComment, uLong uSizeBuf) { unz64_s* s; uLong uReadThis ; if (file==NULL) @@ -2081,8 +1940,7 @@ extern int ZEXPORT unzGetGlobalComment (unzFile file, char * szComment, uLong uS } /* Additions by RX '2004 */ -extern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file) -{ +extern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file) { unz64_s* s; if (file==NULL) @@ -2096,8 +1954,7 @@ extern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file) return s->pos_in_central_dir; } -extern uLong ZEXPORT unzGetOffset (unzFile file) -{ +extern uLong ZEXPORT unzGetOffset(unzFile file) { ZPOS64_T offset64; if (file==NULL) @@ -2106,8 +1963,7 @@ extern uLong ZEXPORT unzGetOffset (unzFile file) return (uLong)offset64; } -extern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos) -{ +extern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos) { unz64_s* s; int err; @@ -2124,7 +1980,6 @@ extern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos) return err; } -extern int ZEXPORT unzSetOffset (unzFile file, uLong pos) -{ +extern int ZEXPORT unzSetOffset (unzFile file, uLong pos) { return unzSetOffset64(file,pos); } diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/unzip.h b/src/zlib/zlib-1.3/contrib/minizip/unzip.h similarity index 76% rename from src/zlib/zlib-1.2.13/contrib/minizip/unzip.h rename to src/zlib/zlib-1.3/contrib/minizip/unzip.h index 6f95e94d7..14105840f 100644 --- a/src/zlib/zlib-1.2.13/contrib/minizip/unzip.h +++ b/src/zlib/zlib-1.3/contrib/minizip/unzip.h @@ -150,21 +150,21 @@ typedef struct unz_file_info_s tm_unz tmu_date; } unz_file_info; -extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1, - const char* fileName2, - int iCaseSensitivity)); +extern int ZEXPORT unzStringFileNameCompare(const char* fileName1, + const char* fileName2, + int iCaseSensitivity); /* - Compare two filename (fileName1,fileName2). - If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp) - If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi + Compare two filenames (fileName1,fileName2). + If iCaseSensitivity = 1, comparison is case sensitive (like strcmp) + If iCaseSensitivity = 2, comparison is not case sensitive (like strcmpi or strcasecmp) - If iCaseSenisivity = 0, case sensitivity is defaut of your operating system + If iCaseSensitivity = 0, case sensitivity is default of your operating system (like 1 on Unix, 2 on Windows) */ -extern unzFile ZEXPORT unzOpen OF((const char *path)); -extern unzFile ZEXPORT unzOpen64 OF((const void *path)); +extern unzFile ZEXPORT unzOpen(const char *path); +extern unzFile ZEXPORT unzOpen64(const void *path); /* Open a Zip file. path contain the full pathname (by example, on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer @@ -181,41 +181,41 @@ extern unzFile ZEXPORT unzOpen64 OF((const void *path)); */ -extern unzFile ZEXPORT unzOpen2 OF((const char *path, - zlib_filefunc_def* pzlib_filefunc_def)); +extern unzFile ZEXPORT unzOpen2(const char *path, + zlib_filefunc_def* pzlib_filefunc_def); /* Open a Zip file, like unzOpen, but provide a set of file low level API for read/write the zip file (see ioapi.h) */ -extern unzFile ZEXPORT unzOpen2_64 OF((const void *path, - zlib_filefunc64_def* pzlib_filefunc_def)); +extern unzFile ZEXPORT unzOpen2_64(const void *path, + zlib_filefunc64_def* pzlib_filefunc_def); /* Open a Zip file, like unz64Open, but provide a set of file low level API for read/write the zip file (see ioapi.h) */ -extern int ZEXPORT unzClose OF((unzFile file)); +extern int ZEXPORT unzClose(unzFile file); /* Close a ZipFile opened with unzOpen. If there is files inside the .Zip opened with unzOpenCurrentFile (see later), these files MUST be closed with unzCloseCurrentFile before call unzClose. return UNZ_OK if there is no problem. */ -extern int ZEXPORT unzGetGlobalInfo OF((unzFile file, - unz_global_info *pglobal_info)); +extern int ZEXPORT unzGetGlobalInfo(unzFile file, + unz_global_info *pglobal_info); -extern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file, - unz_global_info64 *pglobal_info)); +extern int ZEXPORT unzGetGlobalInfo64(unzFile file, + unz_global_info64 *pglobal_info); /* Write info about the ZipFile in the *pglobal_info structure. No preparation of the structure is needed return UNZ_OK if there is no problem. */ -extern int ZEXPORT unzGetGlobalComment OF((unzFile file, - char *szComment, - uLong uSizeBuf)); +extern int ZEXPORT unzGetGlobalComment(unzFile file, + char *szComment, + uLong uSizeBuf); /* Get the global comment string of the ZipFile, in the szComment buffer. uSizeBuf is the size of the szComment buffer. @@ -226,22 +226,22 @@ extern int ZEXPORT unzGetGlobalComment OF((unzFile file, /***************************************************************************/ /* Unzip package allow you browse the directory of the zipfile */ -extern int ZEXPORT unzGoToFirstFile OF((unzFile file)); +extern int ZEXPORT unzGoToFirstFile(unzFile file); /* Set the current file of the zipfile to the first file. return UNZ_OK if there is no problem */ -extern int ZEXPORT unzGoToNextFile OF((unzFile file)); +extern int ZEXPORT unzGoToNextFile(unzFile file); /* Set the current file of the zipfile to the next file. return UNZ_OK if there is no problem return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. */ -extern int ZEXPORT unzLocateFile OF((unzFile file, - const char *szFileName, - int iCaseSensitivity)); +extern int ZEXPORT unzLocateFile(unzFile file, + const char *szFileName, + int iCaseSensitivity); /* Try locate the file szFileName in the zipfile. For the iCaseSensitivity signification, see unzStringFileNameCompare @@ -285,26 +285,26 @@ extern int ZEXPORT unzGoToFilePos64( /* ****************************************** */ -extern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file, - unz_file_info64 *pfile_info, - char *szFileName, - uLong fileNameBufferSize, - void *extraField, - uLong extraFieldBufferSize, - char *szComment, - uLong commentBufferSize)); - -extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, - unz_file_info *pfile_info, - char *szFileName, - uLong fileNameBufferSize, - void *extraField, - uLong extraFieldBufferSize, - char *szComment, - uLong commentBufferSize)); +extern int ZEXPORT unzGetCurrentFileInfo64(unzFile file, + unz_file_info64 *pfile_info, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize); + +extern int ZEXPORT unzGetCurrentFileInfo(unzFile file, + unz_file_info *pfile_info, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize); /* Get Info about the current file - if pfile_info!=NULL, the *pfile_info structure will contain somes info about + if pfile_info!=NULL, the *pfile_info structure will contain some info about the current file if szFileName!=NULL, the filemane string will be copied in szFileName (fileNameBufferSize is the size of the buffer) @@ -318,7 +318,7 @@ extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file, /** Addition for GDAL : START */ -extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file)); +extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64(unzFile file); /** Addition for GDAL : END */ @@ -328,24 +328,24 @@ extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file)); from it, and close it (you can close it before reading all the file) */ -extern int ZEXPORT unzOpenCurrentFile OF((unzFile file)); +extern int ZEXPORT unzOpenCurrentFile(unzFile file); /* Open for reading data the current file in the zipfile. If there is no error, the return value is UNZ_OK. */ -extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file, - const char* password)); +extern int ZEXPORT unzOpenCurrentFilePassword(unzFile file, + const char* password); /* Open for reading data the current file in the zipfile. password is a crypting password If there is no error, the return value is UNZ_OK. */ -extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file, - int* method, - int* level, - int raw)); +extern int ZEXPORT unzOpenCurrentFile2(unzFile file, + int* method, + int* level, + int raw); /* Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) if raw==1 @@ -355,11 +355,11 @@ extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file, but you CANNOT set method parameter as NULL */ -extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file, - int* method, - int* level, - int raw, - const char* password)); +extern int ZEXPORT unzOpenCurrentFile3(unzFile file, + int* method, + int* level, + int raw, + const char* password); /* Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) if raw==1 @@ -370,41 +370,41 @@ extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file, */ -extern int ZEXPORT unzCloseCurrentFile OF((unzFile file)); +extern int ZEXPORT unzCloseCurrentFile(unzFile file); /* Close the file in zip opened with unzOpenCurrentFile Return UNZ_CRCERROR if all the file was read but the CRC is not good */ -extern int ZEXPORT unzReadCurrentFile OF((unzFile file, - voidp buf, - unsigned len)); +extern int ZEXPORT unzReadCurrentFile(unzFile file, + voidp buf, + unsigned len); /* Read bytes from the current file (opened by unzOpenCurrentFile) buf contain buffer where data must be copied len the size of buf. - return the number of byte copied if somes bytes are copied + return the number of byte copied if some bytes are copied return 0 if the end of file was reached return <0 with error code if there is an error (UNZ_ERRNO for IO error, or zLib error for uncompress error) */ -extern z_off_t ZEXPORT unztell OF((unzFile file)); +extern z_off_t ZEXPORT unztell(unzFile file); -extern ZPOS64_T ZEXPORT unztell64 OF((unzFile file)); +extern ZPOS64_T ZEXPORT unztell64(unzFile file); /* Give the current position in uncompressed data */ -extern int ZEXPORT unzeof OF((unzFile file)); +extern int ZEXPORT unzeof(unzFile file); /* return 1 if the end of file was reached, 0 elsewhere */ -extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file, - voidp buf, - unsigned len)); +extern int ZEXPORT unzGetLocalExtrafield(unzFile file, + voidp buf, + unsigned len); /* Read extra field from the current file (opened by unzOpenCurrentFile) This is the local-header version of the extra field (sometimes, there is diff --git a/src/zlib/zlib-1.2.13/contrib/minizip/zip.c b/src/zlib/zlib-1.3/contrib/minizip/zip.c similarity index 85% rename from src/zlib/zlib-1.2.13/contrib/minizip/zip.c rename to src/zlib/zlib-1.3/contrib/minizip/zip.c index 66d693f85..3d3d4cadd 100644 --- a/src/zlib/zlib-1.2.13/contrib/minizip/zip.c +++ b/src/zlib/zlib-1.3/contrib/minizip/zip.c @@ -14,7 +14,7 @@ Oct-2009 - Mathias Svensson - Added Zip64 Support when creating new file archives Oct-2009 - Mathias Svensson - Did some code cleanup and refactoring to get better overview of some functions. Oct-2009 - Mathias Svensson - Added zipRemoveExtraInfoBlock to strip extra field data from its ZIP64 data - It is used when recreting zip archive with RAW when deleting items from a zip. + It is used when recreating zip archive with RAW when deleting items from a zip. ZIP64 data is automatically added to items that needs it, and existing ZIP64 data need to be removed. Oct-2009 - Mathias Svensson - Added support for BZIP2 as compression mode (bzip2 lib is required) Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer @@ -25,14 +25,13 @@ #include #include #include +#include #include #include "zlib.h" #include "zip.h" #ifdef STDC # include -# include -# include #endif #ifdef NO_ERRNO_H extern int errno; @@ -47,7 +46,7 @@ /* compile with -Dlocal if your debugger can't find static symbols */ #ifndef VERSIONMADEBY -# define VERSIONMADEBY (0x0) /* platform depedent */ +# define VERSIONMADEBY (0x0) /* platform dependent */ #endif #ifndef Z_BUFSIZE @@ -61,9 +60,6 @@ #ifndef ALLOC # define ALLOC(size) (malloc(size)) #endif -#ifndef TRYFREE -# define TRYFREE(p) {if (p) free(p);} -#endif /* #define SIZECENTRALDIRITEM (0x2e) @@ -138,20 +134,20 @@ typedef struct uInt pos_in_buffered_data; /* last written byte in buffered_data */ ZPOS64_T pos_local_header; /* offset of the local header of the file - currenty writing */ + currently writing */ char* central_header; /* central header data for the current file */ uLong size_centralExtra; uLong size_centralheader; /* size of the central header for cur file */ uLong size_centralExtraFree; /* Extra bytes allocated to the centralheader but that are not used */ uLong flag; /* flag of the file currently writing */ - int method; /* compression method of file currenty wr.*/ + int method; /* compression method of file currently wr.*/ int raw; /* 1 for directly writing raw data */ Byte buffered_data[Z_BUFSIZE];/* buffer contain compressed data to be writ*/ uLong dosDate; uLong crc32; int encrypt; - int zip64; /* Add ZIP64 extened information in the extra field */ + int zip64; /* Add ZIP64 extended information in the extra field */ ZPOS64_T pos_zip64extrainfo; ZPOS64_T totalCompressedData; ZPOS64_T totalUncompressedData; @@ -165,10 +161,10 @@ typedef struct typedef struct { zlib_filefunc64_32_def z_filefunc; - voidpf filestream; /* io structore of the zipfile */ + voidpf filestream; /* io structure of the zipfile */ linkedlist_data central_dir;/* datablock with central dir in construction*/ int in_opened_file_inzip; /* 1 if a file in the zip is currently writ.*/ - curfile64_info ci; /* info on the file curretly writing */ + curfile64_info ci; /* info on the file currently writing */ ZPOS64_T begin_pos; /* position of the beginning of the zipfile */ ZPOS64_T add_position_when_writing_offset; @@ -186,8 +182,7 @@ typedef struct #include "crypt.h" #endif -local linkedlist_datablock_internal* allocate_new_datablock() -{ +local linkedlist_datablock_internal* allocate_new_datablock(void) { linkedlist_datablock_internal* ldi; ldi = (linkedlist_datablock_internal*) ALLOC(sizeof(linkedlist_datablock_internal)); @@ -200,30 +195,26 @@ local linkedlist_datablock_internal* allocate_new_datablock() return ldi; } -local void free_datablock(linkedlist_datablock_internal* ldi) -{ +local void free_datablock(linkedlist_datablock_internal* ldi) { while (ldi!=NULL) { linkedlist_datablock_internal* ldinext = ldi->next_datablock; - TRYFREE(ldi); + free(ldi); ldi = ldinext; } } -local void init_linkedlist(linkedlist_data* ll) -{ +local void init_linkedlist(linkedlist_data* ll) { ll->first_block = ll->last_block = NULL; } -local void free_linkedlist(linkedlist_data* ll) -{ +local void free_linkedlist(linkedlist_data* ll) { free_datablock(ll->first_block); ll->first_block = ll->last_block = NULL; } -local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len) -{ +local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len) { linkedlist_datablock_internal* ldi; const unsigned char* from_copy; @@ -238,7 +229,7 @@ local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len) } ldi = ll->last_block; - from_copy = (unsigned char*)buf; + from_copy = (const unsigned char*)buf; while (len>0) { @@ -283,9 +274,7 @@ local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len) nbByte == 1, 2 ,4 or 8 (byte, short or long, ZPOS64_T) */ -local int zip64local_putValue OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte)); -local int zip64local_putValue (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte) -{ +local int zip64local_putValue(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte) { unsigned char buf[8]; int n; for (n = 0; n < nbByte; n++) @@ -307,9 +296,7 @@ local int zip64local_putValue (const zlib_filefunc64_32_def* pzlib_filefunc_def, return ZIP_OK; } -local void zip64local_putValue_inmemory OF((void* dest, ZPOS64_T x, int nbByte)); -local void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbByte) -{ +local void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbByte) { unsigned char* buf=(unsigned char*)dest; int n; for (n = 0; n < nbByte; n++) { @@ -329,8 +316,7 @@ local void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbByte) /****************************************************************************/ -local uLong zip64local_TmzDateToDosDate(const tm_zip* ptm) -{ +local uLong zip64local_TmzDateToDosDate(const tm_zip* ptm) { uLong year = (uLong)ptm->tm_year; if (year>=1980) year-=1980; @@ -344,10 +330,7 @@ local uLong zip64local_TmzDateToDosDate(const tm_zip* ptm) /****************************************************************************/ -local int zip64local_getByte OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi)); - -local int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def,voidpf filestream,int* pi) -{ +local int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int* pi) { unsigned char c; int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1); if (err==1) @@ -368,10 +351,7 @@ local int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def,vo /* =========================================================================== Reads a long in LSB order from the given gz_stream. Sets */ -local int zip64local_getShort OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX)); - -local int zip64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX) -{ +local int zip64local_getShort(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX) { uLong x ; int i = 0; int err; @@ -390,10 +370,7 @@ local int zip64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def, return err; } -local int zip64local_getLong OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX)); - -local int zip64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX) -{ +local int zip64local_getLong(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX) { uLong x ; int i = 0; int err; @@ -420,11 +397,8 @@ local int zip64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def, return err; } -local int zip64local_getLong64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX)); - -local int zip64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX) -{ +local int zip64local_getLong64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX) { ZPOS64_T x; int i = 0; int err; @@ -475,10 +449,7 @@ local int zip64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def Locate the Central directory of a zipfile (at the end, just before the global comment) */ -local ZPOS64_T zip64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)); - -local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) -{ +local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) { unsigned char* buf; ZPOS64_T uSizeFile; ZPOS64_T uBackRead; @@ -529,7 +500,7 @@ local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f if (uPosFound!=0) break; } - TRYFREE(buf); + free(buf); return uPosFound; } @@ -537,10 +508,7 @@ local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f Locate the End of Zip64 Central directory locator and from there find the CD of a zipfile (at the end, just before the global comment) */ -local ZPOS64_T zip64local_SearchCentralDir64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)); - -local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) -{ +local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) { unsigned char* buf; ZPOS64_T uSizeFile; ZPOS64_T uBackRead; @@ -595,7 +563,7 @@ local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib break; } - TRYFREE(buf); + free(buf); if (uPosFound == 0) return 0; @@ -637,8 +605,7 @@ local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib return relativeOffset; } -local int LoadCentralDirectoryRecord(zip64_internal* pziinit) -{ +local int LoadCentralDirectoryRecord(zip64_internal* pziinit) { int err=ZIP_OK; ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ @@ -648,9 +615,9 @@ local int LoadCentralDirectoryRecord(zip64_internal* pziinit) uLong uL; uLong number_disk; /* number of the current dist, used for - spaning ZIP, unsupported, always 0*/ + spanning ZIP, unsupported, always 0*/ uLong number_disk_with_CD; /* number the the disk with central dir, used - for spaning ZIP, unsupported, always 0*/ + for spanning ZIP, unsupported, always 0*/ ZPOS64_T number_entry; ZPOS64_T number_entry_CD; /* total number of entries in the central dir @@ -830,7 +797,7 @@ local int LoadCentralDirectoryRecord(zip64_internal* pziinit) size_central_dir_to_read-=read_this; } - TRYFREE(buf_read); + free(buf_read); } pziinit->begin_pos = byte_before_the_zipfile; pziinit->number_entry = number_entry_CD; @@ -846,8 +813,7 @@ local int LoadCentralDirectoryRecord(zip64_internal* pziinit) /************************************************************/ -extern zipFile ZEXPORT zipOpen3 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_32_def* pzlib_filefunc64_32_def) -{ +extern zipFile ZEXPORT zipOpen3(const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_32_def* pzlib_filefunc64_32_def) { zip64_internal ziinit; zip64_internal* zi; int err=ZIP_OK; @@ -905,9 +871,9 @@ extern zipFile ZEXPORT zipOpen3 (const void *pathname, int append, zipcharpc* gl if (err != ZIP_OK) { # ifndef NO_ADDFILEINEXISTINGZIP - TRYFREE(ziinit.globalcomment); + free(ziinit.globalcomment); # endif /* !NO_ADDFILEINEXISTINGZIP*/ - TRYFREE(zi); + free(zi); return NULL; } else @@ -917,8 +883,7 @@ extern zipFile ZEXPORT zipOpen3 (const void *pathname, int append, zipcharpc* gl } } -extern zipFile ZEXPORT zipOpen2 (const char *pathname, int append, zipcharpc* globalcomment, zlib_filefunc_def* pzlib_filefunc32_def) -{ +extern zipFile ZEXPORT zipOpen2(const char *pathname, int append, zipcharpc* globalcomment, zlib_filefunc_def* pzlib_filefunc32_def) { if (pzlib_filefunc32_def != NULL) { zlib_filefunc64_32_def zlib_filefunc64_32_def_fill; @@ -929,8 +894,7 @@ extern zipFile ZEXPORT zipOpen2 (const char *pathname, int append, zipcharpc* gl return zipOpen3(pathname, append, globalcomment, NULL); } -extern zipFile ZEXPORT zipOpen2_64 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_def* pzlib_filefunc_def) -{ +extern zipFile ZEXPORT zipOpen2_64(const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_def* pzlib_filefunc_def) { if (pzlib_filefunc_def != NULL) { zlib_filefunc64_32_def zlib_filefunc64_32_def_fill; @@ -945,18 +909,15 @@ extern zipFile ZEXPORT zipOpen2_64 (const void *pathname, int append, zipcharpc* -extern zipFile ZEXPORT zipOpen (const char* pathname, int append) -{ +extern zipFile ZEXPORT zipOpen(const char* pathname, int append) { return zipOpen3((const void*)pathname,append,NULL,NULL); } -extern zipFile ZEXPORT zipOpen64 (const void* pathname, int append) -{ +extern zipFile ZEXPORT zipOpen64(const void* pathname, int append) { return zipOpen3(pathname,append,NULL,NULL); } -local int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local) -{ +local int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local) { /* write the local header */ int err; uInt size_filename = (uInt)strlen(filename); @@ -1052,14 +1013,13 @@ local int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt s It is not done here because then we need to realloc a new buffer since parameters are 'const' and I want to minimize unnecessary allocations. */ -extern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename, const zip_fileinfo* zipfi, - const void* extrafield_local, uInt size_extrafield_local, - const void* extrafield_global, uInt size_extrafield_global, - const char* comment, int method, int level, int raw, - int windowBits,int memLevel, int strategy, - const char* password, uLong crcForCrypting, - uLong versionMadeBy, uLong flagBase, int zip64) -{ +extern int ZEXPORT zipOpenNewFileInZip4_64(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, + int windowBits,int memLevel, int strategy, + const char* password, uLong crcForCrypting, + uLong versionMadeBy, uLong flagBase, int zip64) { zip64_internal* zi; uInt size_filename; uInt size_comment; @@ -1262,35 +1222,33 @@ extern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename, return err; } -extern int ZEXPORT zipOpenNewFileInZip4 (zipFile file, const char* filename, const zip_fileinfo* zipfi, - const void* extrafield_local, uInt size_extrafield_local, - const void* extrafield_global, uInt size_extrafield_global, - const char* comment, int method, int level, int raw, - int windowBits,int memLevel, int strategy, - const char* password, uLong crcForCrypting, - uLong versionMadeBy, uLong flagBase) -{ - return zipOpenNewFileInZip4_64 (file, filename, zipfi, - extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, - comment, method, level, raw, - windowBits, memLevel, strategy, - password, crcForCrypting, versionMadeBy, flagBase, 0); +extern int ZEXPORT zipOpenNewFileInZip4(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, + int windowBits,int memLevel, int strategy, + const char* password, uLong crcForCrypting, + uLong versionMadeBy, uLong flagBase) { + return zipOpenNewFileInZip4_64(file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + windowBits, memLevel, strategy, + password, crcForCrypting, versionMadeBy, flagBase, 0); } -extern int ZEXPORT zipOpenNewFileInZip3 (zipFile file, const char* filename, const zip_fileinfo* zipfi, - const void* extrafield_local, uInt size_extrafield_local, - const void* extrafield_global, uInt size_extrafield_global, - const char* comment, int method, int level, int raw, - int windowBits,int memLevel, int strategy, - const char* password, uLong crcForCrypting) -{ - return zipOpenNewFileInZip4_64 (file, filename, zipfi, - extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, - comment, method, level, raw, - windowBits, memLevel, strategy, - password, crcForCrypting, VERSIONMADEBY, 0, 0); +extern int ZEXPORT zipOpenNewFileInZip3(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, + int windowBits,int memLevel, int strategy, + const char* password, uLong crcForCrypting) { + return zipOpenNewFileInZip4_64(file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + windowBits, memLevel, strategy, + password, crcForCrypting, VERSIONMADEBY, 0, 0); } extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char* filename, const zip_fileinfo* zipfi, @@ -1298,70 +1256,64 @@ extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char* filename, c const void* extrafield_global, uInt size_extrafield_global, const char* comment, int method, int level, int raw, int windowBits,int memLevel, int strategy, - const char* password, uLong crcForCrypting, int zip64) -{ - return zipOpenNewFileInZip4_64 (file, filename, zipfi, - extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, - comment, method, level, raw, - windowBits, memLevel, strategy, - password, crcForCrypting, VERSIONMADEBY, 0, zip64); + const char* password, uLong crcForCrypting, int zip64) { + return zipOpenNewFileInZip4_64(file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + windowBits, memLevel, strategy, + password, crcForCrypting, VERSIONMADEBY, 0, zip64); } extern int ZEXPORT zipOpenNewFileInZip2(zipFile file, const char* filename, const zip_fileinfo* zipfi, const void* extrafield_local, uInt size_extrafield_local, const void* extrafield_global, uInt size_extrafield_global, - const char* comment, int method, int level, int raw) -{ - return zipOpenNewFileInZip4_64 (file, filename, zipfi, - extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, - comment, method, level, raw, - -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, - NULL, 0, VERSIONMADEBY, 0, 0); + const char* comment, int method, int level, int raw) { + return zipOpenNewFileInZip4_64(file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + NULL, 0, VERSIONMADEBY, 0, 0); } extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, const char* filename, const zip_fileinfo* zipfi, - const void* extrafield_local, uInt size_extrafield_local, - const void* extrafield_global, uInt size_extrafield_global, - const char* comment, int method, int level, int raw, int zip64) -{ - return zipOpenNewFileInZip4_64 (file, filename, zipfi, - extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, - comment, method, level, raw, - -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, - NULL, 0, VERSIONMADEBY, 0, zip64); + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, int zip64) { + return zipOpenNewFileInZip4_64(file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + NULL, 0, VERSIONMADEBY, 0, zip64); } -extern int ZEXPORT zipOpenNewFileInZip64 (zipFile file, const char* filename, const zip_fileinfo* zipfi, - const void* extrafield_local, uInt size_extrafield_local, - const void*extrafield_global, uInt size_extrafield_global, - const char* comment, int method, int level, int zip64) -{ - return zipOpenNewFileInZip4_64 (file, filename, zipfi, - extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, - comment, method, level, 0, - -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, - NULL, 0, VERSIONMADEBY, 0, zip64); +extern int ZEXPORT zipOpenNewFileInZip64(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void*extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int zip64) { + return zipOpenNewFileInZip4_64(file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, 0, + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + NULL, 0, VERSIONMADEBY, 0, zip64); } -extern int ZEXPORT zipOpenNewFileInZip (zipFile file, const char* filename, const zip_fileinfo* zipfi, - const void* extrafield_local, uInt size_extrafield_local, - const void*extrafield_global, uInt size_extrafield_global, - const char* comment, int method, int level) -{ - return zipOpenNewFileInZip4_64 (file, filename, zipfi, - extrafield_local, size_extrafield_local, - extrafield_global, size_extrafield_global, - comment, method, level, 0, - -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, - NULL, 0, VERSIONMADEBY, 0, 0); +extern int ZEXPORT zipOpenNewFileInZip(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void*extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level) { + return zipOpenNewFileInZip4_64(file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, 0, + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + NULL, 0, VERSIONMADEBY, 0, 0); } -local int zip64FlushWriteBuffer(zip64_internal* zi) -{ +local int zip64FlushWriteBuffer(zip64_internal* zi) { int err=ZIP_OK; if (zi->ci.encrypt != 0) @@ -1399,8 +1351,7 @@ local int zip64FlushWriteBuffer(zip64_internal* zi) return err; } -extern int ZEXPORT zipWriteInFileInZip (zipFile file,const void* buf,unsigned int len) -{ +extern int ZEXPORT zipWriteInFileInZip(zipFile file, const void* buf, unsigned int len) { zip64_internal* zi; int err=ZIP_OK; @@ -1450,7 +1401,7 @@ extern int ZEXPORT zipWriteInFileInZip (zipFile file,const void* buf,unsigned in else #endif { - zi->ci.stream.next_in = (Bytef*)buf; + zi->ci.stream.next_in = (Bytef*)(uintptr_t)buf; zi->ci.stream.avail_in = len; while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0)) @@ -1501,13 +1452,11 @@ extern int ZEXPORT zipWriteInFileInZip (zipFile file,const void* buf,unsigned in return err; } -extern int ZEXPORT zipCloseFileInZipRaw (zipFile file, uLong uncompressed_size, uLong crc32) -{ +extern int ZEXPORT zipCloseFileInZipRaw(zipFile file, uLong uncompressed_size, uLong crc32) { return zipCloseFileInZipRaw64 (file, uncompressed_size, crc32); } -extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_size, uLong crc32) -{ +extern int ZEXPORT zipCloseFileInZipRaw64(zipFile file, ZPOS64_T uncompressed_size, uLong crc32) { zip64_internal* zi; ZPOS64_T compressed_size; uLong invalidValue = 0xffffffff; @@ -1742,13 +1691,11 @@ extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_s return err; } -extern int ZEXPORT zipCloseFileInZip (zipFile file) -{ +extern int ZEXPORT zipCloseFileInZip(zipFile file) { return zipCloseFileInZipRaw (file,0,0); } -local int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip) -{ +local int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip) { int err = ZIP_OK; ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writing_offset; @@ -1769,8 +1716,7 @@ local int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T z return err; } -local int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) -{ +local int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) { int err = ZIP_OK; uLong Zip64DataSize = 44; @@ -1808,8 +1754,8 @@ local int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_ } return err; } -local int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) -{ + +local int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) { int err = ZIP_OK; /*signature*/ @@ -1856,8 +1802,7 @@ local int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centr return err; } -local int Write_GlobalComment(zip64_internal* zi, const char* global_comment) -{ +local int Write_GlobalComment(zip64_internal* zi, const char* global_comment) { int err = ZIP_OK; uInt size_global_comment = 0; @@ -1874,8 +1819,7 @@ local int Write_GlobalComment(zip64_internal* zi, const char* global_comment) return err; } -extern int ZEXPORT zipClose (zipFile file, const char* global_comment) -{ +extern int ZEXPORT zipClose(zipFile file, const char* global_comment) { zip64_internal* zi; int err = 0; uLong size_centraldir = 0; @@ -1936,15 +1880,14 @@ extern int ZEXPORT zipClose (zipFile file, const char* global_comment) err = ZIP_ERRNO; #ifndef NO_ADDFILEINEXISTINGZIP - TRYFREE(zi->globalcomment); + free(zi->globalcomment); #endif - TRYFREE(zi); + free(zi); return err; } -extern int ZEXPORT zipRemoveExtraInfoBlock (char* pData, int* dataLen, short sHeader) -{ +extern int ZEXPORT zipRemoveExtraInfoBlock(char* pData, int* dataLen, short sHeader) { char* p = pData; int size = 0; char* pNewHeader; @@ -1996,7 +1939,7 @@ extern int ZEXPORT zipRemoveExtraInfoBlock (char* pData, int* dataLen, short sHe else retVal = ZIP_ERRNO; - TRYFREE(pNewHeader); + free(pNewHeader); return retVal; } diff --git a/src/zlib/zlib-1.3/contrib/minizip/zip.h b/src/zlib/zlib-1.3/contrib/minizip/zip.h new file mode 100644 index 000000000..5fc084132 --- /dev/null +++ b/src/zlib/zlib-1.3/contrib/minizip/zip.h @@ -0,0 +1,364 @@ +/* zip.h -- IO on .zip files using zlib + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + + --------------------------------------------------------------------------- + + Condition of use and distribution are the same than zlib : + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + --------------------------------------------------------------------------- + + Changes + + See header of zip.h + +*/ + +#ifndef _zip12_H +#define _zip12_H + +#ifdef __cplusplus +extern "C" { +#endif + +//#define HAVE_BZIP2 + +#ifndef _ZLIB_H +#include "zlib.h" +#endif + +#ifndef _ZLIBIOAPI_H +#include "ioapi.h" +#endif + +#ifdef HAVE_BZIP2 +#include "bzlib.h" +#endif + +#define Z_BZIP2ED 12 + +#if defined(STRICTZIP) || defined(STRICTZIPUNZIP) +/* like the STRICT of WIN32, we define a pointer that cannot be converted + from (void*) without cast */ +typedef struct TagzipFile__ { int unused; } zipFile__; +typedef zipFile__ *zipFile; +#else +typedef voidp zipFile; +#endif + +#define ZIP_OK (0) +#define ZIP_EOF (0) +#define ZIP_ERRNO (Z_ERRNO) +#define ZIP_PARAMERROR (-102) +#define ZIP_BADZIPFILE (-103) +#define ZIP_INTERNALERROR (-104) + +#ifndef DEF_MEM_LEVEL +# if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +# else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +# endif +#endif +/* default memLevel */ + +/* tm_zip contain date/time info */ +typedef struct tm_zip_s +{ + int tm_sec; /* seconds after the minute - [0,59] */ + int tm_min; /* minutes after the hour - [0,59] */ + int tm_hour; /* hours since midnight - [0,23] */ + int tm_mday; /* day of the month - [1,31] */ + int tm_mon; /* months since January - [0,11] */ + int tm_year; /* years - [1980..2044] */ +} tm_zip; + +typedef struct +{ + tm_zip tmz_date; /* date in understandable format */ + uLong dosDate; /* if dos_date == 0, tmu_date is used */ +/* uLong flag; */ /* general purpose bit flag 2 bytes */ + + uLong internal_fa; /* internal file attributes 2 bytes */ + uLong external_fa; /* external file attributes 4 bytes */ +} zip_fileinfo; + +typedef const char* zipcharpc; + + +#define APPEND_STATUS_CREATE (0) +#define APPEND_STATUS_CREATEAFTER (1) +#define APPEND_STATUS_ADDINZIP (2) + +extern zipFile ZEXPORT zipOpen(const char *pathname, int append); +extern zipFile ZEXPORT zipOpen64(const void *pathname, int append); +/* + Create a zipfile. + pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on + an Unix computer "zlib/zlib113.zip". + if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip + will be created at the end of the file. + (useful if the file contain a self extractor code) + if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will + add files in existing zip (be sure you don't add file that doesn't exist) + If the zipfile cannot be opened, the return value is NULL. + Else, the return value is a zipFile Handle, usable with other function + of this zip package. +*/ + +/* Note : there is no delete function into a zipfile. + If you want delete file into a zipfile, you must open a zipfile, and create another + Of course, you can use RAW reading and writing to copy the file you did not want delete +*/ + +extern zipFile ZEXPORT zipOpen2(const char *pathname, + int append, + zipcharpc* globalcomment, + zlib_filefunc_def* pzlib_filefunc_def); + +extern zipFile ZEXPORT zipOpen2_64(const void *pathname, + int append, + zipcharpc* globalcomment, + zlib_filefunc64_def* pzlib_filefunc_def); + +extern zipFile ZEXPORT zipOpen3(const void *pathname, + int append, + zipcharpc* globalcomment, + zlib_filefunc64_32_def* pzlib_filefunc64_32_def); + +extern int ZEXPORT zipOpenNewFileInZip(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level); + +extern int ZEXPORT zipOpenNewFileInZip64(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int zip64); + +/* + Open a file in the ZIP for writing. + filename : the filename in zip (if NULL, '-' without quote will be used + *zipfi contain supplemental information + if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local + contains the extrafield data the the local header + if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global + contains the extrafield data the the local header + if comment != NULL, comment contain the comment string + method contain the compression method (0 for store, Z_DEFLATED for deflate) + level contain the level of compression (can be Z_DEFAULT_COMPRESSION) + zip64 is set to 1 if a zip64 extended information block should be added to the local file header. + this MUST be '1' if the uncompressed size is >= 0xffffffff. + +*/ + + +extern int ZEXPORT zipOpenNewFileInZip2(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw); + + +extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int zip64); +/* + Same than zipOpenNewFileInZip, except if raw=1, we write raw file + */ + +extern int ZEXPORT zipOpenNewFileInZip3(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int windowBits, + int memLevel, + int strategy, + const char* password, + uLong crcForCrypting); + +extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int windowBits, + int memLevel, + int strategy, + const char* password, + uLong crcForCrypting, + int zip64); + +/* + Same than zipOpenNewFileInZip2, except + windowBits,memLevel,,strategy : see parameter strategy in deflateInit2 + password : crypting password (NULL for no crypting) + crcForCrypting : crc of file to compress (needed for crypting) + */ + +extern int ZEXPORT zipOpenNewFileInZip4(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int windowBits, + int memLevel, + int strategy, + const char* password, + uLong crcForCrypting, + uLong versionMadeBy, + uLong flagBase); + + +extern int ZEXPORT zipOpenNewFileInZip4_64(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int windowBits, + int memLevel, + int strategy, + const char* password, + uLong crcForCrypting, + uLong versionMadeBy, + uLong flagBase, + int zip64); +/* + Same than zipOpenNewFileInZip4, except + versionMadeBy : value for Version made by field + flag : value for flag field (compression level info will be added) + */ + + +extern int ZEXPORT zipWriteInFileInZip(zipFile file, + const void* buf, + unsigned len); +/* + Write data in the zipfile +*/ + +extern int ZEXPORT zipCloseFileInZip(zipFile file); +/* + Close the current file in the zipfile +*/ + +extern int ZEXPORT zipCloseFileInZipRaw(zipFile file, + uLong uncompressed_size, + uLong crc32); + +extern int ZEXPORT zipCloseFileInZipRaw64(zipFile file, + ZPOS64_T uncompressed_size, + uLong crc32); + +/* + Close the current file in the zipfile, for file opened with + parameter raw=1 in zipOpenNewFileInZip2 + uncompressed_size and crc32 are value for the uncompressed size +*/ + +extern int ZEXPORT zipClose(zipFile file, + const char* global_comment); +/* + Close the zipfile +*/ + + +extern int ZEXPORT zipRemoveExtraInfoBlock(char* pData, int* dataLen, short sHeader); +/* + zipRemoveExtraInfoBlock - Added by Mathias Svensson + + Remove extra information block from a extra information data for the local file header or central directory header + + It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode. + + 0x0001 is the signature header for the ZIP64 extra information blocks + + usage. + Remove ZIP64 Extra information from a central director extra field data + zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001); + + Remove ZIP64 Extra information from a Local File Header extra field data + zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001); +*/ + +#ifdef __cplusplus +} +#endif + +#endif /* _zip64_H */ diff --git a/src/zlib/zlib-1.2.13/contrib/pascal/example.pas b/src/zlib/zlib-1.3/contrib/pascal/example.pas similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/pascal/example.pas rename to src/zlib/zlib-1.3/contrib/pascal/example.pas diff --git a/src/zlib/zlib-1.2.13/contrib/pascal/readme.txt b/src/zlib/zlib-1.3/contrib/pascal/readme.txt similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/pascal/readme.txt rename to src/zlib/zlib-1.3/contrib/pascal/readme.txt diff --git a/src/zlib/zlib-1.2.13/contrib/pascal/zlibd32.mak b/src/zlib/zlib-1.3/contrib/pascal/zlibd32.mak similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/pascal/zlibd32.mak rename to src/zlib/zlib-1.3/contrib/pascal/zlibd32.mak diff --git a/src/zlib/zlib-1.2.13/contrib/pascal/zlibpas.pas b/src/zlib/zlib-1.3/contrib/pascal/zlibpas.pas similarity index 99% rename from src/zlib/zlib-1.2.13/contrib/pascal/zlibpas.pas rename to src/zlib/zlib-1.3/contrib/pascal/zlibpas.pas index bf3fff6ff..a2b24a593 100644 --- a/src/zlib/zlib-1.2.13/contrib/pascal/zlibpas.pas +++ b/src/zlib/zlib-1.3/contrib/pascal/zlibpas.pas @@ -10,7 +10,7 @@ interface const - ZLIB_VERSION = '1.2.13'; + ZLIB_VERSION = '1.3.0'; ZLIB_VERNUM = $12a0; type diff --git a/src/zlib/zlib-1.2.13/contrib/puff/Makefile b/src/zlib/zlib-1.3/contrib/puff/Makefile similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/puff/Makefile rename to src/zlib/zlib-1.3/contrib/puff/Makefile diff --git a/src/zlib/zlib-1.2.13/contrib/puff/README b/src/zlib/zlib-1.3/contrib/puff/README similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/puff/README rename to src/zlib/zlib-1.3/contrib/puff/README diff --git a/src/zlib/zlib-1.2.13/contrib/puff/puff.c b/src/zlib/zlib-1.3/contrib/puff/puff.c similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/puff/puff.c rename to src/zlib/zlib-1.3/contrib/puff/puff.c diff --git a/src/zlib/zlib-1.2.13/contrib/puff/puff.h b/src/zlib/zlib-1.3/contrib/puff/puff.h similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/puff/puff.h rename to src/zlib/zlib-1.3/contrib/puff/puff.h diff --git a/src/zlib/zlib-1.2.13/contrib/puff/pufftest.c b/src/zlib/zlib-1.3/contrib/puff/pufftest.c similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/puff/pufftest.c rename to src/zlib/zlib-1.3/contrib/puff/pufftest.c diff --git a/src/zlib/zlib-1.2.13/contrib/puff/zeros.raw b/src/zlib/zlib-1.3/contrib/puff/zeros.raw similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/puff/zeros.raw rename to src/zlib/zlib-1.3/contrib/puff/zeros.raw diff --git a/src/zlib/zlib-1.2.13/contrib/testzlib/testzlib.c b/src/zlib/zlib-1.3/contrib/testzlib/testzlib.c similarity index 95% rename from src/zlib/zlib-1.2.13/contrib/testzlib/testzlib.c rename to src/zlib/zlib-1.3/contrib/testzlib/testzlib.c index 5f659dea0..b3c0014f9 100644 --- a/src/zlib/zlib-1.2.13/contrib/testzlib/testzlib.c +++ b/src/zlib/zlib-1.3/contrib/testzlib/testzlib.c @@ -169,7 +169,7 @@ int main(int argc, char *argv[]) printf("error reading %s\n",argv[1]); return 1; } - else printf("file %s read, %u bytes\n",argv[1],lFileSize); + else printf("file %s read, %ld bytes\n",argv[1],lFileSize); if (argc>=3) BlockSizeCompress=atol(argv[2]); diff --git a/src/zlib/zlib-1.2.13/contrib/testzlib/testzlib.txt b/src/zlib/zlib-1.3/contrib/testzlib/testzlib.txt similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/testzlib/testzlib.txt rename to src/zlib/zlib-1.3/contrib/testzlib/testzlib.txt diff --git a/src/zlib/zlib-1.2.13/contrib/untgz/Makefile b/src/zlib/zlib-1.3/contrib/untgz/Makefile similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/untgz/Makefile rename to src/zlib/zlib-1.3/contrib/untgz/Makefile diff --git a/src/zlib/zlib-1.2.13/contrib/untgz/Makefile.msc b/src/zlib/zlib-1.3/contrib/untgz/Makefile.msc similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/untgz/Makefile.msc rename to src/zlib/zlib-1.3/contrib/untgz/Makefile.msc diff --git a/src/zlib/zlib-1.2.13/contrib/untgz/untgz.c b/src/zlib/zlib-1.3/contrib/untgz/untgz.c similarity index 94% rename from src/zlib/zlib-1.2.13/contrib/untgz/untgz.c rename to src/zlib/zlib-1.3/contrib/untgz/untgz.c index 2c391e598..78579211f 100644 --- a/src/zlib/zlib-1.2.13/contrib/untgz/untgz.c +++ b/src/zlib/zlib-1.3/contrib/untgz/untgz.c @@ -4,6 +4,22 @@ * written by Pedro A. Aranda Gutierrez * adaptation to Unix by Jean-loup Gailly * various fixes by Cosmin Truta + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. */ #include @@ -14,15 +30,10 @@ #include "zlib.h" -#ifdef unix -# include -#else +#ifdef _WIN32 # include # include -#endif - -#ifdef WIN32 -#include +# include # ifndef F_OK # define F_OK 0 # endif @@ -33,6 +44,8 @@ # define strdup(str) _strdup(str) # endif #else +# include +# include # include #endif @@ -102,28 +115,14 @@ struct attr_item enum { TGZ_EXTRACT, TGZ_LIST, TGZ_INVALID }; -char *TGZfname OF((const char *)); -void TGZnotfound OF((const char *)); - -int getoct OF((char *, int)); -char *strtime OF((time_t *)); -int setfiletime OF((char *, time_t)); -void push_attr OF((struct attr_item **, char *, int, time_t)); -void restore_attr OF((struct attr_item **)); - -int ExprMatch OF((char *, char *)); - -int makedir OF((char *)); -int matchname OF((int, int, char **, char *)); - -void error OF((const char *)); -int tar OF((gzFile, int, int, int, char **)); - -void help OF((int)); -int main OF((int, char **)); - char *prog; +void error(const char *msg) +{ + fprintf(stderr, "%s: %s\n", prog, msg); + exit(1); +} + const char *TGZsuffix[] = { "\0", ".tar", ".tar.gz", ".taz", ".tgz", NULL }; /* return the file name of the TGZ archive */ @@ -205,7 +204,7 @@ char *strtime (time_t *t) int setfiletime (char *fname,time_t ftime) { -#ifdef WIN32 +#ifdef _WIN32 static int isWinNT = -1; SYSTEMTIME st; FILETIME locft, modft; @@ -590,12 +589,6 @@ void help(int exitval) exit(exitval); } -void error(const char *msg) -{ - fprintf(stderr, "%s: %s\n", prog, msg); - exit(1); -} - /* ============================================================ */ @@ -608,7 +601,7 @@ int main(int argc,char **argv) int action = TGZ_EXTRACT; int arg = 1; char *TGZfile; - gzFile *f; + gzFile f; prog = strrchr(argv[0],'\\'); if (prog == NULL) diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/readme.txt b/src/zlib/zlib-1.3/contrib/vstudio/readme.txt similarity index 95% rename from src/zlib/zlib-1.2.13/contrib/vstudio/readme.txt rename to src/zlib/zlib-1.3/contrib/vstudio/readme.txt index 17e693ffd..05ba487c9 100644 --- a/src/zlib/zlib-1.2.13/contrib/vstudio/readme.txt +++ b/src/zlib/zlib-1.3/contrib/vstudio/readme.txt @@ -1,4 +1,4 @@ -Building instructions for the DLL versions of Zlib 1.2.13 +Building instructions for the DLL versions of Zlib 1.3.0 ======================================================== This directory contains projects that build zlib and minizip using diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/miniunz.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc10/miniunz.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc10/miniunz.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc10/miniunz.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/miniunz.vcxproj.filters b/src/zlib/zlib-1.3/contrib/vstudio/vc10/miniunz.vcxproj.filters similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc10/miniunz.vcxproj.filters rename to src/zlib/zlib-1.3/contrib/vstudio/vc10/miniunz.vcxproj.filters diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/minizip.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc10/minizip.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc10/minizip.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc10/minizip.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/minizip.vcxproj.filters b/src/zlib/zlib-1.3/contrib/vstudio/vc10/minizip.vcxproj.filters similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc10/minizip.vcxproj.filters rename to src/zlib/zlib-1.3/contrib/vstudio/vc10/minizip.vcxproj.filters diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/testzlib.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlib.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc10/testzlib.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlib.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/testzlib.vcxproj.filters b/src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlib.vcxproj.filters similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc10/testzlib.vcxproj.filters rename to src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlib.vcxproj.filters diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/testzlibdll.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlibdll.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc10/testzlibdll.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlibdll.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/testzlibdll.vcxproj.filters b/src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlibdll.vcxproj.filters similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc10/testzlibdll.vcxproj.filters rename to src/zlib/zlib-1.3/contrib/vstudio/vc10/testzlibdll.vcxproj.filters diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc11/zlib.rc b/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlib.rc similarity index 80% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc11/zlib.rc rename to src/zlib/zlib-1.3/contrib/vstudio/vc10/zlib.rc index 876027498..29af8e11a 100644 --- a/src/zlib/zlib-1.2.13/contrib/vstudio/vc11/zlib.rc +++ b/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlib.rc @@ -2,8 +2,8 @@ #define IDR_VERSION1 1 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 1, 2, 13, 0 - PRODUCTVERSION 1, 2, 13, 0 + FILEVERSION 1, 3, 0, 0 + PRODUCTVERSION 1, 3, 0, 0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS 0 FILEOS VOS_DOS_WINDOWS32 @@ -17,12 +17,12 @@ BEGIN BEGIN VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" - VALUE "FileVersion", "1.2.13\0" + VALUE "FileVersion", "1.3.0\0" VALUE "InternalName", "zlib\0" VALUE "OriginalFilename", "zlibwapi.dll\0" VALUE "ProductName", "ZLib.DLL\0" VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" - VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" + VALUE "LegalCopyright", "(C) 1995-2023 Jean-loup Gailly & Mark Adler\0" END END BLOCK "VarFileInfo" diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlibstat.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibstat.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlibstat.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibstat.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlibstat.vcxproj.filters b/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibstat.vcxproj.filters similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlibstat.vcxproj.filters rename to src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibstat.vcxproj.filters diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc11/zlibvc.def b/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.def similarity index 97% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc11/zlibvc.def rename to src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.def index ba09bc1b9..f28aa6c73 100644 --- a/src/zlib/zlib-1.2.13/contrib/vstudio/vc11/zlibvc.def +++ b/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.def @@ -1,7 +1,7 @@ LIBRARY ; zlib data compression and ZIP file I/O library -VERSION 1.2 +VERSION 1.3 EXPORTS adler32 @1 diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlibvc.sln b/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.sln similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlibvc.sln rename to src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.sln diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlibvc.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlibvc.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlibvc.vcxproj.filters b/src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.vcxproj.filters similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlibvc.vcxproj.filters rename to src/zlib/zlib-1.3/contrib/vstudio/vc10/zlibvc.vcxproj.filters diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc11/miniunz.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc11/miniunz.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc11/miniunz.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc11/miniunz.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc11/minizip.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc11/minizip.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc11/minizip.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc11/minizip.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc11/testzlib.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc11/testzlib.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc11/testzlib.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc11/testzlib.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc11/testzlibdll.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc11/testzlibdll.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc11/testzlibdll.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc11/testzlibdll.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlib.rc b/src/zlib/zlib-1.3/contrib/vstudio/vc11/zlib.rc similarity index 80% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlib.rc rename to src/zlib/zlib-1.3/contrib/vstudio/vc11/zlib.rc index 876027498..29af8e11a 100644 --- a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlib.rc +++ b/src/zlib/zlib-1.3/contrib/vstudio/vc11/zlib.rc @@ -2,8 +2,8 @@ #define IDR_VERSION1 1 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 1, 2, 13, 0 - PRODUCTVERSION 1, 2, 13, 0 + FILEVERSION 1, 3, 0, 0 + PRODUCTVERSION 1, 3, 0, 0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS 0 FILEOS VOS_DOS_WINDOWS32 @@ -17,12 +17,12 @@ BEGIN BEGIN VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" - VALUE "FileVersion", "1.2.13\0" + VALUE "FileVersion", "1.3.0\0" VALUE "InternalName", "zlib\0" VALUE "OriginalFilename", "zlibwapi.dll\0" VALUE "ProductName", "ZLib.DLL\0" VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" - VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" + VALUE "LegalCopyright", "(C) 1995-2023 Jean-loup Gailly & Mark Adler\0" END END BLOCK "VarFileInfo" diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc11/zlibstat.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibstat.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc11/zlibstat.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibstat.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc14/zlibvc.def b/src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibvc.def similarity index 97% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc14/zlibvc.def rename to src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibvc.def index ba09bc1b9..f28aa6c73 100644 --- a/src/zlib/zlib-1.2.13/contrib/vstudio/vc14/zlibvc.def +++ b/src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibvc.def @@ -1,7 +1,7 @@ LIBRARY ; zlib data compression and ZIP file I/O library -VERSION 1.2 +VERSION 1.3 EXPORTS adler32 @1 diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc11/zlibvc.sln b/src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibvc.sln similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc11/zlibvc.sln rename to src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibvc.sln diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc11/zlibvc.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibvc.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc11/zlibvc.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc11/zlibvc.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc12/miniunz.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc12/miniunz.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc12/miniunz.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc12/miniunz.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc12/minizip.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc12/minizip.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc12/minizip.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc12/minizip.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc12/testzlib.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc12/testzlib.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc12/testzlib.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc12/testzlib.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc12/testzlibdll.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc12/testzlibdll.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc12/testzlibdll.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc12/testzlibdll.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc12/zlib.rc b/src/zlib/zlib-1.3/contrib/vstudio/vc12/zlib.rc similarity index 82% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc12/zlib.rc rename to src/zlib/zlib-1.3/contrib/vstudio/vc12/zlib.rc index cdd7985d4..57fb31a32 100644 --- a/src/zlib/zlib-1.2.13/contrib/vstudio/vc12/zlib.rc +++ b/src/zlib/zlib-1.3/contrib/vstudio/vc12/zlib.rc @@ -2,8 +2,8 @@ #define IDR_VERSION1 1 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 1, 2, 13, 0 - PRODUCTVERSION 1, 2, 13, 0 + FILEVERSION 1, 3, 0, 0 + PRODUCTVERSION 1, 3, 0, 0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS 0 FILEOS VOS_DOS_WINDOWS32 @@ -17,12 +17,12 @@ BEGIN BEGIN VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" - VALUE "FileVersion", "1.2.13\0" + VALUE "FileVersion", "1.3.0\0" VALUE "InternalName", "zlib\0" VALUE "OriginalFilename", "zlibwapi.dll\0" VALUE "ProductName", "ZLib.DLL\0" VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" - VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" + VALUE "LegalCopyright", "(C) 1995-2023 Jean-loup Gailly & Mark Adler\0" END END BLOCK "VarFileInfo" diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc12/zlibstat.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibstat.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc12/zlibstat.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibstat.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc12/zlibvc.def b/src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibvc.def similarity index 97% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc12/zlibvc.def rename to src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibvc.def index ba09bc1b9..f28aa6c73 100644 --- a/src/zlib/zlib-1.2.13/contrib/vstudio/vc12/zlibvc.def +++ b/src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibvc.def @@ -1,7 +1,7 @@ LIBRARY ; zlib data compression and ZIP file I/O library -VERSION 1.2 +VERSION 1.3 EXPORTS adler32 @1 diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc12/zlibvc.sln b/src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibvc.sln similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc12/zlibvc.sln rename to src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibvc.sln diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc12/zlibvc.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibvc.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc12/zlibvc.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc12/zlibvc.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc14/miniunz.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc14/miniunz.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc14/miniunz.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc14/miniunz.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc14/minizip.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc14/minizip.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc14/minizip.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc14/minizip.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc14/testzlib.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc14/testzlib.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc14/testzlib.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc14/testzlib.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc14/testzlibdll.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc14/testzlibdll.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc14/testzlibdll.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc14/testzlibdll.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc14/zlib.rc b/src/zlib/zlib-1.3/contrib/vstudio/vc14/zlib.rc similarity index 82% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc14/zlib.rc rename to src/zlib/zlib-1.3/contrib/vstudio/vc14/zlib.rc index cdd7985d4..57fb31a32 100644 --- a/src/zlib/zlib-1.2.13/contrib/vstudio/vc14/zlib.rc +++ b/src/zlib/zlib-1.3/contrib/vstudio/vc14/zlib.rc @@ -2,8 +2,8 @@ #define IDR_VERSION1 1 IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE - FILEVERSION 1, 2, 13, 0 - PRODUCTVERSION 1, 2, 13, 0 + FILEVERSION 1, 3, 0, 0 + PRODUCTVERSION 1, 3, 0, 0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEFLAGS 0 FILEOS VOS_DOS_WINDOWS32 @@ -17,12 +17,12 @@ BEGIN BEGIN VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" - VALUE "FileVersion", "1.2.13\0" + VALUE "FileVersion", "1.3.0\0" VALUE "InternalName", "zlib\0" VALUE "OriginalFilename", "zlibwapi.dll\0" VALUE "ProductName", "ZLib.DLL\0" VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" - VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" + VALUE "LegalCopyright", "(C) 1995-2023 Jean-loup Gailly & Mark Adler\0" END END BLOCK "VarFileInfo" diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc14/zlibstat.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibstat.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc14/zlibstat.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibstat.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlibvc.def b/src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibvc.def similarity index 97% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlibvc.def rename to src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibvc.def index ba09bc1b9..f28aa6c73 100644 --- a/src/zlib/zlib-1.2.13/contrib/vstudio/vc10/zlibvc.def +++ b/src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibvc.def @@ -1,7 +1,7 @@ LIBRARY ; zlib data compression and ZIP file I/O library -VERSION 1.2 +VERSION 1.3 EXPORTS adler32 @1 diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc14/zlibvc.sln b/src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibvc.sln similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc14/zlibvc.sln rename to src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibvc.sln diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc14/zlibvc.vcxproj b/src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibvc.vcxproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc14/zlibvc.vcxproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc14/zlibvc.vcxproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc9/miniunz.vcproj b/src/zlib/zlib-1.3/contrib/vstudio/vc9/miniunz.vcproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc9/miniunz.vcproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc9/miniunz.vcproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc9/minizip.vcproj b/src/zlib/zlib-1.3/contrib/vstudio/vc9/minizip.vcproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc9/minizip.vcproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc9/minizip.vcproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc9/testzlib.vcproj b/src/zlib/zlib-1.3/contrib/vstudio/vc9/testzlib.vcproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc9/testzlib.vcproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc9/testzlib.vcproj diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc9/testzlibdll.vcproj b/src/zlib/zlib-1.3/contrib/vstudio/vc9/testzlibdll.vcproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc9/testzlibdll.vcproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc9/testzlibdll.vcproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlib.rc b/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlib.rc new file mode 100644 index 000000000..29af8e11a --- /dev/null +++ b/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlib.rc @@ -0,0 +1,32 @@ +#include + +#define IDR_VERSION1 1 +IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE + FILEVERSION 1, 3, 0, 0 + PRODUCTVERSION 1, 3, 0, 0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS 0 + FILEOS VOS_DOS_WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0 // not used +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + //language ID = U.S. English, char set = Windows, Multilingual + + BEGIN + VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" + VALUE "FileVersion", "1.3.0\0" + VALUE "InternalName", "zlib\0" + VALUE "OriginalFilename", "zlibwapi.dll\0" + VALUE "ProductName", "ZLib.DLL\0" + VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" + VALUE "LegalCopyright", "(C) 1995-2023 Jean-loup Gailly & Mark Adler\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc9/zlibstat.vcproj b/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibstat.vcproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc9/zlibstat.vcproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibstat.vcproj diff --git a/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.def b/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.def new file mode 100644 index 000000000..f28aa6c73 --- /dev/null +++ b/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.def @@ -0,0 +1,158 @@ +LIBRARY +; zlib data compression and ZIP file I/O library + +VERSION 1.3 + +EXPORTS + adler32 @1 + compress @2 + crc32 @3 + deflate @4 + deflateCopy @5 + deflateEnd @6 + deflateInit2_ @7 + deflateInit_ @8 + deflateParams @9 + deflateReset @10 + deflateSetDictionary @11 + gzclose @12 + gzdopen @13 + gzerror @14 + gzflush @15 + gzopen @16 + gzread @17 + gzwrite @18 + inflate @19 + inflateEnd @20 + inflateInit2_ @21 + inflateInit_ @22 + inflateReset @23 + inflateSetDictionary @24 + inflateSync @25 + uncompress @26 + zlibVersion @27 + gzprintf @28 + gzputc @29 + gzgetc @30 + gzseek @31 + gzrewind @32 + gztell @33 + gzeof @34 + gzsetparams @35 + zError @36 + inflateSyncPoint @37 + get_crc_table @38 + compress2 @39 + gzputs @40 + gzgets @41 + inflateCopy @42 + inflateBackInit_ @43 + inflateBack @44 + inflateBackEnd @45 + compressBound @46 + deflateBound @47 + gzclearerr @48 + gzungetc @49 + zlibCompileFlags @50 + deflatePrime @51 + deflatePending @52 + + unzOpen @61 + unzClose @62 + unzGetGlobalInfo @63 + unzGetCurrentFileInfo @64 + unzGoToFirstFile @65 + unzGoToNextFile @66 + unzOpenCurrentFile @67 + unzReadCurrentFile @68 + unzOpenCurrentFile3 @69 + unztell @70 + unzeof @71 + unzCloseCurrentFile @72 + unzGetGlobalComment @73 + unzStringFileNameCompare @74 + unzLocateFile @75 + unzGetLocalExtrafield @76 + unzOpen2 @77 + unzOpenCurrentFile2 @78 + unzOpenCurrentFilePassword @79 + + zipOpen @80 + zipOpenNewFileInZip @81 + zipWriteInFileInZip @82 + zipCloseFileInZip @83 + zipClose @84 + zipOpenNewFileInZip2 @86 + zipCloseFileInZipRaw @87 + zipOpen2 @88 + zipOpenNewFileInZip3 @89 + + unzGetFilePos @100 + unzGoToFilePos @101 + + fill_win32_filefunc @110 + +; zlibwapi v1.2.4 added: + fill_win32_filefunc64 @111 + fill_win32_filefunc64A @112 + fill_win32_filefunc64W @113 + + unzOpen64 @120 + unzOpen2_64 @121 + unzGetGlobalInfo64 @122 + unzGetCurrentFileInfo64 @124 + unzGetCurrentFileZStreamPos64 @125 + unztell64 @126 + unzGetFilePos64 @127 + unzGoToFilePos64 @128 + + zipOpen64 @130 + zipOpen2_64 @131 + zipOpenNewFileInZip64 @132 + zipOpenNewFileInZip2_64 @133 + zipOpenNewFileInZip3_64 @134 + zipOpenNewFileInZip4_64 @135 + zipCloseFileInZipRaw64 @136 + +; zlib1 v1.2.4 added: + adler32_combine @140 + crc32_combine @142 + deflateSetHeader @144 + deflateTune @145 + gzbuffer @146 + gzclose_r @147 + gzclose_w @148 + gzdirect @149 + gzoffset @150 + inflateGetHeader @156 + inflateMark @157 + inflatePrime @158 + inflateReset2 @159 + inflateUndermine @160 + +; zlib1 v1.2.6 added: + gzgetc_ @161 + inflateResetKeep @163 + deflateResetKeep @164 + +; zlib1 v1.2.7 added: + gzopen_w @165 + +; zlib1 v1.2.8 added: + inflateGetDictionary @166 + gzvprintf @167 + +; zlib1 v1.2.9 added: + inflateCodesUsed @168 + inflateValidate @169 + uncompress2 @170 + gzfread @171 + gzfwrite @172 + deflateGetDictionary @173 + adler32_z @174 + crc32_z @175 + +; zlib1 v1.2.12 added: + crc32_combine_gen @176 + crc32_combine_gen64 @177 + crc32_combine_op @178 diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc9/zlibvc.sln b/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.sln similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc9/zlibvc.sln rename to src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.sln diff --git a/src/zlib/zlib-1.2.13/contrib/vstudio/vc9/zlibvc.vcproj b/src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.vcproj similarity index 100% rename from src/zlib/zlib-1.2.13/contrib/vstudio/vc9/zlibvc.vcproj rename to src/zlib/zlib-1.3/contrib/vstudio/vc9/zlibvc.vcproj diff --git a/src/zlib/zlib-1.2.13/crc32.c b/src/zlib/zlib-1.3/crc32.c similarity index 91% rename from src/zlib/zlib-1.2.13/crc32.c rename to src/zlib/zlib-1.3/crc32.c index f8357b083..6c38f5c04 100644 --- a/src/zlib/zlib-1.2.13/crc32.c +++ b/src/zlib/zlib-1.3/crc32.c @@ -103,19 +103,6 @@ # define ARMCRC32 #endif -/* Local functions. */ -local z_crc_t multmodp OF((z_crc_t a, z_crc_t b)); -local z_crc_t x2nmodp OF((z_off64_t n, unsigned k)); - -#if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE)) - local z_word_t byte_swap OF((z_word_t word)); -#endif - -#if defined(W) && !defined(ARMCRC32) - local z_crc_t crc_word OF((z_word_t data)); - local z_word_t crc_word_big OF((z_word_t data)); -#endif - #if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE)) /* Swap the bytes in a z_word_t to convert between little and big endian. Any @@ -123,9 +110,7 @@ local z_crc_t x2nmodp OF((z_off64_t n, unsigned k)); instruction, if one is available. This assumes that word_t is either 32 bits or 64 bits. */ -local z_word_t byte_swap(word) - z_word_t word; -{ +local z_word_t byte_swap(z_word_t word) { # if W == 8 return (word & 0xff00000000000000) >> 56 | @@ -146,24 +131,77 @@ local z_word_t byte_swap(word) } #endif +#ifdef DYNAMIC_CRC_TABLE +/* ========================================================================= + * Table of powers of x for combining CRC-32s, filled in by make_crc_table() + * below. + */ + local z_crc_t FAR x2n_table[32]; +#else +/* ========================================================================= + * Tables for byte-wise and braided CRC-32 calculations, and a table of powers + * of x for combining CRC-32s, all made by make_crc_table(). + */ +# include "crc32.h" +#endif + /* CRC polynomial. */ #define POLY 0xedb88320 /* p(x) reflected, with x^32 implied */ -#ifdef DYNAMIC_CRC_TABLE +/* + Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, + reflected. For speed, this requires that a not be zero. + */ +local z_crc_t multmodp(z_crc_t a, z_crc_t b) { + z_crc_t m, p; + + m = (z_crc_t)1 << 31; + p = 0; + for (;;) { + if (a & m) { + p ^= b; + if ((a & (m - 1)) == 0) + break; + } + m >>= 1; + b = b & 1 ? (b >> 1) ^ POLY : b >> 1; + } + return p; +} +/* + Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been + initialized. + */ +local z_crc_t x2nmodp(z_off64_t n, unsigned k) { + z_crc_t p; + + p = (z_crc_t)1 << 31; /* x^0 == 1 */ + while (n) { + if (n & 1) + p = multmodp(x2n_table[k & 31], p); + n >>= 1; + k++; + } + return p; +} + +#ifdef DYNAMIC_CRC_TABLE +/* ========================================================================= + * Build the tables for byte-wise and braided CRC-32 calculations, and a table + * of powers of x for combining CRC-32s. + */ local z_crc_t FAR crc_table[256]; -local z_crc_t FAR x2n_table[32]; -local void make_crc_table OF((void)); #ifdef W local z_word_t FAR crc_big_table[256]; local z_crc_t FAR crc_braid_table[W][256]; local z_word_t FAR crc_braid_big_table[W][256]; - local void braid OF((z_crc_t [][256], z_word_t [][256], int, int)); + local void braid(z_crc_t [][256], z_word_t [][256], int, int); #endif #ifdef MAKECRCH - local void write_table OF((FILE *, const z_crc_t FAR *, int)); - local void write_table32hi OF((FILE *, const z_word_t FAR *, int)); - local void write_table64 OF((FILE *, const z_word_t FAR *, int)); + local void write_table(FILE *, const z_crc_t FAR *, int); + local void write_table32hi(FILE *, const z_word_t FAR *, int); + local void write_table64(FILE *, const z_word_t FAR *, int); #endif /* MAKECRCH */ /* @@ -176,7 +214,6 @@ local void make_crc_table OF((void)); /* Definition of once functionality. */ typedef struct once_s once_t; -local void once OF((once_t *, void (*)(void))); /* Check for the availability of atomics. */ #if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \ @@ -196,10 +233,7 @@ struct once_s { invoke once() at the same time. The state must be a once_t initialized with ONCE_INIT. */ -local void once(state, init) - once_t *state; - void (*init)(void); -{ +local void once(once_t *state, void (*init)(void)) { if (!atomic_load(&state->done)) { if (atomic_flag_test_and_set(&state->begun)) while (!atomic_load(&state->done)) @@ -222,10 +256,7 @@ struct once_s { /* Test and set. Alas, not atomic, but tries to minimize the period of vulnerability. */ -local int test_and_set OF((int volatile *)); -local int test_and_set(flag) - int volatile *flag; -{ +local int test_and_set(int volatile *flag) { int was; was = *flag; @@ -234,10 +265,7 @@ local int test_and_set(flag) } /* Run the provided init() function once. This is not thread-safe. */ -local void once(state, init) - once_t *state; - void (*init)(void); -{ +local void once(once_t *state, void (*init)(void)) { if (!state->done) { if (test_and_set(&state->begun)) while (!state->done) @@ -279,8 +307,7 @@ local once_t made = ONCE_INIT; combinations of CRC register values and incoming bytes. */ -local void make_crc_table() -{ +local void make_crc_table(void) { unsigned i, j, n; z_crc_t p; @@ -447,11 +474,7 @@ local void make_crc_table() Write the 32-bit values in table[0..k-1] to out, five per line in hexadecimal separated by commas. */ -local void write_table(out, table, k) - FILE *out; - const z_crc_t FAR *table; - int k; -{ +local void write_table(FILE *out, const z_crc_t FAR *table, int k) { int n; for (n = 0; n < k; n++) @@ -464,11 +487,7 @@ local void write_table(out, table, k) Write the high 32-bits of each value in table[0..k-1] to out, five per line in hexadecimal separated by commas. */ -local void write_table32hi(out, table, k) -FILE *out; -const z_word_t FAR *table; -int k; -{ +local void write_table32hi(FILE *out, const z_word_t FAR *table, int k) { int n; for (n = 0; n < k; n++) @@ -484,11 +503,7 @@ int k; bits. If not, then the type cast and format string can be adjusted accordingly. */ -local void write_table64(out, table, k) - FILE *out; - const z_word_t FAR *table; - int k; -{ +local void write_table64(FILE *out, const z_word_t FAR *table, int k) { int n; for (n = 0; n < k; n++) @@ -498,8 +513,7 @@ local void write_table64(out, table, k) } /* Actually do the deed. */ -int main() -{ +int main(void) { make_crc_table(); return 0; } @@ -511,12 +525,7 @@ int main() Generate the little and big-endian braid tables for the given n and z_word_t size w. Each array must have room for w blocks of 256 elements. */ -local void braid(ltl, big, n, w) - z_crc_t ltl[][256]; - z_word_t big[][256]; - int n; - int w; -{ +local void braid(z_crc_t ltl[][256], z_word_t big[][256], int n, int w) { int k; z_crc_t i, p, q; for (k = 0; k < w; k++) { @@ -531,69 +540,13 @@ local void braid(ltl, big, n, w) } #endif -#else /* !DYNAMIC_CRC_TABLE */ -/* ======================================================================== - * Tables for byte-wise and braided CRC-32 calculations, and a table of powers - * of x for combining CRC-32s, all made by make_crc_table(). - */ -#include "crc32.h" #endif /* DYNAMIC_CRC_TABLE */ -/* ======================================================================== - * Routines used for CRC calculation. Some are also required for the table - * generation above. - */ - -/* - Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, - reflected. For speed, this requires that a not be zero. - */ -local z_crc_t multmodp(a, b) - z_crc_t a; - z_crc_t b; -{ - z_crc_t m, p; - - m = (z_crc_t)1 << 31; - p = 0; - for (;;) { - if (a & m) { - p ^= b; - if ((a & (m - 1)) == 0) - break; - } - m >>= 1; - b = b & 1 ? (b >> 1) ^ POLY : b >> 1; - } - return p; -} - -/* - Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been - initialized. - */ -local z_crc_t x2nmodp(n, k) - z_off64_t n; - unsigned k; -{ - z_crc_t p; - - p = (z_crc_t)1 << 31; /* x^0 == 1 */ - while (n) { - if (n & 1) - p = multmodp(x2n_table[k & 31], p); - n >>= 1; - k++; - } - return p; -} - /* ========================================================================= * This function can be used by asm versions of crc32(), and to force the * generation of the CRC tables in a threaded application. */ -const z_crc_t FAR * ZEXPORT get_crc_table() -{ +const z_crc_t FAR * ZEXPORT get_crc_table(void) { #ifdef DYNAMIC_CRC_TABLE once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ @@ -619,11 +572,8 @@ const z_crc_t FAR * ZEXPORT get_crc_table() #define Z_BATCH_ZEROS 0xa10d3d0c /* computed from Z_BATCH = 3990 */ #define Z_BATCH_MIN 800 /* fewest words in a final batch */ -unsigned long ZEXPORT crc32_z(crc, buf, len) - unsigned long crc; - const unsigned char FAR *buf; - z_size_t len; -{ +unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, + z_size_t len) { z_crc_t val; z_word_t crc1, crc2; const z_word_t *word; @@ -723,18 +673,14 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) least-significant byte of the word as the first byte of data, without any pre or post conditioning. This is used to combine the CRCs of each braid. */ -local z_crc_t crc_word(data) - z_word_t data; -{ +local z_crc_t crc_word(z_word_t data) { int k; for (k = 0; k < W; k++) data = (data >> 8) ^ crc_table[data & 0xff]; return (z_crc_t)data; } -local z_word_t crc_word_big(data) - z_word_t data; -{ +local z_word_t crc_word_big(z_word_t data) { int k; for (k = 0; k < W; k++) data = (data << 8) ^ @@ -745,11 +691,8 @@ local z_word_t crc_word_big(data) #endif /* ========================================================================= */ -unsigned long ZEXPORT crc32_z(crc, buf, len) - unsigned long crc; - const unsigned char FAR *buf; - z_size_t len; -{ +unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, + z_size_t len) { /* Return initial CRC, if requested. */ if (buf == Z_NULL) return 0; @@ -781,8 +724,8 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) words = (z_word_t const *)buf; /* Do endian check at execution time instead of compile time, since ARM - processors can change the endianess at execution time. If the - compiler knows what the endianess will be, it can optimize out the + processors can change the endianness at execution time. If the + compiler knows what the endianness will be, it can optimize out the check and the unused branch. */ endian = 1; if (*(unsigned char *)&endian) { @@ -1069,20 +1012,13 @@ unsigned long ZEXPORT crc32_z(crc, buf, len) #endif /* ========================================================================= */ -unsigned long ZEXPORT crc32(crc, buf, len) - unsigned long crc; - const unsigned char FAR *buf; - uInt len; -{ +unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf, + uInt len) { return crc32_z(crc, buf, len); } /* ========================================================================= */ -uLong ZEXPORT crc32_combine64(crc1, crc2, len2) - uLong crc1; - uLong crc2; - z_off64_t len2; -{ +uLong ZEXPORT crc32_combine64(uLong crc1, uLong crc2, z_off64_t len2) { #ifdef DYNAMIC_CRC_TABLE once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ @@ -1090,18 +1026,12 @@ uLong ZEXPORT crc32_combine64(crc1, crc2, len2) } /* ========================================================================= */ -uLong ZEXPORT crc32_combine(crc1, crc2, len2) - uLong crc1; - uLong crc2; - z_off_t len2; -{ +uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2) { return crc32_combine64(crc1, crc2, (z_off64_t)len2); } /* ========================================================================= */ -uLong ZEXPORT crc32_combine_gen64(len2) - z_off64_t len2; -{ +uLong ZEXPORT crc32_combine_gen64(z_off64_t len2) { #ifdef DYNAMIC_CRC_TABLE once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ @@ -1109,17 +1039,11 @@ uLong ZEXPORT crc32_combine_gen64(len2) } /* ========================================================================= */ -uLong ZEXPORT crc32_combine_gen(len2) - z_off_t len2; -{ +uLong ZEXPORT crc32_combine_gen(z_off_t len2) { return crc32_combine_gen64((z_off64_t)len2); } /* ========================================================================= */ -uLong ZEXPORT crc32_combine_op(crc1, crc2, op) - uLong crc1; - uLong crc2; - uLong op; -{ +uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op) { return multmodp(op, crc1) ^ (crc2 & 0xffffffff); } diff --git a/src/zlib/zlib-1.2.13/crc32.h b/src/zlib/zlib-1.3/crc32.h similarity index 100% rename from src/zlib/zlib-1.2.13/crc32.h rename to src/zlib/zlib-1.3/crc32.h diff --git a/src/zlib/zlib-1.2.13/deflate.c b/src/zlib/zlib-1.3/deflate.c similarity index 94% rename from src/zlib/zlib-1.2.13/deflate.c rename to src/zlib/zlib-1.3/deflate.c index 4a689db35..bd0117519 100644 --- a/src/zlib/zlib-1.2.13/deflate.c +++ b/src/zlib/zlib-1.3/deflate.c @@ -1,5 +1,5 @@ /* deflate.c -- compress data using the deflation algorithm - * Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler + * Copyright (C) 1995-2023 Jean-loup Gailly and Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -52,7 +52,7 @@ #include "deflate.h" const char deflate_copyright[] = - " deflate 1.2.13 Copyright 1995-2022 Jean-loup Gailly and Mark Adler "; + " deflate 1.3 Copyright 1995-2023 Jean-loup Gailly and Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -60,9 +60,6 @@ const char deflate_copyright[] = copyright string in the executable of your product. */ -/* =========================================================================== - * Function prototypes. - */ typedef enum { need_more, /* block not completed, need more input or more output */ block_done, /* block flush performed */ @@ -70,29 +67,16 @@ typedef enum { finish_done /* finish done, accept no more input or output */ } block_state; -typedef block_state (*compress_func) OF((deflate_state *s, int flush)); +typedef block_state (*compress_func)(deflate_state *s, int flush); /* Compression function. Returns the block state after the call. */ -local int deflateStateCheck OF((z_streamp strm)); -local void slide_hash OF((deflate_state *s)); -local void fill_window OF((deflate_state *s)); -local block_state deflate_stored OF((deflate_state *s, int flush)); -local block_state deflate_fast OF((deflate_state *s, int flush)); +local block_state deflate_stored(deflate_state *s, int flush); +local block_state deflate_fast(deflate_state *s, int flush); #ifndef FASTEST -local block_state deflate_slow OF((deflate_state *s, int flush)); -#endif -local block_state deflate_rle OF((deflate_state *s, int flush)); -local block_state deflate_huff OF((deflate_state *s, int flush)); -local void lm_init OF((deflate_state *s)); -local void putShortMSB OF((deflate_state *s, uInt b)); -local void flush_pending OF((z_streamp strm)); -local unsigned read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); -local uInt longest_match OF((deflate_state *s, IPos cur_match)); - -#ifdef ZLIB_DEBUG -local void check_match OF((deflate_state *s, IPos start, IPos match, - int length)); +local block_state deflate_slow(deflate_state *s, int flush); #endif +local block_state deflate_rle(deflate_state *s, int flush); +local block_state deflate_huff(deflate_state *s, int flush); /* =========================================================================== * Local data @@ -195,9 +179,12 @@ local const config configuration_table[10] = { * bit values at the expense of memory usage). We slide even when level == 0 to * keep the hash table consistent if we switch back to level > 0 later. */ -local void slide_hash(s) - deflate_state *s; -{ +#if defined(__has_feature) +# if __has_feature(memory_sanitizer) + __attribute__((no_sanitize("memory"))) +# endif +#endif +local void slide_hash(deflate_state *s) { unsigned n, m; Posf *p; uInt wsize = s->w_size; @@ -221,30 +208,177 @@ local void slide_hash(s) #endif } +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->next_in buffer and copying from it. + * (See also flush_pending()). + */ +local unsigned read_buf(z_streamp strm, Bytef *buf, unsigned size) { + unsigned len = strm->avail_in; + + if (len > size) len = size; + if (len == 0) return 0; + + strm->avail_in -= len; + + zmemcpy(buf, strm->next_in, len); + if (strm->state->wrap == 1) { + strm->adler = adler32(strm->adler, buf, len); + } +#ifdef GZIP + else if (strm->state->wrap == 2) { + strm->adler = crc32(strm->adler, buf, len); + } +#endif + strm->next_in += len; + strm->total_in += len; + + return len; +} + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +local void fill_window(deflate_state *s) { + unsigned n; + unsigned more; /* Amount of free space at the end of the window. */ + uInt wsize = s->w_size; + + Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); + + do { + more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); + + /* Deal with !@#$% 64K limit: */ + if (sizeof(int) <= 2) { + if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + more = wsize; + + } else if (more == (unsigned)(-1)) { + /* Very unlikely, but possible on 16 bit machine if + * strstart == 0 && lookahead == 1 (input done a byte at time) + */ + more--; + } + } + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s->strstart >= wsize + MAX_DIST(s)) { + + zmemcpy(s->window, s->window + wsize, (unsigned)wsize - more); + s->match_start -= wsize; + s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ + s->block_start -= (long) wsize; + if (s->insert > s->strstart) + s->insert = s->strstart; + slide_hash(s); + more += wsize; + } + if (s->strm->avail_in == 0) break; + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + Assert(more >= 2, "more < 2"); + + n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + s->lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s->lookahead + s->insert >= MIN_MATCH) { + uInt str = s->strstart - s->insert; + s->ins_h = s->window[str]; + UPDATE_HASH(s, s->ins_h, s->window[str + 1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + while (s->insert) { + UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); +#ifndef FASTEST + s->prev[str & s->w_mask] = s->head[s->ins_h]; +#endif + s->head[s->ins_h] = (Pos)str; + str++; + s->insert--; + if (s->lookahead + s->insert < MIN_MATCH) + break; + } + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); + + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ + if (s->high_water < s->window_size) { + ulg curr = s->strstart + (ulg)(s->lookahead); + ulg init; + + if (s->high_water < curr) { + /* Previous high water mark below current data -- zero WIN_INIT + * bytes or up to end of window, whichever is less. + */ + init = s->window_size - curr; + if (init > WIN_INIT) + init = WIN_INIT; + zmemzero(s->window + curr, (unsigned)init); + s->high_water = curr + init; + } + else if (s->high_water < (ulg)curr + WIN_INIT) { + /* High water mark at or above current data, but below current data + * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up + * to end of window, whichever is less. + */ + init = (ulg)curr + WIN_INIT - s->high_water; + if (init > s->window_size - s->high_water) + init = s->window_size - s->high_water; + zmemzero(s->window + s->high_water, (unsigned)init); + s->high_water += init; + } + } + + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "not enough room for search"); +} + /* ========================================================================= */ -int ZEXPORT deflateInit_(strm, level, version, stream_size) - z_streamp strm; - int level; - const char *version; - int stream_size; -{ +int ZEXPORT deflateInit_(z_streamp strm, int level, const char *version, + int stream_size) { return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, version, stream_size); /* To do: ignore strm->next_in if we use it as window */ } /* ========================================================================= */ -int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, - version, stream_size) - z_streamp strm; - int level; - int method; - int windowBits; - int memLevel; - int strategy; - const char *version; - int stream_size; -{ +int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, + int windowBits, int memLevel, int strategy, + const char *version, int stream_size) { deflate_state *s; int wrap = 1; static const char my_version[] = ZLIB_VERSION; @@ -386,9 +520,7 @@ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, /* ========================================================================= * Check for a valid deflate stream state. Return 0 if ok, 1 if not. */ -local int deflateStateCheck(strm) - z_streamp strm; -{ +local int deflateStateCheck(z_streamp strm) { deflate_state *s; if (strm == Z_NULL || strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) @@ -409,11 +541,8 @@ local int deflateStateCheck(strm) } /* ========================================================================= */ -int ZEXPORT deflateSetDictionary(strm, dictionary, dictLength) - z_streamp strm; - const Bytef *dictionary; - uInt dictLength; -{ +int ZEXPORT deflateSetDictionary(z_streamp strm, const Bytef *dictionary, + uInt dictLength) { deflate_state *s; uInt str, n; int wrap; @@ -478,11 +607,8 @@ int ZEXPORT deflateSetDictionary(strm, dictionary, dictLength) } /* ========================================================================= */ -int ZEXPORT deflateGetDictionary(strm, dictionary, dictLength) - z_streamp strm; - Bytef *dictionary; - uInt *dictLength; -{ +int ZEXPORT deflateGetDictionary(z_streamp strm, Bytef *dictionary, + uInt *dictLength) { deflate_state *s; uInt len; @@ -500,9 +626,7 @@ int ZEXPORT deflateGetDictionary(strm, dictionary, dictLength) } /* ========================================================================= */ -int ZEXPORT deflateResetKeep(strm) - z_streamp strm; -{ +int ZEXPORT deflateResetKeep(z_streamp strm) { deflate_state *s; if (deflateStateCheck(strm)) { @@ -537,10 +661,32 @@ int ZEXPORT deflateResetKeep(strm) return Z_OK; } +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +local void lm_init(deflate_state *s) { + s->window_size = (ulg)2L*s->w_size; + + CLEAR_HASH(s); + + /* Set the default configuration parameters: + */ + s->max_lazy_match = configuration_table[s->level].max_lazy; + s->good_match = configuration_table[s->level].good_length; + s->nice_match = configuration_table[s->level].nice_length; + s->max_chain_length = configuration_table[s->level].max_chain; + + s->strstart = 0; + s->block_start = 0L; + s->lookahead = 0; + s->insert = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + s->ins_h = 0; +} + /* ========================================================================= */ -int ZEXPORT deflateReset(strm) - z_streamp strm; -{ +int ZEXPORT deflateReset(z_streamp strm) { int ret; ret = deflateResetKeep(strm); @@ -550,10 +696,7 @@ int ZEXPORT deflateReset(strm) } /* ========================================================================= */ -int ZEXPORT deflateSetHeader(strm, head) - z_streamp strm; - gz_headerp head; -{ +int ZEXPORT deflateSetHeader(z_streamp strm, gz_headerp head) { if (deflateStateCheck(strm) || strm->state->wrap != 2) return Z_STREAM_ERROR; strm->state->gzhead = head; @@ -561,11 +704,7 @@ int ZEXPORT deflateSetHeader(strm, head) } /* ========================================================================= */ -int ZEXPORT deflatePending(strm, pending, bits) - unsigned *pending; - int *bits; - z_streamp strm; -{ +int ZEXPORT deflatePending(z_streamp strm, unsigned *pending, int *bits) { if (deflateStateCheck(strm)) return Z_STREAM_ERROR; if (pending != Z_NULL) *pending = strm->state->pending; @@ -575,11 +714,7 @@ int ZEXPORT deflatePending(strm, pending, bits) } /* ========================================================================= */ -int ZEXPORT deflatePrime(strm, bits, value) - z_streamp strm; - int bits; - int value; -{ +int ZEXPORT deflatePrime(z_streamp strm, int bits, int value) { deflate_state *s; int put; @@ -602,11 +737,7 @@ int ZEXPORT deflatePrime(strm, bits, value) } /* ========================================================================= */ -int ZEXPORT deflateParams(strm, level, strategy) - z_streamp strm; - int level; - int strategy; -{ +int ZEXPORT deflateParams(z_streamp strm, int level, int strategy) { deflate_state *s; compress_func func; @@ -651,13 +782,8 @@ int ZEXPORT deflateParams(strm, level, strategy) } /* ========================================================================= */ -int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) - z_streamp strm; - int good_length; - int max_lazy; - int nice_length; - int max_chain; -{ +int ZEXPORT deflateTune(z_streamp strm, int good_length, int max_lazy, + int nice_length, int max_chain) { deflate_state *s; if (deflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -693,10 +819,7 @@ int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain) * * Shifts are used to approximate divisions, for speed. */ -uLong ZEXPORT deflateBound(strm, sourceLen) - z_streamp strm; - uLong sourceLen; -{ +uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen) { deflate_state *s; uLong fixedlen, storelen, wraplen; @@ -752,7 +875,8 @@ uLong ZEXPORT deflateBound(strm, sourceLen) /* if not default parameters, return one of the conservative bounds */ if (s->w_bits != 15 || s->hash_bits != 8 + 7) - return (s->w_bits <= s->hash_bits ? fixedlen : storelen) + wraplen; + return (s->w_bits <= s->hash_bits && s->level ? fixedlen : storelen) + + wraplen; /* default settings: return tight bound for that case -- ~0.03% overhead plus a small constant */ @@ -765,10 +889,7 @@ uLong ZEXPORT deflateBound(strm, sourceLen) * IN assertion: the stream state is correct and there is enough room in * pending_buf. */ -local void putShortMSB(s, b) - deflate_state *s; - uInt b; -{ +local void putShortMSB(deflate_state *s, uInt b) { put_byte(s, (Byte)(b >> 8)); put_byte(s, (Byte)(b & 0xff)); } @@ -779,9 +900,7 @@ local void putShortMSB(s, b) * applications may wish to modify it to avoid allocating a large * strm->next_out buffer and copying into it. (See also read_buf()). */ -local void flush_pending(strm) - z_streamp strm; -{ +local void flush_pending(z_streamp strm) { unsigned len; deflate_state *s = strm->state; @@ -812,10 +931,7 @@ local void flush_pending(strm) } while (0) /* ========================================================================= */ -int ZEXPORT deflate(strm, flush) - z_streamp strm; - int flush; -{ +int ZEXPORT deflate(z_streamp strm, int flush) { int old_flush; /* value of flush param for previous deflate call */ deflate_state *s; @@ -1127,9 +1243,7 @@ int ZEXPORT deflate(strm, flush) } /* ========================================================================= */ -int ZEXPORT deflateEnd(strm) - z_streamp strm; -{ +int ZEXPORT deflateEnd(z_streamp strm) { int status; if (deflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -1153,11 +1267,10 @@ int ZEXPORT deflateEnd(strm) * To simplify the source, this is not supported for 16-bit MSDOS (which * doesn't have enough memory anyway to duplicate compression states). */ -int ZEXPORT deflateCopy(dest, source) - z_streamp dest; - z_streamp source; -{ +int ZEXPORT deflateCopy(z_streamp dest, z_streamp source) { #ifdef MAXSEG_64K + (void)dest; + (void)source; return Z_STREAM_ERROR; #else deflate_state *ds; @@ -1205,66 +1318,6 @@ int ZEXPORT deflateCopy(dest, source) #endif /* MAXSEG_64K */ } -/* =========================================================================== - * Read a new buffer from the current input stream, update the adler32 - * and total number of bytes read. All deflate() input goes through - * this function so some applications may wish to modify it to avoid - * allocating a large strm->next_in buffer and copying from it. - * (See also flush_pending()). - */ -local unsigned read_buf(strm, buf, size) - z_streamp strm; - Bytef *buf; - unsigned size; -{ - unsigned len = strm->avail_in; - - if (len > size) len = size; - if (len == 0) return 0; - - strm->avail_in -= len; - - zmemcpy(buf, strm->next_in, len); - if (strm->state->wrap == 1) { - strm->adler = adler32(strm->adler, buf, len); - } -#ifdef GZIP - else if (strm->state->wrap == 2) { - strm->adler = crc32(strm->adler, buf, len); - } -#endif - strm->next_in += len; - strm->total_in += len; - - return len; -} - -/* =========================================================================== - * Initialize the "longest match" routines for a new zlib stream - */ -local void lm_init(s) - deflate_state *s; -{ - s->window_size = (ulg)2L*s->w_size; - - CLEAR_HASH(s); - - /* Set the default configuration parameters: - */ - s->max_lazy_match = configuration_table[s->level].max_lazy; - s->good_match = configuration_table[s->level].good_length; - s->nice_match = configuration_table[s->level].nice_length; - s->max_chain_length = configuration_table[s->level].max_chain; - - s->strstart = 0; - s->block_start = 0L; - s->lookahead = 0; - s->insert = 0; - s->match_length = s->prev_length = MIN_MATCH-1; - s->match_available = 0; - s->ins_h = 0; -} - #ifndef FASTEST /* =========================================================================== * Set match_start to the longest match starting at the given string and @@ -1275,10 +1328,7 @@ local void lm_init(s) * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 * OUT assertion: the match length is not greater than s->lookahead. */ -local uInt longest_match(s, cur_match) - deflate_state *s; - IPos cur_match; /* current match */ -{ +local uInt longest_match(deflate_state *s, IPos cur_match) { unsigned chain_length = s->max_chain_length;/* max hash chain length */ register Bytef *scan = s->window + s->strstart; /* current string */ register Bytef *match; /* matched string */ @@ -1426,10 +1476,7 @@ local uInt longest_match(s, cur_match) /* --------------------------------------------------------------------------- * Optimized version for FASTEST only */ -local uInt longest_match(s, cur_match) - deflate_state *s; - IPos cur_match; /* current match */ -{ +local uInt longest_match(deflate_state *s, IPos cur_match) { register Bytef *scan = s->window + s->strstart; /* current string */ register Bytef *match; /* matched string */ register int len; /* length of current match */ @@ -1490,11 +1537,7 @@ local uInt longest_match(s, cur_match) /* =========================================================================== * Check that the match at match_start is indeed a match. */ -local void check_match(s, start, match, length) - deflate_state *s; - IPos start, match; - int length; -{ +local void check_match(deflate_state *s, IPos start, IPos match, int length) { /* check that the match is indeed a match */ if (zmemcmp(s->window + match, s->window + start, length) != EQUAL) { @@ -1514,137 +1557,6 @@ local void check_match(s, start, match, length) # define check_match(s, start, match, length) #endif /* ZLIB_DEBUG */ -/* =========================================================================== - * Fill the window when the lookahead becomes insufficient. - * Updates strstart and lookahead. - * - * IN assertion: lookahead < MIN_LOOKAHEAD - * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD - * At least one byte has been read, or avail_in == 0; reads are - * performed for at least two bytes (required for the zip translate_eol - * option -- not supported here). - */ -local void fill_window(s) - deflate_state *s; -{ - unsigned n; - unsigned more; /* Amount of free space at the end of the window. */ - uInt wsize = s->w_size; - - Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); - - do { - more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); - - /* Deal with !@#$% 64K limit: */ - if (sizeof(int) <= 2) { - if (more == 0 && s->strstart == 0 && s->lookahead == 0) { - more = wsize; - - } else if (more == (unsigned)(-1)) { - /* Very unlikely, but possible on 16 bit machine if - * strstart == 0 && lookahead == 1 (input done a byte at time) - */ - more--; - } - } - - /* If the window is almost full and there is insufficient lookahead, - * move the upper half to the lower one to make room in the upper half. - */ - if (s->strstart >= wsize + MAX_DIST(s)) { - - zmemcpy(s->window, s->window + wsize, (unsigned)wsize - more); - s->match_start -= wsize; - s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ - s->block_start -= (long) wsize; - if (s->insert > s->strstart) - s->insert = s->strstart; - slide_hash(s); - more += wsize; - } - if (s->strm->avail_in == 0) break; - - /* If there was no sliding: - * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && - * more == window_size - lookahead - strstart - * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) - * => more >= window_size - 2*WSIZE + 2 - * In the BIG_MEM or MMAP case (not yet supported), - * window_size == input_size + MIN_LOOKAHEAD && - * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. - * Otherwise, window_size == 2*WSIZE so more >= 2. - * If there was sliding, more >= WSIZE. So in all cases, more >= 2. - */ - Assert(more >= 2, "more < 2"); - - n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); - s->lookahead += n; - - /* Initialize the hash value now that we have some input: */ - if (s->lookahead + s->insert >= MIN_MATCH) { - uInt str = s->strstart - s->insert; - s->ins_h = s->window[str]; - UPDATE_HASH(s, s->ins_h, s->window[str + 1]); -#if MIN_MATCH != 3 - Call UPDATE_HASH() MIN_MATCH-3 more times -#endif - while (s->insert) { - UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); -#ifndef FASTEST - s->prev[str & s->w_mask] = s->head[s->ins_h]; -#endif - s->head[s->ins_h] = (Pos)str; - str++; - s->insert--; - if (s->lookahead + s->insert < MIN_MATCH) - break; - } - } - /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, - * but this is not important since only literal bytes will be emitted. - */ - - } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); - - /* If the WIN_INIT bytes after the end of the current data have never been - * written, then zero those bytes in order to avoid memory check reports of - * the use of uninitialized (or uninitialised as Julian writes) bytes by - * the longest match routines. Update the high water mark for the next - * time through here. WIN_INIT is set to MAX_MATCH since the longest match - * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. - */ - if (s->high_water < s->window_size) { - ulg curr = s->strstart + (ulg)(s->lookahead); - ulg init; - - if (s->high_water < curr) { - /* Previous high water mark below current data -- zero WIN_INIT - * bytes or up to end of window, whichever is less. - */ - init = s->window_size - curr; - if (init > WIN_INIT) - init = WIN_INIT; - zmemzero(s->window + curr, (unsigned)init); - s->high_water = curr + init; - } - else if (s->high_water < (ulg)curr + WIN_INIT) { - /* High water mark at or above current data, but below current data - * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up - * to end of window, whichever is less. - */ - init = (ulg)curr + WIN_INIT - s->high_water; - if (init > s->window_size - s->high_water) - init = s->window_size - s->high_water; - zmemzero(s->window + s->high_water, (unsigned)init); - s->high_water += init; - } - } - - Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, - "not enough room for search"); -} - /* =========================================================================== * Flush the current block, with given end-of-file flag. * IN assertion: strstart is set to the end of the current match. @@ -1687,10 +1599,7 @@ local void fill_window(s) * copied. It is most efficient with large input and output buffers, which * maximizes the opportunities to have a single copy from next_in to next_out. */ -local block_state deflate_stored(s, flush) - deflate_state *s; - int flush; -{ +local block_state deflate_stored(deflate_state *s, int flush) { /* Smallest worthy block size when not flushing or finishing. By default * this is 32K. This can be as small as 507 bytes for memLevel == 1. For * large input and output buffers, the stored block size will be larger. @@ -1874,10 +1783,7 @@ local block_state deflate_stored(s, flush) * new strings in the dictionary only for unmatched strings or for short * matches. It is used only for the fast compression options. */ -local block_state deflate_fast(s, flush) - deflate_state *s; - int flush; -{ +local block_state deflate_fast(deflate_state *s, int flush) { IPos hash_head; /* head of the hash chain */ int bflush; /* set if current block must be flushed */ @@ -1976,10 +1882,7 @@ local block_state deflate_fast(s, flush) * evaluation for matches: a match is finally adopted only if there is * no better match at the next window position. */ -local block_state deflate_slow(s, flush) - deflate_state *s; - int flush; -{ +local block_state deflate_slow(deflate_state *s, int flush) { IPos hash_head; /* head of hash chain */ int bflush; /* set if current block must be flushed */ @@ -2107,10 +2010,7 @@ local block_state deflate_slow(s, flush) * one. Do not maintain a hash table. (It will be regenerated if this run of * deflate switches away from Z_RLE.) */ -local block_state deflate_rle(s, flush) - deflate_state *s; - int flush; -{ +local block_state deflate_rle(deflate_state *s, int flush) { int bflush; /* set if current block must be flushed */ uInt prev; /* byte at distance one to match */ Bytef *scan, *strend; /* scan goes up to strend for length of run */ @@ -2181,10 +2081,7 @@ local block_state deflate_rle(s, flush) * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. * (It will be regenerated if this run of deflate switches away from Huffman.) */ -local block_state deflate_huff(s, flush) - deflate_state *s; - int flush; -{ +local block_state deflate_huff(deflate_state *s, int flush) { int bflush; /* set if current block must be flushed */ for (;;) { diff --git a/src/zlib/zlib-1.2.13/deflate.h b/src/zlib/zlib-1.3/deflate.h similarity index 96% rename from src/zlib/zlib-1.2.13/deflate.h rename to src/zlib/zlib-1.3/deflate.h index 1a06cd5f2..869679142 100644 --- a/src/zlib/zlib-1.2.13/deflate.h +++ b/src/zlib/zlib-1.3/deflate.h @@ -291,14 +291,14 @@ typedef struct internal_state { memory checker errors from longest match routines */ /* in trees.c */ -void ZLIB_INTERNAL _tr_init OF((deflate_state *s)); -int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); -void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf, - ulg stored_len, int last)); -void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s)); -void ZLIB_INTERNAL _tr_align OF((deflate_state *s)); -void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf, - ulg stored_len, int last)); +void ZLIB_INTERNAL _tr_init(deflate_state *s); +int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc); +void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, + ulg stored_len, int last); +void ZLIB_INTERNAL _tr_flush_bits(deflate_state *s); +void ZLIB_INTERNAL _tr_align(deflate_state *s); +void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, + ulg stored_len, int last); #define d_code(dist) \ ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) diff --git a/src/zlib/zlib-1.2.13/doc/algorithm.txt b/src/zlib/zlib-1.3/doc/algorithm.txt similarity index 100% rename from src/zlib/zlib-1.2.13/doc/algorithm.txt rename to src/zlib/zlib-1.3/doc/algorithm.txt diff --git a/src/zlib/zlib-1.2.13/doc/crc-doc.1.0.pdf b/src/zlib/zlib-1.3/doc/crc-doc.1.0.pdf similarity index 100% rename from src/zlib/zlib-1.2.13/doc/crc-doc.1.0.pdf rename to src/zlib/zlib-1.3/doc/crc-doc.1.0.pdf diff --git a/src/zlib/zlib-1.2.13/doc/rfc1950.txt b/src/zlib/zlib-1.3/doc/rfc1950.txt similarity index 100% rename from src/zlib/zlib-1.2.13/doc/rfc1950.txt rename to src/zlib/zlib-1.3/doc/rfc1950.txt diff --git a/src/zlib/zlib-1.2.13/doc/rfc1951.txt b/src/zlib/zlib-1.3/doc/rfc1951.txt similarity index 100% rename from src/zlib/zlib-1.2.13/doc/rfc1951.txt rename to src/zlib/zlib-1.3/doc/rfc1951.txt diff --git a/src/zlib/zlib-1.2.13/doc/rfc1952.txt b/src/zlib/zlib-1.3/doc/rfc1952.txt similarity index 100% rename from src/zlib/zlib-1.2.13/doc/rfc1952.txt rename to src/zlib/zlib-1.3/doc/rfc1952.txt diff --git a/src/zlib/zlib-1.2.13/doc/txtvsbin.txt b/src/zlib/zlib-1.3/doc/txtvsbin.txt similarity index 100% rename from src/zlib/zlib-1.2.13/doc/txtvsbin.txt rename to src/zlib/zlib-1.3/doc/txtvsbin.txt diff --git a/src/zlib/zlib-1.2.13/examples/README.examples b/src/zlib/zlib-1.3/examples/README.examples similarity index 100% rename from src/zlib/zlib-1.2.13/examples/README.examples rename to src/zlib/zlib-1.3/examples/README.examples diff --git a/src/zlib/zlib-1.2.13/examples/enough.c b/src/zlib/zlib-1.3/examples/enough.c similarity index 100% rename from src/zlib/zlib-1.2.13/examples/enough.c rename to src/zlib/zlib-1.3/examples/enough.c diff --git a/src/zlib/zlib-1.2.13/examples/fitblk.c b/src/zlib/zlib-1.3/examples/fitblk.c similarity index 99% rename from src/zlib/zlib-1.2.13/examples/fitblk.c rename to src/zlib/zlib-1.3/examples/fitblk.c index 68f56809d..723dc0028 100644 --- a/src/zlib/zlib-1.2.13/examples/fitblk.c +++ b/src/zlib/zlib-1.3/examples/fitblk.c @@ -198,7 +198,7 @@ int main(int argc, char **argv) if (ret == Z_MEM_ERROR) quit("out of memory"); - /* set up for next reocmpression */ + /* set up for next recompression */ ret = inflateReset(&inf); assert(ret != Z_STREAM_ERROR); ret = deflateReset(&def); diff --git a/src/zlib/zlib-1.2.13/examples/gun.c b/src/zlib/zlib-1.3/examples/gun.c similarity index 100% rename from src/zlib/zlib-1.2.13/examples/gun.c rename to src/zlib/zlib-1.3/examples/gun.c diff --git a/src/zlib/zlib-1.2.13/examples/gzappend.c b/src/zlib/zlib-1.3/examples/gzappend.c similarity index 100% rename from src/zlib/zlib-1.2.13/examples/gzappend.c rename to src/zlib/zlib-1.3/examples/gzappend.c diff --git a/src/zlib/zlib-1.2.13/examples/gzjoin.c b/src/zlib/zlib-1.3/examples/gzjoin.c similarity index 100% rename from src/zlib/zlib-1.2.13/examples/gzjoin.c rename to src/zlib/zlib-1.3/examples/gzjoin.c diff --git a/src/zlib/zlib-1.2.13/examples/gzlog.c b/src/zlib/zlib-1.3/examples/gzlog.c similarity index 100% rename from src/zlib/zlib-1.2.13/examples/gzlog.c rename to src/zlib/zlib-1.3/examples/gzlog.c diff --git a/src/zlib/zlib-1.2.13/examples/gzlog.h b/src/zlib/zlib-1.3/examples/gzlog.h similarity index 100% rename from src/zlib/zlib-1.2.13/examples/gzlog.h rename to src/zlib/zlib-1.3/examples/gzlog.h diff --git a/src/zlib/zlib-1.2.13/examples/gznorm.c b/src/zlib/zlib-1.3/examples/gznorm.c similarity index 100% rename from src/zlib/zlib-1.2.13/examples/gznorm.c rename to src/zlib/zlib-1.3/examples/gznorm.c diff --git a/src/zlib/zlib-1.2.13/examples/zlib_how.html b/src/zlib/zlib-1.3/examples/zlib_how.html similarity index 96% rename from src/zlib/zlib-1.2.13/examples/zlib_how.html rename to src/zlib/zlib-1.3/examples/zlib_how.html index 444ff1c9a..43271b988 100644 --- a/src/zlib/zlib-1.2.13/examples/zlib_how.html +++ b/src/zlib/zlib-1.3/examples/zlib_how.html @@ -1,10 +1,10 @@ - + zlib Usage Example - +

    zlib Usage Example

    @@ -17,7 +17,7 @@

    zlib Usage Example

    annotations are interspersed between lines of the code. So please read between the lines. We hope this helps explain some of the intricacies of zlib.
    
     /* zpipe.c: example of proper use of zlib's inflate() and deflate()
        Not copyrighted -- provided to the public domain
    @@ -155,13 +155,11 @@ 

    zlib Usage Example

    We start off by reading data from the input file. The number of bytes read is put directly into avail_in, and a pointer to those bytes is put into next_in. We also -check to see if end-of-file on the input has been reached. If we are at the end of file, then flush is set to the +check to see if end-of-file on the input has been reached using feof(). +If we are at the end of file, then flush is set to the zlib constant Z_FINISH, which is later passed to deflate() to -indicate that this is the last chunk of input data to compress. We need to use feof() -to check for end-of-file as opposed to seeing if fewer than CHUNK bytes have been read. The -reason is that if the input file length is an exact multiple of CHUNK, we will miss -the fact that we got to the end-of-file, and not know to tell deflate() to finish -up the compressed stream. If we are not yet at the end of the input, then the zlib +indicate that this is the last chunk of input data to compress. +If we are not yet at the end of the input, then the zlib constant Z_NO_FLUSH will be passed to deflate to indicate that we are still in the middle of the uncompressed data.

    @@ -540,6 +538,12 @@

    zlib Usage Example

    }

    -Copyright (c) 2004, 2005 by Mark Adler
    Last modified 11 December 2005
    +Last modified 24 January 2023
    +Copyright © 2004-2023 Mark Adler

    + +Creative Commons License + +Creative Commons Attribution-NoDerivatives 4.0 International License. diff --git a/src/zlib/zlib-1.2.13/examples/zpipe.c b/src/zlib/zlib-1.3/examples/zpipe.c similarity index 100% rename from src/zlib/zlib-1.2.13/examples/zpipe.c rename to src/zlib/zlib-1.3/examples/zpipe.c diff --git a/src/zlib/zlib-1.3/examples/zran.c b/src/zlib/zlib-1.3/examples/zran.c new file mode 100644 index 000000000..32c93686c --- /dev/null +++ b/src/zlib/zlib-1.3/examples/zran.c @@ -0,0 +1,533 @@ +/* zran.c -- example of deflate stream indexing and random access + * Copyright (C) 2005, 2012, 2018, 2023 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + * Version 1.4 13 Apr 2023 Mark Adler */ + +/* Version History: + 1.0 29 May 2005 First version + 1.1 29 Sep 2012 Fix memory reallocation error + 1.2 14 Oct 2018 Handle gzip streams with multiple members + Add a header file to facilitate usage in applications + 1.3 18 Feb 2023 Permit raw deflate streams as well as zlib and gzip + Permit crossing gzip member boundaries when extracting + Support a size_t size when extracting (was an int) + Do a binary search over the index for an access point + Expose the access point type to enable save and load + 1.4 13 Apr 2023 Add a NOPRIME define to not use inflatePrime() + */ + +// Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary() +// for random access of a compressed file. A file containing a raw deflate +// stream is provided on the command line. The compressed stream is decoded in +// its entirety, and an index built with access points about every SPAN bytes +// in the uncompressed output. The compressed file is left open, and can then +// be read randomly, having to decompress on the average SPAN/2 uncompressed +// bytes before getting to the desired block of data. +// +// An access point can be created at the start of any deflate block, by saving +// the starting file offset and bit of that block, and the 32K bytes of +// uncompressed data that precede that block. Also the uncompressed offset of +// that block is saved to provide a reference for locating a desired starting +// point in the uncompressed stream. deflate_index_build() decompresses the +// input raw deflate stream a block at a time, and at the end of each block +// decides if enough uncompressed data has gone by to justify the creation of a +// new access point. If so, that point is saved in a data structure that grows +// as needed to accommodate the points. +// +// To use the index, an offset in the uncompressed data is provided, for which +// the latest access point at or preceding that offset is located in the index. +// The input file is positioned to the specified location in the index, and if +// necessary the first few bits of the compressed data is read from the file. +// inflate is initialized with those bits and the 32K of uncompressed data, and +// decompression then proceeds until the desired offset in the file is reached. +// Then decompression continues to read the requested uncompressed data from +// the file. +// +// There is some fair bit of overhead to starting inflation for the random +// access, mainly copying the 32K byte dictionary. If small pieces of the file +// are being accessed, it would make sense to implement a cache to hold some +// lookahead to avoid many calls to deflate_index_extract() for small lengths. +// +// Another way to build an index would be to use inflateCopy(). That would not +// be constrained to have access points at block boundaries, but would require +// more memory per access point, and could not be saved to a file due to the +// use of pointers in the state. The approach here allows for storage of the +// index in a file. + +#include +#include +#include +#include +#include "zlib.h" +#include "zran.h" + +#define WINSIZE 32768U // sliding window size +#define CHUNK 16384 // file input buffer size + +// See comments in zran.h. +void deflate_index_free(struct deflate_index *index) { + if (index != NULL) { + free(index->list); + free(index); + } +} + +// Add an access point to the list. If out of memory, deallocate the existing +// list and return NULL. index->mode is temporarily the allocated number of +// access points, until it is time for deflate_index_build() to return. Then +// index->mode is set to the mode of inflation. +static struct deflate_index *add_point(struct deflate_index *index, int bits, + off_t in, off_t out, unsigned left, + unsigned char *window) { + if (index == NULL) { + // The list is empty. Create it, starting with eight access points. + index = malloc(sizeof(struct deflate_index)); + if (index == NULL) + return NULL; + index->have = 0; + index->mode = 8; + index->list = malloc(sizeof(point_t) * index->mode); + if (index->list == NULL) { + free(index); + return NULL; + } + } + + else if (index->have == index->mode) { + // The list is full. Make it bigger. + index->mode <<= 1; + point_t *next = realloc(index->list, sizeof(point_t) * index->mode); + if (next == NULL) { + deflate_index_free(index); + return NULL; + } + index->list = next; + } + + // Fill in the access point and increment how many we have. + point_t *next = (point_t *)(index->list) + index->have++; + if (index->have < 0) { + // Overflowed the int! + deflate_index_free(index); + return NULL; + } + next->out = out; + next->in = in; + next->bits = bits; + if (left) + memcpy(next->window, window + WINSIZE - left, left); + if (left < WINSIZE) + memcpy(next->window + left, window, WINSIZE - left); + + // Return the index, which may have been newly allocated or destroyed. + return index; +} + +// Decompression modes. These are the inflateInit2() windowBits parameter. +#define RAW -15 +#define ZLIB 15 +#define GZIP 31 + +// See comments in zran.h. +int deflate_index_build(FILE *in, off_t span, struct deflate_index **built) { + // Set up inflation state. + z_stream strm = {0}; // inflate engine (gets fired up later) + unsigned char buf[CHUNK]; // input buffer + unsigned char win[WINSIZE] = {0}; // output sliding window + off_t totin = 0; // total bytes read from input + off_t totout = 0; // total bytes uncompressed + int mode = 0; // mode: RAW, ZLIB, or GZIP (0 => not set yet) + + // Decompress from in, generating access points along the way. + int ret; // the return value from zlib, or Z_ERRNO + off_t last; // last access point uncompressed offset + struct deflate_index *index = NULL; // list of access points + do { + // Assure available input, at least until reaching EOF. + if (strm.avail_in == 0) { + strm.avail_in = fread(buf, 1, sizeof(buf), in); + totin += strm.avail_in; + strm.next_in = buf; + if (strm.avail_in < sizeof(buf) && ferror(in)) { + ret = Z_ERRNO; + break; + } + + if (mode == 0) { + // At the start of the input -- determine the type. Assume raw + // if it is neither zlib nor gzip. This could in theory result + // in a false positive for zlib, but in practice the fill bits + // after a stored block are always zeros, so a raw stream won't + // start with an 8 in the low nybble. + mode = strm.avail_in == 0 ? RAW : // empty -- will fail + (strm.next_in[0] & 0xf) == 8 ? ZLIB : + strm.next_in[0] == 0x1f ? GZIP : + /* else */ RAW; + ret = inflateInit2(&strm, mode); + if (ret != Z_OK) + break; + } + } + + // Assure available output. This rotates the output through, for use as + // a sliding window on the uncompressed data. + if (strm.avail_out == 0) { + strm.avail_out = sizeof(win); + strm.next_out = win; + } + + if (mode == RAW && index == NULL) + // We skip the inflate() call at the start of raw deflate data in + // order generate an access point there. Set data_type to imitate + // the end of a header. + strm.data_type = 0x80; + else { + // Inflate and update the number of uncompressed bytes. + unsigned before = strm.avail_out; + ret = inflate(&strm, Z_BLOCK); + totout += before - strm.avail_out; + } + + if ((strm.data_type & 0xc0) == 0x80 && + (index == NULL || totout - last >= span)) { + // We are at the end of a header or a non-last deflate block, so we + // can add an access point here. Furthermore, we are either at the + // very start for the first access point, or there has been span or + // more uncompressed bytes since the last access point, so we want + // to add an access point here. + index = add_point(index, strm.data_type & 7, totin - strm.avail_in, + totout, strm.avail_out, win); + if (index == NULL) { + ret = Z_MEM_ERROR; + break; + } + last = totout; + } + + if (ret == Z_STREAM_END && mode == GZIP && + (strm.avail_in || ungetc(getc(in), in) != EOF)) + // There is more input after the end of a gzip member. Reset the + // inflate state to read another gzip member. On success, this will + // set ret to Z_OK to continue decompressing. + ret = inflateReset2(&strm, GZIP); + + // Keep going until Z_STREAM_END or error. If the compressed data ends + // prematurely without a file read error, Z_BUF_ERROR is returned. + } while (ret == Z_OK); + inflateEnd(&strm); + + if (ret != Z_STREAM_END) { + // An error was encountered. Discard the index and return a negative + // error code. + deflate_index_free(index); + return ret == Z_NEED_DICT ? Z_DATA_ERROR : ret; + } + + // Shrink the index to only the occupied access points and return it. + index->mode = mode; + index->length = totout; + point_t *list = realloc(index->list, sizeof(point_t) * index->have); + if (list == NULL) { + // Seems like a realloc() to make something smaller should always work, + // but just in case. + deflate_index_free(index); + return Z_MEM_ERROR; + } + index->list = list; + *built = index; + return index->have; +} + +#ifdef NOPRIME +// Support zlib versions before 1.2.3 (July 2005), or incomplete zlib clones +// that do not have inflatePrime(). + +# define INFLATEPRIME inflatePreface + +// Append the low bits bits of value to in[] at bit position *have, updating +// *have. value must be zero above its low bits bits. bits must be positive. +// This assumes that any bits above the *have bits in the last byte are zeros. +// That assumption is preserved on return, as any bits above *have + bits in +// the last byte written will be set to zeros. +static inline void append_bits(unsigned value, int bits, + unsigned char *in, int *have) { + in += *have >> 3; // where the first bits from value will go + int k = *have & 7; // the number of bits already there + *have += bits; + if (k) + *in |= value << k; // write value above the low k bits + else + *in = value; + k = 8 - k; // the number of bits just appended + while (bits > k) { + value >>= k; // drop the bits appended + bits -= k; + k = 8; // now at a byte boundary + *++in = value; + } +} + +// Insert enough bits in the form of empty deflate blocks in front of the the +// low bits bits of value, in order to bring the sequence to a byte boundary. +// Then feed that to inflate(). This does what inflatePrime() does, except that +// a negative value of bits is not supported. bits must be in 0..16. If the +// arguments are invalid, Z_STREAM_ERROR is returned. Otherwise the return +// value from inflate() is returned. +static int inflatePreface(z_stream *strm, int bits, int value) { + // Check input. + if (strm == Z_NULL || bits < 0 || bits > 16) + return Z_STREAM_ERROR; + if (bits == 0) + return Z_OK; + value &= (2 << (bits - 1)) - 1; + + // An empty dynamic block with an odd number of bits (95). The high bit of + // the last byte is unused. + static const unsigned char dyn[] = { + 4, 0xe0, 0x81, 8, 0, 0, 0, 0, 0x20, 0xa8, 0xab, 0x1f + }; + const int dynlen = 95; // number of bits in the block + + // Build an input buffer for inflate that is a multiple of eight bits in + // length, and that ends with the low bits bits of value. + unsigned char in[(dynlen + 3 * 10 + 16 + 7) / 8]; + int have = 0; + if (bits & 1) { + // Insert an empty dynamic block to get to an odd number of bits, so + // when bits bits from value are appended, we are at an even number of + // bits. + memcpy(in, dyn, sizeof(dyn)); + have = dynlen; + } + while ((have + bits) & 7) + // Insert empty fixed blocks until appending bits bits would put us on + // a byte boundary. This will insert at most three fixed blocks. + append_bits(2, 10, in, &have); + + // Append the bits bits from value, which takes us to a byte boundary. + append_bits(value, bits, in, &have); + + // Deliver the input to inflate(). There is no output space provided, but + // inflate() can't get stuck waiting on output not ingesting all of the + // provided input. The reason is that there will be at most 16 bits of + // input from value after the empty deflate blocks (which themselves + // generate no output). At least ten bits are needed to generate the first + // output byte from a fixed block. The last two bytes of the buffer have to + // be ingested in order to get ten bits, which is the most that value can + // occupy. + strm->avail_in = have >> 3; + strm->next_in = in; + strm->avail_out = 0; + strm->next_out = in; // not used, but can't be NULL + return inflate(strm, Z_NO_FLUSH); +} + +#else +# define INFLATEPRIME inflatePrime +#endif + +// See comments in zran.h. +ptrdiff_t deflate_index_extract(FILE *in, struct deflate_index *index, + off_t offset, unsigned char *buf, size_t len) { + // Do a quick sanity check on the index. + if (index == NULL || index->have < 1 || index->list[0].out != 0) + return Z_STREAM_ERROR; + + // If nothing to extract, return zero bytes extracted. + if (len == 0 || offset < 0 || offset >= index->length) + return 0; + + // Find the access point closest to but not after offset. + int lo = -1, hi = index->have; + point_t *point = index->list; + while (hi - lo > 1) { + int mid = (lo + hi) >> 1; + if (offset < point[mid].out) + hi = mid; + else + lo = mid; + } + point += lo; + + // Initialize the input file and prime the inflate engine to start there. + int ret = fseeko(in, point->in - (point->bits ? 1 : 0), SEEK_SET); + if (ret == -1) + return Z_ERRNO; + int ch = 0; + if (point->bits && (ch = getc(in)) == EOF) + return ferror(in) ? Z_ERRNO : Z_BUF_ERROR; + z_stream strm = {0}; + ret = inflateInit2(&strm, RAW); + if (ret != Z_OK) + return ret; + if (point->bits) + INFLATEPRIME(&strm, point->bits, ch >> (8 - point->bits)); + inflateSetDictionary(&strm, point->window, WINSIZE); + + // Skip uncompressed bytes until offset reached, then satisfy request. + unsigned char input[CHUNK]; + unsigned char discard[WINSIZE]; + offset -= point->out; // number of bytes to skip to get to offset + size_t left = len; // number of bytes left to read after offset + do { + if (offset) { + // Discard up to offset uncompressed bytes. + strm.avail_out = offset < WINSIZE ? (unsigned)offset : WINSIZE; + strm.next_out = discard; + } + else { + // Uncompress up to left bytes into buf. + strm.avail_out = left < UINT_MAX ? (unsigned)left : UINT_MAX; + strm.next_out = buf + len - left; + } + + // Uncompress, setting got to the number of bytes uncompressed. + if (strm.avail_in == 0) { + // Assure available input. + strm.avail_in = fread(input, 1, CHUNK, in); + if (strm.avail_in < CHUNK && ferror(in)) { + ret = Z_ERRNO; + break; + } + strm.next_in = input; + } + unsigned got = strm.avail_out; + ret = inflate(&strm, Z_NO_FLUSH); + got -= strm.avail_out; + + // Update the appropriate count. + if (offset) + offset -= got; + else + left -= got; + + // If we're at the end of a gzip member and there's more to read, + // continue to the next gzip member. + if (ret == Z_STREAM_END && index->mode == GZIP) { + // Discard the gzip trailer. + unsigned drop = 8; // length of gzip trailer + if (strm.avail_in >= drop) { + strm.avail_in -= drop; + strm.next_in += drop; + } + else { + // Read and discard the remainder of the gzip trailer. + drop -= strm.avail_in; + strm.avail_in = 0; + do { + if (getc(in) == EOF) + // The input does not have a complete trailer. + return ferror(in) ? Z_ERRNO : Z_BUF_ERROR; + } while (--drop); + } + + if (strm.avail_in || ungetc(getc(in), in) != EOF) { + // There's more after the gzip trailer. Use inflate to skip the + // gzip header and resume the raw inflate there. + inflateReset2(&strm, GZIP); + do { + if (strm.avail_in == 0) { + strm.avail_in = fread(input, 1, CHUNK, in); + if (strm.avail_in < CHUNK && ferror(in)) { + ret = Z_ERRNO; + break; + } + strm.next_in = input; + } + strm.avail_out = WINSIZE; + strm.next_out = discard; + ret = inflate(&strm, Z_BLOCK); // stop at end of header + } while (ret == Z_OK && (strm.data_type & 0x80) == 0); + if (ret != Z_OK) + break; + inflateReset2(&strm, RAW); + } + } + + // Continue until we have the requested data, the deflate data has + // ended, or an error is encountered. + } while (ret == Z_OK && left); + inflateEnd(&strm); + + // Return the number of uncompressed bytes read into buf, or the error. + return ret == Z_OK || ret == Z_STREAM_END ? len - left : ret; +} + +#ifdef TEST + +#define SPAN 1048576L // desired distance between access points +#define LEN 16384 // number of bytes to extract + +// Demonstrate the use of deflate_index_build() and deflate_index_extract() by +// processing the file provided on the command line, and extracting LEN bytes +// from 2/3rds of the way through the uncompressed output, writing that to +// stdout. An offset can be provided as the second argument, in which case the +// data is extracted from there instead. +int main(int argc, char **argv) { + // Open the input file. + if (argc < 2 || argc > 3) { + fprintf(stderr, "usage: zran file.raw [offset]\n"); + return 1; + } + FILE *in = fopen(argv[1], "rb"); + if (in == NULL) { + fprintf(stderr, "zran: could not open %s for reading\n", argv[1]); + return 1; + } + + // Get optional offset. + off_t offset = -1; + if (argc == 3) { + char *end; + offset = strtoll(argv[2], &end, 10); + if (*end || offset < 0) { + fprintf(stderr, "zran: %s is not a valid offset\n", argv[2]); + return 1; + } + } + + // Build index. + struct deflate_index *index = NULL; + int len = deflate_index_build(in, SPAN, &index); + if (len < 0) { + fclose(in); + switch (len) { + case Z_MEM_ERROR: + fprintf(stderr, "zran: out of memory\n"); + break; + case Z_BUF_ERROR: + fprintf(stderr, "zran: %s ended prematurely\n", argv[1]); + break; + case Z_DATA_ERROR: + fprintf(stderr, "zran: compressed data error in %s\n", argv[1]); + break; + case Z_ERRNO: + fprintf(stderr, "zran: read error on %s\n", argv[1]); + break; + default: + fprintf(stderr, "zran: error %d while building index\n", len); + } + return 1; + } + fprintf(stderr, "zran: built index with %d access points\n", len); + + // Use index by reading some bytes from an arbitrary offset. + unsigned char buf[LEN]; + if (offset == -1) + offset = ((index->length + 1) << 1) / 3; + ptrdiff_t got = deflate_index_extract(in, index, offset, buf, LEN); + if (got < 0) + fprintf(stderr, "zran: extraction failed: %s error\n", + got == Z_MEM_ERROR ? "out of memory" : "input corrupted"); + else { + fwrite(buf, 1, got, stdout); + fprintf(stderr, "zran: extracted %ld bytes at %lld\n", got, offset); + } + + // Clean up and exit. + deflate_index_free(index); + fclose(in); + return 0; +} + +#endif diff --git a/src/zlib/zlib-1.3/examples/zran.h b/src/zlib/zlib-1.3/examples/zran.h new file mode 100644 index 000000000..ebf780d0c --- /dev/null +++ b/src/zlib/zlib-1.3/examples/zran.h @@ -0,0 +1,51 @@ +/* zran.h -- example of deflated stream indexing and random access + * Copyright (C) 2005, 2012, 2018, 2023 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + * Version 1.3 18 Feb 2023 Mark Adler */ + +#include +#include "zlib.h" + +// Access point. +typedef struct point { + off_t out; // offset in uncompressed data + off_t in; // offset in compressed file of first full byte + int bits; // 0, or number of bits (1-7) from byte at in-1 + unsigned char window[32768]; // preceding 32K of uncompressed data +} point_t; + +// Access point list. +struct deflate_index { + int have; // number of access points in list + int mode; // -15 for raw, 15 for zlib, or 31 for gzip + off_t length; // total length of uncompressed data + point_t *list; // allocated list of access points +}; + +// Make one pass through a zlib, gzip, or raw deflate compressed stream and +// build an index, with access points about every span bytes of uncompressed +// output. gzip files with multiple members are fully indexed. span should be +// chosen to balance the speed of random access against the memory requirements +// of the list, which is about 32K bytes per access point. The return value is +// the number of access points on success (>= 1), Z_MEM_ERROR for out of +// memory, Z_BUF_ERROR for a premature end of input, Z_DATA_ERROR for a format +// or verification error in the input file, or Z_ERRNO for a file read error. +// On success, *built points to the resulting index. +int deflate_index_build(FILE *in, off_t span, struct deflate_index **built); + +// Use the index to read len bytes from offset into buf. Return the number of +// bytes read or a negative error code. If data is requested past the end of +// the uncompressed data, then deflate_index_extract() will return a value less +// than len, indicating how much was actually read into buf. If given a valid +// index, this function should not return an error unless the file was modified +// somehow since the index was generated, given that deflate_index_build() had +// validated all of the input. If nevertheless there is a failure, Z_BUF_ERROR +// is returned if the compressed data ends prematurely, Z_DATA_ERROR if the +// deflate compressed data is not valid, Z_MEM_ERROR if out of memory, +// Z_STREAM_ERROR if the index is not valid, or Z_ERRNO if there is an error +// reading or seeking on the input file. +ptrdiff_t deflate_index_extract(FILE *in, struct deflate_index *index, + off_t offset, unsigned char *buf, size_t len); + +// Deallocate an index built by deflate_index_build(). +void deflate_index_free(struct deflate_index *index); diff --git a/src/zlib/zlib-1.2.13/gzclose.c b/src/zlib/zlib-1.3/gzclose.c similarity index 93% rename from src/zlib/zlib-1.2.13/gzclose.c rename to src/zlib/zlib-1.3/gzclose.c index caeb99a31..48d6a86f0 100644 --- a/src/zlib/zlib-1.2.13/gzclose.c +++ b/src/zlib/zlib-1.3/gzclose.c @@ -8,9 +8,7 @@ /* gzclose() is in a separate file so that it is linked in only if it is used. That way the other gzclose functions can be used instead to avoid linking in unneeded compression or decompression routines. */ -int ZEXPORT gzclose(file) - gzFile file; -{ +int ZEXPORT gzclose(gzFile file) { #ifndef NO_GZCOMPRESS gz_statep state; diff --git a/src/zlib/zlib-1.2.13/gzguts.h b/src/zlib/zlib-1.3/gzguts.h similarity index 91% rename from src/zlib/zlib-1.2.13/gzguts.h rename to src/zlib/zlib-1.3/gzguts.h index 57faf3716..f9375047e 100644 --- a/src/zlib/zlib-1.2.13/gzguts.h +++ b/src/zlib/zlib-1.3/gzguts.h @@ -7,9 +7,8 @@ # ifndef _LARGEFILE_SOURCE # define _LARGEFILE_SOURCE 1 # endif -# ifdef _FILE_OFFSET_BITS -# undef _FILE_OFFSET_BITS -# endif +# undef _FILE_OFFSET_BITS +# undef _TIME_BITS #endif #ifdef HAVE_HIDDEN @@ -119,8 +118,8 @@ /* gz* functions always use library allocation functions */ #ifndef STDC - extern voidp malloc OF((uInt size)); - extern void free OF((voidpf ptr)); + extern voidp malloc(uInt size); + extern void free(voidpf ptr); #endif /* get errno and strerror definition */ @@ -138,10 +137,10 @@ /* provide prototypes for these when building zlib without LFS */ #if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0 - ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *)); - ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int)); - ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile)); - ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile)); + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); + ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); #endif /* default memLevel */ @@ -203,9 +202,9 @@ typedef struct { typedef gz_state FAR *gz_statep; /* shared functions */ -void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *)); +void ZLIB_INTERNAL gz_error(gz_statep, int, const char *); #if defined UNDER_CE -char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error)); +char ZLIB_INTERNAL *gz_strwinerror(DWORD error); #endif /* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t @@ -214,6 +213,6 @@ char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error)); #ifdef INT_MAX # define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX) #else -unsigned ZLIB_INTERNAL gz_intmax OF((void)); +unsigned ZLIB_INTERNAL gz_intmax(void); # define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) #endif diff --git a/src/zlib/zlib-1.2.13/gzlib.c b/src/zlib/zlib-1.3/gzlib.c similarity index 90% rename from src/zlib/zlib-1.2.13/gzlib.c rename to src/zlib/zlib-1.3/gzlib.c index 55da46a45..29fc4486f 100644 --- a/src/zlib/zlib-1.2.13/gzlib.c +++ b/src/zlib/zlib-1.3/gzlib.c @@ -15,10 +15,6 @@ #endif #endif -/* Local functions */ -local void gz_reset OF((gz_statep)); -local gzFile gz_open OF((const void *, int, const char *)); - #if defined UNDER_CE /* Map the Windows error number in ERROR to a locale-dependent error message @@ -30,9 +26,7 @@ local gzFile gz_open OF((const void *, int, const char *)); The gz_strwinerror function does not change the current setting of GetLastError. */ -char ZLIB_INTERNAL *gz_strwinerror(error) - DWORD error; -{ +char ZLIB_INTERNAL *gz_strwinerror(DWORD error) { static char buf[1024]; wchar_t *msgbuf; @@ -72,9 +66,7 @@ char ZLIB_INTERNAL *gz_strwinerror(error) #endif /* UNDER_CE */ /* Reset gzip file state */ -local void gz_reset(state) - gz_statep state; -{ +local void gz_reset(gz_statep state) { state->x.have = 0; /* no output data available */ if (state->mode == GZ_READ) { /* for reading ... */ state->eof = 0; /* not at end of file */ @@ -90,11 +82,7 @@ local void gz_reset(state) } /* Open a gzip file either by name or file descriptor. */ -local gzFile gz_open(path, fd, mode) - const void *path; - int fd; - const char *mode; -{ +local gzFile gz_open(const void *path, int fd, const char *mode) { gz_statep state; z_size_t len; int oflag; @@ -269,26 +257,17 @@ local gzFile gz_open(path, fd, mode) } /* -- see zlib.h -- */ -gzFile ZEXPORT gzopen(path, mode) - const char *path; - const char *mode; -{ +gzFile ZEXPORT gzopen(const char *path, const char *mode) { return gz_open(path, -1, mode); } /* -- see zlib.h -- */ -gzFile ZEXPORT gzopen64(path, mode) - const char *path; - const char *mode; -{ +gzFile ZEXPORT gzopen64(const char *path, const char *mode) { return gz_open(path, -1, mode); } /* -- see zlib.h -- */ -gzFile ZEXPORT gzdopen(fd, mode) - int fd; - const char *mode; -{ +gzFile ZEXPORT gzdopen(int fd, const char *mode) { char *path; /* identifier for error messages */ gzFile gz; @@ -306,19 +285,13 @@ gzFile ZEXPORT gzdopen(fd, mode) /* -- see zlib.h -- */ #ifdef WIDECHAR -gzFile ZEXPORT gzopen_w(path, mode) - const wchar_t *path; - const char *mode; -{ +gzFile ZEXPORT gzopen_w(const wchar_t *path, const char *mode) { return gz_open(path, -2, mode); } #endif /* -- see zlib.h -- */ -int ZEXPORT gzbuffer(file, size) - gzFile file; - unsigned size; -{ +int ZEXPORT gzbuffer(gzFile file, unsigned size) { gz_statep state; /* get internal structure and check integrity */ @@ -335,16 +308,14 @@ int ZEXPORT gzbuffer(file, size) /* check and set requested size */ if ((size << 1) < size) return -1; /* need to be able to double it */ - if (size < 2) - size = 2; /* need two bytes to check magic header */ + if (size < 8) + size = 8; /* needed to behave well with flushing */ state->want = size; return 0; } /* -- see zlib.h -- */ -int ZEXPORT gzrewind(file) - gzFile file; -{ +int ZEXPORT gzrewind(gzFile file) { gz_statep state; /* get internal structure */ @@ -365,11 +336,7 @@ int ZEXPORT gzrewind(file) } /* -- see zlib.h -- */ -z_off64_t ZEXPORT gzseek64(file, offset, whence) - gzFile file; - z_off64_t offset; - int whence; -{ +z_off64_t ZEXPORT gzseek64(gzFile file, z_off64_t offset, int whence) { unsigned n; z_off64_t ret; gz_statep state; @@ -442,11 +409,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, whence) } /* -- see zlib.h -- */ -z_off_t ZEXPORT gzseek(file, offset, whence) - gzFile file; - z_off_t offset; - int whence; -{ +z_off_t ZEXPORT gzseek(gzFile file, z_off_t offset, int whence) { z_off64_t ret; ret = gzseek64(file, (z_off64_t)offset, whence); @@ -454,9 +417,7 @@ z_off_t ZEXPORT gzseek(file, offset, whence) } /* -- see zlib.h -- */ -z_off64_t ZEXPORT gztell64(file) - gzFile file; -{ +z_off64_t ZEXPORT gztell64(gzFile file) { gz_statep state; /* get internal structure and check integrity */ @@ -471,9 +432,7 @@ z_off64_t ZEXPORT gztell64(file) } /* -- see zlib.h -- */ -z_off_t ZEXPORT gztell(file) - gzFile file; -{ +z_off_t ZEXPORT gztell(gzFile file) { z_off64_t ret; ret = gztell64(file); @@ -481,9 +440,7 @@ z_off_t ZEXPORT gztell(file) } /* -- see zlib.h -- */ -z_off64_t ZEXPORT gzoffset64(file) - gzFile file; -{ +z_off64_t ZEXPORT gzoffset64(gzFile file) { z_off64_t offset; gz_statep state; @@ -504,9 +461,7 @@ z_off64_t ZEXPORT gzoffset64(file) } /* -- see zlib.h -- */ -z_off_t ZEXPORT gzoffset(file) - gzFile file; -{ +z_off_t ZEXPORT gzoffset(gzFile file) { z_off64_t ret; ret = gzoffset64(file); @@ -514,9 +469,7 @@ z_off_t ZEXPORT gzoffset(file) } /* -- see zlib.h -- */ -int ZEXPORT gzeof(file) - gzFile file; -{ +int ZEXPORT gzeof(gzFile file) { gz_statep state; /* get internal structure and check integrity */ @@ -531,10 +484,7 @@ int ZEXPORT gzeof(file) } /* -- see zlib.h -- */ -const char * ZEXPORT gzerror(file, errnum) - gzFile file; - int *errnum; -{ +const char * ZEXPORT gzerror(gzFile file, int *errnum) { gz_statep state; /* get internal structure and check integrity */ @@ -552,9 +502,7 @@ const char * ZEXPORT gzerror(file, errnum) } /* -- see zlib.h -- */ -void ZEXPORT gzclearerr(file) - gzFile file; -{ +void ZEXPORT gzclearerr(gzFile file) { gz_statep state; /* get internal structure and check integrity */ @@ -578,11 +526,7 @@ void ZEXPORT gzclearerr(file) memory). Simply save the error message as a static string. If there is an allocation failure constructing the error message, then convert the error to out of memory. */ -void ZLIB_INTERNAL gz_error(state, err, msg) - gz_statep state; - int err; - const char *msg; -{ +void ZLIB_INTERNAL gz_error(gz_statep state, int err, const char *msg) { /* free previously allocated message and clear */ if (state->msg != NULL) { if (state->err != Z_MEM_ERROR) @@ -624,8 +568,7 @@ void ZLIB_INTERNAL gz_error(state, err, msg) available) -- we need to do this to cover cases where 2's complement not used, since C standard permits 1's complement and sign-bit representations, otherwise we could just use ((unsigned)-1) >> 1 */ -unsigned ZLIB_INTERNAL gz_intmax() -{ +unsigned ZLIB_INTERNAL gz_intmax(void) { unsigned p, q; p = 1; diff --git a/src/zlib/zlib-1.2.13/gzread.c b/src/zlib/zlib-1.3/gzread.c similarity index 93% rename from src/zlib/zlib-1.2.13/gzread.c rename to src/zlib/zlib-1.3/gzread.c index dd7738159..4168cbc88 100644 --- a/src/zlib/zlib-1.2.13/gzread.c +++ b/src/zlib/zlib-1.3/gzread.c @@ -5,25 +5,12 @@ #include "gzguts.h" -/* Local functions */ -local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *)); -local int gz_avail OF((gz_statep)); -local int gz_look OF((gz_statep)); -local int gz_decomp OF((gz_statep)); -local int gz_fetch OF((gz_statep)); -local int gz_skip OF((gz_statep, z_off64_t)); -local z_size_t gz_read OF((gz_statep, voidp, z_size_t)); - /* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from state->fd, and update state->eof, state->err, and state->msg as appropriate. This function needs to loop on read(), since read() is not guaranteed to read the number of bytes requested, depending on the type of descriptor. */ -local int gz_load(state, buf, len, have) - gz_statep state; - unsigned char *buf; - unsigned len; - unsigned *have; -{ +local int gz_load(gz_statep state, unsigned char *buf, unsigned len, + unsigned *have) { int ret; unsigned get, max = ((unsigned)-1 >> 2) + 1; @@ -53,9 +40,7 @@ local int gz_load(state, buf, len, have) If strm->avail_in != 0, then the current data is moved to the beginning of the input buffer, and then the remainder of the buffer is loaded with the available data from the input file. */ -local int gz_avail(state) - gz_statep state; -{ +local int gz_avail(gz_statep state) { unsigned got; z_streamp strm = &(state->strm); @@ -88,9 +73,7 @@ local int gz_avail(state) case, all further file reads will be directly to either the output buffer or a user buffer. If decompressing, the inflate state will be initialized. gz_look() will return 0 on success or -1 on failure. */ -local int gz_look(state) - gz_statep state; -{ +local int gz_look(gz_statep state) { z_streamp strm = &(state->strm); /* allocate read buffers and inflate memory */ @@ -170,9 +153,7 @@ local int gz_look(state) data. If the gzip stream completes, state->how is reset to LOOK to look for the next gzip stream or raw data, once state->x.have is depleted. Returns 0 on success, -1 on failure. */ -local int gz_decomp(state) - gz_statep state; -{ +local int gz_decomp(gz_statep state) { int ret = Z_OK; unsigned had; z_streamp strm = &(state->strm); @@ -224,9 +205,7 @@ local int gz_decomp(state) looked for to determine whether to copy or decompress. Returns -1 on error, otherwise 0. gz_fetch() will leave state->how as COPY or GZIP unless the end of the input file has been reached and all data has been processed. */ -local int gz_fetch(state) - gz_statep state; -{ +local int gz_fetch(gz_statep state) { z_streamp strm = &(state->strm); do { @@ -254,10 +233,7 @@ local int gz_fetch(state) } /* Skip len uncompressed bytes of output. Return -1 on error, 0 on success. */ -local int gz_skip(state, len) - gz_statep state; - z_off64_t len; -{ +local int gz_skip(gz_statep state, z_off64_t len) { unsigned n; /* skip over len bytes or reach end-of-file, whichever comes first */ @@ -289,11 +265,7 @@ local int gz_skip(state, len) input. Return the number of bytes read. If zero is returned, either the end of file was reached, or there was an error. state->err must be consulted in that case to determine which. */ -local z_size_t gz_read(state, buf, len) - gz_statep state; - voidp buf; - z_size_t len; -{ +local z_size_t gz_read(gz_statep state, voidp buf, z_size_t len) { z_size_t got; unsigned n; @@ -370,11 +342,7 @@ local z_size_t gz_read(state, buf, len) } /* -- see zlib.h -- */ -int ZEXPORT gzread(file, buf, len) - gzFile file; - voidp buf; - unsigned len; -{ +int ZEXPORT gzread(gzFile file, voidp buf, unsigned len) { gz_statep state; /* get internal structure */ @@ -406,12 +374,7 @@ int ZEXPORT gzread(file, buf, len) } /* -- see zlib.h -- */ -z_size_t ZEXPORT gzfread(buf, size, nitems, file) - voidp buf; - z_size_t size; - z_size_t nitems; - gzFile file; -{ +z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems, gzFile file) { z_size_t len; gz_statep state; @@ -442,9 +405,7 @@ z_size_t ZEXPORT gzfread(buf, size, nitems, file) #else # undef gzgetc #endif -int ZEXPORT gzgetc(file) - gzFile file; -{ +int ZEXPORT gzgetc(gzFile file) { unsigned char buf[1]; gz_statep state; @@ -469,17 +430,12 @@ int ZEXPORT gzgetc(file) return gz_read(state, buf, 1) < 1 ? -1 : buf[0]; } -int ZEXPORT gzgetc_(file) -gzFile file; -{ +int ZEXPORT gzgetc_(gzFile file) { return gzgetc(file); } /* -- see zlib.h -- */ -int ZEXPORT gzungetc(c, file) - int c; - gzFile file; -{ +int ZEXPORT gzungetc(int c, gzFile file) { gz_statep state; /* get internal structure */ @@ -487,6 +443,10 @@ int ZEXPORT gzungetc(c, file) return -1; state = (gz_statep)file; + /* in case this was just opened, set up the input buffer */ + if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0) + (void)gz_look(state); + /* check that we're reading and that there's no (serious) error */ if (state->mode != GZ_READ || (state->err != Z_OK && state->err != Z_BUF_ERROR)) @@ -536,11 +496,7 @@ int ZEXPORT gzungetc(c, file) } /* -- see zlib.h -- */ -char * ZEXPORT gzgets(file, buf, len) - gzFile file; - char *buf; - int len; -{ +char * ZEXPORT gzgets(gzFile file, char *buf, int len) { unsigned left, n; char *str; unsigned char *eol; @@ -600,9 +556,7 @@ char * ZEXPORT gzgets(file, buf, len) } /* -- see zlib.h -- */ -int ZEXPORT gzdirect(file) - gzFile file; -{ +int ZEXPORT gzdirect(gzFile file) { gz_statep state; /* get internal structure */ @@ -620,9 +574,7 @@ int ZEXPORT gzdirect(file) } /* -- see zlib.h -- */ -int ZEXPORT gzclose_r(file) - gzFile file; -{ +int ZEXPORT gzclose_r(gzFile file) { int ret, err; gz_statep state; diff --git a/src/zlib/zlib-1.2.13/gzwrite.c b/src/zlib/zlib-1.3/gzwrite.c similarity index 92% rename from src/zlib/zlib-1.2.13/gzwrite.c rename to src/zlib/zlib-1.3/gzwrite.c index eb8a0e589..435b4621b 100644 --- a/src/zlib/zlib-1.2.13/gzwrite.c +++ b/src/zlib/zlib-1.3/gzwrite.c @@ -5,18 +5,10 @@ #include "gzguts.h" -/* Local functions */ -local int gz_init OF((gz_statep)); -local int gz_comp OF((gz_statep, int)); -local int gz_zero OF((gz_statep, z_off64_t)); -local z_size_t gz_write OF((gz_statep, voidpc, z_size_t)); - /* Initialize state for writing a gzip file. Mark initialization by setting state->size to non-zero. Return -1 on a memory allocation failure, or 0 on success. */ -local int gz_init(state) - gz_statep state; -{ +local int gz_init(gz_statep state) { int ret; z_streamp strm = &(state->strm); @@ -70,10 +62,7 @@ local int gz_init(state) deflate() flush value. If flush is Z_FINISH, then the deflate() state is reset to start a new gzip stream. If gz->direct is true, then simply write to the output file without compressing, and ignore flush. */ -local int gz_comp(state, flush) - gz_statep state; - int flush; -{ +local int gz_comp(gz_statep state, int flush) { int ret, writ; unsigned have, put, max = ((unsigned)-1 >> 2) + 1; z_streamp strm = &(state->strm); @@ -151,10 +140,7 @@ local int gz_comp(state, flush) /* Compress len zeros to output. Return -1 on a write error or memory allocation failure by gz_comp(), or 0 on success. */ -local int gz_zero(state, len) - gz_statep state; - z_off64_t len; -{ +local int gz_zero(gz_statep state, z_off64_t len) { int first; unsigned n; z_streamp strm = &(state->strm); @@ -184,11 +170,7 @@ local int gz_zero(state, len) /* Write len bytes from buf to file. Return the number of bytes written. If the returned value is less than len, then there was an error. */ -local z_size_t gz_write(state, buf, len) - gz_statep state; - voidpc buf; - z_size_t len; -{ +local z_size_t gz_write(gz_statep state, voidpc buf, z_size_t len) { z_size_t put = len; /* if len is zero, avoid unnecessary operations */ @@ -252,11 +234,7 @@ local z_size_t gz_write(state, buf, len) } /* -- see zlib.h -- */ -int ZEXPORT gzwrite(file, buf, len) - gzFile file; - voidpc buf; - unsigned len; -{ +int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len) { gz_statep state; /* get internal structure */ @@ -280,12 +258,8 @@ int ZEXPORT gzwrite(file, buf, len) } /* -- see zlib.h -- */ -z_size_t ZEXPORT gzfwrite(buf, size, nitems, file) - voidpc buf; - z_size_t size; - z_size_t nitems; - gzFile file; -{ +z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, z_size_t nitems, + gzFile file) { z_size_t len; gz_statep state; @@ -310,10 +284,7 @@ z_size_t ZEXPORT gzfwrite(buf, size, nitems, file) } /* -- see zlib.h -- */ -int ZEXPORT gzputc(file, c) - gzFile file; - int c; -{ +int ZEXPORT gzputc(gzFile file, int c) { unsigned have; unsigned char buf[1]; gz_statep state; @@ -358,10 +329,7 @@ int ZEXPORT gzputc(file, c) } /* -- see zlib.h -- */ -int ZEXPORT gzputs(file, s) - gzFile file; - const char *s; -{ +int ZEXPORT gzputs(gzFile file, const char *s) { z_size_t len, put; gz_statep state; @@ -388,8 +356,7 @@ int ZEXPORT gzputs(file, s) #include /* -- see zlib.h -- */ -int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) -{ +int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) { int len; unsigned left; char *next; @@ -460,8 +427,7 @@ int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) return len; } -int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) -{ +int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) { va_list va; int ret; @@ -474,13 +440,10 @@ int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) #else /* !STDC && !Z_HAVE_STDARG_H */ /* -- see zlib.h -- */ -int ZEXPORTVA gzprintf(file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, - a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) - gzFile file; - const char *format; - int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, - a11, a12, a13, a14, a15, a16, a17, a18, a19, a20; -{ +int ZEXPORTVA gzprintf(gzFile file, const char *format, int a1, int a2, int a3, + int a4, int a5, int a6, int a7, int a8, int a9, int a10, + int a11, int a12, int a13, int a14, int a15, int a16, + int a17, int a18, int a19, int a20) { unsigned len, left; char *next; gz_statep state; @@ -562,10 +525,7 @@ int ZEXPORTVA gzprintf(file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, #endif /* -- see zlib.h -- */ -int ZEXPORT gzflush(file, flush) - gzFile file; - int flush; -{ +int ZEXPORT gzflush(gzFile file, int flush) { gz_statep state; /* get internal structure */ @@ -594,11 +554,7 @@ int ZEXPORT gzflush(file, flush) } /* -- see zlib.h -- */ -int ZEXPORT gzsetparams(file, level, strategy) - gzFile file; - int level; - int strategy; -{ +int ZEXPORT gzsetparams(gzFile file, int level, int strategy) { gz_statep state; z_streamp strm; @@ -609,7 +565,7 @@ int ZEXPORT gzsetparams(file, level, strategy) strm = &(state->strm); /* check that we're writing and that there's no error */ - if (state->mode != GZ_WRITE || state->err != Z_OK) + if (state->mode != GZ_WRITE || state->err != Z_OK || state->direct) return Z_STREAM_ERROR; /* if no change is requested, then do nothing */ @@ -636,9 +592,7 @@ int ZEXPORT gzsetparams(file, level, strategy) } /* -- see zlib.h -- */ -int ZEXPORT gzclose_w(file) - gzFile file; -{ +int ZEXPORT gzclose_w(gzFile file) { int ret = Z_OK; gz_statep state; diff --git a/src/zlib/zlib-1.2.13/infback.c b/src/zlib/zlib-1.3/infback.c similarity index 97% rename from src/zlib/zlib-1.2.13/infback.c rename to src/zlib/zlib-1.3/infback.c index babeaf180..e7b25b307 100644 --- a/src/zlib/zlib-1.2.13/infback.c +++ b/src/zlib/zlib-1.3/infback.c @@ -15,9 +15,6 @@ #include "inflate.h" #include "inffast.h" -/* function prototypes */ -local void fixedtables OF((struct inflate_state FAR *state)); - /* strm provides memory allocation functions in zalloc and zfree, or Z_NULL to use the library memory allocation functions. @@ -25,13 +22,9 @@ local void fixedtables OF((struct inflate_state FAR *state)); windowBits is in the range 8..15, and window is a user-supplied window and output buffer that is 2**windowBits bytes. */ -int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size) -z_streamp strm; -int windowBits; -unsigned char FAR *window; -const char *version; -int stream_size; -{ +int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, + unsigned char FAR *window, const char *version, + int stream_size) { struct inflate_state FAR *state; if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || @@ -80,9 +73,7 @@ int stream_size; used for threaded applications, since the rewriting of the tables and virgin may not be thread-safe. */ -local void fixedtables(state) -struct inflate_state FAR *state; -{ +local void fixedtables(struct inflate_state FAR *state) { #ifdef BUILDFIXED static int virgin = 1; static code *lenfix, *distfix; @@ -248,13 +239,8 @@ struct inflate_state FAR *state; inflateBack() can also return Z_STREAM_ERROR if the input parameters are not correct, i.e. strm is Z_NULL or the state was not initialized. */ -int ZEXPORT inflateBack(strm, in, in_desc, out, out_desc) -z_streamp strm; -in_func in; -void FAR *in_desc; -out_func out; -void FAR *out_desc; -{ +int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc) { struct inflate_state FAR *state; z_const unsigned char FAR *next; /* next input */ unsigned char FAR *put; /* next output */ @@ -632,9 +618,7 @@ void FAR *out_desc; return ret; } -int ZEXPORT inflateBackEnd(strm) -z_streamp strm; -{ +int ZEXPORT inflateBackEnd(z_streamp strm) { if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) return Z_STREAM_ERROR; ZFREE(strm, strm->state); diff --git a/src/zlib/zlib-1.2.13/inffast.c b/src/zlib/zlib-1.3/inffast.c similarity index 98% rename from src/zlib/zlib-1.2.13/inffast.c rename to src/zlib/zlib-1.3/inffast.c index 1fec7f363..9354676e7 100644 --- a/src/zlib/zlib-1.2.13/inffast.c +++ b/src/zlib/zlib-1.3/inffast.c @@ -47,10 +47,7 @@ requires strm->avail_out >= 258 for each loop to avoid checking for output space. */ -void ZLIB_INTERNAL inflate_fast(strm, start) -z_streamp strm; -unsigned start; /* inflate()'s starting value for strm->avail_out */ -{ +void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) { struct inflate_state FAR *state; z_const unsigned char FAR *in; /* local strm->next_in */ z_const unsigned char FAR *last; /* have enough input while in < last */ diff --git a/src/zlib/zlib-1.2.13/inffast.h b/src/zlib/zlib-1.3/inffast.h similarity index 83% rename from src/zlib/zlib-1.2.13/inffast.h rename to src/zlib/zlib-1.3/inffast.h index e5c1aa4ca..49c6d156c 100644 --- a/src/zlib/zlib-1.2.13/inffast.h +++ b/src/zlib/zlib-1.3/inffast.h @@ -8,4 +8,4 @@ subject to change. Applications should only use zlib.h. */ -void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start)); +void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start); diff --git a/src/zlib/zlib-1.2.13/inffixed.h b/src/zlib/zlib-1.3/inffixed.h similarity index 100% rename from src/zlib/zlib-1.2.13/inffixed.h rename to src/zlib/zlib-1.3/inffixed.h diff --git a/src/zlib/zlib-1.2.13/inflate.c b/src/zlib/zlib-1.3/inflate.c similarity index 96% rename from src/zlib/zlib-1.2.13/inflate.c rename to src/zlib/zlib-1.3/inflate.c index 8acbef44e..b0757a9b2 100644 --- a/src/zlib/zlib-1.2.13/inflate.c +++ b/src/zlib/zlib-1.3/inflate.c @@ -91,20 +91,7 @@ # endif #endif -/* function prototypes */ -local int inflateStateCheck OF((z_streamp strm)); -local void fixedtables OF((struct inflate_state FAR *state)); -local int updatewindow OF((z_streamp strm, const unsigned char FAR *end, - unsigned copy)); -#ifdef BUILDFIXED - void makefixed OF((void)); -#endif -local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf, - unsigned len)); - -local int inflateStateCheck(strm) -z_streamp strm; -{ +local int inflateStateCheck(z_streamp strm) { struct inflate_state FAR *state; if (strm == Z_NULL || strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) @@ -116,9 +103,7 @@ z_streamp strm; return 0; } -int ZEXPORT inflateResetKeep(strm) -z_streamp strm; -{ +int ZEXPORT inflateResetKeep(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -142,9 +127,7 @@ z_streamp strm; return Z_OK; } -int ZEXPORT inflateReset(strm) -z_streamp strm; -{ +int ZEXPORT inflateReset(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -155,10 +138,7 @@ z_streamp strm; return inflateResetKeep(strm); } -int ZEXPORT inflateReset2(strm, windowBits) -z_streamp strm; -int windowBits; -{ +int ZEXPORT inflateReset2(z_streamp strm, int windowBits) { int wrap; struct inflate_state FAR *state; @@ -195,12 +175,8 @@ int windowBits; return inflateReset(strm); } -int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size) -z_streamp strm; -int windowBits; -const char *version; -int stream_size; -{ +int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, + const char *version, int stream_size) { int ret; struct inflate_state FAR *state; @@ -239,22 +215,17 @@ int stream_size; return ret; } -int ZEXPORT inflateInit_(strm, version, stream_size) -z_streamp strm; -const char *version; -int stream_size; -{ +int ZEXPORT inflateInit_(z_streamp strm, const char *version, + int stream_size) { return inflateInit2_(strm, DEF_WBITS, version, stream_size); } -int ZEXPORT inflatePrime(strm, bits, value) -z_streamp strm; -int bits; -int value; -{ +int ZEXPORT inflatePrime(z_streamp strm, int bits, int value) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + if (bits == 0) + return Z_OK; state = (struct inflate_state FAR *)strm->state; if (bits < 0) { state->hold = 0; @@ -278,9 +249,7 @@ int value; used for threaded applications, since the rewriting of the tables and virgin may not be thread-safe. */ -local void fixedtables(state) -struct inflate_state FAR *state; -{ +local void fixedtables(struct inflate_state FAR *state) { #ifdef BUILDFIXED static int virgin = 1; static code *lenfix, *distfix; @@ -342,7 +311,7 @@ struct inflate_state FAR *state; a.out > inffixed.h */ -void makefixed() +void makefixed(void) { unsigned low, size; struct inflate_state state; @@ -396,11 +365,7 @@ void makefixed() output will fall in the output data, making match copies simpler and faster. The advantage may be dependent on the size of the processor's data caches. */ -local int updatewindow(strm, end, copy) -z_streamp strm; -const Bytef *end; -unsigned copy; -{ +local int updatewindow(z_streamp strm, const Bytef *end, unsigned copy) { struct inflate_state FAR *state; unsigned dist; @@ -622,10 +587,7 @@ unsigned copy; will return Z_BUF_ERROR if it has not reached the end of the stream. */ -int ZEXPORT inflate(strm, flush) -z_streamp strm; -int flush; -{ +int ZEXPORT inflate(z_streamp strm, int flush) { struct inflate_state FAR *state; z_const unsigned char FAR *next; /* next input */ unsigned char FAR *put; /* next output */ @@ -1301,9 +1263,7 @@ int flush; return ret; } -int ZEXPORT inflateEnd(strm) -z_streamp strm; -{ +int ZEXPORT inflateEnd(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -1315,11 +1275,8 @@ z_streamp strm; return Z_OK; } -int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength) -z_streamp strm; -Bytef *dictionary; -uInt *dictLength; -{ +int ZEXPORT inflateGetDictionary(z_streamp strm, Bytef *dictionary, + uInt *dictLength) { struct inflate_state FAR *state; /* check state */ @@ -1338,11 +1295,8 @@ uInt *dictLength; return Z_OK; } -int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength) -z_streamp strm; -const Bytef *dictionary; -uInt dictLength; -{ +int ZEXPORT inflateSetDictionary(z_streamp strm, const Bytef *dictionary, + uInt dictLength) { struct inflate_state FAR *state; unsigned long dictid; int ret; @@ -1373,10 +1327,7 @@ uInt dictLength; return Z_OK; } -int ZEXPORT inflateGetHeader(strm, head) -z_streamp strm; -gz_headerp head; -{ +int ZEXPORT inflateGetHeader(z_streamp strm, gz_headerp head) { struct inflate_state FAR *state; /* check state */ @@ -1401,11 +1352,8 @@ gz_headerp head; called again with more data and the *have state. *have is initialized to zero for the first call. */ -local unsigned syncsearch(have, buf, len) -unsigned FAR *have; -const unsigned char FAR *buf; -unsigned len; -{ +local unsigned syncsearch(unsigned FAR *have, const unsigned char FAR *buf, + unsigned len) { unsigned got; unsigned next; @@ -1424,9 +1372,7 @@ unsigned len; return next; } -int ZEXPORT inflateSync(strm) -z_streamp strm; -{ +int ZEXPORT inflateSync(z_streamp strm) { unsigned len; /* number of bytes to look at or looked at */ int flags; /* temporary to save header status */ unsigned long in, out; /* temporary to save total_in and total_out */ @@ -1482,9 +1428,7 @@ z_streamp strm; block. When decompressing, PPP checks that at the end of input packet, inflate is waiting for these length bytes. */ -int ZEXPORT inflateSyncPoint(strm) -z_streamp strm; -{ +int ZEXPORT inflateSyncPoint(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -1492,10 +1436,7 @@ z_streamp strm; return state->mode == STORED && state->bits == 0; } -int ZEXPORT inflateCopy(dest, source) -z_streamp dest; -z_streamp source; -{ +int ZEXPORT inflateCopy(z_streamp dest, z_streamp source) { struct inflate_state FAR *state; struct inflate_state FAR *copy; unsigned char FAR *window; @@ -1539,10 +1480,7 @@ z_streamp source; return Z_OK; } -int ZEXPORT inflateUndermine(strm, subvert) -z_streamp strm; -int subvert; -{ +int ZEXPORT inflateUndermine(z_streamp strm, int subvert) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -1557,10 +1495,7 @@ int subvert; #endif } -int ZEXPORT inflateValidate(strm, check) -z_streamp strm; -int check; -{ +int ZEXPORT inflateValidate(z_streamp strm, int check) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return Z_STREAM_ERROR; @@ -1572,9 +1507,7 @@ int check; return Z_OK; } -long ZEXPORT inflateMark(strm) -z_streamp strm; -{ +long ZEXPORT inflateMark(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) @@ -1585,9 +1518,7 @@ z_streamp strm; (state->mode == MATCH ? state->was - state->length : 0)); } -unsigned long ZEXPORT inflateCodesUsed(strm) -z_streamp strm; -{ +unsigned long ZEXPORT inflateCodesUsed(z_streamp strm) { struct inflate_state FAR *state; if (inflateStateCheck(strm)) return (unsigned long)-1; state = (struct inflate_state FAR *)strm->state; diff --git a/src/zlib/zlib-1.2.13/inflate.h b/src/zlib/zlib-1.3/inflate.h similarity index 100% rename from src/zlib/zlib-1.2.13/inflate.h rename to src/zlib/zlib-1.3/inflate.h diff --git a/src/zlib/zlib-1.2.13/inftrees.c b/src/zlib/zlib-1.3/inftrees.c similarity index 97% rename from src/zlib/zlib-1.2.13/inftrees.c rename to src/zlib/zlib-1.3/inftrees.c index 57d2793be..8a208c2da 100644 --- a/src/zlib/zlib-1.2.13/inftrees.c +++ b/src/zlib/zlib-1.3/inftrees.c @@ -1,5 +1,5 @@ /* inftrees.c -- generate Huffman trees for efficient decoding - * Copyright (C) 1995-2022 Mark Adler + * Copyright (C) 1995-2023 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -9,7 +9,7 @@ #define MAXBITS 15 const char inflate_copyright[] = - " inflate 1.2.13 Copyright 1995-2022 Mark Adler "; + " inflate 1.3 Copyright 1995-2023 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -29,14 +29,9 @@ const char inflate_copyright[] = table index bits. It will differ if the request is greater than the longest code or if it is less than the shortest code. */ -int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work) -codetype type; -unsigned short FAR *lens; -unsigned codes; -code FAR * FAR *table; -unsigned FAR *bits; -unsigned short FAR *work; -{ +int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work) { unsigned len; /* a code's length in bits */ unsigned sym; /* index of code symbols */ unsigned min, max; /* minimum and maximum code lengths */ @@ -62,7 +57,7 @@ unsigned short FAR *work; 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 194, 65}; + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 198, 203}; static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, diff --git a/src/zlib/zlib-1.2.13/inftrees.h b/src/zlib/zlib-1.3/inftrees.h similarity index 92% rename from src/zlib/zlib-1.2.13/inftrees.h rename to src/zlib/zlib-1.3/inftrees.h index f53665311..a10712d8c 100644 --- a/src/zlib/zlib-1.2.13/inftrees.h +++ b/src/zlib/zlib-1.3/inftrees.h @@ -57,6 +57,6 @@ typedef enum { DISTS } codetype; -int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens, - unsigned codes, code FAR * FAR *table, - unsigned FAR *bits, unsigned short FAR *work)); +int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work); diff --git a/src/zlib/zlib-1.2.13/make_vms.com b/src/zlib/zlib-1.3/make_vms.com similarity index 100% rename from src/zlib/zlib-1.2.13/make_vms.com rename to src/zlib/zlib-1.3/make_vms.com diff --git a/src/zlib/zlib-1.2.13/msdos/Makefile.bor b/src/zlib/zlib-1.3/msdos/Makefile.bor similarity index 100% rename from src/zlib/zlib-1.2.13/msdos/Makefile.bor rename to src/zlib/zlib-1.3/msdos/Makefile.bor diff --git a/src/zlib/zlib-1.2.13/msdos/Makefile.dj2 b/src/zlib/zlib-1.3/msdos/Makefile.dj2 similarity index 100% rename from src/zlib/zlib-1.2.13/msdos/Makefile.dj2 rename to src/zlib/zlib-1.3/msdos/Makefile.dj2 diff --git a/src/zlib/zlib-1.2.13/msdos/Makefile.emx b/src/zlib/zlib-1.3/msdos/Makefile.emx similarity index 100% rename from src/zlib/zlib-1.2.13/msdos/Makefile.emx rename to src/zlib/zlib-1.3/msdos/Makefile.emx diff --git a/src/zlib/zlib-1.2.13/msdos/Makefile.msc b/src/zlib/zlib-1.3/msdos/Makefile.msc similarity index 100% rename from src/zlib/zlib-1.2.13/msdos/Makefile.msc rename to src/zlib/zlib-1.3/msdos/Makefile.msc diff --git a/src/zlib/zlib-1.2.13/msdos/Makefile.tc b/src/zlib/zlib-1.3/msdos/Makefile.tc similarity index 100% rename from src/zlib/zlib-1.2.13/msdos/Makefile.tc rename to src/zlib/zlib-1.3/msdos/Makefile.tc diff --git a/src/zlib/zlib-1.2.13/nintendods/Makefile b/src/zlib/zlib-1.3/nintendods/Makefile similarity index 100% rename from src/zlib/zlib-1.2.13/nintendods/Makefile rename to src/zlib/zlib-1.3/nintendods/Makefile diff --git a/src/zlib/zlib-1.2.13/nintendods/README b/src/zlib/zlib-1.3/nintendods/README similarity index 100% rename from src/zlib/zlib-1.2.13/nintendods/README rename to src/zlib/zlib-1.3/nintendods/README diff --git a/src/zlib/zlib-1.2.13/old/Makefile.emx b/src/zlib/zlib-1.3/old/Makefile.emx similarity index 100% rename from src/zlib/zlib-1.2.13/old/Makefile.emx rename to src/zlib/zlib-1.3/old/Makefile.emx diff --git a/src/zlib/zlib-1.2.13/old/Makefile.riscos b/src/zlib/zlib-1.3/old/Makefile.riscos similarity index 100% rename from src/zlib/zlib-1.2.13/old/Makefile.riscos rename to src/zlib/zlib-1.3/old/Makefile.riscos diff --git a/src/zlib/zlib-1.2.13/old/README b/src/zlib/zlib-1.3/old/README similarity index 100% rename from src/zlib/zlib-1.2.13/old/README rename to src/zlib/zlib-1.3/old/README diff --git a/src/zlib/zlib-1.2.13/old/descrip.mms b/src/zlib/zlib-1.3/old/descrip.mms similarity index 100% rename from src/zlib/zlib-1.2.13/old/descrip.mms rename to src/zlib/zlib-1.3/old/descrip.mms diff --git a/src/zlib/zlib-1.2.13/old/os2/Makefile.os2 b/src/zlib/zlib-1.3/old/os2/Makefile.os2 similarity index 100% rename from src/zlib/zlib-1.2.13/old/os2/Makefile.os2 rename to src/zlib/zlib-1.3/old/os2/Makefile.os2 diff --git a/src/zlib/zlib-1.2.13/old/os2/zlib.def b/src/zlib/zlib-1.3/old/os2/zlib.def similarity index 100% rename from src/zlib/zlib-1.2.13/old/os2/zlib.def rename to src/zlib/zlib-1.3/old/os2/zlib.def diff --git a/src/zlib/zlib-1.2.13/old/visual-basic.txt b/src/zlib/zlib-1.3/old/visual-basic.txt similarity index 100% rename from src/zlib/zlib-1.2.13/old/visual-basic.txt rename to src/zlib/zlib-1.3/old/visual-basic.txt diff --git a/src/zlib/zlib-1.2.13/os400/README400 b/src/zlib/zlib-1.3/os400/README400 similarity index 96% rename from src/zlib/zlib-1.2.13/os400/README400 rename to src/zlib/zlib-1.3/os400/README400 index c06fa8459..6dd41aa65 100644 --- a/src/zlib/zlib-1.2.13/os400/README400 +++ b/src/zlib/zlib-1.3/os400/README400 @@ -1,4 +1,4 @@ - ZLIB version 1.2.13 for OS/400 installation instructions + ZLIB version 1.3.0 for OS/400 installation instructions 1) Download and unpack the zlib tarball to some IFS directory. (i.e.: /path/to/the/zlib/ifs/source/directory) diff --git a/src/zlib/zlib-1.2.13/os400/bndsrc b/src/zlib/zlib-1.3/os400/bndsrc similarity index 100% rename from src/zlib/zlib-1.2.13/os400/bndsrc rename to src/zlib/zlib-1.3/os400/bndsrc diff --git a/src/zlib/zlib-1.2.13/os400/make.sh b/src/zlib/zlib-1.3/os400/make.sh similarity index 100% rename from src/zlib/zlib-1.2.13/os400/make.sh rename to src/zlib/zlib-1.3/os400/make.sh diff --git a/src/zlib/zlib-1.2.13/os400/zlib.inc b/src/zlib/zlib-1.3/os400/zlib.inc similarity index 99% rename from src/zlib/zlib-1.2.13/os400/zlib.inc rename to src/zlib/zlib-1.3/os400/zlib.inc index c273c863c..0d9e2f209 100644 --- a/src/zlib/zlib-1.2.13/os400/zlib.inc +++ b/src/zlib/zlib-1.3/os400/zlib.inc @@ -1,7 +1,7 @@ * ZLIB.INC - Interface to the general purpose compression library * * ILE RPG400 version by Patrick Monnerat, DATASPHERE. - * Version 1.2.13 + * Version 1.3.0 * * * WARNING: @@ -22,12 +22,12 @@ * * Versioning information. * - D ZLIB_VERSION C '1.2.13' + D ZLIB_VERSION C '1.3.0' D ZLIB_VERNUM C X'12a0' D ZLIB_VER_MAJOR C 1 - D ZLIB_VER_MINOR C 2 + D ZLIB_VER_MINOR C 3 D ZLIB_VER_REVISION... - D C 13 + D C 0 D ZLIB_VER_SUBREVISION... D C 0 * diff --git a/src/zlib/zlib-1.2.13/qnx/package.qpg b/src/zlib/zlib-1.3/qnx/package.qpg similarity index 94% rename from src/zlib/zlib-1.2.13/qnx/package.qpg rename to src/zlib/zlib-1.3/qnx/package.qpg index ba2f1a2d6..d882af2bf 100644 --- a/src/zlib/zlib-1.2.13/qnx/package.qpg +++ b/src/zlib/zlib-1.3/qnx/package.qpg @@ -25,10 +25,10 @@ - - - - + + + + @@ -63,7 +63,7 @@ - 1.2.13 + 1.3.0 Medium Stable diff --git a/src/zlib/zlib-1.2.13/test/example.c b/src/zlib/zlib-1.3/test/example.c similarity index 84% rename from src/zlib/zlib-1.2.13/test/example.c rename to src/zlib/zlib-1.3/test/example.c index 1470bc842..582a17a3c 100644 --- a/src/zlib/zlib-1.2.13/test/example.c +++ b/src/zlib/zlib-1.3/test/example.c @@ -34,37 +34,14 @@ static z_const char hello[] = "hello, hello!"; static const char dictionary[] = "hello"; static uLong dictId; /* Adler32 value of the dictionary */ -void test_deflate OF((Byte *compr, uLong comprLen)); -void test_inflate OF((Byte *compr, uLong comprLen, - Byte *uncompr, uLong uncomprLen)); -void test_large_deflate OF((Byte *compr, uLong comprLen, - Byte *uncompr, uLong uncomprLen)); -void test_large_inflate OF((Byte *compr, uLong comprLen, - Byte *uncompr, uLong uncomprLen)); -void test_flush OF((Byte *compr, uLong *comprLen)); -void test_sync OF((Byte *compr, uLong comprLen, - Byte *uncompr, uLong uncomprLen)); -void test_dict_deflate OF((Byte *compr, uLong comprLen)); -void test_dict_inflate OF((Byte *compr, uLong comprLen, - Byte *uncompr, uLong uncomprLen)); -int main OF((int argc, char *argv[])); - - #ifdef Z_SOLO -void *myalloc OF((void *, unsigned, unsigned)); -void myfree OF((void *, void *)); - -void *myalloc(q, n, m) - void *q; - unsigned n, m; -{ +void *myalloc(void *q, unsigned n, unsigned m) { (void)q; return calloc(n, m); } -void myfree(void *q, void *p) -{ +void myfree(void *q, void *p) { (void)q; free(p); } @@ -77,18 +54,11 @@ static free_func zfree = myfree; static alloc_func zalloc = (alloc_func)0; static free_func zfree = (free_func)0; -void test_compress OF((Byte *compr, uLong comprLen, - Byte *uncompr, uLong uncomprLen)); -void test_gzio OF((const char *fname, - Byte *uncompr, uLong uncomprLen)); - /* =========================================================================== * Test compress() and uncompress() */ -void test_compress(compr, comprLen, uncompr, uncomprLen) - Byte *compr, *uncompr; - uLong comprLen, uncomprLen; -{ +void test_compress(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { int err; uLong len = (uLong)strlen(hello)+1; @@ -111,11 +81,7 @@ void test_compress(compr, comprLen, uncompr, uncomprLen) /* =========================================================================== * Test read/write of .gz files */ -void test_gzio(fname, uncompr, uncomprLen) - const char *fname; /* compressed file name */ - Byte *uncompr; - uLong uncomprLen; -{ +void test_gzio(const char *fname, Byte *uncompr, uLong uncomprLen) { #ifdef NO_GZCOMPRESS fprintf(stderr, "NO_GZCOMPRESS -- gz* functions cannot compress\n"); #else @@ -197,10 +163,7 @@ void test_gzio(fname, uncompr, uncomprLen) /* =========================================================================== * Test deflate() with small buffers */ -void test_deflate(compr, comprLen) - Byte *compr; - uLong comprLen; -{ +void test_deflate(Byte *compr, uLong comprLen) { z_stream c_stream; /* compression stream */ int err; uLong len = (uLong)strlen(hello)+1; @@ -235,10 +198,8 @@ void test_deflate(compr, comprLen) /* =========================================================================== * Test inflate() with small buffers */ -void test_inflate(compr, comprLen, uncompr, uncomprLen) - Byte *compr, *uncompr; - uLong comprLen, uncomprLen; -{ +void test_inflate(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { int err; z_stream d_stream; /* decompression stream */ @@ -276,10 +237,8 @@ void test_inflate(compr, comprLen, uncompr, uncomprLen) /* =========================================================================== * Test deflate() with large buffers and dynamic change of compression level */ -void test_large_deflate(compr, comprLen, uncompr, uncomprLen) - Byte *compr, *uncompr; - uLong comprLen, uncomprLen; -{ +void test_large_deflate(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { z_stream c_stream; /* compression stream */ int err; @@ -308,7 +267,7 @@ void test_large_deflate(compr, comprLen, uncompr, uncomprLen) /* Feed in already compressed data and switch to no compression: */ deflateParams(&c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY); c_stream.next_in = compr; - c_stream.avail_in = (uInt)comprLen/2; + c_stream.avail_in = (uInt)uncomprLen/2; err = deflate(&c_stream, Z_NO_FLUSH); CHECK_ERR(err, "deflate"); @@ -331,10 +290,8 @@ void test_large_deflate(compr, comprLen, uncompr, uncomprLen) /* =========================================================================== * Test inflate() with large buffers */ -void test_large_inflate(compr, comprLen, uncompr, uncomprLen) - Byte *compr, *uncompr; - uLong comprLen, uncomprLen; -{ +void test_large_inflate(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { int err; z_stream d_stream; /* decompression stream */ @@ -361,7 +318,7 @@ void test_large_inflate(compr, comprLen, uncompr, uncomprLen) err = inflateEnd(&d_stream); CHECK_ERR(err, "inflateEnd"); - if (d_stream.total_out != 2*uncomprLen + comprLen/2) { + if (d_stream.total_out != 2*uncomprLen + uncomprLen/2) { fprintf(stderr, "bad large inflate: %ld\n", d_stream.total_out); exit(1); } else { @@ -372,10 +329,7 @@ void test_large_inflate(compr, comprLen, uncompr, uncomprLen) /* =========================================================================== * Test deflate() with full flush */ -void test_flush(compr, comprLen) - Byte *compr; - uLong *comprLen; -{ +void test_flush(Byte *compr, uLong *comprLen) { z_stream c_stream; /* compression stream */ int err; uInt len = (uInt)strlen(hello)+1; @@ -410,10 +364,7 @@ void test_flush(compr, comprLen) /* =========================================================================== * Test inflateSync() */ -void test_sync(compr, comprLen, uncompr, uncomprLen) - Byte *compr, *uncompr; - uLong comprLen, uncomprLen; -{ +void test_sync(Byte *compr, uLong comprLen, Byte *uncompr, uLong uncomprLen) { int err; z_stream d_stream; /* decompression stream */ @@ -453,10 +404,7 @@ void test_sync(compr, comprLen, uncompr, uncomprLen) /* =========================================================================== * Test deflate() with preset dictionary */ -void test_dict_deflate(compr, comprLen) - Byte *compr; - uLong comprLen; -{ +void test_dict_deflate(Byte *compr, uLong comprLen) { z_stream c_stream; /* compression stream */ int err; @@ -490,10 +438,8 @@ void test_dict_deflate(compr, comprLen) /* =========================================================================== * Test inflate() with a preset dictionary */ -void test_dict_inflate(compr, comprLen, uncompr, uncomprLen) - Byte *compr, *uncompr; - uLong comprLen, uncomprLen; -{ +void test_dict_inflate(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { int err; z_stream d_stream; /* decompression stream */ @@ -541,13 +487,10 @@ void test_dict_inflate(compr, comprLen, uncompr, uncomprLen) * Usage: example [output.gz [input.gz]] */ -int main(argc, argv) - int argc; - char *argv[]; -{ +int main(int argc, char *argv[]) { Byte *compr, *uncompr; - uLong comprLen = 10000*sizeof(int); /* don't overflow on MSDOS */ - uLong uncomprLen = comprLen; + uLong uncomprLen = 20000; + uLong comprLen = 3 * uncomprLen; static const char* myVersion = ZLIB_VERSION; if (zlibVersion()[0] != myVersion[0]) { @@ -590,7 +533,7 @@ int main(argc, argv) test_flush(compr, &comprLen); test_sync(compr, comprLen, uncompr, uncomprLen); - comprLen = uncomprLen; + comprLen = 3 * uncomprLen; test_dict_deflate(compr, comprLen); test_dict_inflate(compr, comprLen, uncompr, uncomprLen); diff --git a/src/zlib/zlib-1.2.13/test/infcover.c b/src/zlib/zlib-1.3/test/infcover.c similarity index 99% rename from src/zlib/zlib-1.2.13/test/infcover.c rename to src/zlib/zlib-1.3/test/infcover.c index 2be01646c..8912c403d 100644 --- a/src/zlib/zlib-1.2.13/test/infcover.c +++ b/src/zlib/zlib-1.3/test/infcover.c @@ -373,7 +373,7 @@ local void cover_support(void) mem_setup(&strm); strm.avail_in = 0; strm.next_in = Z_NULL; - ret = inflateInit_(&strm, ZLIB_VERSION - 1, (int)sizeof(z_stream)); + ret = inflateInit_(&strm, "!", (int)sizeof(z_stream)); assert(ret == Z_VERSION_ERROR); mem_done(&strm, "wrong version"); @@ -462,7 +462,8 @@ local unsigned pull(void *desc, unsigned char **buf) local int push(void *desc, unsigned char *buf, unsigned len) { - buf += len; + (void)buf; + (void)len; return desc != Z_NULL; /* force error if desc not null */ } diff --git a/src/zlib/zlib-1.2.13/test/minigzip.c b/src/zlib/zlib-1.3/test/minigzip.c similarity index 88% rename from src/zlib/zlib-1.2.13/test/minigzip.c rename to src/zlib/zlib-1.3/test/minigzip.c index a649d2b3d..8a21ddfb5 100644 --- a/src/zlib/zlib-1.2.13/test/minigzip.c +++ b/src/zlib/zlib-1.3/test/minigzip.c @@ -59,7 +59,7 @@ #if !defined(Z_HAVE_UNISTD_H) && !defined(_LARGEFILE64_SOURCE) #ifndef WIN32 /* unlink already in stdio.h for WIN32 */ - extern int unlink OF((const char *)); + extern int unlink(const char *); #endif #endif @@ -149,20 +149,12 @@ static void pwinerror (s) # include /* for unlink() */ #endif -void *myalloc OF((void *, unsigned, unsigned)); -void myfree OF((void *, void *)); - -void *myalloc(q, n, m) - void *q; - unsigned n, m; -{ +void *myalloc(void *q, unsigned n, unsigned m) { (void)q; return calloc(n, m); } -void myfree(q, p) - void *q, *p; -{ +void myfree(void *q, void *p) { (void)q; free(p); } @@ -175,29 +167,7 @@ typedef struct gzFile_s { z_stream strm; } *gzFile; -gzFile gzopen OF((const char *, const char *)); -gzFile gzdopen OF((int, const char *)); -gzFile gz_open OF((const char *, int, const char *)); - -gzFile gzopen(path, mode) -const char *path; -const char *mode; -{ - return gz_open(path, -1, mode); -} - -gzFile gzdopen(fd, mode) -int fd; -const char *mode; -{ - return gz_open(NULL, fd, mode); -} - -gzFile gz_open(path, fd, mode) - const char *path; - int fd; - const char *mode; -{ +gzFile gz_open(const char *path, int fd, const char *mode) { gzFile gz; int ret; @@ -231,13 +201,15 @@ gzFile gz_open(path, fd, mode) return gz; } -int gzwrite OF((gzFile, const void *, unsigned)); +gzFile gzopen(const char *path, const char *mode) { + return gz_open(path, -1, mode); +} -int gzwrite(gz, buf, len) - gzFile gz; - const void *buf; - unsigned len; -{ +gzFile gzdopen(int fd, const char *mode) { + return gz_open(NULL, fd, mode); +} + +int gzwrite(gzFile gz, const void *buf, unsigned len) { z_stream *strm; unsigned char out[BUFLEN]; @@ -255,13 +227,7 @@ int gzwrite(gz, buf, len) return len; } -int gzread OF((gzFile, void *, unsigned)); - -int gzread(gz, buf, len) - gzFile gz; - void *buf; - unsigned len; -{ +int gzread(gzFile gz, void *buf, unsigned len) { int ret; unsigned got; unsigned char in[1]; @@ -292,11 +258,7 @@ int gzread(gz, buf, len) return len - strm->avail_out; } -int gzclose OF((gzFile)); - -int gzclose(gz) - gzFile gz; -{ +int gzclose(gzFile gz) { z_stream *strm; unsigned char out[BUFLEN]; @@ -321,12 +283,7 @@ int gzclose(gz) return Z_OK; } -const char *gzerror OF((gzFile, int *)); - -const char *gzerror(gz, err) - gzFile gz; - int *err; -{ +const char *gzerror(gzFile gz, int *err) { *err = gz->err; return gz->msg; } @@ -335,67 +292,20 @@ const char *gzerror(gz, err) static char *prog; -void error OF((const char *msg)); -void gz_compress OF((FILE *in, gzFile out)); -#ifdef USE_MMAP -int gz_compress_mmap OF((FILE *in, gzFile out)); -#endif -void gz_uncompress OF((gzFile in, FILE *out)); -void file_compress OF((char *file, char *mode)); -void file_uncompress OF((char *file)); -int main OF((int argc, char *argv[])); - /* =========================================================================== * Display error message and exit */ -void error(msg) - const char *msg; -{ +void error(const char *msg) { fprintf(stderr, "%s: %s\n", prog, msg); exit(1); } -/* =========================================================================== - * Compress input to output then close both files. - */ - -void gz_compress(in, out) - FILE *in; - gzFile out; -{ - local char buf[BUFLEN]; - int len; - int err; - -#ifdef USE_MMAP - /* Try first compressing with mmap. If mmap fails (minigzip used in a - * pipe), use the normal fread loop. - */ - if (gz_compress_mmap(in, out) == Z_OK) return; -#endif - for (;;) { - len = (int)fread(buf, 1, sizeof(buf), in); - if (ferror(in)) { - perror("fread"); - exit(1); - } - if (len == 0) break; - - if (gzwrite(out, buf, (unsigned)len) != len) error(gzerror(out, &err)); - } - fclose(in); - if (gzclose(out) != Z_OK) error("failed gzclose"); -} - #ifdef USE_MMAP /* MMAP version, Miguel Albrecht */ /* Try compressing the input file at once using mmap. Return Z_OK if * if success, Z_ERRNO otherwise. */ -int gz_compress_mmap(in, out) - FILE *in; - gzFile out; -{ +int gz_compress_mmap(FILE *in, gzFile out) { int len; int err; int ifd = fileno(in); @@ -424,13 +334,39 @@ int gz_compress_mmap(in, out) } #endif /* USE_MMAP */ +/* =========================================================================== + * Compress input to output then close both files. + */ + +void gz_compress(FILE *in, gzFile out) { + local char buf[BUFLEN]; + int len; + int err; + +#ifdef USE_MMAP + /* Try first compressing with mmap. If mmap fails (minigzip used in a + * pipe), use the normal fread loop. + */ + if (gz_compress_mmap(in, out) == Z_OK) return; +#endif + for (;;) { + len = (int)fread(buf, 1, sizeof(buf), in); + if (ferror(in)) { + perror("fread"); + exit(1); + } + if (len == 0) break; + + if (gzwrite(out, buf, (unsigned)len) != len) error(gzerror(out, &err)); + } + fclose(in); + if (gzclose(out) != Z_OK) error("failed gzclose"); +} + /* =========================================================================== * Uncompress input to output then close both files. */ -void gz_uncompress(in, out) - gzFile in; - FILE *out; -{ +void gz_uncompress(gzFile in, FILE *out) { local char buf[BUFLEN]; int len; int err; @@ -454,10 +390,7 @@ void gz_uncompress(in, out) * Compress the given file: create a corresponding .gz file and remove the * original. */ -void file_compress(file, mode) - char *file; - char *mode; -{ +void file_compress(char *file, char *mode) { local char outfile[MAX_NAME_LEN]; FILE *in; gzFile out; @@ -493,9 +426,7 @@ void file_compress(file, mode) /* =========================================================================== * Uncompress the given file and remove the original. */ -void file_uncompress(file) - char *file; -{ +void file_uncompress(char *file) { local char buf[MAX_NAME_LEN]; char *infile, *outfile; FILE *out; @@ -553,10 +484,7 @@ void file_uncompress(file) * -1 to -9 : compression level */ -int main(argc, argv) - int argc; - char *argv[]; -{ +int main(int argc, char *argv[]) { int copyout = 0; int uncompr = 0; gzFile file; diff --git a/src/zlib/zlib-1.2.13/treebuild.xml b/src/zlib/zlib-1.3/treebuild.xml similarity index 96% rename from src/zlib/zlib-1.2.13/treebuild.xml rename to src/zlib/zlib-1.3/treebuild.xml index 0017a45d3..1d1b00770 100644 --- a/src/zlib/zlib-1.2.13/treebuild.xml +++ b/src/zlib/zlib-1.3/treebuild.xml @@ -1,6 +1,6 @@ - - + + zip compression library diff --git a/src/zlib/zlib-1.2.13/trees.c b/src/zlib/zlib-1.3/trees.c similarity index 90% rename from src/zlib/zlib-1.2.13/trees.c rename to src/zlib/zlib-1.3/trees.c index 5f305c472..8dbdc40ba 100644 --- a/src/zlib/zlib-1.2.13/trees.c +++ b/src/zlib/zlib-1.3/trees.c @@ -122,39 +122,116 @@ struct static_tree_desc_s { int max_length; /* max bit length for the codes */ }; -local const static_tree_desc static_l_desc = +#ifdef NO_INIT_GLOBAL_POINTERS +# define TCONST +#else +# define TCONST const +#endif + +local TCONST static_tree_desc static_l_desc = {static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; -local const static_tree_desc static_d_desc = +local TCONST static_tree_desc static_d_desc = {static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; -local const static_tree_desc static_bl_desc = +local TCONST static_tree_desc static_bl_desc = {(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; /* =========================================================================== - * Local (static) routines in this file. + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +#define put_short(s, w) { \ + put_byte(s, (uch)((w) & 0xff)); \ + put_byte(s, (uch)((ush)(w) >> 8)); \ +} + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 */ +local unsigned bi_reverse(unsigned code, int len) { + register unsigned res = 0; + do { + res |= code & 1; + code >>= 1, res <<= 1; + } while (--len > 0); + return res >> 1; +} -local void tr_static_init OF((void)); -local void init_block OF((deflate_state *s)); -local void pqdownheap OF((deflate_state *s, ct_data *tree, int k)); -local void gen_bitlen OF((deflate_state *s, tree_desc *desc)); -local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count)); -local void build_tree OF((deflate_state *s, tree_desc *desc)); -local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code)); -local void send_tree OF((deflate_state *s, ct_data *tree, int max_code)); -local int build_bl_tree OF((deflate_state *s)); -local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, - int blcodes)); -local void compress_block OF((deflate_state *s, const ct_data *ltree, - const ct_data *dtree)); -local int detect_data_type OF((deflate_state *s)); -local unsigned bi_reverse OF((unsigned code, int len)); -local void bi_windup OF((deflate_state *s)); -local void bi_flush OF((deflate_state *s)); +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +local void bi_flush(deflate_state *s) { + if (s->bi_valid == 16) { + put_short(s, s->bi_buf); + s->bi_buf = 0; + s->bi_valid = 0; + } else if (s->bi_valid >= 8) { + put_byte(s, (Byte)s->bi_buf); + s->bi_buf >>= 8; + s->bi_valid -= 8; + } +} + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +local void bi_windup(deflate_state *s) { + if (s->bi_valid > 8) { + put_short(s, s->bi_buf); + } else if (s->bi_valid > 0) { + put_byte(s, (Byte)s->bi_buf); + } + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef ZLIB_DEBUG + s->bits_sent = (s->bits_sent + 7) & ~7; +#endif +} + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +local void gen_codes(ct_data *tree, int max_code, ushf *bl_count) { + ush next_code[MAX_BITS+1]; /* next code value for each bit length */ + unsigned code = 0; /* running code value */ + int bits; /* bit index */ + int n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + code = (code + bl_count[bits - 1]) << 1; + next_code[bits] = (ush)code; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + Assert (code + bl_count[MAX_BITS] - 1 == (1 << MAX_BITS) - 1, + "inconsistent bit counts"); + Tracev((stderr,"\ngen_codes: max_code %d ", max_code)); + + for (n = 0; n <= max_code; n++) { + int len = tree[n].Len; + if (len == 0) continue; + /* Now reverse the bits */ + tree[n].Code = (ush)bi_reverse(next_code[len]++, len); + + Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ", + n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len] - 1)); + } +} #ifdef GEN_TREES_H -local void gen_trees_header OF((void)); +local void gen_trees_header(void); #endif #ifndef ZLIB_DEBUG @@ -167,27 +244,12 @@ local void gen_trees_header OF((void)); send_bits(s, tree[c].Code, tree[c].Len); } #endif -/* =========================================================================== - * Output a short LSB first on the stream. - * IN assertion: there is enough room in pendingBuf. - */ -#define put_short(s, w) { \ - put_byte(s, (uch)((w) & 0xff)); \ - put_byte(s, (uch)((ush)(w) >> 8)); \ -} - /* =========================================================================== * Send a value on a given number of bits. * IN assertion: length <= 16 and value fits in length bits. */ #ifdef ZLIB_DEBUG -local void send_bits OF((deflate_state *s, int value, int length)); - -local void send_bits(s, value, length) - deflate_state *s; - int value; /* value to send */ - int length; /* number of bits */ -{ +local void send_bits(deflate_state *s, int value, int length) { Tracevv((stderr," l %2d v %4x ", length, value)); Assert(length > 0 && length <= 15, "invalid length"); s->bits_sent += (ulg)length; @@ -229,8 +291,7 @@ local void send_bits(s, value, length) /* =========================================================================== * Initialize the various 'constant' tables. */ -local void tr_static_init() -{ +local void tr_static_init(void) { #if defined(GEN_TREES_H) || !defined(STDC) static int static_init_done = 0; int n; /* iterates over tree elements */ @@ -323,8 +384,7 @@ local void tr_static_init() ((i) == (last)? "\n};\n\n" : \ ((i) % (width) == (width) - 1 ? ",\n" : ", ")) -void gen_trees_header() -{ +void gen_trees_header(void) { FILE *header = fopen("trees.h", "w"); int i; @@ -373,12 +433,26 @@ void gen_trees_header() } #endif /* GEN_TREES_H */ +/* =========================================================================== + * Initialize a new block. + */ +local void init_block(deflate_state *s) { + int n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; + for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; + for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; + + s->dyn_ltree[END_BLOCK].Freq = 1; + s->opt_len = s->static_len = 0L; + s->sym_next = s->matches = 0; +} + /* =========================================================================== * Initialize the tree data structures for a new zlib stream. */ -void ZLIB_INTERNAL _tr_init(s) - deflate_state *s; -{ +void ZLIB_INTERNAL _tr_init(deflate_state *s) { tr_static_init(); s->l_desc.dyn_tree = s->dyn_ltree; @@ -401,24 +475,6 @@ void ZLIB_INTERNAL _tr_init(s) init_block(s); } -/* =========================================================================== - * Initialize a new block. - */ -local void init_block(s) - deflate_state *s; -{ - int n; /* iterates over tree elements */ - - /* Initialize the trees. */ - for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; - for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; - for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; - - s->dyn_ltree[END_BLOCK].Freq = 1; - s->opt_len = s->static_len = 0L; - s->sym_next = s->matches = 0; -} - #define SMALLEST 1 /* Index within the heap array of least frequent node in the Huffman tree */ @@ -448,11 +504,7 @@ local void init_block(s) * when the heap property is re-established (each father smaller than its * two sons). */ -local void pqdownheap(s, tree, k) - deflate_state *s; - ct_data *tree; /* the tree to restore */ - int k; /* node to move down */ -{ +local void pqdownheap(deflate_state *s, ct_data *tree, int k) { int v = s->heap[k]; int j = k << 1; /* left son of k */ while (j <= s->heap_len) { @@ -483,10 +535,7 @@ local void pqdownheap(s, tree, k) * The length opt_len is updated; static_len is also updated if stree is * not null. */ -local void gen_bitlen(s, desc) - deflate_state *s; - tree_desc *desc; /* the tree descriptor */ -{ +local void gen_bitlen(deflate_state *s, tree_desc *desc) { ct_data *tree = desc->dyn_tree; int max_code = desc->max_code; const ct_data *stree = desc->stat_desc->static_tree; @@ -561,48 +610,9 @@ local void gen_bitlen(s, desc) } } -/* =========================================================================== - * Generate the codes for a given tree and bit counts (which need not be - * optimal). - * IN assertion: the array bl_count contains the bit length statistics for - * the given tree and the field len is set for all tree elements. - * OUT assertion: the field code is set for all tree elements of non - * zero code length. - */ -local void gen_codes(tree, max_code, bl_count) - ct_data *tree; /* the tree to decorate */ - int max_code; /* largest code with non zero frequency */ - ushf *bl_count; /* number of codes at each bit length */ -{ - ush next_code[MAX_BITS+1]; /* next code value for each bit length */ - unsigned code = 0; /* running code value */ - int bits; /* bit index */ - int n; /* code index */ - - /* The distribution counts are first used to generate the code values - * without bit reversal. - */ - for (bits = 1; bits <= MAX_BITS; bits++) { - code = (code + bl_count[bits - 1]) << 1; - next_code[bits] = (ush)code; - } - /* Check that the bit counts in bl_count are consistent. The last code - * must be all ones. - */ - Assert (code + bl_count[MAX_BITS] - 1 == (1 << MAX_BITS) - 1, - "inconsistent bit counts"); - Tracev((stderr,"\ngen_codes: max_code %d ", max_code)); - - for (n = 0; n <= max_code; n++) { - int len = tree[n].Len; - if (len == 0) continue; - /* Now reverse the bits */ - tree[n].Code = (ush)bi_reverse(next_code[len]++, len); - - Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ", - n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len] - 1)); - } -} +#ifdef DUMP_BL_TREE +# include +#endif /* =========================================================================== * Construct one Huffman tree and assigns the code bit strings and lengths. @@ -612,10 +622,7 @@ local void gen_codes(tree, max_code, bl_count) * and corresponding code. The length opt_len is updated; static_len is * also updated if stree is not null. The field max_code is set. */ -local void build_tree(s, desc) - deflate_state *s; - tree_desc *desc; /* the tree descriptor */ -{ +local void build_tree(deflate_state *s, tree_desc *desc) { ct_data *tree = desc->dyn_tree; const ct_data *stree = desc->stat_desc->static_tree; int elems = desc->stat_desc->elems; @@ -700,11 +707,7 @@ local void build_tree(s, desc) * Scan a literal or distance tree to determine the frequencies of the codes * in the bit length tree. */ -local void scan_tree(s, tree, max_code) - deflate_state *s; - ct_data *tree; /* the tree to be scanned */ - int max_code; /* and its largest code of non zero frequency */ -{ +local void scan_tree(deflate_state *s, ct_data *tree, int max_code) { int n; /* iterates over all tree elements */ int prevlen = -1; /* last emitted length */ int curlen; /* length of current code */ @@ -745,11 +748,7 @@ local void scan_tree(s, tree, max_code) * Send a literal or distance tree in compressed form, using the codes in * bl_tree. */ -local void send_tree(s, tree, max_code) - deflate_state *s; - ct_data *tree; /* the tree to be scanned */ - int max_code; /* and its largest code of non zero frequency */ -{ +local void send_tree(deflate_state *s, ct_data *tree, int max_code) { int n; /* iterates over all tree elements */ int prevlen = -1; /* last emitted length */ int curlen; /* length of current code */ @@ -796,9 +795,7 @@ local void send_tree(s, tree, max_code) * Construct the Huffman tree for the bit lengths and return the index in * bl_order of the last bit length code to send. */ -local int build_bl_tree(s) - deflate_state *s; -{ +local int build_bl_tree(deflate_state *s) { int max_blindex; /* index of last bit length code of non zero freq */ /* Determine the bit length frequencies for literal and distance trees */ @@ -831,10 +828,8 @@ local int build_bl_tree(s) * lengths of the bit length codes, the literal tree and the distance tree. * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. */ -local void send_all_trees(s, lcodes, dcodes, blcodes) - deflate_state *s; - int lcodes, dcodes, blcodes; /* number of codes for each tree */ -{ +local void send_all_trees(deflate_state *s, int lcodes, int dcodes, + int blcodes) { int rank; /* index in bl_order */ Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); @@ -860,12 +855,8 @@ local void send_all_trees(s, lcodes, dcodes, blcodes) /* =========================================================================== * Send a stored block */ -void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) - deflate_state *s; - charf *buf; /* input block */ - ulg stored_len; /* length of input block */ - int last; /* one if this is the last block for a file */ -{ +void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, + ulg stored_len, int last) { send_bits(s, (STORED_BLOCK<<1) + last, 3); /* send block type */ bi_windup(s); /* align on byte boundary */ put_short(s, (ush)stored_len); @@ -884,9 +875,7 @@ void ZLIB_INTERNAL _tr_stored_block(s, buf, stored_len, last) /* =========================================================================== * Flush the bits in the bit buffer to pending output (leaves at most 7 bits) */ -void ZLIB_INTERNAL _tr_flush_bits(s) - deflate_state *s; -{ +void ZLIB_INTERNAL _tr_flush_bits(deflate_state *s) { bi_flush(s); } @@ -894,9 +883,7 @@ void ZLIB_INTERNAL _tr_flush_bits(s) * Send one empty static block to give enough lookahead for inflate. * This takes 10 bits, of which 7 may remain in the bit buffer. */ -void ZLIB_INTERNAL _tr_align(s) - deflate_state *s; -{ +void ZLIB_INTERNAL _tr_align(deflate_state *s) { send_bits(s, STATIC_TREES<<1, 3); send_code(s, END_BLOCK, static_ltree); #ifdef ZLIB_DEBUG @@ -905,16 +892,99 @@ void ZLIB_INTERNAL _tr_align(s) bi_flush(s); } +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +local void compress_block(deflate_state *s, const ct_data *ltree, + const ct_data *dtree) { + unsigned dist; /* distance of matched string */ + int lc; /* match length or unmatched char (if dist == 0) */ + unsigned sx = 0; /* running index in sym_buf */ + unsigned code; /* the code to send */ + int extra; /* number of extra bits to send */ + + if (s->sym_next != 0) do { + dist = s->sym_buf[sx++] & 0xff; + dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; + lc = s->sym_buf[sx++]; + if (dist == 0) { + send_code(s, lc, ltree); /* send a literal byte */ + Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code + LITERALS + 1, ltree); /* send length code */ + extra = extra_lbits[code]; + if (extra != 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra != 0) { + dist -= (unsigned)base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and sym_buf is ok: */ + Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); + + } while (sx < s->sym_next); + + send_code(s, END_BLOCK, ltree); +} + +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "block list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ +local int detect_data_type(deflate_state *s) { + /* block_mask is the bit mask of block-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + unsigned long block_mask = 0xf3ffc07fUL; + int n; + + /* Check for non-textual ("block-listed") bytes. */ + for (n = 0; n <= 31; n++, block_mask >>= 1) + if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0)) + return Z_BINARY; + + /* Check for textual ("allow-listed") bytes. */ + if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 + || s->dyn_ltree[13].Freq != 0) + return Z_TEXT; + for (n = 32; n < LITERALS; n++) + if (s->dyn_ltree[n].Freq != 0) + return Z_TEXT; + + /* There are no "block-listed" or "allow-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + return Z_BINARY; +} + /* =========================================================================== * Determine the best encoding for the current block: dynamic trees, static * trees or store, and write out the encoded block. */ -void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) - deflate_state *s; - charf *buf; /* input block, or NULL if too old */ - ulg stored_len; /* length of input block */ - int last; /* one if this is the last block for a file */ -{ +void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, + ulg stored_len, int last) { ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ int max_blindex = 0; /* index of last bit length code of non zero freq */ @@ -1011,11 +1081,7 @@ void ZLIB_INTERNAL _tr_flush_block(s, buf, stored_len, last) * Save the match info and tally the frequency counts. Return true if * the current block must be flushed. */ -int ZLIB_INTERNAL _tr_tally(s, dist, lc) - deflate_state *s; - unsigned dist; /* distance of matched string */ - unsigned lc; /* match length - MIN_MATCH or unmatched char (dist==0) */ -{ +int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc) { s->sym_buf[s->sym_next++] = (uch)dist; s->sym_buf[s->sym_next++] = (uch)(dist >> 8); s->sym_buf[s->sym_next++] = (uch)lc; @@ -1035,147 +1101,3 @@ int ZLIB_INTERNAL _tr_tally(s, dist, lc) } return (s->sym_next == s->sym_end); } - -/* =========================================================================== - * Send the block data compressed using the given Huffman trees - */ -local void compress_block(s, ltree, dtree) - deflate_state *s; - const ct_data *ltree; /* literal tree */ - const ct_data *dtree; /* distance tree */ -{ - unsigned dist; /* distance of matched string */ - int lc; /* match length or unmatched char (if dist == 0) */ - unsigned sx = 0; /* running index in sym_buf */ - unsigned code; /* the code to send */ - int extra; /* number of extra bits to send */ - - if (s->sym_next != 0) do { - dist = s->sym_buf[sx++] & 0xff; - dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; - lc = s->sym_buf[sx++]; - if (dist == 0) { - send_code(s, lc, ltree); /* send a literal byte */ - Tracecv(isgraph(lc), (stderr," '%c' ", lc)); - } else { - /* Here, lc is the match length - MIN_MATCH */ - code = _length_code[lc]; - send_code(s, code + LITERALS + 1, ltree); /* send length code */ - extra = extra_lbits[code]; - if (extra != 0) { - lc -= base_length[code]; - send_bits(s, lc, extra); /* send the extra length bits */ - } - dist--; /* dist is now the match distance - 1 */ - code = d_code(dist); - Assert (code < D_CODES, "bad d_code"); - - send_code(s, code, dtree); /* send the distance code */ - extra = extra_dbits[code]; - if (extra != 0) { - dist -= (unsigned)base_dist[code]; - send_bits(s, dist, extra); /* send the extra distance bits */ - } - } /* literal or match pair ? */ - - /* Check that the overlay between pending_buf and sym_buf is ok: */ - Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); - - } while (sx < s->sym_next); - - send_code(s, END_BLOCK, ltree); -} - -/* =========================================================================== - * Check if the data type is TEXT or BINARY, using the following algorithm: - * - TEXT if the two conditions below are satisfied: - * a) There are no non-portable control characters belonging to the - * "block list" (0..6, 14..25, 28..31). - * b) There is at least one printable character belonging to the - * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). - * - BINARY otherwise. - * - The following partially-portable control characters form a - * "gray list" that is ignored in this detection algorithm: - * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). - * IN assertion: the fields Freq of dyn_ltree are set. - */ -local int detect_data_type(s) - deflate_state *s; -{ - /* block_mask is the bit mask of block-listed bytes - * set bits 0..6, 14..25, and 28..31 - * 0xf3ffc07f = binary 11110011111111111100000001111111 - */ - unsigned long block_mask = 0xf3ffc07fUL; - int n; - - /* Check for non-textual ("block-listed") bytes. */ - for (n = 0; n <= 31; n++, block_mask >>= 1) - if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0)) - return Z_BINARY; - - /* Check for textual ("allow-listed") bytes. */ - if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 - || s->dyn_ltree[13].Freq != 0) - return Z_TEXT; - for (n = 32; n < LITERALS; n++) - if (s->dyn_ltree[n].Freq != 0) - return Z_TEXT; - - /* There are no "block-listed" or "allow-listed" bytes: - * this stream either is empty or has tolerated ("gray-listed") bytes only. - */ - return Z_BINARY; -} - -/* =========================================================================== - * Reverse the first len bits of a code, using straightforward code (a faster - * method would use a table) - * IN assertion: 1 <= len <= 15 - */ -local unsigned bi_reverse(code, len) - unsigned code; /* the value to invert */ - int len; /* its bit length */ -{ - register unsigned res = 0; - do { - res |= code & 1; - code >>= 1, res <<= 1; - } while (--len > 0); - return res >> 1; -} - -/* =========================================================================== - * Flush the bit buffer, keeping at most 7 bits in it. - */ -local void bi_flush(s) - deflate_state *s; -{ - if (s->bi_valid == 16) { - put_short(s, s->bi_buf); - s->bi_buf = 0; - s->bi_valid = 0; - } else if (s->bi_valid >= 8) { - put_byte(s, (Byte)s->bi_buf); - s->bi_buf >>= 8; - s->bi_valid -= 8; - } -} - -/* =========================================================================== - * Flush the bit buffer and align the output on a byte boundary - */ -local void bi_windup(s) - deflate_state *s; -{ - if (s->bi_valid > 8) { - put_short(s, s->bi_buf); - } else if (s->bi_valid > 0) { - put_byte(s, (Byte)s->bi_buf); - } - s->bi_buf = 0; - s->bi_valid = 0; -#ifdef ZLIB_DEBUG - s->bits_sent = (s->bits_sent + 7) & ~7; -#endif -} diff --git a/src/zlib/zlib-1.2.13/trees.h b/src/zlib/zlib-1.3/trees.h similarity index 100% rename from src/zlib/zlib-1.2.13/trees.h rename to src/zlib/zlib-1.3/trees.h diff --git a/src/zlib/zlib-1.2.13/uncompr.c b/src/zlib/zlib-1.3/uncompr.c similarity index 90% rename from src/zlib/zlib-1.2.13/uncompr.c rename to src/zlib/zlib-1.3/uncompr.c index f9532f46c..5e256663b 100644 --- a/src/zlib/zlib-1.2.13/uncompr.c +++ b/src/zlib/zlib-1.3/uncompr.c @@ -24,12 +24,8 @@ Z_DATA_ERROR if the input data was corrupted, including if the input data is an incomplete zlib stream. */ -int ZEXPORT uncompress2(dest, destLen, source, sourceLen) - Bytef *dest; - uLongf *destLen; - const Bytef *source; - uLong *sourceLen; -{ +int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong *sourceLen) { z_stream stream; int err; const uInt max = (uInt)-1; @@ -83,11 +79,7 @@ int ZEXPORT uncompress2(dest, destLen, source, sourceLen) err; } -int ZEXPORT uncompress(dest, destLen, source, sourceLen) - Bytef *dest; - uLongf *destLen; - const Bytef *source; - uLong sourceLen; -{ +int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong sourceLen) { return uncompress2(dest, destLen, source, &sourceLen); } diff --git a/src/zlib/zlib-1.2.13/watcom/watcom_f.mak b/src/zlib/zlib-1.3/watcom/watcom_f.mak similarity index 100% rename from src/zlib/zlib-1.2.13/watcom/watcom_f.mak rename to src/zlib/zlib-1.3/watcom/watcom_f.mak diff --git a/src/zlib/zlib-1.2.13/watcom/watcom_l.mak b/src/zlib/zlib-1.3/watcom/watcom_l.mak similarity index 100% rename from src/zlib/zlib-1.2.13/watcom/watcom_l.mak rename to src/zlib/zlib-1.3/watcom/watcom_l.mak diff --git a/src/zlib/zlib-1.2.13/win32/DLL_FAQ.txt b/src/zlib/zlib-1.3/win32/DLL_FAQ.txt similarity index 100% rename from src/zlib/zlib-1.2.13/win32/DLL_FAQ.txt rename to src/zlib/zlib-1.3/win32/DLL_FAQ.txt diff --git a/src/zlib/zlib-1.2.13/win32/Makefile.bor b/src/zlib/zlib-1.3/win32/Makefile.bor similarity index 100% rename from src/zlib/zlib-1.2.13/win32/Makefile.bor rename to src/zlib/zlib-1.3/win32/Makefile.bor diff --git a/src/zlib/zlib-1.2.13/win32/Makefile.gcc b/src/zlib/zlib-1.3/win32/Makefile.gcc similarity index 100% rename from src/zlib/zlib-1.2.13/win32/Makefile.gcc rename to src/zlib/zlib-1.3/win32/Makefile.gcc diff --git a/src/zlib/zlib-1.2.13/win32/Makefile.msc b/src/zlib/zlib-1.3/win32/Makefile.msc similarity index 100% rename from src/zlib/zlib-1.2.13/win32/Makefile.msc rename to src/zlib/zlib-1.3/win32/Makefile.msc diff --git a/src/zlib/zlib-1.2.13/win32/README-WIN32.txt b/src/zlib/zlib-1.3/win32/README-WIN32.txt similarity index 96% rename from src/zlib/zlib-1.2.13/win32/README-WIN32.txt rename to src/zlib/zlib-1.3/win32/README-WIN32.txt index 050197d80..384c988fa 100644 --- a/src/zlib/zlib-1.2.13/win32/README-WIN32.txt +++ b/src/zlib/zlib-1.3/win32/README-WIN32.txt @@ -1,6 +1,6 @@ ZLIB DATA COMPRESSION LIBRARY -zlib 1.2.13 is a general purpose data compression library. All the code is +zlib 1.3.0 is a general purpose data compression library. All the code is thread safe. The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) @@ -22,7 +22,7 @@ before asking for help. Manifest: -The package zlib-1.2.13-win32-x86.zip will contain the following files: +The package zlib-1.3.0-win32-x86.zip will contain the following files: README-WIN32.txt This document ChangeLog Changes since previous zlib packages diff --git a/src/zlib/zlib-1.2.13/win32/VisualC.txt b/src/zlib/zlib-1.3/win32/VisualC.txt similarity index 100% rename from src/zlib/zlib-1.2.13/win32/VisualC.txt rename to src/zlib/zlib-1.3/win32/VisualC.txt diff --git a/src/zlib/zlib-1.2.13/win32/zlib.def b/src/zlib/zlib-1.3/win32/zlib.def similarity index 100% rename from src/zlib/zlib-1.2.13/win32/zlib.def rename to src/zlib/zlib-1.3/win32/zlib.def diff --git a/src/zlib/zlib-1.2.13/win32/zlib1.rc b/src/zlib/zlib-1.3/win32/zlib1.rc similarity index 100% rename from src/zlib/zlib-1.2.13/win32/zlib1.rc rename to src/zlib/zlib-1.3/win32/zlib1.rc diff --git a/src/zlib/zlib-1.2.13/zconf.h b/src/zlib/zlib-1.3/zconf.h similarity index 99% rename from src/zlib/zlib-1.2.13/zconf.h rename to src/zlib/zlib-1.3/zconf.h index bf977d3e7..fb76ffe31 100644 --- a/src/zlib/zlib-1.2.13/zconf.h +++ b/src/zlib/zlib-1.3/zconf.h @@ -241,7 +241,11 @@ #endif #ifdef Z_SOLO - typedef unsigned long z_size_t; +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif #else # define z_longlong long long # if defined(NO_SIZE_T) @@ -520,7 +524,7 @@ typedef uLong FAR uLongf; #if !defined(_WIN32) && defined(Z_LARGE64) # define z_off64_t off64_t #else -# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO) +# if defined(_WIN32) && !defined(__GNUC__) # define z_off64_t __int64 # else # define z_off64_t z_off_t diff --git a/src/zlib/zlib-1.2.13/zconf.h.cmakein b/src/zlib/zlib-1.3/zconf.h.cmakein similarity index 99% rename from src/zlib/zlib-1.2.13/zconf.h.cmakein rename to src/zlib/zlib-1.3/zconf.h.cmakein index 247ba2461..310c43928 100644 --- a/src/zlib/zlib-1.2.13/zconf.h.cmakein +++ b/src/zlib/zlib-1.3/zconf.h.cmakein @@ -243,7 +243,11 @@ #endif #ifdef Z_SOLO - typedef unsigned long z_size_t; +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif #else # define z_longlong long long # if defined(NO_SIZE_T) @@ -522,7 +526,7 @@ typedef uLong FAR uLongf; #if !defined(_WIN32) && defined(Z_LARGE64) # define z_off64_t off64_t #else -# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO) +# if defined(_WIN32) && !defined(__GNUC__) # define z_off64_t __int64 # else # define z_off64_t z_off_t diff --git a/src/zlib/zlib-1.2.13/zconf.h.in b/src/zlib/zlib-1.3/zconf.h.in similarity index 99% rename from src/zlib/zlib-1.2.13/zconf.h.in rename to src/zlib/zlib-1.3/zconf.h.in index bf977d3e7..fb76ffe31 100644 --- a/src/zlib/zlib-1.2.13/zconf.h.in +++ b/src/zlib/zlib-1.3/zconf.h.in @@ -241,7 +241,11 @@ #endif #ifdef Z_SOLO - typedef unsigned long z_size_t; +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif #else # define z_longlong long long # if defined(NO_SIZE_T) @@ -520,7 +524,7 @@ typedef uLong FAR uLongf; #if !defined(_WIN32) && defined(Z_LARGE64) # define z_off64_t off64_t #else -# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO) +# if defined(_WIN32) && !defined(__GNUC__) # define z_off64_t __int64 # else # define z_off64_t z_off_t diff --git a/src/zlib/zlib-1.2.13/zlib.3 b/src/zlib/zlib-1.3/zlib.3 similarity index 97% rename from src/zlib/zlib-1.2.13/zlib.3 rename to src/zlib/zlib-1.3/zlib.3 index 6f6e91404..4dd289675 100644 --- a/src/zlib/zlib-1.2.13/zlib.3 +++ b/src/zlib/zlib-1.3/zlib.3 @@ -1,4 +1,4 @@ -.TH ZLIB 3 "13 Oct 2022" +.TH ZLIB 3 "18 Aug 2023" .SH NAME zlib \- compression/decompression library .SH SYNOPSIS @@ -105,9 +105,9 @@ before asking for help. Send questions and/or comments to zlib@gzip.org, or (for the Windows DLL version) to Gilles Vollant (info@winimage.com). .SH AUTHORS AND LICENSE -Version 1.2.13 +Version 1.3 .LP -Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler +Copyright (C) 1995-2023 Jean-loup Gailly and Mark Adler .LP This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/src/zlib/zlib-1.3/zlib.3.pdf b/src/zlib/zlib-1.3/zlib.3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..da12d37183a7371513c0991fd14a7d932fd42e84 GIT binary patch literal 19505 zcmch<1z40#_dhP(AT7NhCAGVBcXxyI0t+m)bV*1^C`gBdG)Om6A|XMueZSx5|GR$IZ}+-)=bkxpX6DS9nR9>U%*~`JE6)k$;>Bj_-HOe_W@1uu z_JUhMJYaBVVSo$7!wzWc4&c<}1aMmGNXg4-BmQOJPKX4UCCm}#;j0Suf;x&J7yvk3 zf6=LHXiDkn$RQ}DrF3N!0i5o#a{5X#a$+vlHr{S94=5tW-NPF0=^-Y82x@qGxOjTV z!yKX4xBsXlY(4-80JpTq78M1mLY-|r>;U|T7;PYeiwD#V0F-xxctB;LR&Z;mxHz`E zhZ_{)gzb}AXf*9M-A5QOVeoD`L~qHCt7)gb9B9lOVvQ0rCq}I2z!Ev(raXR%lxGg)r%&j?_^D^*lUEBb!xMBJG z)sXNKKj3^~s2}AAj^TG!MYI=V6J?c-UsKxNJNUCaU0{FvU8Gw-z>M%EO}n>iV(=s0 zCnJ5$ik9i&)?8NS94C8A7lncSv?#Rin(rK4=qIZj0Bh|VTLVTLEjoKz_Acew9^?t; zyB^F$G3!@j&S!NC=|Fq8&BguO+5;Y(WpZ|!8k3yTudS9W@OrAZ=!6eTlZ^~*9rv`> z3FRkn=+D_R6mbt}Uj*)rEVzX*-)m3SX6D&@64)5jVXG>ksB&MDuN@|Y11I_g_YGh=Il{0<8Bwb>%Fo!hG2D~-wCDtTq&8s3uww2xp z*lZi@ClnrG7sZ89_PoDOG>R#Wg^%&%$8Dw-m-q#G|HS<$n$Dt!7oX6O@>_@6`z8v8 z^iFQw673@3k@~`0+b>)Aqgs&VN41Y?{v;P|z0+&XO@)TXVX|sOsl;iiUk{xVy{oOH zK66z~{0Q78qEFn@W@!I%sEWTX@%Q)c_KATF z^u8*MJ&jsL%IPndf>rW(!Cct*&AT2ONQ@t-b@YbV6s-E&H(G1C#@{YTC%Y=41~=|M z5aD2Ar9z%Ax%=oAZ6^=L*{m6qX~+JhYM$cukHWB|yHK&?=-7fraTGSZtnXzImG6&- zun3ZGgSl}@vHfYIw=*sLQIRHmkV9iGZjrweDeXud3p3V!`2Leu!VPo1D%$8HwT|A%E%!(X>EbxQe`%cGP8Zuq+Le~l87@LcRWqeg z)FHp?Hc2*HbU*RT!t|Ucn_U+3o1ti>)B=MK)#EicbdElsB(wkp%4&a&gReDGwBhbh z2CM<+IyC>aue>QULZBe#@>YUs<%A_}soZ%TB*LiPD(_A|JhO@e{6?P;InSasV^wd( zfr`hxNmx-wVXkpikDryI-KW%~5ukmP)QhsqL#ZGfVCKtZxWacI8J_2$e2W=|q(JJd zv!z(lou6hF8L1rlEGI}a>6RX|XXo2Aw$CpPF07;;w`|Y}pe`-JYsUBRYtBQh0D8?U z%L~S|;jzQ+{)GCpAWOS*CyP7|`dZ9JJ@TPT><+y~BjdW#LgQJxly$&^7mz^qt z)4bRB_2$T0gk@Ao3&V6VojlH$Zw{b-aEXQ8bNV!R67I0`g zN*>I-;#!EV3=3^arJ><1`g7fWewajbIq+H1dC(CAFGJ{RXWf|#Eofk%qvd>U<+< zG3#<1u=I)RiKce@8SxUNrWWB>TK59^h~94CKS!1)dh)0jzT%uG!ab1Hg}H-*uh34g z{zc%VL=t;Imw8{3(vUIk_EB6BTigOQZIME;CJbXlY?!w%-U*9U;2d)*2JjptFQfYi zU9@qw#nEPfAZNUOf}UdP9=v$b`&Ab1T;qHdm5cGLhXo5Ol4iJ3mdbcKc5cXH+0V7! zb{9*GVq(NRrg?+Clt~}aEp=fRXvI%HDr+G(ykTwyMnCki$cnIF(nzKF#(zx6Gazay#ETCqg00r(g@W1hB@vSIPRqUo^`b(7@~oVT{p)67e!W z$@00-J{hCd_K5>@20|O+7Vqtd4T_m5qEF#xBA)5u>5)MTdmC7Gp(UQ+j9;HrA zRp0#FQ^Qf7L0WB4!Kqy)^Hw7r7ymmSZni^-rQPi!vE*;9Piu_c7bs%L6zFX_Jk0(C z*Ng}o^$m8m1@vgYb*%mN_|0_De3i!u;~V5AM^-5q^@ay988uXugJhzJo}hhonns(l zsdl21LM6+ve`@U_O?YMf2n)Tpf%yF+3bn*OrIx&HuIPIYQJe zTK+BVAWAaB85P$CVP4ikODh<(R~gmqJSr`wosA*$wxEvNF_#_ldoVvgjFJzjCh z4&E2Xt`Z|x(#rJv1P)cIEzY*0tlFyyOswtrw}Tz26U?eS!5fjp$-N&~D+U8p;Hy{#;Q~tI@Hfv%n>w*lV-w^oVqv+F$*qpKi z6tx$ANmZcY!xj!+Ix3I55mui09|9y(BwJMA{w^)wZKEb~GqABSOoT6Y2TOI{Tg9YTt<8gZR@DTtzylM>E34)-E^liEdCYc zfgWmg`&O&hh01$)JCZwoYyqewPJq(t5q-@Iu%JtVH<^d@rhjJ3q%-H$Qg$~xv1U&t z!HCcJTDq?GR&wE{)JDYMBXgpMTlq+@*CqmGMBeF#NSMZc?RzoxT>=@pO<-*~^d!#U zWAnXd&kJ5}q*4wS*||oz=ZcGDCK|t9quYY$%Zhodv01>=pYeKFQ<0>M=|sj8o7jhZvA?HYJ4L>z2x96Ny@pNNm!a&DMSk`PnOvP%Jx@!yN?_TJVmu6q@Jk zPVbW^#l^+2aAGB(p&bJ3ah$`lLnpES`DM&w5NNcglX}EgFf= zPYSlPm}8xNLlfqVk!#*!DxVZZni`?tKI#g=LbBN@lD|9LW!BO^ldFXS5fb~te>02mTn^|po3qaXN|VL_{fHONidRN zn)y>!RXV4B#8IHU4;dI>kR>Fz6*K0#+JV!Rcz-)~;C*pqp+kD<$9H5SSIs}?K=&MSf>wbU1YFv8|SXjOkUNomqJ&5!l2l z?u%L<5V>WPHy*k1<6hr`c1?FP_8q-1$zQ6cXHqbc*5;lQ+f}(L7KVpVvgTIa5`9{d zHIAAs-=OMWm6B^ARtjZdM5ztrO~LJ+dv6~e$4&Tv<q9+)q*eEK?I6xy@{loQCaYxLtY0V-9CON^@{SBzory%^%nPS@jy&6IRX9@8mecm3C9?5oYq z;>;sxHBPQ%QJ%?vw2BK;N;#+JeDeAS71=D{s@yNz%9V-(k4f?CCDyG(%Z1Rki!c%k zWdRcO7q2q%K0hOLPAb_UrB1}fPI+2{$w9)8jfScV6X#3zB8M2wLzwe=B&Ln&J8zYT z-cHswel)N|4QI&8!Q^3Qy)^l>`F2JOC8{OmTZvdad$^{#xhchZ?ib!~k`5t!a9u04 zzzn8vJgV1PUPi0U@>6qtozErL+%=n+Ekv1sGiw)j303>1Oh6}6`47w9bCKJ=?#d2A zxi|ZQ8|rNR>!}hEx_%P9e*V1v=i%oEVgHH)|NCPq_#Zu|dKykAOgCLWr!EXxCqH7k zWmX4#{#`iA+m^<*T&<9M7)7DW&Q7P`-5~3Mfa9f5F%ojYa?`35C6S#+ws=5GE|6m> zMDCkFfHOf^X;OFwdror{jRaYoEPKr`W4|tkdpMgx&D&qs&$;9?_ zwmAA%t3Kzl2(B4_qbP>e(vI*U=Y|x~;h~mVE89c<6*(i-s=J3@-&@tuls0Zm!J#q^ zW2mhRkcoE+G0>rN*Lr7~{jhiNMF%8v-}tyzhi8SNu~SBc)_|rTS!4?J>Wn5uY{t*q ze{9b0h*xKLOVmxjteS5-+q0<^o$|cX7ir6;=g3(AJ|z&NA{Esip3T`L#3nYO5ZRff zbX{A$*gUdx>GLgkJkyQ(VR@+8>fU$P^ z)HSq($GtuRkKXC&r&V9MZ+Xnukxf!R^?XFEUeBaKIGHr~z~{rG97z&VUrqk*sm!!J z>1V{GbC?RP4__Bv)QKo+$FB`*e+a`yBGsa;|D1+IV=c`NeF~ha=k_u4!H3H+7LyM> z9NA3A(@0PL@>#Ns8!6BaS&mG9;luYWsX7+ZT|?7kg52m3qq^RaCR|m*qp)m^d(`OW z%qLzdCrN80w}p}(%<_ytVywx1i7@oc`5qiiHeh_2o^<#mzO>2kGD-h*fy<3puq`~w zvGdC@{|VL|pCnHEg=&tcT_~X+$E@qWswFQ>Ug$c9koAI7#UJLdze=W#CufCW09irx z?@G~_Y(HoELa~Oo<(#$GkjKhkz(?)TRHLNaJeh&GP{>tAuEE>e&v8<}9J)q5SRzPc zf^SXMY~!igFIn)r??L$#ydSC8RrJy@*-z8rw@mBbZa=_W)llv79m5%It;mhR1 z&GH4>tQvlsdrZID)^V)KxRJu#a6awHHd zsP#WJBRua`kG%r8|dh;+MfLi?-p{Z)ZfHj+)LTi2;Y{%Pi zvo>#u4dW$|Us!T+B~7HOz9y^pOPnbdSSTDy({5N2#*XnxAVh@T?9SUVT-}UKno?%^ z@;w%x`jVQHHOzryLM}@j9RHTe;5W*C-O5DYXPaouLI}!djIw!1(%_704vS_UhYPx! zvzNCr`_Q4@wOwA@pR^5DUp!q>Mp5`|X^3k|PHVDGzksnT5`&$S5VSXvU)(Sa+Z_`_GDh%SC z7nCz6QMi6X`7>n~EZnE|R}I{=EL@;rVclwp+KbSav$Rq4R8<3hqP(Q@2_5k4rn#86 z<J%b^(l_#KXZ=cX%twCG%w($*zq{28}$Fa!2Ndwy_{Fmyi;SqG4e z<9pw|6ei)WHQ%*KSkN!374(#TJ)K{i&c78S16=B%7M&k1G)&U#kT7v(Z>qAobZ%xj ze88#;33AREkn-43z&Y(d@%}LSNoff| zTgmg2z;uWep=c1UleFyPBEy`-w~Ef~c7t)DR6JMd1v?b88!|In`<;oB=|gb-ve#dB zgS4W3BL2-bxLNeCjRUZdAnzZ>0qf?dP zCl5yugMU&ZfN-D;;vSLT9dK=#Xk#Oy{xDVkA67@;kFx)&&W)w?dws5}{1f0uv;`p^ zz>R#|0YDX)wL8EV`?|W?*x;XkrT_#dPee<(e{a#B9DXs7fp|b1;kJKp`Xxd&s0YLv zkpkf6{-audh~%$20JXtjY%utm0H`g5E%Y-WfPK@F--LL5|FhQrG{-g1Upb^9?$GQ0 z0?Hd`YDnE@SA;rxK|Nqr5KawCN0_T8^rkmuq3%|0Fc%NF8vvml*A=?ap6iT=?uNO! zd&t;9+yFe>Kvl@EFqoSgXaKYJuyZ%Y<`xh{Wcp9vpDEYBhzt8aQT!J7D_!75XuriH zIP>vco4APYKj3jqdvk%VbNtNtM;!Mr-q-(vJUlLVW*$+^*&R`^C?Ht$6~7zPpb7LnizPjlGuK4JD#ae^DVQu0z+U z*C{_sMa29c$n7_M|5JMv47H66b^nsv-$iz0Dza;pxK@Dc>$>{a4ZaRv z|0Av&75PJr{!*%+3ie0*FWO(t2VsLjh&kv+E(qEDA=^LY^qXX__3S$Sn$aK91>MN@ z5BdL@>zAa3czJJfTueRG#akyejg7v z`4F_%t+?TN%@=X~`TegN_6IeB^1ssj;_^SF^9l0)rb__spY!H_8G1LVzsBCpO!ntk zz1FBdZ~i`zWnnfpP{dM*So@5zd4zzjo^Zs*FU;1?1F5UT-@icFTFV zv4K+VR@dt^A{MdeLR=J~*H!y@dtKOd+I3cJpb}zHf>}v9+d3kacWj`J2h>R)F|!L` z1Jz*e?ua?;X6C+8YoOsTHhern2(E}}9xjz!KAR${@pC7hn;R@7F8=49dzKzdQ|CTeU~F8k4$MQf7&qo_2}P^z z%mk&QcaN7OR0~Of1PKL|UJ_F=k^?I&F7pmRx{Cpo2vzE~iJ`28iLoOm3E?As6{q@! zvMjEQXO(9!BJ|u7Kh*|lyz8(hDIz|!RVQPo2;$*dVerfajKAD0C1U%W=7eW14A!+nVd+JHdgIymO8s&b{8UH zu`lJ`mt(%MhwNMtWvkB%+Y8K^%3Y>*8S;g`t$maB!+M3m*8)!M?AoG^u2HoeQ?T7L ziU;Zp*$NSVoUzrVv;T6iL(ekZF>638RslZy_!(ENWexqvpzS2hl`rY*kmgr>0m~Mz zWExIQ>cnp0J+&E9=|i&Axy7ZKT8Pah=!Xx9*qs$nHV>!27p*^^K*($gRasQ1Px=aO zmCUe&gs_0W)2E)@^xIex9o;e)m!4RwVR?2rJQD{G7Nxa)!@xsv==~kq^c>A*Ntwyz zDII2lx@C5Q4R)ou=q;+R^h`gM6&s6`*AF>zmZE%i5>-A5`>}!*rLhp5ac99{`p`ZZ zuSCH6`-uTFZ7Ru|PU#bcnUs!Xs+U(xQJzClW03&L$$o*=%RAF)vw7ke-{5U5T8Fs@OvE>&aD!Ucz7eiKiI58#xwAd5n!c9D` zWN_CNo*iZE3B;E1Ybqlhw!13UkNN?@)mvh)v%+aBxkUx-ck$#g) zuzNKmlOUvZG%n|KruW=g-V{Il*|zX>jh`?dA77BqsJs|hvlmNc8837D#umGMJEh)< zc*r0YIIJIeXDb^+IXR_pQI72G+Lw{M#Eamv2;Xetw&n5EbCOMKUSQ~u)46c;Ai z6;DFVn_OP0#8MN}Otr(gJ9=^odghWT+NA^9)KLbqYc|Wa>)aquu-<@vg_bSqU6PF_ z-(a7tZT515x_Du{(?bToO)ifQ_uH&|ZbOAdo zD=S1Hb^J*llH{2KAQp=8QxnZ#N;eOolcShgDVsovA4g~ru3f3-%6xfKCP22QSwpk3 z&=Z$koiY~I3hh)pW$#E)dXZG80RfnrCSEb_3K}T^YK@RlUl?y6x4p6_`ba1e?x}RZ zC}uZdTftTjjdcocqPP5LA3Oes*+BysUrw-YAMa|$J~|4?WYDWc{uYLg1XR}Goyf+A z-1l?G0ciS|X2CFyh(LML397+?0sC?%=(eG%ZLGc`j(hCNLaUueb4#XwGvHWLIsD}* zytH~|J(_cDuR4GFkf(v-&g|3E(AkX?ld`wi6)tm=MxX6US(`_s*IMjMB(=HfR?>J2 zKWl@m7#kTd{KbZd?06(T!0-2QM+O%xMPn!5tHNc=DJd<<9n%l|>Jz(f`ixe1peE#y zhLU0QPVJr+I@{uK;iR792sg-6Cy0h*6>ssjX>y=& znS21z*F~@I`9(ol7mcmC1b(?fAN~8{0#vc43=5lulSAjFY!F*nCY?lCX-YKTSM#{+ zyWG3f+Jgtn^9L}Rw~k485`SzRhd=g5A6e8RrVl29i%#W)E7MA*2b>=S&!d{^L2_(~f+D=NPs;tup3YJ*I`&5p@+20VT#LRd>re@RVpYmL|YN$q?GM z7X(hEoLxU&y-1q!*}|l}Lf_mevO4IlasDDhcj47GviQ|;ZM?mUPT?4iqR@!$Uu`#zc|x`XzBJ#iz6ym1(AGrn zcKWOJRI`ZAu{RssduwF^Be=M&_H^HM>!q$&H8T&7*j-L`jl4lZEcBeZ{DX)@yT=`B zHqg?+QT)S2?yvpJsXFqwm6fRb647^F=U+o1|GK9GzP5G$iLLnGpA~NmMG(T)Lp+8F z@c(Wl@*~W2g#GuA3`L&*W+#IA|C62gr)ek!lt!3`vOqbY0#FgCgfJAH+Wnv<3gg3cP_gezO99dpiE-Rv?&1faiBBP{%=4$ADTQ^=OX2l1!ypxM#Ff z^ogz{p>NZP^d1uSI=>Zj2)kykZVrQ|BO4eb#w;A6>`yu~f}54|(9R-J&6=wFSXcAT zvnGPtJNpe+Fm)v_E25YDs;Yy zxSJ@}_ki2co!0ZS?^2nxAyYTokN*BHZs3cF4)W)ky!ib>Tx|57K_g$s2|{J0i-7gc zwdCn_?vAIC)qD3(Ra-BIVgln!`ZBYs2rPg-MWUO`Pwvg9I5t{4bBz^4m&rE@N3VWd zHI806#M~YmHm|l>%sUBt!!($fU{J2AX53&DJEF^r*8`APjz!kIjV+H(@;KTK9b0D6 zjye4i!>HpMdUz3TLVokQDCM$clj)2cK~StmEKzJI?MpFv>-)9vmEZ$5U-tL=ZZC91 z>Z(!dbLds5si)9_E!pvwJ6T5p)NwSdQ2p%QbjiFJLEl0+B{HayhA&V9Nkh=JCyDVW zs{%oicqdvKdl@+aA0=o{!;t(}6jfwYx=YMmSlX?=rhO+C_(=hg$JIr&&2pM_9FGWYSH z4srJ>l4Raq)JYirAQ=30U5pa<*oTr`viV6?)~(PGCm0H_maeUtOn=co8{v9lnk}%( zS2&9Y&!f(GuJj59m{ornoPsVX%z^fiJ+fka^cExnyn=E!l$H2-hiYWog+R3Lcnaa- zNOON8!-$Jmv=4^EED!B47NGm3{p;PWCaq(V(1*eAAEf)atF0};Ut~5wj?pKo`v&|; zI?SW;<303^s8>9RDqb475g3Y8cY6{(4-FTOu;V7D?vLlr(xhrBz;S@^@&s;u|?0&2760Abdc(ZIP(LD zWC02`CsODKX&F0Crw}9iJ2jxmhdJTGFYlWY(baumXsJTwLsEJrj&ZEnGIhEduB+%c z)zP|B>tF$p$BI*EkxN_nx_X~8vLM6TGZvpiUlVRX5Rm$9Z+vx!gOmNE@)NTJhJ%kM zS}!^qbaIBQSu|pZ;aM*scES<#Zb_;c{q;_dDb@v* z`BG}rmFh%H<>s3C7xH(r<>V@Gu2zZ%e%SguxpNFYN9bdi_K{cxY^6^hpv!~AebB#Z zxzki9V%b6G=4_wP#3_=>BxACprhQwxjVjfV8Q~$Uvd4Iq32imeeHHiNx z+xhF8*!_>3+d|)|UZ0&P66v@2&wOB5F5f2VLG!O)^4X{v8<2Kyc9eCj$jp=exZ5-UHJGN-rwTW`V6cr1k33+Yqo@@;#f%K}`W3k0;f~Du5k3Kb~q?a|BD-DovzX&Addi&+3l$+4cGJe4;uD^j$Kd~056U+*JUAjBskOboQU$7SsJ2xl-gYkv~ zJ%OIi)=)QhE4UjJ=mqpfz%sr-KcFAf4gUMO%zbT*{D#il-2eYZXL$Mf1b$za4X|`c z3_evhZj=(;4^xkd^t#K+P>aP1P(hutHrKnYYpn;9l)cTMWRk#2;Atrv0}g4*d5ab$ zpP$o&nt;hb7~f;V0!xmPADa2vwwmpWrf#z;u_j?V9JJ6;R%-Ba=WOTI{6%Ht7^Om# zEW`H0r0BM!89t?`u4Ga;!&33nFU5}qmflH(jH3|+rsF^Ic%!ILX30iw-S>d1!{D^q zl7WdVD)ZG#qqnkLSz@+Nzvq>2g=F%bib~M#FBe){ zL)o>t-DM_N_2DxXl*wt$i{`+~D^)EL(&gmlcOnj2UYYOx=BZ!fT{a_8k*}exvYGa7ws-p0k`~SMxUiMT(b3@Z)O$~tOxv$pOD!EvDJ#uWIH{?I zI!P3y^3B?-x`KS6k8@^TJkw=_O37)}y|5cdc${maqr%E=e~&N1NZwcHlP*U?WNq#e zE8Refk@^p9uOzw^jiEwhRt$UaiXxh}y6$bhSnQ%z9r`35QsrjNXGtuD3L82&B~eL8 zP(`H@?-xo*k?E=wIy$Vx_G~@cUrG{_`1!Kjib;~VNL54RU|KjYq`xNERkCV)v(DUX zBK?9Nd#2{d@sw!o$yq~4eWOFx#A%rqKgR=h2)~-&1 zDhKIr&&IK_KIQIr5`9 z;2Q6Wn9H+x{>yE374r`(1r`*S4+P)?-!SHC;*_?1_0(ppb5Sam*1hUb{&8kI{INkz>gB;}HKA00@f{rVH%pX8k9OUwDUj1L z*2j;&WT-C(RZ1$cmMGSUOW5kH9u->a+}inKL9om-CNPlh;~m@NV<05tTE|@1yONe%y&p*W*%c352}bZ7ki8DGm3({J`D5M(i8w*O;;vt zmgu-ApI2*pm@?@b??(=zvb5rFh1uLaj!vuYc{28n@RPh@vAulV``O5dsrR=}a>?Jv zO5=(|%#pQ1hgMbP4ErbvmX=jTEa-1{odzS-olZY`R=mREj(_h+p)RD1rcDncYJ`(s zTHrLMAm*hD^8^aZIy;z;DxDBV2SXCod4Y%EEu`7Rem9h1f+?apD|-BMVhX=B1az#@ zjqLc4C5)@uJ8}y-VC3~QpQ6jHg5@C1$0zs=As?tcSDavKIja~^>_IvuSk@=E+NGq2 zg&JX+JsNsZ7%ZJalp#{c+NnC;qk{uX6@1S7hY~BFbQIgj3-Q!R1c2QgWDR8-ptwyiFaGzG*AinOwg#* zsE1|bo30a&puF16K4+j)c|NPms{J@z*Ag?t>}hu8xM~E$oLR{fU*5uC5+&S-;8f8M z&UV)HZVw6Rz2YgtF{C*l^Bz)nhWEp%&LeK^GgG-~<;Ju(IUhGu9#oI**+xH9rQp5n zC0{5cdd+AK(zAaoPr_ytI}c8gn>d9yyiOxn{@%1?a5)b#CDIZ*wqTza><4Ml?@oR* z)smxC=6f1ry!nb@Wnolw>MTNB_?s)~rs6KbrI`>E^Tx$ZE4@EH%^Cg*wcHofjrM+T|4PY9x!0u6QS@}B^0n@OQ5u1lzoALwWIbo0 zo?AyibR1LuLsKBJXW0oB8#pM-BK(1#{Uc82PpS`XjFBn7aZAhBzr}`t9k;^8W^tyY z3o=gHl>D1|6rTgZT*?cqEybj;8+N)O@bPHz7a%bR#-Kv*(>rj9>c>6_wd(3y-IV0}G z=Y=)=OgJKx<^8tL$AG@A^L$avNyHXa)s*IQhmtr#Y@ZWA++rB2NE6u^2i6a z6&YQD@Y1p-J>VJds_YKuH>S_8%iMrZI6Jas?oVU8yG>Y^2LkbHg74XWbvA!NEzC+M z>f)oZB6XzExWm|Mj+yNW3O-N5UKV}&*0YUZTzcE?hN!y=P(M_Lg51Jb9i3nU7qUUweI4c2xiuDCo#!Z8^xd5g)u97L#3qh0!pTZ>#Mn7l^b zWZ5d&@Gj%6VcpVsdct(oF|zmLhF|V6vf=Zd*t30VCMhH%DZKlI;ag{Ah}f3&>fWdB zY-%}{(UJg#*MhFgBcnhrnRp}kK{j7NILS9*pZ);1FWq%NipT6jG<*|F`RjU(!iq)1 zRXcHUg{K#?w3~TMm)qDzF>1Upedk-+)_@6Q=E=%PF zBQ+qqBxeox<4nz7_5v91;*Yn>0@z|2{Xi7 z8LKlqo^SqcJ7rgdV`v*zn{; z+b3Jbl+JYCs?&H&=>%DGcJs<2%HEs*IPK%}$bJOF z`Mi%y(auyY2+u=1v%umpd^t1Z)bEBt-|J$7a|aV9+4AW}py0eSW7dE%k-!|Zpj(2O zS(l5yQ(K`tW|n3!w2~{{fMtAjMp`1TEZHD^(h)s_8OV36RN*+uoS_k9^N|*t*IwcH zX?E+m=TNRZ>L~}9yibv5FZ{N1&LbEg7yDEoSZ=YP?4!WLoxAQE4KtDj2SO<~kef zNH^=br?iVOgz_1`EyX}|VsVtbNDbp%n(PKzVH+w9(t}gw3UNuO^{F&@WTZfb3xyuK z1Ke61~u-`9fzksmEWxG&UF`~U4dF;FiPMs;&yUi-^29KX%V?>ku()atS@&9PvW?Ol zX;}@K2RoSv7t6Yk**2CI6T-2Imb8S#-f;v}xojwiX!b{N(-nEFnLj3AID)Btlxa3f z4VL93uXFa(b$>xoh$+spbtKS$g)yC!j!{`1@J9B#ZA54s_o#OPTM9@O9@(}W-oMr{wPs`9X!XDOPxZKsa(%!viKn_@&G*8IH z!QF)WywnVdZ&|-zOq;}Wo>MBlzjCkFuH3gJQCq|V#9tY(L{t~Oiac5B)6bMkEMqMIiucWa)S6Gwjob*{Z(-3ig{+93Ey zPWQN@+SnxcgAnFLH%kJ*b%8_`!) zi)BwPJb^o^m*0F;)D*YeS z;@6ns5z-PmScQIA_5x43U9w#{O?IZeze9|3F4;;Cq&uMEP7r_ieWZ80xNLn*Kwof5 zL1EgsXX5-aKC^EnaxAHPv(%rifPlE)ao^)s(M5up$W^_`=V^}vN2g7aw5A-q42whW z+3F$usavLQ(D(Zn3WHpxLS9rgG!si=DWukn?Vz@^!~{o0Q; znKsm~WOC;__wuy2u*aUb0P=Xt{4XZJ1UxN~1gk)^P|~!| z;=MXniE{?!DF)J+sFgSn>Mx(nqc*xjrc_zXl&uKPq4e}}w1t`wFUoG+4cqF3;exv!v#tXv)2J0paJ zV7k)-bg>BpHM5t@eNRvoj=n#J`nj^oaGCC9m&4*g87JpNRbzi))t+fZa5$!I@t)$D zFXX#ez;|zq-f-T?-G@b9qdoLZCnhEsl{1j?i%D|U@hBrMGv~GgovB;McTxS&wxf;{ zHf4q}L(8I)(fE7b%JAZF&%KYG?=J$W ziIi34n~`~-KGjw+dqSzVB(Duzop_cInYZ;Vw*Ps!m~B-q*Adgy7z>H+CNbDw@#tNb ze5c^;#b!*A^GFo)IHh&|ZOm2Ig{K`@!B%)axDP3!`iUc*2=`NSqCX^^958(|mZ@Hk zGL-vzfp+HtGZ=G~!38tCl>ZX0zHk+Qy=cZ}`ZngNA$&YZ5d(q{Tl?kE=mJv*Bieb`+{X=SeF(#WvWon?Uu7 z?{S)1_b>=251?m95QjdxAiK2s^gcPqv+OKmFUR@kK#8(Ag3kL`Tt+>!QmOj8k#iIo z+nI?2%2@`sh0cn6QD(k%SoNQSHsi0JobJS{*BdXCj9l%9j70E^lberTSx=F}{f+UG zXK$-39$}rYyk@?S=^Qvcr8G#f84ZUWUcC#R!EQglElX>7EOa4j%$IBR@~OIa$x|-5 z3l!stjL0#AV6Y(HpXigQgb%_G2?5&yETOhAXEB!D z*4Hcmn6(&-0iPO3%|!-k2UGNOgX;LH>st9aSP5CPNQh&LNO-Plkv)F%~-y4;Nt| z(A(Ra%bSM_?q&-F3keAULEJ!YZcYRRr@ODS2gHZd+5Ik}yqk)^4FAmL?9O#lCoY7~ z77%6#1apCae-!iwREu~83*fq7h~@RGQWzM1aY4LALoXDGwpc|6CrT2Y%IC6hR}bhH$yH@s&mR zsf%-ixOq51f}CJMT@YB97c9)f#|aV;27yF@f1^b779y(*;{7a$_qF_ktiMtImKE-% zi|9jfTQ|6k4ZsTlrCy5;(L`=8-k&AjWcx)W3cMETZ;k$kVt}})sr}D_aB{jMh!3YF!ds3P0^%3sw-NfM zJz{P3XFXgz-5hU}&)NzIb%b6Q>5k|WFrp&XR>C%LHz$Y(Lj7G_5Ke|SFZBT;bc01) z6p`owL*V7&H>xe==|I+9G9;3fzBZMD-7>oDyT=Q=p0l!Ule~d5I|1!Mp zAzU=C)f%CS*NV+5D||gFK!RXF5SSNyGay(%AQl7}V&MEQ6u;D$^*<^2J#q102NrzX zpf(7%Ty7rhYt8!k0U+EAc=!M|fM0R^Jp2fE-0Kg(`BxlRP=E(XZ7h$A9@ zivxiWt^ofU2LcNsWb&_ZJVMt_w*MN3@J0T6Uc|8kgk$vI==g=e2&eLY$%{ahx&NJx zj~j8!;9uxKh@&!yEs}qYQ|oVZJVHGGR%bpTLBvkl-}xcDIQ|wV$o+5S zfhtn|PWCR8HWTj;heJ?K{CBP>oB?OY?mKKze6#xl< 2 ? (voidpf)malloc(items * size) : (voidpf)calloc(items, size); } -void ZLIB_INTERNAL zcfree(opaque, ptr) - voidpf opaque; - voidpf ptr; -{ +void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { (void)opaque; free(ptr); } diff --git a/src/zlib/zlib-1.2.13/zutil.h b/src/zlib/zlib-1.3/zutil.h similarity index 90% rename from src/zlib/zlib-1.2.13/zutil.h rename to src/zlib/zlib-1.3/zutil.h index 0bc7f4ecd..902a304cc 100644 --- a/src/zlib/zlib-1.2.13/zutil.h +++ b/src/zlib/zlib-1.3/zutil.h @@ -191,9 +191,9 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ /* provide prototypes for these when building zlib without LFS */ #if !defined(_WIN32) && \ (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0) - ZEXTERN uLong ZEXPORT adler32_combine64 OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine64 OF((uLong, uLong, z_off_t)); - ZEXTERN uLong ZEXPORT crc32_combine_gen64 OF((z_off_t)); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); #endif /* common defaults */ @@ -232,16 +232,16 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # define zmemzero(dest, len) memset(dest, 0, len) # endif #else - void ZLIB_INTERNAL zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); - int ZLIB_INTERNAL zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); - void ZLIB_INTERNAL zmemzero OF((Bytef* dest, uInt len)); + void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len); + int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len); + void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len); #endif /* Diagnostic functions */ #ifdef ZLIB_DEBUG # include extern int ZLIB_INTERNAL z_verbose; - extern void ZLIB_INTERNAL z_error OF((char *m)); + extern void ZLIB_INTERNAL z_error(char *m); # define Assert(cond,msg) {if(!(cond)) z_error(msg);} # define Trace(x) {if (z_verbose>=0) fprintf x ;} # define Tracev(x) {if (z_verbose>0) fprintf x ;} @@ -258,9 +258,9 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ #endif #ifndef Z_SOLO - voidpf ZLIB_INTERNAL zcalloc OF((voidpf opaque, unsigned items, - unsigned size)); - void ZLIB_INTERNAL zcfree OF((voidpf opaque, voidpf ptr)); + voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, + unsigned size); + void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr); #endif #define ZALLOC(strm, items, size) \

    -Without further adieu, here is the program zpipe.c: +Without further ado, here is the program zpipe.c:

    ;NwoV#%$9zuG;5R$LY^ZI{C;`tJB0f_h)W9 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 Jjldoe_#YBze|-P| literal 0 HcmV?d00001 diff --git a/src/sqlite/sqlite3-3.43.1-x86.dll b/src/sqlite/sqlite3-3.43.1-x86.dll new file mode 100755 index 0000000000000000000000000000000000000000..66280532c33a9b3690d9e7b045a4d7fa3d8b33d1 GIT binary patch literal 1147327 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 RK_)|CYN1oVN_Yt4;+cnWx=f_H>tfI#dMXx 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 z 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%0A0YOp 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%0D0yZQGVn9E^fK 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
    q&H$?4QdPJSd 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 z

    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%0DeQUW_doNY$E`w5rsc6#tQ-zOI3V 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%0Ai)-#OM+VtT1*WTgaH7`I5!%DGbmy~$S0z(p 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 z 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 +? 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

    !;m0t7S9lTg>VBCK$W^usThx{;-O7v>VS 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