Stop leaking file handles, handle EOF'd sig file
This commit is contained in:
parent
909971b8e2
commit
9b4dcbde4b
35
main.go
35
main.go
|
@ -10,13 +10,16 @@ import (
|
|||
"golang.org/x/crypto/openpgp"
|
||||
)
|
||||
|
||||
func open(path string) io.Reader {
|
||||
f, err := os.Open(path)
|
||||
func errExit(err error) {
|
||||
if err != nil {
|
||||
if err == io.EOF {
|
||||
fmt.Println("invalid signature file")
|
||||
os.Exit(1)
|
||||
}
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
return f
|
||||
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
@ -33,7 +36,20 @@ func main() {
|
|||
unveil(pub, "r")
|
||||
unveilBlock()
|
||||
|
||||
kr, err := openpgp.ReadArmoredKeyRing(open(pub))
|
||||
fPub, err := os.Open(pub)
|
||||
errExit(err)
|
||||
|
||||
fFile, err := os.Open(file)
|
||||
errExit(err)
|
||||
|
||||
fSig, err := os.Open(sig)
|
||||
errExit(err)
|
||||
|
||||
defer fPub.Close()
|
||||
defer fSig.Close()
|
||||
defer fFile.Close()
|
||||
|
||||
kr, err := openpgp.ReadArmoredKeyRing(fPub)
|
||||
if err != nil {
|
||||
fmt.Printf("Can't parse public key '%s'\n%s", pub, err)
|
||||
os.Exit(1)
|
||||
|
@ -43,18 +59,15 @@ func main() {
|
|||
|
||||
switch {
|
||||
case strings.HasSuffix(sig, ".sig"), strings.HasSuffix(sig, ".gpg"):
|
||||
ent, err = openpgp.CheckDetachedSignature(kr, open(file), open(sig))
|
||||
ent, err = openpgp.CheckDetachedSignature(kr, fFile, fSig)
|
||||
case strings.HasSuffix(sig, ".asc"):
|
||||
ent, err = openpgp.CheckArmoredDetachedSignature(kr, open(file), open(sig))
|
||||
ent, err = openpgp.CheckArmoredDetachedSignature(kr, fFile, fSig)
|
||||
default:
|
||||
// Try to open as an armored file if we don't know the extension
|
||||
ent, err = openpgp.CheckArmoredDetachedSignature(kr, open(file), open(sig))
|
||||
ent, err = openpgp.CheckArmoredDetachedSignature(kr, fFile, fSig)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
errExit(err)
|
||||
|
||||
for _, id := range ent.Identities {
|
||||
fmt.Printf("%q\n", id.Name)
|
||||
|
|
16
run_test.sh
16
run_test.sh
|
@ -4,9 +4,13 @@ set -e
|
|||
|
||||
mandoc -T lint ./ogvt.1
|
||||
go build
|
||||
echo "Testing detached armor: asc"
|
||||
./ogvt -file test/uptime.txt -sig test/uptime.txt.asc -pub test/adent.pub
|
||||
echo "Testing detached non-armor: gpg"
|
||||
./ogvt -file test/uptime.txt -sig test/uptime.txt.gpg -pub test/adent.pub
|
||||
echo "Testing detached non-armor: sig"
|
||||
./ogvt -file test/uptime.txt -sig test/uptime.txt.sig -pub test/adent.pub
|
||||
printf "Testing detached armor (asc)\t\t"
|
||||
./ogvt -file test/uptime.txt -sig test/uptime.txt.asc -pub test/adent.pub >/dev/null && echo "OK"
|
||||
printf "Testing detached non-armor (gpg)\t"
|
||||
./ogvt -file test/uptime.txt -sig test/uptime.txt.gpg -pub test/adent.pub >/dev/null && echo "OK"
|
||||
printf "Testing detached non-armor (sig)\t"
|
||||
./ogvt -file test/uptime.txt -sig test/uptime.txt.sig -pub test/adent.pub >/dev/null && echo "OK"
|
||||
printf "Testing bad sig file\t\t\t"
|
||||
./ogvt -file test/uptime.txt -sig test/bad.sig -pub test/adent.pub >/dev/null || echo "OK"
|
||||
printf "Testing empty file\t\t\t"
|
||||
./ogvt -file test/uptime.txt -sig /dev/null -pub test/adent.pub >/dev/null || echo "OK"
|
||||
|
|
Loading…
Reference in New Issue