diff options
author | Yury Melnichek <melnichek@gmail.com> | 2012-09-25 21:37:18 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:43:50 +0300 |
commit | 1aabac1393098d8ce12b059cfe712c648b42fc56 (patch) | |
tree | 627f1b669051d38bc767fc910cb3689d198a304d /coding | |
parent | 122429fbf20f839cd36db16713891228bc1c4ec0 (diff) |
BlobStorage: more code review fixes.
Diffstat (limited to 'coding')
-rw-r--r-- | coding/blob_storage.cpp | 15 | ||||
-rw-r--r-- | coding/dd_vector.hpp | 5 |
2 files changed, 14 insertions, 6 deletions
diff --git a/coding/blob_storage.cpp b/coding/blob_storage.cpp index d35f7e13ba..21995fdaf9 100644 --- a/coding/blob_storage.cpp +++ b/coding/blob_storage.cpp @@ -36,21 +36,24 @@ BlobStorage::~BlobStorage() void BlobStorage::Init() { - string header(3, ' '); - ReadFromPos(*m_pReader, 0, &header[0], 3); + uint32_t const HEADER_TAG_SIZE = 3; + uint32_t const HEADER_SIZE = 4; + string header(HEADER_TAG_SIZE, ' '); + ReadFromPos(*m_pReader, 0, &header[0], HEADER_TAG_SIZE); if (header != "Blb") MYTHROW(BlobStorage::OpenException, (header)); - m_bitsInChunkSize = ReadPrimitiveFromPos<uint8_t>(*m_pReader, 3); + + m_bitsInChunkSize = ReadPrimitiveFromPos<uint8_t>(*m_pReader, HEADER_TAG_SIZE); uint64_t const fileSize = m_pReader->Size(); - uint32_t const blobCount = ReadPrimitiveFromPos<uint32_t>(*m_pReader, fileSize - 4); + uint32_t const blobCount = ReadPrimitiveFromPos<uint32_t>(*m_pReader, fileSize - HEADER_SIZE); m_blobInfo.Init(PolymorphReader(m_pReader->CreateSubReader( - fileSize - 4 - 4 * blobCount, + fileSize - HEADER_SIZE - 4 * blobCount, 4 * blobCount))); uint32_t const chunkCount = (blobCount > 0 ? (m_blobInfo[blobCount - 1] >> m_bitsInChunkSize) + 1 : 0); m_chunkOffset.Init(PolymorphReader(m_pReader->CreateSubReader( - fileSize - 4 - 4 * blobCount - 4 * chunkCount, + fileSize - HEADER_SIZE - 4 * blobCount - 4 * chunkCount, 4 * chunkCount))); } diff --git a/coding/dd_vector.hpp b/coding/dd_vector.hpp index 3661c18f64..f31452d6d9 100644 --- a/coding/dd_vector.hpp +++ b/coding/dd_vector.hpp @@ -4,6 +4,7 @@ #include "../base/assert.hpp" #include "../base/base.hpp" +#include "../base/exception.hpp" #include "../base/src_point.hpp" #include "../std/type_traits.hpp" @@ -23,6 +24,8 @@ public: typedef TDifference difference_type; typedef TReader ReaderType; + DECLARE_EXCEPTION(OpenException, RootException); + DDVector() : m_Size(0) {} explicit DDVector(TReader const & reader) : m_reader(reader) @@ -163,6 +166,8 @@ public: private: void InitSize() { + if ((m_reader.Size() % sizeof(T)) != 0) + MYTHROW(OpenException, (m_reader.Size(), sizeof(T))); // TODO: Check that reader.Size() % sizeof(T) == 0 m_Size = m_reader.Size() / sizeof(T); } |