Index | Thread | Search

From:
Rafael Sadowski <rafael@sizeofvoid.org>
Subject:
fix grpc-1.74.0: Check failed: static_cast<sizet>(size) <= sizeof(address)
To:
ports@openbsd.org
Date:
Fri, 1 Aug 2025 12:23:42 +0200

Download raw body.

Thread
  • Rafael Sadowski:

    fix grpc-1.74.0: Check failed: static_cast<sizet>(size) <= sizeof(address)

I saw the following assert:

bear --append --output ~/wip-src/compile_commands.json --force-wrapper -- make
WARNING: All log messages before absl::InitializeLog() is called are written to STDERR
F0000 00:00:1754041060.840315  558285 resolved_address.cc:32] Check failed: static_cast<sizet>(size) <= sizeof(address)

Here is a simple fix that uses sa_len if present.

OK?

Index: Makefile
===================================================================
RCS file: /cvs/ports/net/grpc/Makefile,v
diff -u -p -u -p -r1.8 Makefile
--- Makefile	27 Jul 2025 07:16:17 -0000	1.8
+++ Makefile	1 Aug 2025 10:20:26 -0000
@@ -5,6 +5,7 @@ COMMENT =	HTTP/2-based RPC framework
 
 V =		1.74.0
 DISTNAME =	grpc-${V}
+REVISION =	0
 
 DIST_TUPLE +=	github grpc grpc v${V} .
 
Index: patches/patch-src_core_lib_event_engine_resolved_address_cc
===================================================================
RCS file: patches/patch-src_core_lib_event_engine_resolved_address_cc
diff -N patches/patch-src_core_lib_event_engine_resolved_address_cc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_core_lib_event_engine_resolved_address_cc	1 Aug 2025 10:20:26 -0000
@@ -0,0 +1,18 @@
+Index: src/core/lib/event_engine/resolved_address.cc
+--- src/core/lib/event_engine/resolved_address.cc.orig
++++ src/core/lib/event_engine/resolved_address.cc
+@@ -29,8 +29,14 @@ EventEngine::ResolvedAddress::ResolvedAddress(const so
+                                               socklen_t size)
+     : size_(size) {
+   DCHECK_GE(size, 0u);
++#ifdef __OpenBSD__
++  socklen_t actual_size = address->sa_len > 0 ? address->sa_len : size;
++  CHECK(static_cast<size_t>(actual_size) <= sizeof(address_));
++  memcpy(&address_, address, actual_size);
++#else
+   CHECK(static_cast<size_t>(size) <= sizeof(address_));
+   memcpy(&address_, address, size);
++#endif
+ }
+ 
+ const struct sockaddr* EventEngine::ResolvedAddress::address() const {