/src/php-src/main/php_streams.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | +----------------------------------------------------------------------+ |
3 | | | Copyright (c) The PHP Group | |
4 | | +----------------------------------------------------------------------+ |
5 | | | This source file is subject to version 3.01 of the PHP license, | |
6 | | | that is bundled with this package in the file LICENSE, and is | |
7 | | | available through the world-wide-web at the following url: | |
8 | | | https://www.php.net/license/3_01.txt | |
9 | | | If you did not receive a copy of the PHP license and are unable to | |
10 | | | obtain it through the world-wide-web, please send a note to | |
11 | | | license@php.net so we can mail you a copy immediately. | |
12 | | +----------------------------------------------------------------------+ |
13 | | | Author: Wez Furlong (wez@thebrainroom.com) | |
14 | | +----------------------------------------------------------------------+ |
15 | | */ |
16 | | |
17 | | #ifndef PHP_STREAMS_H |
18 | | #define PHP_STREAMS_H |
19 | | |
20 | | #ifdef HAVE_SYS_TIME_H |
21 | | #include <sys/time.h> |
22 | | #endif |
23 | | #include <sys/types.h> |
24 | | #include <sys/stat.h> |
25 | | #include "zend.h" |
26 | | #include "zend_stream.h" |
27 | | |
28 | | BEGIN_EXTERN_C() |
29 | | PHPAPI int php_file_le_stream(void); |
30 | | PHPAPI int php_file_le_pstream(void); |
31 | | PHPAPI int php_file_le_stream_filter(void); |
32 | | END_EXTERN_C() |
33 | | |
34 | | /* {{{ Streams memory debugging stuff */ |
35 | | |
36 | | #if ZEND_DEBUG |
37 | | /* these have more of a dependency on the definitions of the zend macros than |
38 | | * I would prefer, but doing it this way saves loads of idefs :-/ */ |
39 | | # define STREAMS_D int __php_stream_call_depth ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC |
40 | 8.52k | # define STREAMS_C 0 ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC |
41 | 8.96k | # define STREAMS_REL_C __php_stream_call_depth + 1 ZEND_FILE_LINE_CC, \ |
42 | 8.96k | __php_stream_call_depth ? __zend_orig_filename : __zend_filename, \ |
43 | 8.96k | __php_stream_call_depth ? __zend_orig_lineno : __zend_lineno |
44 | | |
45 | | # define STREAMS_DC , STREAMS_D |
46 | 8.52k | # define STREAMS_CC , STREAMS_C |
47 | 8.96k | # define STREAMS_REL_CC , STREAMS_REL_C |
48 | | |
49 | | #else |
50 | | # define STREAMS_D |
51 | | # define STREAMS_C |
52 | | # define STREAMS_REL_C |
53 | | # define STREAMS_DC |
54 | | # define STREAMS_CC |
55 | | # define STREAMS_REL_CC |
56 | | #endif |
57 | | |
58 | | /* these functions relay the file/line number information. They are depth aware, so they will pass |
59 | | * the ultimate ancestor, which is useful, because there can be several layers of calls */ |
60 | 6.25k | #define php_stream_alloc_rel(ops, thisptr, persistent, mode) _php_stream_alloc((ops), (thisptr), (persistent), (mode) STREAMS_REL_CC) |
61 | | |
62 | | #define php_stream_copy_to_mem_rel(src, maxlen, persistent) _php_stream_copy_to_mem((src), (buf), (maxlen), (persistent) STREAMS_REL_CC) |
63 | | |
64 | 302 | #define php_stream_fopen_rel(filename, mode, opened, options) _php_stream_fopen((filename), (mode), (opened), (options) STREAMS_REL_CC) |
65 | | |
66 | | #define php_stream_fopen_with_path_rel(filename, mode, path, opened, options) _php_stream_fopen_with_path((filename), (mode), (path), (opened), (options) STREAMS_REL_CC) |
67 | | |
68 | 5 | #define php_stream_fopen_from_fd_rel(fd, mode, persistent_id, zero_position) _php_stream_fopen_from_fd((fd), (mode), (persistent_id), (zero_position) STREAMS_REL_CC) |
69 | | #define php_stream_fopen_from_file_rel(file, mode) _php_stream_fopen_from_file((file), (mode) STREAMS_REL_CC) |
70 | | |
71 | | #define php_stream_fopen_from_pipe_rel(file, mode) _php_stream_fopen_from_pipe((file), (mode) STREAMS_REL_CC) |
72 | | |
73 | | #define php_stream_fopen_tmpfile_rel() _php_stream_fopen_tmpfile(0 STREAMS_REL_CC) |
74 | | |
75 | | #define php_stream_fopen_temporary_file_rel(dir, pfx, opened_path) _php_stream_fopen_temporary_file((dir), (pfx), (opened_path) STREAMS_REL_CC) |
76 | | |
77 | 0 | #define php_stream_open_wrapper_rel(path, mode, options, opened) _php_stream_open_wrapper_ex((path), (mode), (options), (opened), NULL STREAMS_REL_CC) |
78 | | #define php_stream_open_wrapper_ex_rel(path, mode, options, opened, context) _php_stream_open_wrapper_ex((path), (mode), (options), (opened), (context) STREAMS_REL_CC) |
79 | | |
80 | 0 | #define php_stream_make_seekable_rel(origstream, newstream, flags) _php_stream_make_seekable((origstream), (newstream), (flags) STREAMS_REL_CC) |
81 | | |
82 | | /* }}} */ |
83 | | |
84 | | /* The contents of the php_stream_ops and php_stream should only be accessed |
85 | | * using the functions/macros in this header. |
86 | | * If you need to get at something that doesn't have an API, |
87 | | * drop me a line <wez@thebrainroom.com> and we can sort out a way to do |
88 | | * it properly. |
89 | | * |
90 | | * The only exceptions to this rule are that stream implementations can use |
91 | | * the php_stream->abstract pointer to hold their context, and streams |
92 | | * opened via stream_open_wrappers can use the zval ptr in |
93 | | * php_stream->wrapperdata to hold metadata for php scripts to |
94 | | * retrieve using file_get_wrapper_data(). */ |
95 | | |
96 | | typedef struct _php_stream php_stream; |
97 | | typedef struct _php_stream_wrapper php_stream_wrapper; |
98 | | typedef struct _php_stream_context php_stream_context; |
99 | | typedef struct _php_stream_filter php_stream_filter; |
100 | | |
101 | | #include "streams/php_stream_context.h" |
102 | | #include "streams/php_stream_filter_api.h" |
103 | | |
104 | | typedef struct _php_stream_statbuf { |
105 | | zend_stat_t sb; /* regular info */ |
106 | | /* extended info to go here some day: content-type etc. etc. */ |
107 | | } php_stream_statbuf; |
108 | | |
109 | | typedef struct _php_stream_dirent { |
110 | | char d_name[MAXPATHLEN]; |
111 | | unsigned char d_type; |
112 | | } php_stream_dirent; |
113 | | |
114 | | /* operations on streams that are file-handles */ |
115 | | typedef struct _php_stream_ops { |
116 | | /* stdio like functions - these are mandatory! */ |
117 | | ssize_t (*write)(php_stream *stream, const char *buf, size_t count); |
118 | | ssize_t (*read)(php_stream *stream, char *buf, size_t count); |
119 | | int (*close)(php_stream *stream, int close_handle); |
120 | | int (*flush)(php_stream *stream); |
121 | | |
122 | | const char *label; /* label for this ops structure */ |
123 | | |
124 | | /* these are optional */ |
125 | | int (*seek)(php_stream *stream, zend_off_t offset, int whence, zend_off_t *newoffset); |
126 | | int (*cast)(php_stream *stream, int castas, void **ret); |
127 | | int (*stat)(php_stream *stream, php_stream_statbuf *ssb); |
128 | | int (*set_option)(php_stream *stream, int option, int value, void *ptrparam); |
129 | | } php_stream_ops; |
130 | | |
131 | | typedef struct _php_stream_wrapper_ops { |
132 | | /* open/create a wrapped stream */ |
133 | | php_stream *(*stream_opener)(php_stream_wrapper *wrapper, const char *filename, const char *mode, |
134 | | int options, zend_string **opened_path, php_stream_context *context STREAMS_DC); |
135 | | /* close/destroy a wrapped stream */ |
136 | | int (*stream_closer)(php_stream_wrapper *wrapper, php_stream *stream); |
137 | | /* stat a wrapped stream */ |
138 | | int (*stream_stat)(php_stream_wrapper *wrapper, php_stream *stream, php_stream_statbuf *ssb); |
139 | | /* stat a URL */ |
140 | | int (*url_stat)(php_stream_wrapper *wrapper, const char *url, int flags, php_stream_statbuf *ssb, php_stream_context *context); |
141 | | /* open a "directory" stream */ |
142 | | php_stream *(*dir_opener)(php_stream_wrapper *wrapper, const char *filename, const char *mode, |
143 | | int options, zend_string **opened_path, php_stream_context *context STREAMS_DC); |
144 | | |
145 | | const char *label; |
146 | | |
147 | | /* delete a file */ |
148 | | int (*unlink)(php_stream_wrapper *wrapper, const char *url, int options, php_stream_context *context); |
149 | | |
150 | | /* rename a file */ |
151 | | int (*rename)(php_stream_wrapper *wrapper, const char *url_from, const char *url_to, int options, php_stream_context *context); |
152 | | |
153 | | /* Create/Remove directory */ |
154 | | int (*stream_mkdir)(php_stream_wrapper *wrapper, const char *url, int mode, int options, php_stream_context *context); |
155 | | int (*stream_rmdir)(php_stream_wrapper *wrapper, const char *url, int options, php_stream_context *context); |
156 | | /* Metadata handling */ |
157 | | int (*stream_metadata)(php_stream_wrapper *wrapper, const char *url, int options, void *value, php_stream_context *context); |
158 | | } php_stream_wrapper_ops; |
159 | | |
160 | | struct _php_stream_wrapper { |
161 | | const php_stream_wrapper_ops *wops; /* operations the wrapper can perform */ |
162 | | void *abstract; /* context for the wrapper */ |
163 | | int is_url; /* so that PG(allow_url_fopen) can be respected */ |
164 | | }; |
165 | | |
166 | 580k | #define PHP_STREAM_FLAG_NO_SEEK 0x1 |
167 | 2.75M | #define PHP_STREAM_FLAG_NO_BUFFER 0x2 |
168 | | |
169 | | #define PHP_STREAM_FLAG_EOL_UNIX 0x0 /* also includes DOS */ |
170 | 0 | #define PHP_STREAM_FLAG_DETECT_EOL 0x4 |
171 | 0 | #define PHP_STREAM_FLAG_EOL_MAC 0x8 |
172 | | |
173 | | /* set this when the stream might represent "interactive" data. |
174 | | * When set, the read buffer will avoid certain operations that |
175 | | * might otherwise cause the read to block for much longer than |
176 | | * is strictly required. */ |
177 | 0 | #define PHP_STREAM_FLAG_AVOID_BLOCKING 0x10 |
178 | | |
179 | 6.33k | #define PHP_STREAM_FLAG_NO_CLOSE 0x20 |
180 | | |
181 | 56 | #define PHP_STREAM_FLAG_IS_DIR 0x40 |
182 | | |
183 | 109 | #define PHP_STREAM_FLAG_NO_FCLOSE 0x80 |
184 | | |
185 | | /* Suppress generation of PHP warnings on stream read/write errors. |
186 | | * Currently, for internal use only. */ |
187 | 0 | #define PHP_STREAM_FLAG_SUPPRESS_ERRORS 0x100 |
188 | | |
189 | | /* Do not close handle except it is explicitly closed by user (e.g. fclose) */ |
190 | 6.33k | #define PHP_STREAM_FLAG_NO_RSCR_DTOR_CLOSE 0x200 |
191 | | |
192 | 0 | #define PHP_STREAM_FLAG_NO_IO 0x400 |
193 | | |
194 | 24.7k | #define PHP_STREAM_FLAG_WAS_WRITTEN 0x80000000 |
195 | | |
196 | | struct _php_stream { |
197 | | const php_stream_ops *ops; |
198 | | void *abstract; /* convenience pointer for abstraction */ |
199 | | |
200 | | php_stream_filter_chain readfilters, writefilters; |
201 | | |
202 | | php_stream_wrapper *wrapper; /* which wrapper was used to open the stream */ |
203 | | void *wrapperthis; /* convenience pointer for an instance of a wrapper */ |
204 | | zval wrapperdata; /* fgetwrapperdata retrieves this */ |
205 | | |
206 | | uint16_t is_persistent:1; |
207 | | uint16_t in_free:2; /* to prevent recursion during free */ |
208 | | uint16_t eof:1; |
209 | | uint16_t __exposed:1; /* non-zero if exposed as a zval somewhere */ |
210 | | |
211 | | /* so we know how to clean it up correctly. This should be set to |
212 | | * PHP_STREAM_FCLOSE_XXX as appropriate */ |
213 | | uint16_t fclose_stdiocast:2; |
214 | | |
215 | | |
216 | | /* flag to mark whether the stream has buffered data */ |
217 | | uint16_t has_buffered_data:1; |
218 | | |
219 | | /* whether stdio cast flushing is in progress */ |
220 | | uint16_t fclose_stdiocast_flush_in_progress:1; |
221 | | |
222 | | char mode[16]; /* "rwb" etc. ala stdio */ |
223 | | |
224 | | uint32_t flags; /* PHP_STREAM_FLAG_XXX */ |
225 | | |
226 | | zend_resource *res; /* used for auto-cleanup */ |
227 | | FILE *stdiocast; /* cache this, otherwise we might leak! */ |
228 | | char *orig_path; |
229 | | |
230 | | zend_resource *ctx; |
231 | | |
232 | | /* buffer */ |
233 | | zend_off_t position; /* of underlying stream */ |
234 | | unsigned char *readbuf; |
235 | | size_t readbuflen; |
236 | | zend_off_t readpos; |
237 | | zend_off_t writepos; |
238 | | |
239 | | /* how much data to read when filling buffer */ |
240 | | size_t chunk_size; |
241 | | |
242 | | #if ZEND_DEBUG |
243 | | const char *open_filename; |
244 | | uint32_t open_lineno; |
245 | | #endif |
246 | | |
247 | | struct _php_stream *enclosing_stream; /* this is a private stream owned by enclosing_stream */ |
248 | | }; /* php_stream */ |
249 | | |
250 | | #define PHP_STREAM_CONTEXT(stream) \ |
251 | 6.33k | ((php_stream_context*) ((stream)->ctx ? ((stream)->ctx->ptr) : NULL)) |
252 | | |
253 | | /* state definitions when closing down; these are private to streams.c */ |
254 | 0 | #define PHP_STREAM_FCLOSE_NONE 0 |
255 | 12.5k | #define PHP_STREAM_FCLOSE_FDOPEN 1 |
256 | 293k | #define PHP_STREAM_FCLOSE_FOPENCOOKIE 2 |
257 | | |
258 | | /* allocate a new stream for a particular ops */ |
259 | | BEGIN_EXTERN_C() |
260 | | PHPAPI php_stream *_php_stream_alloc(const php_stream_ops *ops, void *abstract, |
261 | | const char *persistent_id, const char *mode STREAMS_DC); |
262 | | END_EXTERN_C() |
263 | 0 | #define php_stream_alloc(ops, thisptr, persistent_id, mode) _php_stream_alloc((ops), (thisptr), (persistent_id), (mode) STREAMS_CC) |
264 | | |
265 | | #define php_stream_get_resource_id(stream) ((php_stream *)(stream))->res->handle |
266 | | /* use this to tell the stream that it is OK if we don't explicitly close it */ |
267 | 74 | #define php_stream_auto_cleanup(stream) { (stream)->__exposed = 1; } |
268 | | /* use this to assign the stream to a zval and tell the stream that is |
269 | | * has been exported to the engine; it will expect to be closed automatically |
270 | | * when the resources are auto-destructed */ |
271 | 6.18k | #define php_stream_to_zval(stream, zval) { ZVAL_RES(zval, (stream)->res); (stream)->__exposed = 1; } |
272 | | |
273 | 0 | #define php_stream_from_zval(xstr, pzval) do { \ |
274 | 0 | if (((xstr) = (php_stream*)zend_fetch_resource2_ex((pzval), \ |
275 | 0 | "stream", php_file_le_stream(), php_file_le_pstream())) == NULL) { \ |
276 | 0 | return; \ |
277 | 0 | } \ |
278 | 0 | } while (0) |
279 | 6.11k | #define php_stream_from_res(xstr, res) do { \ |
280 | 6.11k | if (((xstr) = (php_stream*)zend_fetch_resource2((res), \ |
281 | 6.11k | "stream", php_file_le_stream(), php_file_le_pstream())) == NULL) { \ |
282 | 0 | return; \ |
283 | 0 | } \ |
284 | 6.11k | } while (0) |
285 | | #define php_stream_from_res_no_verify(xstr, pzval) (xstr) = (php_stream*)zend_fetch_resource2((res), "stream", php_file_le_stream(), php_file_le_pstream()) |
286 | 0 | #define php_stream_from_zval_no_verify(xstr, pzval) (xstr) = (php_stream*)zend_fetch_resource2_ex((pzval), "stream", php_file_le_stream(), php_file_le_pstream()) |
287 | | |
288 | 0 | static zend_always_inline php_stream* php_stream_from_zval_no_verify_no_error(zval *zval) { |
289 | 0 | return (php_stream*)zend_fetch_resource2_ex(zval, NULL, php_file_le_stream(), php_file_le_pstream()); |
290 | 0 | } Unexecuted instantiation: php_date.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_pcre.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: exif.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_adler32.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_crc32.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_fnv.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_gost.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_haval.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_joaat.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_md.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_murmur.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_ripemd.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_sha_ni.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_sha_sse2.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_sha.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_sha3.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_snefru.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_tiger.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_whirlpool.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash_xxhash.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hash.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: json_encoder.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: json_parser.tab.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: json_scanner.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: json.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_lexbor.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: csprng.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: engine_mt19937.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: engine_pcgoneseq128xslrr64.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: engine_secure.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: engine_user.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: engine_xoshiro256starstar.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: gammasection.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: random.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: randomizer.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: zend_utils.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_reflection.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_spl.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: spl_array.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: spl_directory.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: spl_dllist.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: spl_exceptions.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: spl_fixedarray.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: spl_functions.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: spl_heap.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: spl_iterators.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: spl_observer.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: array.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: assert.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: base64.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: basic_functions.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: browscap.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: crc32_x86.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: crc32.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: credits.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: crypt.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: css.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: datetime.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: dir.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: dl.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: dns.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: exec.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: file.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: filestat.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: filters.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: flock_compat.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: formatted_print.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: fsock.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: ftok.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: ftp_fopen_wrapper.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: head.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: hrtime.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: html.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: http_fopen_wrapper.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: http.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: image.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: incomplete_class.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: info.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: iptc.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: levenshtein.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: link.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: mail.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: math.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: md5.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: metaphone.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: microtime.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: net.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: pack.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: pageinfo.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: password.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_fopen_wrapper.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: proc_open.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: quot_print.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: scanf.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: sha1.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: soundex.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: streamsfuncs.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: string.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: strnatcmp.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: syslog.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: type.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: uniqid.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: url_scanner_ex.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: url.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: user_filters.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: uuencode.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: var_unserializer.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: var.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: versioning.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: crypt_sha256.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: crypt_sha512.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_crypt_r.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_uri.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_uri_common.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: explicit_bzero.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: fopen_wrappers.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: getopt.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: main.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: network.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: output.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_content_types.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_ini_builder.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_ini.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_glob.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_odbc_utils.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_open_temporary_file.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_scandir.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_syslog.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_ticks.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: php_variables.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: reentrancy.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: rfc1867.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: safe_bcmp.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: SAPI.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: snprintf.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: spprintf.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: strlcat.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: strlcpy.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: cast.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: filter.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: glob_wrapper.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: memory.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: mmap.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: plain_wrapper.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: streams.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: transports.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: userspace.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: xp_socket.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: zend_optimizer.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: zend_system_id.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: zend.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: internal_functions_cli.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: fuzzer-parser.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: fuzzer-sapi.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: fuzzer-tracing-jit.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: fuzzer-exif.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: fuzzer-unserialize.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: fuzzer-function-jit.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: fuzzer-json.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: fuzzer-unserializehash.c:php_stream_from_zval_no_verify_no_error Unexecuted instantiation: fuzzer-execute.c:php_stream_from_zval_no_verify_no_error |
291 | | |
292 | | BEGIN_EXTERN_C() |
293 | | |
294 | | static zend_always_inline bool php_stream_zend_parse_arg_into_stream( |
295 | | zval *arg, |
296 | | php_stream **destination_stream_ptr, |
297 | | bool check_null, |
298 | | uint32_t arg_num |
299 | 119 | ) { |
300 | 119 | if (EXPECTED(Z_TYPE_P(arg) == IS_RESOURCE)) { |
301 | 117 | zend_resource *res = Z_RES_P(arg); |
302 | | /* We do not use zend_fetch_resource2() API, |
303 | | * as we want to be able to specify the argument number in the type error */ |
304 | 117 | if (EXPECTED(res->type == php_file_le_stream() || res->type == php_file_le_pstream())) { |
305 | 117 | *destination_stream_ptr = (php_stream*)res->ptr; |
306 | 117 | return true; |
307 | 117 | } else { |
308 | 0 | zend_argument_type_error(arg_num, "must be an open stream resource"); |
309 | 0 | return false; |
310 | 0 | } |
311 | 117 | } else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) { |
312 | 0 | *destination_stream_ptr = NULL; |
313 | 2 | } else { |
314 | 2 | return false; |
315 | 2 | } |
316 | 0 | return true; |
317 | 119 | } Unexecuted instantiation: php_date.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_pcre.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: exif.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_adler32.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_crc32.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_fnv.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_gost.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_haval.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_joaat.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_md.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_murmur.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_ripemd.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_sha_ni.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_sha_sse2.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_sha.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_sha3.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_snefru.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_tiger.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_whirlpool.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash_xxhash.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hash.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: json_encoder.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: json_parser.tab.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: json_scanner.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: json.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_lexbor.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: csprng.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: engine_mt19937.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: engine_pcgoneseq128xslrr64.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: engine_secure.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: engine_user.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: engine_xoshiro256starstar.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: gammasection.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: random.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: randomizer.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: zend_utils.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_reflection.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_spl.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: spl_array.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: spl_directory.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: spl_dllist.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: spl_exceptions.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: spl_fixedarray.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: spl_functions.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: spl_heap.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: spl_iterators.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: spl_observer.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: array.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: assert.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: base64.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: basic_functions.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: browscap.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: crc32_x86.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: crc32.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: credits.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: crypt.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: css.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: datetime.c:php_stream_zend_parse_arg_into_stream dir.c:php_stream_zend_parse_arg_into_stream Line | Count | Source | 299 | 56 | ) { | 300 | 56 | if (EXPECTED(Z_TYPE_P(arg) == IS_RESOURCE)) { | 301 | 56 | zend_resource *res = Z_RES_P(arg); | 302 | | /* We do not use zend_fetch_resource2() API, | 303 | | * as we want to be able to specify the argument number in the type error */ | 304 | 56 | if (EXPECTED(res->type == php_file_le_stream() || res->type == php_file_le_pstream())) { | 305 | 56 | *destination_stream_ptr = (php_stream*)res->ptr; | 306 | 56 | return true; | 307 | 56 | } else { | 308 | 0 | zend_argument_type_error(arg_num, "must be an open stream resource"); | 309 | 0 | return false; | 310 | 0 | } | 311 | 56 | } else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) { | 312 | 0 | *destination_stream_ptr = NULL; | 313 | 0 | } else { | 314 | 0 | return false; | 315 | 0 | } | 316 | 0 | return true; | 317 | 56 | } |
Unexecuted instantiation: dl.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: dns.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: exec.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: file.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: filestat.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: filters.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: flock_compat.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: formatted_print.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: fsock.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: ftok.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: ftp_fopen_wrapper.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: head.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: hrtime.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: html.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: http_fopen_wrapper.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: http.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: image.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: incomplete_class.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: info.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: iptc.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: levenshtein.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: link.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: mail.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: math.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: md5.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: metaphone.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: microtime.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: net.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: pack.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: pageinfo.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: password.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_fopen_wrapper.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: proc_open.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: quot_print.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: scanf.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: sha1.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: soundex.c:php_stream_zend_parse_arg_into_stream streamsfuncs.c:php_stream_zend_parse_arg_into_stream Line | Count | Source | 299 | 58 | ) { | 300 | 58 | if (EXPECTED(Z_TYPE_P(arg) == IS_RESOURCE)) { | 301 | 56 | zend_resource *res = Z_RES_P(arg); | 302 | | /* We do not use zend_fetch_resource2() API, | 303 | | * as we want to be able to specify the argument number in the type error */ | 304 | 56 | if (EXPECTED(res->type == php_file_le_stream() || res->type == php_file_le_pstream())) { | 305 | 56 | *destination_stream_ptr = (php_stream*)res->ptr; | 306 | 56 | return true; | 307 | 56 | } else { | 308 | 0 | zend_argument_type_error(arg_num, "must be an open stream resource"); | 309 | 0 | return false; | 310 | 0 | } | 311 | 56 | } else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) { | 312 | 0 | *destination_stream_ptr = NULL; | 313 | 2 | } else { | 314 | 2 | return false; | 315 | 2 | } | 316 | 0 | return true; | 317 | 58 | } |
Unexecuted instantiation: string.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: strnatcmp.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: syslog.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: type.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: uniqid.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: url_scanner_ex.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: url.c:php_stream_zend_parse_arg_into_stream user_filters.c:php_stream_zend_parse_arg_into_stream Line | Count | Source | 299 | 5 | ) { | 300 | 5 | if (EXPECTED(Z_TYPE_P(arg) == IS_RESOURCE)) { | 301 | 5 | zend_resource *res = Z_RES_P(arg); | 302 | | /* We do not use zend_fetch_resource2() API, | 303 | | * as we want to be able to specify the argument number in the type error */ | 304 | 5 | if (EXPECTED(res->type == php_file_le_stream() || res->type == php_file_le_pstream())) { | 305 | 5 | *destination_stream_ptr = (php_stream*)res->ptr; | 306 | 5 | return true; | 307 | 5 | } else { | 308 | 0 | zend_argument_type_error(arg_num, "must be an open stream resource"); | 309 | 0 | return false; | 310 | 0 | } | 311 | 5 | } else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) { | 312 | 0 | *destination_stream_ptr = NULL; | 313 | 0 | } else { | 314 | 0 | return false; | 315 | 0 | } | 316 | 0 | return true; | 317 | 5 | } |
Unexecuted instantiation: uuencode.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: var_unserializer.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: var.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: versioning.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: crypt_sha256.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: crypt_sha512.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_crypt_r.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_uri.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_uri_common.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: explicit_bzero.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: fopen_wrappers.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: getopt.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: main.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: network.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: output.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_content_types.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_ini_builder.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_ini.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_glob.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_odbc_utils.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_open_temporary_file.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_scandir.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_syslog.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_ticks.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: php_variables.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: reentrancy.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: rfc1867.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: safe_bcmp.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: SAPI.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: snprintf.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: spprintf.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: strlcat.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: strlcpy.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: cast.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: filter.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: glob_wrapper.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: memory.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: mmap.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: plain_wrapper.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: streams.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: transports.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: userspace.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: xp_socket.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: zend_optimizer.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: zend_system_id.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: zend.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: internal_functions_cli.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: fuzzer-parser.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: fuzzer-sapi.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: fuzzer-tracing-jit.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: fuzzer-exif.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: fuzzer-unserialize.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: fuzzer-function-jit.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: fuzzer-json.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: fuzzer-unserializehash.c:php_stream_zend_parse_arg_into_stream Unexecuted instantiation: fuzzer-execute.c:php_stream_zend_parse_arg_into_stream |
318 | | |
319 | | #define PHP_Z_PARAM_STREAM_EX(destination_stream_ptr, check_null) \ |
320 | 119 | Z_PARAM_PROLOGUE(0, 0); \ |
321 | 119 | if (UNEXPECTED(!php_stream_zend_parse_arg_into_stream(_arg, &destination_stream_ptr, check_null, _i))) { \ |
322 | 2 | _error_code = ZPP_ERROR_FAILURE; \ |
323 | 2 | if (!EG(exception)) { \ |
324 | 2 | _expected_type = check_null ? Z_EXPECTED_RESOURCE_OR_NULL : Z_EXPECTED_RESOURCE; \ |
325 | 2 | _error_code = ZPP_ERROR_WRONG_ARG; \ |
326 | 2 | } \ |
327 | 2 | break; \ |
328 | 2 | } |
329 | 63 | #define PHP_Z_PARAM_STREAM(dest) PHP_Z_PARAM_STREAM_EX(dest, false) |
330 | 56 | #define PHP_Z_PARAM_STREAM_OR_NULL(dest) PHP_Z_PARAM_STREAM_EX(dest, true) |
331 | | |
332 | | PHPAPI php_stream *php_stream_encloses(php_stream *enclosing, php_stream *enclosed); |
333 | 10 | #define php_stream_free_enclosed(stream_enclosed, close_options) _php_stream_free_enclosed((stream_enclosed), (close_options)) |
334 | | PHPAPI int _php_stream_free_enclosed(php_stream *stream_enclosed, int close_options); |
335 | | |
336 | | PHPAPI int php_stream_from_persistent_id(const char *persistent_id, php_stream **stream); |
337 | 0 | #define PHP_STREAM_PERSISTENT_SUCCESS 0 /* id exists */ |
338 | 0 | #define PHP_STREAM_PERSISTENT_FAILURE 1 /* id exists but is not a stream! */ |
339 | 0 | #define PHP_STREAM_PERSISTENT_NOT_EXIST 2 /* id does not exist */ |
340 | | |
341 | 12.5k | #define PHP_STREAM_FREE_CALL_DTOR 1 /* call ops->close */ |
342 | 12.5k | #define PHP_STREAM_FREE_RELEASE_STREAM 2 /* pefree(stream) */ |
343 | 6.33k | #define PHP_STREAM_FREE_PRESERVE_HANDLE 4 /* tell ops->close to not close its underlying handle */ |
344 | 12.5k | #define PHP_STREAM_FREE_RSRC_DTOR 8 /* called from the resource list dtor */ |
345 | 0 | #define PHP_STREAM_FREE_PERSISTENT 16 /* manually freeing a persistent connection */ |
346 | 6.26k | #define PHP_STREAM_FREE_IGNORE_ENCLOSING 32 /* don't close the enclosing stream instead */ |
347 | 82 | #define PHP_STREAM_FREE_KEEP_RSRC 64 /* keep associated zend_resource */ |
348 | 77 | #define PHP_STREAM_FREE_CLOSE (PHP_STREAM_FREE_CALL_DTOR | PHP_STREAM_FREE_RELEASE_STREAM) |
349 | | #define PHP_STREAM_FREE_CLOSE_CASTED (PHP_STREAM_FREE_CLOSE | PHP_STREAM_FREE_PRESERVE_HANDLE) |
350 | 0 | #define PHP_STREAM_FREE_CLOSE_PERSISTENT (PHP_STREAM_FREE_CLOSE | PHP_STREAM_FREE_PERSISTENT) |
351 | | |
352 | | PHPAPI int _php_stream_free(php_stream *stream, int close_options); |
353 | 6.26k | #define php_stream_free(stream, close_options) _php_stream_free((stream), (close_options)) |
354 | 77 | #define php_stream_close(stream) _php_stream_free((stream), PHP_STREAM_FREE_CLOSE) |
355 | 0 | #define php_stream_pclose(stream) _php_stream_free((stream), PHP_STREAM_FREE_CLOSE_PERSISTENT) |
356 | | |
357 | | PHPAPI int _php_stream_seek(php_stream *stream, zend_off_t offset, int whence); |
358 | 0 | #define php_stream_rewind(stream) _php_stream_seek((stream), 0L, SEEK_SET) |
359 | 286k | #define php_stream_seek(stream, offset, whence) _php_stream_seek((stream), (offset), (whence)) |
360 | | |
361 | | PHPAPI zend_off_t _php_stream_tell(php_stream *stream); |
362 | 690k | #define php_stream_tell(stream) _php_stream_tell((stream)) |
363 | | |
364 | | PHPAPI ssize_t _php_stream_read(php_stream *stream, char *buf, size_t count); |
365 | 2.45M | #define php_stream_read(stream, buf, count) _php_stream_read((stream), (buf), (count)) |
366 | | |
367 | | PHPAPI zend_string *php_stream_read_to_str(php_stream *stream, size_t len); |
368 | | |
369 | | PHPAPI ssize_t _php_stream_write(php_stream *stream, const char *buf, size_t count); |
370 | 0 | #define php_stream_write_string(stream, str) _php_stream_write(stream, str, strlen(str)) |
371 | 6.11k | #define php_stream_write(stream, buf, count) _php_stream_write(stream, (buf), (count)) |
372 | | |
373 | | PHPAPI zend_result _php_stream_fill_read_buffer(php_stream *stream, size_t size); |
374 | 52 | #define php_stream_fill_read_buffer(stream, size) _php_stream_fill_read_buffer((stream), (size)) |
375 | | |
376 | | PHPAPI ssize_t _php_stream_printf(php_stream *stream, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 2, 3); |
377 | | |
378 | | /* php_stream_printf macro & function require */ |
379 | 0 | #define php_stream_printf _php_stream_printf |
380 | | |
381 | | PHPAPI bool _php_stream_eof(php_stream *stream); |
382 | 56 | #define php_stream_eof(stream) _php_stream_eof((stream)) |
383 | | |
384 | | PHPAPI int _php_stream_getc(php_stream *stream); |
385 | 1.78M | #define php_stream_getc(stream) _php_stream_getc((stream)) |
386 | | |
387 | | PHPAPI int _php_stream_putc(php_stream *stream, int c); |
388 | | #define php_stream_putc(stream, c) _php_stream_putc((stream), (c)) |
389 | | |
390 | | PHPAPI int _php_stream_flush(php_stream *stream, int closing); |
391 | 0 | #define php_stream_flush(stream) _php_stream_flush((stream), 0) |
392 | | |
393 | | PHPAPI int _php_stream_sync(php_stream *stream, bool data_only); |
394 | | #define php_stream_sync(stream, d) _php_stream_sync((stream), (d)) |
395 | | |
396 | | PHPAPI char *_php_stream_get_line(php_stream *stream, char *buf, size_t maxlen, size_t *returned_len); |
397 | 0 | #define php_stream_gets(stream, buf, maxlen) _php_stream_get_line((stream), (buf), (maxlen), NULL) |
398 | | |
399 | 0 | #define php_stream_get_line(stream, buf, maxlen, retlen) _php_stream_get_line((stream), (buf), (maxlen), (retlen)) |
400 | | PHPAPI zend_string *php_stream_get_record(php_stream *stream, size_t maxlen, const char *delim, size_t delim_len); |
401 | | |
402 | | /* Returns true if buffer has been appended, false on error */ |
403 | | PHPAPI bool _php_stream_puts(php_stream *stream, const char *buf); |
404 | | #define php_stream_puts(stream, buf) _php_stream_puts((stream), (buf)) |
405 | | |
406 | | PHPAPI int _php_stream_stat(php_stream *stream, php_stream_statbuf *ssb); |
407 | 58 | #define php_stream_stat(stream, ssb) _php_stream_stat((stream), (ssb)) |
408 | | |
409 | | PHPAPI int _php_stream_stat_path(const char *path, int flags, php_stream_statbuf *ssb, php_stream_context *context); |
410 | | #define php_stream_stat_path(path, ssb) _php_stream_stat_path((path), 0, (ssb), NULL) |
411 | 0 | #define php_stream_stat_path_ex(path, flags, ssb, context) _php_stream_stat_path((path), (flags), (ssb), (context)) |
412 | | |
413 | | PHPAPI int _php_stream_mkdir(const char *path, int mode, int options, php_stream_context *context); |
414 | | #define php_stream_mkdir(path, mode, options, context) _php_stream_mkdir(path, mode, options, context) |
415 | | |
416 | | PHPAPI int _php_stream_rmdir(const char *path, int options, php_stream_context *context); |
417 | | #define php_stream_rmdir(path, options, context) _php_stream_rmdir(path, options, context) |
418 | | |
419 | | PHPAPI php_stream *_php_stream_opendir(const char *path, int options, php_stream_context *context STREAMS_DC); |
420 | 60 | #define php_stream_opendir(path, options, context) _php_stream_opendir((path), (options), (context) STREAMS_CC) |
421 | | PHPAPI php_stream_dirent *_php_stream_readdir(php_stream *dirstream, php_stream_dirent *ent); |
422 | 0 | #define php_stream_readdir(dirstream, dirent) _php_stream_readdir((dirstream), (dirent)) |
423 | 0 | #define php_stream_closedir(dirstream) php_stream_close((dirstream)) |
424 | 0 | #define php_stream_rewinddir(dirstream) php_stream_rewind((dirstream)) |
425 | | |
426 | | PHPAPI int php_stream_dirent_alphasort(const zend_string **a, const zend_string **b); |
427 | | PHPAPI int php_stream_dirent_alphasortr(const zend_string **a, const zend_string **b); |
428 | | |
429 | | PHPAPI int _php_stream_scandir(const char *dirname, zend_string **namelist[], int flags, php_stream_context *context, |
430 | | int (*compare) (const zend_string **a, const zend_string **b)); |
431 | 0 | #define php_stream_scandir(dirname, namelist, context, compare) _php_stream_scandir((dirname), (namelist), 0, (context), (compare)) |
432 | | |
433 | | PHPAPI int _php_stream_set_option(php_stream *stream, int option, int value, void *ptrparam); |
434 | 125 | #define php_stream_set_option(stream, option, value, ptrvalue) _php_stream_set_option((stream), (option), (value), (ptrvalue)) |
435 | | |
436 | 0 | #define php_stream_set_chunk_size(stream, size) _php_stream_set_option((stream), PHP_STREAM_OPTION_SET_CHUNK_SIZE, (size), NULL) |
437 | | |
438 | | END_EXTERN_C() |
439 | | |
440 | | |
441 | | /* Flags for mkdir method in wrapper ops */ |
442 | 0 | #define PHP_STREAM_MKDIR_RECURSIVE 1 |
443 | | /* define REPORT ERRORS 8 (below) */ |
444 | | |
445 | | /* Flags for rmdir method in wrapper ops */ |
446 | | /* define REPORT_ERRORS 8 (below) */ |
447 | | |
448 | | /* Flags for url_stat method in wrapper ops */ |
449 | 25 | #define PHP_STREAM_URL_STAT_LINK 1 |
450 | 56 | #define PHP_STREAM_URL_STAT_QUIET 2 |
451 | 0 | #define PHP_STREAM_URL_STAT_IGNORE_OPEN_BASEDIR 4 |
452 | | |
453 | | /* change the blocking mode of stream: value == 1 => blocking, value == 0 => non-blocking. */ |
454 | 31 | #define PHP_STREAM_OPTION_BLOCKING 1 |
455 | | |
456 | | /* change the buffering mode of stream. value is a PHP_STREAM_BUFFER_XXXX value, ptrparam is a ptr to a size_t holding |
457 | | * the required buffer size */ |
458 | 100 | #define PHP_STREAM_OPTION_READ_BUFFER 2 |
459 | 62 | #define PHP_STREAM_OPTION_WRITE_BUFFER 3 |
460 | | |
461 | 38 | #define PHP_STREAM_BUFFER_NONE 0 /* unbuffered */ |
462 | 0 | #define PHP_STREAM_BUFFER_LINE 1 /* line buffered */ |
463 | 0 | #define PHP_STREAM_BUFFER_FULL 2 /* fully buffered */ |
464 | | |
465 | | /* set the timeout duration for reads on the stream. ptrparam is a pointer to a struct timeval * */ |
466 | 31 | #define PHP_STREAM_OPTION_READ_TIMEOUT 4 |
467 | 0 | #define PHP_STREAM_OPTION_SET_CHUNK_SIZE 5 |
468 | | |
469 | | /* set or release lock on a stream */ |
470 | 0 | #define PHP_STREAM_OPTION_LOCKING 6 |
471 | | |
472 | | /* whether or not locking is supported */ |
473 | 0 | #define PHP_STREAM_LOCK_SUPPORTED 1 |
474 | | |
475 | 0 | #define php_stream_supports_lock(stream) (_php_stream_set_option((stream), PHP_STREAM_OPTION_LOCKING, 0, (void *) PHP_STREAM_LOCK_SUPPORTED) == 0 ? 1 : 0) |
476 | 0 | #define php_stream_lock(stream, mode) _php_stream_set_option((stream), PHP_STREAM_OPTION_LOCKING, (mode), (void *) NULL) |
477 | | |
478 | | /* option code used by the php_stream_xport_XXX api */ |
479 | 0 | #define PHP_STREAM_OPTION_XPORT_API 7 /* see php_stream_transport.h */ |
480 | | #define PHP_STREAM_OPTION_CRYPTO_API 8 /* see php_stream_transport.h */ |
481 | 0 | #define PHP_STREAM_OPTION_MMAP_API 9 /* see php_stream_mmap.h */ |
482 | 0 | #define PHP_STREAM_OPTION_TRUNCATE_API 10 |
483 | | |
484 | 0 | #define PHP_STREAM_TRUNCATE_SUPPORTED 0 |
485 | 0 | #define PHP_STREAM_TRUNCATE_SET_SIZE 1 /* ptrparam is a pointer to a size_t */ |
486 | | |
487 | 0 | #define php_stream_truncate_supported(stream) (_php_stream_set_option((stream), PHP_STREAM_OPTION_TRUNCATE_API, PHP_STREAM_TRUNCATE_SUPPORTED, NULL) == PHP_STREAM_OPTION_RETURN_OK ? 1 : 0) |
488 | | |
489 | | BEGIN_EXTERN_C() |
490 | | PHPAPI int _php_stream_truncate_set_size(php_stream *stream, size_t newsize); |
491 | 0 | #define php_stream_truncate_set_size(stream, size) _php_stream_truncate_set_size((stream), (size)) |
492 | | END_EXTERN_C() |
493 | | |
494 | 56 | #define PHP_STREAM_OPTION_META_DATA_API 11 /* ptrparam is a zval* to which to add metadata information */ |
495 | 56 | #define php_stream_populate_meta_data(stream, zv) (_php_stream_set_option((stream), PHP_STREAM_OPTION_META_DATA_API, 0, zv) == PHP_STREAM_OPTION_RETURN_OK ? 1 : 0) |
496 | | |
497 | | /* Check if the stream is still "live"; for sockets/pipes this means the socket |
498 | | * is still connected; for files, this does not really have meaning */ |
499 | 0 | #define PHP_STREAM_OPTION_CHECK_LIVENESS 12 /* no parameters */ |
500 | | |
501 | | /* Enable/disable blocking reads on anonymous pipes on Windows. */ |
502 | | #define PHP_STREAM_OPTION_PIPE_BLOCKING 13 |
503 | | |
504 | | /* Stream can support fsync operation */ |
505 | 0 | #define PHP_STREAM_OPTION_SYNC_API 14 |
506 | 0 | #define PHP_STREAM_SYNC_SUPPORTED 0 |
507 | 0 | #define PHP_STREAM_SYNC_FSYNC 1 |
508 | 0 | #define PHP_STREAM_SYNC_FDSYNC 2 |
509 | | |
510 | 0 | #define php_stream_sync_supported(stream) (_php_stream_set_option((stream), PHP_STREAM_OPTION_SYNC_API, PHP_STREAM_SYNC_SUPPORTED, NULL) == PHP_STREAM_OPTION_RETURN_OK ? 1 : 0) |
511 | | |
512 | | |
513 | 94 | #define PHP_STREAM_OPTION_RETURN_OK 0 /* option set OK */ |
514 | 87 | #define PHP_STREAM_OPTION_RETURN_ERR -1 /* problem setting option */ |
515 | 431 | #define PHP_STREAM_OPTION_RETURN_NOTIMPL -2 /* underlying stream does not implement; streams can handle it instead */ |
516 | | |
517 | | /* copy up to maxlen bytes from src to dest. If maxlen is PHP_STREAM_COPY_ALL, |
518 | | * copy until eof(src). */ |
519 | 13 | #define PHP_STREAM_COPY_ALL ((size_t)-1) |
520 | | |
521 | | BEGIN_EXTERN_C() |
522 | | ZEND_ATTRIBUTE_DEPRECATED |
523 | | PHPAPI size_t _php_stream_copy_to_stream(php_stream *src, php_stream *dest, size_t maxlen STREAMS_DC); |
524 | | #define php_stream_copy_to_stream(src, dest, maxlen) _php_stream_copy_to_stream((src), (dest), (maxlen) STREAMS_CC) |
525 | | PHPAPI zend_result _php_stream_copy_to_stream_ex(php_stream *src, php_stream *dest, size_t maxlen, size_t *len STREAMS_DC); |
526 | 0 | #define php_stream_copy_to_stream_ex(src, dest, maxlen, len) _php_stream_copy_to_stream_ex((src), (dest), (maxlen), (len) STREAMS_CC) |
527 | | |
528 | | |
529 | | /* read all data from stream and put into a buffer. Caller must free buffer |
530 | | * when done. */ |
531 | | PHPAPI zend_string *_php_stream_copy_to_mem(php_stream *src, size_t maxlen, int persistent STREAMS_DC); |
532 | 5 | #define php_stream_copy_to_mem(src, maxlen, persistent) _php_stream_copy_to_mem((src), (maxlen), (persistent) STREAMS_CC) |
533 | | |
534 | | /* output all data from a stream */ |
535 | | PHPAPI ssize_t _php_stream_passthru(php_stream * src STREAMS_DC); |
536 | 0 | #define php_stream_passthru(stream) _php_stream_passthru((stream) STREAMS_CC) |
537 | | END_EXTERN_C() |
538 | | |
539 | | #include "streams/php_stream_transport.h" |
540 | | #include "streams/php_stream_plain_wrapper.h" |
541 | | #include "streams/php_stream_glob_wrapper.h" |
542 | | #include "streams/php_stream_userspace.h" |
543 | | #include "streams/php_stream_mmap.h" |
544 | | |
545 | | /* coerce the stream into some other form */ |
546 | | /* cast as a stdio FILE * */ |
547 | 0 | #define PHP_STREAM_AS_STDIO 0 |
548 | | /* cast as a POSIX fd or socketd */ |
549 | 0 | #define PHP_STREAM_AS_FD 1 |
550 | | /* cast as a socketd */ |
551 | 0 | #define PHP_STREAM_AS_SOCKETD 2 |
552 | | /* cast as fd/socket for select purposes */ |
553 | 0 | #define PHP_STREAM_AS_FD_FOR_SELECT 3 |
554 | | |
555 | | /* try really, really hard to make sure the cast happens (avoid using this flag if possible) */ |
556 | 0 | #define PHP_STREAM_CAST_TRY_HARD 0x80000000 |
557 | 0 | #define PHP_STREAM_CAST_RELEASE 0x40000000 /* stream becomes invalid on success */ |
558 | 0 | #define PHP_STREAM_CAST_INTERNAL 0x20000000 /* stream cast for internal use */ |
559 | 0 | #define PHP_STREAM_CAST_MASK (PHP_STREAM_CAST_TRY_HARD | PHP_STREAM_CAST_RELEASE | PHP_STREAM_CAST_INTERNAL) |
560 | | BEGIN_EXTERN_C() |
561 | | PHPAPI int _php_stream_cast(php_stream *stream, int castas, void **ret, int show_err); |
562 | | END_EXTERN_C() |
563 | | /* use this to check if a stream can be cast into another form */ |
564 | 0 | #define php_stream_can_cast(stream, as) _php_stream_cast((stream), (as), NULL, 0) |
565 | 0 | #define php_stream_cast(stream, as, ret, show_err) _php_stream_cast((stream), (as), (ret), (show_err)) |
566 | | |
567 | | /* use this to check if a stream is of a particular type: |
568 | | * PHPAPI int php_stream_is(php_stream *stream, php_stream_ops *ops); */ |
569 | 12.2k | #define php_stream_is(stream, anops) ((stream)->ops == anops) |
570 | | #define PHP_STREAM_IS_STDIO &php_stream_stdio_ops |
571 | | |
572 | 38 | #define php_stream_is_persistent(stream) (stream)->is_persistent |
573 | | |
574 | | /* Wrappers support */ |
575 | | |
576 | | #define IGNORE_PATH 0x00000000 |
577 | 4.63k | #define USE_PATH 0x00000001 |
578 | 2.53k | #define IGNORE_URL 0x00000002 |
579 | 6.89k | #define REPORT_ERRORS 0x00000008 |
580 | | |
581 | | /* If you don't need to write to the stream, but really need to |
582 | | * be able to seek, use this flag in your options. */ |
583 | 105 | #define STREAM_MUST_SEEK 0x00000010 |
584 | | /* If you are going to end up casting the stream into a FILE* or |
585 | | * a socket, pass this flag and the streams/wrappers will not use |
586 | | * buffering mechanisms while reading the headers, so that HTTP |
587 | | * wrapped streams will work consistently. |
588 | | * If you omit this flag, streams will use buffering and should end |
589 | | * up working more optimally. |
590 | | * */ |
591 | 0 | #define STREAM_WILL_CAST 0x00000020 |
592 | | |
593 | | /* this flag applies to php_stream_locate_url_wrapper */ |
594 | 2.20k | #define STREAM_LOCATE_WRAPPERS_ONLY 0x00000040 |
595 | | |
596 | | /* this flag is only used by include/require functions */ |
597 | 2.55k | #define STREAM_OPEN_FOR_INCLUDE 0x00000080 |
598 | | |
599 | | /* this flag tells streams to ONLY open urls */ |
600 | 2.30k | #define STREAM_USE_URL 0x00000100 |
601 | | |
602 | | /* this flag is used when only the headers from HTTP request are to be fetched */ |
603 | 0 | #define STREAM_ONLY_GET_HEADERS 0x00000200 |
604 | | |
605 | | /* don't apply open_basedir checks */ |
606 | 2.20k | #define STREAM_DISABLE_OPEN_BASEDIR 0x00000400 |
607 | | |
608 | | /* get (or create) a persistent version of the stream */ |
609 | 2.72k | #define STREAM_OPEN_PERSISTENT 0x00000800 |
610 | | |
611 | | /* use glob stream for directory open in plain files stream */ |
612 | 0 | #define STREAM_USE_GLOB_DIR_OPEN 0x00001000 |
613 | | |
614 | | /* don't check allow_url_fopen and allow_url_include */ |
615 | 32 | #define STREAM_DISABLE_URL_PROTECTION 0x00002000 |
616 | | |
617 | | /* assume the path passed in exists and is fully expanded, avoiding syscalls */ |
618 | 342 | #define STREAM_ASSUME_REALPATH 0x00004000 |
619 | | |
620 | | /* Allow blocking reads on anonymous pipes on Windows. */ |
621 | 43 | #define STREAM_USE_BLOCKING_PIPE 0x00008000 |
622 | | |
623 | | /* this flag is only used by include/require functions */ |
624 | 2.29k | #define STREAM_OPEN_FOR_ZEND_STREAM 0x00010000 |
625 | | |
626 | | int php_init_stream_wrappers(int module_number); |
627 | | void php_shutdown_stream_wrappers(int module_number); |
628 | | void php_shutdown_stream_hashes(void); |
629 | | PHP_RSHUTDOWN_FUNCTION(streams); |
630 | | |
631 | | BEGIN_EXTERN_C() |
632 | | PHPAPI zend_result php_register_url_stream_wrapper(const char *protocol, const php_stream_wrapper *wrapper); |
633 | | PHPAPI zend_result php_unregister_url_stream_wrapper(const char *protocol); |
634 | | PHPAPI zend_result php_register_url_stream_wrapper_volatile(zend_string *protocol, php_stream_wrapper *wrapper); |
635 | | PHPAPI zend_result php_unregister_url_stream_wrapper_volatile(zend_string *protocol); |
636 | | PHPAPI php_stream *_php_stream_open_wrapper_ex(const char *path, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC); |
637 | | PHPAPI php_stream_wrapper *php_stream_locate_url_wrapper(const char *path, const char **path_for_open, int options); |
638 | | PHPAPI const char *php_stream_locate_eol(php_stream *stream, zend_string *buf); |
639 | | |
640 | 2.27k | #define php_stream_open_wrapper(path, mode, options, opened) _php_stream_open_wrapper_ex((path), (mode), (options), (opened), NULL STREAMS_CC) |
641 | 44 | #define php_stream_open_wrapper_ex(path, mode, options, opened, context) _php_stream_open_wrapper_ex((path), (mode), (options), (opened), (context) STREAMS_CC) |
642 | | |
643 | | /* pushes an error message onto the stack for a wrapper instance */ |
644 | | PHPAPI void php_stream_wrapper_log_error(const php_stream_wrapper *wrapper, int options, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4); |
645 | | |
646 | 0 | #define PHP_STREAM_UNCHANGED 0 /* orig stream was seekable anyway */ |
647 | 0 | #define PHP_STREAM_RELEASED 1 /* newstream should be used; origstream is no longer valid */ |
648 | 0 | #define PHP_STREAM_FAILED 2 /* an error occurred while attempting conversion */ |
649 | 0 | #define PHP_STREAM_CRITICAL 3 /* an error occurred; origstream is in an unknown state; you should close origstream */ |
650 | | #define PHP_STREAM_NO_PREFERENCE 0 |
651 | 0 | #define PHP_STREAM_PREFER_STDIO 1 |
652 | 0 | #define PHP_STREAM_FORCE_CONVERSION 2 |
653 | | /* DO NOT call this on streams that are referenced by resources! */ |
654 | | PHPAPI int _php_stream_make_seekable(php_stream *origstream, php_stream **newstream, int flags STREAMS_DC); |
655 | | #define php_stream_make_seekable(origstream, newstream, flags) _php_stream_make_seekable((origstream), (newstream), (flags) STREAMS_CC) |
656 | | |
657 | | /* Give other modules access to the url_stream_wrappers_hash and stream_filters_hash */ |
658 | | PHPAPI HashTable *_php_stream_get_url_stream_wrappers_hash(void); |
659 | 68 | #define php_stream_get_url_stream_wrappers_hash() _php_stream_get_url_stream_wrappers_hash() |
660 | | PHPAPI HashTable *php_stream_get_url_stream_wrappers_hash_global(void); |
661 | | PHPAPI HashTable *_php_get_stream_filters_hash(void); |
662 | 5 | #define php_get_stream_filters_hash() _php_get_stream_filters_hash() |
663 | | PHPAPI HashTable *php_get_stream_filters_hash_global(void); |
664 | | extern const php_stream_wrapper_ops *php_stream_user_wrapper_ops; |
665 | | |
666 | | static inline bool php_is_stream_path(const char *filename) |
667 | 0 | { |
668 | 0 | const char *p; |
669 | |
|
670 | 0 | for (p = filename; |
671 | 0 | (*p >= 'a' && *p <= 'z') || |
672 | 0 | (*p >= 'A' && *p <= 'Z') || |
673 | 0 | (*p >= '0' && *p <= '9') || |
674 | 0 | *p == '+' || *p == '-' || *p == '.'; |
675 | 0 | p++); |
676 | 0 | return ((p != filename) && (p[0] == ':') && (p[1] == '/') && (p[2] == '/')); |
677 | 0 | } Unexecuted instantiation: php_date.c:php_is_stream_path Unexecuted instantiation: php_pcre.c:php_is_stream_path Unexecuted instantiation: exif.c:php_is_stream_path Unexecuted instantiation: hash_adler32.c:php_is_stream_path Unexecuted instantiation: hash_crc32.c:php_is_stream_path Unexecuted instantiation: hash_fnv.c:php_is_stream_path Unexecuted instantiation: hash_gost.c:php_is_stream_path Unexecuted instantiation: hash_haval.c:php_is_stream_path Unexecuted instantiation: hash_joaat.c:php_is_stream_path Unexecuted instantiation: hash_md.c:php_is_stream_path Unexecuted instantiation: hash_murmur.c:php_is_stream_path Unexecuted instantiation: hash_ripemd.c:php_is_stream_path Unexecuted instantiation: hash_sha_ni.c:php_is_stream_path Unexecuted instantiation: hash_sha_sse2.c:php_is_stream_path Unexecuted instantiation: hash_sha.c:php_is_stream_path Unexecuted instantiation: hash_sha3.c:php_is_stream_path Unexecuted instantiation: hash_snefru.c:php_is_stream_path Unexecuted instantiation: hash_tiger.c:php_is_stream_path Unexecuted instantiation: hash_whirlpool.c:php_is_stream_path Unexecuted instantiation: hash_xxhash.c:php_is_stream_path Unexecuted instantiation: hash.c:php_is_stream_path Unexecuted instantiation: json_encoder.c:php_is_stream_path Unexecuted instantiation: json_parser.tab.c:php_is_stream_path Unexecuted instantiation: json_scanner.c:php_is_stream_path Unexecuted instantiation: json.c:php_is_stream_path Unexecuted instantiation: php_lexbor.c:php_is_stream_path Unexecuted instantiation: csprng.c:php_is_stream_path Unexecuted instantiation: engine_mt19937.c:php_is_stream_path Unexecuted instantiation: engine_pcgoneseq128xslrr64.c:php_is_stream_path Unexecuted instantiation: engine_secure.c:php_is_stream_path Unexecuted instantiation: engine_user.c:php_is_stream_path Unexecuted instantiation: engine_xoshiro256starstar.c:php_is_stream_path Unexecuted instantiation: gammasection.c:php_is_stream_path Unexecuted instantiation: random.c:php_is_stream_path Unexecuted instantiation: randomizer.c:php_is_stream_path Unexecuted instantiation: zend_utils.c:php_is_stream_path Unexecuted instantiation: php_reflection.c:php_is_stream_path Unexecuted instantiation: php_spl.c:php_is_stream_path Unexecuted instantiation: spl_array.c:php_is_stream_path Unexecuted instantiation: spl_directory.c:php_is_stream_path Unexecuted instantiation: spl_dllist.c:php_is_stream_path Unexecuted instantiation: spl_exceptions.c:php_is_stream_path Unexecuted instantiation: spl_fixedarray.c:php_is_stream_path Unexecuted instantiation: spl_functions.c:php_is_stream_path Unexecuted instantiation: spl_heap.c:php_is_stream_path Unexecuted instantiation: spl_iterators.c:php_is_stream_path Unexecuted instantiation: spl_observer.c:php_is_stream_path Unexecuted instantiation: array.c:php_is_stream_path Unexecuted instantiation: assert.c:php_is_stream_path Unexecuted instantiation: base64.c:php_is_stream_path Unexecuted instantiation: basic_functions.c:php_is_stream_path Unexecuted instantiation: browscap.c:php_is_stream_path Unexecuted instantiation: crc32_x86.c:php_is_stream_path Unexecuted instantiation: crc32.c:php_is_stream_path Unexecuted instantiation: credits.c:php_is_stream_path Unexecuted instantiation: crypt.c:php_is_stream_path Unexecuted instantiation: css.c:php_is_stream_path Unexecuted instantiation: datetime.c:php_is_stream_path Unexecuted instantiation: dir.c:php_is_stream_path Unexecuted instantiation: dl.c:php_is_stream_path Unexecuted instantiation: dns.c:php_is_stream_path Unexecuted instantiation: exec.c:php_is_stream_path Unexecuted instantiation: file.c:php_is_stream_path Unexecuted instantiation: filestat.c:php_is_stream_path Unexecuted instantiation: filters.c:php_is_stream_path Unexecuted instantiation: flock_compat.c:php_is_stream_path Unexecuted instantiation: formatted_print.c:php_is_stream_path Unexecuted instantiation: fsock.c:php_is_stream_path Unexecuted instantiation: ftok.c:php_is_stream_path Unexecuted instantiation: ftp_fopen_wrapper.c:php_is_stream_path Unexecuted instantiation: head.c:php_is_stream_path Unexecuted instantiation: hrtime.c:php_is_stream_path Unexecuted instantiation: html.c:php_is_stream_path Unexecuted instantiation: http_fopen_wrapper.c:php_is_stream_path Unexecuted instantiation: http.c:php_is_stream_path Unexecuted instantiation: image.c:php_is_stream_path Unexecuted instantiation: incomplete_class.c:php_is_stream_path Unexecuted instantiation: info.c:php_is_stream_path Unexecuted instantiation: iptc.c:php_is_stream_path Unexecuted instantiation: levenshtein.c:php_is_stream_path Unexecuted instantiation: link.c:php_is_stream_path Unexecuted instantiation: mail.c:php_is_stream_path Unexecuted instantiation: math.c:php_is_stream_path Unexecuted instantiation: md5.c:php_is_stream_path Unexecuted instantiation: metaphone.c:php_is_stream_path Unexecuted instantiation: microtime.c:php_is_stream_path Unexecuted instantiation: net.c:php_is_stream_path Unexecuted instantiation: pack.c:php_is_stream_path Unexecuted instantiation: pageinfo.c:php_is_stream_path Unexecuted instantiation: password.c:php_is_stream_path Unexecuted instantiation: php_fopen_wrapper.c:php_is_stream_path Unexecuted instantiation: proc_open.c:php_is_stream_path Unexecuted instantiation: quot_print.c:php_is_stream_path Unexecuted instantiation: scanf.c:php_is_stream_path Unexecuted instantiation: sha1.c:php_is_stream_path Unexecuted instantiation: soundex.c:php_is_stream_path Unexecuted instantiation: streamsfuncs.c:php_is_stream_path Unexecuted instantiation: string.c:php_is_stream_path Unexecuted instantiation: strnatcmp.c:php_is_stream_path Unexecuted instantiation: syslog.c:php_is_stream_path Unexecuted instantiation: type.c:php_is_stream_path Unexecuted instantiation: uniqid.c:php_is_stream_path Unexecuted instantiation: url_scanner_ex.c:php_is_stream_path Unexecuted instantiation: url.c:php_is_stream_path Unexecuted instantiation: user_filters.c:php_is_stream_path Unexecuted instantiation: uuencode.c:php_is_stream_path Unexecuted instantiation: var_unserializer.c:php_is_stream_path Unexecuted instantiation: var.c:php_is_stream_path Unexecuted instantiation: versioning.c:php_is_stream_path Unexecuted instantiation: crypt_sha256.c:php_is_stream_path Unexecuted instantiation: crypt_sha512.c:php_is_stream_path Unexecuted instantiation: php_crypt_r.c:php_is_stream_path Unexecuted instantiation: php_uri.c:php_is_stream_path Unexecuted instantiation: php_uri_common.c:php_is_stream_path Unexecuted instantiation: explicit_bzero.c:php_is_stream_path Unexecuted instantiation: fopen_wrappers.c:php_is_stream_path Unexecuted instantiation: getopt.c:php_is_stream_path Unexecuted instantiation: main.c:php_is_stream_path Unexecuted instantiation: network.c:php_is_stream_path Unexecuted instantiation: output.c:php_is_stream_path Unexecuted instantiation: php_content_types.c:php_is_stream_path Unexecuted instantiation: php_ini_builder.c:php_is_stream_path Unexecuted instantiation: php_ini.c:php_is_stream_path Unexecuted instantiation: php_glob.c:php_is_stream_path Unexecuted instantiation: php_odbc_utils.c:php_is_stream_path Unexecuted instantiation: php_open_temporary_file.c:php_is_stream_path Unexecuted instantiation: php_scandir.c:php_is_stream_path Unexecuted instantiation: php_syslog.c:php_is_stream_path Unexecuted instantiation: php_ticks.c:php_is_stream_path Unexecuted instantiation: php_variables.c:php_is_stream_path Unexecuted instantiation: reentrancy.c:php_is_stream_path Unexecuted instantiation: rfc1867.c:php_is_stream_path Unexecuted instantiation: safe_bcmp.c:php_is_stream_path Unexecuted instantiation: SAPI.c:php_is_stream_path Unexecuted instantiation: snprintf.c:php_is_stream_path Unexecuted instantiation: spprintf.c:php_is_stream_path Unexecuted instantiation: strlcat.c:php_is_stream_path Unexecuted instantiation: strlcpy.c:php_is_stream_path Unexecuted instantiation: cast.c:php_is_stream_path Unexecuted instantiation: filter.c:php_is_stream_path Unexecuted instantiation: glob_wrapper.c:php_is_stream_path Unexecuted instantiation: memory.c:php_is_stream_path Unexecuted instantiation: mmap.c:php_is_stream_path Unexecuted instantiation: plain_wrapper.c:php_is_stream_path Unexecuted instantiation: streams.c:php_is_stream_path Unexecuted instantiation: transports.c:php_is_stream_path Unexecuted instantiation: userspace.c:php_is_stream_path Unexecuted instantiation: xp_socket.c:php_is_stream_path Unexecuted instantiation: zend_optimizer.c:php_is_stream_path Unexecuted instantiation: zend_system_id.c:php_is_stream_path Unexecuted instantiation: zend.c:php_is_stream_path Unexecuted instantiation: internal_functions_cli.c:php_is_stream_path Unexecuted instantiation: fuzzer-parser.c:php_is_stream_path Unexecuted instantiation: fuzzer-sapi.c:php_is_stream_path Unexecuted instantiation: fuzzer-tracing-jit.c:php_is_stream_path Unexecuted instantiation: fuzzer-exif.c:php_is_stream_path Unexecuted instantiation: fuzzer-unserialize.c:php_is_stream_path Unexecuted instantiation: fuzzer-function-jit.c:php_is_stream_path Unexecuted instantiation: fuzzer-json.c:php_is_stream_path Unexecuted instantiation: fuzzer-unserializehash.c:php_is_stream_path Unexecuted instantiation: fuzzer-execute.c:php_is_stream_path |
678 | | |
679 | | END_EXTERN_C() |
680 | | #endif |
681 | | |
682 | | /* Definitions for user streams */ |
683 | 157 | #define PHP_STREAM_IS_URL 1 |
684 | | |
685 | | /* Stream metadata definitions */ |
686 | | /* Create if referred resource does not exist */ |
687 | 0 | #define PHP_STREAM_META_TOUCH 1 |
688 | 0 | #define PHP_STREAM_META_OWNER_NAME 2 |
689 | 0 | #define PHP_STREAM_META_OWNER 3 |
690 | 0 | #define PHP_STREAM_META_GROUP_NAME 4 |
691 | 0 | #define PHP_STREAM_META_GROUP 5 |
692 | 0 | #define PHP_STREAM_META_ACCESS 6 |