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?
#include "protocol.h"
#include "util.h"
#include "utilstrencodings.h"
#ifndef WIN32
# include <arpa/inet.h>
#endif
namespace NetMsgType {
const char *VERSION="version";
const char *VERACK="verack";
const char *ADDR="addr";
const char *INV="inv";
const char *GETDATA="getdata";
const char *MERKLEBLOCK="merkleblock";
const char *GETBLOCKS="getblocks";
const char *GETHEADERS="getheaders";
const char *TX="tx";
const char *HEADERS="headers";
const char *BLOCK="block";
const char *GETADDR="getaddr";
const char *MEMPOOL="mempool";
const char *PING="ping";
const char *PONG="pong";