Skip to content

Fix broken OpenSSL version check for IPv6 proxy in check_proxy() (#3095) [3.2]#3101

Merged
drwetter merged 1 commit into
testssl:3.2from
ericcgu:fix/3095-ipv6-proxy-bad-substitution-3.2
Jul 15, 2026
Merged

Fix broken OpenSSL version check for IPv6 proxy in check_proxy() (#3095) [3.2]#3101
drwetter merged 1 commit into
testssl:3.2from
ericcgu:fix/3095-ipv6-proxy-bad-substitution-3.2

Conversation

@ericcgu

@ericcgu ericcgu commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

Backport of #3096 to the 3.2 branch. Fixes #3095.

What is your pull request about?

  • Bug fix
  • Improvement
  • New feature (adds functionality)
  • Breaking change: bug fix, feature or improvement that would cause existing output (especially JSON, CSV) to not work as expected before
  • Typo / spelling fix
  • Documentation update
  • Update of other files

The same bad substitution bug fixed in #3096 (merged to 3.3dev) is present in 3.2 at testssl.sh:22355 and testssl.sh:22368. check_proxy() gated IPv6 proxy support on ${OSSL_VER_MAJOR$}${OSSL_VER_MINOR} -ge 11, where the stray $ caused a bad substitution error. On non-LibreSSL builds this aborted the rest of check_proxy() for any IPv6 proxy (literal [addr]:port, or a hostname resolving only to AAAA), so PROXY was never rebuilt into a valid -proxy ... argument and downstream openssl calls failed with an error mentioning neither IPv6 nor the proxy.

Both checks are replaced with the dotted-glob idiom already used elsewhere in this branch for OpenSSL >= 1.1 gates (e.g. testssl.sh:20860, testssl.sh:2140), which is robust and greppable.

If it's a code change please check the boxes which are applicable

  • For the main program: My edits contain no tabs, indentation is five spaces and any line endings do not contain any blank chars
  • I've read CONTRIBUTING.md
  • My code follows Coding_Convention.md
  • I have tested this fix or improvement against >=2 hosts and I couldn't spot a problem
  • I have tested this new feature against >=2 hosts which show this feature and >=2 host which does not (in order to avoid side effects) . I couldn't spot a problem
  • For the new feature I have made corresponding changes to the documentation and / or to help()
  • If it's a bigger change: I added myself to CREDITS.md (alphabetical order) and the change to CHANGELOG.md

AI section

  • "I" found a bug using LLM version: Claude Opus 4.8
  • My contribution does not include any AI-generated content
  • My contribution includes AI-generated content, as disclosed below:
    • AI Tools: Claude Code
    • LLMs and versions: Claude Opus 4.8

…tssl#3095)

check_proxy() gated IPv6 proxy support on a home-grown version check
${OSSL_VER_MAJOR$}${OSSL_VER_MINOR} -ge 11 at two places, which had a
stray "$" causing a "bad substitution" error. On non-LibreSSL builds
this aborted the rest of check_proxy() for any IPv6 proxy (literal
[addr]:port, or a hostname resolving only to AAAA), so PROXY was never
rebuilt into a valid "-proxy ..." argument and downstream openssl calls
failed with an error mentioning neither IPv6 nor the proxy.

Beyond the typo, the concatenation approach was itself unsound:
OSSL_VER_MINOR carries the patch component (e.g. "1.1" for OpenSSL
1.1.1), so ${OSSL_VER_MAJOR}${OSSL_VER_MINOR} yields "11.1" and
[[ 11.1 -ge 11 ]] is an arithmetic error. Replace both checks with the
dotted-glob idiom used everywhere else in the file for OpenSSL >= 1.1
gates (e.g. testssl.sh:21441, :8216), which is robust and greppable.
@drwetter drwetter merged commit 4c52b36 into testssl:3.2 Jul 15, 2026
3 checks passed
@drwetter

Copy link
Copy Markdown
Collaborator

thanks, @ericcgu

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.

2 participants