File tree Expand file tree Collapse file tree 2 files changed +44
-4
lines changed Expand file tree Collapse file tree 2 files changed +44
-4
lines changed Original file line number Diff line number Diff line change @@ -202,18 +202,21 @@ static inline void spl_filesystem_object_get_file_name(spl_filesystem_object *in
202
202
{
203
203
char slash = SPL_HAS_FLAG (intern -> flags , SPL_FILE_DIR_UNIXPATHS ) ? '/' : DEFAULT_SLASH ;
204
204
205
- if (!intern -> file_name ) {
206
- switch (intern -> type ) {
205
+ switch (intern -> type ) {
207
206
case SPL_FS_INFO :
208
207
case SPL_FS_FILE :
209
- php_error_docref (NULL TSRMLS_CC , E_ERROR , "Object not initialized ");
208
+ if (!intern -> file_name ) {
209
+ php_error_docref (NULL TSRMLS_CC , E_ERROR , "Object not initialized ");
210
+ }
210
211
break ;
211
212
case SPL_FS_DIR :
213
+ if (intern -> file_name ) {
214
+ efree (intern -> file_name );
215
+ }
212
216
intern -> file_name_len = spprintf (& intern -> file_name , 0 , "%s%c%s" ,
213
217
spl_filesystem_object_get_path (intern , NULL TSRMLS_CC ),
214
218
slash , intern -> u .dir .entry .d_name );
215
219
break ;
216
- }
217
220
}
218
221
} /* }}} */
219
222
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ Bug #68557 (SplFileInfo::getPathname() may be broken)
3
+ --FILE--
4
+ <?php
5
+ mkdir (__DIR__ . DIRECTORY_SEPARATOR . 'tmp ' );
6
+ touch (__DIR__ . DIRECTORY_SEPARATOR . 'tmp ' . DIRECTORY_SEPARATOR . 'a ' );
7
+ touch (__DIR__ . DIRECTORY_SEPARATOR . 'tmp ' . DIRECTORY_SEPARATOR . 'b ' );
8
+
9
+ $ d = new DirectoryIterator (__DIR__ . DIRECTORY_SEPARATOR . 'tmp ' );
10
+
11
+ $ d ->seek (0 );
12
+ var_dump ($ d ->current ()->getPathname ());
13
+
14
+ $ d ->seek (1 );
15
+ var_dump ($ d ->current ()->getPathname ());
16
+
17
+ $ d ->seek (0 );
18
+ var_dump ($ d ->current ()->getPathname ());
19
+
20
+ $ d ->seek (1 );
21
+ var_dump ($ d ->current ()->getPathname ());
22
+
23
+ $ d ->seek (2 );
24
+ var_dump ($ d ->current ()->getPathname ());
25
+ ?>
26
+ --CLEAN--
27
+ <?php
28
+ unlink (__DIR__ . DIRECTORY_SEPARATOR . 'tmp ' . DIRECTORY_SEPARATOR . 'a ' );
29
+ unlink (__DIR__ . DIRECTORY_SEPARATOR . 'tmp ' . DIRECTORY_SEPARATOR . 'b ' );
30
+ rmdir (__DIR__ . DIRECTORY_SEPARATOR . 'tmp ' );
31
+ ?>
32
+ --EXPECTF--
33
+ string(%d) "%s/tmp/b"
34
+ string(%d) "%s/tmp/a"
35
+ string(%d) "%s/tmp/b"
36
+ string(%d) "%s/tmp/a"
37
+ string(%d) "%s/tmp/.."
You can’t perform that action at this time.
0 commit comments