php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #5321 quoted_printable_decode not decoding properly
Submitted: 2000-07-02 00:20 UTC Modified: 2009-11-14 15:43 UTC
From: mcp at abrax dot net Assigned: kir (profile)
Status: Closed Package: Strings related
PHP Version: 4.0.1pl2 OS: redhat 6.1
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: mcp at abrax dot net
New email:
PHP Version: OS:

 

 [2000-07-02 00:20 UTC] mcp at abrax dot net
The following code will produce the correct results (with a probable speed increase).

/*
*
* Decoding  Quoted-printable string.
*
*** modified 2000.06.30 by Mark Peters
*** fixed code to recognize '= cr lf' sequence as soft newline
*** and ignore (hide) mis-formed or bogus escape sequences
*/

/* {{{ proto string quoted_printable_decode(string str)
   Convert a quoted-printable string to an 8 bit string */

PHP_FUNCTION(quoted_printable_decode)
{
	pval **arg1;
	char *str;
	int i = 0, j = 0;

	
    if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1,&arg1)==FAILURE) 
    {
    	WRONG_PARAM_COUNT;
    }
    convert_to_string_ex(arg1);
    
    str = (*arg1)->value.str.val;
    while ( str[i] )
    {
      if (str[i] == '=')   // start of escape sequence
      {
         // look for soft line break sequence ( = cr lf )
         if (str[i+1] == 13 && str[i+2] == 10)
         {
             i += 3;	// skip over crlf sequence
             continue;
         }

         // first digit not hex?
         if (!isxdigit((int)str[i+1]))
         {
             ++i;
             continue;
         }
         // second digit not hex?
         if (!isxdigit((int)str[i+2]))
         {
             i += 2;
             continue;
         }

         // good escape code
         str[j++] = (php_hex2int((int)str[i+1]) << 4 ) + php_hex2int((int)str[i+2]);
         i += 3;
         continue;
      } 

      str[j++] = str[i++];

    }

    str[j] = '\0';
    
    RETVAL_STRINGL(str, j, 1)
}


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2000-07-27 20:18 UTC] waldschrott@php.net
checking out
 [2000-09-04 21:03 UTC] sniper@php.net
Is this still happening with php4.0.2 (or preferrably latest CVS) ??

--Jani
 [2000-10-02 22:26 UTC] sniper@php.net
Could someone check this out who knows the internals of
ext/standard/quot_print.c ??

--Jani
 [2000-11-17 06:36 UTC] kir@php.net
Should be fixed in the latest CVS. 
 [2000-11-20 05:10 UTC] kir@php.net
Check the latest version on http://snaps.php.net 
or wait until 4.0.4.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 16:01:28 2024 UTC