Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enable nosprintfhostport linter #5223

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

twz123
Copy link
Member

@twz123 twz123 commented Nov 12, 2024

Description

... and fix lints on the way.

Inline the IsIPV6String function, as it had only one use left, which was inlined as a one-liner.

Type of change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update

How Has This Been Tested?

  • Manual test
  • Auto test added

Checklist:

  • My code follows the style guidelines of this project
  • My commit messages are signed-off
  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • New and existing unit tests pass locally with my changes
  • Any dependent changes have been merged and published in downstream modules
  • I have checked my code and corrected any misspellings

Comment on lines 138 to 148
address := ipnet.IP.To4()
if IsIPv6String(ipnet.IP.String()) {
if address == nil {
address = ipnet.IP.To16()
}
Copy link
Member Author

Choose a reason for hiding this comment

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

I wonder if this could just become

Suggested change
address := ipnet.IP.To4()
if IsIPv6String(ipnet.IP.String()) {
if address == nil {
address = ipnet.IP.To16()
}
address := ipnet.IP

? Not sure if would make any difference if a v4 address might be passed on in its 16 byte representation.

Copy link
Collaborator

Choose a reason for hiding this comment

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

It should not make any difference at all. We return a string.

I support this change.

Copy link
Member Author

Choose a reason for hiding this comment

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

After a second look, I realized that the code actually relies on the 4 byte representation a few lines below, and produces a nonsense DNS address when ServiceCIDR describes a v6 network: E.g. given the CIDR fd00:abcd:1234::/64, the calculated address will be fd00:abcf:1234::, which is outside of the network to begin with. The ipnet.Contains check doesn't work as expected since address and ipnet.IP point to the same slice, i.e. the modifications to address will also affect ipnet.

That said, n.ServiceCIDR shouldn't be a v6 network in the first place, that's what n.DualStack.IPv6ServiceCIDR is for. This is all a bit weird: the IsIPv6String check has been added in #1292, to support "IPv6 only". Are we actually supporting this? If yes, then this function is definitely broken.

What do we want to do?

  1. Error out if ServiceCIDR is a v6 network?
  2. Fix the "IPv6 only" mode by calculating a meaningful v6 DNS address?

In any case, the ipnet.Contains check needs fixing, i.e. we need to properly copy address by value.

Copy link
Member Author

@twz123 twz123 Nov 12, 2024

Choose a reason for hiding this comment

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

@twz123 twz123 marked this pull request as ready for review November 12, 2024 13:46
@twz123 twz123 requested review from a team as code owners November 12, 2024 13:46
Copy link
Contributor

This pull request has merge conflicts that need to be resolved.

Copy link
Contributor

This pull request has merge conflicts that need to be resolved.

Copy link
Contributor

This pull request has merge conflicts that need to be resolved.

kke
kke previously approved these changes Nov 14, 2024
Copy link
Contributor

This pull request has merge conflicts that need to be resolved.

Copy link
Contributor

This pull request has merge conflicts that need to be resolved.

kke
kke previously approved these changes Nov 15, 2024
Copy link
Contributor

This pull request has merge conflicts that need to be resolved.

Copy link
Contributor

This pull request has merge conflicts that need to be resolved.

... and fix lints on the way.

Inline the IsIPV6String function, as it had only one use left, which was
inlined as a one-liner.

Signed-off-by: Tom Wieczorek <[email protected]>
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.

3 participants