From d7abb42b6446c002016eebb5a5993658f1d35a11 Mon Sep 17 00:00:00 2001
From: Pawel Andruszkiewicz
Date: Wed, 3 Jun 2015 15:11:39 +0200
Subject: [PATCH] [Archive] Double check if iterator is valid.
Prevent CID: 388883
[Verification] TCT pass rate: 100%
Change-Id: I5af48b3473108d6802000c69395e04d95ca0dbdf
Signed-off-by: Pawel Andruszkiewicz
---
src/archive/archive_instance.cc | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/src/archive/archive_instance.cc b/src/archive/archive_instance.cc
index 47804261..d4ca1792 100755
--- a/src/archive/archive_instance.cc
+++ b/src/archive/archive_instance.cc
@@ -568,12 +568,20 @@ void ArchiveInstance::Extract(const picojson::value& args, picojson::object& out
//Not found but if our name does not contain '/'
//try looking for directory with such name
- if (it == entries->end() && !isDirectoryPath(v_entry_name.get())) {
+ if (entries->end() == it && !isDirectoryPath(v_entry_name.get())) {
const std::string try_directory = v_entry_name.get() + "/";
LoggerD("GetEntryByName Trying directory: [%s]", try_directory.c_str());
it = entries->find(try_directory);
}
+ if (entries->end() == it) {
+ LoggerE("Failed to find entry");
+ PostError(PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to find entry"), callbackId);
+ delete callback;
+ callback = NULL;
+ return;
+ }
+
result = it->second->extractTo(callback);
if (result.error_code() != ErrorCode::NO_ERROR) {
LoggerE("ArchiveFileEntry.extractTo error");
--
2.34.1