Skip to content

Commit 8629256

Browse files
authored
Deduplicate error-handling code in finfo_open (#19149)
1 parent 56308f6 commit 8629256

File tree

1 file changed

+14
-28
lines changed

1 file changed

+14
-28
lines changed

ext/fileinfo/fileinfo.c

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -153,22 +153,10 @@ PHP_FUNCTION(finfo_open)
153153
} else if (file && *file) { /* user specified file, perform open_basedir checks */
154154

155155
if (php_check_open_basedir(file)) {
156-
if (object) {
157-
zend_restore_error_handling(&zeh);
158-
if (!EG(exception)) {
159-
zend_throw_exception(NULL, "Constructor failed", 0);
160-
}
161-
}
162-
RETURN_FALSE;
156+
goto err;
163157
}
164158
if (!expand_filepath_with_mode(file, resolved_path, NULL, 0, CWD_EXPAND)) {
165-
if (object) {
166-
zend_restore_error_handling(&zeh);
167-
if (!EG(exception)) {
168-
zend_throw_exception(NULL, "Constructor failed", 0);
169-
}
170-
}
171-
RETURN_FALSE;
159+
goto err;
172160
}
173161
file = resolved_path;
174162
}
@@ -177,37 +165,35 @@ PHP_FUNCTION(finfo_open)
177165

178166
if (magic == NULL) {
179167
php_error_docref(NULL, E_WARNING, "Invalid mode '" ZEND_LONG_FMT "'.", options);
180-
if (object) {
181-
zend_restore_error_handling(&zeh);
182-
if (!EG(exception)) {
183-
zend_throw_exception(NULL, "Constructor failed", 0);
184-
}
185-
}
186-
RETURN_FALSE;
168+
goto err;
187169
}
188170

189171
if (magic_load(magic, file) == -1) {
190172
php_error_docref(NULL, E_WARNING, "Failed to load magic database at \"%s\"", file);
191173
magic_close(magic);
192-
if (object) {
193-
zend_restore_error_handling(&zeh);
194-
if (!EG(exception)) {
195-
zend_throw_exception(NULL, "Constructor failed", 0);
196-
}
197-
}
198-
RETURN_FALSE;
174+
goto err;
199175
}
200176

201177
if (object) {
202178
zend_restore_error_handling(&zeh);
203179
finfo_object *obj = Z_FINFO_P(object);
204180
obj->magic = magic;
181+
return;
205182
} else {
206183
zend_object *zobj = finfo_objects_new(finfo_class_entry);
207184
finfo_object *obj = php_finfo_fetch_object(zobj);
208185
obj->magic = magic;
209186
RETURN_OBJ(zobj);
210187
}
188+
189+
err:
190+
if (object) {
191+
zend_restore_error_handling(&zeh);
192+
if (!EG(exception)) {
193+
zend_throw_exception(NULL, "Constructor failed", 0);
194+
}
195+
}
196+
RETURN_FALSE;
211197
}
212198
/* }}} */
213199

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy