Bug #80870 [Fbk->Opn]: base64_decode: Concatenated base64 blocks are corrupted

From: Date: Tue, 16 Mar 2021 16:48:06 +0000
Subject: Bug #80870 [Fbk->Opn]: base64_decode: Concatenated base64 blocks are corrupted
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-232791@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=80870&edit=1

 ID:                 80870
 User updated by:    bugs at jth dot net
 Reported by:        bugs at jth dot net
 Summary:            base64_decode: Concatenated base64 blocks are
                     corrupted
-Status:             Feedback
+Status:             Open
 Type:               Bug
 Package:            Strings related
 Operating System:   Linux
 PHP Version:        7.4.16
 Block user comment: N
 Private report:     N

 New Comment:

The case is:

The email program will produce the email body as a valid base64 block and concatenate the selected
signature as a separate valid base64 block. Thus the email body will consist of two valid base64
blocks.

Using the linux base64 program this body is decoded correctly.

As we are using a PHP script to interpret emails from different sources, this base64_decode
behaviour is highly inconvenient and I don't see, why it cannot decode consequtive base64
blocks correctly instead of the current partly corrupted way.


Previous Comments:
------------------------------------------------------------------------
[2021-03-15 22:20:23] requinix@php.net

= is not valid for Base64 when located in the middle of an input string. As such it will be ignored
(since $strict is not being used) and PHP will attempt to decode
"TGluZSBuciAxIGJjZGVmZwoTGluZSBuciAyIAo=".
The line feed is irrelevant.

What is this "may occur as input from an email"?

------------------------------------------------------------------------
[2021-03-15 20:28:36] bugs at jth dot net

Description:
------------
When decoding a string containing two or more base64 blocks with line feeds in the base64 text the
latter blocks are corrupted.

This may occur as input from an email generated by some mail programs.

Test script:
---------------
$s1 = base64_encode("Line nr 1 bcdefg\n");
$s2 = base64_encode("Line nr 2 \n");
$str = $s1."\n".$s2;
echo $str
echo base64_decode($str);



Expected result:
----------------
TGluZSBuciAxIGJjZGVmZwo=
TGluZSBuciAyIAo=

Line nr 1 bcdefg
Line nr 2 




Actual result:
--------------
Result:
TGluZSBuciAxIGJjZGVmZwo=
TGluZSBuciAyIAo=

Line nr 1 bcdefg
(corrupted text)


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



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


Thread (19 messages)

« previous php.bugs (#232791) next »