Hi, I need some help debugging a test failure (./ext/spl/tests/DirectoryIterator_getBasename_basic_test goes into an infinite loop) on Solaris 10 (SPARC) with PHP6 trunk.
I've narrowed the problem down to a difference between what zspprintf() converts to unicode and is then subsequently converted to string by zend_unicode_to_string_ex(). spl_filesystem_object_get_file_name creates a unicoded pathname (to an entry in a directory) by invoking zspprintf: intern->file_name_len = zspprintf(path_type, &intern->file_name, 0, "%R%c%s", path_type, path.v, slash, intern->u.dir.entry.d_name); php_u_stat on intern->file_name ends up calling num_conv = zend_unicode_to_string_ex(ZEND_U_CONVERTER(UG(filesystem_encoding_conv)), pathenc, pathenc_len, path, path_len, &status); in main/streams/streams.c After this call, pathenc contains garbage characters in place of what was written into intern->file_name by zspprint for %c%s. Whatever was written in as %R comes out correctly in pathenc. As a test, I tried the following: intern->file_name_len = zspprintf(path_type, &intern->file_name, 0, "/tmp/."); zend_unicode_to_string_ex(ZEND_U_CONVERTER(UG(filesystem_encoding_conv)), &pathenc, pathenc_len, intern->file_name.u, intern->file_name_len, &status); Here's my debugger session which shows that I don't get back the string '/tmp/.' from zend_unicode_to_string_ex. (dbx 9) list 204,208 204 intern->file_name_len = zspprintf(path_type, &intern->file_name, 0, "/tmp/."); 205 206 zend_unicode_to_string_ex(ZEND_U_CONVERTER(UG(filesystem_encoding_conv)), 207 &pathenc, pathenc_len, intern->file_name.u, intern->file_name_len, &status); (dbx 10) n t...@1 (l...@1) stopped in spl_filesystem_object_get_file_name at line 207 in file "spl_directory.c" 207 &pathenc, pathenc_len, intern->file_name.u, intern->file_name_len, &status); (dbx 11) print intern->file_name_len intern->file_name_len = 6 (dbx 12) examine intern->file_name.v/12c 0x00fd4b88: '/' '\0' 't' '\0' 'm' '\0' 'p' '\0' '/' '\0' '.' '\0' (dbx 13) n t...@1 (l...@1) stopped in spl_filesystem_object_get_file_name at line 213 in file "spl_directory.c" 213 intern->file_name_type = path_type; (dbx 14) print status status = U_ZERO_ERROR (dbx 15) print *pathenc_len *pathenc_len = 18 (dbx 16) x pathenc/18c 0x00fd3860: '�' '�' '�' '�' '�' '�' '�' '�' '�' '�' '�' '�' '�' '�' '�' '�' 0x00fd3870: '�' '�' (dbx 17) p pathenc pathenc = 0xfd3860 "\xe2\xbc\x80\xe7\x90\x80\xe6\xb4\x80\xe7\x80\x80\xe2\xbc\x80\xe2\xb8\x80" How should I proceed? Thanks, Arvi -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php