Skip to content

Commit 3c5dc7e

Browse files
committed
exchangeWithUDPServerViaProxy: on timeout, directly return an error
Instead of trying to decrypt junk (and then return an error, but not the right one.
1 parent 6fb0980 commit 3c5dc7e

1 file changed

Lines changed: 6 additions & 0 deletions

File tree

dnscrypt-proxy/proxy.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -677,17 +677,23 @@ func (proxy *Proxy) exchangeWithUDPServerViaProxy(
677677
proxy.prepareForRelay(serverInfo.UDPAddr.IP, serverInfo.UDPAddr.Port, &encryptedQuery)
678678
}
679679
encryptedResponse := make([]byte, MaxDNSPacketSize)
680+
var readErr error
680681
for tries := 2; tries > 0; tries-- {
681682
if _, err := pc.Write(encryptedQuery); err != nil {
682683
return nil, err
683684
}
684685
length, err := pc.Read(encryptedResponse)
685686
if err == nil {
686687
encryptedResponse = encryptedResponse[:length]
688+
readErr = nil
687689
break
688690
}
691+
readErr = err
689692
dlog.Debugf("[%v] Retry on timeout", serverInfo.Name)
690693
}
694+
if readErr != nil {
695+
return nil, readErr
696+
}
691697
return proxy.Decrypt(serverInfo, sharedKey, encryptedResponse, clientNonce, queryEpoch)
692698
}
693699

0 commit comments

Comments
 (0)