{"app_name":"Debian Janitor","binary_packages":["phppgadmin"],"branch_url":"git+ssh://git@salsa.debian.org/postgresql/phppgadmin.git","build_distribution":"sid","build_log_highlight_lines":[],"build_log_line_count":2555,"build_log_name":"build.log","campaign":"control","change_set":"71418f8e-ac00-49cb-b285-42d4d3cf039e","codebase":"phppgadmin","codemod_log_name":"codemod.log","command":"brz up '--revision=git-v1:921866f35baa59636dabe798675cb2f7e2c6ab52'","current_year":"2026","description":"","is_admin":false,"lintian_result":{"groups":[{"group_id":"phppgadmin_7.14.7+dfsg-1~jan+control1","input_files":[{"hints":[{"experimental":false,"note":"","pointer":{"item":{"index":"phppgadmin_7.14.7+dfsg-1~jan+control1.dsc (patched)","name":"debian/changelog"},"line_position":1},"tag":"no-nmu-in-changelog","visibility":"warning"},{"experimental":false,"note":"7.14.7+dfsg-1~jan+control1","pointer":{"item":{"index":"phppgadmin_7.14.7+dfsg-1~jan+control1.dsc (patched)","name":"debian/changelog"},"line_position":1},"tag":"source-nmu-has-incorrect-version-number","visibility":"warning"},{"experimental":false,"note":"tests/selenium/selenium-lib/*","pointer":{"item":{"index":"phppgadmin_7.14.7+dfsg-1~jan+control1.dsc (patched)","name":"debian/copyright"},"line_position":35},"tag":"superfluous-file-pattern","visibility":"warning"},{"experimental":false,"note":"tests/selenium/selenium-lib/core/lib/cssQuery/*","pointer":{"item":{"index":"phppgadmin_7.14.7+dfsg-1~jan+control1.dsc (patched)","name":"debian/copyright"},"line_position":40},"tag":"superfluous-file-pattern","visibility":"warning"},{"experimental":false,"note":"tests/selenium/selenium-lib/core/lib/prototype.js","pointer":{"item":{"index":"phppgadmin_7.14.7+dfsg-1~jan+control1.dsc (patched)","name":"debian/copyright"},"line_position":49},"tag":"superfluous-file-pattern","visibility":"warning"},{"experimental":false,"note":"tests/selenium/selenium-lib/core/lib/scriptaculous/*","pointer":{"item":{"index":"phppgadmin_7.14.7+dfsg-1~jan+control1.dsc (patched)","name":"debian/copyright"},"line_position":53},"tag":"superfluous-file-pattern","visibility":"warning"},{"experimental":false,"note":"tests/selenium/selenium-lib/core/lib/snapsie.js","pointer":{"item":{"index":"phppgadmin_7.14.7+dfsg-1~jan+control1.dsc (patched)","name":"debian/copyright"},"line_position":44},"tag":"superfluous-file-pattern","visibility":"warning"},{"experimental":false,"note":"tests/selenium/selenium-lib/core/xpath/*","pointer":{"item":{"index":"phppgadmin_7.14.7+dfsg-1~jan+control1.dsc (patched)","name":"debian/copyright"},"line_position":62},"tag":"superfluous-file-pattern","visibility":"warning"},{"experimental":false,"note":"tests/selenium/selenium-lib/core/xpath/dom.js","pointer":{"item":{"index":"phppgadmin_7.14.7+dfsg-1~jan+control1.dsc (patched)","name":"debian/copyright"},"line_position":67},"tag":"superfluous-file-pattern","visibility":"warning"},{"experimental":false,"note":"tests/selenium/selenium-lib/core/xpath/util.js","pointer":{"item":{"index":"phppgadmin_7.14.7+dfsg-1~jan+control1.dsc (patched)","name":"debian/copyright"},"line_position":67},"tag":"superfluous-file-pattern","visibility":"warning"},{"experimental":false,"note":"tests/selenium/selenium-lib/core/xpath/xmltoken.js","pointer":{"item":{"index":"phppgadmin_7.14.7+dfsg-1~jan+control1.dsc (patched)","name":"debian/copyright"},"line_position":67},"tag":"superfluous-file-pattern","visibility":"warning"},{"experimental":false,"note":"tests/selenium/selenium-lib/core/xpath/xpath.js","pointer":{"item":{"index":"phppgadmin_7.14.7+dfsg-1~jan+control1.dsc (patched)","name":"debian/copyright"},"line_position":67},"tag":"superfluous-file-pattern","visibility":"warning"}],"path":"phppgadmin_7.14.7+dfsg-1~jan+control1.dsc"},{"hints":[{"experimental":false,"note":"control != sid","pointer":{"item":{"index":"phppgadmin_7.14.7+dfsg-1~jan+control1_all.deb (installed)","name":"usr/share/doc/phppgadmin/changelog.Debian.gz"},"line_position":1},"tag":"changelog-distribution-does-not-match-changes-file","visibility":"warning"},{"experimental":false,"note":"","tag":"old-fsf-address-in-copyright-file","visibility":"warning"}],"path":"phppgadmin_7.14.7+dfsg-1~jan+control1_all.deb"},{"hints":[],"path":"phppgadmin_7.14.7+dfsg-1~jan+control1_amd64.buildinfo"},{"hints":[{"experimental":false,"note":"sid control","tag":"distribution-and-changes-mismatch","visibility":"warning"}],"path":"phppgadmin_7.14.7+dfsg-1~jan+control1_amd64.changes"}],"source_name":"phppgadmin","source_version":"7.14.7+dfsg-1~jan+control1"}],"lintian_version":"2.143.0"},"logs":{"build":{"description":"build","name":"build.log","url":"/control/c/phppgadmin/71418f8e-ac00-49cb-b285-42d4d3cf039e/logs/build.log"},"codemod":{"description":"codemod","name":"codemod.log","url":"/control/c/phppgadmin/71418f8e-ac00-49cb-b285-42d4d3cf039e/logs/codemod.log"},"worker":{"content":"[2026-11-07T20:26:04Z INFO  janitor_worker] Opening branch at https://salsa.debian.org/postgresql/phppgadmin.git\n[2026-11-07T20:26:07Z INFO  janitor_worker] Cached branch URL http://janitor.debian.net/git/phppgadmin missing: http://janitor.debian.net/git/phppgadmin/\n[2026-11-07T20:26:07Z DEBUG janitor_worker] Workspace path: /srv/worker/output/1/janitor-worker-6J79lK/phppgadmin\n[2026-11-07T20:26:07Z DEBUG silver_platter::workspace] Creating sprout from git+ssh://git@salsa.debian.org/postgresql/phppgadmin.git\n113)\nTotal 1576 (delta 87), reused 165 (delta 77), pack-reused 1376 (from 1)\n[2026-11-07T20:26:11Z DEBUG silver_platter::utils] Colocated branch experimental not found, skipping\nTotal 13 (delta 3), reused 3 (delta 0), pack-reused 0 (from 0)\n[2026-11-07T20:26:14Z DEBUG silver_platter::utils] Colocated branch vendor not found, skipping\nTotal 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)\nNothing to delete.\n[2026-11-07T20:26:16Z DEBUG silver_platter::workspace] Fetching colocated branches: {\"upstream\": \"upstream\", \"experimental\": \"experimental\", \"vendor\": \"vendor\", \"pristine-tar\": \"pristine-tar\"}\nTotal 0 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)\n[2026-11-07T20:26:19Z DEBUG silver_platter::workspace] Successfully fetched colocated branch upstream -> upstream\n[2026-11-07T20:26:19Z WARN  silver_platter::workspace] Failed to fetch colocated branch pristine-tar -> pristine-tar: Transport error: Connection closed early\n[2026-11-07T20:26:19Z INFO  janitor_worker] Workspace ready - starting.\n[2026-11-07T20:26:19Z INFO  janitor_worker::debian] Running [\"brz\", \"up\", \"--revision=git-v1:921866f35baa59636dabe798675cb2f7e2c6ab52\"]\n[2026-11-07T20:26:19Z DEBUG debian_analyzer::detect_gbp_dch] Branch history analysis: changelog_only: 9, other_only: 21, mixed: 14, dch_references: 0, unreleased_references: 17\nfound 540 deltas to reuse\n[2026-11-07T20:26:22Z INFO  ognibuild::debian::fix_build] Using fixers: [PgBuildExtOutOfDateControlFixer, MissingConfigureFixer, MissingAutomakeInputFixer, MissingConfigStatusInputFixer, MissingPerlFileFixer, DebcargoUnacceptablePredicateFixer, DebcargoUnacceptableComparatorFixer, RetryAptFetchFailure, PackageDependencyFixer]\n[2026-11-07T20:26:22Z DEBUG ognibuild::debian::build] Adding dummy changelog entry 7.14.7+dfsg-1~jan+control1 for build\n[2026-11-07T20:26:22Z DEBUG ognibuild::debian::build] Writing build log to /srv/worker/output/1/janitor-worker-6J79lK/build.log\n[2026-11-07T20:26:22Z INFO  ognibuild::debian::build] Building debian packages, running sbuild --chroot-mode=unshare --no-clean-source -A -s -v -d sid.\n[2026-11-07T20:32:53Z INFO  ognibuild::debian::build] Build succeeded.\n[2026-11-07T20:32:53Z INFO  janitor_worker::debian::build] Built [\"/srv/worker/output/1/janitor-worker-6J79lK/phppgadmin_7.14.7+dfsg-1~jan+control1_amd64.changes\", \"/srv/worker/output/1/janitor-worker-6J79lK/phppgadmin_7.14.7+dfsg-1~jan+control1_all.deb\", \"/srv/worker/output/1/janitor-worker-6J79lK/phppgadmin_7.14.7+dfsg-1~jan+control1_amd64.buildinfo\"].\n[2026-11-07T20:32:53Z DEBUG janitor_worker::debian::lintian] Running lintian: cd \"/srv/worker/output/1/janitor-worker-6J79lK\" && \"lintian\" \"--exp-output=format=json\" \"--allow-root\" \"/srv/worker/output/1/janitor-worker-6J79lK/phppgadmin_7.14.7+dfsg-1~jan+control1_amd64.changes\" \"/srv/worker/output/1/janitor-worker-6J79lK/phppgadmin_7.14.7+dfsg-1~jan+control1_all.deb\" \"/srv/worker/output/1/janitor-worker-6J79lK/phppgadmin_7.14.7+dfsg-1~jan+control1_amd64.buildinfo\"\n[2026-11-07T20:32:58Z INFO  janitor_worker] Pushing result branch to http://janitor.debian.net/git/phppgadmin\nfound 0 deltas to reuse\n[2026-11-07T20:32:58Z INFO  janitor_worker::vcs] Pushing packaging branch cache to http://janitor.debian.net/git/phppgadmin,branch=debian%2Flatest\nfound 31 deltas to reuse\n[2026-11-07T20:32:59Z INFO  janitor_worker::vcs] Pushed packaging branch cache to http://janitor.debian.net/git/phppgadmin,branch=debian%2Flatest\n","description":"worker","name":"worker.log","url":"/control/c/phppgadmin/71418f8e-ac00-49cb-b285-42d4d3cf039e/logs/worker.log"}},"my_review":null,"other_reviews":[],"primary_log":"worker","publish_history":[],"queue_position":1,"result_code":"success","resume_from":null,"reviews":[],"revision":"git-v1:921866f35baa59636dabe798675cb2f7e2c6ab52","run":{"branch_url":"git+ssh://git@salsa.debian.org/postgresql/phppgadmin.git","build_version":null,"change_set":"71418f8e-ac00-49cb-b285-42d4d3cf039e","codebase":"phppgadmin","command":"brz up '--revision=git-v1:921866f35baa59636dabe798675cb2f7e2c6ab52'","context":null,"debian_build_distribution":"sid","debian_build_version":null,"description":"","duration_seconds":416,"failure_stage":null,"failure_transient":null,"finish_time":"2026-11-07T20:32:59.363034Z","id":"71418f8e-ac00-49cb-b285-42d4d3cf039e","logfilenames":["worker.log","codemod.log","build.log"],"main_branch_revision":"git-v1:46c7ae59f87a33fa2c8cb2c68ac51e43d6d1a241","publish_status":"unknown","result_branches":[{"absorbed":false,"base_revision":"git-v1:46c7ae59f87a33fa2c8cb2c68ac51e43d6d1a241","diff":"diff --git a/HISTORY b/HISTORY\nindex 478db22..3748ec4 100644\n--- a/HISTORY\n+++ b/HISTORY\n@@ -1,127 +1,6 @@\n phpPgAdmin History\n ------------------\n \n-Version 7.14.8-mod\n---------------\n-Released: August 12th, 2026\n-\n-Breaking:\n-* Bumped the minimum PHP version requirement to PHP 7.4\n-\n-Bugs:\n-* Fix long-standing bug that returns \"No server supplied!\" on subsequent query after editing a row.\n-* Remove deprecated argument from const definitions (fixes warning in PHP 8.0.0+; fix by @kitserve)\n-* Update links on intro page (fixes #27)\n-* Fixed a variety of depreciations in modern PHP versions\n-* Fix auto-login support (fixes #28)\n-\n-Features:\n-* Support SCRAM-SHA-256 passwords\n-\n-Updates:\n-* Bumped ADOdb to v5.22.11\n-* Bumped jQuery to v3.7.1\n-\n-\n-Version 7.14.7-mod\n---------------\n-Released: December 16th, 2023\n-\n-Bugs:\n-* Prevent passing NULL to htmlspecialchars() as this is depreciated. Fixes issue #16.\n-* Fix \"Last value\" field on sequences. Fixes issue #19.\n-* Fix AJAX browsing of foreign keys only working on one level. Fixes issue #23.\n-* Fix broken composer.json.\n-\n-\n-Version 7.14.6-mod\n---------------\n-Released: October 13th, 2023\n-\n-Bugs:\n-* Don't reload frameset on popups. Fixes issue #14.\n-\n-\n-Version 7.14.5-mod\n---------------\n-Released: August 29th, 2023\n-\n-Features:\n-* Session security is now enabled by default.\n-* Bump ADOdb to v5.22.6\n-* Security fix: replace all cales to unserialize() with calls to the safeUnserialize() wrapper from phpMyAdmin\n-\n-Bugs:\n-* Fix broken link in PHP session security banner.\n-\n-Licensing:\n-* As this release adds code borrowed from the phpMyAdmin project, and phpMyAdmin is licensed under GPL 2.0 only,\n-  instead of the GPL 2.0 or greater this project was under, it has been relicensed as GPL 2.0 only to remain in\n-  compliance.\n-\n-\n-Version 7.14.4-mod\n---------------\n-Released: April 8th, 2023\n-\n-Features:\n-* Adds support for PHP 8.2\n-* Bump ADOdb to v5.22.5\n-* Propagate title changes back to top-level window and reload orphan pages inside of the frameset.\n-  This makes it nicer to use phpPgAdmin if you routinely open things inside of a new tab.\n-\n-\n-Version 7.14.3-mod\n---------------\n-Released: November 15th, 2022\n-\n-Bugs:\n-* Fix CSV import generating a warning (upstream issue #165)\n-\n-\n-Version 7.14.2-mod\n---------------\n-Released: June 1st, 2022\n-\n-Features:\n-* Adds support for PostgreSQL 15+\n-\n-Bugs:\n-* Fix unknown 2-digit version numbers not defaulting to latest driver version.\n-\n-\n-Version 7.14.1-mod\n---------------\n-Released: May 9th, 2022\n-\n-Bugs:\n-* Bump ADOdb to v5.22.2 to fix PHP 8.1 bug\n-\n-\n-Version 7.14.0-mod\n---------------\n-\n-Released: April 16th, 2022\n-\n-Features:\n-* Fix CSRF vulnerabilities using SameSite (rsterbin / upstream pull request #99, fixes upstream issue #94)\n-* Add dark theme (xazzzz / upstream pull request #131)\n-* Handy preview of clipped content (g0tar / upstream pull request #149)\n-* Use TABLE's primary key for (second order) sorting (g0tar / upstream pull request #150)\n-* Recognize new objects: materialized views [MV], foreign tables [FDW], and exclusion constraints (g0tar / upstream pull request #151)\n-* Add support for partitioned tables (fixes upstream issue #143)\n-\n-Bugs:\n-* Various fixes for PHP 8 compatibility:\n-  * Fix for upstream issue #117 \"Can't load tree\" (idontusenumbers / upstream pull request #118)\n-  * Remove obsolete each() (nirgal / upstream pull request #126, fixes upstream issue #91)\n-  * Fix hasSequencePrivilege() actually using result (nirgal / upstream pull request #127)\n-  * Use ADOdb ServerInfo() to get pg version (nirgal / upstream pull request #125, fixes new ADOdb necessary for PHP 8)\n-  * Bump ADOdb to v5.22.1\n-* Remove duplicate erroneous translation strings (peje66 / upstream pull request #152)\n-* Various code formatting fixes\n-\n-\n Version 7.13.0\n --------------\n \n@@ -148,43 +27,43 @@ Released: December 10th, 2019\n \n Features:\n * Add support for granting USAGE on sequences\n-* Update French translation\n+* Update French translation \n \n-Bugs:\n+Bugs: \n * Fix issues with OID removal in Postgres 12+\n * Remove broken tree branch from table/view browse option\n * Properly escape identifiers when browsing tables/views/schemas\n-* Fix truncation of long multibyte strings\n+* Fix truncation of long multibyte strings \n * Clean up a number of misspellings and typos from codespell report\n \n Incompatabilities:\n * Require mbstring module support in PHP\n \n \n-Version 7.12.0\n+Version 7.12.0 \n --------------\n \n-Released: September 28, 2019\n+Released: September 28, 2019 \n \n Features\n-* Add Support for PHP 7.x\n+* Add Support for PHP 7.x \n * Add Support for Postgres 12\n * Update Bootstrap to version 3.3.7 (wisekeep)\n \n Bugs:\n * Fix several issues with CSS files (wisekeep)\n-* Clean up file permissions (nirgal)\n+* Clean up file permissions (nirgal) \n * Fixed Reflected XSS vulnerability (om3rcitak)\n * Fixes with sequence visbility and permission handling.\n \n Incompatabilities:\n-* We no longer support php5\n+* We no longer support php5  \n * Change in version numbering system\n \n Version 5.6\n -----------\n \n-Released: 12th November, 2018\n+Released: 12th November, 2018 \n \n Features\n * Add support for PostgreSQL 9.3, 9.4, 9.5, 9.6, 10, 11\n@@ -194,9 +73,9 @@ Features\n * Improved support for json/jsonb\n \n Bugs\n-* Fix bug in Turkish translation which caused failed ajax responses\n+* Fix bug in Turkish translation which caused failed ajax responses \n * Account for Blocked field in admin processes Selenium test\n-* Properly handle column comments\n+* Properly handle column comments \n * Fix background css issue\n * Additional language updates\n \n@@ -207,14 +86,14 @@ Incompatabilities\n Version 5.1\n -----------\n \n-Released: 14th April 2013\n+Released: 14th April 2013 \n \n Features\n * Full support for PostgreSQL 9.1 and 9.2\n * New plugin architecture, including addition of several new hooks (asleonardo, ioguix)\n * Support nested groups of servers (Julien Rouhaud & ioguix)\n-* Expanded test coverage in Selenium test suite\n-* Highlight referencing fields on hovering Foriegn Key values when browsing tables (asleonardo)\n+* Expanded test coverage in Selenium test suite \n+* Highlight referencing fields on hovering Foriegn Key values when browsing tables (asleonardo) \n * Simplified translation system implementation (ioguix)\n * Don't show cancel/kill options in process page to non-superusers\n * Add download ability from the History window (ioguix)\n@@ -222,12 +101,12 @@ Features\n \n Bugs\n * Fix several bugs with bytea support, including possible data corruption bugs when updating rows that have bytea fields\n-* Numeruous fixes for running under PHP Strict Standards\n+* Numeruous fixes for running under PHP Strict Standards \n * Fix an issue with autocompletion of text based Foreign Keys\n * Fix a bug when browsing tables with no unique key\n \n Translations\n-* Lithuanian (artvras)\n+* Lithuanian (artvras) \n \n Incompatabilities\n * We have stopped testing against Postgres versions < 8.4, which are EOL\n@@ -252,12 +131,12 @@ Features\n * Optimized application graphics (Limo Driver)\n * Support for Column Level Privileges\n * Allow users to specify a template database at database creation time\n-* Support killing processes\n+* Support killing processes  \n * Add ability to create indexes concurrently\n * Much better support of autovacuum configuration\n * Add an admin page for table level\n * Refactored autocompletion:\n-  * fix support for cross-schema objects\n+  * fix support for cross-schema objects \n   * support multi-field FK\n   * support for pagination of values in the auto-complete list\n * Allow user to logicaly group their server under custom named node in the browser tree\n@@ -306,7 +185,7 @@ Features\n * Add support for creating a table using an exsting one (ioguix)\n * Auto-expand a node in the tree browser if there are no other nodes (Tomasz Pala)\n * Add column about fields constraints type + links in table properties page (ioguix)\n-* Support for built-in Full Text Search (Ivan Zolotukhin)\n+* Support for built-in Full Text Search (Ivan Zolotukhin)  \n * Add alter name, owner & comment on views (ioguix)\n * Add column about called procedure + links to their definition in the triggers\n   properties page (ioguix)\n@@ -320,16 +199,16 @@ Features\n Bugs\n * Fix inability to assign a field type/domain of a different schema\n * Can't edit a report and set its comment to empty\n-* Fix PHP5 Strict mode complaints\n+* Fix PHP5 Strict mode complaints \n * Fix IN/NOT IN to accept text input lists 'a','b'\n * Fix bytea doesn't display as NULL when NULL\n * Schema qualifing every object to avoid non wanted behaviour about users' rights\n   and schema_path\n * Remove shared credentials when logging out of single server, to prevent automatic re-login\n-* Improved SSL connection handling, fix problems with connections from older php builds\n-* Fix bug with long role name truncation\n+* Improved SSL connection handling, fix problems with connections from older php builds \n+* Fix bug with long role name truncation \n * Fix bug with DELETE FROM when dropping a row (spq)\n-* Fix problems when deleteing PUBLIC schema\n+* Fix problems when deleteing PUBLIC schema \n * Fix several bugs in aggregate support\n * Improve autocompletion support\n * Tighten up use of global scope variables\n@@ -342,15 +221,15 @@ Translations\n * French (ioguix)\n * German (Albe Laurenz, spq)\n * Japanese (Tadashi Jokagi)\n-* Hungarian (Sulyok Peti)\n+* Hungarian (Sulyok Peti) \n \n Version 4.1.3\n -------------\n \n Bugs\n-* Eliminate use of $_SERVER['PHP_SELF']. This fixes a regression in 4.1.2 for\n+* Eliminate use of $_SERVER['PHP_SELF']. This fixes a regression in 4.1.2 for \n   non-mainstream locales (including SQL_ASCII)\n-* Validate client supplied server against entries in config.inc.php\n+* Validate client supplied server against entries in config.inc.php \n * Fix undefined variable when altering a field in a table on PostgreSQL < 8.0\n \n Version 4.1.2\n@@ -358,7 +237,7 @@ Version 4.1.2\n \n Bugs\n * Fix inability to assign a field type/domain of a different schema\n-* Fix PHP5 Strict mode complaints\n+* Fix PHP5 Strict mode complaints \n * Fix IN/NOT IN to accept text input lists 'a','b'.\n * Fix bytea doesn't display as NULL when NULL\n * Fix bug in view creation wizard\n@@ -370,9 +249,9 @@ Version 4.1.1\n -------------\n \n Bugs\n-* Fix problem where failed update would report as duplicate update error and\n+* Fix problem where failed update would report as duplicate update error and \n   fail to return edit screen\n-* Fix error when using $conf[owned_only] on 8.1 & 8.2\n+* Fix error when using $conf[owned_only] on 8.1 & 8.2 \n * Fix error displaying schema names for parents of inherited tables\n * Clean up non-standard escape warnings for PostgreSQL 8.2\n * Fix improper text quoting for droping roles and aggregates\n@@ -393,17 +272,17 @@ Features\n * Display content of pg_locks view (Javier Carlos)\n * Add labels for checkboxes/radio buttons for improved usability (Guillaume)\n * Display Prepared Transactions (Javier Carlos)\n-* Re-enable table browsing from tree icons (ioguix)\n+* Re-enable table browsing from tree icons (ioguix) \n * Add Support For IN/OUT Parameters (John Jawed)\n-* Add column level information into the tree browser (ioguix)\n-* Promote column level interaction into its own page (ioguix)\n+* Add column level information into the tree browser (ioguix) \n+* Promote column level interaction into its own page (ioguix) \n * Add automatic lookup of foreign key values in insert/update fields (John Jawed)\n * Add ability to create/drop/alter custom aggregates (Javier Carlos)\n * Add enable/disable trigger (John Jawed)\n-* Add global comments for databases and tablespaces\n+* Add global comments for databases and tablespaces  \n \n Translations\n-* Catalan from Bernat\n+* Catalan from Bernat \n * Romanian from Alin Vaida\n \n Version 4.0\n@@ -437,7 +316,7 @@ Features\n   deliberately specifed, then that will always be used and no detection will\n   occur.\n * ADOdb library updated to version 4.65\n-\n+  \n Bugs\n * Tree Icons are displayed middle instead of top\n * Ensure login frame is always at top level (Russell Smith)\n@@ -564,7 +443,7 @@ Features\n * pg_dumpall integration.  Now you can download the entire cluster via\n   phpPgAdmin.\n * Show line numbers when viewing functions\n-* Syntax highlighting for PL/SQL, PL/PgSQL, PL/PHP, PL/Ruby, PL/Java,\n+* Syntax highlighting for PL/SQL, PL/PgSQL, PL/PHP, PL/Ruby, PL/Java, \n   PL/J, PL/Python and PL/Perl functions, thanks to Jacob D. Cohen's\n   BSD-licensed highlighting code on rafb.net\n * Add page navigation links at the bottom as well as the top of the page\n@@ -613,7 +492,7 @@ Version 3.4\n \n Features\n * Add CACHE and CYCLE parameters in sequence creation\n-* View, add, edit and delete comments on tables, views, schemas,\n+* View, add, edit and delete comments on tables, views, schemas, \n   aggregates, conversions, operators, functions, types,\n   opclasses, sequences and columns (Dan Boren & ChrisKL)\n * Add config file option for turning off the display of comments\n@@ -776,7 +655,7 @@ Translations\n * Hungarian from Sulyok P�ter\n * German update from Markus Bertheau\n * Trad. Chinese from Chih-Hsin Lee\n-* Hungarian from Peti\n+* Hungarian from Peti \n * Spanish update from Martin Marques\n * Slovak update from Andrej Misovic\n * Turkish update from Devrim\n@@ -836,7 +715,7 @@ Features:\n * View and edit table comments\n * Changed XML format significantly.  Now doesn't use field names as\n   tag names, outputs column type information, and is in correct XML format!\n-* Save result sets as views and reports in most cases\n+* Save result sets as views and reports in most cases \n * Download the results of selects and reports\n * Tick all box on Select feature\n * Export in HTML format\n@@ -897,7 +776,7 @@ Version 3.0-rc-2\n   for installations where connection to template1\n   is disabled.\n * Removed uses of call time pass by reference,\n-  since it is a deprecated feature of PHP.\n+  since it is a deprecated feature of PHP. \n \n Version 3.0-rc-1\n ----------------\n@@ -905,7 +784,7 @@ Version 3.0-rc-1\n * Fix drop database reload browser bug\n * Look & Feel upgrade from Davey\n * Value & expression on edit row\n-* Chinese update from Chih-Hsin Lee\n+* Chinese update from Chih-Hsin Lee \n * Fixed support for functions and sequences\n   containing bizarre characters\n \n@@ -917,7 +796,7 @@ Version 3.0-beta-1\n * Preserve spaces when displaying data\n * Greatly improved PostgreSQL 7.2, 7.1 and 7.0 support\n * Italian translation\n-* Show database version in top bar\n+* Show database version in top bar \n * Many features useful for PostgreSQL hosting:\n \t- Hide reports\n \t- Filter for owned reports\n@@ -995,3 +874,4 @@ Version 0.1 - Early 2002\n ------------------------\n \n * Initial development version\n+\ndiff --git a/classes/Misc.php b/classes/Misc.php\nindex c9cc951..9e0595f 100644\n--- a/classes/Misc.php\n+++ b/classes/Misc.php\n@@ -1816,28 +1816,24 @@\n \t\t */\n \t\tfunction inisizeToBytes($strIniSize) {\n \t\t\t// This function will take the string value of an ini 'size' parameter,\n-\t\t\t// and return a float (64-bit) representing the number of bytes that\n-\t\t\t// the parameter represents. Or false if $strIniSize is unparsable.\n-\t\t\t// PHP's shorthand notation allows a single optional K, M or G suffix;\n-\t\t\t// a bare B suffix is also accepted here for backwards compatibility.\n+\t\t\t// and return a double (64-bit float) representing the number of bytes\n+\t\t\t// that the parameter represents. Or false if $strIniSize is unparsable.\n \t\t\t$a_IniParts = array();\n \n \t\t\tif (!is_string($strIniSize))\n \t\t\t\treturn false;\n \n-\t\t\tif (!preg_match('/^\\s*(\\d+)\\s*([bkmg]?)\\s*$/i', $strIniSize, $a_IniParts))\n+\t\t\tif (!preg_match ('/^(\\d+)([bkm]*)$/i', $strIniSize,$a_IniParts))\n \t\t\t\treturn false;\n \n-\t\t\t$nSize = (float) $a_IniParts[1];\n+\t\t\t$nSize = (double) $a_IniParts[1];\n \t\t\t$strUnit = strtolower($a_IniParts[2]);\n \n \t\t\tswitch($strUnit) {\n-\t\t\t\tcase 'g':\n-\t\t\t\t\treturn ($nSize * (float) 1073741824);\n \t\t\t\tcase 'm':\n-\t\t\t\t\treturn ($nSize * (float) 1048576);\n+\t\t\t\t\treturn ($nSize * (double) 1048576);\n \t\t\t\tcase 'k':\n-\t\t\t\t\treturn ($nSize * (float) 1024);\n+\t\t\t\t\treturn ($nSize * (double) 1024);\n \t\t\t\tcase 'b':\n \t\t\t\tdefault:\n \t\t\t\t\treturn $nSize;\n@@ -2377,7 +2373,7 @@\n \t\t\t\t) {\n \t\t\t\t\t$server_id = $info['host'].':'.$info['port'].':'.$info['sslmode'];\n \n-\t\t\t\t\tif (isset($logins[$server_id])) $srvs[$server_id] = array_merge($info, $logins[$server_id]);\n+\t\t\t\t\tif (isset($logins[$server_id])) $srvs[$server_id] = $logins[$server_id];\n \t\t\t\t\telse $srvs[$server_id] = $info;\n \n \t\t\t\t\t$srvs[$server_id]['id'] = $server_id;\n@@ -2404,9 +2400,10 @@\n \t\t\t\t}\n \t\t\t}\n \n-\t\t\tuasort($srvs, function($a, $b) {\n+\t\t\tfunction _cmp_desc($a, $b) {\n \t\t\t\treturn strcmp($a['desc'], $b['desc']);\n-\t\t\t});\n+\t\t\t}\n+\t\t\tuasort($srvs, '_cmp_desc');\n \n \t\t\tif ($recordset) {\n \t\t\t\tinclude_once('./classes/ArrayRecordSet.php');\n@@ -2428,32 +2425,23 @@\n \t\t\tif ($server_id === null && isset($_REQUEST['server']))\n \t\t\t\t$server_id = $_REQUEST['server'];\n \n-\t\t\t// Look for the server in the conf file\n-\t\t\t$server_info = null;\n+\t\t\t// Check for the server in the logged-in list\n+\t\t\tif (isset($_SESSION['webdbLogin'][$server_id]))\n+\t\t\t\treturn $_SESSION['webdbLogin'][$server_id];\n+\n+\t\t\t// Otherwise, look for it in the conf file\n \t\t\tforeach($conf['servers'] as $idx => $info) {\n \t\t\t\tif ($server_id == $info['host'].':'.$info['port'].':'.$info['sslmode']) {\n-\t\t\t\t\t$server_info = $info;\n-\t\t\t\t\tbreak;\n-\t\t\t\t}\n-\t\t\t}\n-\n-\t\t\tif (isset($_SESSION['webdbLogin'][$server_id])) {\n-\t\t\t\tif ($server_info === null)\n-\t\t\t\t\treturn $_SESSION['webdbLogin'][$server_id];\n-\n-\t\t\t\treturn array_merge($server_info, $_SESSION['webdbLogin'][$server_id]);\n-\t\t\t}\n+\t\t\t\t\t// Automatically use shared credentials if available\n+\t\t\t\t\tif (!isset($info['username']) && isset($_SESSION['sharedUsername'])) {\n+\t\t\t\t\t\t$info['username'] = $_SESSION['sharedUsername'];\n+\t\t\t\t\t\t$info['password'] = $_SESSION['sharedPassword'];\n+\t\t\t\t\t\t$_reload_browser = true;\n+\t\t\t\t\t\t$this->setServerInfo(null, $info, $server_id);\n+\t\t\t\t\t}\n \n-\t\t\tif ($server_info !== null) {\n-\t\t\t\t// Automatically use shared credentials if available\n-\t\t\t\tif (!isset($server_info['username']) && isset($_SESSION['sharedUsername'])) {\n-\t\t\t\t\t$server_info['username'] = $_SESSION['sharedUsername'];\n-\t\t\t\t\t$server_info['password'] = $_SESSION['sharedPassword'];\n-\t\t\t\t\t$_reload_browser = true;\n-\t\t\t\t\t$this->setServerInfo(null, $server_info, $server_id);\n+\t\t\t\t\treturn $info;\n \t\t\t\t}\n-\n-\t\t\t\treturn $server_info;\n \t\t\t}\n \n \t\t\tif ($server_id === null){\n@@ -2679,3 +2667,4 @@\n \t\t\treturn $fksprops;\n \t\t}\n \t}\n+?>\ndiff --git a/classes/Plugin.php b/classes/Plugin.php\nindex e5392fd..e3bea04 100644\n--- a/classes/Plugin.php\n+++ b/classes/Plugin.php\n@@ -1,15 +1,6 @@\n <?php\n abstract class Plugin {\n \n-\t/**\n-\t * Attributes\n-\t * Declared here so that plugins which do not redeclare them themselves do\n-\t * not rely on dynamic properties, which are deprecated as of PHP 8.2.\n-\t */\n-\tprotected $name;\n-\tprotected $lang;\n-\tprotected $conf;\n-\n \t/**\n \t * Constructor\n \t * Register the plugin's functions in hooks of PPA.\ndiff --git a/classes/database/Postgres.php b/classes/database/Postgres.php\nindex f550ab6..ccc78b3 100644\n--- a/classes/database/Postgres.php\n+++ b/classes/database/Postgres.php\n@@ -6983,43 +6983,9 @@ class Postgres extends ADODB_base {\n \t * Helper function that computes encrypted PostgreSQL passwords\n \t * @param $username The username\n \t * @param $password The password\n-\t * @return A password verifier suitable for ENCRYPTED PASSWORD\n \t */\n \tfunction _encryptPassword($username, $password) {\n-\t\treturn $this->_scramSha256Verifier($password);\n-\t}\n-\n-\t/**\n-\t * Builds a SCRAM-SHA-256 password verifier, as understood by PostgreSQL 10\n-\t * and later.  The layout is the one described in RFC 5803:\n-\t *\n-\t *   SCRAM-SHA-256$<iterations>:<salt>$<StoredKey>:<ServerKey>\n-\t *\n-\t * with the salt and the two keys base64 encoded.  Unlike the older md5\n-\t * scheme, the username is not part of the verifier, so renaming a role no\n-\t * longer invalidates its password.\n-\t *\n-\t * @param $password The plaintext password\n-\t * @param $iterations The PBKDF2 iteration count (PostgreSQL's default is 4096)\n-\t * @param $salt The raw salt, or null to generate 16 secure random bytes\n-\t * @return The verifier string\n-\t * @throws Exception if no cryptographically secure salt is available\n-\t */\n-\tfunction _scramSha256Verifier($password, $iterations = 4096, $salt = null) {\n-\t\tif ($salt === null) $salt = random_bytes(16);\n-\n-\t\t// A length of 0 asks for the full digest width, ie. 32 bytes for SHA-256\n-\t\t$saltedpassword = hash_pbkdf2('sha256', (string)$password, $salt, $iterations, 0, true);\n-\n-\t\t$clientkey = hash_hmac('sha256', 'Client Key', $saltedpassword, true);\n-\t\t$storedkey = hash('sha256', $clientkey, true);\n-\t\t$serverkey = hash_hmac('sha256', 'Server Key', $saltedpassword, true);\n-\n-\t\treturn sprintf('SCRAM-SHA-256$%d:%s$%s:%s',\n-\t\t\t$iterations,\n-\t\t\tbase64_encode($salt),\n-\t\t\tbase64_encode($storedkey),\n-\t\t\tbase64_encode($serverkey));\n+\t\treturn 'md5' . md5($password . $username);\n \t}\n \n \t// Tablespace functions\ndiff --git a/classes/database/Postgres96.php b/classes/database/Postgres96.php\nindex ceb5357..5375a73 100644\n--- a/classes/database/Postgres96.php\n+++ b/classes/database/Postgres96.php\n@@ -52,17 +52,6 @@ class Postgres96 extends Postgres10 {\n \t\treturn $this->selectSet( $sql );\n \t}\n \n-\t/**\n-\t * Helper function that computes encrypted PostgreSQL passwords\n-\t * SCRAM-SHA-256 was only introduced in PostgreSQL 10, so md5 is the best\n-\t * this and any earlier version can do.\n-\t * @param $username The username\n-\t * @param $password The password\n-\t * @return A password verifier suitable for ENCRYPTED PASSWORD\n-\t */\n-\tfunction _encryptPassword($username, $password) {\n-\t\treturn 'md5' . md5($password . $username);\n-\t}\n \n }\n ?>\ndiff --git a/composer.json b/composer.json\nindex de5b4f0..ca9733f 100644\n--- a/composer.json\n+++ b/composer.json\n@@ -4,7 +4,7 @@\n     \"type\": \"project\",\n     \"license\": \"GPL-2.0+\",\n     \"require\": {\n-        \"php\": \">=7.4\",\n+        \"php\": \">=7.1\",\n \t\t\"ext-pgsql\": \"*\",\n         \"ext-mbstring\": \"*\"\n     },\ndiff --git a/conf/config.inc.php-dist b/conf/config.inc.php-dist\nindex 14b9f75..016cd3d 100644\n--- a/conf/config.inc.php-dist\n+++ b/conf/config.inc.php-dist\n@@ -94,7 +94,8 @@\n \t// auto-start sessions, autostarted sessions will be destroyed and\n \t// restarted with SameSite on.  If this this solution is not acceptable for\n \t// your situation, you will need to either turn off auot-start sessions, or\n-\t// turn off secure sessions.\n+\t// turn off secure sessions.  Versions of PHP below 7.3 do not have access\n+\t// to this feature and will be vulnerable to CSRF attacks.\n \t$conf['extra_session_security'] = true;\n \n \t// AutoComplete uses AJAX interaction to list foreign key values\ndiff --git a/dataexport.php b/dataexport.php\nindex 25bee67..0d245f7 100644\n--- a/dataexport.php\n+++ b/dataexport.php\n@@ -16,8 +16,8 @@\n \t\t'xml' => 'xml'\n \t);\n \n-\t// Prevent timeouts on large exports\n-\tset_time_limit(0);\n+\t// Prevent timeouts on large exports (non-safe mode only)\n+\tif (!ini_get('safe_mode')) set_time_limit(0);\n \n \t// if (!isset($_REQUEST['table']) && !isset($_REQUEST['query']))\n \t// What must we do in this case? Maybe redirect to the homepage?\ndiff --git a/dataimport.php b/dataimport.php\nindex a3f0fae..ff81cd9 100644\n--- a/dataimport.php\n+++ b/dataimport.php\n@@ -6,8 +6,8 @@\n \t * $Id: dataimport.php,v 1.11 2007/01/22 16:33:01 soranzo Exp $\n \t */\n \n-\t// Prevent timeouts on large exports\n-\tset_time_limit(0);\n+\t// Prevent timeouts on large exports (non-safe mode only)\n+\tif (!ini_get('safe_mode')) set_time_limit(0);\n \n \t// Include application functions\n \tinclude_once('./libraries/lib.inc.php');\n@@ -214,14 +214,10 @@\n \t\t\t\t\t// Set delimiter to tabs or commas\n \t\t\t\t\tif ($_REQUEST['format'] == 'csv') $csv_delimiter = ',';\n \t\t\t\t\telse $csv_delimiter = \"\\t\";\n-\t\t\t\t\t// Pass the enclosure and escape characters explicitly: relying on\n-\t\t\t\t\t// the defaults is deprecated as of PHP 8.4, and an empty escape\n-\t\t\t\t\t// character matches the RFC 4180 style CSV that dataexport.php\n-\t\t\t\t\t// writes, where quotes are doubled and backslashes are literal.\n \t\t\t\t\t// Get first line of field names\n-\t\t\t\t\t$fields = fgetcsv($fd, $csv_max_line, $csv_delimiter, '\"', '');\n+\t\t\t\t\t$fields = fgetcsv($fd, $csv_max_line, $csv_delimiter);\n \t\t\t\t\t$row = 2; //We start on the line AFTER the field names\n-\t\t\t\t\twhile ($line = fgetcsv($fd, $csv_max_line, $csv_delimiter, '\"', '')) {\n+\t\t\t\t\twhile ($line = fgetcsv($fd, $csv_max_line, $csv_delimiter)) {\n \t\t\t\t\t\t// Build value map\n \t\t\t\t\t\t$t_fields = array();\n \t\t\t\t\t\t$vars = array();\n@@ -268,6 +264,8 @@\n \t\t\t\t\t\t$line = fgets($fd, 4096);\n \t\t\t\t\t\txml_parse($parser, $line);\n \t\t\t\t\t}\n+\t\t\t\t\t\n+\t\t\t\t\txml_parser_free($parser);\n \t\t\t\t\tbreak;\n \t\t\t\tdefault:\n \t\t\t\t\t// Unknown type\ndiff --git a/dbexport.php b/dbexport.php\nindex a9434fb..5b35bc2 100644\n--- a/dbexport.php\n+++ b/dbexport.php\n@@ -6,8 +6,8 @@\n \t * $Id: dbexport.php,v 1.22 2007/03/25 03:15:09 xzilla Exp $\n \t */\n \n-\t// Prevent timeouts on large exports\n-\tset_time_limit(0);\n+\t// Prevent timeouts on large exports (non-safe mode only)\n+\tif (!ini_get('safe_mode')) set_time_limit(0);\n \n \t// Include application functions\n \t$_no_output = true;\ndiff --git a/debian/changelog b/debian/changelog\nindex c73d680..b106d24 100644\n--- a/debian/changelog\n+++ b/debian/changelog\n@@ -1,27 +1,3 @@\n-phppgadmin (7.14.8+dfsg-1) unstable; urgency=medium\n-\n-  * Team upload.\n-  * New upstream version 7.14.8+dfsg\n-  * d/upstream/metadata\n-    - Update with new git repository\n-    - Add Archive: GitHub\n-  * d/control:\n-    - Update Standards-Version to 4.7.4; in version 4.7.3, remove the\n-      Priority: optional field from d/control\n-  * d/copyritght:\n-    - Update year of the upstream and add myself\n-    - Remove tests/selenium, dropped by upstream\n-    - Fix Lintian report old-fsf-address-in-copyright-file\n-    - Fix Lintian report unused-license-paragraph-in-dep5-copyright apache2\n-    - Fix Lintian report unused-license-paragraph-in-dep5-copyright bsdgoogle\n-    - Fix Lintian report unused-license-paragraph-in-dep5-copyright lgpl-2.1\n-    - Fix Lintian report unused-license-paragraph-in-dep5-copyright mit\n-  * d/patches:\n-    - Refresh the localhost.patch and change header with DEP-3\n-    - Remove hide-selenium-tests; the original project removed from intro.php\n-\n- -- Leandro Cunha <leandrocunhaemail@gmail.com>  Mon, 31 Aug 2026 23:07:30 -0300\n-\n phppgadmin (7.14.7+dfsg-1) unstable; urgency=high\n \n   * Team upload.\ndiff --git a/debian/control b/debian/control\nindex be6daf4..ed520a1 100644\n--- a/debian/control\n+++ b/debian/control\n@@ -2,8 +2,9 @@ Source: phppgadmin\n Maintainer: Debian PostgreSQL Maintainers <team+postgresql@tracker.debian.org>\n Uploaders: Jean-Michel Vourgère <nirgal@debian.org>\n Section: web\n+Priority: optional\n Build-Depends: debhelper-compat (= 13), dh-apache2, pkg-php-tools\n-Standards-Version: 4.7.4\n+Standards-Version: 4.6.2\n Homepage: https://github.com/ReimuHakurei/phpPgAdmin\n Vcs-Browser: https://salsa.debian.org/postgresql/phppgadmin\n Vcs-Git: https://salsa.debian.org/postgresql/phppgadmin.git\ndiff --git a/debian/copyright b/debian/copyright\nindex 03c2ff1..91dbe97 100644\n--- a/debian/copyright\n+++ b/debian/copyright\n@@ -4,10 +4,13 @@ Upstream-Contact: ReimuHakurei <alex@alexingram.net>\n Source: https://github.com/ReimuHakurei/phpPgAdmin\n Files-Excluded: libraries/js\n                 libraries/adodb\n+                tests/selenium/selenium-lib/core/lib/cssQuery/cssQuery-p.js\n+                tests/selenium/selenium-lib/readyState.xpi\n+                tests/simpletests/data/CFunction\n \n Files: *\n Copyright: 2002-2019 The phpPgAdmin Project\n-\t       2022-2026 ReimuHakurei <alex@alexingram.net>\n+\t   2022-2023 ReimuHakurei <alex@alexingram.net>\n License: GPL-2\n Comment: See CREDITS file for list of authors\n \n@@ -19,7 +22,6 @@ Copyright: 2003-06 Isaac Clerencia <isaac@sindominio.net>\n            2010 Jari Aalto <jari.aalto@cante.net>\n            2011-18 Christoph Berg <myon@debian.org>\n            2015-19 Jean-Michel Vourgère <nirgal@debian.com>\n-           2023-2026 Leandro Cunha <leandrocunha016@gmail.com>\n License: GPL-2\n \n Files: libraries/highlight.php\n@@ -30,6 +32,46 @@ Files: xloadtree/*\n Copyright: 1999 - 2005 Erik Arvidsson & Emil A Eklund\n License: XLOADTREE\n \n+Files: tests/selenium/selenium-lib/*\n+Copyright: 2004-2009 ThoughtWorks, Inc\n+License: Apache2\n+Comment: From selenium version 1.0.3, was merged on 2010-03-12.\n+\n+Files: tests/selenium/selenium-lib/core/lib/cssQuery/*\n+Copyright: 2004-2005, Dean Edwards (http://dean.edwards.name/)\n+License: LGPL-2.1\n+\n+Files: tests/selenium/selenium-lib/core/lib/snapsie.js\n+Copyright: 2007-2008 Haw-Bin Chai <https://sourceforge.net/u/gyrm>\n+License: Apache2 or GPL-2\n+Comment: http://snapsie.sourceforge.net/\n+\n+Files: tests/selenium/selenium-lib/core/lib/prototype.js\n+Copyright: 2005 Sam Stephenson <sam@conio.net>\n+License: MIT\n+\n+Files: tests/selenium/selenium-lib/core/lib/scriptaculous/*\n+Copyright: 2005-2008 Thomas Fuchs <thomas@script.aculo.us>\n+           2005-2008 Marty Haught <mghaught@gmail.com>\n+           2005 Ivan Krstic (http://blogs.law.harvard.edu/ivan)\n+           2005 Jon Tirsen (http://www.tirsen.com)\n+           2005 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)\n+           2005 Michael Schuerig (http://www.schuerig.de/michael/)\n+License: MIT\n+\n+Files: tests/selenium/selenium-lib/core/xpath/*\n+Copyright: 2007 Cybozu Labs, Inc.\n+License: MIT\n+Comment: http://coderepos.org/share/wiki/JavaScript-XPath\n+\n+Files: tests/selenium/selenium-lib/core/xpath/dom.js\n+       tests/selenium/selenium-lib/core/xpath/util.js\n+       tests/selenium/selenium-lib/core/xpath/xmltoken.js\n+       tests/selenium/selenium-lib/core/xpath/xpath.js\n+Copyright: 2005 Google Inc.\n+License: BSDGOOGLE\n+Comment: http://goog-ajaxslt.sourceforge.net/\n+\n License: XLOADTREE\n  This software is provided \"as is\", without warranty of any kind, express or\n  implied, including  but not limited  to the warranties of  merchantability,\n@@ -84,6 +126,56 @@ License: HIGHLIGHT\n  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n \n+License: Apache2\n+ Licensed under the Apache License, Version 2.0 (the \"License\");\n+ you may not use these files except in compliance with the License.\n+ .\n+ Unless required by applicable law or agreed to in writing, software\n+ distributed under the License is distributed on an \"AS IS\" BASIS,\n+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ See the License for the specific language governing permissions and\n+ limitations under the License.\n+ .\n+ On Debian systems, the text of the Apache License version 2\n+ can be found in `/usr/share/common-licenses/Apache-2.0'.\n+\n+License: MIT\n+ Permission is hereby granted, free of charge, to any person obtaining a copy of\n+ this software and associated documentation files (the \"Software\"), to deal in\n+ the Software without restriction, including without limitation the rights to\n+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\n+ of the Software, and to permit persons to whom the Software is furnished to do\n+ so, subject to the following conditions:\n+ .\n+ The above copyright notice and this permission notice shall be included in all\n+ copies or substantial portions of the Software.\n+ .\n+ THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n+ SOFTWARE.\n+\n+License: LGPL-2.1\n+ This library is free software; you can redistribute it and/or\n+ modify it under the terms of the GNU Lesser General Public\n+ License as published by the Free Software Foundation; either\n+ version 2.1 of the License, or (at your option) any later version.\n+ .\n+ This library is distributed in the hope that it will be useful,\n+ but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+ Lesser General Public License for more details.\n+ .\n+ You should have received a copy of the GNU Lesser General Public\n+ License along with this library; if not, write to the Free Software\n+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\n+ .\n+ On Debian systems, the text of the GNU Lesser General Public License version\n+ 2.1 can be found in `/usr/share/common-licenses/LGPL-2.1'.\n+\n License: GPL-2\n  This program is free software; you can redistribute it and/or modify\n  it under the terms of the GNU General Public License as published by\n@@ -94,8 +186,38 @@ License: GPL-2\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  GNU General Public License for more details.\n  .\n- You should have received a copy of the GNU General Public License\n- along with this program.  If not, see https://www.gnu.org/licenses/.\n+ You should have received a copy of the GNU General Public License along\n+ with this program; if not, write to the Free Software Foundation, Inc.,\n+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n  .\n  On Debian systems, the text of the GNU General Public License version 2\n  can be found in `/usr/share/common-licenses/GPL-2'.\n+\n+License: BSDGOOGLE\n+ Redistribution and use in source and binary forms, with or without\n+ Modification, are permitted provided that the following conditions are\n+ Met:\n+ .        \n+  * Redistributions of source code must retain the above copyright\n+    notice, this list of conditions and the following disclaimer.\n+ .\n+  * Redistributions in binary form must reproduce the above copyright\n+    notice, this list of conditions and the following disclaimer in the\n+    documentation and/or other materials provided with the\n+    distribution.\n+ .\n+  * Neither the name of Google Inc. nor the names of its contributors\n+    may be used to endorse or promote products derived from this\n+    software without specific prior written permission.\n+ .\n+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+Comment: http://goog-ajaxslt.sourceforge.net/COPYING\ndiff --git a/debian/patches/hide-selenium-tests b/debian/patches/hide-selenium-tests\nnew file mode 100644\nindex 0000000..8e38cb2\n--- /dev/null\n+++ b/debian/patches/hide-selenium-tests\n@@ -0,0 +1,17 @@\n+Description: Remove the link to the selenium tests\n+ These are not released but in sources, same as upstream.\n+Author: Jean-Michel Vourgère <nirgal@debian.org>\n+Origin: https://github.com/phppgadmin/project/blob/master/release.sh\n+Last-Update: 2019-12-27\n+Forwarded: not-needed\n+\n+--- phppgadmin-7.12.1+dfsg.orig/intro.php\n++++ phppgadmin-7.12.1+dfsg/intro.php\n+@@ -62,7 +62,6 @@\n+ \t<li><a href=\"<?php echo $lang['strpgsqlhome_url'] ?>\"><?php echo $lang['strpgsqlhome'] ?></a></li>\n+ \t<li><a href=\"http://sourceforge.net/tracker/?group_id=37132&amp;atid=418980\"><?php echo $lang['strreportbug'] ?></a></li>\n+ \t<li><a href=\"<?php echo $lang['strviewfaq_url'] ?>\"><?php echo $lang['strviewfaq'] ?></a></li>\n+-\t<li><a target=\"_top\" href=\"tests/selenium/selenium-lib/core/TestRunner.html?test=..%2F..%2FTestSuite.php&resultsUrl=..%2FpostResults\">Selenium tests</a></li>\n+ </ul>\n+ \n+ <?php\ndiff --git a/debian/patches/localhost.patch b/debian/patches/localhost.patch\nindex 58db87a..9e78653 100644\n--- a/debian/patches/localhost.patch\n+++ b/debian/patches/localhost.patch\n@@ -1,10 +1,6 @@\n-Description: Go through localhost instead of Unix-domain socket\n-  Because localhost allows password access by default on Debian;\n-  Unix-domain socket uses ident, which doesn't work through the web\n-  server.\n-Forwarded: not-needed\n-Author: Christoph Berg <myon@debian.org>\n-Last-Update: 2026-03-29\n+Go through localhost instead of Unix-domain socket because localhost allows\n+password access by default on Debian; Unix-domain socket uses ident, which\n+doesn't work through the web server.\n \n Index: phppgadmin/conf/config.inc.php-dist\n ===================================================================\ndiff --git a/debian/patches/series b/debian/patches/series\nindex 37be157..e4fa2ff 100644\n--- a/debian/patches/series\n+++ b/debian/patches/series\n@@ -1 +1,2 @@\n localhost.patch\n+hide-selenium-tests\ndiff --git a/debian/upstream/metadata b/debian/upstream/metadata\nindex 16dbf35..fa74031 100644\n--- a/debian/upstream/metadata\n+++ b/debian/upstream/metadata\n@@ -1,6 +1,6 @@\n ---\n-Archive: GitHub\n-Bug-Database: https://github.com/ReimuHakurei/phpPgAdmin/issues\n-Bug-Submit: https://github.com/ReimuHakurei/phpPgAdmin/issues/new\n-Repository-Browse: hhttps://github.com/ReimuHakurei/phpPgAdmin\n-Repository: https://github.com/ReimuHakurei/phpPgAdmin.git\n+Bug-Database: https://github.com/phppgadmin/phppgadmin/issues\n+Bug-Submit: https://github.com/phppgadmin/phppgadmin/issues/new\n+Changelog: https://github.com/Steveorevo/phppgadmin/blob/master/HISTORY\n+Repository: https://github.com/phppgadmin/phppgadmin.git\n+Repository-Browse: https://github.com/phppgadmin/phppgadmin\ndiff --git a/display.php b/display.php\nindex ad592bd..4666449 100644\n--- a/display.php\n+++ b/display.php\n@@ -11,8 +11,8 @@\n \t * $Id: display.php,v 1.68 2008/04/14 12:44:27 ioguix Exp $\n \t */\n \n-\t// Prevent timeouts on large exports\n-\tset_time_limit(0);\n+\t// Prevent timeouts on large exports (non-safe mode only)\n+\tif (!ini_get('safe_mode')) set_time_limit(0);\n \n \t// Include application functions\n \tinclude_once('./libraries/lib.inc.php');\n@@ -467,10 +467,7 @@\n \t\t\t}\n \t\t} else {\n \t\t\t$misc->printTitle($lang['strqueryresults']);\n-\t\t\t/* We come either from sql.php, which has already set $_SESSION['sqlquery'],\n-\t\t\t * or from the query form below, which posts back an edited query. */\n-\t\t\tif (isset($_POST['query']))\n-\t\t\t\t$_SESSION['sqlquery'] = $_POST['query'];\n+\t\t\t/*we comes from sql.php, $_SESSION['sqlquery'] has been set there */\n \t\t\t$type = 'QUERY';\n \t\t}\n \n@@ -508,21 +505,6 @@\n \t\t\t$conf['max_rows'], $max_pages,\n \t\t\tisset($fkey_information['pkey']) ? $fkey_information['pkey'] : null);\n \n-\t\t/* The requested page can be past the end of the result set, eg. when a new\n-\t\t * query is submitted while browsing a later page of the previous one.  Fall\n-\t\t * back to the last page instead of reporting no data at all. */\n-\t\tif ($rs === -3 && $max_pages >= 1\n-\t\t\t\t&& is_numeric($_REQUEST['page']) && $_REQUEST['page'] > $max_pages) {\n-\n-\t\t\t$_REQUEST['page'] = (int)$max_pages;\n-\t\t\t$rs = $data->browseQuery($type,\n-\t\t\t\tisset($object) ? $object : null,\n-\t\t\t\tisset($_SESSION['sqlquery']) ? $_SESSION['sqlquery'] : null,\n-\t\t\t\t$_REQUEST['sortkey'], $_REQUEST['sortdir'], $_REQUEST['page'],\n-\t\t\t\t$conf['max_rows'], $max_pages,\n-\t\t\t\tisset($fkey_information['pkey']) ? $fkey_information['pkey'] : null);\n-\t\t}\n-\n \t\t// Build strings for GETs in array\n \t\t$_gets = array(\n \t\t\t'server' => $_REQUEST['server'],\n@@ -543,23 +525,10 @@\n \t\t$_gets['strings'] = $_REQUEST['strings'];\n \n \t\tif ($save_history && is_object($rs) && ($type == 'QUERY')) //{\n-\t\t\t$misc->saveScriptHistory($_SESSION['sqlquery']);\n-\n-\t\t/* The query form must carry the current context (server, database, schema,\n-\t\t * ...) in its own fields: display.php can be reached through a POST with an\n-\t\t * empty query string, eg. right after saving an edited row. */\n-\t\techo '<form method=\"post\" action=\"display.php\">';\n-\t\tforeach ($_gets as $_k => $_v) {\n-\t\t\tif ($_k == 'query') continue;\n-\t\t\techo \"<input type=\\\"hidden\\\" name=\\\"\", htmlspecialchars($_k), \"\\\" value=\\\"\", htmlspecialchars($_v), \"\\\" />\\n\";\n-\t\t}\n-\t\techo \"<input type=\\\"hidden\\\" name=\\\"page\\\" value=\\\"\", htmlspecialchars($_REQUEST['page']), \"\\\" />\\n\";\n-\t\techo '<textarea width=\"90%\" name=\"query\" rows=\"5\" cols=\"100\" resizable=\"true\">';\n-\t\t/* Show the query that was actually executed.  For SELECT and QUERY types that\n-\t\t * is the session copy, since a GET link may only carry a truncated one. */\n-\t\tif ($type != 'TABLE' && isset($_SESSION['sqlquery'])) {\n-\t\t\t$query = $_SESSION['sqlquery'];\n-\t\t} elseif (isset($_REQUEST['query'])) {\n+\t\t\t$misc->saveScriptHistory($_REQUEST['query']);\n+\n+\t\techo '<form method=\"POST\" action=\"'.$_SERVER['REQUEST_URI'].'\"><textarea width=\"90%\" name=\"query\" rows=\"5\" cols=\"100\" resizable=\"true\">';\n+\t\tif (isset($_REQUEST['query'])) {\n \t\t\t$query = $_REQUEST['query'];\n \t\t} else {\n \t\t\t$query = \"SELECT * FROM \".$data->escapeIdentifier($_REQUEST['schema']);\ndiff --git a/intro.php b/intro.php\nindex 4a38a64..7f5c039 100644\n--- a/intro.php\n+++ b/intro.php\n@@ -58,9 +58,11 @@\n <p><?php echo $lang['strintro'] ?></p>\n \n <ul class=\"intro\">\n-\t<li><a href=\"https://github.com/ReimuHakurei/phpPgAdmin\"><?php echo $lang['strppahome'] ?></a></li>\n+\t<li><a href=\"http://phppgadmin.sourceforge.net/\"><?php echo $lang['strppahome'] ?></a></li>\n \t<li><a href=\"<?php echo $lang['strpgsqlhome_url'] ?>\"><?php echo $lang['strpgsqlhome'] ?></a></li>\n-\t<li><a href=\"https://github.com/ReimuHakurei/phpPgAdmin/issues\"><?php echo $lang['strreportbug'] ?></a></li>\n+\t<li><a href=\"http://sourceforge.net/tracker/?group_id=37132&amp;atid=418980\"><?php echo $lang['strreportbug'] ?></a></li>\n+\t<li><a href=\"<?php echo $lang['strviewfaq_url'] ?>\"><?php echo $lang['strviewfaq'] ?></a></li>\n+\t<li><a target=\"_top\" href=\"tests/selenium/selenium-lib/core/TestRunner.html?test=..%2F..%2FTestSuite.php&resultsUrl=..%2FpostResults\">Selenium tests</a></li>\n </ul>\n \n <?php\ndiff --git a/libraries/highlight.php b/libraries/highlight.php\nindex 6c4d578..21fc2e0 100644\n--- a/libraries/highlight.php\n+++ b/libraries/highlight.php\n@@ -236,7 +236,7 @@ function syntax_highlight_helper($text, $language)\n     \"try\",          \"typeof\",       \"uint\",     \"ulong\",        \"unchecked\",\n     \"unsafe\",       \"ushort\",       \"using\",    \"virtual\",      \"volatile\",\n     \"void\",         \"while\"),\n-\n+    \n     \"Ruby\" => array(\n     \"alias\",        \"and\",          \"begin\",    \"break\",        \"case\",\n     /*class*/       \"def\",          \"defined\",  \"do\",           \"else\",\n@@ -275,12 +275,12 @@ function syntax_highlight_helper($text, $language)\n         ),\n \n     \"PL/I\" => array(\n-    \"A\",            \"ABS\",            \"ACOS\",        \"%ACTIVATE\",    \"ACTUALCOUNT\",\n-    \"ADD\",            \"ADDR\",            \"ADDREL\",    \"ALIGNED\",        \"ALLOCATE\",\n-    \"ALLOC\",        \"ALLOCATION\",    \"ALLOCN\",    \"ANY\",            \"ANYCONDITION\",\n-    \"APPEND\",        \"AREA\",            \"ASIN\",        \"ATAN\",            \"ATAND\",\n-    \"ATANH\",        \"AUTOMATIC\",    \"AUTO\",        \"B\",            \"B1\",\n-    \"B2\",            \"B3\",            \"B4\",        \"BACKUP_DATE\",    \"BASED\",\n+    \"A\",            \"ABS\",            \"ACOS\",        \"%ACTIVATE\",    \"ACTUALCOUNT\", \n+    \"ADD\",            \"ADDR\",            \"ADDREL\",    \"ALIGNED\",        \"ALLOCATE\", \n+    \"ALLOC\",        \"ALLOCATION\",    \"ALLOCN\",    \"ANY\",            \"ANYCONDITION\", \n+    \"APPEND\",        \"AREA\",            \"ASIN\",        \"ATAN\",            \"ATAND\", \n+    \"ATANH\",        \"AUTOMATIC\",    \"AUTO\",        \"B\",            \"B1\", \n+    \"B2\",            \"B3\",            \"B4\",        \"BACKUP_DATE\",    \"BASED\", \n     \"BATCH\",        \"BEGIN\",        \"BINARY\",    \"BIN\",            \"BIT\",\n     \"BLOCK_BOUNDARY_FORMAT\",        \"BLOCK_IO\",    \"BLOCK_SIZE\",    \"BOOL\",\n     \"BUCKET_SIZE\",    \"BUILTIN\",        \"BY\",        \"BYTE\",            \"BYTESIZE\",\n@@ -355,7 +355,7 @@ function syntax_highlight_helper($text, $language)\n     \"UFL\",            \"UNION\",        \"UNSPEC\",    \"UNTIL\",        \"UPDATE\",\n     \"USER_OPEN\",    \"VALID\",        \"VALUE\",    \"VAL\",            \"VARIABLE\",\n     \"VARIANT\",        \"VARYING\",        \"VAR\",        \"VAXCONDITION\",    \"VERIFY\",\n-    \"WAIT_FOR_RECORD\",                \"%WARN\",    \"WARN\",            \"WHEN\",\n+    \"WAIT_FOR_RECORD\",                \"%WARN\",    \"WARN\",            \"WHEN\",    \n     \"WHILE\",        \"WORLD_PROTECTION\",            \"WRITE\",        \"WRITE_BEHIND\",\n     \"WRITE_CHECK\",    \"X\",            \"ZERODIVIDE\"),\n \n@@ -571,10 +571,10 @@ function lparen_putback_rtrim1($span, $lang, $ch)\n     return rtrim1('(' . $span, $lang, $ch);\n }\n \n-function prepend_xml_opentag($span, $lang, $ch)\n-{\n+function prepend_xml_opentag($span, $lang, $ch) \n+{                                               \n     return '<span class=\"xml_tag\">&lt;' . $span;\n-}\n+}                                               \n \n function proc_void($span, $lang, $ch)\n {\n@@ -591,31 +591,31 @@ function syntax_highlight($text, $language)\n {\n     if ($language == \"Plain Text\") return $text;\n \n-    define(\"normal_text\",   1);\n-    define(\"dq_literal\",    2);\n-    define(\"dq_escape\",     3);\n-    define(\"sq_literal\",    4);\n-    define(\"sq_escape\",     5);\n-    define(\"slash_begin\",   6);\n-    define(\"star_comment\",  7);\n-    define(\"star_end\",      8);\n-    define(\"line_comment\",  9);\n-    define(\"html_entity\",  10);\n-    define(\"lc_escape\",    11);\n-    define(\"block_comment\",12);\n-    define(\"paren_begin\",  13);\n-    define(\"dash_begin\",   14);\n-    define(\"bt_literal\",   15);\n-    define(\"bt_escape\",    16);\n-    define(\"xml_tag_begin\",17);\n-    define(\"xml_tag\",      18);\n-    define(\"xml_pi\",       19);\n-    define(\"sch_normal\",   20);\n-    define(\"sch_stresc\",   21);\n-    define(\"sch_idexpr\",   22);\n-    define(\"sch_numlit\",   23);\n-    define(\"sch_chrlit\",   24);\n-    define(\"sch_strlit\",   25);\n+    define(\"normal_text\",   1, true);\n+    define(\"dq_literal\",    2, true);\n+    define(\"dq_escape\",     3, true);\n+    define(\"sq_literal\",    4, true);\n+    define(\"sq_escape\",     5, true);\n+    define(\"slash_begin\",   6, true);\n+    define(\"star_comment\",  7, true);\n+    define(\"star_end\",      8, true);\n+    define(\"line_comment\",  9, true);\n+    define(\"html_entity\",  10, true);\n+    define(\"lc_escape\",    11, true);\n+    define(\"block_comment\",12, true);\n+    define(\"paren_begin\",  13, true);\n+    define(\"dash_begin\",   14, true);\n+    define(\"bt_literal\",   15, true);\n+    define(\"bt_escape\",    16, true);\n+    define(\"xml_tag_begin\",17, true);\n+    define(\"xml_tag\",      18, true);\n+    define(\"xml_pi\",       19, true);\n+    define(\"sch_normal\",   20, true);\n+    define(\"sch_stresc\",    21, true);\n+    define(\"sch_idexpr\",   22, true);\n+    define(\"sch_numlit\",   23, true);\n+    define(\"sch_chrlit\",   24, true);\n+    define(\"sch_strlit\",   25, true);\n \n     $initial_state[\"Scheme\"] = sch_normal;\n \n@@ -820,32 +820,32 @@ function syntax_highlight($text, $language)\n     $sql[lc_escape][\"\\r\"]      = lc_escape;\n     $sql[lc_escape][0]         = line_comment;\n \n-    $xml[normal_text][\"<\"]     = xml_tag_begin;\n-    $xml[normal_text][\"&\"]     = html_entity;\n-    $xml[normal_text][0]       = normal_text;\n-    $xml[html_entity][\";\"]     = normal_text;\n+    $xml[normal_text][\"<\"]     = xml_tag_begin;               \n+    $xml[normal_text][\"&\"]     = html_entity;                 \n+    $xml[normal_text][0]       = normal_text;                 \n+    $xml[html_entity][\";\"]     = normal_text;                 \n     $xml[html_entity][\"<\"]     = xml_tag_begin;\n-    $xml[html_entity][0]       = html_entity;\n-    $xml[xml_tag_begin][\"?\"]   = xml_pi;\n-    $xml[xml_tag_begin][\"!\"]   = line_comment;\n-    $xml[xml_tag_begin][0]     = xml_tag;\n-    $xml[xml_tag][\">\"]         = normal_text;\n-    $xml[xml_tag][\"\\\"\"]        = dq_literal;\n-    $xml[xml_tag][\"'\"]         = sq_literal;\n-    $xml[xml_tag][0]           = xml_tag;\n-    $xml[xml_pi][\">\"]          = normal_text;\n-    $xml[xml_pi][0]            = xml_tag;\n-    $xml[line_comment][\">\"]    = normal_text;\n-    $xml[line_comment][0]      = line_comment;\n-    $xml[dq_literal][\"\\\"\"]     = xml_tag;\n-    $xml[dq_literal][\"&\"]      = dq_escape;\n-    $xml[dq_literal][0]        = dq_literal;\n-    $xml[sq_literal][\"'\"]      = xml_tag;\n-    $xml[sq_literal][\"&\"]      = sq_escape;\n-    $xml[sq_literal][0]        = sq_literal;\n-    $xml[dq_escape][\";\"]       = dq_literal;\n-    $xml[dq_escape][0]         = dq_escape;\n-\n+    $xml[html_entity][0]       = html_entity;                 \n+    $xml[xml_tag_begin][\"?\"]   = xml_pi;                      \n+    $xml[xml_tag_begin][\"!\"]   = line_comment;                \n+    $xml[xml_tag_begin][0]     = xml_tag;                     \n+    $xml[xml_tag][\">\"]         = normal_text;                 \n+    $xml[xml_tag][\"\\\"\"]        = dq_literal;           \n+    $xml[xml_tag][\"'\"]         = sq_literal;                   \n+    $xml[xml_tag][0]           = xml_tag;                     \n+    $xml[xml_pi][\">\"]          = normal_text;                 \n+    $xml[xml_pi][0]            = xml_tag;                     \n+    $xml[line_comment][\">\"]    = normal_text;                 \n+    $xml[line_comment][0]      = line_comment;                \n+    $xml[dq_literal][\"\\\"\"]     = xml_tag;                     \n+    $xml[dq_literal][\"&\"]      = dq_escape;                   \n+    $xml[dq_literal][0]        = dq_literal;                  \n+    $xml[sq_literal][\"'\"]      = xml_tag;                     \n+    $xml[sq_literal][\"&\"]      = sq_escape;                   \n+    $xml[sq_literal][0]        = sq_literal;                  \n+    $xml[dq_escape][\";\"]       = dq_literal;                  \n+    $xml[dq_escape][0]         = dq_escape;                   \n+    \n     //\n     // Main state transition table\n     //\n@@ -1036,15 +1036,15 @@ function syntax_highlight($text, $language)\n     $edges[\"XML\"][xml_tag . \",\" . normal_text] = '&gt;</span>';\n     $edges[\"XML\"][xml_tag_begin . \",\" . xml_pi] = '<span class=\"xml_pi\">&lt;?';\n     $edges[\"XML\"][xml_tag_begin . \",\" . line_comment] = '<span class=\"comment\">&lt;!';\n-    $edges[\"XML\"][line_comment . \",\" . normal_text] = '&gt;</span>';\n+    $edges[\"XML\"][line_comment . \",\" . normal_text] = '&gt;</span>'; \n     $edges[\"XML\"][xml_tag .\",\". dq_literal]   = '<span class=\"literal\">\"';\n     $edges[\"XML\"][dq_literal . \",\" . xml_tag] = '\"</span>';\n     $edges[\"XML\"][dq_literal . \",\" . dq_escape] = '<span class=\"html_entity\">&amp;';\n     $edges[\"XML\"][dq_escape . \",\" . dq_literal] = '</span>';\n     $edges[\"XML\"][xml_tag .\",\". sq_literal]   = '<span class=\"literal\">\\'';\n     $edges[\"XML\"][sq_literal . \",\" . xml_tag] = '\\'</span>';\n-    $edges[\"XML\"][sq_literal . \",\" . sq_escape] = '<span class=\"html_entity\">&amp;';\n-    $edges[\"XML\"][sq_escape . \",\" . sq_literal] = '</span>';\n+    $edges[\"XML\"][sq_literal . \",\" . sq_escape] = '<span class=\"html_entity\">&amp;'; \n+    $edges[\"XML\"][sq_escape . \",\" . sq_literal] = '</span>'; \n \n     //\n     // The State Machine\n@@ -1107,6 +1107,8 @@ function syntax_highlight($text, $language)\n             array_key_exists(\"$state,\" . normal_text, $edges[$language]))\n             $output .= $edges[$language][\"$state,\" . normal_text];\n     }\n-\n+                \n     return $output;\n }\n+\n+?>\ndiff --git a/libraries/lib.inc.php b/libraries/lib.inc.php\nindex 1be42bb..74b713b 100644\n--- a/libraries/lib.inc.php\n+++ b/libraries/lib.inc.php\n@@ -16,12 +16,12 @@\n \t$appName = 'phpPgAdmin';\n \n \t// Application version\n-\t$appVersion = '7.14.8-mod';\n+\t$appVersion = '7.14.7-mod';\n \n \t// PostgreSQL and PHP minimum version\n \tglobal $postgresqlMinVer;\n \t$postgresqlMinVer = '7.4';\n-\t$phpMinVer = '7.4';\n+\t$phpMinVer = '7.2';\n \n \t// Check the version of PHP\n \tif (version_compare(phpversion(), $phpMinVer, '<'))\n@@ -55,6 +55,10 @@\n \t// is on (exit if we fail); otherwise, just start the session\n \t$our_session_name = 'PPA_ID';\n \tif (($conf['extra_session_security'] ?? true) === true) {\n+\t\tif (version_compare(phpversion(), '7.3', '<')) {\n+\t\t\texit('phpPgAdmin cannot be fully secured while running under PHP versions before 7.3. Please upgrade PHP if possible. If you cannot upgrade, and you\\'re willing to assume the risk of CSRF attacks, you can change the value of \"extra_session_security\" to false in your config.inc.php file.');\n+\t\t}\n+\n \t\tif (ini_get('session.auto_start')) {\n \t\t\t// If session.auto_start is on, and the session doesn't have\n \t\t\t// session.cookie_samesite set, destroy and re-create the session\ndiff --git a/sql.php b/sql.php\nindex 592474a..b2ad46d 100644\n--- a/sql.php\n+++ b/sql.php\n@@ -11,8 +11,8 @@\n \n \t global $lang;\n \n-\t// Prevent timeouts on large exports\n-\tset_time_limit(0);\n+\t// Prevent timeouts on large exports (non-safe mode only)\n+\tif (!ini_get('safe_mode')) set_time_limit(0);\n \n \t// Include application functions\n \tinclude_once('./libraries/lib.inc.php');\n@@ -32,10 +32,10 @@\n \t\t\tswitch (pg_result_status($rs)) {\n \t\t\t\tcase PGSQL_TUPLES_OK:\n \t\t\t\t\t// If rows returned, then display the results\n-\t\t\t\t\t$num_fields = pg_num_fields($rs);\n+\t\t\t\t\t$num_fields = pg_numfields($rs);\n \t\t\t\t\techo \"<p><table>\\n<tr>\";\n \t\t\t\t\tfor ($k = 0; $k < $num_fields; $k++) {\n-\t\t\t\t\t\techo \"<th class=\\\"data\\\">\", $misc->printVal(pg_field_name($rs, $k)), \"</th>\";\n+\t\t\t\t\t\techo \"<th class=\\\"data\\\">\", $misc->printVal(pg_fieldname($rs, $k)), \"</th>\";\n \t\t\t\t\t}\n \t\t\n \t\t\t\t\t$i = 0;\n@@ -44,7 +44,7 @@\n \t\t\t\t\t\t$id = (($i % 2) == 0 ? '1' : '2');\n \t\t\t\t\t\techo \"<tr class=\\\"data{$id}\\\">\\n\";\n \t\t\t\t\t\tforeach ($row as $k => $v) {\n-\t\t\t\t\t\t\techo \"<td style=\\\"white-space:nowrap;\\\">\", $misc->printVal($v, pg_field_type($rs, $k), array('null' => true)), \"</td>\";\n+\t\t\t\t\t\t\techo \"<td style=\\\"white-space:nowrap;\\\">\", $misc->printVal($v, pg_fieldtype($rs, $k), array('null' => true)), \"</td>\";\n \t\t\t\t\t\t}\t\t\t\t\t\t\t\n \t\t\t\t\t\techo \"</tr>\\n\";\n \t\t\t\t\t\t$row = pg_fetch_row($rs);\n","remote_name":"debian/sid","revision":"git-v1:921866f35baa59636dabe798675cb2f7e2c6ab52","role":"main"}],"result_code":"success","result_tags":[],"revision":"git-v1:921866f35baa59636dabe798675cb2f7e2c6ab52","start_time":"2026-11-07T20:26:02.661872Z","subpath":"","suite":"control","target_branch_url":null,"vcs_type":"git","worker":"tyr"},"run_id":"71418f8e-ac00-49cb-b285-42d4d3cf039e","success_probability":0.5,"suite":"control","total_previous_runs":2,"utcnow":"2026-11-09T03:24:30.494415185+00:00","vcs_type":"git","vcs_url":"git+ssh://git@salsa.debian.org/postgresql/phppgadmin.git","version":"0.0.0","worker_log_name":"worker.log","worker_name":"tyr"}