From 776aa959c7122f23f3c58443ea1b673127ed01f2 Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Mon, 24 Apr 2017 15:09:32 -0700 Subject: [PATCH] AAPT2: Add better error message when processing invalid files Instead of showing a failed mmap error, show a better error when a file being compiled is a directory or other unsupported file type. Bug: 37626838 Test: manual Change-Id: Ib9acf5f48ab5da37e79411c6a9f37c51f00f925f --- tools/aapt2/cmd/Compile.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/tools/aapt2/cmd/Compile.cpp b/tools/aapt2/cmd/Compile.cpp index 578a8fb423dc8..9da0215cde514 100644 --- a/tools/aapt2/cmd/Compile.cpp +++ b/tools/aapt2/cmd/Compile.cpp @@ -365,6 +365,21 @@ static bool FlattenXmlToOutStream(IAaptContext* context, const StringPiece& outp return true; } +static bool IsValidFile(IAaptContext* context, const StringPiece& input_path) { + const file::FileType file_type = file::GetFileType(input_path); + if (file_type != file::FileType::kRegular && file_type != file::FileType::kSymlink) { + if (file_type == file::FileType::kDirectory) { + context->GetDiagnostics()->Error(DiagMessage(input_path) + << "resource file cannot be a directory"); + } else { + context->GetDiagnostics()->Error(DiagMessage(input_path) + << "not a valid resource file"); + } + return false; + } + return true; +} + static bool CompileXml(IAaptContext* context, const CompileOptions& options, const ResourcePathData& path_data, IArchiveWriter* writer, const std::string& output_path) { @@ -569,7 +584,8 @@ static bool CompileFile(IAaptContext* context, const CompileOptions& options, std::string error_str; Maybe f = file::MmapPath(path_data.source.path, &error_str); if (!f) { - context->GetDiagnostics()->Error(DiagMessage(path_data.source) << error_str); + context->GetDiagnostics()->Error(DiagMessage(path_data.source) << "failed to mmap file: " + << error_str); return false; } @@ -692,6 +708,11 @@ int Compile(const std::vector& args) { context.GetDiagnostics()->Note(DiagMessage(path_data.source) << "processing"); } + if (!IsValidFile(&context, path_data.source.path)) { + error = true; + continue; + } + if (path_data.resource_dir == "values") { // Overwrite the extension. path_data.extension = "arsc";