c++ - Execution time limit for a Lua script called from the C API -


  लुआला_लोडफाइल (mState, path.c_str ()); Lua_pcall (एमस्टेट, 0, 0, 0);  

क्या उन दो सी + + स्टेटमेंटों के लिए निष्पादन समय सीमा (10-20 सेकेंड कहना) रखने का कोई तरीका है, लोड हो रहा है और फिर लावा फ़ाइल निष्पादित?

चूंकि लुआ फ़ाइल अविश्वसनीय है मैं एक दुर्भावनापूर्ण उपयोगकर्ता लुआ कोड में अनंत लूप के साथ अनिश्चित काल कार्यक्रम लटका नहीं करना चाहती।

टैगिंग सी क्योंकि लुआ एपीआई सी, टैगिंग सी है, क्योंकि ++ मैं सी का उपयोग कर रहा ++

lua_sethook जो दुभाषिया बताने के लिए इस्तेमाल किया जा सकता कॉल करने के लिए

नहीं है प्रत्येक 'गिनती' निर्देशों के निष्पादन के बाद एक हुक। इस तरह आप उपयोगकर्ता स्क्रिप्ट पर नजर रखने और इसे समाप्त कर सकते हैं अगर उसके कोटे अप खाती है:

  पूर्णांक lua_sethook (lua_State * एल, lua_Hook च, int मुखौटा, पूर्णांक गिनती);  

यह भी लुआ से इस्तेमाल किया जा सकता:

 <कोड> debug.sethook (function () प्रिंट ( "ऐसा इसलिए है I = 1,10000 के अंत के लिए  

यदि आप तकनीक का इस्तेमाल करते हैं तो आप सेट अप कर सकते हैं एक लिफाफा से sethook () और दोस्तों के साथ एक सुरक्षित निष्पादन वातावरण और फिर उपयोगकर्ता स्क्रिप्ट निष्पादित करते समय सैंडबॉक्स मोड पर स्विच करें। मुझे लगता है कि यहाँ की कोशिश की है, तो आप आरंभ करने के लिए बस के लिए:

 <कोड> - एक निष्पादन कोटा स्थानीय समारोह set_quota सेट (सेकंड) स्थानीय सेंट = ओएस .clock () फ़ंक्शन चेक () अगर os.clock () - st & gt; Secs तो debug.sethook () - अक्षम हुक त्रुटि ("कोटा पार हो गई") अंत अंत debug.sethook (चेक, "", 100000); अंत - ये वैश्विक वस्तुएं हैं, उपयोगकर्ता उपयोग कर सकते हैं: स्थानीय env = {print = print} - उपयोगकर्ता कोड 5 सेकंड तक चलने की अनुमति है। set_quota (5) - वातावरण के अंतर्गत रन कोड: स्थानीय समारोह रन (untrusted_code) स्थानीय untrusted_function, संदेश = loadstring (untrusted_code) यदि untrusted_function नहीं तो वापसी नहीं के बराबर, संदेश अंत setfenv (untrusted_function, env) वापसी pcall (untrusted_function) अंत - यहाँ यूजर कोड: स्थानीय यूजरस्क्रिप्ट = [[फ़ंक्शन फ़िब (एन) अगर एनएंडटी; 2 फिर एन और रिटर्न फिब (एन -2) + एफआईबी (एन -1) एन = 1,42 प्रिंट के अंत अंत (n, (आर, एम)  

यह 5 सेकंड के लिए फाइब के मूल्यों को प्रिंट करना चाहिए और फिर एक त्रुटि दिखाएं।


Comments

Popular posts from this blog

Eclipse CDT variable colors in editor -

AJAX doesn't send POST query -

wpf - Custom Message Box Advice -