diff options
| author | Jeff Garzik <[email protected]> | 2012-05-22 14:39:49 -0700 |
|---|---|---|
| committer | Jeff Garzik <[email protected]> | 2012-05-22 14:39:49 -0700 |
| commit | 5d0f7c4f47e6b9aa382846dd9b4a034e724d461a (patch) | |
| tree | ce4b08cbe53dee3091698617fdcecb1665f7ccd0 /src/db.cpp | |
| parent | Merge pull request #1369 from sipa/bootorder (diff) | |
| parent | Prevent crashes due to missing or corrupted blk????.dat records (diff) | |
| download | discoin-5d0f7c4f47e6b9aa382846dd9b4a034e724d461a.tar.xz discoin-5d0f7c4f47e6b9aa382846dd9b4a034e724d461a.zip | |
Merge pull request #1381 from jgarzik/check-deser
Prevent crashes due to missing or corrupted database records
Diffstat (limited to 'src/db.cpp')
| -rw-r--r-- | src/db.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/db.cpp b/src/db.cpp index a0b9dc20f..5c169fe0c 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -416,9 +416,15 @@ bool CTxDB::ReadOwnerTxes(uint160 hash160, int nMinHeight, vector<CTransaction>& string strType; uint160 hashItem; CDiskTxPos pos; - ssKey >> strType >> hashItem >> pos; int nItemHeight; - ssValue >> nItemHeight; + + try { + ssKey >> strType >> hashItem >> pos; + ssValue >> nItemHeight; + } + catch (std::exception &e) { + return error("%s() : deserialize error", __PRETTY_FUNCTION__); + } // Read transaction if (strType != "owner" || hashItem != hash160) @@ -533,6 +539,8 @@ bool CTxDB::LoadBlockIndex() return false; // Unserialize + + try { string strType; ssKey >> strType; if (strType == "blockindex" && !fRequestShutdown) @@ -564,6 +572,10 @@ bool CTxDB::LoadBlockIndex() { break; // if shutdown requested or finished loading block index } + } // try + catch (std::exception &e) { + return error("%s() : deserialize error", __PRETTY_FUNCTION__); + } } pcursor->close(); |