Сборный / Говнокод #25491 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
Решил я значит от нехуй делать нарисовать свой пиксельный шрифт
(кому интересно - вот промежуточный результат https://i.imgur.com/2vIJoio.png)
и решил посмотреть, какие там вообще бывают под GNU/Linux редакторы для
шрифтов, и какие вообще шрифты бывают
Так вот, нашел я вот такую хрень http://mensis.sourceforge.net/overview.html
Вижу, что там какой-то ассемблер http://mensis.sourceforge.net/ttfcv-all.png или
байткод ебаный. Погуглил по этим говноинструкциям со скриншота:
Оказывается в TTF шрифтах есть встроенный тьюринг-полный ЯП, используемый
для всяких там подсказок, типа "куда дорисовать пиксель вот при таком-то условии"
и прочая подобная херота
А еще в шиндошс (до Windows 10) этот шрифтоговнобайткод интерпретировался в
пространстве ядра (ну тупыыые..) и разумеется таким образом удалось винду хакнуть
https://security.stackexchange.com/a/91395 (разве могло быть иначе?)

про шрифтоговнобайткод можно почитать например тут
https://docs.microsoft.com/en-us/typography/opentype/spec/tt_instructions
https://developer.apple.com/fonts/TrueType-Reference-Manual/RM05/Chap5.html#instructions

На кой вообще хер делать тьюринг-полный язык для отрисовки глифов? Ну и раз вы его уже
делаете, то заебошьте там что-нибудь на основе LLVM байткода, чтоб JIT, или вообще все глифы
сразу компилировать в натив, или даже (чего мелочиться) под GPU. Типа мы хотим
нарисовать какую-то букву с размером 10 - вызываем функцию
drawA(10, bufptr, x, y); - рисуется десятого размера буква в буфер. И никаких непонятных
говнобайткодов. Четко и дерзко!

Запостил: j123123 j123123, (Updated )

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

  • ебить ты открыл для себя хинтинги

    в шинусе весь ГДИ в ядре я не удивлен
    Ответить
  • @А еще в шиндошс (до Windows 10) этот шрифтоговнобайткод интерпретировался в
    @пространстве ядра (ну тупыыые..) и разумеется таким образом удалось винду хакнуть

    Ты нам прям америку открыл...
    Ответить
    • >тупыыые
      А почему нельзя интерпретировать Тьюринг-полный байткод в ядре?
      Ответить
          • Не ну AML, конечно, лучше чем произвольный нативный код (привет UEFI рантайм сервисам).

            Но для задач, которые он решает, это оверинжиниринг имхо. Да и когда прошивка спрашивает версию венды и подстраивается под неё - это вообще нормально?
            Ответить
        • Ну, выстрелить в ногу чем угодно можно - везде, где есть буфер, его можно переполнить, и так далее... (тут, как я понял, что-то подобное как раз и произошло). Тут единственное, что можно сделать - это подвесить рендерер бесконечным циклом (кстати, интересно, как с этим борются?), и пользователь, забывший сохранить свою фотожабу после двух часов работы и перед вставкой красивой подписи скачанным из интернета шрифтом, сам испортит какое-нибудь hardware, даже не выходя из юзермода.
          (у меня как-то раз примерно так было в Гимпе, когда я случайно поставил размер шрифта 10000)
          Тут разве что общий принцип, что любой код, не требующий особых разрешений, лучше исполнять с минимальными правами - тем более сложные алгоритмы.
          Хотя, конечно, и у шрифтов есть своя специфика - после переполнения буфера нужно вернуть управление, перед этим как-нибудь внедрившись в систему, а тут оно само будет периодически вызываться, можно каждый раз исполнять вредоносный код заново, не оставляя следов и не привлекая внимание антивируса.
          Ответить
          • P.S.
            >https://security.stackexchange.com/a/91395
            Как у них там красивенько сегодня! (см. дату)
            Ответить
  • Вот если я напомню автору что в прыщах тоже есть ACPICA а еще там есть BPF который наверняка уже тоже туринг полны то он скажет что так и надо
    ведь это прыщи
    Ответить
    • > а еще там есть BPF который наверняка уже тоже туринг полны

      https://blog.cloudflare.com/bpf-the-forgotten-bytecode/
      > All this guarantees that the BPF programs executed within kernel context will run fast and will never infinitely loop. That means the BPF programs are not Turing complete, but in practice they are expressive enough for the job and deal with packet filtering very well.
      Ответить
      • All the jumps are only forward, which guarantees that there aren't any loops in the BPF
        The single BPF program has less than 4096 instructions.


        лол, такие костылп смешные
        Ответить
        • В "WebGL" тоже похожие ограничения. Но циклы целиком не забанили.
          Ответить
        • >лол, такие костылп смешные
          Вместо того чтобы просто доказать, что программа завершается за ограниченное число шагов.
          Ответить
          • Решил проблему останова? Чур после нобелевки с тебя пиво
            Ответить
  • вот по этому я за "растровые шрифты"
    Ответить
    • этот шрифт лучше всего выглядит в размере 8x8, ага
      Ответить
  • когда у тебя масса свободного времени - начинай рисовать свои шрифты
    Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8