#2017 fix: Check if address is nil for IsValid() function. #2335
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
#2017 Panic due to nil dereferencing
While I was investigating #2017, I saw the error log reported by @base510
The error message right before the segfault suggests the root cause of the application panic. What happened under the hood was that,
getUoTConnection()
has a de-referencing likedest.Address.Family()
, whiledest.Address
could be nil.After some code searching, I noticed the real problem wasn't the function itself, but rather the outbound handler.
Before proceeding with the traffic handling logic, the code first checks if the outbound target(which is the destination address, net.Destination) is valid, which does make sense. However, I believe the
IsValid()
function is broken, because it's possible that theAddress
field could be nil. See following code.Also from semantic perspective, for the destination of the proxy request, a valid destination should always include address, port and network type. In this case,
Port
is never nil, so I updated the function to also include address check.