mirror of
https://github.com/samba-team/samba.git
synced 2024-12-22 13:34:15 +03:00
s3: Add a new set of andx chain handling routines
This is in preparation of getting rid of chain_reply.
This commit is contained in:
parent
90b33a05e9
commit
c9870a62f5
@ -1299,7 +1299,8 @@ PDBTEST_OBJ = torture/pdbtest.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
|
|||||||
$(SMBLDAP_OBJ) $(POPT_LIB_OBJ) \
|
$(SMBLDAP_OBJ) $(POPT_LIB_OBJ) \
|
||||||
$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ)
|
$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ)
|
||||||
|
|
||||||
VFSTEST_OBJ = torture/cmd_vfs.o torture/vfstest.o $(SMBD_OBJ_BASE) $(READLINE_OBJ)
|
VFSTEST_OBJ = torture/cmd_vfs.o torture/vfstest.o $(SMBD_OBJ_BASE) $(READLINE_OBJ) \
|
||||||
|
torture/vfstest_chain.o
|
||||||
|
|
||||||
LOG2PCAP_OBJ = utils/log2pcaphex.o
|
LOG2PCAP_OBJ = utils/log2pcaphex.o
|
||||||
|
|
||||||
|
@ -1880,6 +1880,242 @@ static bool smb_splice_chain(uint8_t **poutbuf, const uint8_t *andx_buf)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool smb1_is_chain(const uint8_t *buf)
|
||||||
|
{
|
||||||
|
uint8_t cmd, wct, andx_cmd;
|
||||||
|
|
||||||
|
cmd = CVAL(buf, smb_com);
|
||||||
|
if (!is_andx_req(cmd)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
wct = CVAL(buf, smb_wct);
|
||||||
|
if (wct < 2) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
andx_cmd = CVAL(buf, smb_vwv);
|
||||||
|
return (andx_cmd != 0xFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool smb1_walk_chain(const uint8_t *buf,
|
||||||
|
bool (*fn)(uint8_t cmd,
|
||||||
|
uint8_t wct, const uint16_t *vwv,
|
||||||
|
uint16_t num_bytes, const uint8_t *bytes,
|
||||||
|
void *private_data),
|
||||||
|
void *private_data)
|
||||||
|
{
|
||||||
|
size_t smblen = smb_len(buf);
|
||||||
|
const char *smb_buf = smb_base(buf);
|
||||||
|
uint8_t cmd, chain_cmd;
|
||||||
|
uint8_t wct;
|
||||||
|
const uint16_t *vwv;
|
||||||
|
uint16_t num_bytes;
|
||||||
|
const uint8_t *bytes;
|
||||||
|
|
||||||
|
cmd = CVAL(buf, smb_com);
|
||||||
|
wct = CVAL(buf, smb_wct);
|
||||||
|
vwv = (const uint16_t *)(buf + smb_vwv);
|
||||||
|
num_bytes = smb_buflen(buf);
|
||||||
|
bytes = (uint8_t *)smb_buf_const(buf);
|
||||||
|
|
||||||
|
if (!fn(cmd, wct, vwv, num_bytes, bytes, private_data)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_andx_req(cmd)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (wct < 2) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
chain_cmd = CVAL(vwv, 0);
|
||||||
|
|
||||||
|
while (chain_cmd != 0xff) {
|
||||||
|
uint32_t chain_offset; /* uint32_t to avoid overflow */
|
||||||
|
size_t length_needed;
|
||||||
|
ptrdiff_t vwv_offset;
|
||||||
|
|
||||||
|
chain_offset = SVAL(vwv+1, 0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if the client tries to fool us. The chain
|
||||||
|
* offset needs to point beyond the current request in
|
||||||
|
* the chain, it needs to strictly grow. Otherwise we
|
||||||
|
* might be tricked into an endless loop always
|
||||||
|
* processing the same request over and over again. We
|
||||||
|
* used to assume that vwv and the byte buffer array
|
||||||
|
* in a chain are always attached, but OS/2 the
|
||||||
|
* Write&X/Read&X chain puts the Read&X vwv array
|
||||||
|
* right behind the Write&X vwv chain. The Write&X bcc
|
||||||
|
* array is put behind the Read&X vwv array. So now we
|
||||||
|
* check whether the chain offset points strictly
|
||||||
|
* behind the previous vwv array. req->buf points
|
||||||
|
* right after the vwv array of the previous
|
||||||
|
* request. See
|
||||||
|
* https://bugzilla.samba.org/show_bug.cgi?id=8360 for
|
||||||
|
* more information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
vwv_offset = ((const char *)vwv - smb_buf);
|
||||||
|
if (chain_offset <= vwv_offset) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Next check: Make sure the chain offset does not
|
||||||
|
* point beyond the overall smb request length.
|
||||||
|
*/
|
||||||
|
|
||||||
|
length_needed = chain_offset+1; /* wct */
|
||||||
|
if (length_needed > smblen) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Now comes the pointer magic. Goal here is to set up
|
||||||
|
* vwv and buf correctly again. The chain offset (the
|
||||||
|
* former vwv[1]) points at the new wct field.
|
||||||
|
*/
|
||||||
|
|
||||||
|
wct = CVAL(smb_buf, chain_offset);
|
||||||
|
|
||||||
|
if (is_andx_req(chain_cmd) && (wct < 2)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Next consistency check: Make the new vwv array fits
|
||||||
|
* in the overall smb request.
|
||||||
|
*/
|
||||||
|
|
||||||
|
length_needed += (wct+1)*sizeof(uint16_t); /* vwv+buflen */
|
||||||
|
if (length_needed > smblen) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
vwv = (const uint16_t *)(smb_buf + chain_offset + 1);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Now grab the new byte buffer....
|
||||||
|
*/
|
||||||
|
|
||||||
|
num_bytes = SVAL(vwv+wct, 0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* .. and check that it fits.
|
||||||
|
*/
|
||||||
|
|
||||||
|
length_needed += num_bytes;
|
||||||
|
if (length_needed > smblen) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
bytes = (const uint8_t *)(vwv+wct+1);
|
||||||
|
|
||||||
|
if (!fn(chain_cmd, wct, vwv, num_bytes, bytes, private_data)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!is_andx_req(chain_cmd)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
chain_cmd = CVAL(vwv, 0);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool smb1_chain_length_cb(uint8_t cmd,
|
||||||
|
uint8_t wct, const uint16_t *vwv,
|
||||||
|
uint16_t num_bytes, const uint8_t *bytes,
|
||||||
|
void *private_data)
|
||||||
|
{
|
||||||
|
unsigned *count = (unsigned *)private_data;
|
||||||
|
*count += 1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned smb1_chain_length(const uint8_t *buf)
|
||||||
|
{
|
||||||
|
unsigned count = 0;
|
||||||
|
|
||||||
|
if (!smb1_walk_chain(buf, smb1_chain_length_cb, &count)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct smb1_parse_chain_state {
|
||||||
|
TALLOC_CTX *mem_ctx;
|
||||||
|
const uint8_t *buf;
|
||||||
|
struct smbd_server_connection *sconn;
|
||||||
|
bool encrypted;
|
||||||
|
uint32_t seqnum;
|
||||||
|
|
||||||
|
struct smb_request **reqs;
|
||||||
|
unsigned num_reqs;
|
||||||
|
};
|
||||||
|
|
||||||
|
static bool smb1_parse_chain_cb(uint8_t cmd,
|
||||||
|
uint8_t wct, const uint16_t *vwv,
|
||||||
|
uint16_t num_bytes, const uint8_t *bytes,
|
||||||
|
void *private_data)
|
||||||
|
{
|
||||||
|
struct smb1_parse_chain_state *state =
|
||||||
|
(struct smb1_parse_chain_state *)private_data;
|
||||||
|
struct smb_request **reqs;
|
||||||
|
struct smb_request *req;
|
||||||
|
bool ok;
|
||||||
|
|
||||||
|
reqs = talloc_realloc(state->mem_ctx, state->reqs,
|
||||||
|
struct smb_request *, state->num_reqs+1);
|
||||||
|
if (reqs == NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
state->reqs = reqs;
|
||||||
|
|
||||||
|
req = talloc(reqs, struct smb_request);
|
||||||
|
if (req == NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ok = init_smb_request(req, state->sconn, state->buf, 0,
|
||||||
|
state->encrypted, state->seqnum);
|
||||||
|
if (!ok) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
req->cmd = cmd;
|
||||||
|
req->wct = wct;
|
||||||
|
req->vwv = vwv;
|
||||||
|
req->buflen = num_bytes;
|
||||||
|
req->buf = bytes;
|
||||||
|
|
||||||
|
reqs[state->num_reqs] = req;
|
||||||
|
state->num_reqs += 1;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool smb1_parse_chain(TALLOC_CTX *mem_ctx, const uint8_t *buf,
|
||||||
|
struct smbd_server_connection *sconn,
|
||||||
|
bool encrypted, uint32_t seqnum,
|
||||||
|
struct smb_request ***reqs, unsigned *num_reqs)
|
||||||
|
{
|
||||||
|
struct smb1_parse_chain_state state;
|
||||||
|
|
||||||
|
state.mem_ctx = mem_ctx;
|
||||||
|
state.buf = buf;
|
||||||
|
state.sconn = sconn;
|
||||||
|
state.encrypted = encrypted;
|
||||||
|
state.seqnum = seqnum;
|
||||||
|
state.reqs = NULL;
|
||||||
|
state.num_reqs = 0;
|
||||||
|
|
||||||
|
if (!smb1_walk_chain(buf, smb1_parse_chain_cb, &state)) {
|
||||||
|
TALLOC_FREE(state.reqs);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
*reqs = state.reqs;
|
||||||
|
*num_reqs = state.num_reqs;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
Construct a chained reply and add it to the already made reply
|
Construct a chained reply and add it to the already made reply
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
@ -785,6 +785,18 @@ void add_to_common_flags2(uint32 v);
|
|||||||
void remove_from_common_flags2(uint32 v);
|
void remove_from_common_flags2(uint32 v);
|
||||||
void construct_reply_common_req(struct smb_request *req, char *outbuf);
|
void construct_reply_common_req(struct smb_request *req, char *outbuf);
|
||||||
size_t req_wct_ofs(struct smb_request *req);
|
size_t req_wct_ofs(struct smb_request *req);
|
||||||
|
bool smb1_is_chain(const uint8_t *buf);
|
||||||
|
bool smb1_walk_chain(const uint8_t *buf,
|
||||||
|
bool (*fn)(uint8_t cmd,
|
||||||
|
uint8_t wct, const uint16_t *vwv,
|
||||||
|
uint16_t num_bytes, const uint8_t *bytes,
|
||||||
|
void *private_data),
|
||||||
|
void *private_data);
|
||||||
|
unsigned smb1_chain_length(const uint8_t *buf);
|
||||||
|
bool smb1_parse_chain(TALLOC_CTX *mem_ctx, const uint8_t *buf,
|
||||||
|
struct smbd_server_connection *sconn,
|
||||||
|
bool encrypted, uint32_t seqnum,
|
||||||
|
struct smb_request ***reqs, unsigned *num_reqs);
|
||||||
void chain_reply(struct smb_request *req);
|
void chain_reply(struct smb_request *req);
|
||||||
bool req_is_in_chain(struct smb_request *req);
|
bool req_is_in_chain(struct smb_request *req);
|
||||||
void smbd_process(struct tevent_context *ev_ctx,
|
void smbd_process(struct tevent_context *ev_ctx,
|
||||||
|
@ -1320,5 +1320,7 @@ struct cmd_set vfs_commands[] = {
|
|||||||
"setxattr <path> <name> <value> [<flags>]" },
|
"setxattr <path> <name> <value> [<flags>]" },
|
||||||
{ "removexattr", cmd_removexattr, "VFS removexattr()",
|
{ "removexattr", cmd_removexattr, "VFS removexattr()",
|
||||||
"removexattr <path> <name>\n" },
|
"removexattr <path> <name>\n" },
|
||||||
|
{ "test_chain", cmd_test_chain, "test chain code",
|
||||||
|
"test_chain" },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
@ -46,3 +46,6 @@ struct cmd_set {
|
|||||||
const char *description;
|
const char *description;
|
||||||
const char *usage;
|
const char *usage;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
NTSTATUS cmd_test_chain(struct vfs_state *vfs, TALLOC_CTX *mem_ctx,
|
||||||
|
int argc, const char **argv);
|
||||||
|
342
source3/torture/vfstest_chain.c
Normal file
342
source3/torture/vfstest_chain.c
Normal file
@ -0,0 +1,342 @@
|
|||||||
|
/*
|
||||||
|
Unix SMB/CIFS implementation.
|
||||||
|
Test smbd chain routines
|
||||||
|
|
||||||
|
Copyright (C) Volker Lendecke 2012
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "includes.h"
|
||||||
|
#include "vfstest.h"
|
||||||
|
#include "smbd/proto.h"
|
||||||
|
|
||||||
|
static const uint8_t nonchain1_data[] =
|
||||||
|
{0x00,0x00,0x00,0xBE,0xFF,0x53,0x4D,0x42,0x72,0x00,0x00,0x00,0x00,0x18,0x43
|
||||||
|
,0xC8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||||
|
,0xFE,0xFF,0x00,0x00,0x01,0x00,0x00,0x9B,0x00,0x02,0x50,0x43,0x20,0x4E,0x45
|
||||||
|
,0x54,0x57,0x4F,0x52,0x4B,0x20,0x50,0x52,0x4F,0x47,0x52,0x41,0x4D,0x20,0x31
|
||||||
|
,0x2E,0x30,0x00,0x02,0x4D,0x49,0x43,0x52,0x4F,0x53,0x4F,0x46,0x54,0x20,0x4E
|
||||||
|
,0x45,0x54,0x57,0x4F,0x52,0x4B,0x53,0x20,0x31,0x2E,0x30,0x33,0x00,0x02,0x4D
|
||||||
|
,0x49,0x43,0x52,0x4F,0x53,0x4F,0x46,0x54,0x20,0x4E,0x45,0x54,0x57,0x4F,0x52
|
||||||
|
,0x4B,0x53,0x20,0x33,0x2E,0x30,0x00,0x02,0x4C,0x41,0x4E,0x4D,0x41,0x4E,0x31
|
||||||
|
,0x2E,0x30,0x00,0x02,0x4C,0x4D,0x31,0x2E,0x32,0x58,0x30,0x30,0x32,0x00,0x02
|
||||||
|
,0x44,0x4F,0x53,0x20,0x4C,0x41,0x4E,0x4D,0x41,0x4E,0x32,0x2E,0x31,0x00,0x02
|
||||||
|
,0x4C,0x41,0x4E,0x4D,0x41,0x4E,0x32,0x2E,0x31,0x00,0x02,0x53,0x61,0x6D,0x62
|
||||||
|
,0x61,0x00,0x02,0x4E,0x54,0x20,0x4C,0x41,0x4E,0x4D,0x41,0x4E,0x20,0x31,0x2E
|
||||||
|
,0x30,0x00,0x02,0x4E,0x54,0x20,0x4C,0x4D,0x20,0x30,0x2E,0x31,0x32,0x00};
|
||||||
|
|
||||||
|
static const uint8_t nonchain2_data[] =
|
||||||
|
{0x00,0x00,0x00,0xA4,0xFF,0x53,0x4D,0x42,0x73,0x00,0x00,0x00,0x00,0x18,0x43
|
||||||
|
,0xC8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF
|
||||||
|
,0x00,0xE7,0x00,0x00,0x02,0x00,0x0C,0xFF,0x00,0x00,0x00,0xFF,0xFF,0x02,0x00
|
||||||
|
,0x01,0x00,0x00,0x00,0x00,0x00,0x53,0x00,0x00,0x00,0x00,0x00,0x54,0x00,0x00
|
||||||
|
,0x80,0x69,0x00,0x60,0x51,0x06,0x06,0x2B,0x06,0x01,0x05,0x05,0x02,0xA0,0x47
|
||||||
|
,0x30,0x45,0xA0,0x0E,0x30,0x0C,0x06,0x0A,0x2B,0x06,0x01,0x04,0x01,0x82,0x37
|
||||||
|
,0x02,0x02,0x0A,0xA2,0x33,0x04,0x31,0x4E,0x54,0x4C,0x4D,0x53,0x53,0x50,0x00
|
||||||
|
,0x01,0x00,0x00,0x00,0x15,0x82,0x08,0x60,0x09,0x00,0x09,0x00,0x20,0x00,0x00
|
||||||
|
,0x00,0x08,0x00,0x08,0x00,0x29,0x00,0x00,0x00,0x57,0x4F,0x52,0x4B,0x47,0x52
|
||||||
|
,0x4F,0x55,0x50,0x46,0x52,0x45,0x45,0x42,0x53,0x44,0x38,0x55,0x00,0x6E,0x00
|
||||||
|
,0x69,0x00,0x78,0x00,0x00,0x00,0x53,0x00,0x61,0x00,0x6D,0x00,0x62,0x00,0x61
|
||||||
|
,0x00,0x00,0x00};
|
||||||
|
|
||||||
|
static const uint8_t chain1_data[] =
|
||||||
|
{0x00,0x00,0x00,0x57,0xFF,0x53,0x4D,0x42,0x2D,0x00,0x00,0x00,0x00,0x88,0x03
|
||||||
|
,0xC8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00
|
||||||
|
,0x00,0xE7,0x64,0x00,0x05,0x00,0x0F,0x2F,0x00,0x44,0x00,0x67,0x19,0x20,0x00
|
||||||
|
,0x40,0xDD,0x44,0x4F,0x07,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x01
|
||||||
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x04,0x00
|
||||||
|
,0x54,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||||
|
,0x00};
|
||||||
|
|
||||||
|
static const uint8_t chain2_data[] =
|
||||||
|
{0x00,0x00,0x00,0x8C,0xFF,0x53,0x4D,0x42,0x73,0x00,0x00,0x00,0x00,0x18,0x43
|
||||||
|
,0xC8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF
|
||||||
|
,0x03,0xE7,0x00,0x00,0x02,0x00,0x0D,0x75,0x00,0x58,0x00,0xFF,0xFF,0x02,0x00
|
||||||
|
,0x03,0xE7,0x04,0xE7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x54
|
||||||
|
,0x00,0x00,0x00,0x1B,0x00,0x00,0x00,0x00,0x00,0x00,0x55,0x00,0x6E,0x00,0x69
|
||||||
|
,0x00,0x78,0x00,0x00,0x00,0x53,0x00,0x61,0x00,0x6D,0x00,0x62,0x00,0x61,0x00
|
||||||
|
,0x00,0x00,0x04,0xFF,0xFF,0x00,0x00,0x08,0x00,0x01,0x00,0x29,0x00,0x00,0x5C
|
||||||
|
,0x00,0x5C,0x00,0x31,0x00,0x32,0x00,0x37,0x00,0x2E,0x00,0x30,0x00,0x2E,0x00
|
||||||
|
,0x30,0x00,0x2E,0x00,0x31,0x00,0x5C,0x00,0x49,0x00,0x50,0x00,0x43,0x00,0x24
|
||||||
|
,0x00,0x00,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x00};
|
||||||
|
|
||||||
|
static const uint8_t bug_8360_data[] =
|
||||||
|
{0x00,0x00,0x00,0xE9,0xFF,0x53,0x4D,0x42,0x2F,0x00,0x00,0x00,0x00,0x08,0x03
|
||||||
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00
|
||||||
|
,0x94,0x00,0x64,0x00,0xA5,0x45,0x0C,0x0A,0x00,0x3C,0x00,0xFA,0x4B,0x00,0x00
|
||||||
|
,0x00,0x00,0xFE,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x9D,0x00,0x4C
|
||||||
|
,0x00,0x9E,0x00,0x00,0x05,0xFA,0x4B,0x03,0x00,0x90,0x26,0x00,0x00,0x00,0x00
|
||||||
|
,0x00,0x00,0x41,0x4E,0x4D,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
|
||||||
|
,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
|
||||||
|
,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
|
||||||
|
,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
|
||||||
|
,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
|
||||||
|
,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
|
||||||
|
,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
|
||||||
|
,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
|
||||||
|
,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
|
||||||
|
,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58
|
||||||
|
,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58};
|
||||||
|
|
||||||
|
static const uint8_t invalid1_data[] =
|
||||||
|
{0x00,0x00,0x0A,0x2E,0xFF,0x53,0x4D,0x42,0x72,0x00,0x00,0x00,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9,0xA9
|
||||||
|
,0xA9,0xA9,0xA9,0xA9,0xA9,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||||
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0x15,0x00,0x00,0x81,0x0B,0x00,0x77
|
||||||
|
,0x00,0x02,0x50,0x43,0x20,0x4E,0x45,0x54,0x57,0x4F,0x52,0x4B,0x20,0x50,0x52
|
||||||
|
,0x4F,0x47,0x52,0x41,0x4D,0x20,0x31,0x2E,0x30,0x00,0x02,0x4D,0x49,0x43,0x52
|
||||||
|
,0x4F,0x53,0x4F,0x46,0x54,0x20,0x4E,0x45,0x54,0x57,0x4F,0x52,0x4B,0x53,0x20
|
||||||
|
,0x33,0x2E,0x30,0x00,0x02,0x44,0x4F,0x53,0x20,0x4C,0x4D,0x31,0x2E,0x32,0x58
|
||||||
|
,0x30,0x30,0x32,0x00,0x02,0x44,0x4F,0x53,0x20,0x4C,0x41,0x4E,0x4D,0x41,0x4E
|
||||||
|
,0x32,0x2E,0x31,0x00,0x02,0x57,0x69,0x6E,0x64,0x6F,0x77,0x73,0x20,0x66,0x6F
|
||||||
|
,0x72,0x20,0x57,0x6F,0x72,0x6B,0x67,0x72,0x6F,0x75,0x70,0x73,0x20,0x33,0x2E
|
||||||
|
,0x31,0x61,0x00,0x02,0x4E,0x54,0x20,0x4C,0x4D,0x20,0x30,0x2E,0x31,0x32,0x00};
|
||||||
|
|
||||||
|
static const uint8_t invalid2_data[] =
|
||||||
|
{0x00,0x00,0x01,0x60,0xFF,0x53,0x4D,0x42,0x73,0x00,0x00,0x00,0x00,0x18,0x07
|
||||||
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74
|
||||||
|
,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00
|
||||||
|
,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74
|
||||||
|
,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00
|
||||||
|
,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74
|
||||||
|
,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00
|
||||||
|
,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74
|
||||||
|
,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00
|
||||||
|
,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74
|
||||||
|
,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00
|
||||||
|
,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74
|
||||||
|
,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00
|
||||||
|
,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74
|
||||||
|
,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00,0x74,0x00
|
||||||
|
,0x74,0x00,0x74,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00
|
||||||
|
,0x00,0x04,0x00,0x0D,0x75,0x00,0x54,0x00,0x68,0x0B,0x02,0x00,0x00,0x00,0x04
|
||||||
|
,0x06,0x03,0x80,0x01,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0xD4,0x00,0x00,0x00
|
||||||
|
,0x17,0x00,0x00,0x00,0x57,0x69,0x6E,0x64,0x6F,0x77,0x73,0x20,0x37,0x20,0x50
|
||||||
|
,0x72,0x6F,0x00,0x57,0x49,0x4E,0x37,0x00,0x00,0x00,0x04,0xFF,0x00,0x91,0x00
|
||||||
|
,0x08,0x00,0x18,0x00,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||||
|
,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||||
|
,0x5C,0x5C,0x31,0x39,0x32,0x2E,0x31,0x36,0x38,0x2E,0x31,0x2E,0x38,0x36,0x5C
|
||||||
|
,0x49,0x50,0x43,0x24,0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x00};
|
||||||
|
/* end binary data. size = 356 bytes */
|
||||||
|
|
||||||
|
NTSTATUS cmd_test_chain(struct vfs_state *vfs, TALLOC_CTX *mem_ctx,
|
||||||
|
int argc, const char **argv)
|
||||||
|
{
|
||||||
|
bool ret = true;
|
||||||
|
unsigned chain_length;
|
||||||
|
struct smb_request **requests;
|
||||||
|
|
||||||
|
ret &= !smb1_is_chain(nonchain1_data);
|
||||||
|
ret &= !smb1_is_chain(nonchain2_data);
|
||||||
|
|
||||||
|
ret &= smb1_is_chain(chain1_data);
|
||||||
|
|
||||||
|
chain_length = smb1_chain_length(chain1_data);
|
||||||
|
ret &= (chain_length == 3);
|
||||||
|
|
||||||
|
ret &= smb1_is_chain(chain2_data);
|
||||||
|
|
||||||
|
chain_length = smb1_chain_length(chain2_data);
|
||||||
|
ret &= (chain_length == 2);
|
||||||
|
|
||||||
|
ret &= smb1_is_chain(bug_8360_data);
|
||||||
|
|
||||||
|
chain_length = smb1_chain_length(bug_8360_data);
|
||||||
|
ret &= (chain_length == 2);
|
||||||
|
|
||||||
|
ret &= !smb1_is_chain(invalid1_data);
|
||||||
|
|
||||||
|
chain_length = smb1_chain_length(invalid1_data);
|
||||||
|
ret &= (chain_length == 1);
|
||||||
|
|
||||||
|
ret &= !smb1_is_chain(invalid2_data);
|
||||||
|
|
||||||
|
chain_length = smb1_chain_length(invalid2_data);
|
||||||
|
ret &= (chain_length == 0);
|
||||||
|
|
||||||
|
ret &= smb1_parse_chain(talloc_tos(), chain1_data,
|
||||||
|
vfs->conn->sconn, false, 0,
|
||||||
|
&requests, &chain_length);
|
||||||
|
ret &= (chain_length == 3);
|
||||||
|
|
||||||
|
ret &= smb1_parse_chain(talloc_tos(), chain2_data,
|
||||||
|
vfs->conn->sconn, false, 0,
|
||||||
|
&requests, &chain_length);
|
||||||
|
ret &= (chain_length == 2);
|
||||||
|
|
||||||
|
return ret ? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
|
||||||
|
}
|
@ -584,7 +584,8 @@ LOCKTEST_SRC = '''torture/locktest.c'''
|
|||||||
|
|
||||||
PDBTEST_SRC = '''torture/pdbtest.c'''
|
PDBTEST_SRC = '''torture/pdbtest.c'''
|
||||||
|
|
||||||
VFSTEST_SRC = '''torture/cmd_vfs.c torture/vfstest.c'''
|
VFSTEST_SRC = '''torture/cmd_vfs.c torture/vfstest.c
|
||||||
|
torture/vfstest_chain.c'''
|
||||||
|
|
||||||
LOG2PCAP_SRC = '''utils/log2pcaphex.c'''
|
LOG2PCAP_SRC = '''utils/log2pcaphex.c'''
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user