Skip to content

Commit

Permalink
contrib/php8.3: add pear subpackage
Browse files Browse the repository at this point in the history
  • Loading branch information
rbgarga authored and nekopsykose committed Jul 8, 2024
1 parent ead3b8e commit 4cba523
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 1 deletion.
1 change: 1 addition & 0 deletions contrib/php8.3-pear
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
From 67259e451d5d58b4842776c5696a66d74e157609 Mon Sep 17 00:00:00 2001
From: Niels Dossche <7771979+nielsdos@users.noreply.github.com>
Date: Fri, 5 Jul 2024 23:34:09 +0200
Subject: [PATCH] Fix GH-14834: Error installing PHP when --with-pear is used

libxml2 2.13 makes changes to how the parsing state is set, update our
code accordingly. In particular, it started reporting entities within
attributes, while it should only report entities inside text nodes.

Closes GH-14837.
---
ext/xml/compat.c | 2 +-
ext/xml/tests/gh14834.phpt | 29 +++++++++++++++++++++++++++++
3 files changed, 32 insertions(+), 1 deletion(-)
create mode 100644 ext/xml/tests/gh14834.phpt

diff --git a/ext/xml/compat.c b/ext/xml/compat.c
index 242cc4ba7c40c..5f55dc62b3687 100644
--- a/ext/xml/compat.c
+++ b/ext/xml/compat.c
@@ -375,7 +375,7 @@ _get_entity(void *user, const xmlChar *name)
if (ret == NULL)
ret = xmlGetDocEntity(parser->parser->myDoc, name);

- if (ret == NULL || (parser->parser->instate != XML_PARSER_ENTITY_VALUE && parser->parser->instate != XML_PARSER_ATTRIBUTE_VALUE)) {
+ if (ret == NULL || parser->parser->instate == XML_PARSER_CONTENT) {
if (ret == NULL || ret->etype == XML_INTERNAL_GENERAL_ENTITY || ret->etype == XML_INTERNAL_PARAMETER_ENTITY || ret->etype == XML_INTERNAL_PREDEFINED_ENTITY) {
/* Predefined entities will expand unless no cdata handler is present */
if (parser->h_default && ! (ret && ret->etype == XML_INTERNAL_PREDEFINED_ENTITY && parser->h_cdata)) {
diff --git a/ext/xml/tests/gh14834.phpt b/ext/xml/tests/gh14834.phpt
new file mode 100644
index 0000000000000..2781ba2ed0941
--- /dev/null
+++ b/ext/xml/tests/gh14834.phpt
@@ -0,0 +1,29 @@
+--TEST--
+GH-14834 (Error installing PHP when --with-pear is used)
+--EXTENSIONS--
+xml
+--FILE--
+<?php
+$xml = <<<XML
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE root [
+ <!ENTITY foo "ent">
+]>
+<root>
+ <element hint="hello&apos;world">&foo;<![CDATA[ &amp; ]]><?x &amp; ?></element>
+</root>
+XML;
+
+$parser = xml_parser_create();
+xml_set_character_data_handler($parser, function($_, $data) {
+ var_dump($data);
+});
+xml_parse($parser, $xml, true);
+?>
+--EXPECT--
+string(3) "
+ "
+string(3) "ent"
+string(7) " &amp; "
+string(1) "
+"
19 changes: 19 additions & 0 deletions contrib/php8.3/patches/fix-pear-shebang.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
commit ef3e6b44
Author: Renato Botelho do Couto <renato@netgate.com>
Date: Mon Jul 8 16:15:05 2024

pear: Fix PHP shebang line

diff --git a/pear/Makefile.frag b/pear/Makefile.frag
index 9408757a..96d79f61 100644
--- a/pear/Makefile.frag
+++ b/pear/Makefile.frag
@@ -10,7 +10,7 @@ PEAR_SUFFIX = -ds a$(program_suffix)
PEAR_INSTALLER_URL = https://pear.php.net/install-pear-nozlib.phar

install-pear-installer: $(SAPI_CLI_PATH)
- @$(top_builddir)/sapi/cli/php $(PEAR_INSTALL_FLAGS) pear/install-pear-nozlib.phar -d "$(peardir)" -b "$(bindir)" ${PEAR_PREFIX} ${PEAR_SUFFIX}
+ @$(top_builddir)/sapi/cli/php $(PEAR_INSTALL_FLAGS) pear/install-pear-nozlib.phar -p "$(bindir)/$(program_prefix)php$(program_suffix)" -d "$(peardir)" -b "$(bindir)" ${PEAR_PREFIX} ${PEAR_SUFFIX}

install-pear:
@echo "Installing PEAR environment: $(INSTALL_ROOT)$(peardir)/"
14 changes: 14 additions & 0 deletions contrib/php8.3/patches/install-pear.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
--- ./pear/Makefile.frag.orig 2013-04-12 07:02:27.041602514 +0000
+++ ./pear/Makefile.frag 2013-04-12 07:04:09.065836822 +0000
@@ -1,7 +1,10 @@
peardir=$(PEAR_INSTALLDIR)

+# help the built php to find xml extension so we can install pear
+PEAR_INSTALL_XML_FLAGS = -d extension="$(top_builddir)/modules/xml.so" -d extension="$(top_builddir)/modules/phar.so"
+
# Skip all php.ini files altogether
-PEAR_INSTALL_FLAGS = -n -dshort_open_tag=0 -dopen_basedir= -derror_reporting=1803 -dmemory_limit=-1 -ddetect_unicode=0
+PEAR_INSTALL_FLAGS = -n -dshort_open_tag=0 -dopen_basedir= -derror_reporting=1803 -dmemory_limit=-1 -ddetect_unicode=0 $(PEAR_INSTALL_XML_FLAGS)

WGET = `which wget 2>/dev/null`
FETCH = `which fetch 2>/dev/null`
37 changes: 36 additions & 1 deletion contrib/php8.3/template.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
pkgname = "php8.3"
_majver = "8.3"
pkgver = f"{_majver}.9"
pkgrel = 0
pkgrel = 1
_apiver = "20230831"
build_style = "gnu_configure"
configure_args = [
Expand Down Expand Up @@ -65,6 +65,7 @@
"--with-openssl=shared",
"--with-password-argon2",
"--with-pdo-sqlite=shared",
"--with-pear",
"--with-sodium=shared",
"--with-sqlite3=shared",
"--with-unixODBC=shared",
Expand Down Expand Up @@ -229,6 +230,8 @@ def post_install(self):
self.install_service(self.files_path / f"php-fpm{_majver}")
# default php-fpm config files
self.rename(f"etc/php{_majver}/php-fpm.conf.default", "php-fpm.conf")
for f in ["pear", "peardev", "pecl"]:
self.rename(f"usr/bin/{f}", f"{f}{_majver}")
self.install_file(
self.files_path / "www.conf", f"etc/php{_majver}/php-fpm.d"
)
Expand All @@ -245,6 +248,20 @@ def post_install(self):
outf.write(f"zend_extension={extso}\n")
else:
outf.write(f"extension={extso}\n")
# remove temporary files/dirs that shouldn't be part of package
for f in [
".channels",
".depdb",
".depdblock",
".filemap",
".lock",
f"usr/share/php{_majver}/pear/.channels",
f"usr/share/php{_majver}/pear/.filemap",
f"usr/share/php{_majver}/pear/.lock",
f"usr/share/php{_majver}/pear/.registry",
f"usr/share/php{_majver}/pear/test",
]:
self.uninstall(f)


@subpackage(pkgname, alternative="php")
Expand All @@ -253,6 +270,9 @@ def _default(self):
self.provider_priority = 100
return [
f"@etc/dinit.d/php-fpm=>php-fpm{_majver}",
f"@usr/bin/pear=>pear{_majver}",
f"@usr/bin/peardev=>peardev{_majver}",
f"@usr/bin/pecl=>pecl{_majver}",
f"@usr/bin/phar=>phar{_majver}",
f"@usr/bin/phar.phar=>phar{_majver}.phar",
f"@usr/bin/php=>php{_majver}",
Expand Down Expand Up @@ -328,6 +348,21 @@ def _ext(self):
_extension(_extn, _iif)


@subpackage(f"php{_majver}-pear")
def _pear(self):
self.pkgdesc = f"PHP{_majver} Extension and Application Repository"
self.depends = [f"{pkgname}={pkgver}-r{pkgrel}", f"{pkgname}-xml"]
self.install_if = [f"{pkgname}={pkgver}-r{pkgrel}"]

return [
f"etc/php{_majver}/pear.conf",
f"usr/bin/pear{_majver}",
f"usr/bin/peardev{_majver}",
f"usr/bin/pecl{_majver}",
f"usr/share/php{_majver}/pear",
]


@subpackage(f"php{_majver}-devel")
def _devel(self):
self.depends += [f"{pkgname}={pkgver}-r{pkgrel}"]
Expand Down

0 comments on commit 4cba523

Please sign in to comment.