From 5b9b6afcb80d2d1a59049b1eafe59c0381cd815f Mon Sep 17 00:00:00 2001 From: Alessandro Ros Date: Fri, 5 Jun 2026 09:56:06 +0200 Subject: [PATCH] replace errors.As with modern errors.AsType (#5834) --- internal/externalcmd/cmd_os.go | 3 +-- internal/playback/on_get.go | 3 +-- internal/servers/hls/http_server.go | 12 ++++-------- internal/servers/moq/http_server.go | 3 +-- internal/servers/rtmp/conn.go | 6 ++---- internal/servers/rtsp/conn.go | 6 ++---- internal/servers/rtsp/session.go | 9 +++------ internal/servers/srt/conn.go | 6 ++---- internal/servers/webrtc/http_server.go | 6 ++---- internal/servers/webrtc/session.go | 3 +-- internal/staticsources/rpicamera/source.go | 3 +-- internal/stream/sub_stream_format.go | 3 +-- 12 files changed, 21 insertions(+), 42 deletions(-) diff --git a/internal/externalcmd/cmd_os.go b/internal/externalcmd/cmd_os.go index 06ecda74..2b9678bf 100644 --- a/internal/externalcmd/cmd_os.go +++ b/internal/externalcmd/cmd_os.go @@ -43,8 +43,7 @@ func (c *Cmd) runOSSpecific(cmdstr string, env []string) error { if err2 == nil { return 0 } - var ee *exec.ExitError - if errors.As(err2, &ee) { + if ee, ok := errors.AsType[*exec.ExitError](err2); ok { ee.ExitCode() } return 0 diff --git a/internal/playback/on_get.go b/internal/playback/on_get.go index de3ecc39..62565920 100644 --- a/internal/playback/on_get.go +++ b/internal/playback/on_get.go @@ -181,8 +181,7 @@ func (s *Server) onGet(ctx *gin.Context) { err = seekAndMux(pathConf.RecordFormat, segments, start, duration, m) if err != nil { // user aborted the download - var neterr *net.OpError - if errors.As(err, &neterr) { + if _, ok := errors.AsType[*net.OpError](err); ok { return } diff --git a/internal/servers/hls/http_server.go b/internal/servers/hls/http_server.go index f078cc70..e58b00a6 100644 --- a/internal/servers/hls/http_server.go +++ b/internal/servers/hls/http_server.go @@ -215,8 +215,7 @@ func (s *httpServer) onRequest(ctx *gin.Context) { }, }) if err != nil { - var terr *auth.Error - if errors.As(err, &terr) { + if terr, ok := errors.AsType[*auth.Error](err); ok { if terr.AskCredentials { ctx.Header("WWW-Authenticate", `Basic realm="mediamtx"`) s.writeErrorNoLog(ctx, http.StatusUnauthorized, fmt.Errorf("authentication error")) @@ -271,8 +270,7 @@ func (s *httpServer) onRequest(ctx *gin.Context) { } err := sx.initialize(ctx) if err != nil { - var terr2 *defs.PathNoStreamAvailableError - if errors.As(err, &terr2) { + if _, ok := errors.AsType[*defs.PathNoStreamAvailableError](err); ok { s.writeErrorNoLog(ctx, http.StatusNotFound, err) return } @@ -336,8 +334,7 @@ func (s *httpServer) onRequest(ctx *gin.Context) { } err := sx.initialize(ctx) if err != nil { - var terr *auth.Error - if errors.As(err, &terr) { + if terr, ok := errors.AsType[*auth.Error](err); ok { if terr.AskCredentials { ctx.Header("WWW-Authenticate", `Basic realm="mediamtx"`) s.writeErrorNoLog(ctx, http.StatusUnauthorized, fmt.Errorf("authentication error")) @@ -353,8 +350,7 @@ func (s *httpServer) onRequest(ctx *gin.Context) { return } - var terr2 *defs.PathNoStreamAvailableError - if errors.As(err, &terr2) { + if _, ok := errors.AsType[*defs.PathNoStreamAvailableError](err); ok { s.writeErrorNoLog(ctx, http.StatusNotFound, err) return } diff --git a/internal/servers/moq/http_server.go b/internal/servers/moq/http_server.go index bb1a7924..cf16eec9 100644 --- a/internal/servers/moq/http_server.go +++ b/internal/servers/moq/http_server.go @@ -182,8 +182,7 @@ func (s *httpServer) checkAuthOutsideSession(ctx *gin.Context, pathName string, }, }) if err != nil { - var terr *auth.Error - if errors.As(err, &terr) { + if terr, ok := errors.AsType[*auth.Error](err); ok { if terr.AskCredentials { ctx.Header("WWW-Authenticate", `Basic realm="mediamtx"`) s.writeErrorNoLog(ctx, http.StatusUnauthorized, fmt.Errorf("authentication error")) diff --git a/internal/servers/rtmp/conn.go b/internal/servers/rtmp/conn.go index 853b6341..581e9b68 100644 --- a/internal/servers/rtmp/conn.go +++ b/internal/servers/rtmp/conn.go @@ -171,8 +171,7 @@ func (c *conn) runRead() error { }, }) if err != nil { - var terr *auth.Error - if errors.As(err, &terr) { + if terr, ok := errors.AsType[*auth.Error](err); ok { // wait some seconds to delay brute force attacks <-time.After(auth.PauseAfterError) return terr @@ -266,8 +265,7 @@ func (c *conn) runPublish() error { }, }) if err != nil { - var terr *auth.Error - if errors.As(err, &terr) { + if terr, ok := errors.AsType[*auth.Error](err); ok { // wait some seconds to delay brute force attacks <-time.After(auth.PauseAfterError) return terr diff --git a/internal/servers/rtsp/conn.go b/internal/servers/rtsp/conn.go index 7b3c8f5a..caae2e44 100644 --- a/internal/servers/rtsp/conn.go +++ b/internal/servers/rtsp/conn.go @@ -164,14 +164,12 @@ func (c *conn) onDescribe(ctx *gortsplib.ServerHandlerOnDescribeCtx, }) if res.Err != nil { - var terr *auth.Error - if errors.As(res.Err, &terr) { + if terr, ok := errors.AsType[*auth.Error](res.Err); ok { res, err2 := c.handleAuthError(terr) return res, nil, err2 } - var terr2 *defs.PathNoStreamAvailableError - if errors.As(res.Err, &terr2) { + if _, ok := errors.AsType[*defs.PathNoStreamAvailableError](res.Err); ok { return &base.Response{ StatusCode: base.StatusNotFound, }, nil, res.Err diff --git a/internal/servers/rtsp/session.go b/internal/servers/rtsp/session.go index fba8fa44..0a513cf7 100644 --- a/internal/servers/rtsp/session.go +++ b/internal/servers/rtsp/session.go @@ -214,8 +214,7 @@ func (s *session) onAnnounce(c *conn, ctx *gortsplib.ServerHandlerOnAnnounceCtx) }, }) if err != nil { - var terr *auth.Error - if errors.As(err, &terr) { + if terr, ok := errors.AsType[*auth.Error](err); ok { return c.handleAuthError(terr) } @@ -295,14 +294,12 @@ func (s *session) onSetup(c *conn, ctx *gortsplib.ServerHandlerOnSetupCtx, }, }) if err != nil { - var terr *auth.Error - if errors.As(err, &terr) { + if terr, ok := errors.AsType[*auth.Error](err); ok { res, err2 := c.handleAuthError(terr) return res, nil, err2 } - var terr2 *defs.PathNoStreamAvailableError - if errors.As(err, &terr2) { + if _, ok := errors.AsType[*defs.PathNoStreamAvailableError](err); ok { return &base.Response{ StatusCode: base.StatusNotFound, }, nil, err diff --git a/internal/servers/srt/conn.go b/internal/servers/srt/conn.go index 14b9110e..e1348d8f 100644 --- a/internal/servers/srt/conn.go +++ b/internal/servers/srt/conn.go @@ -148,8 +148,7 @@ func (c *conn) runPublish(streamID *streamID) error { }, }) if err != nil { - var terr *auth.Error - if errors.As(err, &terr) { + if terr, ok := errors.AsType[*auth.Error](err); ok { // wait some seconds to delay brute force attacks <-time.After(auth.PauseAfterError) c.connReq.Reject(srt.REJ_PEER) @@ -275,8 +274,7 @@ func (c *conn) runRead(streamID *streamID) error { }, }) if err != nil { - var terr *auth.Error - if errors.As(err, &terr) { + if terr, ok := errors.AsType[*auth.Error](err); ok { // wait some seconds to delay brute force attacks <-time.After(auth.PauseAfterError) c.connReq.Reject(srt.REJ_PEER) diff --git a/internal/servers/webrtc/http_server.go b/internal/servers/webrtc/http_server.go index 49bee4b5..9fc5f27d 100644 --- a/internal/servers/webrtc/http_server.go +++ b/internal/servers/webrtc/http_server.go @@ -149,8 +149,7 @@ func (s *httpServer) checkAuthOutsideSession(ctx *gin.Context, pathName string, }, }) if err != nil { - var terr *auth.Error - if errors.As(err, &terr) { + if terr, ok := errors.AsType[*auth.Error](err); ok { if terr.AskCredentials { ctx.Header("WWW-Authenticate", `Basic realm="mediamtx"`) s.writeErrorNoLog(ctx, http.StatusUnauthorized, fmt.Errorf("authentication error")) @@ -218,8 +217,7 @@ func (s *httpServer) onWHIPPost(ctx *gin.Context, pathName string, publish bool) res2 := res.sx.initialRequest(initialRequestReq{}) if res2.err != nil { - var terr *auth.Error - if errors.As(res2.err, &terr) { + if terr, ok := errors.AsType[*auth.Error](res2.err); ok { if terr.AskCredentials { ctx.Header("WWW-Authenticate", `Basic realm="mediamtx"`) s.writeErrorNoLog(ctx, http.StatusUnauthorized, fmt.Errorf("authentication error")) diff --git a/internal/servers/webrtc/session.go b/internal/servers/webrtc/session.go index 5bb8a689..8a5f24c1 100644 --- a/internal/servers/webrtc/session.go +++ b/internal/servers/webrtc/session.go @@ -493,8 +493,7 @@ func (s *session) runRead(req *initialRequestReq) (int, error) { }, }) if err != nil { - var terr2 *defs.PathNoStreamAvailableError - if errors.As(err, &terr2) { + if _, ok := errors.AsType[*defs.PathNoStreamAvailableError](err); ok { return http.StatusNotFound, err } diff --git a/internal/staticsources/rpicamera/source.go b/internal/staticsources/rpicamera/source.go index 3a97117c..91d50505 100644 --- a/internal/staticsources/rpicamera/source.go +++ b/internal/staticsources/rpicamera/source.go @@ -342,8 +342,7 @@ func (s *Source) waitForPrimary( }, }) if err != nil { - var err2 *defs.PathNoStreamAvailableError - if errors.As(err, &err2) { + if _, ok := errors.AsType[*defs.PathNoStreamAvailableError](err); ok { select { case <-time.After(pauseBetweenErrors): case <-params.Context.Done(): diff --git a/internal/stream/sub_stream_format.go b/internal/stream/sub_stream_format.go index 4b91a9da..a3641feb 100644 --- a/internal/stream/sub_stream_format.go +++ b/internal/stream/sub_stream_format.go @@ -128,8 +128,7 @@ func (ssf *subStreamFormat) writeUnitInner(u *unit.Unit) error { ssf.streamFormat.rtpEncoder, err = newRTPEncoder(ssf.streamFormat.format, ssf.streamFormat.rtpMaxPayloadSize, new(pkt.SSRC), new(pkt.SequenceNumber)) if err != nil { - var err2 rtpEncoderNotAvailableError - if errors.As(err, &err2) { + if _, ok := errors.AsType[rtpEncoderNotAvailableError](err); ok { return fmt.Errorf("RTP payload size (%d) is greater than maximum allowed (%d)", len(pkt.Payload), ssf.streamFormat.rtpMaxPayloadSize) }