Pull to refresh

Comments 11

Эх, вот бы кто-то по отчёту прошёлся, касающегося недавней проверки FreeBSD и смог бы использовать как-то баг, превратив его в уязвимость. Нам бы для рекламных целей было полезно. :) Я даже наградить такого человека готов. Самим у нас не хватает сил и времени.
Спасибо :) Переименование я приделал в свое время по запросу одного товарища, которому оно нужно было в конкретном проекте. Потом особо до ума не доводил и тестировал только на чем под руку попало, видимо случай имени из одних цифр проскочил. Там наверняка еще есть подобные недочеты.

Ух ты, ничего себе. А я буквально сейчас ковырялся в истории нашего гита, чтобы найти изначальных авторов этого проекта. Думал, немец какой-то, судя по изначальному пакету de.fernflower. Не знаю, на чём вы карму просадили, но плюсик от меня заслужили :-) JetBrains у вас купил проект или вы были сотрудником компании?


ЗЫ. Иногда кажется, что весь софт в мире русскоязычными людьми писан :-)

Давно видел проекты где намешаны разные языки: английский, немецкий, итальянский… и даже транслит)))
«Закашеная каша кашевая укашистая»
Это называется идиш. «Драй хазерим дринкинг квас» (немецкий + иврит + английский + русский = идиш)
Может быть «хаверим»? (Или это другое слово или диалект?)
Насколько помню: хазерим — свинюшки, хаверим — друзья.
Замечательно, давайте сгенерируем корректный класс с именем из цифр. Возьмём любимый ASM и вперёд.

IMHO, использовать ASM для генерации «хитрых» классов неудобно, слишком много танцев с бубном.


Лучше взять asmtools:


super public class "42"
    version 50:0
{

private Method "<init>":"()V"
    stack 2 locals 1
{
        aload   0;
        invokespecial   Method java/lang/Object."<init>":"()V";
        getstatic   Field java/lang/System.out:"Ljava/io/PrintStream;";
        ldc String "In constructor!";
        invokevirtual   Method java/io/PrintStream.println:"(Ljava/lang/String;)V";
        return;
}

public static Method main:"([Ljava/lang/String;)V"
    stack 2 locals 1
{
        getstatic   Field java/lang/System.out:"Ljava/io/PrintStream;";
        ldc String "Hello World!";
        invokevirtual   Method java/io/PrintStream.println:"(Ljava/lang/String;)V";
        return;
}

} // end Class 42

К слову, в ConverterHelper.java есть ещё как минимум одна ошибка:


 private static final Set<String> RESERVED_WINDOWS_NAMESPACE = new HashSet<>(Arrays.asList(
    "aux", "prn", "aux", "nul",

Очевидно, что вместо одного из "aux" должен быть "con".
Тут не помешала бы инспекция, отлавливающая дубликаты в коллекции, используемой для инициализации множества.

IMHO, использовать ASM для генерации «хитрых» классов неудобно, слишком много танцев с бубном.

Ну так-то у меня не сильно длиннее. Стоит на самом деле ByteBuddy попробовать, говорят, вкусно.


Тут не помешала бы инспекция, отлавливающая дубликаты в коллекции, используемой для инициализации множества.

Думали об этом. Может и сделаем.

Длина тут дело десятое, всё равно заготовку кода чаще всего получают, натравливая Asmifier на class-файл, а не пишут всё руками с нуля.


Но в случае использования ASM нужно:


 0) добавить к сгенерированному коду обвязку для записи в файл (он её, вроде бы, не генерирует)
 1) скомпилировать генератор
 2) запустить генератор


В случае asmtools пункты 0 и 1 не нужны.

Каждый из этих пунктов добавляет по одной строчке. Запись класса в файл — Files.write(Paths.get(className+".class"), cw.toByteArray());. Не, ну я согласен, что экономия пары строчек — тоже экономия. Просто взял привычный инструмент, который уже был под рукой. Скачивать и осваивать новый инструмент — тоже накладные расходы :-)

Sign up to leave a comment.

Articles