mirror of
https://github.com/vale981/tdesktop
synced 2025-03-06 10:11:41 -05:00
Do not break type aliasing rule
This commit is contained in:
parent
55a6e70f74
commit
e200a7d502
1 changed files with 4 additions and 2 deletions
|
@ -608,11 +608,13 @@ public:
|
||||||
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_double) {
|
void read(const mtpPrime *&from, const mtpPrime *end, mtpTypeId cons = mtpc_double) {
|
||||||
if (from + 2 > end) throw mtpErrorInsufficient();
|
if (from + 2 > end) throw mtpErrorInsufficient();
|
||||||
if (cons != mtpc_double) throw mtpErrorUnexpected(cons, "MTPdouble");
|
if (cons != mtpc_double) throw mtpErrorUnexpected(cons, "MTPdouble");
|
||||||
*(uint64*)(&v) = (uint64)(((uint32*)from)[0]) | ((uint64)(((uint32*)from)[1]) << 32);
|
auto nv = (uint64)(((uint32*)from)[0]) | ((uint64)(((uint32*)from)[1]) << 32);
|
||||||
|
std::memcpy(&v, &nv, sizeof(v));
|
||||||
from += 2;
|
from += 2;
|
||||||
}
|
}
|
||||||
void write(mtpBuffer &to) const {
|
void write(mtpBuffer &to) const {
|
||||||
uint64 iv = *(uint64*)(&v);
|
uint64 iv;
|
||||||
|
std::memcpy(&iv, &v, sizeof(v));
|
||||||
to.push_back((mtpPrime)(iv & 0xFFFFFFFFL));
|
to.push_back((mtpPrime)(iv & 0xFFFFFFFFL));
|
||||||
to.push_back((mtpPrime)(iv >> 32));
|
to.push_back((mtpPrime)(iv >> 32));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue