#18706 [NEW]: Bug in imap_utf7_decode()
| From: | gamid at isayev dot net | Date: | Fri, 02 Aug 2002 13:51:26 +0000 |
| Subject: | #18706 [NEW]: Bug in imap_utf7_decode() | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-15821@lists.php.net to get a copy of this message | ||
From: gamid@isayev.net
Operating system:
PHP version: 4.2.2
PHP Bug Type: IMAP related
Bug description: Bug in imap_utf7_decode()
Function imap_utf7_decode() in PHP v4.2.2 has bug when IMAP folder name has
non ASCII characters.
Script 'test_utf7.php3' is attached to this posting to illustrate this
bug.
According PHP documentation imap_utf7_decode() returns "the decoded 8bit
data", but documentation says nothing about encoding of returned "8bit
data". When I try decode folder with name 'test&AN9ZJw-',
imap_utf7_decode() returns following string:
0x74, 0x65, 0x73, 0x74, 0x00, 0xDF, 0x59, 0x27
It looks as UTF-16 (UCS-2) string with missed '0x00' for ASCII characters.
If I'm right and imap_utf7_decode() returns UTF-16 string, this string
should be represented as:
0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0xDF, 0x59, 0x27
To fix this this problem I wrote patch for ext/imap/php_imap.c and attache
it to this posting.
Best regards,
Gamid Isayev
--- test_utf7.php3 ------------------------------------
<HTML>
<HEAD>
<TITLE>Test UTF7</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=utf-8">
</HEAD>
<BODY>
<?
$folder = 'test&AN9ZJw-';
echo "folder (modified UTF-7): $folder<BR><BR>\n";
echo "<strong>mb_convert_encoding test</strong><BR>\n";
$test = $folder;
$test = mb_convert_encoding($test, "UTF-8", "UTF7-IMAP");
echo " folder decoded: [$test]<BR>\n";
$test = mb_convert_encoding($test, "UTF7-IMAP", "UTF-8");
echo "encoded again: [", $test, "]<BR>\n";
$test = mb_convert_encoding($test, "UTF-8", "UTF7-IMAP");
echo "decoded again: [", $test, "]<BR><BR>\n";
echo "<strong>imap_utf7_decode test</strong><BR>\n";
$test = $folder;
$test = imap_utf7_decode($test);
echo "folder decoded: [", $test, "]<BR>\n";
$test = imap_utf7_encode($test);
echo "encoded again: [", $test, "]<BR>\n";
$test = imap_utf7_decode($test);
echo "decoded again: [", $test, "]<BR><BR>\n";
?>
</BODY>
</HTML>
--- end of test_utf7.php3 -----------------------------
--- ext/imap/php_imap.c -------------------------------
--- php_imap.c Mon Jul 29 15:17:45 2002
+++ php_imap.c Mon Jul 29 15:18:27 2002
@@ -2215,14 +2215,14 @@
php_error(E_WARNING, "imap_utf7_decode:
Invalid modified UTF-7 character: `%c'", *inp);
RETURN_FALSE;
} else if (*inp != '&') {
- outlen++;
+ outlen += 2;
} else if (inp + 1 == endp) {
php_error(E_WARNING, "imap_utf7_decode:
Unexpected end of string");
RETURN_FALSE;
} else if (inp[1] != '-') {
state = ST_DECODE0;
} else {
- outlen++;
+ outlen += 2;
inp++;
}
} else if (*inp == '-') {
@@ -2272,8 +2272,11 @@
if (*inp == '&' && inp[1] != '-') {
state = ST_DECODE0;
}
- else if ((*outp++ = *inp) == '&') {
- inp++;
+ else {
+ *outp++ = 0x00;
+ if ((*outp++ = *inp) == '&') {
+ inp++;
+ }
}
}
else if (*inp == '-') {
--- end of ext/imap/php_imap.c ------------------------
--
Edit bug report at http://bugs.php.net/?id=18706&edit=1
--
Fixed in CVS: http://bugs.php.net/fix.php?id=18706&r=fixedcvs
Fixed in release: http://bugs.php.net/fix.php?id=18706&r=alreadyfixed
Need backtrace: http://bugs.php.net/fix.php?id=18706&r=needtrace
Try newer version: http://bugs.php.net/fix.php?id=18706&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=18706&r=support
Expected behavior: http://bugs.php.net/fix.php?id=18706&r=notwrong
Not enough info: http://bugs.php.net/fix.php?id=18706&r=notenoughinfo
Submitted twice: http://bugs.php.net/fix.php?id=18706&r=submittedtwice
register_globals: http://bugs.php.net/fix.php?id=18706&r=globals