Skip to content

Commit

Permalink
Merge pull request #150 from udan11/fix_12
Browse files Browse the repository at this point in the history
Maximum length of a delimiter is 15 characters.
  • Loading branch information
nijel committed May 9, 2017
2 parents eac7d22 + 60bd0a2 commit 5051668
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/Lexer.php
Expand Up @@ -303,8 +303,10 @@ public function lex()

// Parsing the delimiter.
$this->delimiter = null;
while (++$this->last < $this->len && !Context::isWhitespace($this->str[$this->last])) {
$delimiterLen = 0;
while (++$this->last < $this->len && !Context::isWhitespace($this->str[$this->last]) && $delimiterLen < 15) {
$this->delimiter .= $this->str[$this->last];
++$delimiterLen;
}

if (empty($this->delimiter)) {
Expand Down
1 change: 1 addition & 0 deletions tests/Lexer/LexerTest.php
Expand Up @@ -68,6 +68,7 @@ public function testLexProvider()
array('lexer/lexDelimiterErr1'),
array('lexer/lexDelimiterErr2'),
array('lexer/lexDelimiterErr3'),
array('lexer/lexDelimiterLen'),
array('lexer/lexKeyword'),
array('lexer/lexKeyword2'),
array('lexer/lexNumber'),
Expand Down
2 changes: 2 additions & 0 deletions tests/data/lexer/lexDelimiterLen.in
@@ -0,0 +1,2 @@
DELIMITER abcdefghijklmnopqrstuvwxyz
SELECT 1 abcdefghijklmnopqrstuvwxyz
7 changes: 7 additions & 0 deletions tests/data/lexer/lexDelimiterLen.out
@@ -0,0 +1,7 @@
a:4:{s:5:"query";s:73:"DELIMITER abcdefghijklmnopqrstuvwxyz
SELECT 1 abcdefghijklmnopqrstuvwxyz
";s:5:"lexer";O:26:"PhpMyAdmin\SqlParser\Lexer":8:{s:3:"str";s:73:"DELIMITER abcdefghijklmnopqrstuvwxyz
SELECT 1 abcdefghijklmnopqrstuvwxyz
";s:3:"len";i:73;s:4:"last";i:73;s:4:"list";O:31:"PhpMyAdmin\SqlParser\TokensList":3:{s:6:"tokens";a:13:{i:0;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:9:"DELIMITER";s:5:"value";s:9:"DELIMITER";s:7:"keyword";N;s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:0;}i:1;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:9;}i:2;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:15:"abcdefghijklmno";s:5:"value";s:15:"abcdefghijklmno";s:7:"keyword";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:10;}i:3;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:11:"pqrstuvwxyz";s:5:"value";s:11:"pqrstuvwxyz";s:7:"keyword";N;s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:25;}i:4;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:"
";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:36;}i:5;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:6:"SELECT";s:5:"value";s:6:"SELECT";s:7:"keyword";s:6:"SELECT";s:4:"type";i:1;s:5:"flags";i:3;s:8:"position";i:37;}i:6;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:43;}i:7;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:"1";s:5:"value";i:1;s:7:"keyword";N;s:4:"type";i:6;s:5:"flags";i:0;s:8:"position";i:44;}i:8;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:" ";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:45;}i:9;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:15:"abcdefghijklmno";s:5:"value";s:15:"abcdefghijklmno";s:7:"keyword";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";i:46;}i:10;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:11:"pqrstuvwxyz";s:5:"value";s:11:"pqrstuvwxyz";s:7:"keyword";N;s:4:"type";i:0;s:5:"flags";i:0;s:8:"position";i:61;}i:11;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";s:1:"
";s:5:"value";s:1:" ";s:7:"keyword";N;s:4:"type";i:3;s:5:"flags";i:0;s:8:"position";i:72;}i:12;O:26:"PhpMyAdmin\SqlParser\Token":6:{s:5:"token";N;s:5:"value";N;s:7:"keyword";N;s:4:"type";i:9;s:5:"flags";i:0;s:8:"position";N;}}s:5:"count";i:13;s:3:"idx";i:0;}s:9:"delimiter";s:15:"abcdefghijklmno";s:12:"delimiterLen";i:15;s:6:"strict";b:0;s:6:"errors";a:0:{}}s:6:"parser";N;s:6:"errors";a:2:{s:5:"lexer";a:0:{}s:6:"parser";a:0:{}}}

0 comments on commit 5051668

Please sign in to comment.