1
0
Fork 0
mirror of https://gitlab.alpinelinux.org/alpine/aports.git synced 2025-07-21 18:25:41 +03:00
aports/community/s2geometry/fix-newer-openssl.patch
2021-04-16 11:09:17 +00:00

43 lines
1.5 KiB
Diff

From c33eb5451ff9fec97fc16a711a3b0e0e70a145bb Mon Sep 17 00:00:00 2001
From: Rinigus <rinigus.git@gmail.com>
Date: Sat, 21 Nov 2020 15:42:30 +0200
Subject: [PATCH] Build fixes for newer OpenSSL
Taken from https://github.com/rethinkdb/rethinkdb pull 6407
---
src/s2/util/math/exactfloat/exactfloat.cc | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/src/s2/util/math/exactfloat/exactfloat.cc b/src/s2/util/math/exactfloat/exactfloat.cc
index 25c6599..559aae0 100644
--- a/src/s2/util/math/exactfloat/exactfloat.cc
+++ b/src/s2/util/math/exactfloat/exactfloat.cc
@@ -96,15 +96,22 @@ inline static void BN_ext_set_uint64(BIGNUM* bn, uint64 v) {
// Return the absolute value of a BIGNUM as a 64-bit unsigned integer.
// Requires that BIGNUM fits into 64 bits.
inline static uint64 BN_ext_get_uint64(const BIGNUM* bn) {
- S2_DCHECK_LE(BN_num_bytes(bn), sizeof(uint64));
+ int num_bytes = BN_num_bytes(bn);
+ S2_DCHECK_LE(num_bytes, 8);
#if BN_BITS2 == 64
return BN_get_word(bn);
#else
- static_assert(BN_BITS2 == 32, "at least 32 bit openssl build needed");
- if (bn->top == 0) return 0;
- if (bn->top == 1) return BN_get_word(bn);
- S2_DCHECK_EQ(bn->top, 2);
- return (static_cast<uint64>(bn->d[1]) << 32) + bn->d[0];
+ std::unique_ptr<unsigned char[]> buf(new unsigned char[num_bytes]);
+ int res = BN_bn2bin(bn, buf.get());
+ S2_DCHECK_EQ(num_bytes, res);
+
+ uint64_t ret = 0;
+ for (int i = 0; i < res; ++i) {
+ ret = ret * 256;
+ ret += buf[i];
+ }
+
+ return ret;
#endif
}