Package home | Report new bug | New search | Development Roadmap Status: Open | Feedback | All | Closed Since Version 3.7.2

Bug #17236 PHP Warning due to token_get_all() in DoubleQuoteUsageSniff
Submitted: 2010-03-17 04:02 UTC
From: ashnazg Assigned: squiz
Status: Closed Package: PHP_CodeSniffer (version SVN-20100322)
PHP Version: 5.2.4 OS: RHEL4
Roadmaps: (Not assigned)    
Subscription  
Comments Add Comment Add patch


Anyone can comment on a bug. Have a simpler test case? Does it work for you on a different platform? Let us know! Just going to say 'Me too!'? Don't clutter the database with that please !
Your email address:
MUST BE VALID
Solve the problem : 19 + 18 = ?

 
 [2010-03-17 04:02 UTC] ashnazg (Chuck Burgess)
Description: ------------ Odd edge case, but could be fairly typical for creating SQL statement strings, causes a PHP warning from the Squiz's Strings/DoubleQuoteUsageSniff. From experimenting with my test file, these characteristics seem necessary: - a string portion that contains a $variable inside literal singlequotes ===> bar = '$z', - a string portion that contains a variable outside of the doublequotes that is attached via concatenation, but whose surrounding string portions include the literal single quotes around it ===> baz = '" . $a . "'..." - the newline that splits the singlequoted variable piece from the doublequoted variable piece Test script: --------------- <?php $x = "bar = '$z', baz = '" . $a . "'..."; ?> Expected result: ---------------- phpcs --standard=Squiz --report=summary test.php PHP CODE SNIFFER REPORT SUMMARY -------------------------------------------------------------------------- FILE ERRORS WARNINGS -------------------------------------------------------------------------- test.php 4 0 -------------------------------------------------------------------------- A TOTAL OF 4 ERROR(S) AND 0 WARNING(S) WERE FOUND IN 1 FILE(S) -------------------------------------------------------------------------- Actual result: -------------- PHP Warning: Unexpected character in input: ''' (ASCII=39) state=1 in PHP/CodeSniffer/Standards/Squiz/Sniffs/Strings/DoubleQuoteUsageSniff.php on line 65 PHP Stack trace: PHP 1. {main}() phpcs:0 PHP 2. PHP_CodeSniffer_CLI->process() phpcs:30 PHP 3. PHP_CodeSniffer->process() PHP/CodeSniffer/CLI.php:429 PHP 4. PHP_CodeSniffer->processFile() PHP/CodeSniffer.php:376 PHP 5. PHP_CodeSniffer->_processFile() PHP/CodeSniffer.php:836 PHP 6. PHP_CodeSniffer_File->start() PHP/CodeSniffer.php:921 PHP 7. Squiz_Sniffs_Strings_DoubleQuoteUsageSniff->process() PHP/CodeSniffer/File.php:431 PHP 8. token_get_all() PHP/CodeSniffer/Standards/Squiz/Sniffs/Strings/DoubleQuoteUsageSniff.php:65 Warning: Unexpected character in input: ''' (ASCII=39) state=1 in PHP/CodeSniffer/Standards/Squiz/Sniffs/Strings/DoubleQuoteUsageSniff.php on line 66 Call Stack: 0.0004 50256 1. {main}() phpcs:0 0.0187 1018560 2. PHP_CodeSniffer_CLI->process() phpcs:30 0.0193 1022920 3. PHP_CodeSniffer->process() PHP/CodeSniffer/CLI.php:429 0.1363 4577440 4. PHP_CodeSniffer->processFile() PHP/CodeSniffer.php:376 0.1365 4577808 5. PHP_CodeSniffer->_processFile() PHP/CodeSniffer.php:836 0.1365 4578620 6. PHP_CodeSniffer_File->start() PHP/CodeSniffer.php:921 0.1514 4721892 7. Squiz_Sniffs_Strings_DoubleQuoteUsageSniff->process() PHP/CodeSniffer/File.php:431 0.1514 4721892 8. token_get_all() PHP/CodeSniffer/Standards/Squiz/Sniffs/Strings/DoubleQuoteUsageSniff.php:65 PHP CODE SNIFFER REPORT SUMMARY -------------------------------------------------------------------------- FILE ERRORS WARNINGS -------------------------------------------------------------------------- test.php 4 0 -------------------------------------------------------------------------- A TOTAL OF 4 ERROR(S) AND 0 WARNING(S) WERE FOUND IN 1 FILE(S) --------------------------------------------------------------------------

Comments

 [2010-03-17 04:09 UTC] ashnazg (Chuck Burgess)
That "Warning" line should be showing line 65, not 66, so that all references to DoubleQuoteUsageSniff.php should show 65.
 [2010-03-17 10:37 UTC] squiz (Greg Sherwood)
-Summary: PHP Warning due to token_get_all(), #1 +Summary: PHP Warning due to token_get_all() in DoubleQuoteUsageSniff
 [2010-03-19 04:46 UTC] squiz (Greg Sherwood)
-Status: Open +Status: Feedback -Assigned To: +Assigned To: squiz
Thank you for taking the time to report a problem with the package. This problem may have been already fixed by a previous change that is in the SVN of the package. Please checking out the SVN repository of this package and upgrade svn checkout svn.php.net/repository/pear/packages/PHP_CodeSniffer/trunk pear upgrade package2.xml or pear upgrade package.xml If you are able to reproduce the bug with the latest SVN, please change the status back to "Open". Again, thank you for your continued support of PEAR. I'm not getting this with the SVN version. I fixed something related in another sniff, but don't see a specific fix for this.
 [2010-03-23 01:53 UTC] ashnazg (Chuck Burgess)
-Status: Feedback +Status: Open -Package Version: 1.2.2 +Package Version: SVN-20100322
The current SVN still throws the same PHP Warning against my test script. I think the recent change (February) that helps with bug #17237 was done directly in the other reported sniff (Generic.CodeAnalysis.UnusedFunctionParameter), whereas nothing has changed since October in this sniff (Squiz.Strings.DoubleQuoteUsage).
 [2010-04-06 09:27 UTC] squiz (Greg Sherwood)
Looks like the reason I can't replicate is my PHP version (5.3.0). I can get this to break on 5.2.6.
 [2010-04-07 09:11 UTC] squiz (Greg Sherwood)
-Status: Assigned +Status: Closed
This bug has been fixed in SVN. If this was a documentation problem, the fix will appear on pear.php.net by the end of next Sunday (CET). If this was a problem with the pear.php.net website, the change should be live shortly. Otherwise, the fix will appear in the package's next release. Thank you for the report and for helping us make PEAR better.
 [2010-04-07 18:51 UTC] ashnazg (Chuck Burgess)
Confirmed that this change clears the notices on the test file for me on PHP 5.2.4... thanks Greg!