@@ -52,23 +52,30 @@ PHP_FUNCTION(com_create_instance)
52
52
RPC_C_AUTHN_LEVEL_DEFAULT , RPC_C_IMP_LEVEL_IMPERSONATE ,
53
53
& authid , EOAC_NONE
54
54
};
55
+ zend_long cp = CP_ACP ;
55
56
56
57
php_com_initialize ();
57
58
obj = CDNO_FETCH (object );
58
59
59
60
if (FAILURE == zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET ,
60
61
ZEND_NUM_ARGS (), "s|s!ls" ,
61
62
& module_name , & module_name_len , & server_name , & server_name_len ,
62
- & obj -> code_page , & typelib_name , & typelib_name_len ) &&
63
+ & cp , & typelib_name , & typelib_name_len ) &&
63
64
FAILURE == zend_parse_parameters_ex (ZEND_PARSE_PARAMS_QUIET ,
64
65
ZEND_NUM_ARGS (), "sa|ls" ,
65
- & module_name , & module_name_len , & server_params , & obj -> code_page ,
66
+ & module_name , & module_name_len , & server_params , & cp ,
66
67
& typelib_name , & typelib_name_len )) {
67
68
68
69
php_com_throw_exception (E_INVALIDARG , "Could not create COM object - invalid arguments!" );
69
70
return ;
70
71
}
71
72
73
+ if (Z_L (0 ) > cp || ZEND_LONG_INT_OVFL (cp )) {
74
+ php_com_throw_exception (E_INVALIDARG , "Could not create COM object - invalid codepage!" );
75
+ return ;
76
+ }
77
+ obj -> code_page = (int )cp ;
78
+
72
79
if (server_name ) {
73
80
ctx = CLSCTX_REMOTE_SERVER ;
74
81
} else if (server_params ) {
0 commit comments