asn1: modernize test

pull/2432/head
Victor Julien 10 years ago
parent 613174e9ce
commit dab51144af

@ -636,67 +636,59 @@ int DetectAsn1TestParse15(void)
/**
* \test DetectAsn1Test01 Ensure that the checks work when they should
*/
int DetectAsn1Test01(void)
static int DetectAsn1Test01(void)
{
int result = 0;
/* Match if any of the nodes after offset 0 has greater length than 10 */
char str[] = "oversize_length 132 absolute_offset 0";
DetectAsn1Data *ad = NULL;
ad = DetectAsn1Parse(str);
if (ad != NULL && ad->oversize_length == 132
&& (ad->flags & ASN1_OVERSIZE_LEN)
&& ad->absolute_offset == 0
&& (ad->flags & ASN1_ABSOLUTE_OFFSET))
{
// Example from the specification X.690-0207 Appendix A.3
uint8_t *str = (uint8_t*) "\x60\x81\x85\x61\x10\x1A\x04""John""\x1A\x01"
"P""\x1A\x05""Smith""\xA0\x0A\x1A\x08""Director"
"\x42\x01\x33\xA1\x0A\x43\x08""19710917"
"\xA2\x12\x61\x10\x1A\x04""Mary""\x1A\x01""T""\x1A\x05"
"Smith""\xA3\x42\x31\x1F\x61\x11\x1A\x05""Ralph""\x1A\x01"
"T""\x1A\x05""Smith""\xA0\x0A\x43\x08""19571111"
"\x31\x1F\x61\x11\x1A\x05""Susan""\x1A\x01""B""\x1A\x05"
"Jones""\xA0\x0A\x43\x08""19590717";
Asn1Ctx *ac = SCAsn1CtxNew();
if (ac == NULL)
return 0;
uint16_t len = strlen((char *)str)-1;
SCAsn1CtxInit(ac, str, len);
DetectAsn1Data *ad = DetectAsn1Parse(str);
FAIL_IF_NULL(ad);
FAIL_IF_NOT(ad->oversize_length == 132);
FAIL_IF_NOT(ad->flags & ASN1_OVERSIZE_LEN);
FAIL_IF_NOT(ad->absolute_offset == 0);
FAIL_IF_NOT(ad->flags & ASN1_ABSOLUTE_OFFSET);
// Example from the specification X.690-0207 Appendix A.3
char buf[] = "\x60\x81\x85\x61\x10\x1A\x04""John""\x1A\x01"
"P""\x1A\x05""Smith""\xA0\x0A\x1A\x08""Director"
"\x42\x01\x33\xA1\x0A\x43\x08""19710917"
"\xA2\x12\x61\x10\x1A\x04""Mary""\x1A\x01""T""\x1A\x05"
"Smith""\xA3\x42\x31\x1F\x61\x11\x1A\x05""Ralph""\x1A\x01"
"T""\x1A\x05""Smith""\xA0\x0A\x43\x08""19571111"
"\x31\x1F\x61\x11\x1A\x05""Susan""\x1A\x01""B""\x1A\x05"
"Jones""\xA0\x0A\x43\x08""19590717";
SCAsn1Decode(ac, ac->cur_frame);
Asn1Ctx *ac = SCAsn1CtxNew();
FAIL_IF_NULL(ac);
/* The first node has length 133, so it should match the oversize */
if (ac->cur_frame > 0) {
/* We spect at least one node */
uint16_t n_iter = 0;
uint16_t len = strlen((char *)buf)-1;
for (; n_iter <= ac->cur_frame; n_iter++) {
Asn1Node *node = ASN1CTX_GET_NODE(ac, n_iter);
SCAsn1CtxInit(ac, (uint8_t *)buf, len);
SCAsn1Decode(ac, ac->cur_frame);
if (node == NULL || node->id.ptr == NULL)
continue; /* Should not happen */
/* The first node has length 133, so it should match the oversize */
FAIL_IF_NOT(ac->cur_frame > 0);
result = DetectAsn1Checks(node, ad);
/* Got a match? */
if (result == 1)
break;
}
}
/* We spect at least one node */
uint16_t n_iter = 0;
int result = 0;
for (; n_iter <= ac->cur_frame; n_iter++) {
Asn1Node *node = ASN1CTX_GET_NODE(ac, n_iter);
SCAsn1CtxDestroy(ac);
DetectAsn1Free(ad);
if (node == NULL || node->id.ptr == NULL)
continue; /* Should not happen */
result = DetectAsn1Checks(node, ad);
/* Got a match? */
if (result == 1)
break;
}
FAIL_IF(result != 1);
if (result == 0) {
printf("Error, oversize_length should match the first node: ");
}
SCAsn1CtxDestroy(ac);
DetectAsn1Free(ad);
return result;
PASS;
}
/**

Loading…
Cancel
Save