Skip to content

config: fix IPv6 address handling in HostPort.String()#5040

Merged
siavashs merged 1 commit intoprometheus:mainfrom
2001adarsh:fix/ipv6-smarthost-marshaling
Feb 24, 2026
Merged

config: fix IPv6 address handling in HostPort.String()#5040
siavashs merged 1 commit intoprometheus:mainfrom
2001adarsh:fix/ipv6-smarthost-marshaling

Conversation

@2001adarsh
Copy link
Copy Markdown
Contributor

@2001adarsh 2001adarsh commented Feb 23, 2026

HostPort.String() was using fmt.Sprintf("%s:%s", hp.Host, hp.Port) which doesn't wrap IPv6 addresses in brackets. This caused marshaled configs to produce invalid addresses like:
fd12:3456:789a::1:25
instead of:
[fd12:3456:789a::1]:25

This fix uses net.JoinHostPort() which correctly handles IPv6.

Added testcases, which would fail without the fix.

Pull Request Checklist

Please check all the applicable boxes.

Which user-facing changes does this PR introduce?

NONE

@2001adarsh 2001adarsh force-pushed the fix/ipv6-smarthost-marshaling branch from ce178ee to 63717a5 Compare February 23, 2026 10:22
HostPort.String() was using fmt.Sprintf("%s:%s", hp.Host, hp.Port)
which doesn't wrap IPv6 addresses in brackets. This caused marshaled
configs to produce invalid addresses like:
  fd12:3456:789a::1:25
instead of:
  [fd12:3456:789a::1]:25

This fix uses net.JoinHostPort() which correctly handles IPv6.

Signed-off-by: Adarsh Singh <2001adarshsingh@gmail.com>
@2001adarsh 2001adarsh force-pushed the fix/ipv6-smarthost-marshaling branch from 63717a5 to e7890a6 Compare February 23, 2026 10:26
Copy link
Copy Markdown
Contributor

@siavashs siavashs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your contribution!

@siavashs siavashs merged commit f0be65e into prometheus:main Feb 24, 2026
6 checks passed
coatico pushed a commit to coatico/alertmanager that referenced this pull request Mar 10, 2026
HostPort.String() was using fmt.Sprintf("%s:%s", hp.Host, hp.Port)
which doesn't wrap IPv6 addresses in brackets. This caused marshaled
configs to produce invalid addresses like:
  fd12:3456:789a::1:25
instead of:
  [fd12:3456:789a::1]:25

This fix uses net.JoinHostPort() which correctly handles IPv6.

Signed-off-by: Adarsh Singh <2001adarshsingh@gmail.com>
Signed-off-by: VAN LINT <marnix.vanlint@worldline.com>
coatico pushed a commit to coatico/alertmanager that referenced this pull request Mar 10, 2026
HostPort.String() was using fmt.Sprintf("%s:%s", hp.Host, hp.Port)
which doesn't wrap IPv6 addresses in brackets. This caused marshaled
configs to produce invalid addresses like:
  fd12:3456:789a::1:25
instead of:
  [fd12:3456:789a::1]:25

This fix uses net.JoinHostPort() which correctly handles IPv6.

Signed-off-by: Adarsh Singh <2001adarshsingh@gmail.com>
Signed-off-by: VAN LINT <marnix.vanlint@worldline.com>
SoloJacobs pushed a commit to SoloJacobs/alertmanager that referenced this pull request Mar 15, 2026
HostPort.String() was using fmt.Sprintf("%s:%s", hp.Host, hp.Port)
which doesn't wrap IPv6 addresses in brackets. This caused marshaled
configs to produce invalid addresses like:
  fd12:3456:789a::1:25
instead of:
  [fd12:3456:789a::1]:25

This fix uses net.JoinHostPort() which correctly handles IPv6.

Signed-off-by: Adarsh Singh <2001adarshsingh@gmail.com>
SoloJacobs added a commit to SoloJacobs/alertmanager that referenced this pull request Apr 6, 2026
* [CHANGE] `go get github.com/prometheus/alertmanager/ui` will now fail as compiled UI assets are no longer checked into the repository. Downstream builds that rely on these assets being present in the source tree must now build the UI from source. prometheus#5113
* [CHANGE] The '--enable-feature=auto-gomaxprocs' option is deprecated and will be removed in v0.33. This flag currently has no effect and can be safely removed from any startup scripts. prometheus#5090
* [CHANGE] Update internal function signatures across multiple packages. This affects any project that integrates `Alertmanager` code.
* [ENHANCEMENT] Add static asset caching. prometheus#5113
* [ENHANCEMENT] Reduce memory allocations through pre-sizing collections and batch allocation. prometheus#5020
* [ENHANCEMENT] Replace help with documentation in navigation bar. prometheus#4943
* [ENHANCEMENT] docs(ha): Update high availability documentation. prometheus#5136
* [ENHANCEMENT] docs: Add `auth_secret_file` for smtp in document. prometheus#5036
* [ENHANCEMENT] docs: Add description for global `telegram_bot_token`. prometheus#5114
* [ENHANCEMENT] docs: Add note about notifier timeouts. prometheus#5077
* [ENHANCEMENT] docs: Fix `force_implicit_tls` config field name. prometheus#5030
* [ENHANCEMENT] docs: Link community supported integrations. prometheus#4978
* [ENHANCEMENT] docs: Remove duplicate header. prometheus#5034
* [ENHANCEMENT] docs: Update mutual tls reference in high availability documentation. prometheus#5120
* [ENHANCEMENT] tracing: Use noop spans when tracing disabled. prometheus#5118
* [FEATURE] Add silence annotations. prometheus#4965
* [FEATURE] Add silence logging option. prometheus#4163
* [FEATURE] Add support for multiple matcher set silences. prometheus#4957
* [FEATURE] Add the reason for notifying in dedup stage. prometheus#4971
* [FEATURE] mattermost: Flatten attachments into top-level config. prometheus#5009
* [FEATURE] mattermost: Support global webhook url. prometheus#4998
* [FEATURE] slack: Add default color from template. prometheus#5014
* [FEATURE] slack: Allow receiver to edit existing messages. prometheus#5007
* [FEATURE] template: Add dict, map and append functions. prometheus#5093
* [FEATURE] webhook: Add full payload templating support for notifier. prometheus#5011
* [BUGFIX] config: Check for empty cluster tls client config. prometheus#5126
* [BUGFIX] config: Don't crash upon reading empty config for notifier. prometheus#4979
* [BUGFIX] config: Fix ipv6 address handling in hostport.string(). prometheus#5040
* [BUGFIX] mattermost: Omit empty text field in notifications. prometheus#4985
* [BUGFIX] telegram: Send fallback message when notification exceeds character limit. prometheus#5074
* [BUGFIX] ui: Fix escaping for matcher values with quotes. prometheus#4862
* [BUGFIX] ui: Handle special chars in silence regex-matchers. prometheus#4942
* [BUGFIX] ui: Support utf-8 label names in matchers. prometheus#5089

Signed-off-by: Solomon Jacobs <solomonjacobs@protonmail.com>
@SoloJacobs SoloJacobs mentioned this pull request Apr 6, 2026
ultrotter pushed a commit that referenced this pull request Apr 7, 2026
* [CHANGE] `go get github.com/prometheus/alertmanager/ui` will now fail as compiled UI assets are no longer checked into the repository. Downstream builds that rely on these assets being present in the source tree must now build the UI from source. #5113
* [CHANGE] The '--enable-feature=auto-gomaxprocs' option is deprecated and will be removed in v0.33. This flag currently has no effect and can be safely removed from any startup scripts. #5090
* [CHANGE] Update internal function signatures across multiple packages. This affects any project that integrates `Alertmanager` code.
* [ENHANCEMENT] Add static asset caching. #5113
* [ENHANCEMENT] Reduce memory allocations through pre-sizing collections and batch allocation. #5020
* [ENHANCEMENT] Replace help with documentation in navigation bar. #4943
* [ENHANCEMENT] docs(ha): Update high availability documentation. #5136
* [ENHANCEMENT] docs: Add `auth_secret_file` for smtp in document. #5036
* [ENHANCEMENT] docs: Add description for global `telegram_bot_token`. #5114
* [ENHANCEMENT] docs: Add note about notifier timeouts. #5077
* [ENHANCEMENT] docs: Fix `force_implicit_tls` config field name. #5030
* [ENHANCEMENT] docs: Link community supported integrations. #4978
* [ENHANCEMENT] docs: Remove duplicate header. #5034
* [ENHANCEMENT] docs: Update mutual tls reference in high availability documentation. #5120
* [ENHANCEMENT] tracing: Use noop spans when tracing disabled. #5118
* [FEATURE] Add silence annotations. #4965
* [FEATURE] Add silence logging option. #4163
* [FEATURE] Add support for multiple matcher set silences. #4957
* [FEATURE] Add the reason for notifying in dedup stage. #4971
* [FEATURE] mattermost: Flatten attachments into top-level config. #5009
* [FEATURE] mattermost: Support global webhook url. #4998
* [FEATURE] slack: Add default color from template. #5014
* [FEATURE] slack: Allow receiver to edit existing messages. #5007
* [FEATURE] template: Add dict, map and append functions. #5093
* [FEATURE] webhook: Add full payload templating support for notifier. #5011
* [BUGFIX] config: Check for empty cluster tls client config. #5126
* [BUGFIX] config: Don't crash upon reading empty config for notifier. #4979
* [BUGFIX] config: Fix ipv6 address handling in hostport.string(). #5040
* [BUGFIX] mattermost: Omit empty text field in notifications. #4985
* [BUGFIX] telegram: Send fallback message when notification exceeds character limit. #5074
* [BUGFIX] ui: Fix escaping for matcher values with quotes. #4862
* [BUGFIX] ui: Handle special chars in silence regex-matchers. #4942
* [BUGFIX] ui: Support utf-8 label names in matchers. #5089

Signed-off-by: Solomon Jacobs <solomonjacobs@protonmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

HostPort.String() breaks IPv6 addresses - should use net.JoinHostPort()

3 participants