daily pastebin goal
62%
SHARE
TWEET

Untitled

a guest Apr 17th, 2018 60 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ## New NonRecurringFileSystem
  2.  
  3. # Prevents horrible bug with include tag that can take out your server.
  4. #
  5.  
  6. module Liquid
  7.   class NonRecurringFileSystem    
  8.     attr_accessor :include_stack      
  9.     def initialize()
  10.       # Stores a stack of included templates
  11.       # so that we don't double-include and cause an infinite loop.
  12.       @include_stack = []
  13.     end
  14.    
  15.     def read_template_file(template_name)
  16.       @include_stack << template_name
  17.       # ... Do stuff to get file here and return content
  18.       return content
  19.     end
  20.   end
  21. end
  22.  
  23. ## Patch for include.rb that doesn't allow infinite loops
  24.  
  25. Index: vendor/plugins/liquid/lib/liquid/tags/include.rb
  26. ===================================================================
  27. --- vendor/plugins/liquid/lib/liquid/tags/include.rb    (revision 697)
  28. +++ vendor/plugins/liquid/lib/liquid/tags/include.rb    (working copy)
  29. @@ -24,7 +24,10 @@
  30.      end
  31.    
  32.      def render(context)      
  33. -      source  = Liquid::Template.file_system.read_template_file(context[@template_name])      
  34. +      # Make sure not to get into infinite loops of inclusion.
  35. +      return if Liquid::Template.file_system.include_stack.include?(context[@template_name])
  36. +      
  37. +      source  = Liquid::Template.file_system.read_template_file(context[@template_name])  
  38.        partial = Liquid::Template.parse(source)      
  39.        
  40.        variable = context[@variable_name || @template_name[1..-2]]
  41. @@ -48,6 +51,9 @@
  42.            
  43.          end
  44.        end
  45. +      
  46. +    ensure
  47. +      Liquid::Template.file_system.include_stack.pop
  48.      end
  49.    end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top