Skip to content

Commit d217848

Browse files
committed
Merge tag '8.2.1' into drop-eval
* tag '8.2.1': Don’t use eval
2 parents 91bcc3e + cbff48e commit d217848

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
@@ -72,9 +72,6 @@ public function getAllValues($mElement = null, $bSearchInFunctionArguments = fal
7272
* @example getSelectorsBySpecificity('>= 100')
7373
*/
7474
public function getSelectorsBySpecificity($sSpecificitySearch = null) {
75-
if (is_numeric($sSpecificitySearch) || is_numeric($sSpecificitySearch[0])) {
76-
$sSpecificitySearch = "== $sSpecificitySearch";
77-
}
7875
$aResult = array();
7976
$this->allSelectors($aResult, $sSpecificitySearch);
8077
return $aResult;

tests/Sabberworm/CSS/ParserTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,13 @@ function testSpecificity() {
159159
}
160160
}
161161
$this->assertEquals(array(new Selector('#test .help', true)), $oDoc->getSelectorsBySpecificity('> 100'));
162+
$this->assertEquals(array(new Selector('#test .help', true), new Selector('#file', true)), $oDoc->getSelectorsBySpecificity('>= 100'));
163+
$this->assertEquals(array(new Selector('#file', true)), $oDoc->getSelectorsBySpecificity('=== 100'));
164+
$this->assertEquals(array(new Selector('#file', true)), $oDoc->getSelectorsBySpecificity('== 100'));
165+
$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'));
166+
$this->assertEquals(array(new Selector('.help:hover', true), new Selector('li.green', true), new Selector('ol li::before', true)), $oDoc->getSelectorsBySpecificity('< 100'));
167+
$this->assertEquals(array(new Selector('li.green', true)), $oDoc->getSelectorsBySpecificity('11'));
168+
$this->assertEquals(array(new Selector('ol li::before', true)), $oDoc->getSelectorsBySpecificity(3));
162169
}
163170

164171
function testManipulation() {

0 commit comments

Comments
 (0)