-
Notifications
You must be signed in to change notification settings - Fork 1.1k
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
fix: don't use invalid port 0 when NATMap fails #3058
base: master
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the PR @wlynxg
extPort, found := nat.mappings[entry{protocol: protocol, port: port}] | ||
if !found { | ||
if !found || extPort == 0 { | ||
return netip.AddrPort{}, false | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove the check from here.
successMapCnt++ | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add the port 0 check to line 911 where we check for is unspecified address. If you do so, it removes the need for introducing this new successMapCnt variable.
I would prefer keeping this change small because this code is pretty bad and we intend to rewrite it soon in #2229
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does the check placed on line 911 mean that the continue
is executed when the extMaddr
port is 0? If so, when all extMaddr
ports are 0, will observedAddrs
not be added to the finalAddrs
address list?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think so.
if !manet.IsIPUnspecified(extMaddr) {
// Add in the mapped addr.
finalAddrs = append(finalAddrs, extMaddr)
} else {
If the nat provided address is not an unspecified addr and(new change) it's not port == 0, we will add it to final addrs.
We still fall through and add the observed addresses.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is OK to add the address whose port is not 0 to finalAddrs here.
However, at
go-libp2p/p2p/host/basic/basic_host.go
Line 952 in f421202
finalAddrs = append(finalAddrs, ma.Join(ip, extMaddrNoIP)) |
fix: #3057