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?
const char *NOTFOUND="notfound";
const char *FILTERLOAD="filterload";
const char *FILTERADD="filteradd";
const char *FILTERCLEAR="filterclear";
const char *REJECT="reject";
const char *SENDHEADERS="sendheaders";
const char *FEEFILTER="feefilter";
const char *SENDCMPCT="sendcmpct";
const char *CMPCTBLOCK="cmpctblock";
const char *GETBLOCKTXN="getblocktxn";
const char *BLOCKTXN="blocktxn";
};
/** All known message types. Keep this in the same order as the list of
 * messages above and in protocol.h.
 */
const static std::string allNetMessageTypes[] = {
    NetMsgType::VERSION,
    NetMsgType::VERACK,
    NetMsgType::ADDR,
    NetMsgType::INV,
    NetMsgType::GETDATA,
    NetMsgType::MERKLEBLOCK,
    NetMsgType::GETBLOCKS,
    NetMsgType::GETHEADERS,
    NetMsgType::TX,
    NetMsgType::HEADERS,
    NetMsgType::BLOCK,
    NetMsgType::GETADDR,
    NetMsgType::MEMPOOL,
    NetMsgType::PING,