Edit report at http://bugs.php.net/bug.php?id=50363&edit=1

 ID:                 50363
 Updated by:         fel...@php.net
 Reported by:        slusarz at curecanti dot org
 Summary:            Invalid parsing in convert.quoted-printable-decode
                     filter
-Status:             Verified
+Status:             Closed
 Type:               Bug
 Package:            Streams related
 Operating System:   *
 PHP Version:        5.*, 6
-Assigned To:        
+Assigned To:        felipe
 Block user comment: N
 Private report:     N

 New Comment:

This bug has been fixed in SVN.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.

Thanks for the patch! :)


Previous Comments:
------------------------------------------------------------------------
[2011-05-25 01:49:29] fel...@php.net

Automatic comment from SVN on behalf of felipe
Revision: http://svn.php.net/viewvc/?view=revision&revision=311407
Log: - Fixed bug #50363 (Invalid parsing in
convert.quoted-printable-decode filter)
  Patch by: slusarz at curecanti dot org

------------------------------------------------------------------------
[2010-02-05 22:00:29] slusarz at curecanti dot org

Here's a patch that works for me. (Doesn't deal with the issue of the
duplicative q-p code in PHP, but at least in makes the filtering code
work with lowercase hex).



--- filters.c.old       2010-02-05 14:56:57.536943283 -0700

+++ filters.c   2010-02-05 14:51:11.353644566 -0700

@@ -1051,18 +1051,17 @@

                        } /* break is missing intentionally */



                        case 2: {

-                               unsigned int nbl;

-

                                if (icnt <= 0) {

                                        goto out;

                                }

-                               nbl = (*ps >= 'A' ? *ps - 0x37 : *ps -
0x30);



-                               if (nbl > 15) {

+                               if (!isxdigit((int) *ps)) {

                                        err = PHP_CONV_ERR_INVALID_SEQ;

                                        goto out;

-                               }

-                               next_char = (next_char << 4) | nbl;

+                               }

+

+                               next_char = (next_char << 4) | (*ps >=
'A' ? *ps - 0x37 : *ps - 0x30);



                                scan_stat++;

                                ps++, icnt--;

------------------------------------------------------------------------
[2009-12-02 22:39:58] j...@php.net

We have (if I counted right) 3 different implementations for
encoding/decoding quoted-printable. And unfortunately filters.c has the
buggy one which requires the encoded hex chars be upper-case, since this
works:



<?php



$foo = "Sauvegarder=C3=A9ussi(e)";

// $foo = "Sauvegarder=c3=a9ussi(e)"; // Does not work!

$b = fopen('php://temp', 'w+');

stream_filter_append($b, 'convert.quoted-printable-decode',
STREAM_FILTER_WRITE);

fwrite($b, $foo);

rewind($b);

fpassthru($b);



?>



------------------------------------------------------------------------
[2009-12-02 20:17:34] slusarz at curecanti dot org

Description:
------------
Using the quoted-printable-decode filter on a stream produces an error. 
However, decoding the string using quoted_printable_decode() does not
fail.



The error is thrown whether stream_filter_append() is used or a while
!feof()/fwrite()/fread() loop is used.

Reproduce code:
---------------
$a = fopen('php://temp', 'r+');

fwrite($a, "SERVER: [ID job :3453 Backup rotation] Sauvegarde
r=c3=a9ussi(e)");

rewind($a);



$b = fopen('php://temp', 'r+');

$c = stream_filter_append($b, 'convert.quoted-printable-decode',
STREAM_FILTER_WRITE);

stream_copy_to_stream($a, $b);

rewind($b);

fpassthru($b);

stream_filter_remove($c);



rewind($a);

rewind($b);

fwrite($b, quoted_printable_decode(stream_get_contents($a)));

rewind($b);

fpassthru($b);



Expected result:
----------------
SERVER: [ID job :3453 Backup rotation] Sauvegarde réussi(e)

SERVER: [ID job :3453 Backup rotation] Sauvegarde réussi(e)

Actual result:
--------------
PHP Warning:  stream_copy_to_stream(): stream filter
(convert.quoted-printable-decode): invalid byte sequence in
/tmp/test.php on line 8

SERVER: [ID job :3453 Backup rotation] Sauvegarde réussi(e)


------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=50363&edit=1

Reply via email to