1. C++ / Говнокод #28838

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    const uint8_t DexFile::kDexMagic[] = { 'd', 'e', 'x', '\n' };
    const uint8_t DexFile::kDexMagicVersions[DexFile::kNumDexVersions][DexFile::kDexVersionLen] = {
      {'0', '3', '5', '\0'},
      // Dex version 036 skipped because of an old dalvik bug on some versions of android where dex
      // files with that version number would erroneously be accepted and run.
      {'0', '3', '7', '\0'}
    };

    Отсюдова:
    https://android.googlesource.com/platform/art/+/refs/heads/nougat-release/runtime/dex_file.cc

    Запостил: ropuJIJIa, 26 Августа 2023

    Комментарии (2) RSS

    • SEO-пост: семь паттернов ошибок.

      Версия «036» байткода «Dalvik» была пропущена, потому что в старых версиях ОС ошиблись на единицу в проверке условия.
      Ответить
      • То есть в старых ОС должно быть что-то типа:
        if (version >= 36) {
            printf("Kakoi bagor");
            return EGGOGCODE;
        }
        А написали так:
        if (version > 36) {
            printf("Kakoi bagor");
            return EGGOGCODE;
        }

        В результате несуществующая 36-я версия байткода загружалась, и для новой версии пришлось брать номер ещё выше.
        Ответить

    Добавить комментарий