Branch Coverage

src/pdfmake_linear.c
Criterion Covered Total %
branch 187 410 45.6


line true false branch
30 0 36 if (!obj) return;
35 9 0 if (num < visited_size && !visited[num]) {
9 0 if (num < visited_size && !visited[num]) {
37 9 0 if (*ref_count < ref_cap) {
46 12 3 for (i = 0; i < arr->len; i++) {
54 144 9 for (i = 0; i < dict->cap; i++) {
55 21 123 if (dict->entries[i].key == 0 || dict->entries[i].deleted) continue;
0 21 if (dict->entries[i].key == 0 || dict->entries[i].deleted) continue;
62 0 0 if (stream->dict) {
85 9 0 if (!data || len < 100) return 0;
5 4 if (!data || len < 100) return 0;
89 4 0 end = p + (len < 4096 ? len : 4096); /* Check first 4KB */
92 36 0 while (p < end && *p != '\n') p++;
32 4 while (p < end && *p != '\n') p++;
93 0 4 if (p >= end) return 0;
97 4 0 if (p < end && *p == '%') {
4 0 if (p < end && *p == '%') {
98 24 0 while (p < end && *p != '\n') p++;
20 4 while (p < end && *p != '\n') p++;
99 0 4 if (p >= end) return 0;
104 4 0 while (p < end && (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r')) p++;
0 4 while (p < end && (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r')) p++;
0 4 while (p < end && (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r')) p++;
0 4 while (p < end && (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r')) p++;
0 4 while (p < end && (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r')) p++;
108 0 4 if (sscanf(p, "%d 0 obj", &obj_num) != 1) return 0;
111 36 0 while (p < end && *p != '<') p++;
32 4 while (p < end && *p != '<') p++;
112 4 0 if (p + 1 >= end || *(p+1) != '<') return 0;
0 4 if (p + 1 >= end || *(p+1) != '<') return 0;
116 3 1 if (!lin || lin >= end) return 0;
0 3 if (!lin || lin >= end) return 0;
126 7 0 if (!doc || doc->obj_count < 1) return 0;
5 2 if (!doc || doc->obj_count < 1) return 0;
130 2 0 if (!obj || obj->kind != PDFMAKE_DICT) return 0;
0 2 if (!obj || obj->kind != PDFMAKE_DICT) return 0;
133 0 2 if (!dict) return 0;
137 2 2 for (i = 0; i < dict->len; i++) {
150 0 0 if (!doc || !out) return PDFMAKE_EINVAL;
0 0 if (!doc || !out) return PDFMAKE_EINVAL;
154 0 0 if (!pdfmake_doc_is_linearized(doc)) {
160 0 0 if (!obj || obj->kind != PDFMAKE_DICT) return PDFMAKE_EINVAL;
0 0 if (!obj || obj->kind != PDFMAKE_DICT) return PDFMAKE_EINVAL;
176 0 5 if (!doc) return NULL;
179 0 5 if (!lin) return NULL;
182 0 5 if (!lin->arena) {
192 0 5 if (!lin->obj_map) {
203 0 5 if (!lin->page_objects) {
212 0 5 if (!lin->ref_counts) {
224 0 5 if (!lin) return;
226 5 0 if (lin->arena) {
255 0 3 if (!objects) return PDFMAKE_ENOMEM;
262 0 3 if (!visited) return PDFMAKE_ENOMEM;
267 0 3 if (!page_obj) return PDFMAKE_EINVAL;
281 12 3 for (i = 0; i < count; i++) {
283 12 0 if (num < lin->obj_map_size) {
298 5 0 if (!lin || !lin->doc) return PDFMAKE_EINVAL;
0 5 if (!lin || !lin->doc) return PDFMAKE_EINVAL;
303 4 1 if (!doc->finalized) {
308 3 1 for (i = 0; i < doc->page_count; i++) {
313 0 3 if (!page) continue;
320 0 3 if (err != PDFMAKE_OK) return err;
326 0 1 if (!lin->shared_objects) return PDFMAKE_ENOMEM;
328 12 1 for (i = 1; i <= doc->obj_count; i++) {
329 1 11 if (lin->ref_counts[i] > 1) {
330 0 1 if (lin->shared_count >= shared_cap) {
346 1 0 if (doc->page_count > 0) {
347 4 1 for (i = 0; i < lin->page_objects[0].count; i++) {
349 4 0 if (old_num < lin->obj_map_size && lin->obj_map[old_num] == 0) {
4 0 if (old_num < lin->obj_map_size && lin->obj_map[old_num] == 0) {
356 2 1 for (p = 1; p < doc->page_count; p++) {
357 8 2 for (i = 0; i < lin->page_objects[p].count; i++) {
360 8 0 if (old_num < lin->obj_map_size && lin->ref_counts[old_num] > 1) {
2 6 if (old_num < lin->obj_map_size && lin->ref_counts[old_num] > 1) {
363 6 0 if (old_num < lin->obj_map_size && lin->obj_map[old_num] == 0) {
6 0 if (old_num < lin->obj_map_size && lin->obj_map[old_num] == 0) {
370 1 1 for (i = 0; i < lin->shared_count; i++) {
372 1 0 if (old_num < lin->obj_map_size && lin->obj_map[old_num] == 0) {
0 1 if (old_num < lin->obj_map_size && lin->obj_map[old_num] == 0) {
378 12 1 for (i = 1; i <= doc->obj_count; i++) {
379 2 10 if (lin->obj_map[i] == 0) {
400 5 0 if (!lin || !lin->doc) return PDFMAKE_EINVAL;
0 5 if (!lin || !lin->doc) return PDFMAKE_EINVAL;
408 0 5 if (!lin->hints.page_hints) return PDFMAKE_ENOMEM;
413 8 5 for (i = 0; i < page_count; i++) {
426 12 8 for (j = 0; j < lin->page_objects[i].count; j++) {
428 12 0 if (num < lin->obj_map_size && lin->ref_counts[num] > 1) {
3 9 if (num < lin->obj_map_size && lin->ref_counts[num] > 1) {
434 3 5 if (shared_count > 0) {
437 0 3 if (!hint->shared_ids) return PDFMAKE_ENOMEM;
440 9 0 for (j = 0; j < lin->page_objects[i].count && idx < shared_count; j++) {
6 3 for (j = 0; j < lin->page_objects[i].count && idx < shared_count; j++) {
442 6 0 if (num < lin->obj_map_size && lin->ref_counts[num] > 1) {
3 3 if (num < lin->obj_map_size && lin->ref_counts[num] > 1) {
445 3 0 for (k = 0; k < lin->shared_count; k++) {
446 3 0 if (lin->shared_objects[k] == num) {
459 0 5 if (!lin->hints.shared_hints && lin->shared_count > 0) return PDFMAKE_ENOMEM;
0 0 if (!lin->hints.shared_hints && lin->shared_count > 0) return PDFMAKE_ENOMEM;
462 1 5 for (i = 0; i < lin->shared_count; i++) {
537 2 3 if (lin->doc->info_num) {
562 0 5 if (err != PDFMAKE_OK) {
597 5 0 if (!lin || !lin->doc || !out) return PDFMAKE_EINVAL;
5 0 if (!lin || !lin->doc || !out) return PDFMAKE_EINVAL;
0 5 if (!lin || !lin->doc || !out) return PDFMAKE_EINVAL;
607 0 5 if (err != PDFMAKE_OK) return err;
611 0 5 if (err != PDFMAKE_OK) return err;
616 1 4 if (catalog) {
623 5 0 if (doc->page_count > 0 && lin->page_objects[0].count > 0) {
1 4 if (doc->page_count > 0 && lin->page_objects[0].count > 0) {
624 4 1 for (i = 0; i < lin->page_objects[0].count; i++) {
627 4 0 if (obj && num != doc->root_num) {
4 0 if (obj && num != doc->root_num) {
641 0 5 if (err != PDFMAKE_OK) return err;
644 3 5 for (p = 1; p < doc->page_count; p++) {
645 8 3 for (i = 0; i < lin->page_objects[p].count; i++) {
649 2 6 if (lin->ref_counts[num] > 1) continue;
652 6 0 if (obj) {
662 1 5 for (i = 0; i < lin->shared_count; i++) {
665 1 0 if (obj) {
682 22 5 for (i = 1; i <= doc->obj_count + 1; i++) {
691 2 3 if (doc->info_num) {
694 1 4 if (doc->id_set) {
696 16 1 for (id_i = 0; id_i < 16; id_i++) {
700 16 1 for (id_i = 0; id_i < 16; id_i++) {
735 2 0 if (!doc || !out) return PDFMAKE_EINVAL;
0 2 if (!doc || !out) return PDFMAKE_EINVAL;
738 2 0 if (!doc->finalized) {
744 0 0 if (!lin) return PDFMAKE_ENOMEM;
748 0 0 if (err != PDFMAKE_OK) {
755 0 0 if (err != PDFMAKE_OK) {
776 2 0 if (!doc || !path) return PDFMAKE_EINVAL;
0 2 if (!doc || !path) return PDFMAKE_EINVAL;
781 2 0 if (err != PDFMAKE_OK) {
787 0 0 if (!fp) {
797 0 0 if (written != pdfmake_buf_len(&buf)) {
813 0 0 if (!fetch) return NULL;
816 0 0 if (!reader) return NULL;
822 0 0 if (!reader->arena) {
832 0 0 if (!reader) return;
834 0 0 if (reader->arena) {
837 0 0 if (reader->doc) {
840 0 0 if (reader->page_loaded) {
843 0 0 if (reader->header_data) {
857 0 0 if (!reader) return PDFMAKE_EINVAL;
862 0 0 if (!reader->header_data) return PDFMAKE_ENOMEM;
865 0 0 if (bytes < 0) {
875 0 0 if (reader->is_linearized) {
881 0 0 if (n_ptr) {
887 0 0 if (l_ptr) {
892 0 0 if (reader->params.page_count > 0) {
895 0 0 if (!reader->page_loaded) return PDFMAKE_ENOMEM;
911 0 0 if (!reader || !reader->is_linearized) return PDFMAKE_EINVAL;
0 0 if (!reader || !reader->is_linearized) return PDFMAKE_EINVAL;
912 0 0 if (reader->hints_loaded) return PDFMAKE_OK;
915 0 0 if (reader->params.hint_offset == 0 || reader->params.hint_length == 0) {
0 0 if (reader->params.hint_offset == 0 || reader->params.hint_length == 0) {
918 0 0 if (h_ptr) {
925 0 0 if (reader->params.hint_offset == 0 || reader->params.hint_length == 0) {
0 0 if (reader->params.hint_offset == 0 || reader->params.hint_length == 0) {
930 0 0 if (!hint_data) return PDFMAKE_ENOMEM;
937 0 0 if (bytes < 0 || (size_t)bytes < reader->params.hint_length) {
0 0 if (bytes < 0 || (size_t)bytes < reader->params.hint_length) {
952 0 0 if (err == PDFMAKE_OK) {
965 0 0 if (!reader || !reader->page_loaded) return 0;
0 0 if (!reader || !reader->page_loaded) return 0;
966 0 0 if (page_num < 0 || (size_t)page_num >= reader->params.page_count) return 0;
0 0 if (page_num < 0 || (size_t)page_num >= reader->params.page_count) return 0;
985 0 0 if (!reader) return PDFMAKE_EINVAL;
986 0 0 if (page_num < 0 || (size_t)page_num >= reader->params.page_count) {
0 0 if (page_num < 0 || (size_t)page_num >= reader->params.page_count) {
991 0 0 if (pdfmake_stream_reader_page_available(reader, page_num)) {
996 0 0 if (!reader->hints_loaded) {
998 0 0 if (err != PDFMAKE_OK) return err;
1003 0 0 if (err != PDFMAKE_OK) return err;
1007 0 0 if (!page_data) return PDFMAKE_ENOMEM;
1010 0 0 if (bytes < 0 || (size_t)bytes < length) {
0 0 if (bytes < 0 || (size_t)bytes < length) {
1037 0 0 if (!reader || !offset || !length) return PDFMAKE_EINVAL;
0 0 if (!reader || !offset || !length) return PDFMAKE_EINVAL;
0 0 if (!reader || !offset || !length) return PDFMAKE_EINVAL;
1038 0 0 if (!reader->hints_loaded) return PDFMAKE_EINVAL;
1039 0 0 if (page_num < 0 || (size_t)page_num >= reader->hints.page_hint_count) {
0 0 if (page_num < 0 || (size_t)page_num >= reader->hints.page_hint_count) {
1048 0 0 for (i = 0; i < page_num; i++) {
1060 0 0 if (!reader) return 0;
1066 0 0 if (!reader) return NULL;
1081 0 0 if (!arena || !data || !out) return PDFMAKE_EINVAL;
0 0 if (!arena || !data || !out) return PDFMAKE_EINVAL;
0 0 if (!arena || !data || !out) return PDFMAKE_EINVAL;
1095 0 0 if (!out->page_hints) return PDFMAKE_ENOMEM;
1100 0 0 if (len < 36) return PDFMAKE_EINVAL; /* Minimum header size */
1124 5 0 if (!arena || !hints || !out) return PDFMAKE_EINVAL;
5 0 if (!arena || !hints || !out) return PDFMAKE_EINVAL;
0 5 if (!arena || !hints || !out) return PDFMAKE_EINVAL;
1131 8 5 for (i = 0; i < hints->page_hint_count; i++) {
1132 5 3 if (hints->page_hints[i].obj_count < min_obj_count) {
1136 0 5 if (min_obj_count == UINT32_MAX) min_obj_count = 0;
1160 8 5 for (i = 0; i < hints->page_hint_count; i++) {
1161 5 3 if (hints->page_hints[i].page_length < min_len) {
1165 0 5 if (min_len == SIZE_MAX) min_len = 0;
1214 8 5 for (i = 0; i < hints->page_hint_count; i++) {
1237 3 8 for (j = 0; j < hint->shared_count; j++) {
1238 3 0 uint16_t id = hint->shared_ids ? hint->shared_ids[j] : 0;
1245 1 4 if (hints->shared_hint_count > 0) {
1288 1 1 for (i = 0; i < hints->shared_hint_count; i++) {