diff options
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | ext/com_dotnet/com_extension.c | 6 | ||||
-rw-r--r-- | ext/com_dotnet/tests/bug79242.phpt | 22 |
3 files changed, 29 insertions, 1 deletions
@@ -5,6 +5,8 @@ PHP NEWS - COM: . Fixed bug #66322 (COMPersistHelper::SaveToFile can save to wrong location). (cmb) + . Fixed bug #79242 (COM error constants don't match com_exception codes on + x86). (cmb) - PCRE: . Fixed bug #79188 (Memory corruption in preg_replace/preg_replace_callback diff --git a/ext/com_dotnet/com_extension.c b/ext/com_dotnet/com_extension.c index a9fd0e7fde..025f6803df 100644 --- a/ext/com_dotnet/com_extension.c +++ b/ext/com_dotnet/com_extension.c @@ -336,11 +336,15 @@ PHP_MINIT_FUNCTION(com_dotnet) #define COM_CONST(x) REGISTER_LONG_CONSTANT(#x, x, CONST_CS|CONST_PERSISTENT) -#define COM_ERR_CONST(x) { \ +#if SIZEOF_ZEND_LONG == 8 +# define COM_ERR_CONST(x) { \ zend_long __tmp; \ ULongToIntPtr(x, &__tmp); \ REGISTER_LONG_CONSTANT(#x, __tmp, CONST_CS|CONST_PERSISTENT); \ } +#else +# define COM_ERR_CONST COM_CONST +#endif COM_CONST(CLSCTX_INPROC_SERVER); COM_CONST(CLSCTX_INPROC_HANDLER); diff --git a/ext/com_dotnet/tests/bug79242.phpt b/ext/com_dotnet/tests/bug79242.phpt new file mode 100644 index 0000000000..46c5d8af3b --- /dev/null +++ b/ext/com_dotnet/tests/bug79242.phpt @@ -0,0 +1,22 @@ +--TEST-- +Bug #79242 (COM error constants don't match com_exception codes) +--SKIPIF-- +<?php +if (!extension_loaded('com_dotnet')) die('skip com_dotnet extension not available'); +if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platforms only"); +?> +--FILE-- +<?php +var_dump( + DISP_E_DIVBYZERO, + DISP_E_OVERFLOW, + DISP_E_BADINDEX, + MK_E_UNAVAILABLE +); +?> +--EXPECT-- +int(-2147352558) +int(-2147352566) +int(-2147352565) +int(-2147221021) + |