From nobody Tue Aug 19 06:46:10 2025 X-Original-To: dev-commits-ports-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4c5g8g04Vdz60SV7; Tue, 19 Aug 2025 06:46:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4c5g8f5CT5z3YvT; Tue, 19 Aug 2025 06:46:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1755585970; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=z09P3aoDOKbbgPuea09oMVC6LhoxsXl6Fz6BLm0d8LA=; b=ZM0qRgt1pVy5U3IRseBUhyvfbqh87Dc9HQyNreUiKsaedjX11Zpf6mvS1eI1ZI5CM/WNoY RGs82LGdSQEpV8A7nOOXMhaapqorKFYlK091xVqJXnQsyxnga060Q5FgyEferMuyGQKwoG h4EKUi4XJucZ6A6zZMlmSoxoHYNYrxGEogrA5Hs4CVoOWdqsnhyH9lWIQPeAW9dr86ulMy jH9X/Ke99qg6hiWOkaycM3RJLBxcYOCawqom9Jc6ue57R3YqjAycvUrJXSDhrEEU5vFc4f qCDLHo1rAjo4ntYvyy2izmq+7R9kWSl327y8n/99vqCMSFTnHGMNENjmIqsscQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1755585970; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=z09P3aoDOKbbgPuea09oMVC6LhoxsXl6Fz6BLm0d8LA=; b=Ui89lB1o0pCp5qjJXiBUAe1SCoDufaup0Xxqt1RvJ8pho/yKAmf/jgiC+G3TlIQqe4dpZ2 wg5fAy7lM/4nl/k+KLFoIwenJ9LBSvFWWOj4guwg89PfzE+06JtDTFd1q2v0A8P/Ccq9ea Ma4BFTY4pN37ir3O8rXFOpCHILnr249RhIha452bMYG36v4Howf+jeXyZmylSi5FMU7WAy S2bREDug/DvYbnwPyJM/8ei4rdp7NriBhT02+Qfd2OK75lFr0dWpcDOIXed18nkQlBqTsT 3jhX/fIjJ5O+lhpj7B7ktwFOBI9GbROh6zvN1flZEIYux7bU3ujTsb14JiMlQw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1755585970; a=rsa-sha256; cv=none; b=AEKhjxSw6KCB5ymtWfceZpevgzwba8mggaCPrEuRXo/8a9enHa2/A7+qmmX9ULRW1lDBd9 sRe/YHpw3hhV12rGZILQBgHU+fNa7DW3wl+hDORGmxuv0Li137Dsrai/1czZvghxvQIX6E 07kGebegaiEdwc3U87SG8/jy6pm7sD/Iyc/7SjctpEePKLwOHMxLT5MmKq73VJE3XQNeS9 nYtqrGV/lspBTk3qscoG5G4hFwPsw6UFR0h8893/E16UBPQ4s46EhK2x/dfAojFIwhH552 Z5P3cDBjgOQM35Qdg8s+FChXv4yJmd0hbNLymXPtjYMQmi5VVUYHSJsrOROugA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4c5g8f4YHqz1rk; Tue, 19 Aug 2025 06:46:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 57J6kAaZ092466; Tue, 19 Aug 2025 06:46:10 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 57J6kAPx092463; Tue, 19 Aug 2025 06:46:10 GMT (envelope-from git) Date: Tue, 19 Aug 2025 06:46:10 GMT Message-Id: <202508190646.57J6kAPx092463@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Muhammad Moinur Rahman Subject: git: e000de2adb6a - main - lang/php85: Update version 8.5.0alpha4=>8.5.0beta1 List-Id: Commits to the main branch of the FreeBSD ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-ports-main@freebsd.org Sender: owner-dev-commits-ports-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bofh X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e000de2adb6a7bb79613530d9e9ebf62fd9495d9 Auto-Submitted: auto-generated The branch main has been updated by bofh: URL: https://cgit.FreeBSD.org/ports/commit/?id=e000de2adb6a7bb79613530d9e9ebf62fd9495d9 commit e000de2adb6a7bb79613530d9e9ebf62fd9495d9 Author: Muhammad Moinur Rahman AuthorDate: 2025-08-19 06:21:03 +0000 Commit: Muhammad Moinur Rahman CommitDate: 2025-08-19 06:45:45 +0000 lang/php85: Update version 8.5.0alpha4=>8.5.0beta1 Please DO NOT use this version in production, it is an early test version. Changelog: https://github.com/php/php-src/blob/php-8.5.0beta1/NEWS --- archivers/php85-phar/files/patch-phar__internal.h | 18 + .../php85-phar/files/patch-phar__path__check.c | 241 ------- archivers/php85-phar/files/patch-pharzip.h | 19 + databases/php85-pdo/files/patch-pdo__sql__parser.c | 729 --------------------- .../files/patch-mysql__sql__parser.c | 398 ----------- .../files/patch-pgsql__sql__parser.c | 528 --------------- .../files/patch-sqlite__sql__parser.c | 398 ----------- lang/php85/Makefile | 10 +- lang/php85/distinfo | 6 +- lang/php85/pkg-plist | 1 + 10 files changed, 45 insertions(+), 2303 deletions(-) diff --git a/archivers/php85-phar/files/patch-phar__internal.h b/archivers/php85-phar/files/patch-phar__internal.h new file mode 100644 index 000000000000..8e78b1e703f8 --- /dev/null +++ b/archivers/php85-phar/files/patch-phar__internal.h @@ -0,0 +1,18 @@ +--- phar_internal.h.orig 2025-08-19 05:47:26 UTC ++++ phar_internal.h +@@ -17,6 +17,9 @@ + +----------------------------------------------------------------------+ + */ + ++#ifndef PHAR_PHAR_INTERNAL_H ++#define PHAR_PHAR_INTERNAL_H ++ + #ifdef HAVE_CONFIG_H + #include + #endif +@@ -487,3 +490,5 @@ END_EXTERN_C() + phar_path_check_result phar_path_check(char **p, size_t *len, const char **error); + + END_EXTERN_C() ++ ++#endif /* PHAR_PHAR_INTERNAL_H */ diff --git a/archivers/php85-phar/files/patch-phar__path__check.c b/archivers/php85-phar/files/patch-phar__path__check.c deleted file mode 100644 index 8e599176ec86..000000000000 --- a/archivers/php85-phar/files/patch-phar__path__check.c +++ /dev/null @@ -1,241 +0,0 @@ ---- phar_path_check.c.orig 2025-07-02 12:00:06 UTC -+++ phar_path_check.c -@@ -0,0 +1,238 @@ -+/* Generated by re2c 3.1 */ -+/* -+ +----------------------------------------------------------------------+ -+ | phar php single-file executable PHP extension | -+ +----------------------------------------------------------------------+ -+ | 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: | -+ | https://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. | -+ +----------------------------------------------------------------------+ -+ | Authors: Marcus Boerger | -+ +----------------------------------------------------------------------+ -+*/ -+ -+#include "phar_internal.h" -+ -+phar_path_check_result phar_path_check(char **s, size_t *len, const char **error) -+{ -+ const unsigned char *p = (const unsigned char*)*s; -+ const unsigned char *m; -+ -+ if (*len == 1 && *p == '.') { -+ *error = "current directory reference"; -+ return pcr_err_curr_dir; -+ } else if (*len == 2 && p[0] == '.' && p[1] == '.') { -+ *error = "upper directory reference"; -+ return pcr_err_up_dir; -+ } -+ -+#define YYCTYPE unsigned char -+#define YYCURSOR p -+#define YYLIMIT p+*len -+#define YYMARKER m -+#define YYFILL(n) do {} while (0) -+ -+loop: -+ -+{ -+ YYCTYPE yych; -+ unsigned int yyaccept = 0; -+ if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); -+ yych = *YYCURSOR; -+ if (yych <= '[') { -+ if (yych <= ')') { -+ if (yych <= '\f') { -+ if (yych >= 0x01) goto yy1; -+ } else { -+ if (yych <= '\r') goto yy3; -+ if (yych <= 0x19) goto yy1; -+ goto yy4; -+ } -+ } else { -+ if (yych <= '/') { -+ if (yych <= '*') goto yy6; -+ if (yych <= '.') goto yy4; -+ goto yy7; -+ } else { -+ if (yych == '?') goto yy8; -+ goto yy4; -+ } -+ } -+ } else { -+ if (yych <= 0xEC) { -+ if (yych <= 0xC1) { -+ if (yych <= '\\') goto yy9; -+ if (yych <= 0x7F) goto yy4; -+ goto yy1; -+ } else { -+ if (yych <= 0xDF) goto yy10; -+ if (yych <= 0xE0) goto yy11; -+ goto yy12; -+ } -+ } else { -+ if (yych <= 0xF0) { -+ if (yych <= 0xED) goto yy13; -+ if (yych <= 0xEF) goto yy12; -+ goto yy14; -+ } else { -+ if (yych <= 0xF3) goto yy15; -+ if (yych <= 0xF4) goto yy16; -+ goto yy1; -+ } -+ } -+ } -+ ++YYCURSOR; -+ { -+ if (**s == '/') { -+ (*s)++; -+ (*len)--; -+ } -+ if ((p - (const unsigned char*)*s) - 1 != *len) -+ { -+ *error ="illegal character"; -+ return pcr_err_illegal_char; -+ } -+ *error = NULL; -+ return pcr_is_ok; -+ } -+yy1: -+ ++YYCURSOR; -+yy2: -+ { -+ *error ="illegal character"; -+ return pcr_err_illegal_char; -+ } -+yy3: -+ yych = *++YYCURSOR; -+ if (yych == '\n') goto yy1; -+ goto yy2; -+yy4: -+ ++YYCURSOR; -+yy5: -+ { -+ goto loop; -+ } -+yy6: -+ ++YYCURSOR; -+ { -+ *error = "star"; -+ return pcr_err_star; -+ } -+yy7: -+ yyaccept = 0; -+ yych = *(YYMARKER = ++YYCURSOR); -+ if (yych <= '-') goto yy5; -+ if (yych <= '.') goto yy17; -+ if (yych <= '/') goto yy19; -+ goto yy5; -+yy8: -+ ++YYCURSOR; -+ { -+ if (**s == '/') { -+ (*s)++; -+ } -+ *len = (p - (const unsigned char*)*s) -1; -+ *error = NULL; -+ return pcr_use_query; -+ } -+yy9: -+ ++YYCURSOR; -+ { -+ *error = "back-slash"; -+ return pcr_err_back_slash; -+ } -+yy10: -+ yych = *++YYCURSOR; -+ if (yych <= 0x7F) goto yy2; -+ if (yych <= 0xBF) goto yy4; -+ goto yy2; -+yy11: -+ yyaccept = 1; -+ yych = *(YYMARKER = ++YYCURSOR); -+ if (yych <= 0x9F) goto yy2; -+ if (yych <= 0xBF) goto yy20; -+ goto yy2; -+yy12: -+ yyaccept = 1; -+ yych = *(YYMARKER = ++YYCURSOR); -+ if (yych <= 0x7F) goto yy2; -+ if (yych <= 0xBF) goto yy20; -+ goto yy2; -+yy13: -+ yyaccept = 1; -+ yych = *(YYMARKER = ++YYCURSOR); -+ if (yych <= 0x7F) goto yy2; -+ if (yych <= 0x9F) goto yy20; -+ goto yy2; -+yy14: -+ yyaccept = 1; -+ yych = *(YYMARKER = ++YYCURSOR); -+ if (yych <= 0x8F) goto yy2; -+ if (yych <= 0xBF) goto yy21; -+ goto yy2; -+yy15: -+ yyaccept = 1; -+ yych = *(YYMARKER = ++YYCURSOR); -+ if (yych <= 0x7F) goto yy2; -+ if (yych <= 0xBF) goto yy21; -+ goto yy2; -+yy16: -+ yyaccept = 1; -+ yych = *(YYMARKER = ++YYCURSOR); -+ if (yych <= 0x7F) goto yy2; -+ if (yych <= 0x8F) goto yy21; -+ goto yy2; -+yy17: -+ yych = *++YYCURSOR; -+ if (yych <= 0x00) goto yy22; -+ if (yych <= '-') goto yy18; -+ if (yych <= '.') goto yy23; -+ if (yych <= '/') goto yy22; -+yy18: -+ YYCURSOR = YYMARKER; -+ if (yyaccept == 0) { -+ goto yy5; -+ } else { -+ goto yy2; -+ } -+yy19: -+ ++YYCURSOR; -+ { -+ *error = "double slash"; -+ return pcr_err_double_slash; -+ } -+yy20: -+ yych = *++YYCURSOR; -+ if (yych <= 0x7F) goto yy18; -+ if (yych <= 0xBF) goto yy4; -+ goto yy18; -+yy21: -+ yych = *++YYCURSOR; -+ if (yych <= 0x7F) goto yy18; -+ if (yych <= 0xBF) goto yy20; -+ goto yy18; -+yy22: -+ ++YYCURSOR; -+ { -+ *error = "current directory reference"; -+ return pcr_err_curr_dir; -+ } -+yy23: -+ yych = *++YYCURSOR; -+ if (yych <= 0x00) goto yy24; -+ if (yych != '/') goto yy18; -+yy24: -+ ++YYCURSOR; -+ { -+ *error = "upper directory reference"; -+ return pcr_err_up_dir; -+ } -+} -+ -+} diff --git a/archivers/php85-phar/files/patch-pharzip.h b/archivers/php85-phar/files/patch-pharzip.h new file mode 100644 index 000000000000..5e0e89f2a844 --- /dev/null +++ b/archivers/php85-phar/files/patch-pharzip.h @@ -0,0 +1,19 @@ +--- pharzip.h.orig 2025-08-19 05:41:37 UTC ++++ pharzip.h +@@ -17,6 +17,10 @@ + +----------------------------------------------------------------------+ + */ + ++/* Add missing include guard to avoid multiple inclusion */ ++#ifndef PHAR_PHARZIP_H ++#define PHAR_PHARZIP_H ++ + typedef struct _phar_zip_file_header { + char signature[4]; /* local file header signature 4 bytes (0x04034b50) */ + char zipversion[2]; /* version needed to extract 2 bytes */ +@@ -238,3 +242,5 @@ typedef struct _phar_zip_dir_end { + char comment_len[2]; /* .ZIP file comment length 2 bytes */ + /* .ZIP file comment (variable size) */ + } phar_zip_dir_end; ++ ++#endif /* PHAR_PHARZIP_H */ diff --git a/databases/php85-pdo/files/patch-pdo__sql__parser.c b/databases/php85-pdo/files/patch-pdo__sql__parser.c deleted file mode 100644 index 191eea16a3bd..000000000000 --- a/databases/php85-pdo/files/patch-pdo__sql__parser.c +++ /dev/null @@ -1,729 +0,0 @@ ---- pdo_sql_parser.c.orig 2025-07-02 12:59:51 UTC -+++ pdo_sql_parser.c -@@ -0,0 +1,726 @@ -+/* Generated by re2c 3.1 */ -+/* -+ +----------------------------------------------------------------------+ -+ | 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: | -+ | https://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 | -+ +----------------------------------------------------------------------+ -+*/ -+ -+#include "php.h" -+#include "php_pdo_driver.h" -+#include "pdo_sql_parser.h" -+ -+static int default_scanner(pdo_scanner_t *s) -+{ -+ const char *cursor = s->cur; -+ -+ s->tok = cursor; -+ -+ -+ -+{ -+ YYCTYPE yych; -+ unsigned int yyaccept = 0; -+ if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); -+ yych = *YYCURSOR; -+ switch (yych) { -+ case 0x00: goto yy1; -+ case '"': goto yy4; -+ case '\'': goto yy6; -+ case '-': goto yy7; -+ case '/': goto yy8; -+ case ':': goto yy9; -+ case '?': goto yy10; -+ default: goto yy2; -+ } -+yy1: -+ YYCURSOR = YYMARKER; -+ switch (yyaccept) { -+ case 0: goto yy5; -+ case 1: goto yy15; -+ default: goto yy19; -+ } -+yy2: -+ ++YYCURSOR; -+ if (YYLIMIT <= YYCURSOR) YYFILL(1); -+ yych = *YYCURSOR; -+ switch (yych) { -+ case 0x00: -+ case '"': -+ case '\'': -+ case '-': -+ case '/': -+ case ':': -+ case '?': goto yy3; -+ default: goto yy2; -+ } -+yy3: -+ { RET(PDO_PARSER_TEXT); } -+yy4: -+ yyaccept = 0; -+ yych = *(YYMARKER = ++YYCURSOR); -+ if (yych >= 0x01) goto yy13; -+yy5: -+ { SKIP_ONE(PDO_PARSER_TEXT); } -+yy6: -+ yyaccept = 0; -+ yych = *(YYMARKER = ++YYCURSOR); -+ if (yych <= 0x00) goto yy5; -+ goto yy17; -+yy7: -+ yych = *++YYCURSOR; -+ switch (yych) { -+ case '-': goto yy20; -+ default: goto yy5; -+ } -+yy8: -+ yych = *++YYCURSOR; -+ switch (yych) { -+ case '*': goto yy22; -+ default: goto yy5; -+ } -+yy9: -+ 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 yy23; -+ case ':': goto yy25; -+ default: goto yy5; -+ } -+yy10: -+ yych = *++YYCURSOR; -+ switch (yych) { -+ case '?': goto yy27; -+ default: goto yy11; -+ } -+yy11: -+ { RET(PDO_PARSER_BIND_POS); } -+yy12: -+ ++YYCURSOR; -+ if (YYLIMIT <= YYCURSOR) YYFILL(1); -+ yych = *YYCURSOR; -+yy13: -+ switch (yych) { -+ case 0x00: goto yy1; -+ case '"': goto yy14; -+ default: goto yy12; -+ } -+yy14: -+ yyaccept = 1; -+ YYMARKER = ++YYCURSOR; -+ if (YYLIMIT <= YYCURSOR) YYFILL(1); -+ yych = *YYCURSOR; -+ switch (yych) { -+ case '"': goto yy12; -+ default: goto yy15; -+ } -+yy15: -+ { RET(PDO_PARSER_TEXT); } -+yy16: -+ ++YYCURSOR; -+ if (YYLIMIT <= YYCURSOR) YYFILL(1); -+ yych = *YYCURSOR; -+yy17: -+ switch (yych) { -+ case 0x00: goto yy1; -+ case '\'': goto yy18; -+ default: goto yy16; -+ } -+yy18: -+ yyaccept = 2; -+ YYMARKER = ++YYCURSOR; -+ if (YYLIMIT <= YYCURSOR) YYFILL(1); -+ yych = *YYCURSOR; -+ switch (yych) { -+ case '\'': goto yy16; -+ default: goto yy19; -+ } -+yy19: -+ { RET(PDO_PARSER_TEXT); } -+yy20: -+ ++YYCURSOR; -+ if (YYLIMIT <= YYCURSOR) YYFILL(1); -+ yych = *YYCURSOR; -+ switch (yych) { -+ case '\n': goto yy21; -+ default: goto yy20; -+ } -+yy21: -+ { RET(PDO_PARSER_TEXT); } -+yy22: -+ ++YYCURSOR; -+ if (YYLIMIT <= YYCURSOR) YYFILL(1); -+ yych = *YYCURSOR; -+ switch (yych) { -+ case '*': goto yy28; -+ default: goto yy22; -+ } -+yy23: -+ ++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 yy23; -+ default: goto yy24; -+ } -+yy24: -+ { RET(PDO_PARSER_BIND); } -+yy25: -+ ++YYCURSOR; -+ if (YYLIMIT <= YYCURSOR) YYFILL(1); -+ yych = *YYCURSOR; -+ switch (yych) { -+ case ':': goto yy25; -+ default: goto yy26; -+ } -+yy26: -+ { RET(PDO_PARSER_TEXT); } -+yy27: -+ ++YYCURSOR; -+ if (YYLIMIT <= YYCURSOR) YYFILL(1); -+ yych = *YYCURSOR; -+ switch (yych) { -+ case '?': goto yy27; -+ default: goto yy26; -+ } -+yy28: -+ ++YYCURSOR; -+ if (YYLIMIT <= YYCURSOR) YYFILL(1); -+ yych = *YYCURSOR; -+ switch (yych) { -+ case '*': goto yy28; -+ case '/': goto yy29; -+ default: goto yy22; -+ } -+yy29: -+ ++YYCURSOR; -+ goto yy21; -+} -+ -+} -+ -+struct placeholder { -+ const char *pos; -+ size_t len; -+ zend_string *quoted; /* quoted value */ -+ int bindno; -+ struct placeholder *next; -+}; -+ -+struct custom_quote { -+ const char *pos; -+ size_t len; -+}; -+ -+static void free_param_name(zval *el) { -+ zend_string_release(Z_PTR_P(el)); -+} -+ -+PDO_API int pdo_parse_params(pdo_stmt_t *stmt, zend_string *inquery, zend_string **outquery) -+{ -+ pdo_scanner_t s; -+ char *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; -+ int (*scan)(pdo_scanner_t *s); -+ struct custom_quote custom_quote = {NULL, 0}; -+ -+ scan = stmt->dbh->methods->scanner ? stmt->dbh->methods->scanner : default_scanner; -+ -+ s.cur = ZSTR_VAL(inquery); -+ s.end = s.cur + ZSTR_LEN(inquery) + 1; -+ -+ /* phase 1: look for args */ -+ while((t = scan(&s)) != PDO_PARSER_EOI) { -+ if (custom_quote.pos) { -+ /* Inside a custom quote */ -+ if (t == PDO_PARSER_CUSTOM_QUOTE && custom_quote.len == s.cur - s.tok && !strncmp(s.tok, custom_quote.pos, custom_quote.len)) { -+ /* Matching closing quote found, end custom quoting */ -+ custom_quote.pos = NULL; -+ custom_quote.len = 0; -+ } else if (t == PDO_PARSER_ESCAPED_QUESTION) { -+ /* An escaped question mark has been used inside a dollar quoted string, most likely as a workaround -+ * as a single "?" would have been parsed as placeholder, due to the lack of support for dollar quoted -+ * strings. For now, we emit a deprecation notice, but still process it */ -+ php_error_docref(NULL, E_DEPRECATED, "Escaping question marks inside dollar quoted strings is not required anymore and is deprecated"); -+ -+ goto placeholder; -+ } -+ -+ continue; -+ } -+ -+ if (t == PDO_PARSER_CUSTOM_QUOTE) { -+ /* Start of a custom quote, keep a reference to search for the matching closing quote */ -+ custom_quote.pos = s.tok; -+ custom_quote.len = s.cur - s.tok; -+ -+ continue; -+ } -+ -+ 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 ((ZSTR_VAL(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; -+ } -+ -+placeholder: -+ 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 = ZSTR_CHAR('?'); -+ escapes++; -+ } else { -+ plc->bindno = bindno++; -+ } -+ -+ if (placetail) { -+ placetail->next = plc; -+ } else { -+ placeholders = plc; -+ } -+ placetail = plc; -+ } -+ } -+ -+ /* 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; -+ } -+ -+ params = stmt->bound_params; -+ if (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; -+ } -+ -+ if (!placeholders) { -+ /* nothing to do; good! */ -+ return 0; -+ } -+ -+ if (stmt->supports_placeholders == query_type && !stmt->named_rewrite_template) { -+ /* query matches native syntax */ -+ if (escapes) { -+ newbuffer_len = ZSTR_LEN(inquery); -+ 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; -+ } -+ -+safe: -+ /* what are we going to do ? */ -+ if (stmt->supports_placeholders == PDO_PLACEHOLDER_NONE) { -+ /* query generation */ -+ -+ newbuffer_len = ZSTR_LEN(inquery); -+ -+ /* 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(); -+ } -+ -+ plc->quoted = stmt->dbh->methods->quoter(stmt->dbh, buf, param->param_type); -+ -+ if (buf) { -+ zend_string_release_ex(buf, 0); -+ } -+ if (plc->quoted == NULL) { -+ /* bork */ -+ ret = -1; -+ strncpy(stmt->error_code, stmt->dbh->error_code, 6); -+ goto clean_up; -+ } -+ -+ } else { -+ pdo_raise_impl_error(stmt->dbh, stmt, "HY105", "Expected a stream resource"); -+ ret = -1; -+ goto clean_up; -+ } -+ } 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) ? ZSTR_CHAR('1') : ZSTR_CHAR('0'); -+ break; -+ -+ case PDO_PARAM_INT: -+ plc->quoted = zend_long_to_str(zval_get_long(parameter)); -+ break; -+ -+ case PDO_PARAM_NULL: -+ plc->quoted = ZSTR_KNOWN(ZEND_STR_NULL); -+ break; -+ -+ default: { -+ buf = zval_try_get_string(parameter); -+ /* parameter does not have a string representation, buf == NULL */ -+ if (EG(exception)) { -+ /* bork */ -+ ret = -1; -+ strncpy(stmt->error_code, stmt->dbh->error_code, 6); -+ goto clean_up; -+ } -+ -+ plc->quoted = stmt->dbh->methods->quoter(stmt->dbh, buf, param_type); -+ } -+ } -+ -+ 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 = zend_string_copy(Z_STR_P(parameter)); -+ } -+ newbuffer_len += ZSTR_LEN(plc->quoted); -+ } -+ -+rewrite: -+ /* allocate output buffer */ -+ *outquery = zend_string_alloc(newbuffer_len, 0); -+ newbuffer = ZSTR_VAL(*outquery); -+ -+ /* and build the query */ -+ const char *ptr = ZSTR_VAL(inquery); -+ plc = placeholders; -+ -+ do { -+ t = plc->pos - ptr; -+ if (t) { -+ memcpy(newbuffer, ptr, t); -+ newbuffer += t; -+ } -+ if (plc->quoted) { -+ memcpy(newbuffer, ZSTR_VAL(plc->quoted), ZSTR_LEN(plc->quoted)); -+ newbuffer += ZSTR_LEN(plc->quoted); -+ } else { -+ memcpy(newbuffer, plc->pos, plc->len); -+ newbuffer += plc->len; -+ } -+ ptr = plc->pos + plc->len; -+ -+ plc = plc->next; -+ } while (plc); -+ -+ t = ZSTR_VAL(inquery) + ZSTR_LEN(inquery) - ptr; -+ if (t) { -+ memcpy(newbuffer, ptr, t); -+ newbuffer += t; -+ } -+ *newbuffer = '\0'; -+ ZSTR_LEN(*outquery) = newbuffer - ZSTR_VAL(*outquery); -+ -+ ret = 1; -+ goto clean_up; -+ -+ } else if (query_type == PDO_PLACEHOLDER_POSITIONAL) { -+ /* rewrite ? to :pdoX */ -+ const char *tmpl = stmt->named_rewrite_template ? stmt->named_rewrite_template : ":pdo%d"; -+ int bind_no = 1; -+ -+ newbuffer_len = ZSTR_LEN(inquery); *** 1481 LINES SKIPPED ***