on master help sign in
Fix bug #2: reject /messages batches exceeding maxBatchSize with 413 instead of silent truncation
78d5d84iko
server.knot+4−3
@@ -747,8 +747,9 @@ handleSendMessages = \messages authorization clientIp -> do
747 case auth of
747 case auth of
748 Nothing {} -> yield (Err {error: {status: 401, message: "unauthorized"}})
748 Nothing {} -> yield (Err {error: {status: 401, message: "unauthorized"}})
749 Just {value: senderKey} -> do
749 Just {value: senderKey} -> do
750− let limited = take maxBatchSize messages
750+ if count messages > maxBatchSize
751+ then yield (Err {error: {status: 413, message: "batch_too_large"}})
751− if any (\m -> m.to == senderKey) limited
752+ else if any (\m -> m.to == senderKey) messages
752 then yield (Err {error: {status: 400, message: "self_send"}})
753 then yield (Err {error: {status: 400, message: "self_send"}})
753 else do
754 else do
754 committed <- atomic (do
755 committed <- atomic (do
@@ -757,7 +758,7 @@ handleSendMessages = \messages authorization clientIp -> do
757 m.to,
758 m.to,
758 m.encryptedBlob,
759 m.encryptedBlob,
759 remoteServers: collectPeers (filter (\p -> p.pubkey == m.to && p.expiresAt > t) pres) (\p -> p.server)
760 remoteServers: collectPeers (filter (\p -> p.pubkey == m.to && p.expiresAt > t) pres) (\p -> p.server)
760− }) limited
761+ }) messages
761 forEach staged (\c -> do
762 forEach staged (\c -> do
762 appendMessage c.to c.encryptedBlob t
763 appendMessage c.to c.encryptedBlob t
763 when federationEnabled (do
764 when federationEnabled (do