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

Commit 16fb3f9e authored by Jon Spivack's avatar Jon Spivack
Browse files

Allow AIDL interfaces in service parsing

Bug: 138756857
Test: Manual (using mediaextractor as a test service)
Change-Id: Ice2c695fca7062d6a115df13a6ac1d6fe82a3a98
parent 983f76b3
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -77,6 +77,12 @@ Result<void> CheckInterfaceInheritanceHierarchy(const std::set<std::string>& ins
                                                const InterfaceInheritanceHierarchyMap& hierarchy) {
    std::set<FQName> interface_fqnames;
    for (const std::string& instance : instances) {
        // There is insufficient build-time information on AIDL interfaces to check them here
        // TODO(b/139307527): Rework how services store interfaces to avoid excess string parsing
        if (base::Split(instance, "/")[0] == "aidl") {
            continue;
        }

        FqInstance fqinstance;
        if (!fqinstance.setTo(instance)) {
            return Error() << "Unable to parse interface instance '" << instance << "'";
+13 −9
Original line number Diff line number Diff line
@@ -145,9 +145,12 @@ Result<void> ServiceParser::ParseInterface(std::vector<std::string>&& args) {
    const std::string& interface_name = args[1];
    const std::string& instance_name = args[2];

    // AIDL services don't use fully qualified names and instead just use "interface aidl <name>"
    if (interface_name != "aidl") {
        FQName fq_name;
        if (!FQName::parse(interface_name, &fq_name)) {
        return Error() << "Invalid fully-qualified name for interface '" << interface_name << "'";
            return Error() << "Invalid fully-qualified name for interface '" << interface_name
                           << "'";
        }

        if (!fq_name.isFullyQualified()) {
@@ -157,6 +160,7 @@ Result<void> ServiceParser::ParseInterface(std::vector<std::string>&& args) {
        if (fq_name.isValidValueName()) {
            return Error() << "Interface name must not be a value name '" << interface_name << "'";
        }
    }

    const std::string fullname = interface_name + "/" + instance_name;