From 97757e759db73329c23ffe768d05d2d2cad1f550 Mon Sep 17 00:00:00 2001 From: George Peter Banyard Date: Wed, 3 Jun 2020 01:13:04 +0200 Subject: [PATCH] Fix weird zend_bool usage in Intl Calendar::roll() method This code really needs to be review as it's convoluted for no good reason. --- ext/intl/calendar/calendar_methods.cpp | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/ext/intl/calendar/calendar_methods.cpp b/ext/intl/calendar/calendar_methods.cpp index 473e459d13..b38a2f1961 100644 --- a/ext/intl/calendar/calendar_methods.cpp +++ b/ext/intl/calendar/calendar_methods.cpp @@ -431,7 +431,7 @@ U_CFUNC PHP_FUNCTION(intlcal_roll) value; zval args_a[3] = {0}, *args = args_a; - zend_bool bool_variant_val = (zend_bool)-1; + zend_bool bool_variant_val; CALENDAR_METHOD_INIT_VARS; object = getThis(); @@ -451,7 +451,8 @@ U_CFUNC PHP_FUNCTION(intlcal_roll) == FAILURE) { RETURN_THROWS(); } - bool_variant_val = Z_TYPE(args[1]) == IS_TRUE? 1 : 0; + /* false corresponds to rolling down, i.e. -1 */ + value = Z_TYPE(args[1]) == IS_TRUE? 1 : -1; } else if (zend_parse_method_parameters(ZEND_NUM_ARGS(), object, "Oll", &object, Calendar_ce_ptr, &field, &value) == FAILURE) { RETURN_THROWS(); @@ -462,8 +463,7 @@ U_CFUNC PHP_FUNCTION(intlcal_roll) "intlcal_roll: invalid field", 0); RETURN_FALSE; } - if (bool_variant_val == (zend_bool)-1 && - (value < INT32_MIN || value > INT32_MAX)) { + if (value < INT32_MIN || value > INT32_MAX) { intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR, "intlcal_roll: value out of bounds", 0); RETURN_FALSE; @@ -471,13 +471,7 @@ U_CFUNC PHP_FUNCTION(intlcal_roll) CALENDAR_METHOD_FETCH_OBJECT; - if (bool_variant_val != (zend_bool)-1) { - co->ucal->roll((UCalendarDateFields)field, (UBool)bool_variant_val, - CALENDAR_ERROR_CODE(co)); - } else { - co->ucal->roll((UCalendarDateFields)field, (int32_t)value, - CALENDAR_ERROR_CODE(co)); - } + co->ucal->roll((UCalendarDateFields)field, (int32_t)value, CALENDAR_ERROR_CODE(co)); INTL_METHOD_CHECK_STATUS(co, "intlcal_roll: Error calling ICU Calendar::roll"); RETURN_TRUE; -- 2.40.0