aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-07-05 11:04:41 +0200
committerDmitry Vyukov <dvyukov@google.com>2020-07-06 08:23:03 +0200
commited2ced4c694aef828d8dfbaa9d8a459ac2c72043 (patch)
tree1cbd9867eb62bdf62d85f89606fac9146563b201 /tools
parent22f8756722ad4bbf532a6861776b24cbb513755e (diff)
tools/syz-linter: check for \n at the end of log/error text
Update #1876
Diffstat (limited to 'tools')
-rw-r--r--tools/syz-linter/linter.go27
-rw-r--r--tools/syz-linter/testdata/src/lintertest/lintertest.go1
2 files changed, 15 insertions, 13 deletions
diff --git a/tools/syz-linter/linter.go b/tools/syz-linter/linter.go
index 0b2a9f2b9..44fb91fbc 100644
--- a/tools/syz-linter/linter.go
+++ b/tools/syz-linter/linter.go
@@ -20,6 +20,7 @@ import (
"go/token"
"go/types"
"regexp"
+ "strconv"
"strings"
"unicode"
@@ -190,27 +191,27 @@ func checkLogErrorFormat(pass *analysis.Pass, n *ast.CallExpr) {
if !ok || lit.Kind != token.STRING {
return
}
- val := lit.Value[1 : len(lit.Value)-1] // the value includes quotes
+ report := func(msg string) {
+ pass.Report(analysis.Diagnostic{Pos: lit.Pos(), Message: msg})
+ }
+ val, err := strconv.Unquote(lit.Value)
+ if err != nil {
+ return
+ }
ln := len(val)
if ln == 0 {
- pass.Report(analysis.Diagnostic{
- Pos: n.Pos(),
- Message: "Don't use empty log/error messages",
- })
+ report("Don't use empty log/error messages")
return
}
if val[ln-1] == '.' && (ln < 3 || val[ln-2] != '.' || val[ln-3] != '.') {
- pass.Report(analysis.Diagnostic{
- Pos: n.Pos(),
- Message: "Don't use dot at the end of log/error messages",
- })
+ report("Don't use dot at the end of log/error messages")
+ }
+ if val[ln-1] == '\n' {
+ report("Don't use \\n at the end of log/error messages")
}
if ln >= 2 && unicode.IsUpper(rune(val[0])) && unicode.IsLower(rune(val[1])) &&
!publicIdentifier.MatchString(val) {
- pass.Report(analysis.Diagnostic{
- Pos: n.Pos(),
- Message: "Don't start log/error messages with a Capital letter",
- })
+ report("Don't start log/error messages with a Capital letter")
}
}
diff --git a/tools/syz-linter/testdata/src/lintertest/lintertest.go b/tools/syz-linter/testdata/src/lintertest/lintertest.go
index b36333797..7b8722693 100644
--- a/tools/syz-linter/testdata/src/lintertest/lintertest.go
+++ b/tools/syz-linter/testdata/src/lintertest/lintertest.go
@@ -63,5 +63,6 @@ func logErrorMessages() {
log.Printf("Bad message %v", 1) // want "Don't start log/error messages with a Capital letter"
log.Print("Bad message") // want "Don't start log/error messages with a Capital letter"
log.Print("also ad message.") // want "Don't use dot at the end of log/error messages"
+ log.Print("no new lines\n") // want "Don't use \\\\n at the end of log/error messages"
log.Print("") // want "Don't use empty log/error messages"
}