Felfedezték, hogy bármilyen számítható függvény létrehozható a Curl segédprogram konfigurációs fájljaiban található konstrukciók segítségével. Ez a tulajdonság csak a 8.12-8.16 verziójú Curl változatokban jelentkezik, amelyet a Turing teljesítményének véletlen megvalósítása okoz, lehetővé téve Turing-gépek létrehozását a változók értékeiből byte-tartományok lehívásának lehetőségével és a külső konfigurációs fájlok csatlakozásakor korlátlan mélységű beágyazással.
Példaként a Curl segítségével két számlálós regisztergép (Minszki gép) működésének szimulációja valósult meg a számok összeadására és a '99 üveg sör' program megvalósítására, amelyet a ciklusokkal való munka tanítására használnak. A program futtatásához, amelyet a curl konfigurációs fájljaiban programoztak, elegendő a tömörített fájl kibővítése és a 'curl -q -s -K 99_bottles/main.conf' parancs végrehajtása.
A regisztergép a számláló értékének 'n' x karakterből álló karakterláncként való ábrázolásán keresztül van szimulálva. Az inkrementálás és dekrementálás műveleteit karakterláncok összefűzése és levágása (a '[0-0]' szintaxis az első byte megőrzésére és a '[1-]' a többi tartalom fenntartására) valósítja meg, míg az állapotok közötti átmeneteket az 'expand-config' direktíva vezérli, amely dinamikusan betölti a következő konfigurációs fájlt, a nevét átmeneti címkeként használva. Az INC(R) művelet a regisztergépen a 'expand-variable = "r={{r}}x"' Curl konfigurációs fájlban, a DEC(R) a 'expand-variable = "r[1-]={{r}}"', míg a JMP(S) a 'expand-config = "S.conf"'. Például a kód a 2 + 3 kiszámításához:

A gyakorlatban a konfigurációs fájlokon keresztül megvalósítható számítási lehetőségek a verem méretének korlátozásával vannak, mivel a program végrehajtásának minden lépéséhez új, beágyazott konfigurációs fájl betöltése szükséges. 8 MB veremméret mellett a túlcsordulás körülbelül 922 lépés után következik be. A lehetőségeket a felfedett változók méretkorlátozása is befolyásolja (a MAX_EXPAND_CONTENT paraméter 10 MB-ra van beállítva) és a régi változók tárolásából adódó magas memóriafogyasztás.
Annak ellenére, hogy a felfedezett lehetőség nem sérülékenység a Curl 8.17 verziójától kezdődően, a vizsgált trükk már nem működik a konfigurációs fájlok 5 szintű beágyazásának korlátozása miatt, ami védi a végtelen rekurziót.
Forrás: opennet.ru
