Browse Source

fix: -Wunsafe-buffer-usage warnings in asar file IO (#43650)

* fix: -Wunsafe-buffer-usage warnings in ScopedTemporaryFile::InitFromFile()

Co-authored-by: Charles Kerr <[email protected]>

* fix: -Wunsafe-buffer-usage warnings in Archive::Init()

Co-authored-by: Charles Kerr <[email protected]>

---------

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Charles Kerr <[email protected]>
trop[bot] 7 months ago
parent
commit
c7380437aa
2 changed files with 15 additions and 25 deletions
  1. 11 16
      shell/common/asar/archive.cc
  2. 4 9
      shell/common/asar/scoped_temporary_file.cc

+ 11 - 16
shell/common/asar/archive.cc

@@ -201,22 +201,19 @@ bool Archive::Init() {
     return false;
   }
 
-  std::vector<char> buf;
-  int len;
+  std::vector<uint8_t> buf;
 
   buf.resize(8);
   {
     electron::ScopedAllowBlockingForElectron allow_blocking;
-    len = file_.ReadAtCurrentPos(buf.data(), buf.size());
-  }
-  if (len != static_cast<int>(buf.size())) {
-    PLOG(ERROR) << "Failed to read header size from " << path_.value();
-    return false;
+    if (!file_.ReadAtCurrentPosAndCheck(buf)) {
+      PLOG(ERROR) << "Failed to read header size from " << path_.value();
+      return false;
+    }
   }
 
   uint32_t size;
-  if (!base::PickleIterator(base::Pickle::WithData(base::as_byte_span(buf)))
-           .ReadUInt32(&size)) {
+  if (!base::PickleIterator(base::Pickle::WithData(buf)).ReadUInt32(&size)) {
     LOG(ERROR) << "Failed to parse header size from " << path_.value();
     return false;
   }
@@ -224,16 +221,14 @@ bool Archive::Init() {
   buf.resize(size);
   {
     electron::ScopedAllowBlockingForElectron allow_blocking;
-    len = file_.ReadAtCurrentPos(buf.data(), buf.size());
-  }
-  if (len != static_cast<int>(buf.size())) {
-    PLOG(ERROR) << "Failed to read header from " << path_.value();
-    return false;
+    if (!file_.ReadAtCurrentPosAndCheck(buf)) {
+      PLOG(ERROR) << "Failed to read header from " << path_.value();
+      return false;
+    }
   }
 
   std::string header;
-  if (!base::PickleIterator(base::Pickle::WithData(base::as_byte_span(buf)))
-           .ReadString(&header)) {
+  if (!base::PickleIterator(base::Pickle::WithData(buf)).ReadString(&header)) {
     LOG(ERROR) << "Failed to parse header from " << path_.value();
     return false;
   }

+ 4 - 9
shell/common/asar/scoped_temporary_file.cc

@@ -62,20 +62,15 @@ bool ScopedTemporaryFile::InitFromFile(
     return false;
 
   electron::ScopedAllowBlockingForElectron allow_blocking;
-  std::vector<char> buf(size);
-  int len = src->Read(offset, buf.data(), buf.size());
-  if (len != static_cast<int>(size))
+  std::vector<uint8_t> buf(size);
+  if (!src->ReadAndCheck(offset, buf))
     return false;
 
   if (integrity)
-    ValidateIntegrityOrDie(base::as_byte_span(buf), *integrity);
+    ValidateIntegrityOrDie(buf, *integrity);
 
   base::File dest(path_, base::File::FLAG_OPEN | base::File::FLAG_WRITE);
-  if (!dest.IsValid())
-    return false;
-
-  return dest.WriteAtCurrentPos(buf.data(), buf.size()) ==
-         static_cast<int>(size);
+  return dest.IsValid() && dest.WriteAtCurrentPosAndCheck(buf);
 }
 
 }  // namespace asar