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

Commit 725ae2bc authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

Break away from longer file extensions.

Missing "break" statements were causing us to match invalid file
extensions like "fpe."

Bug: 116751711
Test: /data/nativetest64/installd_utils_test/installd_utils_test
Change-Id: I250e9f16df998d50f5aaefb0d3a0f68fd5f73835
parent bc9c86a6
Loading
Loading
Loading
Loading
+169 −0
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            case 'p': case 'P':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
@@ -41,10 +42,15 @@ int MatchExtension(const char* ext) {
                        switch (ext[5]) {
                        case '\0': return AID_MEDIA_VIDEO;
                        }
                        break;
                    }
                    break;
                }
                break;
            }
            break;
        }
        break;
    case 'a': case 'A':
        switch (ext[1]) {
        case 'a': case 'A':
@@ -53,7 +59,9 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            }
            break;
        case 'i': case 'I':
            switch (ext[2]) {
            case 'f': case 'F':
@@ -63,56 +71,73 @@ int MatchExtension(const char* ext) {
                    switch (ext[4]) {
                    case '\0': return AID_MEDIA_AUDIO;
                    }
                    break;
                case 'f': case 'F':
                    switch (ext[4]) {
                    case '\0': return AID_MEDIA_AUDIO;
                    }
                    break;
                }
                break;
            }
            break;
        case 'm': case 'M':
            switch (ext[2]) {
            case 'r': case 'R':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            }
            break;
        case 'r': case 'R':
            switch (ext[2]) {
            case 't': case 'T':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            case 'w': case 'W':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 's': case 'S':
            switch (ext[2]) {
            case 'f': case 'F':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            case 'x': case 'X':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            }
            break;
        case 'v': case 'V':
            switch (ext[2]) {
            case 'i': case 'I':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            }
            break;
        case 'w': case 'W':
            switch (ext[2]) {
            case 'b': case 'B':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            }
            break;
        }
        break;
    case 'b': case 'B':
        switch (ext[1]) {
        case 'm': case 'M':
@@ -121,8 +146,11 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        }
        break;
    case 'c': case 'C':
        switch (ext[1]) {
        case 'r': case 'R':
@@ -131,8 +159,11 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        }
        break;
    case 'd': case 'D':
        switch (ext[1]) {
        case 'i': case 'I':
@@ -141,23 +172,30 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            }
            break;
        case 'l': case 'L':
            switch (ext[2]) {
            case '\0': return AID_MEDIA_VIDEO;
            }
            break;
        case 'n': case 'N':
            switch (ext[2]) {
            case 'g': case 'G':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 'v': case 'V':
            switch (ext[2]) {
            case '\0': return AID_MEDIA_VIDEO;
            }
            break;
        }
        break;
    case 'f': case 'F':
        switch (ext[1]) {
        case 'l': case 'L':
@@ -168,13 +206,18 @@ int MatchExtension(const char* ext) {
                    switch (ext[4]) {
                    case '\0': return AID_MEDIA_AUDIO;
                    }
                    break;
                }
                break;
            case 'i': case 'I':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            }
            break;
        }
        break;
    case 'g': case 'G':
        switch (ext[1]) {
        case 'i': case 'I':
@@ -183,15 +226,20 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 's': case 'S':
            switch (ext[2]) {
            case 'm': case 'M':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            }
            break;
        }
        break;
    case 'j': case 'J':
        switch (ext[1]) {
        case 'n': case 'N':
@@ -200,7 +248,9 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 'p': case 'P':
            switch (ext[2]) {
            case 'e': case 'E':
@@ -210,13 +260,18 @@ int MatchExtension(const char* ext) {
                    switch (ext[4]) {
                    case '\0': return AID_MEDIA_IMAGE;
                    }
                    break;
                }
                break;
            case 'g': case 'G':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        }
        break;
    case 'l': case 'L':
        switch (ext[1]) {
        case 's': case 'S':
@@ -225,12 +280,16 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            case 'x': case 'X':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            }
            break;
        }
        break;
    case 'm': case 'M':
        switch (ext[1]) {
        case '3':
@@ -239,36 +298,46 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            }
            break;
        case '4':
            switch (ext[2]) {
            case 'a': case 'A':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            case 'v': case 'V':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            }
            break;
        case 'k': case 'K':
            switch (ext[2]) {
            case 'a': case 'A':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            case 'v': case 'V':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            }
            break;
        case 'n': case 'N':
            switch (ext[2]) {
            case 'g': case 'G':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            }
            break;
        case 'o': case 'O':
            switch (ext[2]) {
            case 'v': case 'V':
@@ -280,23 +349,30 @@ int MatchExtension(const char* ext) {
                        switch (ext[5]) {
                        case '\0': return AID_MEDIA_VIDEO;
                        }
                        break;
                    }
                    break;
                }
                break;
            }
            break;
        case 'p': case 'P':
            switch (ext[2]) {
            case '2':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            case '3':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            case '4':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            case 'e': case 'E':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
@@ -307,8 +383,11 @@ int MatchExtension(const char* ext) {
                        switch (ext[5]) {
                        case '\0': return AID_MEDIA_AUDIO;
                        }
                        break;
                    }
                    break;
                }
                break;
            case 'g': case 'G':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
@@ -316,16 +395,22 @@ int MatchExtension(const char* ext) {
                    switch (ext[4]) {
                    case '\0': return AID_MEDIA_AUDIO;
                    }
                    break;
                }
                break;
            }
            break;
        case 'x': case 'X':
            switch (ext[2]) {
            case 'u': case 'U':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            }
            break;
        }
        break;
    case 'n': case 'N':
        switch (ext[1]) {
        case 'e': case 'E':
@@ -334,15 +419,20 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 'r': case 'R':
            switch (ext[2]) {
            case 'w': case 'W':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        }
        break;
    case 'o': case 'O':
        switch (ext[1]) {
        case 'g': case 'G':
@@ -351,19 +441,25 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            case 'g': case 'G':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            }
            break;
        case 'r': case 'R':
            switch (ext[2]) {
            case 'f': case 'F':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        }
        break;
    case 'p': case 'P':
        switch (ext[1]) {
        case 'b': case 'B':
@@ -372,68 +468,88 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 'c': case 'C':
            switch (ext[2]) {
            case 'x': case 'X':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 'e': case 'E':
            switch (ext[2]) {
            case 'f': case 'F':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 'g': case 'G':
            switch (ext[2]) {
            case 'm': case 'M':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 'l': case 'L':
            switch (ext[2]) {
            case 's': case 'S':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            }
            break;
        case 'n': case 'N':
            switch (ext[2]) {
            case 'g': case 'G':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            case 'm': case 'M':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 'p': case 'P':
            switch (ext[2]) {
            case 'm': case 'M':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 's': case 'S':
            switch (ext[2]) {
            case 'd': case 'D':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        }
        break;
    case 'q': case 'Q':
        switch (ext[1]) {
        case 't': case 'T':
            switch (ext[2]) {
            case '\0': return AID_MEDIA_VIDEO;
            }
            break;
        }
        break;
    case 'r': case 'R':
        switch (ext[1]) {
        case 'a': case 'A':
@@ -443,30 +559,39 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            case 's': case 'S':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 'g': case 'G':
            switch (ext[2]) {
            case 'b': case 'B':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 'm': case 'M':
            switch (ext[2]) {
            case '\0': return AID_MEDIA_AUDIO;
            }
            break;
        case 'w': case 'W':
            switch (ext[2]) {
            case '2':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        }
        break;
    case 's': case 'S':
        switch (ext[1]) {
        case 'd': case 'D':
@@ -475,21 +600,27 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            }
            break;
        case 'n': case 'N':
            switch (ext[2]) {
            case 'd': case 'D':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            }
            break;
        case 'r': case 'R':
            switch (ext[2]) {
            case 'w': case 'W':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 'v': case 'V':
            switch (ext[2]) {
            case 'g': case 'G':
@@ -499,9 +630,13 @@ int MatchExtension(const char* ext) {
                    switch (ext[4]) {
                    case '\0': return AID_MEDIA_IMAGE;
                    }
                    break;
                }
                break;
            }
            break;
        }
        break;
    case 't': case 'T':
        switch (ext[1]) {
        case 'i': case 'I':
@@ -513,13 +648,18 @@ int MatchExtension(const char* ext) {
                    switch (ext[4]) {
                    case '\0': return AID_MEDIA_IMAGE;
                    }
                    break;
                }
                break;
            }
            break;
        case 's': case 'S':
            switch (ext[2]) {
            case '\0': return AID_MEDIA_VIDEO;
            }
            break;
        }
        break;
    case 'v': case 'V':
        switch (ext[1]) {
        case 'o': case 'O':
@@ -528,8 +668,11 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            }
            break;
        }
        break;
    case 'w': case 'W':
        switch (ext[1]) {
        case 'a': case 'A':
@@ -538,11 +681,14 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            case 'x': case 'X':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            }
            break;
        case 'b': case 'B':
            switch (ext[2]) {
            case 'm': case 'M':
@@ -551,8 +697,11 @@ int MatchExtension(const char* ext) {
                    switch (ext[4]) {
                    case '\0': return AID_MEDIA_IMAGE;
                    }
                    break;
                }
                break;
            }
            break;
        case 'e': case 'E':
            switch (ext[2]) {
            case 'b': case 'B':
@@ -561,12 +710,16 @@ int MatchExtension(const char* ext) {
                    switch (ext[4]) {
                    case '\0': return AID_MEDIA_VIDEO;
                    }
                    break;
                case 'p': case 'P':
                    switch (ext[4]) {
                    case '\0': return AID_MEDIA_IMAGE;
                    }
                    break;
                }
                break;
            }
            break;
        case 'm': case 'M':
            switch (ext[2]) {
            case '\0': return AID_MEDIA_VIDEO;
@@ -574,30 +727,39 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_AUDIO;
                }
                break;
            case 'v': case 'V':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            case 'x': case 'X':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            }
            break;
        case 'r': case 'R':
            switch (ext[2]) {
            case 'f': case 'F':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            }
            break;
        case 'v': case 'V':
            switch (ext[2]) {
            case 'x': case 'X':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_VIDEO;
                }
                break;
            }
            break;
        }
        break;
    case 'x': case 'X':
        switch (ext[1]) {
        case 'b': case 'B':
@@ -606,22 +768,29 @@ int MatchExtension(const char* ext) {
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 'p': case 'P':
            switch (ext[2]) {
            case 'm': case 'M':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        case 'w': case 'W':
            switch (ext[2]) {
            case 'd': case 'D':
                switch (ext[3]) {
                case '\0': return AID_MEDIA_IMAGE;
                }
                break;
            }
            break;
        }
        break;
    }

    return 0;
+2 −0
Original line number Diff line number Diff line
@@ -84,6 +84,8 @@ def dump(target, index):
                print "%scase '%s':" % (prefix, k)
            dump(target[k], index + 1)
    print "%s}" % (prefix)
    if index > 0:
        print "%sbreak;" % (prefix)

dump(trie, 0)

+15 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@
#include <gtest/gtest.h>

#include "InstalldNativeService.h"
#include "MatchExtensionGen.h"
#include "globals.h"
#include "utils.h"

@@ -529,5 +530,19 @@ TEST_F(UtilsTest, ValidateApkPathSubdirs) {
    EXPECT_NE(0, validate_apk_path_subdirs("/data/app/com.example/dir/dir/dir//file"));
}

TEST_F(UtilsTest, MatchExtension_Valid) {
    EXPECT_EQ(AID_MEDIA_VIDEO, MatchExtension("mpg"));
    EXPECT_EQ(AID_MEDIA_VIDEO, MatchExtension("mpeg"));
    EXPECT_EQ(AID_MEDIA_VIDEO, MatchExtension("mPeG"));
    EXPECT_EQ(AID_MEDIA_VIDEO, MatchExtension("MPEG"));
}

TEST_F(UtilsTest, MatchExtension_Invalid) {
    EXPECT_EQ(0, MatchExtension("log"));
    EXPECT_EQ(0, MatchExtension("3amp"));
    EXPECT_EQ(0, MatchExtension("fpe"));
    EXPECT_EQ(0, MatchExtension("docx"));
}

}  // namespace installd
}  // namespace android