#15630 [Fbk]: imap_utf7_decode appears to be broken
| From: | kalowsky@php.net | Date: | Tue, 06 Aug 2002 22:40:43 +0000 |
| Subject: | #15630 [Fbk]: imap_utf7_decode appears to be broken | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-16099@lists.php.net to get a copy of this message | ||
ID: 15630
Updated by: kalowsky@php.net
Reported By: robert.marchand@umontreal.ca
Status: Feedback
Bug Type: IMAP related
Operating System: SGI Irix 6.5
PHP Version: 4.2.2
New Comment:
Please update your patch to the current CVS as I can't seem to find the
make it work against my cvs.
Previous Comments:
------------------------------------------------------------------------
[2002-08-06 17:41:21] gamid@isayev.net
According CVS only warning messages was changed in the function
imap_utf7_decode().
See diff between 1.134 (latest version of /ext/imap/php_imap.c in the
CVS) and 1.112.2.1 (version included into PHP 4.2.2).
Gamid Isayev
------------------------------------------------------------------------
[2002-08-06 17:11:51] kalowsky@php.net
can you please try a recent snapshot from snaps.php.net? It looks like
this has already been fixed in CVS.
------------------------------------------------------------------------
[2002-08-02 11:14:31] kalowsky@php.net
two reports on this, moving it from Bogus status to Open. Updating
version to 4.2.2 as well
Does anyone have access to an IMAP server using utf7 encoding that they
can test this out on?
------------------------------------------------------------------------
[2002-07-29 15:51:05] gamid@isayev.net
This is the updated patch for '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 == '-') {
------------------------------------------------------------------------
[2002-07-29 10:33:50] gamid@isayev.net
I have the same problem with imap_utf7_decode() in PHP v4.2.2
Script 'test_utf7.php3' is attached to this posting to illustrate this
problem.
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 Fri Jul 26 17:25:10 2002
+++ php_imap.c Fri Jul 26 17:26:28 2002
@@ -2215,7 +2215,7 @@
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;
@@ -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 ------------------------
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/15630
--
Edit this bug report at http://bugs.php.net/?id=15630&edit=1