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
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
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 12:01:31 2024 UTC