|
|
|
|
@ -110,13 +110,14 @@ static void tester(
|
|
|
|
|
size_t extensions_in_len, const unsigned char *extensions_in,
|
|
|
|
|
unsigned int filter_len, const uint8_t *filter,
|
|
|
|
|
uint8_t rtp_hdr_val_exp, size_t ext_hdr_exp_len, const unsigned char *ext_hdr_exp,
|
|
|
|
|
size_t extensions_exp_len, const unsigned char *extensions_exp)
|
|
|
|
|
size_t extensions_exp_len, const unsigned char *extensions_exp,
|
|
|
|
|
uint8_t mid_ext, size_t mid_ext_len, const char *mid_str)
|
|
|
|
|
{
|
|
|
|
|
printf("test @ line %u\n", line);
|
|
|
|
|
|
|
|
|
|
// build packets
|
|
|
|
|
unsigned char in [sizeof(struct rtp_header) + ext_hdr_in_len + 2 + extensions_in_len + 3 + 128];
|
|
|
|
|
unsigned char exp[sizeof(struct rtp_header) + ext_hdr_exp_len + 2 + extensions_exp_len + 3 + 128];
|
|
|
|
|
unsigned char in [sizeof(struct rtp_header) + ext_hdr_in_len + 2 + extensions_in_len + 3 + 128 + 4 + 2 + extensions_exp_len];
|
|
|
|
|
unsigned char exp[sizeof(struct rtp_header) + ext_hdr_exp_len + 2 + extensions_exp_len + 3 + 128 + 4 + 2 + extensions_in_len];
|
|
|
|
|
struct sk_buff is;
|
|
|
|
|
struct sk_buff es;
|
|
|
|
|
struct rtp_parsed ip;
|
|
|
|
|
@ -130,6 +131,10 @@ static void tester(
|
|
|
|
|
o.output.num_extmap_filter = filter_len;
|
|
|
|
|
memcpy(o.output.extmap_filter, filter, filter_len);
|
|
|
|
|
|
|
|
|
|
o.output.extmap_mid = mid_ext;
|
|
|
|
|
o.output.extmap_mid_len = mid_ext_len;
|
|
|
|
|
memcpy(o.output.extmap_mid_str, mid_str, mid_ext_len);
|
|
|
|
|
|
|
|
|
|
apply_extmap_filter(&is, &o, &ip);
|
|
|
|
|
|
|
|
|
|
if (is.len != es.len) {
|
|
|
|
|
@ -147,9 +152,10 @@ static void tester(
|
|
|
|
|
printf("ok\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define TEST( \
|
|
|
|
|
#define ATEST( \
|
|
|
|
|
rtp_hdr_val_in, ext_hdr_in, extensions_in, \
|
|
|
|
|
filter, \
|
|
|
|
|
ext_id, ext_str, \
|
|
|
|
|
rtp_hdr_val_exp, ext_hdr_exp, extensions_exp \
|
|
|
|
|
) \
|
|
|
|
|
tester( \
|
|
|
|
|
@ -160,9 +166,17 @@ static void tester(
|
|
|
|
|
sizeof(filter) - 1, (uint8_t *) filter, \
|
|
|
|
|
rtp_hdr_val_exp, \
|
|
|
|
|
sizeof(ext_hdr_exp) - 1, (unsigned char *) ext_hdr_exp, \
|
|
|
|
|
sizeof(extensions_exp) - 1, (unsigned char *) extensions_exp \
|
|
|
|
|
sizeof(extensions_exp) - 1, (unsigned char *) extensions_exp, \
|
|
|
|
|
ext_id, sizeof(ext_str) - 1, ext_str \
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
#define TEST( \
|
|
|
|
|
rtp_hdr_val_in, ext_hdr_in, extensions_in, \
|
|
|
|
|
filter, \
|
|
|
|
|
rtp_hdr_val_exp, ext_hdr_exp, extensions_exp \
|
|
|
|
|
) \
|
|
|
|
|
ATEST(rtp_hdr_val_in, ext_hdr_in, extensions_in, filter, 0, "", rtp_hdr_val_exp, ext_hdr_exp, extensions_exp)
|
|
|
|
|
|
|
|
|
|
int main(void) {
|
|
|
|
|
// no extensions, no filter
|
|
|
|
|
TEST(
|
|
|
|
|
@ -477,5 +491,345 @@ int main(void) {
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// no extensions, no filter, MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x80, "", "",
|
|
|
|
|
"", 5, "a",
|
|
|
|
|
0x90, "\xbe\xde", "\x50" "a"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// no extensions, filter, MID from list
|
|
|
|
|
ATEST(
|
|
|
|
|
0x80, "", "",
|
|
|
|
|
"\x01\x02\x03\x04", 2, "bb",
|
|
|
|
|
0x90, "\xbe\xde", "\x21" "bb"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// no extensions, filter, MID not from list
|
|
|
|
|
ATEST(
|
|
|
|
|
0x80, "", "",
|
|
|
|
|
"\x01\x02\x03\x04", 7, "ccc",
|
|
|
|
|
0x90, "\xbe\xde", "\x72" "ccc"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// one-byte extension, empty filter (not allowed), MID longer than input
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x12" "foo",
|
|
|
|
|
"", 1, "xxxxxx",
|
|
|
|
|
0x90, "\xbe\xde", "\x15" "xxxxxx"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x",
|
|
|
|
|
"", 2, "yyyyyyy",
|
|
|
|
|
0x90, "\xbe\xde", "\x26" "yyyyyyy"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// one-byte extension, empty filter (not allowed), MID shorter than input
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x16" "foooooo",
|
|
|
|
|
"", 1, "xx",
|
|
|
|
|
0x90, "\xbe\xde", "\x11" "xx"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x16" "xxxxxxx",
|
|
|
|
|
"", 2, "yyy",
|
|
|
|
|
0x90, "\xbe\xde", "\x22" "yyy"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// multiple one-byte extensions, empty filter (not allowed), MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x12" "foo" "\x22" "bar" "\x32" "yax" "\x42" "wuz",
|
|
|
|
|
"", 8, "qwerty",
|
|
|
|
|
0x90, "\xbe\xde", "\x85" "qwerty"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\x20" "y" "\x30" "z" "\x40" "p",
|
|
|
|
|
"", 12, "x",
|
|
|
|
|
0x90, "\xbe\xde", "\xc0" "x"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\0\0" "\x20" "y" "\0\0" "\x30" "z" "\0\0" "\x40" "p",
|
|
|
|
|
"", 1, "foo",
|
|
|
|
|
0x90, "\xbe\xde", "\x12" "foo"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// multiple one-byte extensions, allow first, MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x12" "foo" "\x22" "bar" "\x32" "yax" "\x42" "wuz",
|
|
|
|
|
"\x01", 12, "x",
|
|
|
|
|
0x90, "\xbe\xde", "\x12" "foo" "\xc0" "x"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\x20" "y" "\x30" "z" "\x40" "p",
|
|
|
|
|
"\x01", 8, "qwerty",
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\x85" "qwerty"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\0\0" "\x20" "y" "\0\0" "\x30" "z" "\0\0" "\x40" "p",
|
|
|
|
|
"\x01", 1, "foo",
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\x12" "foo" // duplicated
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// multiple one-byte extensions, allow second, MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x12" "foo" "\x22" "bar" "\x32" "yax" "\x42" "wuz",
|
|
|
|
|
"\x02", 1, "foo",
|
|
|
|
|
0x90, "\xbe\xde", "\x22" "bar" "\x12" "foo"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\x20" "y" "\x30" "z" "\x40" "p",
|
|
|
|
|
"\x02", 12, "x",
|
|
|
|
|
0x90, "\xbe\xde", "\x20" "y" "\xc0" "x"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\0\0" "\x20" "y" "\0\0" "\x30" "z" "\0\0" "\x40" "p",
|
|
|
|
|
"\x02", 8, "qwerty",
|
|
|
|
|
0x90, "\xbe\xde", "\x20" "y" "\x85" "qwerty"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// multiple one-byte extensions, allow last, MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x12" "foo" "\x22" "bar" "\x32" "yax" "\x42" "wuz",
|
|
|
|
|
"\x04", 12, "x",
|
|
|
|
|
0x90, "\xbe\xde", "\x42" "wuz" "\xc0" "x"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\x20" "y" "\x30" "z" "\x40" "p",
|
|
|
|
|
"\x04", 1, "foo",
|
|
|
|
|
0x90, "\xbe\xde", "\x40" "p" "\x12" "foo"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\0\0" "\x20" "y" "\0\0" "\x30" "z" "\0\0" "\x40" "p",
|
|
|
|
|
"\x04", 8, "qwerty",
|
|
|
|
|
0x90, "\xbe\xde", "\x40" "p" "\x85" "qwerty"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// multiple one-byte extensions, allow first and third, MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x12" "foo" "\x22" "bar" "\x32" "yax" "\x42" "wuz",
|
|
|
|
|
"\x01\x03", 1, "foo",
|
|
|
|
|
0x90, "\xbe\xde", "\x12" "foo" "\x32" "yax" "\x12" "foo" // duplicated
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\x20" "y" "\x30" "z" "\x40" "p",
|
|
|
|
|
"\x01\x03", 8, "qwerty",
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\x30" "z" "\x85" "qwerty"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\0\0" "\x20" "y" "\0\0" "\x30" "z" "\0\0" "\x40" "p",
|
|
|
|
|
"\x01\x03", 12, "x",
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\x30" "z" "\xc0" "x"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// multiple one-byte extensions, allow second and last, MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x12" "foo" "\x22" "bar" "\x32" "yax" "\x42" "wuz",
|
|
|
|
|
"\x02\x04", 8, "qwerty",
|
|
|
|
|
0x90, "\xbe\xde", "\x22" "bar" "\x42" "wuz" "\x85" "qwerty"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\x20" "y" "\x30" "z" "\x40" "p",
|
|
|
|
|
"\x02\x04", 12, "x",
|
|
|
|
|
0x90, "\xbe\xde", "\x20" "y" "\x40" "p" "\xc0" "x"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "x" "\0\0" "\x20" "y" "\0\0" "\x30" "z" "\0\0" "\x40" "p",
|
|
|
|
|
"\x02\x04", 1, "foo",
|
|
|
|
|
0x90, "\xbe\xde", "\x20" "y" "\x40" "p" "\x12" "foo"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// random padding, allow multiple, MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde",
|
|
|
|
|
"\x10" "a" "\x20" "b" "\0" "\x30" "c" "\0\0" "\x40" "d" "\0\0\0"
|
|
|
|
|
"\x51" "ee" "\x61" "ff" "\0" "\x71" "gg" "\0\0" "\x81" "hh" "\0\0\0"
|
|
|
|
|
"\x92" "kkk" "\xa2" "lll" "\0" "\xb2" "mmm" "\0\0" "\xc2" "nnn" "\0\0\0"
|
|
|
|
|
"\xd3" "oooo",
|
|
|
|
|
"\x01\x04\x07\x0a\x0c\x0d", 8, "qwerty",
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "a" "\x40" "d" "\x71" "gg" "\xa2" "lll" "\xc2" "nnn" "\xd3" "oooo" "\x85" "qwerty"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\xbe\xde",
|
|
|
|
|
"\x10" "a" "\x20" "b" "\0" "\x30" "c" "\0\0" "\x40" "d" "\0\0\0"
|
|
|
|
|
"\x51" "ee" "\x61" "ff" "\0" "\x71" "gg" "\0\0" "\x81" "hh" "\0\0\0"
|
|
|
|
|
"\x92" "kkk" "\xa2" "lll" "\0" "\xb2" "mmm" "\0\0" "\xc2" "nnn" "\0\0\0"
|
|
|
|
|
"\xd5" "oooooo",
|
|
|
|
|
"\x01\x04\x07\x0a\x0c\x0d", 12, "x",
|
|
|
|
|
0x90, "\xbe\xde", "\x10" "a" "\x40" "d" "\x71" "gg" "\xa2" "lll" "\xc2" "nnn" "\xd5" "oooooo" "\xc0" "x" // double \xc
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// two-byte extension, empty filter (not allowed), MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x03" "foo",
|
|
|
|
|
"", 12, "x",
|
|
|
|
|
0x90, "\x01\x00", "\x0c\x01" "x"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x",
|
|
|
|
|
"", 8, "qwerty",
|
|
|
|
|
0x90, "\x01\x00", "\x08\x06" "qwerty"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// multiple two-byte extensions, empty filter (not allowed), MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x03" "foo" "\x02\x03" "bar" "\x03\x03" "yax" "\x04\x03" "wuz",
|
|
|
|
|
"", 12, "x",
|
|
|
|
|
0x90, "\x01\x00", "\x0c\x01" "x"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\x02\x01" "y" "\x03\x01" "z" "\x40" "p",
|
|
|
|
|
"", 8, "qwerty",
|
|
|
|
|
0x90, "\x01\x00", "\x08\x06" "qwerty"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\0\0" "\x02\x01" "y" "\0\0" "\x03\x01" "z" "\0\0" "\x40" "p",
|
|
|
|
|
"", 1, "foo",
|
|
|
|
|
0x90, "\x01\x00", "\x01\x03" "foo"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// multiple two-byte extensions, allow first, MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x03" "foo" "\x02\x03" "bar" "\x03\x03" "yax" "\x04\x03" "wuz",
|
|
|
|
|
"\x01", 8, "qwerty",
|
|
|
|
|
0x90, "\x01\x00", "\x01\x03" "foo" "\x08\x06" "qwerty"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\x02\x01" "y" "\x03\x01" "z" "\x40" "p",
|
|
|
|
|
"\x01", 12, "x",
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\x0c\x01" "x"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\0\0" "\x02\x01" "y" "\0\0" "\x03\x01" "z" "\0\0" "\x40" "p",
|
|
|
|
|
"\x01", 1, "foo",
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\x01\x03" "foo"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// multiple two-byte extensions, allow second, MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x03" "foo" "\x02\x03" "bar" "\x03\x03" "yax" "\x04\x03" "wuz",
|
|
|
|
|
"\x02", 1, "foo",
|
|
|
|
|
0x90, "\x01\x00", "\x02\x03" "bar" "\x01\x03" "foo"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\x02\x01" "y" "\x03\x01" "z" "\x40" "p",
|
|
|
|
|
"\x02", 21, "x",
|
|
|
|
|
0x90, "\x01\x00", "\x02\x01" "y" "\x15\x01" "x"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\0\0" "\x02\x01" "y" "\0\0" "\x03\x01" "z" "\0\0" "\x40" "p",
|
|
|
|
|
"\x02", 8, "qwerty",
|
|
|
|
|
0x90, "\x01\x00", "\x02\x01" "y" "\x08\x06" "qwerty"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// multiple two-byte extensions, allow last, MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x03" "foo" "\x02\x03" "bar" "\x03\x03" "yax" "\x04\x03" "wuz",
|
|
|
|
|
"\x04", 12, "x",
|
|
|
|
|
0x90, "\x01\x00", "\x04\x03" "wuz" "\x0c\x01" "x"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\x02\x01" "y" "\x03\x01" "z" "\x04\x01" "p",
|
|
|
|
|
"\x04", 8, "qwerty",
|
|
|
|
|
0x90, "\x01\x00", "\x04\x01" "p" "\x08\x06" "qwerty"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\0\0" "\x02\x01" "y" "\0\0" "\x03\x01" "z" "\0\0" "\x04\x01" "p",
|
|
|
|
|
"\x04", 1, "foooooooooooooooooooooooooooooo",
|
|
|
|
|
0x90, "\x01\x00", "\x04\x01" "p" "\x01\x1f" "foooooooooooooooooooooooooooooo"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// multiple two-byte extensions, allow first and third, MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x03" "foo" "\x02\x03" "bar" "\x03\x03" "yax" "\x04\x03" "wuz",
|
|
|
|
|
"\x01\x03", 8, "qwerty",
|
|
|
|
|
0x90, "\x01\x00", "\x01\x03" "foo" "\x03\x03" "yax" "\x08\x06" "qwerty"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\x02\x01" "y" "\x03\x01" "z" "\x04\x01" "p",
|
|
|
|
|
"\x01\x03", 28, "foooooooooooooooooooooooooooooo",
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\x03\x01" "z" "\x1c\x1f" "foooooooooooooooooooooooooooooo"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\0\0" "\x02\x01" "y" "\0\0" "\x03\x01" "z" "\0\0" "\x04\x01" "p",
|
|
|
|
|
"\x01\x03", 12, "x",
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\x03\x01" "z" "\x0c\x01" "x"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// multiple two-byte extensions, allow second and last, MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x03" "foo" "\x02\x03" "bar" "\x03\x03" "yax" "\x04\x03" "wuz",
|
|
|
|
|
"\x02\x04", 1, "foo",
|
|
|
|
|
0x90, "\x01\x00", "\x02\x03" "bar" "\x04\x03" "wuz" "\x01\x03" "foo"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\x02\x01" "y" "\x03\x01" "z" "\x04\x01" "p",
|
|
|
|
|
"\x02\x04", 12, "x",
|
|
|
|
|
0x90, "\x01\x00", "\x02\x01" "y" "\x04\x01" "p" "\x0c\x01" "x"
|
|
|
|
|
);
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "x" "\0\0" "\x02\x01" "y" "\0\0" "\x03\x01" "z" "\0\0" "\x04\x01" "p",
|
|
|
|
|
"\x02\x04", 8, "qwerty",
|
|
|
|
|
0x90, "\x01\x00", "\x02\x01" "y" "\x04\x01" "p" "\x08\x06" "qwerty"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// random padding, allow multiple, MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00",
|
|
|
|
|
"\x01\x01" "a" "\x02\x01" "b" "\0" "\x03\x01" "c" "\0\0" "\x04\x01" "d" "\0\0\0"
|
|
|
|
|
"\x05\x02" "ee" "\x06\x02" "ff" "\0" "\x07\x02" "gg" "\0\0" "\x08\x02" "hh" "\0\0\0"
|
|
|
|
|
"\x09\x03" "kkk" "\x0a\x03" "lll" "\0" "\x0b\x03" "mmm" "\0\0" "\x0c\x03" "nnn" "\0\0\0"
|
|
|
|
|
"\x0d\x04" "oooo",
|
|
|
|
|
"\x01\x04\x07\x0a\x0c\x0d", 8, "qwerty",
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "a" "\x04\x01" "d" "\x07\x02" "gg" "\x0a\x03" "lll" "\x0c\x03" "nnn" "\x0d\04" "oooo" "\x08\x06" "qwerty"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00",
|
|
|
|
|
"\x01\x01" "a" "\x02\x01" "b" "\0" "\x03\x01" "c" "\0\0" "\x04\x01" "d" "\0\0\0"
|
|
|
|
|
"\x05\x02" "ee" "\x06\x02" "ff" "\0" "\x07\x02" "gg" "\0\0" "\x08\x02" "hh" "\0\0\0"
|
|
|
|
|
"\x09\x03" "kkk" "\x0a\x03" "lll" "\0" "\x0b\x03" "mmm" "\0\0" "\x0c\x03" "nnn" "\0\0\0"
|
|
|
|
|
"\x0d\x06" "oooooo",
|
|
|
|
|
"\x01\x04\x07\x0a\x0c\x0d", 1, "foo",
|
|
|
|
|
0x90, "\x01\x00", "\x01\x01" "a" "\x04\x01" "d" "\x07\x02" "gg" "\x0a\x03" "lll" "\x0c\x03" "nnn" "\x0d\x06" "oooooo" "\x01\x03" "foo"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// higher IDs and longer values, MID
|
|
|
|
|
ATEST(
|
|
|
|
|
0x90, "\x01\x00",
|
|
|
|
|
"\x31\x01" "a" "\x32\x21" "bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "\0" "\x33\x01" "c" "\0\0" "\x34\x21" "dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "\0\0\0"
|
|
|
|
|
"\x35\x02" "ee" "\x36\x22" "ffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "\0" "\x37\x02" "gg" "\0\0" "\x38\x22" "hhxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "\0\0\0"
|
|
|
|
|
"\x39\x03" "kkk" "\x3a\x23" "lllxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "\0" "\x3b\x03" "mmm" "\0\0" "\x3c\x23" "nnnxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "\0\0\0"
|
|
|
|
|
"\x3d\x04" "oooo",
|
|
|
|
|
"\x31\x34\x37\x3a\x3c\x3d", 27, "foo",
|
|
|
|
|
0x90, "\x01\x00", "\x31\x01" "a" "\x34\x21" "dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "\x37\x02" "gg" "\x3a\x23" "lllxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "\x3c\x23" "nnnxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "\x3d\04" "oooo" "\x1b\x03" "foo"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|