Upstream version 11.39.264.0
[platform/framework/web/crosswalk.git] / src / xwalk / application / common / package / xpk_package.cc
index 7f55632..4f04268 100644 (file)
@@ -25,10 +25,11 @@ XPKPackage::~XPKPackage() {
 }
 
 XPKPackage::XPKPackage(const base::FilePath& path)
-    : Package(path) {
+    : Package(path, Manifest::TYPE_MANIFEST),
+      header_(),
+      zip_addr_(0) {
   if (!base::PathExists(path))
     return;
-  manifest_type_ = Manifest::TYPE_MANIFEST;
   scoped_ptr<base::ScopedFILE> file(
       new base::ScopedFILE(base::OpenFile(path, "rb")));
   file_ = file.Pass();
@@ -44,7 +45,10 @@ XPKPackage::XPKPackage(const base::FilePath& path)
       header_.signature_size <= XPKPackage::kMaxSignatureKeySize) {
     is_valid_ = true;
     zip_addr_ = sizeof(header_) + header_.key_size + header_.signature_size;
-    fseek(file_->get(), sizeof(header_), SEEK_SET);
+    if (fseek(file_->get(), sizeof(header_), SEEK_SET)) {
+      is_valid_ = false;
+      return;
+    }
     key_.resize(header_.key_size);
     size_t len = fread(&key_.front(), sizeof(uint8), header_.key_size,
         file_->get());
@@ -69,7 +73,8 @@ XPKPackage::XPKPackage(const base::FilePath& path)
 bool XPKPackage::VerifySignature() {
 // Set the file read position to the beginning of compressed resource file,
 // which is behind the magic header, public key and signature key.
-  fseek(file_->get(), zip_addr_, SEEK_SET);
+  if (fseek(file_->get(), zip_addr_, SEEK_SET))
+    return false;
   crypto::SignatureVerifier verifier;
   if (!verifier.VerifyInit(kSignatureAlgorithm,
                            sizeof(kSignatureAlgorithm),