Fix abort for nullable parcelable array.
The direction here should be:
- deduping 'has' type information from backends (this is what
validatable types did, but oh well)
- (best) simplify by supporting types across all backends
However, making error consistent with other strategies for now, so that
we unblock the fuzzer.
Fixes: 148252544
Test: aidl_parser_fuzzer w/ added case
Test: atest aidl_unittests
Change-Id: Ib69b297bdfa376104666c6058f88e707c283ef49
diff --git a/aidl_language.h b/aidl_language.h
index 44c8078..2d388e8 100644
--- a/aidl_language.h
+++ b/aidl_language.h
@@ -356,7 +356,7 @@
std::set<AidlAnnotation::Type> GetSupportedAnnotations() const override;
bool CheckValid(const AidlTypenames& typenames) const override;
- bool LanguageSpecificCheckValid(Options::Language lang) const;
+ bool LanguageSpecificCheckValid(const AidlTypenames& typenames, Options::Language lang) const;
const AidlNode& AsAidlNode() const override { return *this; }
private:
@@ -706,7 +706,8 @@
virtual const AidlInterface* AsInterface() const { return nullptr; }
virtual const AidlParameterizable<std::string>* AsParameterizable() const { return nullptr; }
bool CheckValid(const AidlTypenames& typenames) const override;
- virtual bool LanguageSpecificCheckValid(Options::Language lang) const = 0;
+ virtual bool LanguageSpecificCheckValid(const AidlTypenames& typenames,
+ Options::Language lang) const = 0;
AidlStructuredParcelable* AsStructuredParcelable() {
return const_cast<AidlStructuredParcelable*>(
const_cast<const AidlDefinedType*>(this)->AsStructuredParcelable());
@@ -761,7 +762,8 @@
std::set<AidlAnnotation::Type> GetSupportedAnnotations() const override;
bool CheckValid(const AidlTypenames& typenames) const override;
- bool LanguageSpecificCheckValid(Options::Language lang) const override;
+ bool LanguageSpecificCheckValid(const AidlTypenames& typenames,
+ Options::Language lang) const override;
const AidlParcelable* AsParcelable() const override { return this; }
const AidlParameterizable<std::string>* AsParameterizable() const override { return this; }
const AidlNode& AsAidlNode() const override { return *this; }
@@ -793,7 +795,8 @@
std::set<AidlAnnotation::Type> GetSupportedAnnotations() const override;
bool CheckValid(const AidlTypenames& typenames) const override;
- bool LanguageSpecificCheckValid(Options::Language lang) const override;
+ bool LanguageSpecificCheckValid(const AidlTypenames& typenames,
+ Options::Language lang) const override;
private:
const std::vector<std::unique_ptr<AidlVariableDeclaration>> variables_;
@@ -840,7 +843,10 @@
bool Autofill();
std::set<AidlAnnotation::Type> GetSupportedAnnotations() const override;
bool CheckValid(const AidlTypenames& typenames) const override;
- bool LanguageSpecificCheckValid(Options::Language) const override { return true; }
+ bool LanguageSpecificCheckValid(const AidlTypenames& /*typenames*/,
+ Options::Language) const override {
+ return true;
+ }
std::string GetPreprocessDeclarationName() const override { return "enum"; }
void Dump(CodeWriter* writer) const override;
@@ -875,7 +881,8 @@
std::set<AidlAnnotation::Type> GetSupportedAnnotations() const override;
bool CheckValid(const AidlTypenames& typenames) const override;
- bool LanguageSpecificCheckValid(Options::Language lang) const override;
+ bool LanguageSpecificCheckValid(const AidlTypenames& typenames,
+ Options::Language lang) const override;
private:
std::vector<std::unique_ptr<AidlMethod>> methods_;