Fix packet password on exports, move __unserialize() to EncodeUTF8::decode
This commit is contained in:
parent
dbbfe46cb9
commit
03c4b87cdd
@ -200,9 +200,9 @@ class Message extends FTNBase
|
|||||||
* Parse a message from a packet
|
* Parse a message from a packet
|
||||||
*
|
*
|
||||||
* @param string $msg
|
* @param string $msg
|
||||||
* @param Domain|null $domain
|
* @param Zone|null $zone
|
||||||
* @return Message
|
* @return Message
|
||||||
* @throws InvalidPacketException
|
* @throws \Exception
|
||||||
*/
|
*/
|
||||||
public static function parseMessage(string $msg,Zone $zone=NULL): self
|
public static function parseMessage(string $msg,Zone $zone=NULL): self
|
||||||
{
|
{
|
||||||
@ -402,34 +402,7 @@ class Message extends FTNBase
|
|||||||
*/
|
*/
|
||||||
public function __unserialize(array $values): void
|
public function __unserialize(array $values): void
|
||||||
{
|
{
|
||||||
$properties = (new \ReflectionClass($this))->getProperties();
|
$this->decode($values);
|
||||||
|
|
||||||
$class = get_class($this);
|
|
||||||
|
|
||||||
foreach ($properties as $property) {
|
|
||||||
if ($property->isStatic()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$name = $property->getName();
|
|
||||||
$decode = in_array($name,self::cast_utf8);
|
|
||||||
|
|
||||||
if ($property->isPrivate()) {
|
|
||||||
$name = "\0{$class}\0{$name}";
|
|
||||||
} elseif ($property->isProtected()) {
|
|
||||||
$name = "\0*\0{$name}";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! array_key_exists($name, $values)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$property->setAccessible(true);
|
|
||||||
|
|
||||||
$property->setValue(
|
|
||||||
$this, $decode ? utf8_decode($values[$name]) : $values[$name]
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -314,20 +314,15 @@ class Packet extends FTNBase implements \Iterator, \Countable
|
|||||||
*/
|
*/
|
||||||
public function __toString(): string
|
public function __toString(): string
|
||||||
{
|
{
|
||||||
// Cache the packet creation
|
$return = $this->createHeader();
|
||||||
static $return = NULL;
|
|
||||||
|
|
||||||
if (is_null($return)) {
|
foreach ($this->messages as $o) {
|
||||||
$return = $this->createHeader();
|
if ($o->packed)
|
||||||
|
$return .= "\02\00".(string)$o;
|
||||||
foreach ($this->messages as $o) {
|
|
||||||
if ($o->packed)
|
|
||||||
$return .= "\02\00".(string)$o;
|
|
||||||
}
|
|
||||||
|
|
||||||
$return .= "\00\00";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$return .= "\00\00";
|
||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -337,7 +332,7 @@ class Packet extends FTNBase implements \Iterator, \Countable
|
|||||||
private function createHeader(): string
|
private function createHeader(): string
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$a = pack(collect(self::v2header)->pluck(1)->join(''),
|
$a = pack(collect(self::v2header)->merge(['password' => [0x1a,'a8',8]])->pluck(1)->join(''),
|
||||||
$this->ff,
|
$this->ff,
|
||||||
$this->tf,
|
$this->tf,
|
||||||
Arr::get($this->header,'y'),
|
Arr::get($this->header,'y'),
|
||||||
|
@ -7,6 +7,38 @@ namespace App\Traits;
|
|||||||
|
|
||||||
trait EncodeUTF8
|
trait EncodeUTF8
|
||||||
{
|
{
|
||||||
|
private function decode(array $values): void
|
||||||
|
{
|
||||||
|
$properties = (new \ReflectionClass($this))->getProperties();
|
||||||
|
|
||||||
|
$class = get_class($this);
|
||||||
|
|
||||||
|
foreach ($properties as $property) {
|
||||||
|
if ($property->isStatic()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$name = $property->getName();
|
||||||
|
$decode = in_array($name,self::cast_utf8);
|
||||||
|
|
||||||
|
if ($property->isPrivate()) {
|
||||||
|
$name = "\0{$class}\0{$name}";
|
||||||
|
} elseif ($property->isProtected()) {
|
||||||
|
$name = "\0*\0{$name}";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! array_key_exists($name,$values)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$property->setAccessible(true);
|
||||||
|
|
||||||
|
$property->setValue(
|
||||||
|
$this,$decode ? utf8_decode($values[$name]) : $values[$name]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private function encode(): array
|
private function encode(): array
|
||||||
{
|
{
|
||||||
$values = [];
|
$values = [];
|
||||||
|
Loading…
Reference in New Issue
Block a user