@@ -115,14 +115,8 @@ PHPAPI uri_handler_t *php_uri_get_handler(const zend_string *uri_handler_name)
115115 return uri_handler_by_name (ZSTR_VAL (uri_handler_name ), ZSTR_LEN (uri_handler_name ));
116116}
117117
118- PHPAPI uri_internal_t * php_uri_parse (const uri_handler_t * uri_handler , zend_string * uri_str , bool silent )
118+ ZEND_ATTRIBUTE_NONNULL PHPAPI uri_internal_t * php_uri_parse (const uri_handler_t * uri_handler , zend_string * uri_str , bool silent )
119119{
120- ZEND_ASSERT (uri_handler != NULL );
121-
122- if (ZSTR_LEN (uri_str ) == 0 ) {
123- return NULL ;
124- }
125-
126120 uri_internal_t * internal_uri = emalloc (sizeof (* internal_uri ));
127121 internal_uri -> handler = uri_handler ;
128122 internal_uri -> uri = uri_handler -> parse_uri (uri_str , NULL , NULL , silent );
@@ -135,7 +129,7 @@ PHPAPI uri_internal_t *php_uri_parse(const uri_handler_t *uri_handler, zend_stri
135129 return internal_uri ;
136130}
137131
138- static zend_result php_uri_get_property (const uri_internal_t * internal_uri , uri_property_name_t property_name , uri_component_read_mode_t read_mode , zval * zv )
132+ ZEND_ATTRIBUTE_NONNULL static zend_result php_uri_get_property (const uri_internal_t * internal_uri , uri_property_name_t property_name , uri_component_read_mode_t read_mode , zval * zv )
139133{
140134 const uri_property_handler_t * property_handler = uri_property_handler_from_internal_uri (internal_uri , property_name );
141135 if (property_handler == NULL ) {
@@ -145,56 +139,57 @@ static zend_result php_uri_get_property(const uri_internal_t *internal_uri, uri_
145139 return property_handler -> read_func (internal_uri , read_mode , zv );
146140}
147141
148- PHPAPI zend_result php_uri_get_scheme (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
142+ ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_scheme (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
149143{
150144 return php_uri_get_property (internal_uri , URI_PROPERTY_NAME_SCHEME , read_mode , zv );
151145}
152146
153- PHPAPI zend_result php_uri_get_username (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
147+ ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_username (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
154148{
155149 return php_uri_get_property (internal_uri , URI_PROPERTY_NAME_USERNAME , read_mode , zv );
156150}
157151
158- PHPAPI zend_result php_uri_get_password (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
152+ ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_password (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
159153{
160154 return php_uri_get_property (internal_uri , URI_PROPERTY_NAME_PASSWORD , read_mode , zv );
161155}
162156
163- PHPAPI zend_result php_uri_get_host (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
157+ ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_host (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
164158{
165159 return php_uri_get_property (internal_uri , URI_PROPERTY_NAME_HOST , read_mode , zv );
166160}
167161
168- PHPAPI zend_result php_uri_get_port (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
162+ ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_port (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
169163{
170164 return php_uri_get_property (internal_uri , URI_PROPERTY_NAME_PORT , read_mode , zv );
171165}
172166
173- PHPAPI zend_result php_uri_get_path (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
167+ ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_path (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
174168{
175169 return php_uri_get_property (internal_uri , URI_PROPERTY_NAME_PATH , read_mode , zv );
176170}
177171
178- PHPAPI zend_result php_uri_get_query (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
172+ ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_query (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
179173{
180174 return php_uri_get_property (internal_uri , URI_PROPERTY_NAME_QUERY , read_mode , zv );
181175}
182176
183- PHPAPI zend_result php_uri_get_fragment (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
177+ ZEND_ATTRIBUTE_NONNULL PHPAPI zend_result php_uri_get_fragment (const uri_internal_t * internal_uri , uri_component_read_mode_t read_mode , zval * zv )
184178{
185179 return php_uri_get_property (internal_uri , URI_PROPERTY_NAME_FRAGMENT , read_mode , zv );
186180}
187181
188- PHPAPI void php_uri_free (uri_internal_t * internal_uri )
182+ ZEND_ATTRIBUTE_NONNULL PHPAPI void php_uri_free (uri_internal_t * internal_uri )
189183{
190184 internal_uri -> handler -> free_uri (internal_uri -> uri );
191185 internal_uri -> uri = NULL ;
192186 internal_uri -> handler = NULL ;
193187 efree (internal_uri );
194188}
195189
196- PHPAPI php_uri * php_uri_parse_to_struct (const uri_handler_t * uri_handler , zend_string * uri_str , uri_component_read_mode_t read_mode , bool silent )
197- {
190+ ZEND_ATTRIBUTE_NONNULL PHPAPI php_uri * php_uri_parse_to_struct (
191+ const uri_handler_t * uri_handler , zend_string * uri_str , uri_component_read_mode_t read_mode , bool silent
192+ ) {
198193 uri_internal_t * uri_internal = php_uri_parse (uri_handler , uri_str , silent );
199194 if (uri_internal == NULL ) {
200195 return NULL ;
@@ -207,97 +202,80 @@ PHPAPI php_uri *php_uri_parse_to_struct(const uri_handler_t *uri_handler, zend_s
207202
208203 result = php_uri_get_scheme (uri_internal , read_mode , & tmp );
209204 if (result == FAILURE ) {
210- php_uri_free (uri_internal );
211- php_uri_struct_free (uri );
212- return NULL ;
205+ goto error ;
213206 }
214- if (Z_TYPE (tmp ) == IS_STRING && Z_STRLEN (tmp ) > 0 ) {
215- uri -> scheme = zend_string_copy (Z_STR (tmp ));
216- zval_ptr_dtor (& tmp );
207+ if (Z_TYPE (tmp ) == IS_STRING ) {
208+ uri -> scheme = Z_STR (tmp );
217209 }
218210
219211 result = php_uri_get_username (uri_internal , read_mode , & tmp );
220212 if (result == FAILURE ) {
221- php_uri_free (uri_internal );
222- php_uri_struct_free (uri );
223- return NULL ;
213+ goto error ;
224214 }
225- if (Z_TYPE (tmp ) == IS_STRING && Z_STRLEN (tmp ) > 0 ) {
226- uri -> user = zend_string_copy (Z_STR (tmp ));
227- zval_ptr_dtor (& tmp );
215+ if (Z_TYPE (tmp ) == IS_STRING ) {
216+ uri -> user = Z_STR (tmp );
228217 }
229218
230219 result = php_uri_get_password (uri_internal , read_mode , & tmp );
231220 if (result == FAILURE ) {
232- php_uri_free (uri_internal );
233- php_uri_struct_free (uri );
234- return NULL ;
221+ goto error ;
235222 }
236- if (Z_TYPE (tmp ) == IS_STRING && Z_STRLEN (tmp ) > 0 ) {
237- uri -> password = zend_string_copy (Z_STR (tmp ));
238- zval_ptr_dtor (& tmp );
223+ if (Z_TYPE (tmp ) == IS_STRING ) {
224+ uri -> password = Z_STR (tmp );
239225 }
240226
241227 result = php_uri_get_host (uri_internal , read_mode , & tmp );
242228 if (result == FAILURE ) {
243- php_uri_free (uri_internal );
244- php_uri_struct_free (uri );
245- return NULL ;
229+ goto error ;
246230 }
247- if (Z_TYPE (tmp ) == IS_STRING && Z_STRLEN (tmp ) > 0 ) {
248- uri -> host = zend_string_copy (Z_STR (tmp ));
249- zval_ptr_dtor (& tmp );
231+ if (Z_TYPE (tmp ) == IS_STRING ) {
232+ uri -> host = Z_STR (tmp );
250233 }
251234
252235 result = php_uri_get_port (uri_internal , read_mode , & tmp );
253236 if (result == FAILURE ) {
254- php_uri_free (uri_internal );
255- php_uri_struct_free (uri );
256- return NULL ;
237+ goto error ;
257238 }
258- if (Z_TYPE (tmp ) == IS_LONG && Z_LVAL ( tmp ) >= 0 ) {
239+ if (Z_TYPE (tmp ) == IS_LONG ) {
259240 uri -> port = Z_LVAL (tmp );
260241 }
261242
262243 result = php_uri_get_path (uri_internal , read_mode , & tmp );
263244 if (result == FAILURE ) {
264- php_uri_free (uri_internal );
265- php_uri_struct_free (uri );
266- return NULL ;
245+ goto error ;
267246 }
268- if (Z_TYPE (tmp ) == IS_STRING && Z_STRLEN (tmp ) > 0 ) {
269- uri -> path = zend_string_copy (Z_STR (tmp ));
270- zval_ptr_dtor (& tmp );
247+ if (Z_TYPE (tmp ) == IS_STRING ) {
248+ uri -> path = Z_STR (tmp );
271249 }
272250
273251 result = php_uri_get_query (uri_internal , read_mode , & tmp );
274252 if (result == FAILURE ) {
275- php_uri_free (uri_internal );
276- php_uri_struct_free (uri );
277- return NULL ;
253+ goto error ;
278254 }
279- if (Z_TYPE (tmp ) == IS_STRING && Z_STRLEN (tmp ) > 0 ) {
280- uri -> query = zend_string_copy (Z_STR (tmp ));
281- zval_ptr_dtor (& tmp );
255+ if (Z_TYPE (tmp ) == IS_STRING ) {
256+ uri -> query = Z_STR (tmp );
282257 }
283258
284259 result = php_uri_get_fragment (uri_internal , read_mode , & tmp );
285260 if (result == FAILURE ) {
286- php_uri_free (uri_internal );
287- php_uri_struct_free (uri );
288- return NULL ;
261+ goto error ;
289262 }
290- if (Z_TYPE (tmp ) == IS_STRING && Z_STRLEN (tmp ) > 0 ) {
291- uri -> fragment = zend_string_copy (Z_STR (tmp ));
292- zval_ptr_dtor (& tmp );
263+ if (Z_TYPE (tmp ) == IS_STRING ) {
264+ uri -> fragment = Z_STR (tmp );
293265 }
294266
295267 php_uri_free (uri_internal );
296268
297269 return uri ;
270+
271+ error :
272+ php_uri_free (uri_internal );
273+ php_uri_struct_free (uri );
274+
275+ return NULL ;
298276}
299277
300- PHPAPI void php_uri_struct_free (php_uri * uri )
278+ ZEND_ATTRIBUTE_NONNULL PHPAPI void php_uri_struct_free (php_uri * uri )
301279{
302280 if (uri -> scheme ) {
303281 zend_string_release (uri -> scheme );
@@ -354,7 +332,7 @@ static zend_result pass_errors_by_ref_and_free(zval *errors_zv, zval *errors)
354332 return SUCCESS ;
355333}
356334
357- PHPAPI void php_uri_instantiate_uri (
335+ ZEND_ATTRIBUTE_NONNULL_ARGS ( 1 , 2 ) PHPAPI void php_uri_instantiate_uri (
358336 INTERNAL_FUNCTION_PARAMETERS , const uri_handler_t * handler , const zend_string * uri_str , const zend_object * base_url_object ,
359337 bool should_throw , bool should_update_this_object , zval * errors_zv
360338) {
@@ -1024,7 +1002,7 @@ zend_object *uri_clone_obj_handler(zend_object *object)
10241002 return & new_uri_object -> std ;
10251003}
10261004
1027- PHPAPI void php_uri_implementation_set_object_handlers (zend_class_entry * ce , zend_object_handlers * object_handlers )
1005+ ZEND_ATTRIBUTE_NONNULL PHPAPI void php_uri_implementation_set_object_handlers (zend_class_entry * ce , zend_object_handlers * object_handlers )
10281006{
10291007 ce -> create_object = uri_create_object_handler ;
10301008 ce -> default_object_handlers = object_handlers ;
0 commit comments