From 5a6015cd816b88ab5589f2950f3edf2f938c9744 Mon Sep 17 00:00:00 2001 From: Lucas Bremgartner Date: Mon, 1 Nov 2021 23:04:43 +0100 Subject: [PATCH] Add bidichk linter check for dangerous unicode character sequences --- go.mod | 1 + go.sum | 4 ++++ pkg/golinters/bidichk.go | 16 ++++++++++++++++ pkg/lint/lintersdb/manager.go | 4 ++++ test/testdata/bidichk.go | 8 ++++++++ 5 files changed, 33 insertions(+) create mode 100644 pkg/golinters/bidichk.go create mode 100644 test/testdata/bidichk.go diff --git a/go.mod b/go.mod index 2853d3d78458..68a5809fcddf 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,7 @@ require ( github.com/bkielbasa/cyclop v1.2.0 github.com/blizzy78/varnamelen v0.3.0 github.com/bombsimon/wsl/v3 v3.3.0 + github.com/breml/bidichk v0.0.0-20211101215529-9b68d04c240e github.com/butuzov/ireturn v0.1.1 github.com/charithe/durationcheck v0.0.9 github.com/daixiang0/gci v0.2.9 diff --git a/go.sum b/go.sum index 3dcf252d3dfe..fc1280e25525 100644 --- a/go.sum +++ b/go.sum @@ -106,6 +106,10 @@ github.com/blizzy78/varnamelen v0.3.0 h1:80mYO7Y5ppeEefg1Jzu+NBg16iwToOQVnDnNIoW github.com/blizzy78/varnamelen v0.3.0/go.mod h1:hbwRdBvoBqxk34XyQ6HA0UH3G0/1TKuv5AC4eaBT0Ec= github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/breml/bidichk v0.0.0-20211101211321-e7013e04fb35 h1:gVuw76onitoSg977sQ5CEK87U5sV17UHhtn0VmBaW3g= +github.com/breml/bidichk v0.0.0-20211101211321-e7013e04fb35/go.mod h1:zbfeitpevDUGI7V91Uzzuwrn4Vls8MoBMrwtt78jmso= +github.com/breml/bidichk v0.0.0-20211101215529-9b68d04c240e h1:vYW6FE3czRa1PWZHaarmH+rXqjxAxl5+4Cbda3793S4= +github.com/breml/bidichk v0.0.0-20211101215529-9b68d04c240e/go.mod h1:zbfeitpevDUGI7V91Uzzuwrn4Vls8MoBMrwtt78jmso= github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= diff --git a/pkg/golinters/bidichk.go b/pkg/golinters/bidichk.go new file mode 100644 index 000000000000..3f2c4f233b05 --- /dev/null +++ b/pkg/golinters/bidichk.go @@ -0,0 +1,16 @@ +package golinters + +import ( + "github.com/breml/bidichk/pkg/bidichk" + "github.com/golangci/golangci-lint/pkg/golinters/goanalysis" + "golang.org/x/tools/go/analysis" +) + +func NewBiDiChkFuncName() *goanalysis.Linter { + return goanalysis.NewLinter( + "bidichk", + "Checks for dangerous unicode character sequences", + []*analysis.Analyzer{bidichk.Analyzer}, + nil, + ).WithLoadMode(goanalysis.LoadModeSyntax) +} diff --git a/pkg/lint/lintersdb/manager.go b/pkg/lint/lintersdb/manager.go index 737548cf1543..7d5695747cb0 100644 --- a/pkg/lint/lintersdb/manager.go +++ b/pkg/lint/lintersdb/manager.go @@ -542,6 +542,10 @@ func (m Manager) GetAllSupportedLinterConfigs() []*linter.Config { WithPresets(linter.PresetStyle). WithLoadForGoAnalysis(). WithURL("https://github.com/blizzy78/varnamelen"), + linter.NewConfig(golinters.NewBiDiChkFuncName()). + WithSince("1.43.0"). + WithPresets(linter.PresetBugs). + WithURL("https://github.com/breml/bidichk"), // nolintlint must be last because it looks at the results of all the previous linters for unused nolint directives linter.NewConfig(golinters.NewNoLintLint()). diff --git a/test/testdata/bidichk.go b/test/testdata/bidichk.go new file mode 100644 index 000000000000..858839e6d4cb --- /dev/null +++ b/test/testdata/bidichk.go @@ -0,0 +1,8 @@ +//args: -Ebidichk +package testdata + +import "fmt" + +func main() { + fmt.Println("LEFT-TO-RIGHT-OVERRIDE: '‭', it is between the single quotes, but it is not visible with a regular editor") // ERROR "found dangerous unicode character sequence LEFT-TO-RIGHT-OVERRIDE" +}