aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeff Garzik <jgarzik@exmulti.com>2012-05-22 15:23:17 -0400
committerJeff Garzik <jgarzik@redhat.com>2012-05-22 15:23:17 -0400
commit8fe791e4e2db4b66f47d44d2ecaf734e2a36e5ed (patch)
tree7cfbbcc8c0dd418f852e4de9618d3d241163d5b3 /src
parentf94b64c2f3a1994a21c4d99a1806d4f9611f810c (diff)
downloadbitcoin-8fe791e4e2db4b66f47d44d2ecaf734e2a36e5ed.tar.xz
Prevent crashes due to missing or corrupted blk????.dat records
In LoadExternalBlockFile(), errors are already caught... silently. Add a warning message, even though we do not abort the program due to load error.
Diffstat (limited to 'src')
-rw-r--r--src/main.cpp5
-rw-r--r--src/main.h15
2 files changed, 16 insertions, 4 deletions
diff --git a/src/main.cpp b/src/main.cpp
index b925f8d5db..388947e484 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -2133,8 +2133,9 @@ bool LoadExternalBlockFile(FILE* fileIn)
}
}
}
- catch (std::exception &e)
- {
+ catch (std::exception &e) {
+ printf("%s() : Deserialize or I/O error caught during load\n",
+ __PRETTY_FUNCTION__);
}
}
printf("Loaded %i blocks from external file\n", nLoaded);
diff --git a/src/main.h b/src/main.h
index ac5ba254ce..c0fe63a32a 100644
--- a/src/main.h
+++ b/src/main.h
@@ -593,7 +593,13 @@ public:
// Read transaction
if (fseek(filein, pos.nTxPos, SEEK_SET) != 0)
return error("CTransaction::ReadFromDisk() : fseek failed");
- filein >> *this;
+
+ try {
+ filein >> *this;
+ }
+ catch (std::exception &e) {
+ return error("%s() : deserialize or I/O error", __PRETTY_FUNCTION__);
+ }
// Return file pointer
if (pfileRet)
@@ -969,7 +975,12 @@ public:
filein.nType |= SER_BLOCKHEADERONLY;
// Read block
- filein >> *this;
+ try {
+ filein >> *this;
+ }
+ catch (std::exception &e) {
+ return error("%s() : deserialize or I/O error", __PRETTY_FUNCTION__);
+ }
// Check the header
if (!CheckProofOfWork(GetHash(), nBits))