Linux vps-61133.fhnet.fr 4.9.0-19-amd64 #1 SMP Debian 4.9.320-2 (2022-06-30) x86_64
Apache/2.4.25 (Debian)
Server IP : 93.113.207.21 & Your IP : 216.73.216.112
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
src /
php-7.4.33 /
ext /
pdo /
Delete
Unzip
Name
Size
Permission
Date
Action
.libs
[ DIR ]
drwxr-xr-x
2024-03-12 14:29
tests
[ DIR ]
drwxrwxr-x
2022-10-31 11:36
CREDITS
101
B
-rw-rw-r--
2022-10-31 11:36
Makefile.frag
1.25
KB
-rw-rw-r--
2022-10-31 11:36
Makefile.frag.w32
169
B
-rw-rw-r--
2022-10-31 11:36
config.m4
552
B
-rw-rw-r--
2022-10-31 11:36
config.w32
398
B
-rw-rw-r--
2022-10-31 11:36
pdo.c
8.8
KB
-rw-rw-r--
2022-10-31 11:36
pdo.lo
308
B
-rw-r--r--
2024-03-12 14:29
pdo.o
115.9
KB
-rw-r--r--
2024-03-12 14:29
pdo_dbh.c
46.63
KB
-rw-rw-r--
2022-10-31 11:36
pdo_dbh.lo
320
B
-rw-r--r--
2024-03-12 14:29
pdo_dbh.o
268.36
KB
-rw-r--r--
2024-03-12 14:29
pdo_sql_parser.c
15.38
KB
-rw-r--r--
2022-10-31 11:36
pdo_sql_parser.lo
341
B
-rw-r--r--
2024-03-12 14:29
pdo_sql_parser.o
120.66
KB
-rw-r--r--
2024-03-12 14:29
pdo_sql_parser.re
11.82
KB
-rw-rw-r--
2022-10-31 11:36
pdo_sqlstate.c
13.34
KB
-rw-rw-r--
2022-10-31 11:36
pdo_sqlstate.lo
335
B
-rw-r--r--
2024-03-12 14:29
pdo_sqlstate.o
89.61
KB
-rw-r--r--
2024-03-12 14:29
pdo_stmt.c
73.59
KB
-rw-rw-r--
2022-10-31 11:36
pdo_stmt.lo
323
B
-rw-r--r--
2024-03-12 14:29
pdo_stmt.o
328.29
KB
-rw-r--r--
2024-03-12 14:29
php_pdo.h
2.31
KB
-rw-rw-r--
2022-10-31 11:36
php_pdo_driver.h
24.32
KB
-rw-rw-r--
2022-10-31 11:36
php_pdo_error.h
1.78
KB
-rw-rw-r--
2022-10-31 11:36
php_pdo_int.h
2.84
KB
-rw-rw-r--
2022-10-31 11:36
Save
Rename
/* Generated by re2c 0.13.5 */ /* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: George Schlossnagle <george@omniti.com> | +----------------------------------------------------------------------+ */ #include "php.h" #include "php_pdo_driver.h" #include "php_pdo_int.h" #define PDO_PARSER_TEXT 1 #define PDO_PARSER_BIND 2 #define PDO_PARSER_BIND_POS 3 #define PDO_PARSER_ESCAPED_QUESTION 4 #define PDO_PARSER_EOI 5 #define PDO_PARSER_BINDNO_ESCAPED_CHAR -1 #define RET(i) {s->cur = cursor; return i; } #define SKIP_ONE(i) {s->cur = s->tok + 1; return i; } #define YYCTYPE unsigned char #define YYCURSOR cursor #define YYLIMIT s->end #define YYMARKER s->ptr #define YYFILL(n) { RET(PDO_PARSER_EOI); } typedef struct Scanner { char *ptr, *cur, *tok, *end; } Scanner; static int scan(Scanner *s) { char *cursor = s->cur; s->tok = cursor; { YYCTYPE yych; if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; switch (yych) { case 0x00: goto yy2; case '"': goto yy3; case '\'': goto yy5; case '(': case ')': case '*': case '+': case ',': case '.': goto yy9; case '-': goto yy10; case '/': goto yy11; case ':': goto yy6; case '?': goto yy7; default: goto yy12; } yy2: YYCURSOR = YYMARKER; goto yy4; yy3: yych = *(YYMARKER = ++YYCURSOR); if (yych >= 0x01) goto yy37; yy4: { SKIP_ONE(PDO_PARSER_TEXT); } yy5: yych = *(YYMARKER = ++YYCURSOR); if (yych <= 0x00) goto yy4; goto yy32; yy6: yych = *++YYCURSOR; switch (yych) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': goto yy25; case ':': goto yy28; default: goto yy4; } yy7: ++YYCURSOR; switch ((yych = *YYCURSOR)) { case '?': goto yy23; default: goto yy8; } yy8: { RET(PDO_PARSER_BIND_POS); } yy9: yych = *++YYCURSOR; goto yy4; yy10: yych = *++YYCURSOR; switch (yych) { case '-': goto yy21; default: goto yy4; } yy11: yych = *(YYMARKER = ++YYCURSOR); switch (yych) { case '*': goto yy15; default: goto yy4; } yy12: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch (yych) { case 0x00: case '"': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case ':': case '?': goto yy14; default: goto yy12; } yy14: { RET(PDO_PARSER_TEXT); } yy15: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch (yych) { case '*': goto yy17; default: goto yy15; } yy17: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch (yych) { case '*': goto yy17; case '/': goto yy19; default: goto yy15; } yy19: ++YYCURSOR; yy20: { RET(PDO_PARSER_TEXT); } yy21: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch (yych) { case '\n': case '\r': goto yy20; default: goto yy21; } yy23: ++YYCURSOR; { RET(PDO_PARSER_ESCAPED_QUESTION); } yy25: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch (yych) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': goto yy25; default: goto yy27; } yy27: { RET(PDO_PARSER_BIND); } yy28: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; switch (yych) { case ':': goto yy28; default: goto yy30; } yy30: { RET(PDO_PARSER_TEXT); } yy31: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy32: switch (yych) { case 0x00: goto yy2; case '\'': goto yy34; case '\\': goto yy33; default: goto yy31; } yy33: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 0x00) goto yy2; goto yy31; yy34: ++YYCURSOR; { RET(PDO_PARSER_TEXT); } yy36: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy37: switch (yych) { case 0x00: goto yy2; case '"': goto yy39; case '\\': goto yy38; default: goto yy36; } yy38: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; if (yych <= 0x00) goto yy2; goto yy36; yy39: ++YYCURSOR; { RET(PDO_PARSER_TEXT); } } } struct placeholder { char *pos; size_t len; size_t qlen; /* quoted length of value */ char *quoted; /* quoted value */ int freeq; int bindno; struct placeholder *next; }; static void free_param_name(zval *el) { efree(Z_PTR_P(el)); } PDO_API int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, size_t inquery_len, char **outquery, size_t *outquery_len) { Scanner s; char *ptr, *newbuffer; ptrdiff_t t; uint32_t bindno = 0; int ret = 0, escapes = 0; size_t newbuffer_len; HashTable *params; struct pdo_bound_param_data *param; int query_type = PDO_PLACEHOLDER_NONE; struct placeholder *placeholders = NULL, *placetail = NULL, *plc = NULL; ptr = *outquery; s.cur = inquery; s.end = inquery + inquery_len + 1; /* phase 1: look for args */ while((t = scan(&s)) != PDO_PARSER_EOI) { if (t == PDO_PARSER_BIND || t == PDO_PARSER_BIND_POS || t == PDO_PARSER_ESCAPED_QUESTION) { if (t == PDO_PARSER_ESCAPED_QUESTION && stmt->supports_placeholders == PDO_PLACEHOLDER_POSITIONAL) { /* escaped question marks unsupported, treat as text */ continue; } if (t == PDO_PARSER_BIND) { ptrdiff_t len = s.cur - s.tok; if ((inquery < (s.cur - len)) && isalnum(*(s.cur - len - 1))) { continue; } query_type |= PDO_PLACEHOLDER_NAMED; } else if (t == PDO_PARSER_BIND_POS) { query_type |= PDO_PLACEHOLDER_POSITIONAL; } plc = emalloc(sizeof(*plc)); memset(plc, 0, sizeof(*plc)); plc->next = NULL; plc->pos = s.tok; plc->len = s.cur - s.tok; if (t == PDO_PARSER_ESCAPED_QUESTION) { plc->bindno = PDO_PARSER_BINDNO_ESCAPED_CHAR; plc->quoted = "?"; plc->qlen = 1; plc->freeq = 0; escapes++; } else { plc->bindno = bindno++; } if (placetail) { placetail->next = plc; } else { placeholders = plc; } placetail = plc; } } if (!placeholders) { /* nothing to do; good! */ return 0; } /* did the query make sense to me? */ if (query_type == (PDO_PLACEHOLDER_NAMED|PDO_PLACEHOLDER_POSITIONAL)) { /* they mixed both types; punt */ pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "mixed named and positional parameters"); ret = -1; goto clean_up; } if (stmt->supports_placeholders == query_type && !stmt->named_rewrite_template) { /* query matches native syntax */ if (escapes) { newbuffer_len = inquery_len; goto rewrite; } ret = 0; goto clean_up; } if (query_type == PDO_PLACEHOLDER_NAMED && stmt->named_rewrite_template) { /* magic/hack. * We we pretend that the query was positional even if * it was named so that we fall into the * named rewrite case below. Not too pretty, * but it works. */ query_type = PDO_PLACEHOLDER_POSITIONAL; } params = stmt->bound_params; if (bindno && stmt->supports_placeholders == PDO_PLACEHOLDER_NONE && params && bindno != zend_hash_num_elements(params)) { /* extra bit of validation for instances when same params are bound more than once */ if (query_type != PDO_PLACEHOLDER_POSITIONAL && bindno > zend_hash_num_elements(params)) { int ok = 1; for (plc = placeholders; plc; plc = plc->next) { if ((param = zend_hash_str_find_ptr(params, plc->pos, plc->len)) == NULL) { ok = 0; break; } } if (ok) { goto safe; } } pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "number of bound variables does not match number of tokens"); ret = -1; goto clean_up; } safe: /* what are we going to do ? */ if (stmt->supports_placeholders == PDO_PLACEHOLDER_NONE) { /* query generation */ newbuffer_len = inquery_len; /* let's quote all the values */ for (plc = placeholders; plc && params; plc = plc->next) { if (plc->bindno == PDO_PARSER_BINDNO_ESCAPED_CHAR) { /* escaped character */ continue; } if (query_type == PDO_PLACEHOLDER_NONE) { continue; } if (query_type == PDO_PLACEHOLDER_POSITIONAL) { param = zend_hash_index_find_ptr(params, plc->bindno); } else { param = zend_hash_str_find_ptr(params, plc->pos, plc->len); } if (param == NULL) { /* parameter was not defined */ ret = -1; pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "parameter was not defined"); goto clean_up; } if (stmt->dbh->methods->quoter) { zval *parameter; if (Z_ISREF(param->parameter)) { parameter = Z_REFVAL(param->parameter); } else { parameter = ¶m->parameter; } if (param->param_type == PDO_PARAM_LOB && Z_TYPE_P(parameter) == IS_RESOURCE) { php_stream *stm; php_stream_from_zval_no_verify(stm, parameter); if (stm) { zend_string *buf; buf = php_stream_copy_to_mem(stm, PHP_STREAM_COPY_ALL, 0); if (!buf) { buf = ZSTR_EMPTY_ALLOC(); } if (!stmt->dbh->methods->quoter(stmt->dbh, ZSTR_VAL(buf), ZSTR_LEN(buf), &plc->quoted, &plc->qlen, param->param_type)) { /* bork */ ret = -1; strncpy(stmt->error_code, stmt->dbh->error_code, 6); if (buf) { zend_string_release_ex(buf, 0); } goto clean_up; } if (buf) { zend_string_release_ex(buf, 0); } } else { pdo_raise_impl_error(stmt->dbh, stmt, "HY105", "Expected a stream resource"); ret = -1; goto clean_up; } plc->freeq = 1; } else { enum pdo_param_type param_type = param->param_type; zend_string *buf = NULL; /* assume all types are nullable */ if (Z_TYPE_P(parameter) == IS_NULL) { param_type = PDO_PARAM_NULL; } switch (param_type) { case PDO_PARAM_BOOL: plc->quoted = zend_is_true(parameter) ? "1" : "0"; plc->qlen = sizeof("1")-1; plc->freeq = 0; break; case PDO_PARAM_INT: buf = zend_long_to_str(zval_get_long(parameter)); plc->qlen = ZSTR_LEN(buf); plc->quoted = estrdup(ZSTR_VAL(buf)); plc->freeq = 1; break; case PDO_PARAM_NULL: plc->quoted = "NULL"; plc->qlen = sizeof("NULL")-1; plc->freeq = 0; break; default: buf = zval_get_string(parameter); if (EG(exception) || !stmt->dbh->methods->quoter(stmt->dbh, ZSTR_VAL(buf), ZSTR_LEN(buf), &plc->quoted, &plc->qlen, param_type)) { /* bork */ ret = -1; strncpy(stmt->error_code, stmt->dbh->error_code, 6); if (buf) { zend_string_release_ex(buf, 0); } goto clean_up; } plc->freeq = 1; } if (buf) { zend_string_release_ex(buf, 0); } } } else { zval *parameter; if (Z_ISREF(param->parameter)) { parameter = Z_REFVAL(param->parameter); } else { parameter = ¶m->parameter; } plc->quoted = Z_STRVAL_P(parameter); plc->qlen = Z_STRLEN_P(parameter); } newbuffer_len += plc->qlen; } rewrite: /* allocate output buffer */ newbuffer = emalloc(newbuffer_len + 1); *outquery = newbuffer; /* and build the query */ plc = placeholders; ptr = inquery; do { t = plc->pos - ptr; if (t) { memcpy(newbuffer, ptr, t); newbuffer += t; } if (plc->quoted) { memcpy(newbuffer, plc->quoted, plc->qlen); newbuffer += plc->qlen; } else { memcpy(newbuffer, plc->pos, plc->len); newbuffer += plc->len; } ptr = plc->pos + plc->len; plc = plc->next; } while (plc); t = (inquery + inquery_len) - ptr; if (t) { memcpy(newbuffer, ptr, t); newbuffer += t; } *newbuffer = '\0'; *outquery_len = newbuffer - *outquery; ret = 1; goto clean_up; } else if (query_type == PDO_PLACEHOLDER_POSITIONAL) { /* rewrite ? to :pdoX */ char *name, *idxbuf; const char *tmpl = stmt->named_rewrite_template ? stmt->named_rewrite_template : ":pdo%d"; int bind_no = 1; newbuffer_len = inquery_len; if (stmt->bound_param_map == NULL) { ALLOC_HASHTABLE(stmt->bound_param_map); zend_hash_init(stmt->bound_param_map, 13, NULL, free_param_name, 0); } for (plc = placeholders; plc; plc = plc->next) { int skip_map = 0; char *p; if (plc->bindno == PDO_PARSER_BINDNO_ESCAPED_CHAR) { continue; } name = estrndup(plc->pos, plc->len); /* check if bound parameter is already available */ if (!strcmp(name, "?") || (p = zend_hash_str_find_ptr(stmt->bound_param_map, name, plc->len)) == NULL) { spprintf(&idxbuf, 0, tmpl, bind_no++); } else { idxbuf = estrdup(p); skip_map = 1; } plc->quoted = idxbuf; plc->qlen = strlen(plc->quoted); plc->freeq = 1; newbuffer_len += plc->qlen; if (!skip_map && stmt->named_rewrite_template) { /* create a mapping */ zend_hash_str_update_mem(stmt->bound_param_map, name, plc->len, idxbuf, plc->qlen + 1); } /* map number to name */ zend_hash_index_update_mem(stmt->bound_param_map, plc->bindno, idxbuf, plc->qlen + 1); efree(name); } goto rewrite; } else { /* rewrite :name to ? */ newbuffer_len = inquery_len; if (stmt->bound_param_map == NULL) { ALLOC_HASHTABLE(stmt->bound_param_map); zend_hash_init(stmt->bound_param_map, 13, NULL, free_param_name, 0); } for (plc = placeholders; plc; plc = plc->next) { char *name; name = estrndup(plc->pos, plc->len); zend_hash_index_update_mem(stmt->bound_param_map, plc->bindno, name, plc->len + 1); efree(name); plc->quoted = "?"; plc->qlen = 1; newbuffer_len -= plc->len - 1; } goto rewrite; } clean_up: while (placeholders) { plc = placeholders; placeholders = plc->next; if (plc->freeq) { efree(plc->quoted); } efree(plc); } return ret; }