Skip to content

Commit eda27eb

Browse files
authored
Fix error source for certificare verification hostname error (#1247)
* Fix error source for certificare verification hostname error * Fix lint
1 parent e79256b commit eda27eb

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

experimental/status/status_source.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -190,19 +190,26 @@ func isDNSNotFoundError(err error) bool {
190190

191191
// isTLSCertificateVerificationError checks if the error is related to TLS certificate verification.
192192
func isTLSCertificateVerificationError(err error) bool {
193-
var certErr *x509.CertificateInvalidError
194-
var unknownAuthErr x509.UnknownAuthorityError
195-
196-
// Directly check for CertificateInvalidError or UnknownAuthorityError
197-
if errors.As(err, &certErr) || errors.As(err, &unknownAuthErr) {
193+
var (
194+
certErr *x509.CertificateInvalidError
195+
unknownAuthErr x509.UnknownAuthorityError
196+
hostnameErr *x509.HostnameError
197+
)
198+
199+
// Directly check for certificate-related errors
200+
if errors.As(err, &certErr) ||
201+
errors.As(err, &unknownAuthErr) ||
202+
errors.As(err, &hostnameErr) {
198203
return true
199204
}
200205

201206
// Check if the error is wrapped in a *url.Error
202207
var urlErr *url.Error
203208
if errors.As(err, &urlErr) {
204209
// Check the underlying error in urlErr
205-
if errors.As(urlErr.Err, &certErr) || errors.As(urlErr.Err, &unknownAuthErr) {
210+
if errors.As(urlErr.Err, &certErr) ||
211+
errors.As(urlErr.Err, &unknownAuthErr) ||
212+
errors.As(urlErr.Err, &hostnameErr) {
206213
return true
207214
}
208215
}

experimental/status/status_source_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,18 @@ func TestIsDownstreamHTTPError(t *testing.T) {
289289
err: errors.Join(io.EOF, &url.Error{Op: "Get", URL: "https://example.com", Err: io.EOF}),
290290
expected: true,
291291
},
292+
{
293+
name: "TLS hostname verification error",
294+
err: &url.Error{
295+
Op: "Get",
296+
URL: "https://example.com",
297+
Err: &x509.HostnameError{
298+
Host: "example.com",
299+
Certificate: &x509.Certificate{},
300+
},
301+
},
302+
expected: true,
303+
},
292304
}
293305
for _, tc := range tcs {
294306
t.Run(tc.name, func(t *testing.T) {

0 commit comments

Comments
 (0)