== CONTROL: an unmutated sandbox is faithful == FAIL CONTROL: check-calendar-recurrence-qualification.php passes in an unmutated sandbox FAIL CONTROL: check-calendar-recurrence-integer-bound-engine.php passes in an unmutated sandbox == A. classifier guards == PASS A1 the classifier bounds COUNT/INTERVAL at all (the pre-#582 shape-only test): applies to exactly one site in lib/calendar_recurrence_qualification.php PASS A1 the classifier bounds COUNT/INTERVAL at all (the pre-#582 shape-only test): restoring it turns the qualification check RED FAIL A1 the classifier bounds COUNT/INTERVAL at all (the pre-#582 shape-only test): and it is "integer_bound_interval_2147483648_invalid" that fails PASS A2 the length guard refuses a value with more digits than the maximum: applies to exactly one site in lib/calendar_recurrence_qualification.php PASS A2 the length guard refuses a value with more digits than the maximum: restoring it turns the qualification check RED FAIL A2 the length guard refuses a value with more digits than the maximum: and it is "integer_bound_interval_999999999999999999999999_invalid" that fails PASS A3 the equal-length comparison refuses 2147483648..9999999999: applies to exactly one site in lib/calendar_recurrence_qualification.php PASS A3 the equal-length comparison refuses 2147483648..9999999999: restoring it turns the qualification check RED FAIL A3 the equal-length comparison refuses 2147483648..9999999999: and it is "H1: 2147483648 is refused" that fails PASS A4 the bound is the RFC INTEGER maximum, not the host integer maximum: applies to exactly one site in lib/calendar_recurrence_qualification.php PASS A4 the bound is the RFC INTEGER maximum, not the host integer maximum: restoring it turns the qualification check RED FAIL A4 the bound is the RFC INTEGER maximum, not the host integer maximum: and it is "the bound is RFC 5545 3.3.8, stated once" that fails PASS A5 the predicate and the proving parse are the SAME test: applies to exactly one site in lib/calendar_recurrence_qualification.php PASS A5 the predicate and the proving parse are the SAME test: restoring it turns the qualification check RED FAIL A5 the predicate and the proving parse are the SAME test: and it is "integer_bound_interval_2147483648_invalid" that fails PASS A6 the expander and the classifier share ONE parts scan: applies to exactly one site in lib/calendar_data.php PASS A6 the expander and the classifier share ONE parts scan: restoring it turns the qualification check RED FAIL A6 the expander and the classifier share ONE parts scan: and it is "H2: the expander and the classifier share one parts scan" that fails == B. defence in depth: post-qualification coercion == PASS B-CONTROL: the classifier-defeating mutation applies to exactly one site FAIL B-CONTROL: with the classifier defeated, the expander alone still refuses every oversized scalar FAIL B-CONTROL: ... and the engine check ran to completion PASS B-CONTROL: ... and the classifier in that same sandbox really was defeated PASS B1 the expander re-parses INTERVAL instead of clamping it: the classifier-defeating mutation applies to exactly one site PASS B1 the expander re-parses INTERVAL instead of clamping it: the coercion applies to exactly one site in lib/calendar_data.php PASS B1 the expander re-parses INTERVAL instead of clamping it: restoring it turns the engine check RED FAIL B1 the expander re-parses INTERVAL instead of clamping it: and it is "FREQ=DAILY;INTERVAL=2147483648" that fails PASS B2 the expander re-parses COUNT instead of clamping it: the classifier-defeating mutation applies to exactly one site PASS B2 the expander re-parses COUNT instead of clamping it: the coercion applies to exactly one site in lib/calendar_data.php PASS B2 the expander re-parses COUNT instead of clamping it: restoring it turns the engine check RED FAIL B2 the expander re-parses COUNT instead of clamping it: and it is "FREQ=DAILY;COUNT=2147483648" that fails PASS B3 the expander FAILS CLOSED when a proven scalar will not parse: the classifier-defeating mutation applies to exactly one site PASS B3 the expander FAILS CLOSED when a proven scalar will not parse: the coercion applies to exactly one site in lib/calendar_data.php PASS B3 the expander FAILS CLOSED when a proven scalar will not parse: restoring it turns the engine check RED FAIL B3 the expander FAILS CLOSED when a proven scalar will not parse: and it is "FREQ=DAILY;INTERVAL=999999999999999999999999" that fails PASS B4 an invalid PRESENT COUNT is not read as an ABSENT one: the classifier-defeating mutation applies to exactly one site PASS B4 an invalid PRESENT COUNT is not read as an ABSENT one: the coercion applies to exactly one site in lib/calendar_data.php PASS B4 an invalid PRESENT COUNT is not read as an ABSENT one: restoring it turns the engine check RED FAIL B4 an invalid PRESENT COUNT is not read as an ABSENT one: and it is "FREQ=DAILY;COUNT=2147483648" that fails == C. coverage == PASS every mutation names a distinct guard PASS at least six CLASSIFIER guards are mutation-tested PASS at least four POST-QUALIFICATION coercions are mutation-tested 14 calendar recurrence integer bound mutation check(s) FAILED