Skip to content

Commit c365130

Browse files
authored
fix "strpos empty needle" warning (#321)
* fix "strpos empty needle" warning fixes issue #320 a warning was issued in `PositionCalculator#findPositionWithinString` when calling `strpos` on an empty value: ``` Warning: strpos(): Empty needle in src/PHPSQLParser/positions/PositionCalculator.php on line 138 ``` => return `false` earlier in that case, to then throw an exception * adapt test to make it compatible with PHP 5.4 PHP Parse error: syntax error, unexpected 'class' (T_CLASS), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in /home/travis/build/greenlion/PHP-SQL-Parser/tests/cases/parser/issue320Test.php on line 55
1 parent a5d5c29 commit c365130

2 files changed

Lines changed: 63 additions & 0 deletions

File tree

src/PHPSQLParser/positions/PositionCalculator.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,9 @@ public function setPositionsWithinSQL($sql, $parsed) {
127127
}
128128

129129
protected function findPositionWithinString($sql, $value, $expr_type) {
130+
if ($value === '') {
131+
return false;
132+
}
130133

131134
$offset = 0;
132135
$ok = false;
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
<?php
2+
/**
3+
* issue320.php
4+
*
5+
* Test case for PHPSQLParser.
6+
*
7+
* PHP version 5
8+
*
9+
* LICENSE:
10+
* Copyright (c) 2010-2014 Justin Swanhart and André Rothe
11+
* All rights reserved.
12+
*
13+
* Redistribution and use in source and binary forms, with or without
14+
* modification, are permitted provided that the following conditions
15+
* are met:
16+
* 1. Redistributions of source code must retain the above copyright
17+
* notice, this list of conditions and the following disclaimer.
18+
* 2. Redistributions in binary form must reproduce the above copyright
19+
* notice, this list of conditions and the following disclaimer in the
20+
* documentation and/or other materials provided with the distribution.
21+
* 3. The name of the author may not be used to endorse or promote products
22+
* derived from this software without specific prior written permission.
23+
*
24+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
25+
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
26+
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
27+
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
28+
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
29+
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
30+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
31+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
33+
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34+
*
35+
* @author André Rothe <andre.rothe@phosco.info>
36+
* @copyright 2010-2014 Justin Swanhart and André Rothe
37+
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause)
38+
* @version SVN: $Id$
39+
*/
40+
namespace PHPSQLParser\Test\Parser;
41+
use PHPSQLParser\PHPSQLParser;
42+
use PHPSQLParser\PHPSQLCreator;
43+
44+
class issue320Test extends \PHPUnit_Framework_TestCase
45+
{
46+
public function test_no_warning_is_issued_when_help_table_is_used()
47+
{
48+
$parser = new PHPSQLParser();
49+
$sql = 'SELECT * FROM help';
50+
51+
// there currently is an exception because `HELP` is a keyword
52+
// but this query seems valid at least in mysql and mssql
53+
// so ideally PHPSQLParser would be able to parse it
54+
$this->setExpectedException(
55+
'\PHPSQLParser\exceptions\UnableToCalculatePositionException'
56+
);
57+
58+
$parser->parse($sql, true);
59+
}
60+
}

0 commit comments

Comments
 (0)