on master help sign in
Fix traverse bug in retryPendingForwards and block numeric IP addresses in SSRF checks
commit87be4d94a9df02ccd68357fd4698da1ec4db9469 authoriko <mail@iko.soy> dateWed 8 Apr 2026, 04:35 (6 months ago) parent3d339cb
1 file changed+3−3
server.knot+3−3
server.knot+3−3
@@ -318,7 +318,7 @@ isBadServerName = \s ->
318318 || containsMultipleColons sn
319319 || hasOctalOctet sn
320320 || hasHexPrefix sn
321− || (isDigitChar (take 1 sn) && isAllDigitsUntilColonOrEnd sn)
321+ || (isDigitChar (take 1 sn) && isAllDigitsOrDotsUntilColonOrEnd sn)
322322 || take 4 sn == "224." || take 4 sn == "225." || take 4 sn == "226." || take 4 sn == "227."
323323 || take 4 sn == "228." || take 4 sn == "229." || take 4 sn == "230." || take 4 sn == "231."
324324 || take 4 sn == "232." || take 4 sn == "233." || take 4 sn == "234." || take 4 sn == "235."
@@ -529,9 +529,9 @@ retryForwardsForServer = \entries remaining ->
529529
530530retryPendingForwards : [{encryptedBlob: Text, fromKey: Text, messageId: Text, timestamp: Int, toKey: Text, toServer: Text}] -> IO {network} {}
531531retryPendingForwards = \pending -> do
532− let servers = traverse (\x ->
532+ let servers = fold (\acc x ->
533533 if count (do s <- acc; where s == x.toServer; yield s) > 0 then acc
534− else union acc [x.toServer]) pending
534+ else union acc [x.toServer]) [] pending
535535 sendToEach servers (\server ->
536536 retryForwardsForServer (do x <- pending; where x.toServer == server; yield x) maxForwardRetriesPerServer)
537537 yield {}