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 * \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 */ /* Match if any of the nodes after offset 0 has greater length than 10 */
char str[] = "oversize_length 132 absolute_offset 0"; 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; DetectAsn1Data *ad = DetectAsn1Parse(str);
FAIL_IF_NULL(ad);
SCAsn1CtxInit(ac, str, len); 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 */ uint16_t len = strlen((char *)buf)-1;
if (ac->cur_frame > 0) {
/* We spect at least one node */
uint16_t n_iter = 0;
for (; n_iter <= ac->cur_frame; n_iter++) { SCAsn1CtxInit(ac, (uint8_t *)buf, len);
Asn1Node *node = ASN1CTX_GET_NODE(ac, n_iter); SCAsn1Decode(ac, ac->cur_frame);
if (node == NULL || node->id.ptr == NULL) /* The first node has length 133, so it should match the oversize */
continue; /* Should not happen */ FAIL_IF_NOT(ac->cur_frame > 0);
result = DetectAsn1Checks(node, ad); /* We spect at least one node */
/* Got a match? */ uint16_t n_iter = 0;
if (result == 1) int result = 0;
break; for (; n_iter <= ac->cur_frame; n_iter++) {
} Asn1Node *node = ASN1CTX_GET_NODE(ac, n_iter);
}
SCAsn1CtxDestroy(ac); if (node == NULL || node->id.ptr == NULL)
DetectAsn1Free(ad); continue; /* Should not happen */
result = DetectAsn1Checks(node, ad);
/* Got a match? */
if (result == 1)
break;
} }
FAIL_IF(result != 1);
if (result == 0) { SCAsn1CtxDestroy(ac);
printf("Error, oversize_length should match the first node: "); DetectAsn1Free(ad);
}
return result; PASS;
} }
/** /**

Loading…
Cancel
Save