summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/labstack/echo/v4/middleware/static_windows.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/labstack/echo/v4/middleware/static_windows.go')
-rw-r--r--vendor/github.com/labstack/echo/v4/middleware/static_windows.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/vendor/github.com/labstack/echo/v4/middleware/static_windows.go b/vendor/github.com/labstack/echo/v4/middleware/static_windows.go
new file mode 100644
index 00000000..0ab11985
--- /dev/null
+++ b/vendor/github.com/labstack/echo/v4/middleware/static_windows.go
@@ -0,0 +1,23 @@
+package middleware
+
+import (
+ "os"
+)
+
+// We ignore these errors as there could be handler that matches request path.
+//
+// As of Go 1.20 filepath.Clean has different behaviour on OS related filesystems so we need to use path.Clean
+// on Windows which has some caveats. The Open methods might return different errors than earlier versions and
+// as of 1.20 path checks are more strict on the provided path and considers [UNC](https://en.wikipedia.org/wiki/Path_(computing)#UNC)
+// paths with missing host etc parts as invalid. Previously it would result you `fs.ErrNotExist`.
+//
+// For 1.20@Windows we need to treat those errors the same as `fs.ErrNotExists` so we can continue handling
+// errors in the middleware/handler chain. Otherwise we might end up with status 500 instead of finding a route
+// or return 404 not found.
+func isIgnorableOpenFileError(err error) bool {
+ if os.IsNotExist(err) {
+ return true
+ }
+ errTxt := err.Error()
+ return errTxt == "http: invalid or unsafe file path" || errTxt == "invalid path"
+}