You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
2.7 KiB
Plaintext
116 lines
2.7 KiB
Plaintext
env GOPRIVATE=test/main
|
|
|
|
env SEED1=OQg9kACEECQ
|
|
env SEED2=NruiDmVz6/s
|
|
|
|
# Check the binary with a given base64 encoded seed
|
|
garble -seed=${SEED1} build
|
|
exec ./main$exe
|
|
cmp stderr main.stderr
|
|
binsubstr main$exe 'teststring' 'imported var value'
|
|
! binsubstr main$exe 'ImportedVar'
|
|
|
|
[short] stop # the extra checks are relatively expensive
|
|
|
|
exec ./main$exe funcName
|
|
cp stderr funcName-seed-static-1
|
|
|
|
# Also check that the binary is reproducible.
|
|
# No packages should be rebuilt either, thanks to the build cache.
|
|
cp main$exe main_old$exe
|
|
rm main$exe
|
|
garble -seed=${SEED1}= build -v
|
|
! stderr .
|
|
bincmp main$exe main_old$exe
|
|
|
|
exec ./main$exe funcName
|
|
cmp stderr funcName-seed-static-1
|
|
|
|
# Also check that a different seed leads to a different binary.
|
|
# We can't know if caching happens here, because of previous test runs.
|
|
cp main$exe main_old$exe
|
|
rm main$exe
|
|
garble -seed=${SEED2} build
|
|
! bincmp main$exe main_old$exe
|
|
|
|
exec ./main$exe funcName
|
|
cp stderr funcName-seed-static-2
|
|
! bincmp funcName-seed-static-2 funcName-seed-static-1
|
|
|
|
# Use a random seed, which should always trigger a full build.
|
|
garble -seed=random build -v
|
|
stderr -count=1 '^runtime$'
|
|
stderr -count=1 '^test/main$'
|
|
exec ./main$exe
|
|
cmp stderr main.stderr
|
|
binsubstr main$exe 'teststring' 'imported var value'
|
|
! binsubstr main$exe 'ImportedVar'
|
|
|
|
exec ./main$exe funcName
|
|
cp stderr funcName-seed-random-1
|
|
! bincmp funcName-seed-random-1 funcName-seed-static-1
|
|
|
|
# Also check that the random binary is not reproducible.
|
|
cp main$exe main_old$exe
|
|
rm main$exe
|
|
garble -seed=random build -v
|
|
stderr .
|
|
! bincmp main$exe main_old$exe
|
|
|
|
exec ./main$exe funcName
|
|
cp stderr funcName-seed-random-2
|
|
! bincmp funcName-seed-random-2 funcName-seed-random-1
|
|
|
|
# Using different flags which affect the build, such as -literals or -tiny,
|
|
# should result in different obfuscation of names etc.
|
|
# There's strictly no reason to have this rule,
|
|
# but the flags result in different builds and binaries anyway,
|
|
# so we might as well make them as different as possible.
|
|
|
|
garble -seed=${SEED1} -literals build
|
|
exec ./main$exe funcName
|
|
! bincmp stderr funcName-seed-static-1
|
|
|
|
garble -seed=${SEED1} -tiny build
|
|
exec ./main$exe funcName
|
|
! bincmp stderr funcName-seed-static-1
|
|
|
|
-- go.mod --
|
|
module test/main
|
|
|
|
go 1.16
|
|
-- main.go --
|
|
package main
|
|
|
|
import (
|
|
"os"
|
|
"runtime"
|
|
|
|
"test/main/imported"
|
|
)
|
|
|
|
var teststringVar = "teststring"
|
|
|
|
func main() {
|
|
if len(os.Args) > 1 && os.Args[1] == "funcName" {
|
|
println(originalFuncName())
|
|
} else {
|
|
println(teststringVar)
|
|
println(imported.ImportedVar)
|
|
}
|
|
}
|
|
|
|
func originalFuncName() string {
|
|
pc, _, _, _ := runtime.Caller(0)
|
|
fn := runtime.FuncForPC(pc)
|
|
return fn.Name()
|
|
}
|
|
-- imported/imported.go --
|
|
package imported
|
|
|
|
var ImportedVar = "imported var value"
|
|
|
|
-- main.stderr --
|
|
teststring
|
|
imported var value
|