MustLive Perl Pascal Programs Interpreter

22:40 21.03.2009

Сьогодні вийшла нова версія програми Perl Pas Interpreter v.1.4.7. В новій версії:

  • Додана підтримка операторів div та mod в циклах for.
  • Додана підтримка операторів div та mod в циклах while.
  • Додана підтримка операторів div та mod в циклах repeat until.
  • Виправлена робота write і writeln з функціями.

Деталі на сайті інтерпретатора. Тема для обговорення програми на форумі.

Додаткова інформація про Perl Pas Interpreter в розділі Онлайн інструменти.


8 відповідей на “MustLive Perl Pascal Programs Interpreter”

  1. blexey каже:

    Интерпретатор как-то даже строковые переменные не осиливает.
    Код

    var
    s : string;
    begin
    s := ‘Hello, world! ‘;
    writeln(s)
    end.

    выдаёт:

    , world!

    Fun какой-то не очень получается ;)

  2. MustLive каже:

    blexey

    Строкові змінні інтерпретатор підтримує і добре з ними справляється. В даному випадку ти використав кому після Hello - це і призвело до подібного результату. Напиши цей самий код без коми і все заробить ;-) .

    В даному випадку проблема в writeln, який обробляє коми як роздільник між змінними, масивами та іншими аргументами. Я записав собі в todo цей баг (в write/writeln я запланував ще багато покращень).

    P.S.

    Операторські дужки begin-end зараз не підтримуються. Їх я планую додати в наступних версіях - це буде одне з важливих покращень інтерпретатора, яке вимагає серйозної роботи, тому й потрібно знайти час для цього.

  3. blexey каже:

    Неплохо было бы еще добавить какое-то вменяемое ;) ограничение на длину строки или вообще используемой памяти - код:

    var
    s : string;
    begin
    s := ‘Hello world!’;
    for 1:=0 to 25 do s := concat(s, s);
    writeln(length(s))
    end.

    заставляет “интерпретатор” заняться долгим и очевидно увлекательным пожиранием памяти сервера. А внешне это выглядит как зависон. :mrgreen:

  4. blexey каже:

    О, нет. Я дико извиняюсь, но всё-таки это закончилось HTTP 500: Internal Server Error :mrgreen:

  5. MustLive каже:

    Я дико извиняюсь, но всё-таки это закончилось HTTP 500: Internal Server Error :mrgreen:

    Це такий захист сервера від DoS атак :-) . Як ти бачиш він працює.

    Коли інтерпретатор споживає забагато пам’яті, сервер вибиває Perl, що і зупиняє роботу мого інтерпретатора. Тим самим захищаючи від DoS атак на споживання ресурсів.

  6. blexey каже:

    Интересный метод. Взял на заметку.

  7. MustLive каже:

    Я дико извиняюсь, но всё-таки это закончилось

    blexey

    Я бачу, в тебе в той день був дуже веселий настрій. Але варто бути більш конструктивним - проведення DoS атак на мій сайт “по приколу” не є конструктивним підходом ;-) , слід було придумати інші приклади. До того ж, раніше я не робив обмеження на розмір строкових даних (як це є в класичному Паскалі), тому в моєму інтепретаторі строкові змінні могли мати розмір до 2 ГБ (максимум для Пєрла на 32-бітних системах).

    Що було додатковим плюсом для Паскаль програмістів, що користувалися моїм інтерпретатором. А так мені довелося ввести обмеження - і тепер розмір строкових даних такий як у класичному Паскалі (255 символів). Зато інтерпретатор буде більш класичним :-) . При цьому я зробив гнучкий механізм і кожен власник моєї системи зможе задати довільний розмір для сторокових даних.

    Интересный метод. Взял на заметку.

    Так треба робити на будь-якому сервері - обмежувати ресурси для додатків (зокрема інтерпретаторів), щоб унеможливити DoS атаки через поглинання ресурсів. Наприклад, в PHP є налаштування для обмеження обсягу пам’яті для окремого скрипта. В Perl такого немає, тому потрібно задавати потрібні обмеження на рівні ОС. Як ти сам бачив, на моєму сервері провайдер виділив для Perl достатньо великий обсяг пам’яті, тому 500 помилку видало не дуже швидко.

  8. MustLive каже:

    Неплохо было бы еще добавить какое-то вменяемое ;) ограничение на длину строки или вообще используемой памяти

    В березні я випустив нову версію інтерпретатора, де вирішив дану проблему.

    Щоб не було можливості через цикли проводити DoS атаки я ввів в 2006 році, як додав підтриму цикла for, обмеження (налаштовуєме) на кількість циклів. Але в даному випадку воно не допомогло, бо вже на 20 ітераціях комп’ютер перевантажується (і тим паче на 25), що я перевірив на своєму двух-ядерному процесорі (на локалхості).

    Тому я додав обмеження на довжину строкових даних (як додатковий анти-DoS захист). Це обмеження рівне 255 символам і воно налаштовується (його можна зробити таким яким треба).

    З однієї сторони, дана зміна в системі зменшує її можливості для користувачів (тому є дещо неконструктивною). Але з іншої, за що тобі спасибі, це треба було зробити для покращення безпеки системи. Я якось випустив з уваги атаки на поглинання пам’яті, коли додав в систему підтримку строкових функцій. На даний момент я додав обмеження розміру строкових даних в функції concat та insert.

Leave a Reply

You must be logged in to post a comment.