Skip to content

Commit 7df1f66

Browse files
committed
Merge tag '5.2.1' into drop-eval
* tag '5.2.1': Don’t use eval
2 parents 9ea4b00 + 0245a08 commit 7df1f66

File tree

3 files changed

+35
-6
lines changed

3 files changed

+35
-6
lines changed

lib/Sabberworm/CSS/CSSList/CSSBlockList.php

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,34 @@ protected function allSelectors(&$aResult, $sSpecificitySearch = null) {
6565
if ($sSpecificitySearch === null) {
6666
$aResult[] = $oSelector;
6767
} else {
68-
$sComparison = "\$bRes = {$oSelector->getSpecificity()} $sSpecificitySearch;";
69-
eval($sComparison);
70-
if ($bRes) {
68+
$sComparator = '===';
69+
$aSpecificitySearch = explode(' ', $sSpecificitySearch);
70+
$iTargetSpecificity = $aSpecificitySearch[0];
71+
if(count($aSpecificitySearch) > 1) {
72+
$sComparator = $aSpecificitySearch[0];
73+
$iTargetSpecificity = $aSpecificitySearch[1];
74+
}
75+
$iTargetSpecificity = (int)$iTargetSpecificity;
76+
$iSelectorSpecificity = $oSelector->getSpecificity();
77+
$bMatches = false;
78+
switch($sComparator) {
79+
case '<=':
80+
$bMatches = $iSelectorSpecificity <= $iTargetSpecificity;
81+
break;
82+
case '<':
83+
$bMatches = $iSelectorSpecificity < $iTargetSpecificity;
84+
break;
85+
case '>=':
86+
$bMatches = $iSelectorSpecificity >= $iTargetSpecificity;
87+
break;
88+
case '>':
89+
$bMatches = $iSelectorSpecificity > $iTargetSpecificity;
90+
break;
91+
default:
92+
$bMatches = $iSelectorSpecificity === $iTargetSpecificity;
93+
break;
94+
}
95+
if ($bMatches) {
7196
$aResult[] = $oSelector;
7297
}
7398
}

lib/Sabberworm/CSS/CSSList/Document.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,6 @@ public function getAllValues($mElement = null, $bSearchInFunctionArguments = fal
5757
* @example getSelectorsBySpecificity('>= 100')
5858
*/
5959
public function getSelectorsBySpecificity($sSpecificitySearch = null) {
60-
if (is_numeric($sSpecificitySearch) || is_numeric($sSpecificitySearch[0])) {
61-
$sSpecificitySearch = "== $sSpecificitySearch";
62-
}
6360
$aResult = array();
6461
$this->allSelectors($aResult, $sSpecificitySearch);
6562
return $aResult;

tests/Sabberworm/CSS/ParserTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,13 @@ function testSpecificity() {
150150
}
151151
}
152152
$this->assertEquals(array(new Selector('#test .help', true)), $oDoc->getSelectorsBySpecificity('> 100'));
153+
$this->assertEquals(array(new Selector('#test .help', true), new Selector('#file', true)), $oDoc->getSelectorsBySpecificity('>= 100'));
154+
$this->assertEquals(array(new Selector('#file', true)), $oDoc->getSelectorsBySpecificity('=== 100'));
155+
$this->assertEquals(array(new Selector('#file', true)), $oDoc->getSelectorsBySpecificity('== 100'));
156+
$this->assertEquals(array(new Selector('#file', true), new Selector('.help:hover', true), new Selector('li.green', true), new Selector('ol li::before', true)), $oDoc->getSelectorsBySpecificity('<= 100'));
157+
$this->assertEquals(array(new Selector('.help:hover', true), new Selector('li.green', true), new Selector('ol li::before', true)), $oDoc->getSelectorsBySpecificity('< 100'));
158+
$this->assertEquals(array(new Selector('li.green', true)), $oDoc->getSelectorsBySpecificity('11'));
159+
$this->assertEquals(array(new Selector('ol li::before', true)), $oDoc->getSelectorsBySpecificity(3));
153160
}
154161

155162
function testManipulation() {

0 commit comments

Comments
 (0)