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

Commit b8dc7bc5 authored by Andreas Gampe's avatar Andreas Gampe
Browse files

Frameworks/base: Fix more aapt issues

Change-Id: I6da7dc674e9f9e3b0886a3cfd1e3194d6b5ac948
parent 0ce259c2
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -192,7 +192,7 @@ inline bool isNumber(const String8& string) {


void AaptLocaleValue::setLanguage(const char* languageChars) {
void AaptLocaleValue::setLanguage(const char* languageChars) {
     size_t i = 0;
     size_t i = 0;
     while ((*languageChars) != '\0') {
     while ((*languageChars) != '\0' && i < sizeof(language)/sizeof(language[0])) {
          language[i++] = tolower(*languageChars);
          language[i++] = tolower(*languageChars);
          languageChars++;
          languageChars++;
     }
     }
@@ -200,7 +200,7 @@ void AaptLocaleValue::setLanguage(const char* languageChars) {


void AaptLocaleValue::setRegion(const char* regionChars) {
void AaptLocaleValue::setRegion(const char* regionChars) {
    size_t i = 0;
    size_t i = 0;
    while ((*regionChars) != '\0') {
    while ((*regionChars) != '\0' && i < sizeof(region)/sizeof(region[0])) {
         region[i++] = toupper(*regionChars);
         region[i++] = toupper(*regionChars);
         regionChars++;
         regionChars++;
    }
    }
@@ -208,7 +208,7 @@ void AaptLocaleValue::setRegion(const char* regionChars) {


void AaptLocaleValue::setScript(const char* scriptChars) {
void AaptLocaleValue::setScript(const char* scriptChars) {
    size_t i = 0;
    size_t i = 0;
    while ((*scriptChars) != '\0') {
    while ((*scriptChars) != '\0' && i < sizeof(script)/sizeof(script[0])) {
         if (i == 0) {
         if (i == 0) {
             script[i++] = toupper(*scriptChars);
             script[i++] = toupper(*scriptChars);
         } else {
         } else {
@@ -220,7 +220,7 @@ void AaptLocaleValue::setScript(const char* scriptChars) {


void AaptLocaleValue::setVariant(const char* variantChars) {
void AaptLocaleValue::setVariant(const char* variantChars) {
     size_t i = 0;
     size_t i = 0;
     while ((*variantChars) != '\0') {
     while ((*variantChars) != '\0' && i < sizeof(variant)/sizeof(variant[0])) {
          variant[i++] = *variantChars;
          variant[i++] = *variantChars;
          variantChars++;
          variantChars++;
     }
     }
+9 −4
Original line number Original line Diff line number Diff line
@@ -196,11 +196,16 @@ int doList(Bundle* bundle)
            goto bail;
            goto bail;
        }
        }


#ifdef HAVE_ANDROID_OS
        static const bool kHaveAndroidOs = true;
#else
        static const bool kHaveAndroidOs = false;
#endif
        const ResTable& res = assets.getResources(false);
        const ResTable& res = assets.getResources(false);
#ifndef HAVE_ANDROID_OS
        if (!kHaveAndroidOs) {
            printf("\nResource table:\n");
            printf("\nResource table:\n");
            res.print(false);
            res.print(false);
#endif
        }


        Asset* manifestAsset = assets.openNonAsset("AndroidManifest.xml",
        Asset* manifestAsset = assets.openNonAsset("AndroidManifest.xml",
                                                   Asset::ACCESS_BUFFER);
                                                   Asset::ACCESS_BUFFER);
+37 −21
Original line number Original line Diff line number Diff line
@@ -1095,6 +1095,41 @@ static void write_png(const char* imageName,
    }
    }
}
}


static bool read_png_protected(png_structp read_ptr, String8& printableName, png_infop read_info,
                               const sp<AaptFile>& file, FILE* fp, image_info* imageInfo) {
    if (setjmp(png_jmpbuf(read_ptr))) {
        return false;
    }

    png_init_io(read_ptr, fp);

    read_png(printableName.string(), read_ptr, read_info, imageInfo);

    const size_t nameLen = file->getPath().length();
    if (nameLen > 6) {
        const char* name = file->getPath().string();
        if (name[nameLen-5] == '9' && name[nameLen-6] == '.') {
            if (do_9patch(printableName.string(), imageInfo) != NO_ERROR) {
                return false;
            }
        }
    }

    return true;
}

static bool write_png_protected(png_structp write_ptr, String8& printableName, png_infop write_info,
                                image_info* imageInfo, const Bundle* bundle) {
    if (setjmp(png_jmpbuf(write_ptr))) {
        return false;
    }

    write_png(printableName.string(), write_ptr, write_info, *imageInfo,
              bundle->getGrayscaleTolerance());

    return true;
}

status_t preProcessImage(const Bundle* bundle, const sp<AaptAssets>& /* assets */,
status_t preProcessImage(const Bundle* bundle, const sp<AaptAssets>& /* assets */,
                         const sp<AaptFile>& file, String8* /* outNewLeafName */)
                         const sp<AaptFile>& file, String8* /* outNewLeafName */)
{
{
@@ -1126,8 +1161,6 @@ status_t preProcessImage(const Bundle* bundle, const sp<AaptAssets>& /* assets *


    status_t error = UNKNOWN_ERROR;
    status_t error = UNKNOWN_ERROR;


    const size_t nameLen = file->getPath().length();

    fp = fopen(file->getSourceFile().string(), "rb");
    fp = fopen(file->getSourceFile().string(), "rb");
    if (fp == NULL) {
    if (fp == NULL) {
        fprintf(stderr, "%s: ERROR: Unable to open PNG file\n", printableName.string());
        fprintf(stderr, "%s: ERROR: Unable to open PNG file\n", printableName.string());
@@ -1145,22 +1178,9 @@ status_t preProcessImage(const Bundle* bundle, const sp<AaptAssets>& /* assets *
        goto bail;
        goto bail;
    }
    }


    if (setjmp(png_jmpbuf(read_ptr))) {
    if (!read_png_protected(read_ptr, printableName, read_info, file, fp, &imageInfo)) {
        goto bail;
    }

    png_init_io(read_ptr, fp);

    read_png(printableName.string(), read_ptr, read_info, &imageInfo);

    if (nameLen > 6) {
        const char* name = file->getPath().string();
        if (name[nameLen-5] == '9' && name[nameLen-6] == '.') {
            if (do_9patch(printableName.string(), &imageInfo) != NO_ERROR) {
        goto bail;
        goto bail;
    }
    }
        }
    }


    write_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, (png_error_ptr)NULL,
    write_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, 0, (png_error_ptr)NULL,
                                        (png_error_ptr)NULL);
                                        (png_error_ptr)NULL);
@@ -1178,14 +1198,10 @@ status_t preProcessImage(const Bundle* bundle, const sp<AaptAssets>& /* assets *
    png_set_write_fn(write_ptr, (void*)file.get(),
    png_set_write_fn(write_ptr, (void*)file.get(),
                     png_write_aapt_file, png_flush_aapt_file);
                     png_write_aapt_file, png_flush_aapt_file);


    if (setjmp(png_jmpbuf(write_ptr)))
    if (!write_png_protected(write_ptr, printableName, write_info, &imageInfo, bundle)) {
    {
        goto bail;
        goto bail;
    }
    }


    write_png(printableName.string(), write_ptr, write_info, imageInfo,
              bundle->getGrayscaleTolerance());

    error = NO_ERROR;
    error = NO_ERROR;


    if (bundle->getVerbose()) {
    if (bundle->getVerbose()) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -989,7 +989,7 @@ status_t XMLNode::assignResourceIds(const sp<AaptAssets>& assets,
        for (size_t i=0; i<N; i++) {
        for (size_t i=0; i<N; i++) {
            const attribute_entry& e = mAttributes.itemAt(i);
            const attribute_entry& e = mAttributes.itemAt(i);
            if (e.ns.size() <= 0) continue;
            if (e.ns.size() <= 0) continue;
            bool nsIsPublic;
            bool nsIsPublic = true;
            String16 pkg(getNamespaceResourcePackage(String16(assets->getPackage()), e.ns, &nsIsPublic));
            String16 pkg(getNamespaceResourcePackage(String16(assets->getPackage()), e.ns, &nsIsPublic));
            if (kIsDebug) {
            if (kIsDebug) {
                printf("Elem %s %s=\"%s\": namespace(%s) %s ===> %s\n",
                printf("Elem %s %s=\"%s\": namespace(%s) %s ===> %s\n",