diff options
Diffstat (limited to 'meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-kms-message-bump-libmongocrypto-to-v1.0.4.patch')
-rw-r--r-- | meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-kms-message-bump-libmongocrypto-to-v1.0.4.patch | 714 |
1 files changed, 714 insertions, 0 deletions
diff --git a/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-kms-message-bump-libmongocrypto-to-v1.0.4.patch b/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-kms-message-bump-libmongocrypto-to-v1.0.4.patch new file mode 100644 index 0000000000..df4cee2b42 --- /dev/null +++ b/meta-oe/dynamic-layers/meta-python/recipes-dbs/mongodb/mongodb/0001-kms-message-bump-libmongocrypto-to-v1.0.4.patch @@ -0,0 +1,714 @@ +From 44272ce47e768e090263df5cb9cb7ce17e544ad3 Mon Sep 17 00:00:00 2001 +From: Vincent Prince <vincent.prince.external@saftbatteries.com> +Date: Tue, 15 Sep 2020 11:40:15 +0200 +Subject: [PATCH] kms-message: bump libmongocrypto to v1.0.4 + +This fixes compilation with alpinelinux +see https://github.com/mongodb/libmongocrypt/pull/89 + +Upstream-Status: Pending + +Signed-off-by: Vincent Prince <vincent.prince.fr@gmail.com> +--- + .../kms-message/THIRD_PARTY_NOTICES | 2 +- + src/third_party/kms-message/src/hexlify.c | 21 +---- + src/third_party/kms-message/src/hexlify.h | 2 - + .../kms-message/src/kms_crypto_apple.c | 5 + + .../kms-message/src/kms_crypto_libcrypto.c | 94 +++++++++++++++++++ + .../kms-message/src/kms_crypto_none.c | 4 + + .../kms-message/src/kms_crypto_windows.c | 4 + + .../kms-message/src/kms_decrypt_request.c | 2 +- + .../kms-message/src/kms_encrypt_request.c | 2 +- + src/third_party/kms-message/src/kms_kv_list.c | 11 ++- + .../kms-message/src/kms_message/kms_message.h | 2 + + .../src/kms_message/kms_message_defines.h | 10 ++ + src/third_party/kms-message/src/kms_port.c | 33 +++++++ + src/third_party/kms-message/src/kms_port.h | 27 +++--- + src/third_party/kms-message/src/kms_request.c | 41 +++++--- + .../kms-message/src/kms_request_str.c | 13 ++- + .../kms-message/src/kms_request_str.h | 5 - + .../kms-message/src/kms_response_parser.c | 26 ++++- + .../scripts/kms_message_get_sources.sh | 2 +- + 19 files changed, 244 insertions(+), 62 deletions(-) + create mode 100644 src/third_party/kms-message/src/kms_crypto_libcrypto.c + create mode 100644 src/third_party/kms-message/src/kms_port.c + +diff --git a/src/third_party/kms-message/THIRD_PARTY_NOTICES b/src/third_party/kms-message/THIRD_PARTY_NOTICES +index 3fc095170c..4110c1b91e 100644 +--- a/src/third_party/kms-message/THIRD_PARTY_NOTICES ++++ b/src/third_party/kms-message/THIRD_PARTY_NOTICES +@@ -1,4 +1,4 @@ +-License notice for common-b64.c ++License notice for kms_b64.c + ------------------------------------------------------------------------------- + + ISC License +diff --git a/src/third_party/kms-message/src/hexlify.c b/src/third_party/kms-message/src/hexlify.c +index be9ee030b9..941fc93d1b 100644 +--- a/src/third_party/kms-message/src/hexlify.c ++++ b/src/third_party/kms-message/src/hexlify.c +@@ -24,6 +24,8 @@ char * + hexlify (const uint8_t *buf, size_t len) + { + char *hex_chars = malloc (len * 2 + 1); ++ KMS_ASSERT (hex_chars); ++ + char *p = hex_chars; + size_t i; + +@@ -35,22 +37,3 @@ hexlify (const uint8_t *buf, size_t len) + + return hex_chars; + } +- +-uint8_t * +-unhexlify (const char *hex_chars, size_t *len) +-{ +- uint8_t *buf; +- uint8_t *pos; +- +- *len = strlen (hex_chars) / 2; +- buf = malloc (*len); +- pos = buf; +- +- while (*hex_chars) { +- KMS_ASSERT (1 == sscanf (hex_chars, "%2hhx", pos)); +- pos++; +- hex_chars += 2; +- } +- +- return buf; +-} +diff --git a/src/third_party/kms-message/src/hexlify.h b/src/third_party/kms-message/src/hexlify.h +index e0096eb6ca..a6a504ebe8 100644 +--- a/src/third_party/kms-message/src/hexlify.h ++++ b/src/third_party/kms-message/src/hexlify.h +@@ -19,5 +19,3 @@ + + char * + hexlify (const uint8_t *buf, size_t len); +-uint8_t * +-unhexlify (const char *hex_chars, size_t *len); +diff --git a/src/third_party/kms-message/src/kms_crypto_apple.c b/src/third_party/kms-message/src/kms_crypto_apple.c +index 61da0a6288..a26e0d65e8 100644 +--- a/src/third_party/kms-message/src/kms_crypto_apple.c ++++ b/src/third_party/kms-message/src/kms_crypto_apple.c +@@ -16,9 +16,12 @@ + + #include "kms_crypto.h" + ++#ifdef KMS_MESSAGE_ENABLE_CRYPTO_COMMON_CRYPTO ++ + #include <CommonCrypto/CommonDigest.h> + #include <CommonCrypto/CommonHMAC.h> + ++ + int + kms_crypto_init () + { +@@ -54,3 +57,5 @@ kms_sha256_hmac (void *unused_ctx, + CCHmac (kCCHmacAlgSHA256, key_input, key_len, input, len, hash_out); + return true; + } ++ ++#endif /* KMS_MESSAGE_ENABLE_CRYPTO_COMMON_CRYPTO */ +diff --git a/src/third_party/kms-message/src/kms_crypto_libcrypto.c b/src/third_party/kms-message/src/kms_crypto_libcrypto.c +new file mode 100644 +index 0000000000..6f25657fdd +--- /dev/null ++++ b/src/third_party/kms-message/src/kms_crypto_libcrypto.c +@@ -0,0 +1,94 @@ ++/* ++ * Copyright 2018-present MongoDB, Inc. ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++#include "kms_crypto.h" ++ ++#ifdef KMS_MESSAGE_ENABLE_CRYPTO_LIBCRYPTO ++ ++#include <openssl/sha.h> ++#include <openssl/evp.h> ++#include <openssl/hmac.h> ++ ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || \ ++ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x20700000L) ++static EVP_MD_CTX * ++EVP_MD_CTX_new (void) ++{ ++ return calloc (sizeof (EVP_MD_CTX), 1); ++} ++ ++static void ++EVP_MD_CTX_free (EVP_MD_CTX *ctx) ++{ ++ EVP_MD_CTX_cleanup (ctx); ++ free (ctx); ++} ++#endif ++ ++int ++kms_crypto_init () ++{ ++ return 0; ++} ++ ++void ++kms_crypto_cleanup () ++{ ++} ++ ++bool ++kms_sha256 (void *unused_ctx, ++ const char *input, ++ size_t len, ++ unsigned char *hash_out) ++{ ++ EVP_MD_CTX *digest_ctxp = EVP_MD_CTX_new (); ++ bool rval = false; ++ ++ if (1 != EVP_DigestInit_ex (digest_ctxp, EVP_sha256 (), NULL)) { ++ goto cleanup; ++ } ++ ++ if (1 != EVP_DigestUpdate (digest_ctxp, input, len)) { ++ goto cleanup; ++ } ++ ++ rval = (1 == EVP_DigestFinal_ex (digest_ctxp, hash_out, NULL)); ++ ++cleanup: ++ EVP_MD_CTX_free (digest_ctxp); ++ ++ return rval; ++} ++ ++bool ++kms_sha256_hmac (void *unused_ctx, ++ const char *key_input, ++ size_t key_len, ++ const char *input, ++ size_t len, ++ unsigned char *hash_out) ++{ ++ return HMAC (EVP_sha256 (), ++ key_input, ++ key_len, ++ (unsigned char *) input, ++ len, ++ hash_out, ++ NULL) != NULL; ++} ++ ++#endif /* KMS_MESSAGE_ENABLE_CRYPTO_LIBCRYPTO */ +diff --git a/src/third_party/kms-message/src/kms_crypto_none.c b/src/third_party/kms-message/src/kms_crypto_none.c +index 9ef2147687..94da5abd88 100644 +--- a/src/third_party/kms-message/src/kms_crypto_none.c ++++ b/src/third_party/kms-message/src/kms_crypto_none.c +@@ -16,6 +16,8 @@ + + #include "kms_crypto.h" + ++#ifndef KMS_MESSAGE_ENABLE_CRYPTO ++ + int + kms_crypto_init () + { +@@ -48,3 +50,5 @@ kms_sha256_hmac (void *unused_ctx, + /* only gets called if hooks were mistakenly not set */ + return false; + } ++ ++#endif /* KMS_MESSAGE_ENABLE_CRYPTO */ +diff --git a/src/third_party/kms-message/src/kms_crypto_windows.c b/src/third_party/kms-message/src/kms_crypto_windows.c +index ccdc7e095d..8177b0ddc0 100644 +--- a/src/third_party/kms-message/src/kms_crypto_windows.c ++++ b/src/third_party/kms-message/src/kms_crypto_windows.c +@@ -16,6 +16,8 @@ + + #include "kms_crypto.h" + ++#ifdef KMS_MESSAGE_ENABLE_CRYPTO_CNG ++ + // tell windows.h not to include a bunch of headers we don't need: + #define WIN32_LEAN_AND_MEAN + +@@ -130,3 +132,5 @@ cleanup: + + return status == STATUS_SUCCESS ? 1 : 0; + } ++ ++#endif /* KMS_MESSAGE_ENABLE_CRYPTO_CNG */ +diff --git a/src/third_party/kms-message/src/kms_decrypt_request.c b/src/third_party/kms-message/src/kms_decrypt_request.c +index 06faa43119..f1ca282768 100644 +--- a/src/third_party/kms-message/src/kms_decrypt_request.c ++++ b/src/third_party/kms-message/src/kms_decrypt_request.c +@@ -48,7 +48,7 @@ kms_decrypt_request_new (const uint8_t *ciphertext_blob, + if (!(b64 = malloc (b64_len))) { + KMS_ERROR (request, + "Could not allocate %d bytes for base64-encoding payload", +- b64_len); ++ (int) b64_len); + goto done; + } + +diff --git a/src/third_party/kms-message/src/kms_encrypt_request.c b/src/third_party/kms-message/src/kms_encrypt_request.c +index b5f4d6436e..24b064d95f 100644 +--- a/src/third_party/kms-message/src/kms_encrypt_request.c ++++ b/src/third_party/kms-message/src/kms_encrypt_request.c +@@ -47,7 +47,7 @@ kms_encrypt_request_new (const uint8_t *plaintext, + if (!(b64 = malloc (b64_len))) { + KMS_ERROR (request, + "Could not allocate %d bytes for base64-encoding payload", +- b64_len); ++ (int) b64_len); + goto done; + } + +diff --git a/src/third_party/kms-message/src/kms_kv_list.c b/src/third_party/kms-message/src/kms_kv_list.c +index 2d6845a1aa..0cff3dc2c6 100644 +--- a/src/third_party/kms-message/src/kms_kv_list.c ++++ b/src/third_party/kms-message/src/kms_kv_list.c +@@ -17,6 +17,7 @@ + + #include "kms_kv_list.h" + #include "kms_message/kms_message.h" ++#include "kms_message_private.h" + #include "kms_request_str.h" + #include "kms_port.h" + #include "sort.h" +@@ -39,9 +40,12 @@ kms_kv_list_t * + kms_kv_list_new (void) + { + kms_kv_list_t *lst = malloc (sizeof (kms_kv_list_t)); ++ KMS_ASSERT (lst); + + lst->size = 16; + lst->kvs = malloc (lst->size * sizeof (kms_kv_t)); ++ KMS_ASSERT (lst->kvs); ++ + lst->len = 0; + + return lst; +@@ -72,6 +76,7 @@ kms_kv_list_add (kms_kv_list_t *lst, + if (lst->len == lst->size) { + lst->size *= 2; + lst->kvs = realloc (lst->kvs, lst->size * sizeof (kms_kv_t)); ++ KMS_ASSERT (lst->kvs); + } + + kv_init (&lst->kvs[lst->len], key, value); +@@ -84,7 +89,7 @@ kms_kv_list_find (const kms_kv_list_t *lst, const char *key) + size_t i; + + for (i = 0; i < lst->len; i++) { +- if (0 == strcasecmp (lst->kvs[i].key->str, key)) { ++ if (0 == kms_strcasecmp (lst->kvs[i].key->str, key)) { + return &lst->kvs[i]; + } + } +@@ -119,8 +124,12 @@ kms_kv_list_dup (const kms_kv_list_t *lst) + } + + dup = malloc (sizeof (kms_kv_list_t)); ++ KMS_ASSERT (dup); ++ + dup->size = dup->len = lst->len; + dup->kvs = malloc (lst->len * sizeof (kms_kv_t)); ++ KMS_ASSERT (dup->kvs); ++ + + for (i = 0; i < lst->len; i++) { + kv_init (&dup->kvs[i], lst->kvs[i].key, lst->kvs[i].value); +diff --git a/src/third_party/kms-message/src/kms_message/kms_message.h b/src/third_party/kms-message/src/kms_message/kms_message.h +index 6ea95dd04c..8048528f2e 100644 +--- a/src/third_party/kms-message/src/kms_message/kms_message.h ++++ b/src/third_party/kms-message/src/kms_message/kms_message.h +@@ -17,6 +17,8 @@ + #ifndef KMS_MESSAGE_H + #define KMS_MESSAGE_H + ++#include <sys/types.h> ++ + #include "kms_message_defines.h" + #include "kms_request_opt.h" + #include "kms_request.h" +diff --git a/src/third_party/kms-message/src/kms_message/kms_message_defines.h b/src/third_party/kms-message/src/kms_message/kms_message_defines.h +index a4d019bd77..a539d531ef 100644 +--- a/src/third_party/kms-message/src/kms_message/kms_message_defines.h ++++ b/src/third_party/kms-message/src/kms_message/kms_message_defines.h +@@ -53,4 +53,14 @@ kms_message_cleanup (void); + } /* extern "C" */ + #endif + ++#ifdef _MSC_VER ++#include <basetsd.h> ++#pragma warning(disable : 4142) ++#ifndef _SSIZE_T_DEFINED ++#define _SSIZE_T_DEFINED ++typedef SSIZE_T ssize_t; ++#endif ++#pragma warning(default : 4142) ++#endif ++ + #endif /* KMS_MESSAGE_DEFINES_H */ +diff --git a/src/third_party/kms-message/src/kms_port.c b/src/third_party/kms-message/src/kms_port.c +new file mode 100644 +index 0000000000..ee9e6ed9c9 +--- /dev/null ++++ b/src/third_party/kms-message/src/kms_port.c +@@ -0,0 +1,33 @@ ++/* ++ * Copyright 2020-present MongoDB, Inc. ++ * ++ * Licensed under the Apache License, Version 2.0 (the "License"); ++ * you may not use this file except in compliance with the License. ++ * You may obtain a copy of the License at ++ * ++ * http://www.apache.org/licenses/LICENSE-2.0 ++ * ++ * Unless required by applicable law or agreed to in writing, software ++ * distributed under the License is distributed on an "AS IS" BASIS, ++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ * See the License for the specific language governing permissions and ++ * limitations under the License. ++ */ ++ ++#include "kms_port.h" ++#if defined(_WIN32) ++#include <stdlib.h> ++#include <string.h> ++char * kms_strndup (const char *src, size_t len) ++{ ++ char *dst = (char *) malloc (len + 1); ++ if (!dst) { ++ return 0; ++ } ++ ++ memcpy (dst, src, len); ++ dst[len] = '\0'; ++ ++ return dst; ++} ++#endif +\ No newline at end of file +diff --git a/src/third_party/kms-message/src/kms_port.h b/src/third_party/kms-message/src/kms_port.h +index c3cbbac369..2123a99dc9 100644 +--- a/src/third_party/kms-message/src/kms_port.h ++++ b/src/third_party/kms-message/src/kms_port.h +@@ -15,21 +15,18 @@ + * limitations under the License. + */ + +-#if defined(_WIN32) +-#define strcasecmp _stricmp +- +-inline char * +-strndup (const char *src, size_t len) +-{ +- char *dst = (char *) malloc (len + 1); +- if (!dst) { +- return 0; +- } +- +- memcpy (dst, src, len); +- dst[len] = '\0'; ++#ifndef KMS_PORT_H ++#define KMS_PORT_H + +- return dst; +-} ++#include <stddef.h> + ++#if defined(_WIN32) ++#define kms_strcasecmp _stricmp ++char * ++kms_strndup (const char *src, size_t len); ++#else ++#define kms_strndup strndup ++#define kms_strcasecmp strcasecmp + #endif ++ ++#endif /* KMS_PORT_H */ +\ No newline at end of file +diff --git a/src/third_party/kms-message/src/kms_request.c b/src/third_party/kms-message/src/kms_request.c +index fa2d487123..ac2b07ea6b 100644 +--- a/src/third_party/kms-message/src/kms_request.c ++++ b/src/third_party/kms-message/src/kms_request.c +@@ -61,6 +61,7 @@ kms_request_new (const char *method, + kms_request_t *request = calloc (1, sizeof (kms_request_t)); + const char *question_mark; + ++ KMS_ASSERT (request); + /* parsing may set failed to true */ + request->failed = false; + +@@ -92,10 +93,14 @@ kms_request_new (const char *method, + request->header_fields = kms_kv_list_new (); + request->auto_content_length = true; + +- kms_request_set_date (request, NULL); ++ if (!kms_request_set_date (request, NULL)) { ++ return request; ++ } + + if (opt && opt->connection_close) { +- kms_request_add_header_field (request, "Connection", "close"); ++ if (!kms_request_add_header_field (request, "Connection", "close")) { ++ return request; ++ } + } + + if (opt && opt->crypto.sha256) { +@@ -164,7 +169,9 @@ kms_request_set_date (kms_request_t *request, const struct tm *tm) + kms_request_str_set_chars (request->date, buf, sizeof "YYYYmmDD" - 1); + kms_request_str_set_chars (request->datetime, buf, sizeof AMZ_DT_FORMAT - 1); + kms_kv_list_del (request->header_fields, "X-Amz-Date"); +- kms_request_add_header_field (request, "X-Amz-Date", buf); ++ if (!kms_request_add_header_field (request, "X-Amz-Date", buf)) { ++ return false; ++ } + + return true; + } +@@ -309,7 +316,8 @@ append_canonical_headers (kms_kv_list_t *lst, kms_request_str_t *str) + * values in headers that have multiple values." */ + for (i = 0; i < lst->len; i++) { + kv = &lst->kvs[i]; +- if (previous_key && 0 == strcasecmp (previous_key->str, kv->key->str)) { ++ if (previous_key && ++ 0 == kms_strcasecmp (previous_key->str, kv->key->str)) { + /* duplicate header */ + kms_request_str_append_char (str, ','); + kms_request_str_append_stripped (str, kv->value); +@@ -339,12 +347,13 @@ append_signed_headers (kms_kv_list_t *lst, kms_request_str_t *str) + + for (i = 0; i < lst->len; i++) { + kv = &lst->kvs[i]; +- if (previous_key && 0 == strcasecmp (previous_key->str, kv->key->str)) { ++ if (previous_key && ++ 0 == kms_strcasecmp (previous_key->str, kv->key->str)) { + /* duplicate header */ + continue; + } + +- if (0 == strcasecmp (kv->key->str, "connection")) { ++ if (0 == kms_strcasecmp (kv->key->str, "connection")) { + continue; + } + +@@ -412,7 +421,8 @@ finalize (kms_request_t *request) + static int + cmp_header_field_names (const void *a, const void *b) + { +- return strcasecmp (((kms_kv_t *) a)->key->str, ((kms_kv_t *) b)->key->str); ++ return kms_strcasecmp (((kms_kv_t *) a)->key->str, ++ ((kms_kv_t *) b)->key->str); + } + + static kms_kv_list_t * +@@ -447,6 +457,7 @@ kms_request_get_canonical (kms_request_t *request) + kms_request_str_append_newline (canonical); + normalized = kms_request_str_path_normalized (request->path); + kms_request_str_append_escaped (canonical, normalized, false); ++ kms_request_str_destroy (normalized); + kms_request_str_append_newline (canonical); + append_canonical_query (request, canonical); + kms_request_str_append_newline (canonical); +@@ -454,12 +465,14 @@ kms_request_get_canonical (kms_request_t *request) + append_canonical_headers (lst, canonical); + kms_request_str_append_newline (canonical); + append_signed_headers (lst, canonical); +- kms_request_str_append_newline (canonical); +- kms_request_str_append_hashed ( +- &request->crypto, canonical, request->payload); +- +- kms_request_str_destroy (normalized); + kms_kv_list_destroy (lst); ++ kms_request_str_append_newline (canonical); ++ if (!kms_request_str_append_hashed ( ++ &request->crypto, canonical, request->payload)) { ++ KMS_ERROR (request, "could not generate hash"); ++ kms_request_str_destroy (canonical); ++ return NULL; ++ } + + return kms_request_str_detach (canonical); + } +@@ -514,6 +527,10 @@ kms_request_get_string_to_sign (kms_request_t *request) + kms_request_str_append_chars (sts, "/aws4_request\n", -1); + + creq = kms_request_str_wrap (kms_request_get_canonical (request), -1); ++ if (!creq) { ++ goto done; ++ } ++ + if (!kms_request_str_append_hashed (&request->crypto, sts, creq)) { + goto done; + } +diff --git a/src/third_party/kms-message/src/kms_request_str.c b/src/third_party/kms-message/src/kms_request_str.c +index 0f7c19c972..65207d2f4f 100644 +--- a/src/third_party/kms-message/src/kms_request_str.c ++++ b/src/third_party/kms-message/src/kms_request_str.c +@@ -51,10 +51,13 @@ kms_request_str_t * + kms_request_str_new (void) + { + kms_request_str_t *s = malloc (sizeof (kms_request_str_t)); ++ KMS_ASSERT (s); + + s->len = 0; + s->size = 16; + s->str = malloc (s->size); ++ KMS_ASSERT (s->str); ++ + s->str[0] = '\0'; + + return s; +@@ -64,11 +67,15 @@ kms_request_str_t * + kms_request_str_new_from_chars (const char *chars, ssize_t len) + { + kms_request_str_t *s = malloc (sizeof (kms_request_str_t)); ++ KMS_ASSERT (s); ++ + size_t actual_len; + + actual_len = len < 0 ? strlen (chars) : (size_t) len; + s->size = actual_len + 1; + s->str = malloc (s->size); ++ KMS_ASSERT (s->str); ++ + memcpy (s->str, chars, actual_len); + s->str[actual_len] = '\0'; + s->len = actual_len; +@@ -86,6 +93,8 @@ kms_request_str_wrap (char *chars, ssize_t len) + } + + s = malloc (sizeof (kms_request_str_t)); ++ KMS_ASSERT (s); ++ + + s->str = chars; + s->len = len < 0 ? strlen (chars) : (size_t) len; +@@ -148,8 +157,10 @@ kms_request_str_t * + kms_request_str_dup (kms_request_str_t *str) + { + kms_request_str_t *dup = malloc (sizeof (kms_request_str_t)); ++ KMS_ASSERT (dup); ++ + +- dup->str = strndup (str->str, str->len); ++ dup->str = kms_strndup (str->str, str->len); + dup->len = str->len; + dup->size = str->len + 1; + +diff --git a/src/third_party/kms-message/src/kms_request_str.h b/src/third_party/kms-message/src/kms_request_str.h +index f053a595aa..0898f59067 100644 +--- a/src/third_party/kms-message/src/kms_request_str.h ++++ b/src/third_party/kms-message/src/kms_request_str.h +@@ -25,11 +25,6 @@ + #include <stdint.h> + #include <string.h> + +-#if defined(_WIN32) +-#include <basetsd.h> +-typedef SSIZE_T ssize_t; +-#endif // _WIN32 +- + typedef struct { + char *str; + size_t len; +diff --git a/src/third_party/kms-message/src/kms_response_parser.c b/src/third_party/kms-message/src/kms_response_parser.c +index 31e4868a68..6f86fac854 100644 +--- a/src/third_party/kms-message/src/kms_response_parser.c ++++ b/src/third_party/kms-message/src/kms_response_parser.c +@@ -1,7 +1,7 @@ + #include "kms_message/kms_response_parser.h" + #include "kms_message_private.h" + +-#include "kms_message_private.h" ++#include <errno.h> + #include <limits.h> + #include <stdio.h> + #include <stdlib.h> +@@ -24,6 +24,7 @@ _parser_init (kms_response_parser_t *parser) + parser->raw_response = kms_request_str_new (); + parser->content_length = -1; + parser->response = calloc (1, sizeof (kms_response_t)); ++ KMS_ASSERT (parser->response); + parser->response->headers = kms_kv_list_new (); + parser->state = PARSING_STATUS_LINE; + parser->start = 0; +@@ -34,6 +35,8 @@ kms_response_parser_t * + kms_response_parser_new (void) + { + kms_response_parser_t *parser = malloc (sizeof (kms_response_parser_t)); ++ KMS_ASSERT (parser); ++ + _parser_init (parser); + return parser; + } +@@ -59,11 +62,26 @@ static bool + _parse_int (const char *str, int *result) + { + char *endptr = NULL; ++ int64_t long_result; + +- *result = (int) strtol (str, &endptr, 10); +- if (*endptr) { ++ errno = 0; ++ long_result = strtol (str, &endptr, 10); ++ if (endptr == str) { ++ /* No digits were parsed. Consider this an error */ ++ return false; ++ } ++ if (endptr != NULL && *endptr != '\0') { ++ /* endptr points to the first invalid character. */ ++ return false; ++ } ++ if (errno == EINVAL || errno == ERANGE) { ++ return false; ++ } ++ if (long_result > INT32_MAX || long_result < INT32_MIN) { + return false; + } ++ *result = (int) long_result; ++ + return true; + } + +@@ -72,6 +90,8 @@ static bool + _parse_int_from_view (const char *str, int start, int end, int *result) + { + char *num_str = malloc (end - start + 1); ++ KMS_ASSERT (num_str); ++ + bool ret; + + strncpy (num_str, str + start, end - start); +diff --git a/src/third_party/scripts/kms_message_get_sources.sh b/src/third_party/scripts/kms_message_get_sources.sh +index 6ad2fbb0e6..52ce21b9dd 100755 +--- a/src/third_party/scripts/kms_message_get_sources.sh ++++ b/src/third_party/scripts/kms_message_get_sources.sh +@@ -18,7 +18,7 @@ if grep -q Microsoft /proc/version; then + fi + + NAME=libmongocrypt +-REVISION=59c8c17bbdfa1cf0fdec60cfdde73a437a868221 ++REVISION=052f7fc610f0cea83a2adf3dd263a5ff04833371 + + if grep -q Microsoft /proc/version; then + SRC_ROOT=$(wslpath -u $(powershell.exe -Command "Get-ChildItem Env:TEMP | Get-Content | Write-Host")) +-- +2.24.0 + |