It seems that bitcoin{d,-qt} can be crashed by being sent an inv of an unknown type. At least, it caused mine to:-

```
2016-11-08 00:45:36.470 ProcessMessages(getdata, 397 bytes): CHECKSUM ERROR expected=6d9dbcdf was=a1046737 peer=39585
2016-11-08 00:45:36.481 

************************
EXCEPTION: St12out_of_range       
CInv::GetCommand(): type=1373179482 unknown type       
bitcoin in ProcessMessages()       

2016-11-08 00:45:36.482 ProcessMessages(getdata, 397 bytes) FAILED peer=39585
2016-11-08 00:45:36.487 

************************
EXCEPTION: St12out_of_range       
CInv::GetCommand(): type=1373179482 unknown type       
bitcoin in msghand       

```

If the `throw std::out_of_range(strprintf("CInv::GetCommand(): type=%d unknown type", type));` in protocol.cpp supposed to cause the program to end?
{
    Init();
}
CAddress::CAddress(CService ipIn, ServiceFlags nServicesIn) : CService(ipIn)
{
    Init();
    nServices = nServicesIn;
}
void CAddress::Init()
{
    nServices = NODE_NONE;
    nTime = 100000000;
}
CInv::CInv()
{
    type = 0;
    hash.SetNull();
}
CInv::CInv(int typeIn, const uint256& hashIn)
{
    type = typeIn;
    hash = hashIn;
}
bool operator<(const CInv& a, const CInv& b)