Branch Coverage

src/pdfmake_asn1.c
Criterion Covered Total %
branch 93 346 26.8


line true false branch
27 0 143 if (*pos >= len) return -1;
31 102 41 if (first < 0x80) {
37 0 41 if (first == 0x80) {
44 41 0 if (num_bytes > sizeof(size_t) || *pos + num_bytes > len) {
0 41 if (num_bytes > sizeof(size_t) || *pos + num_bytes > len) {
49 77 41 for (i = 0; i < num_bytes; i++) {
65 0 0 if (length < 0x80) {
72 0 0 while (temp > 0) {
79 0 0 if (err != PDFMAKE_OK) return err;
82 0 0 for (i = num_bytes - 1; i >= 0; i--) {
84 0 0 if (err != PDFMAKE_OK) return err;
102 0 143 if (*pos >= len) return NULL;
105 0 143 if (!node) return NULL;
113 0 143 if ((node->tag & 0x1F) == 0x1F) {
115 0 0 while (*pos < len && (data[*pos] & 0x80)) {
0 0 while (*pos < len && (data[*pos] & 0x80)) {
118 0 0 if (*pos < len) (*pos)++; /* Skip final tag byte */
122 0 143 if (parse_length(data, len, pos, &node->length) != 0) {
127 0 143 if (*pos + node->length > len) {
135 65 78 if (node->tag & ASN1_CONSTRUCTED) {
139 132 65 while (*pos < content_end) {
141 0 132 if (!child) return NULL;
145 67 65 if (last_child) {
174 0 0 if (!node) return 0;
177 0 0 while (child) {
191 0 64 if (!node) return NULL;
194 46 64 for (i = 0; i < index && child; i++) {
46 0 for (i = 0; i < index && child; i++) {
206 0 2 if (!node) return NULL;
209 2 1 while (child) {
210 1 1 if (child->tag == tag) return child;
226 4 0 if (!node || !out) return -1;
0 4 if (!node || !out) return -1;
227 0 4 if (node->tag != ASN1_TAG_INTEGER && node->tag != ASN1_TAG_ENUMERATED) return -1;
0 0 if (node->tag != ASN1_TAG_INTEGER && node->tag != ASN1_TAG_ENUMERATED) return -1;
228 4 0 if (node->length == 0 || node->length > 8) return -1;
0 4 if (node->length == 0 || node->length > 8) return -1;
233 0 4 value = negative ? -1 : 0; /* Sign extend */
234 6 4 for (i = 0; i < node->length; i++) {
249 0 0 if (!node || !out) return -1;
0 0 if (!node || !out) return -1;
250 0 0 if (node->tag != ASN1_TAG_INTEGER) return -1;
251 0 0 if (node->length == 0) return -1;
257 0 0 if (len > 1 && data[0] == 0x00) {
0 0 if (len > 1 && data[0] == 0x00) {
262 0 0 if (len > 8) return -1; /* Too large */
265 0 0 for (i = 0; i < len; i++) {
275 1 0 if (!node || !out) return -1;
0 1 if (!node || !out) return -1;
276 0 1 if (node->tag != ASN1_TAG_BOOLEAN) return -1;
277 0 1 if (node->length != 1) return -1;
296 15 0 if (!node || !arena) return NULL;
0 15 if (!node || !arena) return NULL;
297 0 15 if (node->tag != ASN1_TAG_OID) return NULL;
298 0 15 if (node->length == 0) return NULL;
309 6 9 if (first >= 2) {
318 63 15 while (i < node->length && p < end) {
63 0 while (i < node->length && p < end) {
320 90 0 while (i < node->length) {
323 63 27 if (!(byte & 0x80)) break;
330 15 0 if (result) {
345 12 0 if (!node || !oid_str) return 0;
0 12 if (!node || !oid_str) return 0;
346 0 12 if (node->tag != ASN1_TAG_OID) return 0;
351 55 12 while (*p && encoded_len < sizeof(encoded)) {
55 0 while (*p && encoded_len < sizeof(encoded)) {
354 90 55 while (*p >= '0' && *p <= '9') {
90 0 while (*p >= '0' && *p <= '9') {
358 43 12 if (*p == '.') p++;
360 12 43 if (first < 0) {
362 12 31 } else if (second < 0) {
374 6 31 } while (value > 0);
376 37 31 for (i = temp_len - 1; i >= 0; i--) {
377 6 31 encoded[encoded_len++] = temp[i] | (i > 0 ? 0x80 : 0);
382 0 12 if (encoded_len != node->length) return 0;
392 6 0 if (!node || !arena) return NULL;
0 6 if (!node || !arena) return NULL;
395 6 0 switch (node->tag) {
410 0 6 if (node->tag == ASN1_TAG_BMPSTRING) {
415 0 0 if (result) {
416 0 0 for (i = 0; i < out_len; i++) {
418 0 0 result[i] = (ch < 128) ? ch : '?';
427 6 0 if (result) {
440 2 0 if (!node || !out) return -1;
0 2 if (!node || !out) return -1;
441 0 2 if (node->tag != ASN1_TAG_UTCTIME && node->tag != ASN1_TAG_GENERALIZEDTIME) {
0 0 if (node->tag != ASN1_TAG_UTCTIME && node->tag != ASN1_TAG_GENERALIZEDTIME) {
449 2 0 if (node->tag == ASN1_TAG_UTCTIME) {
451 0 2 if (len < 12) return -1;
454 2 0 if (tm.tm_year < 50) tm.tm_year += 100; /* 2000-2049 */
462 0 0 if (len < 14) return -1;
492 2 0 if (!node || !bits || !bit_count) return -1;
2 0 if (!node || !bits || !bit_count) return -1;
0 2 if (!node || !bits || !bit_count) return -1;
493 0 2 if (node->tag != ASN1_TAG_BIT_STRING) return -1;
494 0 2 if (node->length < 1) return -1;
498 0 2 if (unused > 7) return -1;
515 0 0 if (!enc || !arena || !buf) return PDFMAKE_EINVAL;
0 0 if (!enc || !arena || !buf) return PDFMAKE_EINVAL;
0 0 if (!enc || !arena || !buf) return PDFMAKE_EINVAL;
528 0 0 if (err != PDFMAKE_OK) return err;
535 0 0 if (err != PDFMAKE_OK) return err;
542 0 0 if (err != PDFMAKE_OK) return err;
544 0 0 if (err != PDFMAKE_OK) return err;
545 0 0 return pdfmake_buf_append_byte(enc->buf, value ? 0xFF : 0x00);
554 0 0 if (value == 0) {
557 0 0 } else if (value > 0) {
560 0 0 while (v > 0) {
566 0 0 if (bytes[0] & 0x80) {
576 0 0 for (i = 0; i < 8; i++) {
578 0 0 if (all_ff && b == 0xFF && i < 7) {
0 0 if (all_ff && b == 0xFF && i < 7) {
0 0 if (all_ff && b == 0xFF && i < 7) {
580 0 0 if (next & 0x80) continue; /* Can skip this 0xFF */
588 0 0 if (err != PDFMAKE_OK) return err;
590 0 0 if (err != PDFMAKE_OK) return err;
600 0 0 if (value == 0) {
606 0 0 while (v > 0) {
613 0 0 if (bytes[0] & 0x80) {
621 0 0 if (err != PDFMAKE_OK) return err;
623 0 0 if (err != PDFMAKE_OK) return err;
635 0 0 if (!enc || !bytes) return PDFMAKE_EINVAL;
0 0 if (!enc || !bytes) return PDFMAKE_EINVAL;
638 0 0 while (len > 1 && bytes[0] == 0 && !(bytes[1] & 0x80)) {
0 0 while (len > 1 && bytes[0] == 0 && !(bytes[1] & 0x80)) {
0 0 while (len > 1 && bytes[0] == 0 && !(bytes[1] & 0x80)) {
647 0 0 if (err != PDFMAKE_OK) return err;
648 0 0 err = write_length(enc->buf, len + (need_zero ? 1 : 0));
649 0 0 if (err != PDFMAKE_OK) return err;
651 0 0 if (need_zero) {
653 0 0 if (err != PDFMAKE_OK) return err;
669 0 0 if (!enc || !oid_str) return PDFMAKE_EINVAL;
0 0 if (!enc || !oid_str) return PDFMAKE_EINVAL;
673 0 0 while (*p && encoded_len < sizeof(encoded)) {
0 0 while (*p && encoded_len < sizeof(encoded)) {
675 0 0 while (*p >= '0' && *p <= '9') {
0 0 while (*p >= '0' && *p <= '9') {
679 0 0 if (*p == '.') p++;
681 0 0 if (first < 0) {
683 0 0 } else if (second < 0) {
694 0 0 } while (value > 0);
696 0 0 for (i = temp_len - 1; i >= 0; i--) {
697 0 0 if (encoded_len >= sizeof(encoded)) return PDFMAKE_EINVAL;
698 0 0 encoded[encoded_len++] = temp[i] | (i > 0 ? 0x80 : 0);
704 0 0 if (err != PDFMAKE_OK) return err;
706 0 0 if (err != PDFMAKE_OK) return err;
716 0 0 if (err != PDFMAKE_OK) return err;
718 0 0 if (err != PDFMAKE_OK) return err;
731 0 0 if (err != PDFMAKE_OK) return err;
733 0 0 if (err != PDFMAKE_OK) return err;
735 0 0 if (err != PDFMAKE_OK) return err;
745 0 0 if (err != PDFMAKE_OK) return err;
747 0 0 if (err != PDFMAKE_OK) return err;
757 0 0 if (err != PDFMAKE_OK) return err;
759 0 0 if (err != PDFMAKE_OK) return err;
769 0 0 if (err != PDFMAKE_OK) return err;
771 0 0 if (err != PDFMAKE_OK) return err;
785 0 0 if (!tm) return PDFMAKE_EINVAL;
793 0 0 if (err != PDFMAKE_OK) return err;
795 0 0 if (err != PDFMAKE_OK) return err;
808 0 0 if (!tm) return PDFMAKE_EINVAL;
815 0 0 if (err != PDFMAKE_OK) return err;
817 0 0 if (err != PDFMAKE_OK) return err;
854 0 0 if (constructed) tag |= ASN1_CONSTRUCTED;
890 0 0 if (content_len < 0x80) header_len_bytes = 1;
891 0 0 else if (content_len <= 0xFF) header_len_bytes = 2;
892 0 0 else if (content_len <= 0xFFFF) header_len_bytes = 3;
893 0 0 else if (content_len <= 0xFFFFFF) header_len_bytes = 4;
903 0 0 if (shift > 0 && content_len > 0) {
0 0 if (shift > 0 && content_len > 0) {
908 0 0 } else if (shift > 0) {
913 0 0 if (header_len_bytes == 1) {
918 0 0 for (i = 1; i < header_len_bytes; i++) {