Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:46040 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 3438 invoked from network); 13 Nov 2009 13:44:13 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 13 Nov 2009 13:44:13 -0000 Authentication-Results: pb1.pair.com smtp.mail=yoarvi@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=yoarvi@gmail.com; sender-id=pass; domainkeys=bad Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.216.186 as permitted sender) DomainKey-Status: bad X-DomainKeys: Ecelerity dk_validate implementing draft-delany-domainkeys-base-01 X-PHP-List-Original-Sender: yoarvi@gmail.com X-Host-Fingerprint: 209.85.216.186 mail-px0-f186.google.com Received: from [209.85.216.186] ([209.85.216.186:33109] helo=mail-px0-f186.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 84/D2-20372-CA26DFA4 for ; Fri, 13 Nov 2009 08:44:13 -0500 Received: by pxi16 with SMTP id 16so2361560pxi.29 for ; Fri, 13 Nov 2009 05:44:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type:content-transfer-encoding; bh=Dir7UzH0u5TnLgNg/fMsX8iH3Vqsvv6lpucDgLQ3Q9Y=; b=SwyZ2LSbzskzZe8RmVYU6qEc8HFsv53QSzh/nJwqGW9VzFkin7f8zZgpGFxQ8GegIT Xt+V3V43FaNGFNnez6fEY0oQNHbeQgW//xBEEHKlTHGIqj5mklb9Kj0MLKEG4wDM72tt XjuvmXSPlK/XwlZdiHITz+TgM40ok+nxzJb4M= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type :content-transfer-encoding; b=vueyiu1tZLFGj98o0iUCC43Uy12MmXEKcsGq5P98n6GXIXanPTGUpujirb+SpUdJls raTGP5ZeKpfF/DLBcbB00X5yU7n63r5D+omyPXguuPkyVtE9+R4VL5EsXU2r7o53Yjdg TS30ASVV/5d5Bf8DsedAJFpStyGHFiv7ordZE= MIME-Version: 1.0 Received: by 10.143.27.12 with SMTP id e12mr474059wfj.221.1258119850295; Fri, 13 Nov 2009 05:44:10 -0800 (PST) Date: Fri, 13 Nov 2009 19:14:10 +0530 Message-ID: To: internals@lists.php.net Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: Stuck debugging a PHP6 string-->unicode-->string conversion problem on Solaris (SPARC) From: yoarvi@gmail.com (Arvind Srinivasan) 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 =3D 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 =3D zend_unicode_to_string_ex(ZEND_U_CONVERTER(UG(filesystem_encod= ing_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 =3D 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 =3D 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 =3D 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 =3D path_type; (dbx 14) print status status =3D U_ZERO_ERROR (dbx 15) print *pathenc_len *pathenc_len =3D 18 (dbx 16) x pathenc/18c 0x00fd3860: '=EF=BF=BD' '=EF=BF=BD' '=EF=BF=BD' '=EF=BF=BD' '=EF=BF=BD= ' '=EF=BF=BD' '=EF=BF=BD' '=EF=BF=BD' '=EF=BF=BD' '=EF=BF=BD' '=EF=BF=BD' '= =EF=BF=BD' '=EF=BF=BD' '=EF=BF=BD' '=EF=BF=BD' '=EF=BF=BD' 0x00fd3870: '=EF=BF=BD' '=EF=BF=BD' (dbx 17) p pathenc pathenc =3D 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