Skip to content

Commit 3765013

Browse files
committed
Merge pull request #71 from codeclimate/will/php-inf-nan
PHP Parser: handle INF/NaN nodes
2 parents b618b82 + f281005 commit 3765013

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

spec/cc/engine/analyzers/php/main_spec.rb

+25
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,31 @@
5656
expect(result).to match "\"type\":\"issue\""
5757
end
5858

59+
it "handles INF & NAN constants" do
60+
create_source_file("foo.php", <<-EOPHP)
61+
<?php
62+
function f1($name) {
63+
// the php-parser lib turns this into INF, but writing INF directly gets emitted differently
64+
if (empty($name)) {
65+
return 646e444;
66+
} else {
67+
return 0;
68+
}
69+
}
70+
71+
function f2($name) {
72+
if (empty($name)) {
73+
return 646e444;
74+
} else {
75+
return 0;
76+
}
77+
}
78+
EOPHP
79+
80+
result = run_engine(engine_conf).strip
81+
expect(result).to match "\"type\":\"issue\""
82+
end
83+
5984
it "skips unparsable files" do
6085
create_source_file("foo.php", <<-EOPHP)
6186
<?php blorb &; "fee

vendor/php-parser/lib/PhpParser/Serializer/JSON.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ protected function _serialize($node) {
2929
}
3030

3131
foreach ($node as $name => $subNode) {
32-
if (is_string($subNode)) {
32+
if (INF === $subNode) {
33+
$doc[$name] = "_PHP:CONST:INF";
34+
} elseif (NaN === $subNode) {
35+
$doc[$name] = "_PHP:CONST:NaN";
36+
} elseif (is_string($subNode)) {
3337
$doc[$name] = utf8_encode($subNode);
3438
} elseif (is_int($subNode)) {
3539
$doc[$name] = $subNode;

0 commit comments

Comments
 (0)