haml-edge 2.3.67 → 2.3.68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/EDGE_GEM_VERSION CHANGED
@@ -1 +1 @@
1
- 2.3.67
1
+ 2.3.68
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.3.67
1
+ 2.3.68
data/lib/haml/engine.rb CHANGED
@@ -110,7 +110,6 @@ module Haml
110
110
  @precompiled = ''
111
111
  @to_merge = []
112
112
  @tab_change = 0
113
- @temp_count = 0
114
113
 
115
114
  precompile
116
115
  rescue Haml::Error => e
@@ -179,15 +178,13 @@ module Haml
179
178
  @haml_buffer = buffer
180
179
  end
181
180
 
182
- str = eval(precompiled + ";" + precompiled_method_return_value,
181
+ eval(precompiled + ";" + precompiled_method_return_value,
183
182
  scope, @options[:filename], @options[:line])
184
-
183
+ ensure
185
184
  # Get rid of the current buffer
186
185
  scope_object.instance_eval do
187
186
  @haml_buffer = buffer.upper
188
187
  end
189
-
190
- str
191
188
  end
192
189
  alias_method :to_html, :render
193
190
 
@@ -17,8 +17,9 @@ module Haml
17
17
  # Don't escape text that's already safe,
18
18
  # output is always HTML safe
19
19
  def html_escape_with_haml_xss(text)
20
- return text if text.html_safe?
21
- html_escape_without_haml_xss(text).html_safe!
20
+ str = text.to_s
21
+ return text if str.html_safe?
22
+ html_escape_without_haml_xss(str).html_safe!
22
23
  end
23
24
 
24
25
  # Output is always HTML safe
@@ -92,14 +92,17 @@ module Haml
92
92
  # Returns the precompiled string with the preamble and postamble
93
93
  def precompiled_with_ambles(local_names)
94
94
  preamble = <<END.gsub("\n", ";")
95
+ begin
95
96
  extend Haml::Helpers
96
97
  _hamlout = @haml_buffer = Haml::Buffer.new(@haml_buffer, #{options_for_buffer.inspect})
97
98
  _erbout = _hamlout.buffer
98
99
  __in_erb_template = true
99
100
  END
100
101
  postamble = <<END.gsub("\n", ";")
101
- @haml_buffer = @haml_buffer.upper
102
102
  #{precompiled_method_return_value}
103
+ ensure
104
+ @haml_buffer = @haml_buffer.upper
105
+ end
103
106
  END
104
107
  preamble + locals_code(local_names) + precompiled + postamble
105
108
  end
@@ -1005,29 +1008,31 @@ END
1005
1008
 
1006
1009
  def resolve_newlines
1007
1010
  return unless @newlines > 0
1011
+ flush_merged_text unless @to_merge.all? {|type, *_| type == :text}
1008
1012
  @precompiled << "\n" * @newlines
1009
1013
  @newlines = 0
1010
1014
  end
1011
1015
 
1012
1016
  # Get rid of and whitespace at the end of the buffer
1013
1017
  # or the merged text
1014
- def rstrip_buffer!
1015
- if @to_merge.empty?
1018
+ def rstrip_buffer!(index = -1)
1019
+ last = @to_merge[index]
1020
+ if last.nil?
1016
1021
  push_silent("_hamlout.rstrip!", false)
1017
1022
  @dont_tab_up_next_text = true
1018
1023
  return
1019
1024
  end
1020
1025
 
1021
- last = @to_merge.last
1022
1026
  case last.first
1023
1027
  when :text
1024
1028
  last[1].rstrip!
1025
1029
  if last[1].empty?
1026
- @to_merge.pop
1027
- rstrip_buffer!
1030
+ @to_merge.slice! index
1031
+ rstrip_buffer! index
1028
1032
  end
1029
1033
  when :script
1030
1034
  last[1].gsub!(/\(haml_temp, (.*?)\);$/, '(haml_temp.rstrip, \1);')
1035
+ rstrip_buffer! index - 1
1031
1036
  else
1032
1037
  raise SyntaxError.new("[HAML BUG] Undefined entry in Haml::Precompiler@to_merge.")
1033
1038
  end
@@ -72,6 +72,7 @@ class EngineTest < Test::Unit::TestCase
72
72
  "/ foo\n\n bar" => ["Illegal nesting: nesting within a tag that already has content is illegal.", 3],
73
73
  "!!!\n\n bar" => ["Illegal nesting: nesting within a header command is illegal.", 3],
74
74
  "foo\n:ruby\n 1\n 2\n 3\n- raise 'foo'" => ["foo", 6],
75
+ "= raise 'foo'\nfoo\nbar\nbaz\nbang" => ["foo", 1],
75
76
  }
76
77
 
77
78
  User = Struct.new('User', :id)
@@ -338,6 +339,18 @@ HTML
338
339
  HAML
339
340
  end
340
341
 
342
+ def test_outer_whitespace_nuke_with_empty_script
343
+ assert_equal(<<HTML, render(<<HAML))
344
+ <p>
345
+ foo<a></a></p>
346
+ HTML
347
+ %p
348
+ foo
349
+ = " "
350
+ %a>
351
+ HAML
352
+ end
353
+
341
354
  def test_both_case_indentation_work_with_deeply_nested_code
342
355
  result = <<RESULT
343
356
  <h2>
@@ -973,6 +986,32 @@ END
973
986
  assert_equal("FOO\n", engine("= upcase").render_proc("foo".instance_eval{binding}).call)
974
987
  end
975
988
 
989
+ def test_haml_buffer_gets_reset_even_with_exception
990
+ scope = Object.new
991
+ render("- raise Haml::Error", :scope => scope)
992
+ assert(false, "Expected exception")
993
+ rescue Exception
994
+ assert_nil(scope.send(:haml_buffer))
995
+ end
996
+
997
+ def test_def_method_haml_buffer_gets_reset_even_with_exception
998
+ scope = Object.new
999
+ engine("- raise Haml::Error").def_method(scope, :render)
1000
+ scope.render
1001
+ assert(false, "Expected exception")
1002
+ rescue Exception
1003
+ assert_nil(scope.send(:haml_buffer))
1004
+ end
1005
+
1006
+ def test_render_proc_haml_buffer_gets_reset_even_with_exception
1007
+ scope = Object.new
1008
+ proc = engine("- raise Haml::Error").render_proc(scope)
1009
+ proc.call
1010
+ assert(false, "Expected exception")
1011
+ rescue Exception
1012
+ assert_nil(scope.send(:haml_buffer))
1013
+ end
1014
+
976
1015
  def test_ugly_true
977
1016
  assert_equal("<div id='outer'>\n<div id='inner'>\n<p>hello world</p>\n</div>\n</div>\n",
978
1017
  render("#outer\n #inner\n %p hello world", :ugly => true))
@@ -284,5 +284,9 @@ END
284
284
  def test_rendered_string_is_html_safe_with_action_view
285
285
  assert(render("Foo", :action_view).html_safe?)
286
286
  end
287
+
288
+ def test_xss_html_escaping_with_non_strings
289
+ assert_equal("4\n", render("= html_escape(4)"))
290
+ end
287
291
  end
288
292
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: haml-edge
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.67
4
+ version: 2.3.68
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Weizenbaum
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-10-31 00:00:00 -04:00
13
+ date: 2009-11-03 00:00:00 -05:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -44,8 +44,8 @@ extensions: []
44
44
 
45
45
  extra_rdoc_files:
46
46
  - README.md
47
- - REVISION
48
47
  - VERSION
48
+ - REVISION
49
49
  - VERSION_NAME
50
50
  - CONTRIBUTING
51
51
  - MIT-LICENSE
@@ -262,8 +262,8 @@ files:
262
262
  - init.rb
263
263
  - .yardopts
264
264
  - README.md
265
- - REVISION
266
265
  - VERSION
266
+ - REVISION
267
267
  - VERSION_NAME
268
268
  - CONTRIBUTING
269
269
  - MIT-LICENSE