|
Packit |
fcad23 |
/* HEADER Testing ASN.1 encoding and decoding */
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
int i;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
#if 0
|
|
Packit |
fcad23 |
snmp_set_do_debugging(TRUE);
|
|
Packit |
fcad23 |
debug_register_tokens("dumpv_recv,dumpv_send,asn");
|
|
Packit |
fcad23 |
#endif
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
const long intval[] = {
|
|
Packit |
fcad23 |
-0x80000000L,
|
|
Packit |
fcad23 |
-0x7fffffffL,
|
|
Packit |
fcad23 |
-0xffffL,
|
|
Packit |
fcad23 |
-3,
|
|
Packit |
fcad23 |
-1,
|
|
Packit |
fcad23 |
0,
|
|
Packit |
fcad23 |
1,
|
|
Packit |
fcad23 |
3,
|
|
Packit |
fcad23 |
0xffff,
|
|
Packit |
fcad23 |
0x7fffffff,
|
|
Packit |
fcad23 |
};
|
|
Packit |
fcad23 |
for (i = 0; i < sizeof(intval)/sizeof(intval[0]); ++i) {
|
|
Packit |
fcad23 |
u_char encoded[256];
|
|
Packit |
fcad23 |
size_t encoded_length;
|
|
Packit |
fcad23 |
u_char *build_result;
|
|
Packit |
fcad23 |
size_t decoded_length;
|
|
Packit |
fcad23 |
u_char decoded_type;
|
|
Packit |
fcad23 |
long decoded_value = 0;
|
|
Packit |
fcad23 |
u_char *parse_result;
|
|
Packit |
fcad23 |
u_char *rbuild_result = NULL;
|
|
Packit |
fcad23 |
size_t rbuild_len = 0;
|
|
Packit |
fcad23 |
size_t offset = 0;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
encoded_length = sizeof(encoded);
|
|
Packit |
fcad23 |
build_result = asn_build_int(encoded, &encoded_length, ASN_INTEGER,
|
|
Packit |
fcad23 |
&intval[i], sizeof(intval[i]));
|
|
Packit |
fcad23 |
OKF(build_result + encoded_length == encoded + sizeof(encoded),
|
|
Packit |
fcad23 |
("asn_build_int(%ld)", intval[i]));
|
|
Packit |
fcad23 |
decoded_length = sizeof(encoded) - encoded_length;
|
|
Packit |
fcad23 |
parse_result = asn_parse_int(encoded, &decoded_length, &decoded_type,
|
|
Packit |
fcad23 |
&decoded_value, sizeof(decoded_value));
|
|
Packit |
fcad23 |
OKF(parse_result == build_result && decoded_type == ASN_INTEGER
|
|
Packit |
fcad23 |
&& decoded_value == intval[i],
|
|
Packit |
fcad23 |
("asn_parse_int(asn_build_int(%ld)) %s; decoded type %d <> %d;"
|
|
Packit |
fcad23 |
" decoded value %ld",
|
|
Packit |
fcad23 |
intval[i], parse_result == build_result ? "succeeded" : "failed",
|
|
Packit |
fcad23 |
decoded_type, ASN_INTEGER, decoded_value));
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
OKF(asn_realloc_rbuild_int(&rbuild_result, &rbuild_len, &offset, 1,
|
|
Packit |
fcad23 |
ASN_INTEGER, &intval[i], sizeof(intval[i])),
|
|
Packit |
fcad23 |
("asn_realloc_rbuild_int(%ld)", intval[i]));
|
|
Packit |
fcad23 |
OKF(sizeof(encoded) - encoded_length == offset &&
|
|
Packit |
fcad23 |
memcmp(encoded, rbuild_result + rbuild_len - offset,
|
|
Packit |
fcad23 |
offset) == 0,
|
|
Packit |
fcad23 |
("asn_build_int(%ld) != asn_realloc_rbuild_int(%ld)",
|
|
Packit |
fcad23 |
intval[i], intval[i]));
|
|
Packit |
fcad23 |
free (rbuild_result);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
const unsigned long intval[] = {
|
|
Packit |
fcad23 |
0, 1, 3, 0xffff, 0x7fffffff, 0x80000000U, 0xffffffffU
|
|
Packit |
fcad23 |
};
|
|
Packit |
fcad23 |
for (i = 0; i < sizeof(intval)/sizeof(intval[0]); ++i) {
|
|
Packit |
fcad23 |
u_char encoded[256];
|
|
Packit |
fcad23 |
size_t encoded_length;
|
|
Packit |
fcad23 |
u_char *build_result;
|
|
Packit |
fcad23 |
size_t decoded_length;
|
|
Packit |
fcad23 |
u_char decoded_type;
|
|
Packit |
fcad23 |
unsigned long decoded_value = 0;
|
|
Packit |
fcad23 |
u_char *parse_result;
|
|
Packit |
fcad23 |
u_char *rbuild_result = NULL;
|
|
Packit |
fcad23 |
size_t rbuild_len = 0;
|
|
Packit |
fcad23 |
size_t offset = 0;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
encoded_length = sizeof(encoded);
|
|
Packit |
fcad23 |
build_result = asn_build_unsigned_int(encoded, &encoded_length,
|
|
Packit |
fcad23 |
ASN_UINTEGER,
|
|
Packit |
fcad23 |
&intval[i], sizeof(intval[i]));
|
|
Packit |
fcad23 |
OKF(build_result + encoded_length == encoded + sizeof(encoded),
|
|
Packit |
fcad23 |
("asn_build_unsigned_int(%lu)", intval[i]));
|
|
Packit |
fcad23 |
decoded_length = sizeof(encoded) - encoded_length;
|
|
Packit |
fcad23 |
parse_result = asn_parse_unsigned_int(encoded, &decoded_length,
|
|
Packit |
fcad23 |
&decoded_type, &decoded_value,
|
|
Packit |
fcad23 |
sizeof(decoded_value));
|
|
Packit |
fcad23 |
OKF(parse_result && decoded_type == ASN_UINTEGER
|
|
Packit |
fcad23 |
&& decoded_value == intval[i],
|
|
Packit |
fcad23 |
("asn_parse_unsigned_int(asn_build_unsigned_int(%lu)) %s;"
|
|
Packit |
fcad23 |
" decoded type %d <> %d; decoded value %lu",
|
|
Packit |
fcad23 |
intval[i], parse_result == build_result ? "succeeded" : "failed",
|
|
Packit |
fcad23 |
decoded_type, ASN_UINTEGER, decoded_value));
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
OKF(asn_realloc_rbuild_unsigned_int(&rbuild_result, &rbuild_len,
|
|
Packit |
fcad23 |
&offset, 1, ASN_UINTEGER,
|
|
Packit |
fcad23 |
&intval[i], sizeof(intval[i])),
|
|
Packit |
fcad23 |
("asn_realloc_rbuild_unsigned_int(%lud)", intval[i]));
|
|
Packit |
fcad23 |
OKF(sizeof(encoded) - encoded_length == offset &&
|
|
Packit |
fcad23 |
memcmp(encoded, rbuild_result + rbuild_len - offset,
|
|
Packit |
fcad23 |
offset) == 0,
|
|
Packit |
fcad23 |
("asn_build_unsigned_int(%ld) != "
|
|
Packit |
fcad23 |
"asn_realloc_rbuild_unsigned_int(%ld)",
|
|
Packit |
fcad23 |
intval[i], intval[i]));
|
|
Packit |
fcad23 |
free (rbuild_result);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
static struct {
|
|
Packit |
fcad23 |
unsigned char encoded[8];
|
|
Packit |
fcad23 |
unsigned encoded_len;
|
|
Packit |
fcad23 |
unsigned long decoded;
|
|
Packit |
fcad23 |
} data[] = {
|
|
Packit |
fcad23 |
{ { ASN_UINTEGER, 1, 0x80 }, 3, 0x80 },
|
|
Packit |
fcad23 |
{ { ASN_UINTEGER, 2, 0x80, 0x00 }, 4, 0x8000 },
|
|
Packit |
fcad23 |
{ { ASN_UINTEGER, 3, 0x80, 0x00, 0x00 }, 5, 0x800000 },
|
|
Packit |
fcad23 |
{ { ASN_UINTEGER, 4, 0x80, 0x00, 0x00, 0x00 }, 6, 0x80000000 },
|
|
Packit |
fcad23 |
};
|
|
Packit |
fcad23 |
for (i = 0; i < sizeof(data)/sizeof(data[0]); i++) {
|
|
Packit |
fcad23 |
size_t decoded_length;
|
|
Packit |
fcad23 |
u_char decoded_type;
|
|
Packit |
fcad23 |
unsigned long decoded_value = 0;
|
|
Packit |
fcad23 |
u_char *parse_result;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
decoded_length = data[i].encoded_len;
|
|
Packit |
fcad23 |
parse_result = asn_parse_unsigned_int(data[i].encoded,
|
|
Packit |
fcad23 |
&decoded_length,
|
|
Packit |
fcad23 |
&decoded_type, &decoded_value,
|
|
Packit |
fcad23 |
sizeof(decoded_value));
|
|
Packit |
fcad23 |
OKF(parse_result && decoded_type == ASN_UINTEGER
|
|
Packit |
fcad23 |
&& decoded_value == data[i].decoded,
|
|
Packit |
fcad23 |
("asn_parse_unsigned_int(%02x %02x %02x %02x %02x %02x %02x %02x, %d) %s;"
|
|
Packit |
fcad23 |
" decoded type %d <> %d; decoded length %d; decoded value %lu",
|
|
Packit |
fcad23 |
data[i].encoded[0], data[i].encoded[1], data[i].encoded[2],
|
|
Packit |
fcad23 |
data[i].encoded[3], data[i].encoded[4], data[i].encoded[5],
|
|
Packit |
fcad23 |
data[i].encoded[6], data[i].encoded[7], data[i].encoded_len,
|
|
Packit |
fcad23 |
parse_result ? "succeeded" : "failed",
|
|
Packit |
fcad23 |
decoded_type, ASN_UINTEGER, (int)decoded_length, decoded_value));
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
#ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
#define TOINT64(c) ((long long)(long)(c).high << 32 | (c).low)
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
const struct counter64 intval[] = {
|
|
Packit |
fcad23 |
{ 0x80000000U, 0U },
|
|
Packit |
fcad23 |
{ 0x80000000U, 0xffffffffU },
|
|
Packit |
fcad23 |
{ 0xffffffffU, 0 },
|
|
Packit |
fcad23 |
{ 0xffffffffU, 0xffff0000U },
|
|
Packit |
fcad23 |
{ 0xffffffffU, 0xfffffffcU },
|
|
Packit |
fcad23 |
{ 0xffffffffU, 0xffffffffU },
|
|
Packit |
fcad23 |
{ 0, 0 },
|
|
Packit |
fcad23 |
{ 0, 1 },
|
|
Packit |
fcad23 |
{ 0, 3 },
|
|
Packit |
fcad23 |
{ 0, 0xffff },
|
|
Packit |
fcad23 |
{ 0, 0x7fffffff },
|
|
Packit |
fcad23 |
{ 1, 0 },
|
|
Packit |
fcad23 |
{ 1, 0xffffffff },
|
|
Packit |
fcad23 |
{ 0x7fffffff, 0 },
|
|
Packit |
fcad23 |
{ 0x7fffffff, 0xdeadbeef },
|
|
Packit |
fcad23 |
{ 0x7fffffff, 0xffffffff },
|
|
Packit |
fcad23 |
};
|
|
Packit |
fcad23 |
for (i = 0; i < sizeof(intval)/sizeof(intval[0]); ++i) {
|
|
Packit |
fcad23 |
u_char encoded[256];
|
|
Packit |
fcad23 |
size_t encoded_length;
|
|
Packit |
fcad23 |
u_char *build_result;
|
|
Packit |
fcad23 |
size_t decoded_length;
|
|
Packit |
fcad23 |
u_char decoded_type;
|
|
Packit |
fcad23 |
struct counter64 decoded_value = { 0 };
|
|
Packit |
fcad23 |
u_char *parse_result;
|
|
Packit |
fcad23 |
u_char *rbuild_result = NULL;
|
|
Packit |
fcad23 |
size_t rbuild_len = 0;
|
|
Packit |
fcad23 |
size_t offset = 0;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
encoded_length = sizeof(encoded);
|
|
Packit |
fcad23 |
build_result = asn_build_signed_int64(encoded, &encoded_length,
|
|
Packit |
fcad23 |
ASN_OPAQUE_I64,
|
|
Packit |
fcad23 |
&intval[i], sizeof(intval[i]));
|
|
Packit |
fcad23 |
OKF(build_result + encoded_length == encoded + sizeof(encoded),
|
|
Packit |
fcad23 |
("asn_build_signed_int64(%lld)", TOINT64(intval[i])));
|
|
Packit |
fcad23 |
decoded_length = sizeof(encoded) - encoded_length;
|
|
Packit |
fcad23 |
parse_result = asn_parse_signed_int64(encoded, &decoded_length,
|
|
Packit |
fcad23 |
&decoded_type, &decoded_value,
|
|
Packit |
fcad23 |
sizeof(decoded_value));
|
|
Packit |
fcad23 |
OKF(parse_result == build_result && decoded_type == ASN_OPAQUE_I64
|
|
Packit |
fcad23 |
&& memcmp(&decoded_value, &intval[i], sizeof(decoded_value)) == 0,
|
|
Packit |
fcad23 |
("asn_parse_signed_int64(asn_build_signed_int64(%lld)) %s;"
|
|
Packit |
fcad23 |
" decoded type %d <> %d; decoded value %lld",
|
|
Packit |
fcad23 |
TOINT64(intval[i]),
|
|
Packit |
fcad23 |
parse_result == build_result ? "succeeded" : "failed",
|
|
Packit |
fcad23 |
decoded_type, ASN_OPAQUE_I64, TOINT64(decoded_value)));
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
OKF(asn_realloc_rbuild_signed_int64(&rbuild_result, &rbuild_len,
|
|
Packit |
fcad23 |
&offset, 1, ASN_OPAQUE_I64,
|
|
Packit |
fcad23 |
&intval[i], sizeof(intval[i])),
|
|
Packit |
fcad23 |
("asn_realloc_rbuild_signed_int64(%lld)", TOINT64(intval[i])));
|
|
Packit |
fcad23 |
OKF(sizeof(encoded) - encoded_length == offset &&
|
|
Packit |
fcad23 |
memcmp(encoded, rbuild_result + rbuild_len - offset,
|
|
Packit |
fcad23 |
offset) == 0,
|
|
Packit |
fcad23 |
("asn_build_signed_int64(%lld) != "
|
|
Packit |
fcad23 |
"asn_realloc_rbuild_signed_int64(%lld)",
|
|
Packit |
fcad23 |
TOINT64(intval[i]), TOINT64(intval[i])));
|
|
Packit |
fcad23 |
free (rbuild_result);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
#endif
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
#define TOUINT64(c) ((unsigned long long)(c).high << 32 | (c).low)
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
{
|
|
Packit |
fcad23 |
const struct counter64 intval[] = {
|
|
Packit |
fcad23 |
{ 0, 0 },
|
|
Packit |
fcad23 |
{ 0, 1 },
|
|
Packit |
fcad23 |
{ 0, 3 },
|
|
Packit |
fcad23 |
{ 0, 0xffff },
|
|
Packit |
fcad23 |
{ 0, 0x7fffffff },
|
|
Packit |
fcad23 |
{ 0, 0x80000000 },
|
|
Packit |
fcad23 |
{ 0, 0xffffffff },
|
|
Packit |
fcad23 |
{ 1, 0 },
|
|
Packit |
fcad23 |
{ 1, 0xffffffff },
|
|
Packit |
fcad23 |
{ 0x7fffffff, 0 },
|
|
Packit |
fcad23 |
{ 0x7fffffff, 0xdeadbeef },
|
|
Packit |
fcad23 |
{ 0x7fffffff, 0xffffffff },
|
|
Packit |
fcad23 |
{ 0xffffffff, 0 },
|
|
Packit |
fcad23 |
{ 0xffffffff, 0xdeadbeef },
|
|
Packit |
fcad23 |
{ 0xffffffff, 0xffffffff },
|
|
Packit |
fcad23 |
};
|
|
Packit |
fcad23 |
for (i = 0; i < sizeof(intval)/sizeof(intval[0]); ++i) {
|
|
Packit |
fcad23 |
u_char encoded[256];
|
|
Packit |
fcad23 |
size_t encoded_length;
|
|
Packit |
fcad23 |
u_char *build_result;
|
|
Packit |
fcad23 |
size_t decoded_length;
|
|
Packit |
fcad23 |
u_char decoded_type;
|
|
Packit |
fcad23 |
struct counter64 decoded_value = { 0 };
|
|
Packit |
fcad23 |
u_char *parse_result;
|
|
Packit |
fcad23 |
u_char *rbuild_result = NULL;
|
|
Packit |
fcad23 |
size_t rbuild_len = 0;
|
|
Packit |
fcad23 |
size_t offset = 0;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
encoded_length = sizeof(encoded);
|
|
Packit |
fcad23 |
build_result = asn_build_unsigned_int64(encoded, &encoded_length,
|
|
Packit |
fcad23 |
ASN_COUNTER64,
|
|
Packit |
fcad23 |
&intval[i], sizeof(intval[i]));
|
|
Packit |
fcad23 |
OKF(build_result + encoded_length == encoded + sizeof(encoded),
|
|
Packit |
fcad23 |
("asn_build_unsigned_int64(%llu)", TOUINT64(intval[i])));
|
|
Packit |
fcad23 |
decoded_length = sizeof(encoded) - encoded_length;
|
|
Packit |
fcad23 |
parse_result = asn_parse_unsigned_int64(encoded, &decoded_length,
|
|
Packit |
fcad23 |
&decoded_type, &decoded_value,
|
|
Packit |
fcad23 |
sizeof(decoded_value));
|
|
Packit |
fcad23 |
OKF(parse_result && decoded_type == ASN_COUNTER64
|
|
Packit |
fcad23 |
&& memcmp(&decoded_value, &intval[i], sizeof(decoded_value)) == 0,
|
|
Packit |
fcad23 |
("asn_parse_unsigned_int64(asn_build_unsigned_int64(%llu)) %s;"
|
|
Packit |
fcad23 |
" decoded type %d <> %d; decoded value %llu",
|
|
Packit |
fcad23 |
TOUINT64(intval[i]),
|
|
Packit |
fcad23 |
parse_result == build_result ? "succeeded" : "failed",
|
|
Packit |
fcad23 |
decoded_type, ASN_COUNTER64, TOUINT64(decoded_value)));
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
OKF(asn_realloc_rbuild_unsigned_int64(&rbuild_result, &rbuild_len,
|
|
Packit |
fcad23 |
&offset, 1, ASN_COUNTER64,
|
|
Packit |
fcad23 |
&intval[i], sizeof(intval[i])),
|
|
Packit |
fcad23 |
("asn_realloc_rbuild_unsigned_int64(%llud)", TOUINT64(intval[i])));
|
|
Packit |
fcad23 |
OKF(sizeof(encoded) - encoded_length == offset &&
|
|
Packit |
fcad23 |
memcmp(encoded, rbuild_result + rbuild_len - offset,
|
|
Packit |
fcad23 |
offset) == 0,
|
|
Packit |
fcad23 |
("asn_build_unsigned_int64(%lld) != "
|
|
Packit |
fcad23 |
"asn_realloc_rbuild_unsigned_int64(%lld)",
|
|
Packit |
fcad23 |
TOUINT64(intval[i]), TOUINT64(intval[i])));
|
|
Packit |
fcad23 |
free (rbuild_result);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
#ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
for (i = 0; i < sizeof(intval)/sizeof(intval[0]); ++i) {
|
|
Packit |
fcad23 |
u_char encoded[256];
|
|
Packit |
fcad23 |
size_t encoded_length;
|
|
Packit |
fcad23 |
u_char *build_result;
|
|
Packit |
fcad23 |
size_t decoded_length;
|
|
Packit |
fcad23 |
u_char decoded_type;
|
|
Packit |
fcad23 |
struct counter64 decoded_value = { 0 };
|
|
Packit |
fcad23 |
u_char *parse_result;
|
|
Packit |
fcad23 |
u_char *rbuild_result = NULL;
|
|
Packit |
fcad23 |
size_t rbuild_len = 0;
|
|
Packit |
fcad23 |
size_t offset = 0;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
encoded_length = sizeof(encoded);
|
|
Packit |
fcad23 |
build_result = asn_build_unsigned_int64(encoded, &encoded_length,
|
|
Packit |
fcad23 |
ASN_OPAQUE_COUNTER64,
|
|
Packit |
fcad23 |
&intval[i], sizeof(intval[i]));
|
|
Packit |
fcad23 |
OKF(build_result + encoded_length == encoded + sizeof(encoded),
|
|
Packit |
fcad23 |
("asn_build_unsigned_int64(%llu)", TOUINT64(intval[i])));
|
|
Packit |
fcad23 |
decoded_length = sizeof(encoded) - encoded_length;
|
|
Packit |
fcad23 |
parse_result = asn_parse_unsigned_int64(encoded, &decoded_length,
|
|
Packit |
fcad23 |
&decoded_type, &decoded_value,
|
|
Packit |
fcad23 |
sizeof(decoded_value));
|
|
Packit |
fcad23 |
OKF(parse_result && decoded_type == ASN_OPAQUE_COUNTER64
|
|
Packit |
fcad23 |
&& memcmp(&decoded_value, &intval[i], sizeof(decoded_value)) == 0,
|
|
Packit |
fcad23 |
("asn_parse_unsigned_int64(asn_build_unsigned_int64(%llu)) %s;"
|
|
Packit |
fcad23 |
" decoded type %d <> %d; decoded value %llu",
|
|
Packit |
fcad23 |
TOUINT64(intval[i]),
|
|
Packit |
fcad23 |
parse_result == build_result ? "succeeded" : "failed",
|
|
Packit |
fcad23 |
decoded_type, ASN_OPAQUE_COUNTER64, TOUINT64(decoded_value)));
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
OKF(asn_realloc_rbuild_unsigned_int64(&rbuild_result, &rbuild_len,
|
|
Packit |
fcad23 |
&offset, 1, ASN_OPAQUE_COUNTER64,
|
|
Packit |
fcad23 |
&intval[i], sizeof(intval[i])),
|
|
Packit |
fcad23 |
("asn_realloc_rbuild_unsigned_int64(%llud)", TOUINT64(intval[i])));
|
|
Packit |
fcad23 |
OKF(sizeof(encoded) - encoded_length == offset &&
|
|
Packit |
fcad23 |
memcmp(encoded, rbuild_result + rbuild_len - offset,
|
|
Packit |
fcad23 |
offset) == 0,
|
|
Packit |
fcad23 |
("asn_build_unsigned_int64(%lld) != "
|
|
Packit |
fcad23 |
"asn_realloc_rbuild_unsigned_int64(%lld)",
|
|
Packit |
fcad23 |
TOUINT64(intval[i]), TOUINT64(intval[i])));
|
|
Packit |
fcad23 |
free (rbuild_result);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
for (i = 0; i < sizeof(intval)/sizeof(intval[0]); ++i) {
|
|
Packit |
fcad23 |
u_char encoded[256];
|
|
Packit |
fcad23 |
size_t encoded_length;
|
|
Packit |
fcad23 |
u_char *build_result;
|
|
Packit |
fcad23 |
size_t decoded_length;
|
|
Packit |
fcad23 |
u_char decoded_type;
|
|
Packit |
fcad23 |
struct counter64 decoded_value = { 0 };
|
|
Packit |
fcad23 |
u_char *parse_result;
|
|
Packit |
fcad23 |
u_char *rbuild_result = NULL;
|
|
Packit |
fcad23 |
size_t rbuild_len = 0;
|
|
Packit |
fcad23 |
size_t offset = 0;
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
encoded_length = sizeof(encoded);
|
|
Packit |
fcad23 |
build_result = asn_build_unsigned_int64(encoded, &encoded_length,
|
|
Packit |
fcad23 |
ASN_OPAQUE_U64,
|
|
Packit |
fcad23 |
&intval[i], sizeof(intval[i]));
|
|
Packit |
fcad23 |
OKF(build_result + encoded_length == encoded + sizeof(encoded),
|
|
Packit |
fcad23 |
("asn_build_unsigned_int64(%llu)", TOUINT64(intval[i])));
|
|
Packit |
fcad23 |
decoded_length = sizeof(encoded) - encoded_length;
|
|
Packit |
fcad23 |
parse_result = asn_parse_unsigned_int64(encoded, &decoded_length,
|
|
Packit |
fcad23 |
&decoded_type, &decoded_value,
|
|
Packit |
fcad23 |
sizeof(decoded_value));
|
|
Packit |
fcad23 |
OKF(parse_result && decoded_type == ASN_OPAQUE_U64
|
|
Packit |
fcad23 |
&& memcmp(&decoded_value, &intval[i], sizeof(decoded_value)) == 0,
|
|
Packit |
fcad23 |
("asn_parse_unsigned_int64(asn_build_unsigned_int64(%llu)) %s;"
|
|
Packit |
fcad23 |
" decoded type %d <> %d; decoded value %llu",
|
|
Packit |
fcad23 |
TOUINT64(intval[i]),
|
|
Packit |
fcad23 |
parse_result == build_result ? "succeeded" : "failed",
|
|
Packit |
fcad23 |
decoded_type, ASN_OPAQUE_U64, TOUINT64(decoded_value)));
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
OKF(asn_realloc_rbuild_unsigned_int64(&rbuild_result, &rbuild_len,
|
|
Packit |
fcad23 |
&offset, 1, ASN_OPAQUE_U64,
|
|
Packit |
fcad23 |
&intval[i], sizeof(intval[i])),
|
|
Packit |
fcad23 |
("asn_realloc_rbuild_unsigned_int64(%llud)", TOUINT64(intval[i])));
|
|
Packit |
fcad23 |
OKF(sizeof(encoded) - encoded_length == offset &&
|
|
Packit |
fcad23 |
memcmp(encoded, rbuild_result + rbuild_len - offset,
|
|
Packit |
fcad23 |
offset) == 0,
|
|
Packit |
fcad23 |
("asn_build_unsigned_int64(%lld) != "
|
|
Packit |
fcad23 |
"asn_realloc_rbuild_unsigned_int64(%lld)",
|
|
Packit |
fcad23 |
TOUINT64(intval[i]), TOUINT64(intval[i])));
|
|
Packit |
fcad23 |
free (rbuild_result);
|
|
Packit |
fcad23 |
}
|
|
Packit |
fcad23 |
|
|
Packit |
fcad23 |
#endif
|
|
Packit |
fcad23 |
}
|