Stop leaking file handles, handle EOF'd sig file

This commit is contained in:
Aaron Bieber 2020-02-15 17:18:13 -07:00
parent 909971b8e2
commit 9b4dcbde4b
3 changed files with 34 additions and 17 deletions

35
main.go
View File

@ -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)

View File

@ -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"

0
test/bad.sig Normal file
View File