error if the user forgot -trimpath

pull/22/head
Daniel Martí 5 years ago
parent f81b92a0fa
commit a670f80fe9

1
.gitignore vendored

@ -0,0 +1 @@
/garble

@ -28,6 +28,8 @@ Usage of garble:
func main() { os.Exit(main1()) } func main() { os.Exit(main1()) }
var workingDir string
func main1() int { func main1() int {
if err := flagSet.Parse(os.Args[1:]); err != nil { if err := flagSet.Parse(os.Args[1:]); err != nil {
return 2 return 2
@ -36,14 +38,19 @@ func main1() int {
if len(args) < 1 { if len(args) < 1 {
flagSet.Usage() flagSet.Usage()
} }
var err error
workingDir, err = os.Getwd()
if err != nil {
fmt.Fprintln(os.Stderr, err)
return 1
}
_, tool := filepath.Split(args[0]) _, tool := filepath.Split(args[0])
// TODO: trim ".exe" for windows? // TODO: trim ".exe" for windows?
transformed := args[1:] transformed := args[1:]
// fmt.Fprintln(os.Stderr, tool, transformed) // log.Println(tool, transformed)
if transform := transformFuncs[tool]; transform != nil { if transform := transformFuncs[tool]; transform != nil {
var err error if transformed, err = transform(transformed); err != nil {
transformed, err = transform(transformed)
if err != nil {
fmt.Fprintln(os.Stderr, err) fmt.Fprintln(os.Stderr, err)
return 1 return 1
} }
@ -60,7 +67,7 @@ func main1() int {
var transformFuncs = map[string]func([]string) ([]string, error){ var transformFuncs = map[string]func([]string) ([]string, error){
"compile": transformCompile, "compile": transformCompile,
"link": transformLink, "link": transformLink,
} }
func transformCompile(args []string) ([]string, error) { func transformCompile(args []string) ([]string, error) {
@ -70,16 +77,10 @@ func transformCompile(args []string) ([]string, error) {
return args, nil return args, nil
} }
// TODO: find a way to do this. -trimpath is always present for some reason. trimpath := flagValue(flags, "-trimpath")
// trimpath := false if !strings.Contains(trimpath, workingDir) {
// for _, flag := range flags { return nil, fmt.Errorf("-toolexec=garble should be used alongside -trimpath")
// if strings.HasPrefix(flag, "-trimpath") { }
// trimpath = true
// }
// }
// if !trimpath {
// return nil, fmt.Errorf("-toolexec=garble should be used alongside -trimpath")
// }
return append(flags, files...), nil return append(flags, files...), nil
} }
@ -101,3 +102,17 @@ func splitFlagsFromFiles(args []string, ext string) (flags, files []string) {
} }
return args, nil return args, nil
} }
func flagValue(flags []string, name string) string {
for i, arg := range flags {
if val := strings.TrimPrefix(arg, name+"="); val != arg {
// -name=value
return val
}
if arg == name && i+1 < len(flags) {
// -name value
return flags[i+1]
}
}
return ""
}

@ -15,14 +15,17 @@ exec ./main
cmp stderr main.stderr cmp stderr main.stderr
grep $WORK main grep $WORK main
# The default compilation includes DWARF and the symbol table. # The default build includes DWARF and the symbol table.
exec readelf --section-details --symbols main exec readelf --section-details --symbols main
stdout 'debug_info$' stdout 'debug_info$'
stdout 'globalVar' stdout 'globalVar'
# TODO # The default build includes full non-trimmed paths.
grep $WORK main
# Check that we fail if the user forgot -trimpath. # Check that we fail if the user forgot -trimpath.
# ! exec go build -a -toolexec=garble main.go ! exec go build -a -toolexec=garble main.go
stderr 'should be used alongside -trimpath'
# Check that the simplest use of garble works. # Check that the simplest use of garble works.
exec go build -a -trimpath -toolexec=garble main.go exec go build -a -trimpath -toolexec=garble main.go
@ -33,7 +36,8 @@ exec readelf --section-details --symbols main
! stdout 'debug_info$' ! stdout 'debug_info$'
! stdout 'globalVar' ! stdout 'globalVar'
# ! grep $WORK main ! grep $WORK main
# TODO # TODO
# ! grep 'globalVar' main # ! grep 'globalVar' main
# ! grep 'globalFunc' main # ! grep 'globalFunc' main

Loading…
Cancel
Save