@@ -41,32 +41,6 @@ class AddrManUncorrupted : public AddrManSerializationMock
41
41
}
42
42
};
43
43
44
- class AddrManCorrupted : public AddrManSerializationMock
45
- {
46
- public:
47
- void Serialize (CDataStream& s) const override
48
- {
49
- // Produces corrupt output that claims addrman has 20 addrs when it only has one addr.
50
- unsigned char nVersion = 1 ;
51
- s << nVersion;
52
- s << ((unsigned char )32 );
53
- s << uint256::ONE;
54
- s << 10 ; // nNew
55
- s << 10 ; // nTried
56
-
57
- int nUBuckets = ADDRMAN_NEW_BUCKET_COUNT ^ (1 << 30 );
58
- s << nUBuckets;
59
-
60
- CService serv;
61
- BOOST_CHECK (Lookup (" 252.1.1.1" , serv, 7777 , false ));
62
- CAddress addr = CAddress (serv, NODE_NONE);
63
- CNetAddr resolved;
64
- BOOST_CHECK (LookupHost (" 252.2.2.2" , resolved, false ));
65
- AddrInfo info = AddrInfo (addr, resolved);
66
- s << info;
67
- }
68
- };
69
-
70
44
static CDataStream AddrmanToStream (const AddrManSerializationMock& _addrman)
71
45
{
72
46
CDataStream ssPeersIn (SER_DISK, CLIENT_VERSION);
@@ -1043,13 +1017,39 @@ BOOST_AUTO_TEST_CASE(load_addrman)
1043
1017
BOOST_CHECK (addrman2.size () == 3 );
1044
1018
}
1045
1019
1020
+ // Produce a corrupt peers.dat that claims 20 addrs when it only has one addr.
1021
+ static CDataStream MakeCorruptPeersDat ()
1022
+ {
1023
+ CDataStream s (SER_DISK, CLIENT_VERSION);
1024
+ s << ::Params ().MessageStart ();
1025
+
1026
+ unsigned char nVersion = 1 ;
1027
+ s << nVersion;
1028
+ s << ((unsigned char )32 );
1029
+ s << uint256::ONE;
1030
+ s << 10 ; // nNew
1031
+ s << 10 ; // nTried
1032
+
1033
+ int nUBuckets = ADDRMAN_NEW_BUCKET_COUNT ^ (1 << 30 );
1034
+ s << nUBuckets;
1035
+
1036
+ CService serv;
1037
+ BOOST_CHECK (Lookup (" 252.1.1.1" , serv, 7777 , false ));
1038
+ CAddress addr = CAddress (serv, NODE_NONE);
1039
+ CNetAddr resolved;
1040
+ BOOST_CHECK (LookupHost (" 252.2.2.2" , resolved, false ));
1041
+ AddrInfo info = AddrInfo (addr, resolved);
1042
+ s << info;
1043
+
1044
+ std::string str = s.str ();
1045
+ std::vector<unsigned char > vchData (str.begin (), str.end ());
1046
+ return CDataStream (vchData, SER_DISK, CLIENT_VERSION);
1047
+ }
1046
1048
1047
1049
BOOST_AUTO_TEST_CASE (load_addrman_corrupted)
1048
1050
{
1049
- AddrManCorrupted addrmanCorrupted;
1050
-
1051
- // Test that the de-serialization of corrupted addrman throws an exception.
1052
- CDataStream ssPeers1 = AddrmanToStream (addrmanCorrupted);
1051
+ // Test that the de-serialization of corrupted peers.dat throws an exception.
1052
+ CDataStream ssPeers1 = MakeCorruptPeersDat ();
1053
1053
bool exceptionThrown = false ;
1054
1054
AddrMan addrman1 (/* asmap */ std::vector<bool >(), /* deterministic */ false , /* consistency_check_ratio */ 100 );
1055
1055
BOOST_CHECK (addrman1.size () == 0 );
@@ -1065,7 +1065,7 @@ BOOST_AUTO_TEST_CASE(load_addrman_corrupted)
1065
1065
BOOST_CHECK (exceptionThrown);
1066
1066
1067
1067
// Test that ReadFromStream fails if peers.dat is corrupt
1068
- CDataStream ssPeers2 = AddrmanToStream (addrmanCorrupted );
1068
+ CDataStream ssPeers2 = MakeCorruptPeersDat ( );
1069
1069
1070
1070
AddrMan addrman2 (/* asmap */ std::vector<bool >(), /* deterministic */ false , /* consistency_check_ratio */ 100 );
1071
1071
BOOST_CHECK (addrman2.size () == 0 );
0 commit comments