summaryrefslogtreecommitdiff
path: root/core/fpdfapi/parser/cpdf_cross_ref_table.cpp
diff options
context:
space:
mode:
authorLei Zhang <thestig@chromium.org>2018-08-09 08:05:00 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-08-09 08:05:00 +0000
commit74557b1b4746bc80283f0acf248242fdcab71deb (patch)
treef3eb45cc5c574d450537c4632a17dd3bc77c8bde /core/fpdfapi/parser/cpdf_cross_ref_table.cpp
parentf765805983d157e9a21d7202ba49148f24d226f3 (diff)
downloadpdfium-74557b1b4746bc80283f0acf248242fdcab71deb.tar.xz
Revert "Rework of CPDF_Parser::GetLastObjNum."
This reverts commit b07deb3fc1f54bd700a66df573bfcbc4bcc1d787. Reason for revert: Causing https://crbug.com/870467 Original change's description: > Rework of CPDF_Parser::GetLastObjNum. > > Change-Id: I0481774858a9d9823580e1207807e35be8a9eea9 > Reviewed-on: https://pdfium-review.googlesource.com/36270 > Reviewed-by: Lei Zhang <thestig@chromium.org> > Commit-Queue: Art Snake <art-snake@yandex-team.ru> TBR=thestig@chromium.org,art-snake@yandex-team.ru # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: I58e23c752a582c21be8ba45e3538e63c0fa64504 Reviewed-on: https://pdfium-review.googlesource.com/39810 Reviewed-by: Lei Zhang <thestig@chromium.org> Commit-Queue: Lei Zhang <thestig@chromium.org>
Diffstat (limited to 'core/fpdfapi/parser/cpdf_cross_ref_table.cpp')
-rw-r--r--core/fpdfapi/parser/cpdf_cross_ref_table.cpp35
1 files changed, 7 insertions, 28 deletions
diff --git a/core/fpdfapi/parser/cpdf_cross_ref_table.cpp b/core/fpdfapi/parser/cpdf_cross_ref_table.cpp
index d25c5e0167..77c0e8136c 100644
--- a/core/fpdfapi/parser/cpdf_cross_ref_table.cpp
+++ b/core/fpdfapi/parser/cpdf_cross_ref_table.cpp
@@ -4,21 +4,11 @@
#include "core/fpdfapi/parser/cpdf_cross_ref_table.h"
-#include <algorithm>
#include <utility>
#include "core/fpdfapi/parser/cpdf_dictionary.h"
-#include "core/fpdfapi/parser/cpdf_number.h"
#include "core/fpdfapi/parser/cpdf_parser.h"
-namespace {
-
-constexpr char kXRefStm[] = "XRefStm";
-constexpr char kPrev[] = "Prev";
-constexpr char kSize[] = "Size";
-
-} // namespace
-
// static
std::unique_ptr<CPDF_CrossRefTable> CPDF_CrossRefTable::MergeUp(
std::unique_ptr<CPDF_CrossRefTable> current,
@@ -112,24 +102,16 @@ void CPDF_CrossRefTable::Update(
UpdateTrailer(std::move(new_cross_ref->trailer_));
}
-void CPDF_CrossRefTable::ShrinkObjectMap(uint32_t max_size) {
- if (max_size == 0) {
+void CPDF_CrossRefTable::ShrinkObjectMap(uint32_t objnum) {
+ if (objnum == 0) {
objects_info_.clear();
return;
}
- objects_info_.erase(objects_info_.lower_bound(max_size), objects_info_.end());
-}
-
-uint32_t CPDF_CrossRefTable::GetSize() const {
- const uint32_t size_from_objects_num =
- objects_info_.empty() ? 0 : (objects_info_.rbegin()->first + 1);
- const int size_from_trailer = trailer() ? trailer()->GetIntegerFor(kSize) : 0;
- if (size_from_trailer <= 0)
- return size_from_objects_num;
+ objects_info_.erase(objects_info_.lower_bound(objnum), objects_info_.end());
- return std::max(static_cast<uint32_t>(size_from_trailer),
- size_from_objects_num);
+ if (!pdfium::ContainsKey(objects_info_, objnum - 1))
+ objects_info_[objnum - 1].pos = 0;
}
void CPDF_CrossRefTable::UpdateInfo(
@@ -167,11 +149,8 @@ void CPDF_CrossRefTable::UpdateTrailer(
return;
}
- new_trailer->RemoveFor(kXRefStm);
- new_trailer->RemoveFor(kPrev);
- new_trailer->SetNewFor<CPDF_Number>(
- kSize, std::max(trailer_->GetIntegerFor(kSize),
- new_trailer->GetIntegerFor(kSize)));
+ new_trailer->SetFor("XRefStm", trailer_->RemoveFor("XRefStm"));
+ new_trailer->SetFor("Prev", trailer_->RemoveFor("Prev"));
for (auto it = new_trailer->begin(); it != new_trailer->end();) {
const ByteString key = it->first;