}
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();
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());
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),