Skip to content

Commit 037243c

Browse files
committed
pdo_mysql: "--" should be followed by a whitespace character
This required changing how YYFILL works, with no apparent regressions
1 parent 3096ffa commit 037243c

File tree

4 files changed

+15
-5
lines changed

4 files changed

+15
-5
lines changed

ext/pdo/pdo_sql_parser.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,4 @@
3030
#define YYCURSOR cursor
3131
#define YYLIMIT s->end
3232
#define YYMARKER s->ptr
33-
#define YYFILL(n) { RET(PDO_PARSER_EOI); }
33+
#define YYFILL(n) { if (YYLIMIT - 1 <= YYCURSOR) RET(PDO_PARSER_EOI); }

ext/pdo/pdo_sql_parser.re

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ static int default_scanner(pdo_scanner_t *s)
2727
/*!re2c
2828
BINDCHR = [:][a-zA-Z0-9_]+;
2929
QUESTION = [?];
30-
COMMENTS = ("/*"([^*]+|[*]+[^/*])*[*]*"*/"|"--"[^\r\n]*);
30+
COMMENTS = ("/*"([^*]+|[*]+[^/*])*[*]*"*/"|"--".*);
3131
SPECIALS = [:?"'/-];
3232
MULTICHAR = ([:]{2,}|[?]{2,});
3333
ANYNOEOF = [\001-\377];

ext/pdo_mysql/mysql_sql_parser.re

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ int pdo_mysql_scanner(pdo_scanner_t *s)
2828
/*!re2c
2929
BINDCHR = [:][a-zA-Z0-9_]+;
3030
QUESTION = [?];
31-
COMMENTS = ("/*"([^*]+|[*]+[^/*])*[*]*"*/"|("--"|[#])[^\r\n]*);
31+
COMMENTS = ("/*"([^*]+|[*]+[^/*])*[*]*"*/"|(("--"[ \t\v\f\r])|[#]).*);
3232
SPECIALS = [:?"'`/#-];
3333
MULTICHAR = ([:]{2,}|[?]{2,});
3434
ANYNOEOF = [\001-\377];

ext/pdo_mysql/tests/pdo_mysql_parser.phpt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,30 +29,40 @@ $queries = [
2929
foreach ($queries as $k => $query) {
3030
$stmt = $db->prepare($query);
3131
$stmt->execute();
32-
var_dump($stmt->fetch(PDO::FETCH_NUM) === [0 => 1]);
32+
var_dump($query, $stmt->fetch(PDO::FETCH_NUM) === [0 => 1]);
3333
}
3434

3535
// One parameter
3636
$queries = [
3737
"SELECT * FROM {$table} WHERE 1 = ?",
38+
"SELECT * FROM {$table} WHERE 1 = --?",
3839
"SELECT * FROM {$table} WHERE \"?\" IN (?, '?')",
3940
"SELECT * FROM {$table} WHERE `a``?` = ?",
4041
];
4142

4243
foreach ($queries as $k => $query) {
4344
$stmt = $db->prepare($query);
4445
$stmt->execute([1]);
45-
var_dump($stmt->fetch(PDO::FETCH_NUM) === [0 => 1]);
46+
var_dump($query, $stmt->fetch(PDO::FETCH_NUM) === [0 => 1]);
4647
}
4748

4849
$db->exec("DROP TABLE pdo_mysql_parser");
4950

5051
?>
5152
--EXPECT--
53+
string(30) "SELECT * FROM pdo_mysql_parser"
5254
bool(true)
55+
string(35) "SELECT * FROM pdo_mysql_parser -- ?"
5356
bool(true)
57+
string(34) "SELECT * FROM pdo_mysql_parser # ?"
5458
bool(true)
59+
string(38) "SELECT * FROM pdo_mysql_parser /* ? */"
5560
bool(true)
61+
string(42) "SELECT * FROM pdo_mysql_parser WHERE 1 = ?"
5662
bool(true)
63+
string(44) "SELECT * FROM pdo_mysql_parser WHERE 1 = --?"
5764
bool(true)
65+
string(52) "SELECT * FROM pdo_mysql_parser WHERE "?" IN (?, '?')"
66+
bool(true)
67+
string(47) "SELECT * FROM pdo_mysql_parser WHERE `a``?` = ?"
5868
bool(true)

0 commit comments

Comments
 (0)