কিছু পাঠ্যকে কোনও প্যাটার্নে মেলে দেওয়ার চেষ্টা করার জন্য সর্বাধিক পরিমাণ মেমরি / সময় সীমাবদ্ধ করার জন্য এগুলি পিসিআরই ইঞ্জিনের অভ্যন্তরীণ সেটিংস হিসাবে উপস্থিত বলে মনে হয়। pcreapi
র manpage layman এর পরিপ্রেক্ষিতে তা ব্যাখ্যা সামান্য আছে:
ম্যাচ_লিমিট ফিল্ডটি পিসিআরআইকে প্রচুর পরিমাণে সংস্থান ব্যবহার করতে বাধা দেওয়ার একটি উপায় সরবরাহ করে যা চলতে চলে না এমন প্যাটার্নগুলি যা মেলে না তবে তাদের অনুসন্ধান গাছগুলিতে খুব বেশি সংখ্যক সম্ভাবনা রয়েছে। ক্লাসিক উদাহরণ নেস্টেড সীমাহীন পুনরাবৃত্তিগুলির ব্যবহার।
অভ্যন্তরীণভাবে, পিসিআরই ম্যাচ () নামে একটি ফাংশন ব্যবহার করে যা এটি বারবার কল করে (কখনও কখনও পুনরাবৃত্তি করে)। ম্যাচ_লিমিট দ্বারা নির্ধারিত সীমাটি ম্যাচের সময় এই ফাংশনটি যতবার ডাকা হয় তার উপর চাপিয়ে দেওয়া হয়, এতে ব্যাকট্র্যাকিংয়ের পরিমাণ সীমিত হওয়ার প্রভাব রয়েছে। নমনীয় নয় এমন নিদর্শনগুলির জন্য, গণনাটি বিষয়টির স্ট্রিংয়ের প্রতিটি অবস্থানের জন্য শূন্য থেকে পুনরায় শুরু হয়।
পিসিআরই নির্মিত হলে সীমাটির জন্য ডিফল্ট মান সেট করা যেতে পারে; ডিফল্ট ডিফল্ট হ'ল 10 মিলিয়ন, যা সবচেয়ে চরম ক্ষেত্রে ব্যতীত সমস্ত পরিচালনা করে। আপনি পিসি_এেক্সট্রা ব্লকটি পিসি_এেক্সট্রা ব্লকটি সরবরাহ করে ডিফল্টটিকে ওভাররাইড করতে পারেন যেখানে ম্যাচ_লিমিট সেট করা আছে, এবং পিসিআর_আরেক্টরা_ম্যাটিচ_লিমিট পতাকাগুলির ক্ষেত্রে সেট করা আছে। সীমা অতিক্রম করা হলে, pcre_exec () PCRE_ERROR_MATCHLIMIT প্রদান করে।
ম্যাচ_লিমিট_রেকারশন ক্ষেত্রটি ম্যাচ_লিমিটের সমান, তবে ম্যাচের () নাম্বারটি বলা হয় এমন মোট সময় সীমাবদ্ধ না করে, এটি পুনরাবৃত্তির গভীরতা সীমাবদ্ধ করে। মোট কলগুলির সংখ্যার তুলনায় পুনরাবৃত্তির গভীরতা একটি ছোট সংখ্যা, কারণ () এর সাথে মেলে সমস্ত কল পুনরাবৃত্ত হয় না। এই সীমাটি কেবলমাত্র ম্যাচ_লিমিটের চেয়ে ছোট সেট করা থাকলে ব্যবহারযোগ্য।
যেহেতু পিসিআরই লাইব্রেরি অন্তর্নির্মিত ডিফল্ট 10000000, তাই আমার অনুমান যে অনুরোধগুলি দীর্ঘকাল ধরে রাখা থেকে বিরত রাখতে নীচের সেটিংটি মোড_সিকিউরিটির জন্য প্রস্তাবিত।