Branch Coverage

Email-Address-XS.xs
Criterion Covered Total %
branch 277 392 70.6


line true false branch
66 0 23 PUSHMARK(SP);
72 23 0 if (count > 0)
76 23 0 FREETMPS;
94 23 0 if (!fatal)
109 2491 210 for (i = 0; i < len; ++i)
110 6 2485 if (!UTF8_IS_INVARIANT(str[i]))
121 698 363 if (!nomg)
122 66 632 SvGETMAGIC(scalar);
0 66 SvGETMAGIC(scalar);
124 280 781 if (!SvOK(scalar))
280 0 if (!SvOK(scalar))
280 0 if (!SvOK(scalar))
127 667 114 string = SvPV_nomg(scalar, *len);
150 231 550 if (utf8 && !SvUTF8(scalar) && string_needs_utf8_upgrade(string, *len)) {
216 15 if (utf8 && !SvUTF8(scalar) && string_needs_utf8_upgrade(string, *len)) {
6 210 if (utf8 && !SvUTF8(scalar) && string_needs_utf8_upgrade(string, *len)) {
157 0 6 return SvPVutf8(scalar, *len);
169 4 331 if (!string) {
185 0 584 if (!hv_exists(hash, key, klen))
189 0 584 if (!scalar_ptr)
200 0 292 if (!scalar)
203 275 17 if (!*taint && SvTAINTED(scalar))
37 238 if (!*taint && SvTAINTED(scalar))
8 29 if (!*taint && SvTAINTED(scalar))
216 228 72 if (value)
221 5 295 if (utf8 && value)
5 0 if (utf8 && value)
224 5 295 if (taint)
225 5 0 SvTAINTED_on(scalar);
238 29 0 if (gv)
241 0 29 if (!class)
244 0 29 if (!class)
247 0 29 if (!class)
261 0 14 if (class_len == 0) {
267 0 14 if (!class)
275 14 29 if (scalar)
288 8 157 if (!sv_isobject(object))
294 0 157 PUSHMARK(SP);
295 0 157 EXTEND(SP, 2);
297 0 157 XPUSHs(sv_2mortal(newSVsv(object)));
298 0 157 XPUSHs(sv_2mortal(newSVsv(class)));
306 157 0 if (count > 0) {
308 157 0 ret = SvTRUE(sv);
0 157 ret = SvTRUE(sv);
0 0 ret = SvTRUE(sv);
0 157 ret = SvTRUE(sv);
0 0 ret = SvTRUE(sv);
0 0 ret = SvTRUE(sv);
157 0 ret = SvTRUE(sv);
157 0 ret = SvTRUE(sv);
157 0 ret = SvTRUE(sv);
150 7 ret = SvTRUE(sv);
150 0 ret = SvTRUE(sv);
150 7 ret = SvTRUE(sv);
0 0 ret = SvTRUE(sv);
0 0 ret = SvTRUE(sv);
0 0 ret = SvTRUE(sv);
0 0 ret = SvTRUE(sv);
0 0 ret = SvTRUE(sv);
0 0 ret = SvTRUE(sv);
0 0 ret = SvTRUE(sv);
314 157 0 FREETMPS;
324 14 0 if (len < 10 || buffer[0])
0 14 if (len < 10 || buffer[0])
327 0 14 if (len+10+1+10 < sizeof(message)) {
332 14 0 if (index2 == -1) {
339 0 0 if (index1 == -1)
356 66 88 object_ptr = av_fetch(array, (index2 == -1 ? 0 : index2), 0);
357 0 154 if (!object_ptr) {
358 0 0 if (warn) {
366 8 146 if (!is_class_object(aTHX_ class, object)) {
367 4 4 if (warn) {
369 4 0 carp(CARP_WARN, "%s is not %s object", buffer, SvPV_nolen(class));
375 0 146 if (SvTYPE(scalar) != SVt_PVHV) {
376 0 0 if (warn) {
401 4 73 if (!hash)
410 50 23 if (name && string_contains_nul(name, name_len)) {
1 49 if (name && string_contains_nul(name, name_len)) {
415 68 5 if (mailbox && string_contains_nul(mailbox, mailbox_len)) {
1 67 if (mailbox && string_contains_nul(mailbox, mailbox_len)) {
420 68 5 if (domain && string_contains_nul(domain, domain_len)) {
1 67 if (domain && string_contains_nul(domain, domain_len)) {
425 19 54 if (comment && string_contains_nul(comment, comment_len)) {
1 18 if (comment && string_contains_nul(comment, comment_len)) {
430 68 5 if (mailbox && !mailbox[0])
1 67 if (mailbox && !mailbox[0])
433 68 5 if (domain && !domain[0])
1 67 if (domain && !domain[0])
436 6 67 if (!mailbox && !domain) {
6 0 if (!mailbox && !domain) {
442 0 67 if (!mailbox) {
448 0 67 if (!domain) {
465 142 0 if (scalar && !SvROK(scalar)) {
4 138 if (scalar && !SvROK(scalar)) {
466 2 2 if (warn)
473 138 0 if (!scalar_ref || SvTYPE(scalar_ref) != SVt_PVAV) {
0 138 if (!scalar_ref || SvTYPE(scalar_ref) != SVt_PVAV) {
474 0 0 if (warn)
492 69 2 len = array ? (av_len(array) + 1) : 0;
494 58 13 if (index1 == -1 && group_name)
10 48 if (index1 == -1 && group_name)
497 20 51 if (group_name && string_contains_nul(group_name, group_len))
0 20 if (group_name && string_contains_nul(group_name, group_len))
500 20 51 if (group_name)
503 77 71 for (index2 = 0; index2 < len; ++index2)
504 52 25 message_address_add_from_perl_array(aTHX_ first_address, last_address, utf8, taint, array, index1, ((index1 == -1 && len == 1) ? -1 : index2), class);
8 44 message_address_add_from_perl_array(aTHX_ first_address, last_address, utf8, taint, array, index1, ((index1 == -1 && len == 1) ? -1 : index2), class);
506 20 51 if (group_name)
509 63 8 if (!*taint && SvTAINTED(scalar_group))
5 58 if (!*taint && SvTAINTED(scalar_group))
0 5 if (!*taint && SvTAINTED(scalar_group))
531 1 70 if (SvUTF8(scalar_group))
534 58 13 if (index1 == -1 && group_name)
10 48 if (index1 == -1 && group_name)
538 69 2 len = array ? (av_len(array) + 1) : 0;
540 77 71 for (index2 = 0; index2 < len; ++index2) {
541 52 25 hash = get_object_hash_from_perl_array(aTHX_ array, index1, ((index1 == -1 && len == 1) ? -1 : index2), class, true);
8 44 hash = get_object_hash_from_perl_array(aTHX_ array, index1, ((index1 == -1 && len == 1) ? -1 : index2), class, true);
542 4 73 if (!hash)
544 292 73 for (hash_key_ptr = hash_keys; *hash_key_ptr; ++hash_key_ptr) {
546 292 0 if (scalar && get_perl_scalar_value(aTHX_ scalar, &len_na, false, false) && SvUTF8(scalar))
205 87 if (scalar && get_perl_scalar_value(aTHX_ scalar, &len_na, false, false) && SvUTF8(scalar))
14 191 if (scalar && get_perl_scalar_value(aTHX_ scalar, &len_na, false, false) && SvUTF8(scalar))
564 78 41 for (address = first_address; address; address = address->next) {
565 18 60 if (!address->domain)
567 19 59 if (in_group)
583 41 40 if (!*address)
588 9 31 if (in_group && (*address)->mailbox)
9 0 if (in_group && (*address)->mailbox)
593 1 39 if (utf8 && in_group && (*address)->mailbox)
1 0 if (utf8 && in_group && (*address)->mailbox)
1 0 if (utf8 && in_group && (*address)->mailbox)
596 1 39 if (taint)
597 1 0 SvTAINTED_on(*group_scalar);
602 9 31 if (in_group)
605 71 29 while (*address && (*address)->domain) {
60 11 while (*address && (*address)->domain) {
609 60 0 set_perl_hash_value(aTHX_ hash, "user", ( (*address)->mailbox && (*address)->mailbox[0] ) ? (*address)->mailbox : NULL, utf8, taint);
57 3 set_perl_hash_value(aTHX_ hash, "user", ( (*address)->mailbox && (*address)->mailbox[0] ) ? (*address)->mailbox : NULL, utf8, taint);
610 60 0 set_perl_hash_value(aTHX_ hash, "host", ( (*address)->domain && (*address)->domain[0] ) ? (*address)->domain : NULL, utf8, taint);
56 4 set_perl_hash_value(aTHX_ hash, "host", ( (*address)->domain && (*address)->domain[0] ) ? (*address)->domain : NULL, utf8, taint);
614 4 56 if ((*address)->invalid_syntax)
625 9 31 if (in_group && *address)
9 0 if (in_group && *address)
649 1 63 if (items % 2 == 1) {
659 71 63 for (i = 0; i < items; i += 2)
660 13 58 if (perl_group_needs_utf8(aTHX_ ST(i), ST(i+1), (items == 2 ? -1 : i), this_class))
5 66 if (perl_group_needs_utf8(aTHX_ ST(i), ST(i+1), (items == 2 ? -1 : i), this_class))
665 71 63 for (i = 0; i < items; i += 2)
666 13 58 message_address_add_from_perl_group(aTHX_ &first_address, &last_address, utf8, &taint, ST(i), ST(i+1), (items == 2 ? -1 : i), this_class);
671 4 59 if (utf8)
673 8 55 if (taint)
674 8 0 SvTAINTED_on(string_scalar);
675 0 63 EXTEND(SP, 1);
698 43 0 string_scalar = items >= 1 ? ST(0) : &PL_sv_undef;
699 14 29 class_scalar = items >= 2 ? ST(1) : NULL;
702 2 41 taint = SvTAINTED(string_scalar);
1 1 taint = SvTAINTED(string_scalar);
704 14 29 if (class_scalar && !sv_derived_from_pvn(class_scalar, this_class_name, this_class_len, SVf_UTF8)) {
2 12 if (class_scalar && !sv_derived_from_pvn(class_scalar, this_class_name, this_class_len, SVf_UTF8)) {
705 2 0 class_name = HvNAME(hv_class);
2 0 class_name = HvNAME(hv_class);
0 2 class_name = HvNAME(hv_class);
0 0 class_name = HvNAME(hv_class);
2 0 class_name = HvNAME(hv_class);
0 2 class_name = HvNAME(hv_class);
706 2 0 carp(CARP_WARN, "Class %s is not derived from %s", (class_name ? class_name : "(unknown)"), this_class_name);
712 41 0 EXTEND(SP, count * 2);
0 41 EXTEND(SP, count * 2);
714 40 41 while (get_next_perl_address_group(aTHX_ &address, &group_scalar, &addresses_scalar, hv_class, utf8, taint)) {
734 93 0 mailbox_scalar = items >= 1 ? ST(0) : &PL_sv_undef;
735 93 0 domain_scalar = items >= 2 ? ST(1) : &PL_sv_undef;
738 93 0 utf8 = (SvUTF8(mailbox_scalar) || SvUTF8(domain_scalar));
0 93 utf8 = (SvUTF8(mailbox_scalar) || SvUTF8(domain_scalar));
739 6 87 taint = (SvTAINTED(mailbox_scalar) || SvTAINTED(domain_scalar));
0 6 taint = (SvTAINTED(mailbox_scalar) || SvTAINTED(domain_scalar));
1 86 taint = (SvTAINTED(mailbox_scalar) || SvTAINTED(domain_scalar));
1 0 taint = (SvTAINTED(mailbox_scalar) || SvTAINTED(domain_scalar));
740 0 93 if (string_contains_nul(mailbox, mailbox_len))
742 0 93 if (string_contains_nul(domain, domain_len))
748 0 93 if (utf8)
750 7 86 if (taint)
751 7 0 SvTAINTED_on(string_scalar);
752 0 93 EXTEND(SP, 1);
768 92 0 string_scalar = items >= 1 ? ST(0) : &PL_sv_undef;
771 2 90 taint = SvTAINTED(string_scalar);
2 0 taint = SvTAINTED(string_scalar);
774 83 9 mailbox_scalar = mailbox ? sv_2mortal(newSVpv(mailbox, 0)) : sv_newmortal();
775 83 9 domain_scalar = domain ? sv_2mortal(newSVpv(domain, 0)) : sv_newmortal();
778 0 92 if (utf8) {
782 2 90 if (taint) {
783 2 0 SvTAINTED_on(mailbox_scalar);
784 2 0 SvTAINTED_on(domain_scalar);
786 0 92 EXTEND(SP, 2);
793 11 0 SV *class = items >= 1 ? ST(0) : &PL_sv_undef;
794 11 0 SV *object = items >= 2 ? ST(1) : &PL_sv_undef;