From 3cab7da1f4d8c0616f7285687a8cd3574da5f418 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Fri, 6 Jul 2012 01:18:12 -0700 Subject: [PATCH 1/2] Trap a zero-length message. --- src/Peer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Peer.cpp b/src/Peer.cpp index eff19b3103..b992823b58 100644 --- a/src/Peer.cpp +++ b/src/Peer.cpp @@ -326,7 +326,7 @@ void Peer::handle_read_header(const boost::system::error_code& error) { unsigned msg_len = PackedMessage::getLength(mReadbuf); // WRITEME: Compare to maximum message length, abort if too large - if (msg_len>(32*1024*1024)) + if ((msg_len > (32 * 1024 * 1024)) || (msg_len == 0)) { detach("hrh"); return; From 6be83c09db322a3e0254eb9fb7ee260a81669d2c Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Mon, 9 Jul 2012 17:12:20 -0700 Subject: [PATCH 2/2] Add SLE next/prev functions. --- src/Ledger.h | 6 ++++++ src/LedgerNode.cpp | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/Ledger.h b/src/Ledger.h index 482fb27ba3..e175a18209 100644 --- a/src/Ledger.h +++ b/src/Ledger.h @@ -153,6 +153,12 @@ public: static Ledger::pointer loadByIndex(uint32 ledgerIndex); static Ledger::pointer loadByHash(const uint256& ledgerHash); + // next/prev function + SLE::pointer getNextSLE(const uint256& hash); // first node >hash + SLE::pointer getNextSLE(const uint256& hash, const uint256& max); // first node >hash, min + // index calculation functions static uint256 getAccountRootIndex(const uint160& uAccountID); diff --git a/src/LedgerNode.cpp b/src/LedgerNode.cpp index d059b9c3e7..84be09053b 100644 --- a/src/LedgerNode.cpp +++ b/src/LedgerNode.cpp @@ -43,6 +43,38 @@ LedgerStateParms Ledger::writeBack(LedgerStateParms parms, SLE::pointer entry) return lepOKAY; } +SLE::pointer Ledger::getNextSLE(const uint256& hash) +{ + SHAMapItem::pointer node = mAccountStateMap->peekNextItem(hash); + if (!node) + return SLE::pointer(); + return boost::make_shared(node->peekSerializer(), node->getTag()); +} + +SLE::pointer Ledger::getNextSLE(const uint256& hash, const uint256& max) +{ + SHAMapItem::pointer node = mAccountStateMap->peekNextItem(hash); + if ((!node) || (node->getTag() > max)) + return SLE::pointer(); + return boost::make_shared(node->peekSerializer(), node->getTag()); +} + +SLE::pointer Ledger::getPrevSLE(const uint256& hash) +{ + SHAMapItem::pointer node = mAccountStateMap->peekPrevItem(hash); + if (!node) + return SLE::pointer(); + return boost::make_shared(node->peekSerializer(), node->getTag()); +} + +SLE::pointer Ledger::getPrevSLE(const uint256& hash, const uint256& min) +{ + SHAMapItem::pointer node = mAccountStateMap->peekNextItem(hash); + if ((!node) || (node->getTag() < min)) + return SLE::pointer(); + return boost::make_shared(node->peekSerializer(), node->getTag()); +} + SLE::pointer Ledger::getASNode(LedgerStateParms& parms, const uint256& nodeID, LedgerEntryType let ) {