Branch Coverage

decode.c
Criterion Covered Total %
branch 329 462 71.2


line true false branch
63 6 26324 DEC_NEED(1);
66 26292 32 if (!(b & 0x80)) break;
68 0 32 if (shift >= 64) croak("decode: varint exceeds 64 bits");
77 22 24391 DEC_NEED(len);
101 0 230 if (!SvOK(bytes)) croak("%s: bytes argument is undef", fname);
104 1 229 if (start_offset > buf_len)
119 1 225 if (ncols > (UV)(end - p))
123 0 225 if (nrows > remaining_after_headers && nrows > 0)
0 0 if (nrows > remaining_after_headers && nrows > 0)
158 661 646 if (kind < 0 || kind == JV_STRING) {
86 575 if (kind < 0 || kind == JV_STRING) {
160 90 732 for (k = 0; k < nv_rows; k++) {
167 128 447 if (kind == JV_INT64) {
170 0 128 if ((UV)nv_rows > (UV)(end - *p) / 8)
173 132 128 for (k = 0; k < nv_rows; k++) {
180 69 378 if (kind == JV_FLOAT64) {
181 0 69 if ((UV)nv_rows > (UV)(end - *p) / 8)
184 69 69 for (k = 0; k < nv_rows; k++) {
191 88 290 if (kind == JV_BOOL) {
192 0 88 if ((UV)nv_rows > (UV)(end - *p))
195 90 88 for (k = 0; k < nv_rows; k++) {
201 232 58 if (kind == JV_ARRAY_BOOL || kind == JV_ARRAY_FLOAT64
171 61 if (kind == JV_ARRAY_BOOL || kind == JV_ARRAY_FLOAT64
202 53 118 || kind == JV_ARRAY_INT64 || kind == JV_ARRAY_STRING) {
53 0 || kind == JV_ARRAY_INT64 || kind == JV_ARRAY_STRING) {
205 0 290 if (nv_rows == 0) return;
206 0 290 if ((UV)nv_rows > (UV)(end - *p) / 8)
210 0 290 Newx(offs, nv_rows, uint64_t);
213 291 290 for (k = 0; k < nv_rows; k++) {
217 291 0 if (offs[k] > (uint64_t)SSize_t_MAX || offs[k] < prev_o)
0 291 if (offs[k] > (uint64_t)SSize_t_MAX || offs[k] < prev_o)
227 0 290 if (total > (uint64_t)(end - *p))
231 291 290 for (k = 0; k < nv_rows; k++)
239 234 56 if (offs[0] > 0) av_extend(inner, (SSize_t)offs[0] - 1);
242 58 232 STRLEN per_elem = (kind == JV_ARRAY_BOOL) ? 1 : 8;
245 237 53 if (kind != JV_ARRAY_STRING
246 0 237 && total > (uint64_t)(end - *p) / per_elem)
251 604 290 for (i = 0; i < total; i++) {
252 1 604 while (inner_cursor >= (SSize_t)(offs[row_idx] - prev)) {
259 0 1 if (row_idx >= nv_rows)
265 1 0 if (n2 > 0) av_extend(inner, (SSize_t)n2 - 1);
312 1403 13 if (nrows > 0) av_extend(av, nrows - 1);
317 0 4 DEC_NEED((STRLEN)nrows);
318 6 4 DEC_SCALAR_LOOP(av, nrows, newSViv((IV)(int8_t)*(*p)++));
322 0 205 DEC_NEED((STRLEN)nrows);
323 20008 205 DEC_SCALAR_LOOP(av, nrows, newSVuv((UV)*(*p)++));
327 0 3 DEC_NEED((STRLEN)(2 * nrows));
328 3 3 for (r = 0; r < nrows; r++) {
342 0 7 DEC_NEED((STRLEN)(2 * nrows));
343 12 7 for (r = 0; r < nrows; r++) {
351 4 289 DEC_NEED((STRLEN)(4 * nrows));
352 20163 289 for (r = 0; r < nrows; r++) {
361 1 235 DEC_NEED((STRLEN)(4 * nrows));
362 20062 235 for (r = 0; r < nrows; r++) {
370 0 13 DEC_NEED((STRLEN)(8 * nrows));
371 22 13 for (r = 0; r < nrows; r++) {
380 0 11 DEC_NEED((STRLEN)(8 * nrows));
381 22 11 for (r = 0; r < nrows; r++) {
389 0 1 DEC_NEED((STRLEN)(4 * nrows));
390 2 1 for (r = 0; r < nrows; r++) {
399 0 206 DEC_NEED((STRLEN)(8 * nrows));
400 20007 206 for (r = 0; r < nrows; r++) {
410 0 1 DEC_NEED((STRLEN)(2 * nrows));
411 2 1 for (r = 0; r < nrows; r++) {
421 20183 285 for (r = 0; r < nrows; r++) {
434 5 0 if (n > 0 && (UV)nrows > ((UV)(end - *p)) / n)
0 5 if (n > 0 && (UV)nrows > ((UV)(end - *p)) / n)
439 0 5 DEC_NEED(n * (STRLEN)nrows);
440 9 5 for (r = 0; r < nrows; r++) {
449 0 3 if ((UV)nrows > (UV)(end - *p) / 16)
452 0 3 DEC_NEED((STRLEN)(16 * nrows));
453 8 3 for (r = 0; r < nrows; r++) {
467 0 2 if ((UV)nrows > (UV)(end - *p) / 32)
470 0 2 DEC_NEED((STRLEN)(32 * nrows));
471 5 2 for (r = 0; r < nrows; r++) {
475 20 5 for (i = 0; i < 4; i++) {
487 0 4 if ((UV)nrows > (UV)(end - *p) / 16)
490 0 4 DEC_NEED((STRLEN)(16 * nrows));
491 6 4 for (r = 0; r < nrows; r++) {
494 48 6 for (i = 0; i < 8; i++) b[i] = (*p)[7 - i];
495 48 6 for (i = 0; i < 8; i++) b[8+i] = (*p)[15 - i];
500 96 6 for (k = 0; k < 16; k++) {
503 90 6 if (k == 3 || k == 5 || k == 7 || k == 9) hex[j++] = '-';
84 6 if (k == 3 || k == 5 || k == 7 || k == 9) hex[j++] = '-';
78 6 if (k == 3 || k == 5 || k == 7 || k == 9) hex[j++] = '-';
6 72 if (k == 3 || k == 5 || k == 7 || k == 9) hex[j++] = '-';
511 0 5 DEC_NEED((STRLEN)(4 * nrows));
512 6 5 for (r = 0; r < nrows; r++) {
526 0 1 if ((UV)nrows > (UV)(end - *p) / 16)
529 0 1 DEC_NEED((STRLEN)(16 * nrows));
530 1 1 for (r = 0; r < nrows; r++) {
539 0 13 if ((UV)nrows > (UV)(end - *p) / 8)
542 0 13 DEC_NEED((STRLEN)(8 * nrows));
544 0 13 Newx(offsets, nrows + 1, SSize_t);
547 32 13 for (r = 0; r < nrows; r++) {
553 32 0 if (o > (uint64_t)SSize_t_MAX || (SSize_t)o < offsets[r])
0 32 if (o > (uint64_t)SSize_t_MAX || (SSize_t)o < offsets[r])
562 0 13 if ((UV)total > (UV)(end - *p))
568 32 13 for (r = 0; r < nrows; r++) {
571 19 13 if (stop > start) av_extend(slice, stop - start - 1);
573 36 32 for (i = start; i < stop; i++) {
575 36 0 av_store(slice, i - start,
590 10 5 for (i = 0; i < t->tuple_len; i++)
592 9 5 for (r = 0; r < nrows; r++) {
594 9 0 if (t->tuple_len > 0) av_extend(row, t->tuple_len - 1);
595 18 9 for (i = 0; i < t->tuple_len; i++) {
597 18 0 av_store(row, i, elem ? SvREFCNT_inc(*elem) : newSV(0));
601 10 5 for (i = 0; i < t->tuple_len; i++) SvREFCNT_dec(cols[i]);
605 0 13 DEC_NEED((STRLEN)nrows);
609 26 13 for (r = 0; r < nrows; r++) nulls[r] = *(*p)++;
612 26 13 for (r = 0; r < nrows; r++) {
613 12 14 if (nulls[r]) {
617 14 0 av_store(av, r, elem ? SvREFCNT_inc(*elem) : newSV(0));
639 0 5 DEC_NEED(24);
644 0 5 if (version != 1) croak("decode: LowCardinality version != 1 (got %lu)", (unsigned long)version);
646 0 5 if (dict_n > (uint64_t)(end - *p))
653 0 5 if (idx_type > 3)
658 2 3 TypeInfo *leaf = is_null ? inner->inner : inner;
661 0 5 DEC_NEED(8);
666 5 0 if (idx_n > (uint64_t)SSize_t_MAX || (SSize_t)idx_n != nrows)
0 5 if (idx_n > (uint64_t)SSize_t_MAX || (SSize_t)idx_n != nrows)
669 0 5 size_t idx_bytes = (idx_type == 0) ? 1 :
0 0 size_t idx_bytes = (idx_type == 0) ? 1 :
0 0 size_t idx_bytes = (idx_type == 0) ? 1 :
672 0 5 DEC_NEED((STRLEN)(idx_bytes * idx_n));
673 15 5 for (r = 0; r < nrows; r++) {
682 7 8 if (is_null && i == 0) {
2 5 if (is_null && i == 0) {
685 0 13 if (i >= dict_n)
690 13 0 av_store(av, r, elem ? SvREFCNT_inc(*elem) : newSV(0));
697 0 5 DEC_NEED(8);
700 0 5 if (mode != 0) croak("decode: Variant mode != 0 (got %lu)", (unsigned long)mode);
701 0 5 DEC_NEED((STRLEN)nrows);
705 12 5 for (r = 0; r < nrows; r++) wire_disc[r] = *(*p)++;
710 12 5 for (r = 0; r < nrows; r++) {
712 4 8 if (w != 255) {
713 0 4 if (w >= nvar) croak("decode: Variant wire idx %u out of range", w);
723 10 5 for (w = 0; w < nvar; w++) {
730 12 5 for (r = 0; r < nrows; r++) {
732 8 4 if (wd == 255) {
740 4 0 av_store(pair, 1, elem ? SvREFCNT_inc(*elem) : newSV(0));
744 10 5 for (w = 0; w < nvar; w++) SvREFCNT_dec(subcols[w]);
750 0 67 DEC_NEED(8);
752 0 67 if (obj_ver != 0 && obj_ver != 2 && obj_ver != 4)
0 0 if (obj_ver != 0 && obj_ver != 2 && obj_ver != 4)
0 0 if (obj_ver != 0 && obj_ver != 2 && obj_ver != 4)
756 67 0 if (obj_ver == 0) {
764 0 67 if (num_paths > (UV)(end - *p))
771 53 14 if (num_paths > 0) {
772 0 53 Newx(paths, num_paths, char*);
774 0 53 Newx(path_lens, num_paths, STRLEN);
778 642 66 for (pi = 0; pi < num_paths; pi++) {
785 0 66 if (obj_ver == 4) {
791 0 0 if (shared_ver == 1 || shared_ver == 2)
0 0 if (shared_ver == 1 || shared_ver == 2)
798 52 14 if (num_paths > 0) {
799 0 52 Newxz(path_kind_list, num_paths, int*);
801 0 52 Newxz(path_kind_count, num_paths, int);
804 641 66 for (pi = 0; pi < num_paths; pi++) {
805 0 641 DEC_NEED(8);
807 0 641 if (dyn_ver != 1 && dyn_ver != 2 && dyn_ver != 4)
0 0 if (dyn_ver != 1 && dyn_ver != 2 && dyn_ver != 4)
0 0 if (dyn_ver != 1 && dyn_ver != 2 && dyn_ver != 4)
811 641 0 if (dyn_ver == 1)
816 0 641 if (ntypes > (UV)(end - *p))
822 641 0 if (ntypes > 0) {
823 0 641 Newx(kinds_in_order, ntypes, int);
827 649 641 for (ti = 0; ti < ntypes; ti++) {
832 0 649 if (k < 0)
843 0 641 DEC_NEED(8);
845 0 641 if (var_mode != 0)
851 304 66 for (r = 0; r < nrows; r++)
861 19 66 for (tp = 0; tp < t->tuple_len; tp++) {
866 35 19 for (r = 0; r < nrows; r++) {
868 0 35 if (!e) continue;
879 641 66 for (pi = 0; pi < num_paths; pi++) {
881 0 641 DEC_NEED((STRLEN)nrows);
885 7538 641 for (r = 0; r < nrows; r++) discs[r] = *(*p)++;
902 649 641 for (i = 0; i < nv; i++)
907 7538 641 for (r = 0; r < nrows; r++) {
909 6878 660 if (d == 0xff) continue;
910 0 660 if (d >= wire_slots)
924 1290 641 for (slot = 0; slot < wire_slots; slot++) {
929 649 641 if (nv_rows > 0) av_extend(sub, nv_rows - 1);
938 7538 641 for (r = 0; r < nrows; r++) {
940 6878 660 if (d == 0xff) continue;
942 0 660 if (!e) continue;
955 64 2 if (nrows > 0) {
956 0 64 DEC_NEED((STRLEN)(8 * nrows));
960 0 66 if (last_offset > 0) {
965 0 0 if (last_offset > (uint64_t)(end - *p))
971 0 0 for (i = 0; i < last_offset; i++) {
975 0 0 for (i = 0; i < last_offset; i++) {
986 304 66 for (r = 0; r < nrows; r++) {
993 695 304 while ((he = hv_iternext(row_hv))) {
996 242 453 if (memchr(kstr, '.', klen))
1001 242 304 for (ki = 0; ki < nk; ki++) {
1009 2619 242 for (off = 0; off <= klen; off++) {
1010 2377 242 if (off == klen || kstr[off] == '.') {
321 2056 if (off == klen || kstr[off] == '.') {
1013 242 321 if (off == klen) {
1017 0 242 if (!leaf) { conflict = 1; break; }
1019 0 242 if (!hv_store(cur, seg, (I32)slen,
1028 176 145 if (next && SvROK(*next)
176 0 if (next && SvROK(*next)
1029 176 0 && SvTYPE(SvRV(*next)) == SVt_PVHV) {
1031 0 145 } else if (next) {
1044 242 0 if (!conflict)
1053 0 5 DEC_NEED(8);
1055 0 5 if (dyn_ver != 1 && dyn_ver != 2 && dyn_ver != 4)
0 0 if (dyn_ver != 1 && dyn_ver != 2 && dyn_ver != 4)
0 0 if (dyn_ver != 1 && dyn_ver != 2 && dyn_ver != 4)
1059 5 0 if (dyn_ver == 1)
1064 0 5 if (ntypes > (UV)(end - *p))
1070 4 1 if (ntypes > 0) {
1071 0 4 Newx(kinds_in_order, ntypes, int);
1075 12 5 for (ti = 0; ti < ntypes; ti++) {
1079 0 12 if (k < 0)
1087 0 5 DEC_NEED(8);
1089 0 5 if (var_mode != 0)
1097 12 5 for (i = 0; i < nv; i++) mask |= 1u << kinds_in_order[i];
1102 0 5 DEC_NEED((STRLEN)nrows);
1106 17 5 for (r = 0; r < nrows; r++) discs[r] = *(*p)++;
1111 17 5 for (r = 0; r < nrows; r++) {
1112 5 12 if (discs[r] == 0xff) continue;
1113 0 12 if (discs[r] >= wire_slots)
1123 17 5 for (slot = 0; slot < wire_slots; slot++) {
1128 12 5 if (nv_rows > 0) av_extend(sub, nv_rows - 1);
1136 17 5 for (r = 0; r < nrows; r++) {
1138 5 12 if (d == 0xff) { av_store(av, r, newSV(0)); continue; }
1140 12 0 av_store(av, r, e ? SvREFCNT_inc(*e) : newSV(0));