diff options
author | f0b0s <f0b0s@yandex-team.ru> | 2022-02-10 16:46:51 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:46:51 +0300 |
commit | cdae02d225fb5b3afbb28990e79a7ac6c9125327 (patch) | |
tree | 49e222ea1c5804306084bb3ae065bb702625360f /contrib/libs/crcutil/protected_crc.h | |
parent | deabc5260ac2e17b8f5152ee060bec1740613540 (diff) | |
download | ydb-cdae02d225fb5b3afbb28990e79a7ac6c9125327.tar.gz |
Restoring authorship annotation for <f0b0s@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/crcutil/protected_crc.h')
-rw-r--r-- | contrib/libs/crcutil/protected_crc.h | 122 |
1 files changed, 61 insertions, 61 deletions
diff --git a/contrib/libs/crcutil/protected_crc.h b/contrib/libs/crcutil/protected_crc.h index 81a7051bc8..762fceda9b 100644 --- a/contrib/libs/crcutil/protected_crc.h +++ b/contrib/libs/crcutil/protected_crc.h @@ -1,61 +1,61 @@ -// Copyright 2010 Google Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Protects CRC tables with its own CRC. -// CRC tables get corrupted too, and if corruption is -// not caught, data poisoning becomes a reality. - -#ifndef CRCUTIL_PROTECTED_CRC_H_ -#define CRCUTIL_PROTECTED_CRC_H_ - -namespace crcutil { - -#pragma pack(push, 16) - -// Class CrcImplementation should not have virtual functions: -// vptr is stored as the very first field, vptr value is defined -// at runtime, so it is impossible to CRC(*this) once and -// guarantee that this value will not change from run to run. -// -template<typename CrcImplementation> class ProtectedCrc - : public CrcImplementation { - public: - typedef typename CrcImplementation::Crc Crc; - - // Returns check value that the caller should compare - // against pre-computed, trusted constant. - // - // Computing SelfCheckValue() after CRC initialization, - // storing it in memory, and periodically checking against - // stored value may not work: if CRC tables were initialized - // incorrectly and/or had been corrupted during initialization, - // CheckValue() will return garbage. Garbage in, garbage out. - // Consequitive checks will not detect a problem, the application - // will happily produce and save the data with corrupt CRC. - // - // The application should call SelfCheckValue() regularly: - // 1. First and foremost, on every CRC mismatch. - // 2. After CRC'ing the data but before sending it out or writing it. - // 3. Worst case, every Nth CRC'ed byte or every Nth call to CRC. - // - Crc SelfCheckValue() const { - return CrcDefault(this, sizeof(*this), 0); - } -} GCC_ALIGN_ATTRIBUTE(16); - -#pragma pack(pop) - -} // namespace crcutil - -#endif // CRCUTIL_PROTECTED_CRC_H_ +// Copyright 2010 Google Inc. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Protects CRC tables with its own CRC. +// CRC tables get corrupted too, and if corruption is +// not caught, data poisoning becomes a reality. + +#ifndef CRCUTIL_PROTECTED_CRC_H_ +#define CRCUTIL_PROTECTED_CRC_H_ + +namespace crcutil { + +#pragma pack(push, 16) + +// Class CrcImplementation should not have virtual functions: +// vptr is stored as the very first field, vptr value is defined +// at runtime, so it is impossible to CRC(*this) once and +// guarantee that this value will not change from run to run. +// +template<typename CrcImplementation> class ProtectedCrc + : public CrcImplementation { + public: + typedef typename CrcImplementation::Crc Crc; + + // Returns check value that the caller should compare + // against pre-computed, trusted constant. + // + // Computing SelfCheckValue() after CRC initialization, + // storing it in memory, and periodically checking against + // stored value may not work: if CRC tables were initialized + // incorrectly and/or had been corrupted during initialization, + // CheckValue() will return garbage. Garbage in, garbage out. + // Consequitive checks will not detect a problem, the application + // will happily produce and save the data with corrupt CRC. + // + // The application should call SelfCheckValue() regularly: + // 1. First and foremost, on every CRC mismatch. + // 2. After CRC'ing the data but before sending it out or writing it. + // 3. Worst case, every Nth CRC'ed byte or every Nth call to CRC. + // + Crc SelfCheckValue() const { + return CrcDefault(this, sizeof(*this), 0); + } +} GCC_ALIGN_ATTRIBUTE(16); + +#pragma pack(pop) + +} // namespace crcutil + +#endif // CRCUTIL_PROTECTED_CRC_H_ |