Skip to content

Commit cbff48e

Browse files
committed
Merge tag '8.1.1' into drop-eval
* tag '8.1.1': Don’t use eval
2 parents 8be357d + b3683fb commit cbff48e

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
@@ -69,9 +69,34 @@ protected function allSelectors(&$aResult, $sSpecificitySearch = null) {
6969
if ($sSpecificitySearch === null) {
7070
$aResult[] = $oSelector;
7171
} else {
72-
$sComparison = "\$bRes = {$oSelector->getSpecificity()} $sSpecificitySearch;";
73-
eval($sComparison);
74-
if ($bRes) {
72+
$sComparator = '===';
73+
$aSpecificitySearch = explode(' ', $sSpecificitySearch);
74+
$iTargetSpecificity = $aSpecificitySearch[0];
75+
if(count($aSpecificitySearch) > 1) {
76+
$sComparator = $aSpecificitySearch[0];
77+
$iTargetSpecificity = $aSpecificitySearch[1];
78+
}
79+
$iTargetSpecificity = (int)$iTargetSpecificity;
80+
$iSelectorSpecificity = $oSelector->getSpecificity();
81+
$bMatches = false;
82+
switch($sComparator) {
83+
case '<=':
84+
$bMatches = $iSelectorSpecificity <= $iTargetSpecificity;
85+
break;
86+
case '<':
87+
$bMatches = $iSelectorSpecificity < $iTargetSpecificity;
88+
break;
89+
case '>=':
90+
$bMatches = $iSelectorSpecificity >= $iTargetSpecificity;
91+
break;
92+
case '>':
93+
$bMatches = $iSelectorSpecificity > $iTargetSpecificity;
94+
break;
95+
default:
96+
$bMatches = $iSelectorSpecificity === $iTargetSpecificity;
97+
break;
98+
}
99+
if ($bMatches) {
75100
$aResult[] = $oSelector;
76101
}
77102
}

lib/Sabberworm/CSS/CSSList/Document.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,6 @@ public function getAllValues($mElement = null, $bSearchInFunctionArguments = fal
6464
* @example getSelectorsBySpecificity('>= 100')
6565
*/
6666
public function getSelectorsBySpecificity($sSpecificitySearch = null) {
67-
if (is_numeric($sSpecificitySearch) || is_numeric($sSpecificitySearch[0])) {
68-
$sSpecificitySearch = "== $sSpecificitySearch";
69-
}
7067
$aResult = array();
7168
$this->allSelectors($aResult, $sSpecificitySearch);
7269
return $aResult;

tests/Sabberworm/CSS/ParserTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,13 @@ function testSpecificity() {
153153
}
154154
}
155155
$this->assertEquals(array(new Selector('#test .help', true)), $oDoc->getSelectorsBySpecificity('> 100'));
156+
$this->assertEquals(array(new Selector('#test .help', true), new Selector('#file', true)), $oDoc->getSelectorsBySpecificity('>= 100'));
157+
$this->assertEquals(array(new Selector('#file', true)), $oDoc->getSelectorsBySpecificity('=== 100'));
158+
$this->assertEquals(array(new Selector('#file', true)), $oDoc->getSelectorsBySpecificity('== 100'));
159+
$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'));
160+
$this->assertEquals(array(new Selector('.help:hover', true), new Selector('li.green', true), new Selector('ol li::before', true)), $oDoc->getSelectorsBySpecificity('< 100'));
161+
$this->assertEquals(array(new Selector('li.green', true)), $oDoc->getSelectorsBySpecificity('11'));
162+
$this->assertEquals(array(new Selector('ol li::before', true)), $oDoc->getSelectorsBySpecificity(3));
156163
}
157164

158165
function testManipulation() {

0 commit comments

Comments
 (0)