I had 2 cases where null bytes \0
are being appended to my data.
1.Casting object to an array
class myClass {
private $var;
function __construct() {}
}
$myObject = (array) new myClass();
var_dump(array_map("addslashes", array_keys($myObject)));
Outputs:
array(1) { [0]=> string(14) "\0myClass\0var" }
2.When decrypting encrypted data:
function encrypt_data($data) {
return base64_encode(mcrypt_encrypt(MCRYPT_BLOWFISH , SALT , $data , MCRYPT_MODE_ECB));
}
function decrypt_data($data) {
$data = base64_decode($data);
return mcrypt_decrypt(MCRYPT_BLOWFISH , SALT , $data , MCRYPT_MODE_ECB);
}
$data = '12345678901234567 aasdasd';
$edata = encrypt_data($data);
var_dump(addslashes(decrypt_data($edata)));
Outputs:
string(39) "12345678901234567 aasdasd\0\0\0\0\0\0\0"
But I would never notice \0
s if not addslashes
function. Why just var_dump()
does not show those ? var_dump("Hello\0 World");
for example outputs 'Hello World'. In my opinion bad representation of data. And as far as I know \0
byte is end of char array (string in PHP) in C and PHP is implemented in C.