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