Curl конфигурация файлдарындагы конструкцияларды колдонуу менен каалаган эсептелүүчү функцияны түзүүгө болору аныкталды. Бул көйгөй Curl 8.12–8.16 версияларында гана кездешет жана Тюрингдин толуктугун кокустан ишке ашыруудан келип чыгат, ал Тюринг машиналарын өзгөрүлмө маанилерден байт диапазондорун жана тышкы конфигурация файлдарын кошууда чексиз уя салуу тереңдигин алуу мүмкүнчүлүгүн колдонуп түзүүгө мүмкүндүк берет.
Мисал катары, Curl сандарды кошуу жана циклдерди үйрөтүү үчүн колдонулган "99 бөтөлкө сыра" программасын ишке ашыруу үчүн эки эсептегичтүү регистрдик машинаны (Минский машинасы) симуляциялоо үчүн колдонулат. Curl конфигурация файлдарын колдонуп программаланган программаны иштетүү үчүн, жөн гана архивди ачып, "curl -q -s -K 99_bottles/main.conf" буйругун аткарыңыз.
Регистр машинасы эсептегичтин маанисин n x символдон турган сап катары көрсөтүү менен симуляцияланат. Көбөйтүү жана азайтуу операциялары саптарды бириктирүү жана кыскартуу аркылуу ишке ашырылат (биринчи байтты сактоо үчүн "[0-0]" синтаксиси жана биринчи байттан башка бардык мазмунду сактоо үчүн "[1-]"), ал эми абалдын өтүшү "expand-config" директивасы тарабынан башкарылат, ал кийинки конфигурация файлын анын атын секирүү энбелгиси катары колдонуп динамикалык түрдө жүктөйт. Регистр машинасындагы INC(R) операциясы Curl конфигурация файлында 'expand-variable = "r={{r}}x"', DEC(R) 'expand-variable = "r[1-]={{r}}"', ал эми JMP(S) 'expand-config = "S.conf"' катары ишке ашырылат. Мисалы, 2 + 3 эсептөө үчүн код:

Иш жүзүндө, конфигурация файлдары аркылуу ишке ашырылган эсептөө мүмкүнчүлүктөрү стектин өлчөмү менен чектелет, анткени программаны аткаруунун ар бир кадамы жаңы ички конфигурация файлын жүктөөнү талап кылат. 8 МБ стек менен болжол менен 922 кадамдан кийин ашып кетүү болот. Мүмкүнчүлүктөргө кеңейтилген өзгөрмөлөрдүн өлчөмүнүн чеги (MAX_EXPAND_CONTENT параметри 10 МБ деп коюлган) жана өзгөрмөлөрдүн бардык эски версияларын сактоодон улам эс тутумдун көп керектелиши да таасир этет.
Аныкталган өзгөчөлүк алсыздык болбосо да, curl 8.17 менен башталган версияларда чексиз рекурсиядан коргоо үчүн конфигурация файлдарынын уя салуу тереңдигин 5 деңгээлге чейин чектөөдөн улам каралып жаткан амал иштебей калат.
Source: opennet.ru
