2012-01-14 8 views
17

मैं अगले कार्य कोड है: जब मैं execute it on codepad मैं त्रुटि मिलती हैचेतावनी:() के आंतरिक pcre_fullinfo()

$test = '123456'; 

$int = preg_match('/^\d+$/', $test, $matches); 

print_r(array($int, $matches)); 

हालांकि:

Warning: preg_match(): Internal pcre_fullinfo() error -3 on line 5

लेकिन कोड पर चल रहा है मेरी अपनी मशीन (और कोड ठीक IMHO होना चाहिए)।

मुझे भविष्य में अपना कोड वितरित करने की आवश्यकता है, इसलिए अगर यह कुछ कॉन्फ़िगरेशन के आधार पर टूट जाएगा तो यह बुरा होगा। तो इस पर कोडेपैड तोड़ने का कारण क्या है?

उत्तर

29

कोड codepad के माध्यम से निष्पादित एक बहुत ही प्रतिबंधित वातावरण में चल रहा है:

Code execution is handled by a supervisor based on geordi. The strategy is to run everything under ptrace, with many system calls disallowed or ignored. Compilers and final executables are both executed in a chroot jail, with strict resource limits. The supervisor is written in Haskell.

हालांकि यह कुछ भी नहीं है आप एक regex इंजन को तोड़ने के लिए यह जरूरी है कि PCRE पुस्तकालय कुछ आंतरिक कि द्वारा अवरुद्ध है का उपयोग करता है बहुत संभव है उम्मीद थी है कोडेपैड पर्यावरण। कोई उत्पादन प्रणाली ऐसे गंभीर प्रतिबंधों का उपयोग नहीं करती है, इसलिए आपको अपने आवेदन में उस कोड का उपयोग करने के लिए सुरक्षित होना चाहिए।

त्रुटि कोड "PCRE_ERROR_BADOPTION - का मान है अमान्य था"। हालांकि, PHP स्रोत में कोड जहां त्रुटि होती है rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_CAPTURECOUNT, &num_subpats); है जो के लिए निरंतर उपयोग करता है। तो इसका स्पष्ट अर्थ है कि पिक्चर लाइब्रेरी को कोडपैड पर तोड़ दिया गया है।

यदि आप पूरी तरह से सुरक्षित होना चाहते हैं, तो आप उसी कार्य को उस फ़ंक्शन पर कॉल करने के लिए libpcre का उपयोग करके एक छोटा सी प्रोग्राम लिख सकते हैं।

संबंधित मुद्दे