From 787b6ef303040a42816c17f5e16254468383be5e Mon Sep 17 00:00:00 2001 From: Natalie Weizenbaum Date: Thu, 26 Feb 2015 16:38:23 -0800 Subject: [PATCH] Fix an @extend edge-case crash. Closes #1656 --- doc-src/SASS_CHANGELOG.md | 2 ++ lib/sass/selector/simple.rb | 9 +++------ test/sass/extend_test.rb | 10 ++++++++++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/doc-src/SASS_CHANGELOG.md b/doc-src/SASS_CHANGELOG.md index 2c446a7716..95b6d5fbeb 100644 --- a/doc-src/SASS_CHANGELOG.md +++ b/doc-src/SASS_CHANGELOG.md @@ -9,6 +9,8 @@ * `@keyframes` rules are now converted from CSS properly. +* Extending a selector that contains a non-final pseudo-class no longer crashes. + ## 3.4.12 (13 February 2015) [Tagged on GitHub](https://github.com/sass/sass/releases/tag/3.4.12). diff --git a/lib/sass/selector/simple.rb b/lib/sass/selector/simple.rb index bb18e8d1e6..5452a4051c 100644 --- a/lib/sass/selector/simple.rb +++ b/lib/sass/selector/simple.rb @@ -72,12 +72,9 @@ def eql?(other) def unify(sels) return sels if sels.any? {|sel2| eql?(sel2)} sels_with_ix = Sass::Util.enum_with_index(sels) - _, i = - if is_a?(Pseudo) - sels_with_ix.find {|sel, _| sel.is_a?(Pseudo) && (sels.last.type == :element)} - else - sels_with_ix.find {|sel, _| sel.is_a?(Pseudo)} - end + if !is_a?(Pseudo) || (sels.last.is_a?(Pseudo) && sels.last.type == :element) + _, i = sels_with_ix.find {|sel, _| sel.is_a?(Pseudo)} + end return sels + [self] unless i sels[0...i] + [self] + sels[i..-1] end diff --git a/test/sass/extend_test.rb b/test/sass/extend_test.rb index 48a73d21dc..132b385ce3 100755 --- a/test/sass/extend_test.rb +++ b/test/sass/extend_test.rb @@ -1338,6 +1338,16 @@ def test_optional_extend_succeeds_when_extension_fails # Regression Tests + def test_extend_with_middle_pseudo + assert_equal(<