یکی از معروف ترین باگهای Ruby با شناسه CVE-2013-1854 بود. مشکل از اون جایی شروع میشد که هر بار متد
to_sym روی یک رشته اجرا میشد، یک Symbol جدید تو حافظه ساخته میشد، اما Garbage Collector (GC) قادر به آزاد کردن اون نبود.این یعنی اگه یه مهاجم هزاران یا حتی میلیون ها Symbol منحصر به فرد ایجاد میکرد حافظه برنامه به تدریج پر میشد تا جایی که برنامه کرش میکرد یا دچار Denial of Service (DoS) میشد
این آسیب پذیری بعدها در Ruby 2.2 با اضافه شدن Garbage Collection برای Symbolها برطرف شد و یکی از مهم ترین باگ های تاریخ Ruby محسوب میشهه.
این باگ باعث شد توسعه دهندگان Ruby یکی از تغییرات اساسی تو مدیریت حافظه این زبان رو پیادهسازی کنن.
100_000.times do |i|
"user_#{i}".to_sym
end
مشکل اینجا بود که در نسخه های قدیمی Ruby، هر بار
to_sym روی یک رشته جدید اجرا میشد، یک Symbol در حافظه ساخته می شد که Garbage Collector (GC) نمیتونست اون رو حذف کنهاگه این اتفاق بارها تکرار میشد حافظه رفته رفته پر میشد و اخر برنامه کرش میکرد یا دچار Denial of Service (DoS) میشد
Ruby Code : @RubyCode1💎

