Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c95add6d authored by Ryan Mitchell's avatar Ryan Mitchell Committed by Android (Google) Code Review
Browse files

Merge "AAPT2: Increase maximum proto size"

parents c8c4fea6 e0eba7a3
Loading
Loading
Loading
Loading
+8 −8
Original line number Original line Diff line number Diff line
@@ -69,8 +69,8 @@ std::unique_ptr<LoadedApk> LoadedApk::LoadProtoApkFromFileCollection(
      return {};
      return {};
    }
    }


    io::ZeroCopyInputAdaptor adaptor(in.get());
    io::ProtoInputStreamReader proto_reader(in.get());
    if (!pb_table.ParseFromZeroCopyStream(&adaptor)) {
    if (!proto_reader.ReadMessage(&pb_table)) {
      diag->Error(DiagMessage(source) << "failed to read " << kProtoResourceTablePath);
      diag->Error(DiagMessage(source) << "failed to read " << kProtoResourceTablePath);
      return {};
      return {};
    }
    }
@@ -97,8 +97,8 @@ std::unique_ptr<LoadedApk> LoadedApk::LoadProtoApkFromFileCollection(
  }
  }


  pb::XmlNode pb_node;
  pb::XmlNode pb_node;
  io::ZeroCopyInputAdaptor manifest_adaptor(manifest_in.get());
  io::ProtoInputStreamReader proto_reader(manifest_in.get());
  if (!pb_node.ParseFromZeroCopyStream(&manifest_adaptor)) {
  if (!proto_reader.ReadMessage(&pb_node)) {
    diag->Error(DiagMessage(source) << "failed to read proto " << kAndroidManifestPath);
    diag->Error(DiagMessage(source) << "failed to read proto " << kAndroidManifestPath);
    return {};
    return {};
  }
  }
@@ -270,9 +270,9 @@ std::unique_ptr<xml::XmlResource> LoadedApk::LoadXml(const std::string& file_pat
      return nullptr;
      return nullptr;
    }
    }


    io::ZeroCopyInputAdaptor adaptor(in.get());
    pb::XmlNode pb_node;
    pb::XmlNode pb_node;
    if (!pb_node.ParseFromZeroCopyStream(&adaptor)) {
    io::ProtoInputStreamReader proto_reader(in.get());
    if (!proto_reader.ReadMessage(&pb_node)) {
      diag->Error(DiagMessage() << "failed to parse file as proto XML");
      diag->Error(DiagMessage() << "failed to parse file as proto XML");
      return nullptr;
      return nullptr;
    }
    }
@@ -317,8 +317,8 @@ ApkFormat LoadedApk::DetermineApkFormat(io::IFileCollection* apk) {
    std::unique_ptr<io::InputStream> manifest_in = manifest_file->OpenInputStream();
    std::unique_ptr<io::InputStream> manifest_in = manifest_file->OpenInputStream();
    if (manifest_in != nullptr) {
    if (manifest_in != nullptr) {
      pb::XmlNode pb_node;
      pb::XmlNode pb_node;
      io::ZeroCopyInputAdaptor manifest_adaptor(manifest_in.get());
      io::ProtoInputStreamReader proto_reader(manifest_in.get());
      if (pb_node.ParseFromZeroCopyStream(&manifest_adaptor)) {
      if (!proto_reader.ReadMessage(&pb_node)) {
        return ApkFormat::kProto;
        return ApkFormat::kProto;
      }
      }
    }
    }
+2 −2
Original line number Original line Diff line number Diff line
@@ -170,8 +170,8 @@ class BinaryApkSerializer : public IApkSerializer {
      }
      }


      pb::XmlNode pb_node;
      pb::XmlNode pb_node;
      io::ZeroCopyInputAdaptor adaptor(in.get());
      io::ProtoInputStreamReader proto_reader(in.get());
      if (!pb_node.ParseFromZeroCopyStream(&adaptor)) {
      if (!proto_reader.ReadMessage(&pb_node)) {
        context_->GetDiagnostics()->Error(DiagMessage(source_)
        context_->GetDiagnostics()->Error(DiagMessage(source_)
                                          << "failed to parse proto XML " << *file->path);
                                          << "failed to parse proto XML " << *file->path);
        return false;
        return false;
+18 −0
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@
#include <string>
#include <string>


#include "google/protobuf/message_lite.h"
#include "google/protobuf/message_lite.h"
#include "google/protobuf/io/coded_stream.h"


#include "format/Archive.h"
#include "format/Archive.h"
#include "io/File.h"
#include "io/File.h"
@@ -122,6 +123,23 @@ class ZeroCopyInputAdaptor : public ::google::protobuf::io::ZeroCopyInputStream
  io::InputStream* in_;
  io::InputStream* in_;
};
};


class ProtoInputStreamReader {
 public:
  explicit ProtoInputStreamReader(io::InputStream* in) : in_(in) { }

  /** Deserializes a MessageLite proto from the current position in the input stream.*/
  template <typename T> bool ReadMessage(T *message_lite) {
    ZeroCopyInputAdaptor adapter(in_);
    google::protobuf::io::CodedInputStream coded_stream(&adapter);
    coded_stream.SetTotalBytesLimit(std::numeric_limits<int32_t>::max(),
                                    coded_stream.BytesUntilTotalBytesLimit());
    return message_lite->ParseFromCodedStream(&coded_stream);
  }

 private:
  io::InputStream* in_;
};

}  // namespace io
}  // namespace io
}  // namespace aapt
}  // namespace aapt