ĂshtĂ« identifikuar mundĂ«sia e krijimit tĂ« funksioneve tĂ« llogaritura pĂ«rmes strukturave nĂ« skedarĂ«t e konfigurimit tĂ« utilitarit Curl. Ky veçori shfaqet vetĂ«m nĂ« versionet e Curl nga 8.12-8.16 dhe shkaktohet nga implementimi i paqĂ«llimshĂ«m i plotĂ«sisĂ« sĂ« Turing-it, qĂ« lejon krijimin e makinave Turing, duke pĂ«rdorur mundĂ«sinĂ« pĂ«r tĂ« nxjerrĂ« intervale bajtesh nga vlerat e variablave dhe thellĂ«si tĂ« pakufizuar tĂ« nguljes gjatĂ« lidhjes me skedarĂ«t e jashtĂ«m tĂ« konfigurimit.
Si një shembull, përmes Curl është organizuar një simulim i punës së makinerisë regjistruese me dy regjistra (makina e Minskut) për mbledhjen e numrave dhe realizimin e programit "99 shishe birrë", i përdorur gjatë mësimit të punës me ciklet. Për të nisur programin, i programuar përmes skedarëve të konfigurimit curl, mjafton të nxjerrësh arkivën dhe të ekzekutosh komandën "curl -q -s -K 99_bottles/main.conf".
Makina regjistruese simulohet pĂ«rmes paraqitjes sĂ« vlerĂ«s sĂ« regjistrit si njĂ« varg i ânâ simboleve âxâ. Operacionet e inkrementimit dhe dekremtimit realizohen pĂ«rmes konkatenimit dhe shkurtimeve tĂ« vargjeve (sintaksi "[0-0]" pĂ«r tĂ« lĂ«nĂ« bajtin e parĂ« dhe "[1-]" pĂ«r tĂ« lĂ«nĂ« tĂ« gjithĂ« pĂ«rmbajtjen pĂ«rveç bajtĂ«ve tĂ« parĂ«), ndĂ«rsa kalimet midis gjendjeve kontrollohen nga direktiva "expand-config", e cila ngarkon dinamik skedarin e ardhshĂ«m tĂ« konfigurimit, duke pĂ«rdorur emrin e tij si etiketĂ« kalimi. Operacioni INC(R) nĂ« makinĂ«n regjistruese realizohet si âexpand-variable = "r={{r}}x"â nĂ« skedarin e konfigurimit Curl, DEC(R) si âexpand-variable = "r[1-]={{r}}"â, dhe JMP(S) si âexpand-config = "S.conf"â. PĂ«r shembull, kodi pĂ«r llogaritjen e 2 + 3:

Në praktikë, mundësitë e llogaritjes të realizuara përmes skedarëve të konfigurimit janë të kufizuara nga madhësia e stack-ut, pasi çdo hap i ekzekutimit të programit kërkon ngarkimin e një skedari të ri të ngulitur të konfigurimit. Me një stack prej 8 MB, mbingarkesa ndodh rreth pas 922 hapash. Mundësitë ndikohen gjithashtu nga kufizimi në madhësinë e variablave të zgjeruar (parametri MAX_EXPAND_CONTENT është vendosur në 10 MB) dhe konsum i madh memorje për shkak të ruajtjes së të gjitha versioneve të vjetra të variablave.
Megjithëse mundësia e identifikuar nuk është një dobësi në versionet duke filluar nga curl 8.17, truku i shqyrtuar tashmë nuk do të funksionojë për shkak të kufizimit në thellësinë e nguljes së skedarëve të konfigurimit në 5 nivele për të mbrojtur nga rekursioni i pafund.
Burimi: opennet.ru
