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:
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user