载入中...
搜索中...
未找到
UnityPackage.cpp
浏览该文件的文档.
12Result<std::vector<std::uint8_t>> inflatePackage(std::span<const std::uint8_t> input, const AssetImportLimits& limits) {
15 DiagnosticCode::InvalidArgument, "Unity package compressed size exceeds budget or is empty", {}, {},
30 const auto count = std::min(input.size() - cursor, std::size_t(std::numeric_limits<uInt>::max()));
41 Diagnostic::error(DiagnosticCode::InvalidArgument, "Unity package decompressed size exceeds budget", {},
53 Diagnostic::error(DiagnosticCode::ParseError, "Unity package gzip is truncated or corrupt", {}, {},
71 if (ended || byte < '0' || byte > '7' || value > (std::numeric_limits<std::uint64_t>::max() - (byte - '0')) / 8)
84Result<UnitySourceFiles> unpack(std::span<const std::uint8_t> tar, const AssetImportLimits& limits) {
114 DiagnosticCode::InvalidArgument, "Unity tar entry size exceeds bounds", {}, {}, "asset.import.unity"));
130 DiagnosticCode::Unsupported, "Unity tar links and extended entry types are not accepted", name, {},
136 DiagnosticCode::Conflict, "unsafe or duplicate Unity tar path", name, {}, "asset.import.unity"));
139 DiagnosticCode::InvalidArgument, "Unity tar entry count exceeds budget", {}, {}, "asset.import.unity"));
146 DiagnosticCode::ParseError, "Unity tar entry needs a GUID directory", name, {}, "asset.import.unity"));
155 DiagnosticCode::ParseError, "Unity tar entry has no member name", name, {}, "asset.import.unity"));
157 if (member != "asset" && member != "asset.meta" && member != "pathname" && member != "preview.png")
170 DiagnosticCode::ParseError, "Unity tar is empty or unterminated", {}, {}, "asset.import.unity"));
182 DiagnosticCode::InvalidArgument, "Unity pathname exceeds budget", guid, {}, "asset.import.unity"));
192 if (!validPath(path, limits) || path != "Packages/manifest.json" || asset == entry.members.end() ||
213 DiagnosticCode::Conflict, "Unity directory GUID disagrees with .meta", path, {}, "asset.import.unity"));
214 files.emplace(path + ".meta", std::vector<std::uint8_t>(meta->second.begin(), meta->second.end()));
225Result<UnitySourceFiles> readUnityPackage(std::span<const std::uint8_t> bytes, const AssetImportLimits& limits) {
std::map< std::string, std::span< const std::uint8_t > > members
Definition UnityPackage.cpp:81
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
bool validPath(std::string_view path, const AssetImportLimits &limits)
Valid path.
Definition UnitySourceInternal.h:85
Result< std::string > metaScalar(std::span< const std::uint8_t > bytes, std::string_view key, std::string_view path)
Read an unindented scalar from .meta; rejects duplicate keys and binary metadata.
Definition UnitySource.cpp:10
Definition AssetImporter.h:14
Result< UnitySourceFiles > readUnityPackage(std::span< const std::uint8_t > bytes, const AssetImportLimits &limits)
Decode a gzip/tar .unitypackage into project-relative source bytes without extraction.
Definition UnityPackage.cpp:225
std::map< std::string, std::vector< std::uint8_t > > UnitySourceFiles
Owning project-relative source bytes, including the original .meta files.
Definition UnitySource.h:12
Result< UnitySourceIndex > indexUnitySources(const UnitySourceFiles &files, const AssetImportLimits &limits)
Validate project paths and .meta identities and index serialized GUID/fileID references.
Definition UnitySource.cpp:121
@ InvalidArgument
@ NotFound
@ Unsupported
@ Failed
@ ParseError
@ Conflict
Parser and allocation budgets applied to untrusted importer inputs.
Definition AssetImporter.h:17
std::uint32_t maximumAssets
Definition AssetImporter.h:20
std::uint64_t maximumDecodedBytes
Definition AssetImporter.h:19
std::uint64_t maximumSourceBytes
Definition AssetImporter.h:18
std::uint32_t maximumStringBytes
Definition AssetImporter.h:23