Skip to content

Guard src/ipcrypt.c against libsodium < 1.0.21#125

Open
devrimgunduz wants to merge 1 commit into
michelp:mainfrom
devrimgunduz:main
Open

Guard src/ipcrypt.c against libsodium < 1.0.21#125
devrimgunduz wants to merge 1 commit into
michelp:mainfrom
devrimgunduz:main

Conversation

@devrimgunduz

Copy link
Copy Markdown

The ipcrypt API (crypto_ipcrypt_*, sodium_ip2bin, sodium_bin2ip) was introduced in libsodium 1.0.21. Systems shipping an older libsodium (e.g. RHEL 8/9 with libsodium-1.0.18 from EPEL) lack the header <sodium/crypto_ipcrypt.h> entirely, causing the build to fail with "undeclared identifier / implicit function declaration" errors for every symbol in src/ipcrypt.c.

Fix: wrap the entire implementation in a __has_include() guard (__has_include is supported by both GCC and Clang). When the header is present the code compiles unchanged. When it is absent, thin error- stub wrappers are compiled instead; they satisfy the linker, allow the extension to install, and raise ERRCODE_FEATURE_NOT_SUPPORTED at runtime with a clear "requires libsodium >= 1.0.21" message.

Coded by Claude, tested by me.

The ipcrypt API (crypto_ipcrypt_*, sodium_ip2bin, sodium_bin2ip) was
introduced in libsodium 1.0.21.  Systems shipping an older libsodium
(e.g. RHEL 8/9 with libsodium-1.0.18 from EPEL) lack the header
<sodium/crypto_ipcrypt.h> entirely, causing the build to fail with
"undeclared identifier / implicit function declaration" errors for
every symbol in src/ipcrypt.c.

Fix: wrap the entire implementation in a __has_include() guard
(__has_include is supported by both GCC and Clang).  When the header
is present the code compiles unchanged.  When it is absent, thin error-
stub wrappers are compiled instead; they satisfy the linker, allow the
extension to install, and raise ERRCODE_FEATURE_NOT_SUPPORTED at
runtime with a clear "requires libsodium >= 1.0.21" message.

Coded by Claude, tested by me.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant