]> granicus.if.org Git - php/commitdiff
Throw exception for unconstructed intl objects
authorMáté Kocsis <kocsismate@woohoolabs.com>
Sat, 4 Jan 2020 10:01:59 +0000 (11:01 +0100)
committerMáté Kocsis <kocsismate@woohoolabs.com>
Sun, 5 Jan 2020 22:55:14 +0000 (23:55 +0100)
Closes GH-5052

33 files changed:
ext/intl/breakiterator/breakiterator_class.h
ext/intl/calendar/calendar_class.h
ext/intl/common/common_enum.h
ext/intl/dateformat/dateformat_class.h
ext/intl/formatter/formatter_class.h
ext/intl/msgformat/msgformat_class.h
ext/intl/resourcebundle/resourcebundle.stub.php
ext/intl/resourcebundle/resourcebundle_arginfo.h
ext/intl/resourcebundle/resourcebundle_class.h
ext/intl/spoofchecker/spoofchecker.stub.php
ext/intl/spoofchecker/spoofchecker_class.h
ext/intl/tests/symfony_format_type_double_intl1.phpt
ext/intl/tests/symfony_format_type_double_intl2.phpt
ext/intl/tests/symfony_format_type_double_intl3.phpt
ext/intl/tests/symfony_format_type_double_intl4.phpt
ext/intl/tests/symfony_format_type_int32_intl1.phpt
ext/intl/tests/symfony_format_type_int32_intl2.phpt
ext/intl/tests/symfony_format_type_int32_intl3.phpt
ext/intl/tests/symfony_format_type_int32_intl4.phpt
ext/intl/tests/symfony_format_type_int32_intl5.phpt
ext/intl/tests/symfony_format_type_int32_intl6.phpt
ext/intl/tests/symfony_format_type_int32_intl7.phpt
ext/intl/tests/symfony_format_type_int64_intl2.phpt
ext/intl/tests/symfony_format_type_int64_intl3.phpt
ext/intl/tests/symfony_format_type_int64_intl4.phpt
ext/intl/tests/symfony_format_type_int64_intl5.phpt
ext/intl/tests/symfony_format_type_int64_intl6.phpt
ext/intl/tests/symfony_format_type_int64_intl7.phpt
ext/intl/tests/symfony_format_type_int64_intl8.phpt
ext/intl/timezone/timezone.stub.php
ext/intl/timezone/timezone_arginfo.h
ext/intl/timezone/timezone_class.h
ext/intl/transliterator/transliterator_class.h

index ce95c65984a0f8d3a0e614e452a2d8a9691caf27..ae5eeab82100ca69db66a0a5af0a95915df163d0 100644 (file)
@@ -58,8 +58,8 @@ static inline BreakIterator_object *php_intl_breakiterator_fetch_object(zend_obj
        BREAKITER_METHOD_FETCH_OBJECT_NO_CHECK; \
        if (bio->biter == NULL) \
        { \
-               intl_errors_set(&bio->err, U_ILLEGAL_ARGUMENT_ERROR, "Found unconstructed BreakIterator", 0); \
-               RETURN_FALSE; \
+               zend_throw_error(NULL, "Found unconstructed BreakIterator"); \
+               RETURN_THROWS(); \
        }
 
 void breakiterator_object_create(zval *object, BreakIterator *break_iter, int brand_new);
index bd7ddf0aa92d334d656d1b33de4babdbee7def83..a4d5236307e52d32bc0603aa2fbd3b97a8595ac4 100644 (file)
@@ -55,8 +55,8 @@ static inline Calendar_object *php_intl_calendar_fetch_object(zend_object *obj)
        CALENDAR_METHOD_FETCH_OBJECT_NO_CHECK; \
        if (co->ucal == NULL) \
        { \
-               intl_errors_set(&co->err, U_ILLEGAL_ARGUMENT_ERROR, "Found unconstructed IntlCalendar", 0); \
-               RETURN_FALSE; \
+               zend_throw_error(NULL, "Found unconstructed IntlCalendar"); \
+               RETURN_THROWS(); \
        }
 
 void calendar_object_create(zval *object, Calendar *calendar);
index f004b9be3766d6e93494f831ad8e853bf507b69e..1f97575947b009b23997e26161e258bbbc837086 100644 (file)
@@ -41,8 +41,8 @@ extern "C" {
        object = ZEND_THIS; \
        INTLITERATOR_METHOD_FETCH_OBJECT_NO_CHECK; \
        if (ii->iterator == NULL) { \
-               intl_errors_set(&ii->err, U_ILLEGAL_ARGUMENT_ERROR, "Found unconstructed IntlIterator", 0); \
-               RETURN_FALSE; \
+               zend_throw_error(NULL, "Found unconstructed IntlIterator"); \
+               RETURN_THROWS(); \
        }
 
 typedef struct {
index 8a95527695068227ec9a636cb86ca4c4620bfda2..dc060dbe84f39483a52bca4bb6cde18afda3514c 100644 (file)
@@ -46,8 +46,8 @@ extern zend_class_entry *IntlDateFormatter_ce_ptr;
                DATE_FORMAT_METHOD_FETCH_OBJECT_NO_CHECK;       \
        if (dfo->datef_data.udatf == NULL)                              \
        {                                                                                               \
-               intl_errors_set(&dfo->datef_data.error, U_ILLEGAL_ARGUMENT_ERROR, "Found unconstructed IntlDateFormatter", 0); \
-               RETURN_FALSE;                                                           \
+               zend_throw_error(NULL, "Found unconstructed IntlDateFormatter"); \
+               RETURN_THROWS();                                                                \
        }
 
 #define DATE_FORMAT_OBJECT(dfo)                (dfo)->datef_data.udatf
index 37b468d8680694bc635b220cda7f4a7a095dfe4c..b221a96ee46c81cb8b6ca5103d095b0421d68bf0 100644 (file)
@@ -44,9 +44,8 @@ extern zend_class_entry *NumberFormatter_ce_ptr;
        FORMATTER_METHOD_FETCH_OBJECT_NO_CHECK; \
        if (FORMATTER_OBJECT(nfo) == NULL) \
        { \
-               intl_errors_set(&nfo->nf_data.error, U_ILLEGAL_ARGUMENT_ERROR, \
-                               "Found unconstructed NumberFormatter", 0); \
-               RETURN_FALSE; \
+               zend_throw_error(NULL, "Found unconstructed NumberFormatter"); \
+               RETURN_THROWS(); \
        }
 
 
index 53028138437eff7514be732c25ec36b3cf79a098..2e0eda9d7e11b032172b7fc7dcfb521ca9525da2 100644 (file)
@@ -46,9 +46,8 @@ extern zend_class_entry *MessageFormatter_ce_ptr;
 #define MSG_FORMAT_METHOD_FETCH_OBJECT                                                                 \
        MSG_FORMAT_METHOD_FETCH_OBJECT_NO_CHECK;                                                        \
        if (MSG_FORMAT_OBJECT(mfo) == NULL)     {                                                               \
-               intl_errors_set(&mfo->mf_data.error, U_ILLEGAL_ARGUMENT_ERROR,  \
-                               "Found unconstructed MessageFormatter", 0);     \
-               RETURN_FALSE;                                                                                                   \
+               zend_throw_error(NULL, "Found unconstructed MessageFormatter"); \
+               RETURN_THROWS();                                                                                                \
        }
 
 #define MSG_FORMAT_OBJECT(mfo)                 (mfo)->mf_data.umsgf
index f3f0dcef1af76595fa00729eb4db2150becf0485..14f10fea4bf9d9dd614eb12e43a7da41fcb595ea 100644 (file)
@@ -13,7 +13,7 @@ class ResourceBundle implements Traversable
      */
     public function get($index, bool $fallback = true) {}
 
-    /** @return int|false */
+    /** @return int */
     public function count() {}
 
     /** @return array|false */
@@ -34,7 +34,7 @@ function resourcebundle_create(?string $locale, ?string $bundlename, bool $fallb
  */
 function resourcebundle_get(ResourceBundle $bundle, $index) {}
 
-function resourcebundle_count(ResourceBundle $bundle): int|false {}
+function resourcebundle_count(ResourceBundle $bundle): int {}
 
 function resourcebundle_locales(string $bundlename): array|false {}
 
index 9c4fbf088f68aaf79eac58f6e0e26935cb164684..855b8b548c1957480ba3727772df2bfe8dc03db8 100644 (file)
@@ -35,7 +35,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_resourcebundle_get, 0, 0, 2)
        ZEND_ARG_INFO(0, index)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_resourcebundle_count, 0, 1, MAY_BE_LONG|MAY_BE_FALSE)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_resourcebundle_count, 0, 1, IS_LONG, 0)
        ZEND_ARG_OBJ_INFO(0, bundle, ResourceBundle, 0)
 ZEND_END_ARG_INFO()
 
@@ -43,9 +43,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_resourcebundle_locales, 0, 1, MA
        ZEND_ARG_TYPE_INFO(0, bundlename, IS_STRING, 0)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_resourcebundle_get_error_code, 0, 1, IS_LONG, 0)
-       ZEND_ARG_OBJ_INFO(0, bundle, ResourceBundle, 0)
-ZEND_END_ARG_INFO()
+#define arginfo_resourcebundle_get_error_code arginfo_resourcebundle_count
 
 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_resourcebundle_get_error_message, 0, 1, IS_STRING, 0)
        ZEND_ARG_OBJ_INFO(0, bundle, ResourceBundle, 0)
index c61939dc7740bb89c8c0ab18c59f5c8ba2db9307..e7e264d66e626e538c5529b6f9747b35a345f3a2 100644 (file)
@@ -38,14 +38,12 @@ static inline ResourceBundle_object *php_intl_resourcebundle_fetch_object(zend_o
 #define RESOURCEBUNDLE_METHOD_INIT_VARS                INTL_METHOD_INIT_VARS(ResourceBundle, rb)
 #define RESOURCEBUNDLE_METHOD_FETCH_OBJECT_NO_CHECK    INTL_METHOD_FETCH_OBJECT(INTL_RESOURCEBUNDLE, rb)
 #define RESOURCEBUNDLE_METHOD_FETCH_OBJECT                                                     \
-       INTL_METHOD_FETCH_OBJECT(INTL_RESOURCEBUNDLE, rb);                                      \
+       INTL_METHOD_FETCH_OBJECT(INTL_RESOURCEBUNDLE, rb);                              \
        if (RESOURCEBUNDLE_OBJECT(rb) == NULL) {                                                \
-               intl_errors_set(&rb->error, U_ILLEGAL_ARGUMENT_ERROR,           \
-                               "Found unconstructed ResourceBundle", 0);       \
-               RETURN_FALSE;                                                                                           \
+               zend_throw_error(NULL, "Found unconstructed ResourceBundle");   \
+               RETURN_THROWS();                                                                                        \
        }
 
-
 #define RESOURCEBUNDLE_OBJECT(rb)                      (rb)->me
 
 void resourcebundle_register_class( void );
index 1609aa03c14a7dccf80b26e1ec413936ee7ae002..28c333cf692f4fc7db2f9ada3674663bca52f872 100644 (file)
@@ -10,14 +10,14 @@ class Spoofchecker
     /** @return bool */
     public function areConfusable(string $s1, string $s2, &$error = null) {}
 
-    /** @return null|false */
+    /** @return void */
     public function setAllowedLocales(string $locale_list) {}
 
-    /** @return null|false */
+    /** @return void */
     public function setChecks(int $checks) {}
 
 #if U_ICU_VERSION_MAJOR_NUM >= 58
-    /** @return null|false */
+    /** @return void */
     public function setRestrictionLevel(int $level) {}
 #endif
 }
index b8b0e5e287d4cb55b9a1af0e4a963e2ec917edaf..12593e35bebe193ec7ede5b12a541db4f844a83f 100644 (file)
@@ -63,9 +63,8 @@ extern zend_class_entry *Spoofchecker_ce_ptr;
 #define SPOOFCHECKER_METHOD_FETCH_OBJECT                                                       \
        SPOOFCHECKER_METHOD_FETCH_OBJECT_NO_CHECK;                                              \
        if (co->uspoof == NULL) {                                                                               \
-               intl_errors_set(&co->err, U_ILLEGAL_ARGUMENT_ERROR,                     \
-                               "Found unconstructed Spoofchecker", 0); \
-               RETURN_FALSE;                                                                                           \
+               zend_throw_error(NULL, "Found unconstructed Spoofchecker");     \
+               RETURN_THROWS();                                                                                        \
        }
 
 // Macro to check return value of a ucol_* function call.
index 13a7ad761fa77495d998d97febd836265008a6a0..9a5c6b2a25893710ace868c82bf8a0720192a3e7 100644 (file)
@@ -12,11 +12,11 @@ $unit_test_args = unserialize('a:3:{i:0;O:15:"NumberFormatter":0:{}i:1;i:1;i:2;s
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeDoubleIntl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_DOUBLE);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_DOUBLE);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(3) {
   [0]=>
@@ -27,4 +27,4 @@ array(3) {
   [2]=>
   string(1) "1"
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index 6bff7cc3557c09093e3637a9704aad9ed68e338d..e5014c6f34db14d6ffd3b51735ac1839319b9255 100644 (file)
@@ -12,11 +12,11 @@ $unit_test_args = unserialize('a:3:{i:0;O:15:"NumberFormatter":0:{}i:1;d:1.10000
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeDoubleIntl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_DOUBLE);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_DOUBLE);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(3) {
   [0]=>
@@ -27,4 +27,4 @@ array(3) {
   [2]=>
   string(3) "1.1"
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index 3b0d576df7d472d066e399209c40279a6e87a10b..fbfd629b75a922aa7679a39d15e1a77a3969922a 100644 (file)
@@ -12,11 +12,11 @@ $unit_test_args = unserialize('a:3:{i:0;O:15:"NumberFormatter":0:{}i:1;i:1;i:2;s
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeDoubleIntl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_DOUBLE);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_DOUBLE);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(3) {
   [0]=>
@@ -27,4 +27,4 @@ array(3) {
   [2]=>
   string(7) "SFD1.00"
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index 3476e108923d9991dd740caa778250e8298d040d..b736c23dab31bb45b53a2d14c37bb3dfe1483385 100644 (file)
@@ -12,10 +12,11 @@ $unit_test_args = unserialize('a:3:{i:0;O:15:"NumberFormatter":0:{}i:1;d:1.10000
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeDoubleIntl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_DOUBLE);
-
-echo "== didn't crash ==".PHP_EOL;
-
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_DOUBLE);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 ?>
 --EXPECT--
 array(3) {
@@ -27,4 +28,4 @@ array(3) {
   [2]=>
   string(7) "SFD1.10"
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index 7d892cf5b6eb8e481fcb00f20b939e06b9b387a4..717414fc6f16ffbcdb3cb902dc93c381fadac9cd 100644 (file)
@@ -31,11 +31,11 @@ $unit_test_args = unserialize('a:3:{i:0;O:15:"NumberFormatter":0:{}i:1;i:1;i:2;s
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeInt32Intl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT32);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT32);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(3) {
   [0]=>
@@ -46,4 +46,4 @@ array(3) {
   [2]=>
   string(1) "1"
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index 6a65a0a809241b73ec1e8e203903d3176c76aa99..4b84ec197928171fec15b642050feac9cef6f018 100644 (file)
@@ -15,11 +15,11 @@ $unit_test_args = unserialize('a:3:{i:0;O:15:"NumberFormatter":0:{}i:1;d:1.10000
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeInt32Intl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT32);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT32);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(3) {
   [0]=>
@@ -30,4 +30,4 @@ array(3) {
   [2]=>
   string(1) "1"
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index 5e657db419b9d62a2e3acda80bda99073d9bc0a7..efe35dd8b01b0425127203e4cf50f6da5380bbdf 100644 (file)
@@ -12,11 +12,11 @@ $unit_test_args = unserialize('a:4:{i:0;O:15:"NumberFormatter":0:{}i:1;d:2147483
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeInt32Intl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT32);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT32);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(4) {
   [0]=>
@@ -29,4 +29,4 @@ array(4) {
   [3]=>
   string(83) "->format() TYPE_INT32 formats inconsistently an integer if out of the 32 bit range."
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index 54043d92e921b40706f75c73dcf501a5a3cf280c..8f6ea7b0c059427afa1c4579a8a47f64337cb8ea 100644 (file)
@@ -12,11 +12,11 @@ $unit_test_args = unserialize('a:3:{i:0;O:15:"NumberFormatter":0:{}i:1;i:1;i:2;s
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeInt32Intl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT32);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT32);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(3) {
   [0]=>
@@ -27,4 +27,4 @@ array(3) {
   [2]=>
   string(7) "SFD1.00"
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index d5f78d7119bcfaeb7b6a94bbf34853225475aea0..b9d302a12f250386327a9fbee7614d9b4e044899 100644 (file)
@@ -12,11 +12,11 @@ $unit_test_args = unserialize('a:3:{i:0;O:15:"NumberFormatter":0:{}i:1;d:1.10000
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeInt32Intl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT32);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT32);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(3) {
   [0]=>
@@ -27,4 +27,4 @@ array(3) {
   [2]=>
   string(7) "SFD1.00"
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index fa708799d1310880662d3d5eb8adf1adfe419b2b..b00f3f7ce9480bcdfa925f01da76ab6bbf0d999c 100644 (file)
@@ -12,11 +12,11 @@ $unit_test_args = unserialize('a:4:{i:0;O:15:"NumberFormatter":0:{}i:1;d:2147483
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeInt32Intl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT32);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT32);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(4) {
   [0]=>
@@ -29,4 +29,4 @@ array(4) {
   [3]=>
   string(83) "->format() TYPE_INT32 formats inconsistently an integer if out of the 32 bit range."
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index 5bbe4266770a0fdef433b366cb4a3baff5c5e8b9..747074f09066508474b623bb98f3e105e0ee0473 100644 (file)
@@ -12,11 +12,11 @@ $unit_test_args = unserialize('a:4:{i:0;O:15:"NumberFormatter":0:{}i:1;d:-214748
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeInt32Intl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT32);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT32);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(4) {
   [0]=>
@@ -29,4 +29,4 @@ array(4) {
   [3]=>
   string(83) "->format() TYPE_INT32 formats inconsistently an integer if out of the 32 bit range."
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index 13d1cdaee7f379579f4e461a75b187b6d4a1afea..f659ac373d516230c9e69acf0579a8cdd29bac8a 100644 (file)
@@ -12,11 +12,11 @@ $unit_test_args = unserialize('a:3:{i:0;O:15:"NumberFormatter":0:{}i:1;d:1.10000
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeInt64Intl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT64);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT64);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(3) {
   [0]=>
@@ -27,4 +27,4 @@ array(3) {
   [2]=>
   string(1) "1"
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index a7c80b34c3cf50171bf04a7746b1131ed18c7d19..e40b74775c6ea23c6330b4d4b10c982d05c2a3c5 100644 (file)
@@ -12,11 +12,11 @@ $unit_test_args = unserialize('a:3:{i:0;O:15:"NumberFormatter":0:{}i:1;d:2147483
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeInt64Intl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT64);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT64);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(3) {
   [0]=>
@@ -27,4 +27,4 @@ array(3) {
   [2]=>
   string(13) "2,147,483,648"
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index f1a0801edfe9747c856d3e703179ce0406d6fa38..8785b83c0adaea2fa40a1dcd970bce5af7860aea 100644 (file)
@@ -12,11 +12,11 @@ $unit_test_args = unserialize('a:3:{i:0;O:15:"NumberFormatter":0:{}i:1;d:-214748
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeInt64Intl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT64);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT64);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(3) {
   [0]=>
@@ -27,4 +27,4 @@ array(3) {
   [2]=>
   string(14) "-2,147,483,649"
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index dad8735b89a3ce29d5d95f941669c8ab9430b4a0..476e66b61ea51fa90f2d09b78cfec4b436bf0a39 100644 (file)
@@ -12,11 +12,11 @@ $unit_test_args = unserialize('a:3:{i:0;O:15:"NumberFormatter":0:{}i:1;i:1;i:2;s
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeInt64Intl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT64);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT64);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(3) {
   [0]=>
@@ -27,4 +27,4 @@ array(3) {
   [2]=>
   string(7) "SFD1.00"
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index f038cbd0c3cadbabd8cfcb864e2fdd1979bb718a..5c24fe9617a0726f17a2f9534f298aa7a3b2b60b 100644 (file)
@@ -12,11 +12,11 @@ $unit_test_args = unserialize('a:3:{i:0;O:15:"NumberFormatter":0:{}i:1;d:1.10000
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeInt64Intl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT64);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT64);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(3) {
   [0]=>
@@ -27,4 +27,4 @@ array(3) {
   [2]=>
   string(7) "SFD1.00"
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index 9c8853cafc82afc50321ae846d5f586b16599ba7..27b5a79f24d0d601e8820ffa132c0ed0f5ee7ef9 100644 (file)
@@ -12,11 +12,11 @@ $unit_test_args = unserialize('a:3:{i:0;O:15:"NumberFormatter":0:{}i:1;d:2147483
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeInt64Intl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT64);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT64);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(3) {
   [0]=>
@@ -27,4 +27,4 @@ array(3) {
   [2]=>
   string(19) "SFD2,147,483,648.00"
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index 50524976abf1544f8af25c09b03805ed5bc886a4..d33395d6b3059b7d03ce2aa94480d311eb5484fc 100644 (file)
@@ -12,11 +12,11 @@ $unit_test_args = unserialize('a:3:{i:0;O:15:"NumberFormatter":0:{}i:1;d:-214748
 var_dump($unit_test_args);
 
 // execute the code from #testFormatTypeInt64Intl
-$unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT64);
-
-echo "== didn't crash ==".PHP_EOL;
-
-?>
+try {
+    $unit_test_args[0]->format($unit_test_args[1], \NumberFormatter::TYPE_INT64);
+} catch (Error $exception) {
+    echo $exception->getMessage() . "\n";
+}
 --EXPECT--
 array(3) {
   [0]=>
@@ -27,4 +27,4 @@ array(3) {
   [2]=>
   string(21) "(SFD2,147,483,649.00)"
 }
-== didn't crash ==
+Found unconstructed NumberFormatter
index 06f5424aa4c5d164cdaed74080658a6cf3ada1dc..332fb9c1d2b33dc3d40cdef9e3f39d0593cc024c 100644 (file)
@@ -31,7 +31,7 @@ class IntlTimeZone
     /** @return string|false */
     public function getDisplayName(bool $isDaylight = false, int $style = IntlTimeZone::DISPLAY_LONG, ?string $locale = null) {}
 
-    /** @return int|false */
+    /** @return int */
     public function getDSTSavings() {}
 
     /** @return string|false */
@@ -52,7 +52,7 @@ class IntlTimeZone
     /** @return bool */
     public function getOffset(float $date, bool $local, &$rawOffset, &$dstOffset) {}
 
-    /** @return int|false */
+    /** @return int */
     public function getRawOffset() {}
 
     /** @return string|false */
@@ -101,7 +101,7 @@ function intltz_get_canonical_id(string $zoneId, &$isSystemID = null): string|fa
 
 function intltz_get_display_name(IntlTimeZone $tz, bool $isDaylight = false, int $style = IntlTimeZone::DISPLAY_LONG, ?string $locale = null): string|false {}
 
-function intltz_get_dst_savings(IntlTimeZone $tz): int|false {}
+function intltz_get_dst_savings(IntlTimeZone $tz): int {}
 
 function intltz_get_equivalent_id(string $zoneId, int $index): string|false {}
 
@@ -115,7 +115,7 @@ function intltz_get_id(IntlTimeZone $tz): string|false {}
 
 function intltz_get_offset(IntlTimeZone $tz, float $date, bool $local, &$rawOffset, &$dstOffset): bool {}
 
-function intltz_get_raw_offset(IntlTimeZone $tz): int|false {}
+function intltz_get_raw_offset(IntlTimeZone $tz): int {}
 
 function intltz_get_region(string $zoneId): string|false {}
 
index 8cf82ef56a62e3cfa79f80678efd88800fe0cca5..94c79627813fd74dccbe4442a33651986f351d5b 100644 (file)
@@ -122,7 +122,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intltz_get_display_name, 0, 1, M
        ZEND_ARG_TYPE_INFO(0, locale, IS_STRING, 1)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intltz_get_dst_savings, 0, 1, MAY_BE_LONG|MAY_BE_FALSE)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_intltz_get_dst_savings, 0, 1, IS_LONG, 0)
        ZEND_ARG_OBJ_INFO(0, tz, IntlTimeZone, 0)
 ZEND_END_ARG_INFO()
 
@@ -131,7 +131,9 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intltz_get_equivalent_id, 0, 2,
        ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0)
 ZEND_END_ARG_INFO()
 
-#define arginfo_intltz_get_error_code arginfo_intltz_get_dst_savings
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intltz_get_error_code, 0, 1, MAY_BE_LONG|MAY_BE_FALSE)
+       ZEND_ARG_OBJ_INFO(0, tz, IntlTimeZone, 0)
+ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_intltz_get_error_message, 0, 1, MAY_BE_STRING|MAY_BE_FALSE)
        ZEND_ARG_OBJ_INFO(0, tz, IntlTimeZone, 0)
index f0fd5cdee812e0100be49ea4057ba886f7f87d66..8fe4524415ebd98d691de31a40e25cea0fb1a78b 100644 (file)
@@ -60,8 +60,8 @@ static inline TimeZone_object *php_intl_timezone_fetch_object(zend_object *obj)
 #define TIMEZONE_METHOD_FETCH_OBJECT\
        TIMEZONE_METHOD_FETCH_OBJECT_NO_CHECK; \
        if (to->utimezone == NULL) { \
-               intl_errors_set(&to->err, U_ILLEGAL_ARGUMENT_ERROR, "Found unconstructed IntlTimeZone", 0); \
-               RETURN_FALSE; \
+               zend_throw_error(NULL, "Found unconstructed IntlTimeZone"); \
+               RETURN_THROWS(); \
        }
 
 zval *timezone_convert_to_datetimezone(const TimeZone *timeZone, intl_error *outside_error, const char *func, zval *ret);
index 98f599c81b50a096c95e2e6e414656be7d1f2cc4..907ad79c44f70182240d2abfd3e15ae303c54d0f 100644 (file)
@@ -52,8 +52,8 @@ static inline Transliterator_object *php_intl_transliterator_fetch_object(zend_o
        TRANSLITERATOR_METHOD_FETCH_OBJECT_NO_CHECK; \
        if( to->utrans == NULL ) \
        { \
-               intl_errors_set( &to->err, U_ILLEGAL_ARGUMENT_ERROR, "Found unconstructed transliterator", 0 ); \
-               RETURN_FALSE; \
+               zend_throw_error(NULL, "Found unconstructed transliterator"); \
+               RETURN_THROWS(); \
        }
 
 int transliterator_object_construct( zval *object,