| 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++) { |