@@ -46,9 +46,20 @@ PHONGO_API zend_class_entry *php_phongo_regex_ce;
4646
4747zend_object_handlers php_phongo_handler_regex ;
4848
49- /* Initialize the object and return whether it was successful. */
50- static bool php_phongo_regex_init (php_phongo_regex_t * intern , const char * pattern , phongo_zpp_char_len pattern_len , const char * flags , phongo_zpp_char_len flags_len )
49+ /* Initialize the object and return whether it was successful. An exception will
50+ * be thrown on error. */
51+ static bool php_phongo_regex_init (php_phongo_regex_t * intern , const char * pattern , phongo_zpp_char_len pattern_len , const char * flags , phongo_zpp_char_len flags_len TSRMLS_DC )
5152{
53+ if (strlen (pattern ) != pattern_len ) {
54+ phongo_throw_exception (PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC , "Pattern cannot contain null bytes" );
55+ return false;
56+ }
57+
58+ if (strlen (flags ) != flags_len ) {
59+ phongo_throw_exception (PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC , "Flags cannot contain null bytes" );
60+ return false;
61+ }
62+
5263 intern -> pattern = estrndup (pattern , pattern_len );
5364 intern -> pattern_len = pattern_len ;
5465 intern -> flags = estrndup (flags , flags_len );
@@ -66,14 +77,14 @@ static bool php_phongo_regex_init_from_hash(php_phongo_regex_t *intern, HashTabl
6677
6778 if ((pattern = zend_hash_str_find (props , "pattern" , sizeof ("pattern" )- 1 )) && Z_TYPE_P (pattern ) == IS_STRING &&
6879 (flags = zend_hash_str_find (props , "flags" , sizeof ("flags" )- 1 )) && Z_TYPE_P (flags ) == IS_STRING ) {
69- return php_phongo_regex_init (intern , Z_STRVAL_P (pattern ), Z_STRLEN_P (pattern ), Z_STRVAL_P (flags ), Z_STRLEN_P (flags ));
80+ return php_phongo_regex_init (intern , Z_STRVAL_P (pattern ), Z_STRLEN_P (pattern ), Z_STRVAL_P (flags ), Z_STRLEN_P (flags ) TSRMLS_CC );
7081 }
7182#else
7283 zval * * pattern , * * flags ;
7384
7485 if (zend_hash_find (props , "pattern" , sizeof ("pattern" ), (void * * ) & pattern ) == SUCCESS && Z_TYPE_PP (pattern ) == IS_STRING &&
7586 zend_hash_find (props , "flags" , sizeof ("flags" ), (void * * ) & flags ) == SUCCESS && Z_TYPE_PP (flags ) == IS_STRING ) {
76- return php_phongo_regex_init (intern , Z_STRVAL_PP (pattern ), Z_STRLEN_PP (pattern ), Z_STRVAL_PP (flags ), Z_STRLEN_PP (flags ));
87+ return php_phongo_regex_init (intern , Z_STRVAL_PP (pattern ), Z_STRLEN_PP (pattern ), Z_STRVAL_PP (flags ), Z_STRLEN_PP (flags ) TSRMLS_CC );
7788 }
7889#endif
7990
@@ -102,7 +113,7 @@ PHP_METHOD(Regex, __construct)
102113 }
103114 zend_restore_error_handling (& error_handling TSRMLS_CC );
104115
105- php_phongo_regex_init (intern , pattern , pattern_len , flags , flags_len );
116+ php_phongo_regex_init (intern , pattern , pattern_len , flags , flags_len TSRMLS_CC );
106117}
107118/* }}} */
108119/* {{{ proto void Regex::getPattern()
0 commit comments