Recover from errors in Go_xxfi_connect()

There appears to be a race condition in libmilter in which
hostaddr is set to nil before or while calling the connect
callback if the client aborts its connection during that
window.
This commit is contained in:
Dolf Schimmel (Freeaqingme)
2015-11-24 17:38:59 +01:00
parent 00d59ae5ab
commit 39a4baf02e

View File

@@ -200,7 +200,14 @@ func GobDecode(buf []byte, data interface{}) error {
// They are only called if they get registered but need to be defined anyway // They are only called if they get registered but need to be defined anyway
//export Go_xxfi_connect //export Go_xxfi_connect
func Go_xxfi_connect(ctx *C.SMFICTX, hostname *C.char, hostaddr *C._SOCK_ADDR) C.sfsistat { func Go_xxfi_connect(ctx *C.SMFICTX, hostname *C.char, hostaddr *C._SOCK_ADDR) (sfsistat C.sfsistat) {
defer func(sfsistat *C.sfsistat) {
if r := recover(); r != nil {
LoggerPrintf("Panic caught in Go_xxfi_connect(): %s", r)
*sfsistat = 75 // tempfail
}
}(&sfsistat)
ctxptr := ctx2int(ctx) ctxptr := ctx2int(ctx)
var ip net.IP var ip net.IP