Improve Slice::truncate usage.
This commit is contained in:
parent
b07a9efb2e
commit
e031a2c6c1
@ -32,9 +32,9 @@ class ProxySecret {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Slice get_proxy_secret() const {
|
Slice get_proxy_secret() const {
|
||||||
auto proxy_secret = Slice(secret_).truncate(17);
|
Slice proxy_secret(secret_);
|
||||||
if (proxy_secret.size() == 17) {
|
if (proxy_secret.size() >= 17) {
|
||||||
proxy_secret.remove_prefix(1);
|
return proxy_secret.substr(1, 16);
|
||||||
}
|
}
|
||||||
return proxy_secret;
|
return proxy_secret;
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,7 @@ void IntermediateTransport::write_prepare_inplace(BufferWriter *message, bool qu
|
|||||||
size_t append_size = 0;
|
size_t append_size = 0;
|
||||||
if (with_padding()) {
|
if (with_padding()) {
|
||||||
append_size = Random::secure_uint32() % 16;
|
append_size = Random::secure_uint32() % 16;
|
||||||
MutableSlice append = message->prepare_append().truncate(append_size);
|
MutableSlice append = message->prepare_append().substr(0, append_size);
|
||||||
CHECK(append.size() == append_size);
|
CHECK(append.size() == append_size);
|
||||||
Random::secure_bytes(append);
|
Random::secure_bytes(append);
|
||||||
message->confirm_append(append.size());
|
message->confirm_append(append.size());
|
||||||
|
@ -226,7 +226,7 @@ Status Transport::read_crypto_impl(int X, MutableSlice message, const AuthKey &a
|
|||||||
auto *header = reinterpret_cast<HeaderT *>(message.begin());
|
auto *header = reinterpret_cast<HeaderT *>(message.begin());
|
||||||
*header_ptr = header;
|
*header_ptr = header;
|
||||||
auto to_decrypt = MutableSlice(header->encrypt_begin(), message.uend());
|
auto to_decrypt = MutableSlice(header->encrypt_begin(), message.uend());
|
||||||
to_decrypt = to_decrypt.truncate(to_decrypt.size() & ~15);
|
to_decrypt.truncate(to_decrypt.size() & ~15);
|
||||||
if (to_decrypt.size() % 16 != 0) {
|
if (to_decrypt.size() % 16 != 0) {
|
||||||
return Status::Error(PSLICE() << "Invalid mtproto message: size of encrypted part is not multiple of 16 [size = "
|
return Status::Error(PSLICE() << "Invalid mtproto message: size of encrypted part is not multiple of 16 [size = "
|
||||||
<< to_decrypt.size() << "]");
|
<< to_decrypt.size() << "]");
|
||||||
|
@ -2041,7 +2041,7 @@ void SecretChatActor::calc_key_hash() {
|
|||||||
auto sha256_slice = MutableSlice(sha256_buf, 32);
|
auto sha256_slice = MutableSlice(sha256_buf, 32);
|
||||||
sha256(pfs_state_.auth_key.key(), sha256_slice);
|
sha256(pfs_state_.auth_key.key(), sha256_slice);
|
||||||
|
|
||||||
auth_state_.key_hash = sha1_slice.truncate(16).str() + sha256_slice.truncate(20).str();
|
auth_state_.key_hash = PSTRING() << sha1_slice.substr(0, 16) << sha256_slice.substr(0, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SecretChatActor::send_update_secret_chat() {
|
void SecretChatActor::send_update_secret_chat() {
|
||||||
|
@ -367,7 +367,7 @@ Result<size_t> FileDownloader::process_part(Part part, NetQueryPtr net_query) {
|
|||||||
bytes.as_slice());
|
bytes.as_slice());
|
||||||
}
|
}
|
||||||
|
|
||||||
auto slice = bytes.as_slice().truncate(part.size);
|
auto slice = bytes.as_slice().substr(0, part.size);
|
||||||
TRY_STATUS(acquire_fd());
|
TRY_STATUS(acquire_fd());
|
||||||
LOG(INFO) << "Got " << slice.size() << " bytes at offset " << part.offset << " for \"" << path_ << '"';
|
LOG(INFO) << "Got " << slice.size() << " bytes at offset " << part.offset << " for \"" << path_ << '"';
|
||||||
TRY_RESULT(written, fd_.pwrite(slice, part.offset));
|
TRY_RESULT(written, fd_.pwrite(slice, part.offset));
|
||||||
|
@ -28,8 +28,7 @@ Status BinlogEvent::init(BufferSlice &&raw_event, bool check_crc) {
|
|||||||
data_ = MutableSlice(const_cast<char *>(slice_data.begin()), slice_data.size());
|
data_ = MutableSlice(const_cast<char *>(slice_data.begin()), slice_data.size());
|
||||||
crc32_ = static_cast<uint32>(parser.fetch_int());
|
crc32_ = static_cast<uint32>(parser.fetch_int());
|
||||||
if (check_crc) {
|
if (check_crc) {
|
||||||
CHECK(size_ >= TAIL_SIZE);
|
auto calculated_crc = crc32(raw_event.as_slice().substr(0, size_ - TAIL_SIZE));
|
||||||
auto calculated_crc = crc32(raw_event.as_slice().truncate(size_ - TAIL_SIZE));
|
|
||||||
if (calculated_crc != crc32_) {
|
if (calculated_crc != crc32_) {
|
||||||
return Status::Error(PSLICE() << "crc mismatch " << tag("actual", format::as_hex(calculated_crc))
|
return Status::Error(PSLICE() << "crc mismatch " << tag("actual", format::as_hex(calculated_crc))
|
||||||
<< tag("expected", format::as_hex(crc32_)) << public_to_string());
|
<< tag("expected", format::as_hex(crc32_)) << public_to_string());
|
||||||
@ -44,7 +43,7 @@ Status BinlogEvent::validate() const {
|
|||||||
if (raw_event_.size() < 4) {
|
if (raw_event_.size() < 4) {
|
||||||
return Status::Error("Too small event");
|
return Status::Error("Too small event");
|
||||||
}
|
}
|
||||||
uint32 size = TlParser(raw_event_.as_slice().truncate(4)).fetch_int();
|
uint32 size = TlParser(raw_event_.as_slice().substr(0, 4)).fetch_int();
|
||||||
if (size_ != size) {
|
if (size_ != size) {
|
||||||
return Status::Error(PSLICE() << "Size of event changed: " << tag("was", size_) << tag("now", size));
|
return Status::Error(PSLICE() << "Size of event changed: " << tag("was", size_) << tag("now", size));
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,8 @@ Result<size_t> BufferedFdBase<FdT>::flush_read(size_t max_read) {
|
|||||||
CHECK(read_);
|
CHECK(read_);
|
||||||
size_t result = 0;
|
size_t result = 0;
|
||||||
while (::td::can_read_local(*this) && max_read) {
|
while (::td::can_read_local(*this) && max_read) {
|
||||||
MutableSlice slice = read_->prepare_append().truncate(max_read);
|
MutableSlice slice = read_->prepare_append();
|
||||||
|
slice.truncate(max_read);
|
||||||
TRY_RESULT(x, FdT::read(slice));
|
TRY_RESULT(x, FdT::read(slice));
|
||||||
slice.truncate(x);
|
slice.truncate(x);
|
||||||
read_->confirm_append(x);
|
read_->confirm_append(x);
|
||||||
|
@ -36,7 +36,7 @@ class UdpWriter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t cnt;
|
size_t cnt;
|
||||||
auto status = fd.send_messages(::td::Span<UdpSocketFd::OutboundMessage>(messages).truncate(to_send_n), cnt);
|
auto status = fd.send_messages(Span<UdpSocketFd::OutboundMessage>(messages).truncate(to_send_n), cnt);
|
||||||
queue.pop_n(cnt);
|
queue.pop_n(cnt);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@ -51,7 +51,7 @@ class UdpReaderHelper {
|
|||||||
buffer_ = BufferSlice(RESERVED_SIZE);
|
buffer_ = BufferSlice(RESERVED_SIZE);
|
||||||
}
|
}
|
||||||
CHECK(buffer_.size() >= MAX_PACKET_SIZE);
|
CHECK(buffer_.size() >= MAX_PACKET_SIZE);
|
||||||
message.data = buffer_.as_slice().truncate(MAX_PACKET_SIZE);
|
message.data = buffer_.as_slice().substr(0, MAX_PACKET_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
UdpMessage extract_udp_message(UdpSocketFd::InboundMessage &message) {
|
UdpMessage extract_udp_message(UdpSocketFd::InboundMessage &message) {
|
||||||
|
@ -201,7 +201,8 @@ class BufferedStdinImpl {
|
|||||||
size_t result = 0;
|
size_t result = 0;
|
||||||
::td::sync_with_poll(*this);
|
::td::sync_with_poll(*this);
|
||||||
while (::td::can_read_local(*this) && max_read) {
|
while (::td::can_read_local(*this) && max_read) {
|
||||||
MutableSlice slice = writer_.prepare_append().truncate(max_read);
|
MutableSlice slice = writer_.prepare_append();
|
||||||
|
slice.truncate(max_read);
|
||||||
TRY_RESULT(x, file_fd_.read(slice));
|
TRY_RESULT(x, file_fd_.read(slice));
|
||||||
slice.truncate(x);
|
slice.truncate(x);
|
||||||
writer_.confirm_append(x);
|
writer_.confirm_append(x);
|
||||||
|
Loading…
Reference in New Issue
Block a user