- 1
- 2
- 3
- 4
function H2I takes handle h returns integer
return h
return 0
endfunction
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+4
function H2I takes handle h returns integer
return h
return 0
endfunction
Return Bug. Интересно, кто-то ещё помнит?
Этим нехитрым способом преобразования хэндла в число пользовались многие годы, пока с его помощью не сумели выполнить произвольный код. После этого баг в спешном порядке починили и добавили нативные улучшения, к примеру, хэштаблицу, для эмуляции которой и использовался обычно RB.
Помимо RB существовал также Return Nothing Bug, который открыли незадолго до фикса всей этой херни.
Выглядел он так:
Если по какой-то причине функция не вернула значение, то использовалось последнее значение, которое вернула какая-либо функция. Недосягаемый return нужен, чтобы компилятор не ругался.
Баги с возвратом — не единственные в JASS. К примеру, локальные переменные, содержащие хэндлы, время жизни которых завершилось, всё ещё считались содержащими хэндл и не давали сборщику мусора его собрать. Поэтому можно было увидеть что-то типа
Ещё одной интересной возможностью была возможность обращаться и записывать произвольные файлы. Оригинально фича была создана для предзагрузки необходимых файлов для уменьшения лага на старте, поэтому основной директорией была директория игры. Но используя ".." можно было выйти за её пределы. Потом это пофиксили засунув в сэндбокс, уникальный для карты, и сделав баг, разрешающий запись, фичей.
Кокококое TCO!
Т.е. dll'ок можно было подсыпать?
Как будто на этом сайте это кого-то останавливало.
Физически или всё-таки можно через какой-то баг слепить строку с не-аски? А текстовый режим -- не такая уж и проблема, если с 0x0A аккуратно работать (или не юзать).
какая детская ошибка )))
Это классика, это знать надо...
Да и в каталог с самой игрой тоже как-то не айс срать. У факторио для этого есть отдельные каталоги screenshot и script-output, к примеру.