16f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/* 26f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Copyright (C) 2015 The Android Open Source Project 36f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 46f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 56f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * you may not use this file except in compliance with the License. 66f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * You may obtain a copy of the License at 76f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 86f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 96f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * 106f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Unless required by applicable law or agreed to in writing, software 116f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 126f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * See the License for the specific language governing permissions and 146f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * limitations under the License. 156f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */ 166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 176f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#ifndef AAPT_MANIFEST_VALIDATOR_H 186f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#define AAPT_MANIFEST_VALIDATOR_H 196f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 206f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include "Logger.h" 216f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include "Maybe.h" 226f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include "Source.h" 236f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include "StringPiece.h" 246f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 256f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <androidfw/ResourceTypes.h> 266f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 276f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskinamespace aapt { 286f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 296f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskiclass ManifestValidator { 306f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskipublic: 316f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ManifestValidator(const android::ResTable& table); 326f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ManifestValidator(const ManifestValidator&) = delete; 336f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 346f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski bool validate(const Source& source, android::ResXMLParser* parser); 356f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 366f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskiprivate: 376f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski bool validateManifest(const Source& source, android::ResXMLParser* parser); 386f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 396f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski Maybe<StringPiece16> getAttributeInlineValue(android::ResXMLParser* parser, size_t idx); 406f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski Maybe<StringPiece16> getAttributeValue(android::ResXMLParser* parser, size_t idx); 416f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 426f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski bool validateInlineAttribute(android::ResXMLParser* parser, size_t idx, 436f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski SourceLogger& logger, const StringPiece16& charSet); 446f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski bool validateAttribute(android::ResXMLParser* parser, size_t idx, SourceLogger& logger, 456f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski const StringPiece16& charSet); 466f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski bool validateAttributeImpl(const StringPiece16& element, const StringPiece16& attributeName, 476f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski const StringPiece16& attributeValue, const StringPiece16& charSet, 486f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski size_t lineNumber, SourceLogger& logger); 496f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 506f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski const android::ResTable& mTable; 516f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}; 526f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 536f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} // namespace aapt 546f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 556f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#endif // AAPT_MANIFEST_VALIDATOR_H 56