Curl configuration ဖိုင်များရှိ constructs များကို အသုံးပြု၍ မည်သည့်တွက်ချက်နိုင်သော function ကိုမဆို ဖန်တီးနိုင်ကြောင်း ရှာဖွေတွေ့ရှိခဲ့သည်။ ဤပြဿနာသည် Curl ဗားရှင်း 8.12–8.16 တွင်သာ ဖြစ်ပွားပြီး Turing completeness ကို မရည်ရွယ်ဘဲ အကောင်အထည်ဖော်မှုကြောင့် ဖြစ်ပေါ်လာခြင်းဖြစ်ပြီး၊ ၎င်းသည် variable values များမှ byte ranges များကို extract လုပ်နိုင်စွမ်းနှင့် external configuration ဖိုင်များထည့်သွင်းသည့်အခါ အကန့်အသတ်မရှိ nesting depth ကို အသုံးပြု၍ Turing machines များဖန်တီးနိုင်စေပါသည်။
ဥပမာအားဖြင့်၊ Curl ကို ဂဏန်းများပေါင်းခြင်းနှင့် loops များကိုသင်ကြားပေးရန်အသုံးပြုသည့် "99 Bottles of Beer" ပရိုဂရမ်ကိုအကောင်အထည်ဖော်ရန်အတွက် two-counter register machine (Minsky machine) ကို simulate လုပ်ရန်အသုံးပြုသည်။ curl configuration files များကို အသုံးပြု၍ ပရိုဂရမ်ရေးသားထားသော program ကို run ရန် archive ကို unzip လုပ်ပြီး "curl -q -s -K 99_bottles/main.conf" command ကို run ပါ။
register စက်ကို counter value ကို n x character များပါဝင်သော string အဖြစ်ကိုယ်စားပြုခြင်းဖြင့် simulate လုပ်ထားသည်။ Increment နှင့် Decrement operations များကို string concatenation နှင့် truncation (syntax "[0-0]" သည် ပထမ byte ကိုသိမ်းဆည်းရန်နှင့် ပထမ byte မှလွဲ၍ content အားလုံးကိုသိမ်းဆည်းရန်) ကို အသုံးပြု၍ အကောင်အထည်ဖော်ပြီး state transitions များကို "expand-config" directive မှထိန်းချုပ်ပြီး ၎င်း၏အမည်ကို jump label အဖြစ်အသုံးပြု၍ နောက် configuration file ကို dynamically load လုပ်သည်။ register စက်ရှိ INC(R) operation ကို Curl configuration file တွင် 'expand-variable = "r={{r}}x"' အဖြစ်၊ DEC(R) ကို 'expand-variable = "r[1-]={{r}}"' အဖြစ် နှင့် JMP(S) ကို 'expand-config = "S.conf"' အဖြစ် အကောင်အထည်ဖော်သည်။ ဥပမာအားဖြင့်၊ 2 + 3 ကိုတွက်ချက်ရန် code:

လက်တွေ့တွင်၊ configuration ဖိုင်များမှတစ်ဆင့် ရရှိလာသော တွက်ချက်မှုစွမ်းရည်များသည် stack အရွယ်အစားကြောင့် ကန့်သတ်ထားသည်၊ အဘယ်ကြောင့်ဆိုသော် ပရိုဂရမ်ကို အကောင်အထည်ဖော်ခြင်း၏ အဆင့်တိုင်းတွင် nested configuration ဖိုင်အသစ်တစ်ခုကို load လုပ်ရန် လိုအပ်သောကြောင့်ဖြစ်သည်။ 8 MB stack တွင်၊ overflow သည် ခန့်မှန်းခြေအားဖြင့် အဆင့် ၉၂၂ ဆင့်ပြီးနောက် ဖြစ်ပေါ်သည်။ ချဲ့ထွင်ထားသော variable များ၏ အရွယ်အစား ကန့်သတ်ချက် (MAX_EXPAND_CONTENT parameter ကို 10 MB ဟု သတ်မှတ်ထားသည်) နှင့် variable များ၏ ဗားရှင်းဟောင်းအားလုံးကို သိမ်းဆည်းခြင်းကြောင့် မှတ်ဉာဏ်သုံးစွဲမှု မြင့်မားခြင်းတို့ကလည်း စွမ်းရည်များကို သက်ရောက်မှုရှိသည်။
ဖော်ထုတ်တွေ့ရှိထားသော အင်္ဂါရပ်သည် အားနည်းချက်မဟုတ်သော်လည်း curl 8.17 မှစတင်သော ဗားရှင်းများတွင် အဆုံးမဲ့ recursion မှကာကွယ်ရန် configuration ဖိုင်များ၏ nesting depth ကို level 5 အထိ ကန့်သတ်ထားသောကြောင့် သက်ဆိုင်ရာလှည့်ကွက်သည် အလုပ်မလုပ်တော့ပါ။
source: opennet.ru
