From a397a8e94ea7f00b3b01b8569923acfed670eac7 Mon Sep 17 00:00:00 2001 From: lu4p Date: Tue, 2 Mar 2021 23:05:45 +0100 Subject: [PATCH] Literals: Skip constants with inferred values. Obfuscating literals broke constants with values inferred via iota before, because it would be moved to a variable declaration instead. --- internal/literals/literals.go | 5 +++++ testdata/scripts/literals.txt | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/internal/literals/literals.go b/internal/literals/literals.go index e3b4d57..b5e93fc 100644 --- a/internal/literals/literals.go +++ b/internal/literals/literals.go @@ -47,6 +47,11 @@ func Obfuscate(files []*ast.File, info *types.Info, fset *token.FileSet, ignoreO return false } + if len(spec.Values) == 0 { + // skip constants with inferred values + return false + } + for _, name := range spec.Names { obj := info.ObjectOf(name) diff --git a/testdata/scripts/literals.txt b/testdata/scripts/literals.txt index 4d36ac4..fb88970 100644 --- a/testdata/scripts/literals.txt +++ b/testdata/scripts/literals.txt @@ -235,6 +235,13 @@ func stringTypeFunc(s stringType) stringType { println(s) return "stringType return" // skip } + +// obfuscating this broke before +const ( + iota0 uint8 = iota + iota1 +) + -- main.stderr -- Lorem true First Line