diff options
| author | Remi Collet <remi@remirepo.net> | 2021-09-10 16:24:37 +0200 | 
|---|---|---|
| committer | Remi Collet <remi@remirepo.net> | 2021-09-10 16:24:37 +0200 | 
| commit | 17d854cb73f61a09d3563c2dea84c083f48d90d8 (patch) | |
| tree | 3da5bc8475757ec0d15c76ad3de8a511471650f6 | |
| parent | 62a4fa297ee807fa60f627f2138acaaf9268f2f4 (diff) | |
add upstream patch for PHP 8.1
| -rw-r--r-- | php-pecl-rar.spec | 15 | ||||
| -rw-r--r-- | rar-php81.patch | 152 | 
2 files changed, 165 insertions, 2 deletions
diff --git a/php-pecl-rar.spec b/php-pecl-rar.spec index e879586..669d5c7 100644 --- a/php-pecl-rar.spec +++ b/php-pecl-rar.spec @@ -1,6 +1,6 @@  # spec file for php-pecl-rar  # -# Copyright (c) 2013-2020 Remi Collet +# Copyright (c) 2013-2021 Remi Collet  # License: CC-BY-SA  # http://creativecommons.org/licenses/by-sa/4.0/  # @@ -19,12 +19,15 @@  Summary:        PHP extension for reading RAR archives  Name:           %{?scl_prefix}php-pecl-%{pecl_name}  Version:        4.2.0 -Release:        1%{?dist}%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')} +Release:        2%{?dist}%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}  License:        PHP and Freeware with further limitations  Group:          Development/Languages  URL:            https://pecl.php.net/package/%{pecl_name}  Source0:        https://pecl.php.net/get/%{pecl_name}-%{version}.tgz +Patch0:         %{pecl_name}-php81.patch + +BuildRequires:  make  BuildRequires:  %{?dtsprefix}gcc  BuildRequires:  %{?scl_prefix}php-devel  BuildRequires:  %{?scl_prefix}php-pear @@ -53,6 +56,9 @@ Obsoletes:     php74-pecl-%{pecl_name}  <= %{version}  %if "%{php_version}" > "8.0"  Obsoletes:     php80-pecl-%{pecl_name}  <= %{version}  %endif +%if "%{php_version}" > "8.1" +Obsoletes:     php81-pecl-%{pecl_name}  <= %{version} +%endif  %endif @@ -74,6 +80,8 @@ sed -e 's/role="test"/role="src"/' \      -i package.xml  cd NTS +%patch0 -p1 +  # Sanity check, really often broken  extver=$(sed -n '/#define PHP_RAR_VERSION/{s/.* "//;s/".*$//;p}' php_rar.h)  if test "x${extver}" != "x%{version}%{?prever:-%{prever}}"; then @@ -206,6 +214,9 @@ REPORT_EXIT_STATUS=1 \  %changelog +* Fri Sep 10 2021 Remi Collet <remi@remirepo.net> - 4.2.0-2 +- add upstream patch for PHP 8.1 +  * Mon Dec  7 2020 Remi Collet <remi@remirepo.net> - 4.2.0-1  - update to 4.2.0 diff --git a/rar-php81.patch b/rar-php81.patch new file mode 100644 index 0000000..4f4407b --- /dev/null +++ b/rar-php81.patch @@ -0,0 +1,152 @@ +From ab26d285759e4c917879967b09976a44829ed570 Mon Sep 17 00:00:00 2001 +From: Gustavo Lopes <mail@geleia.net> +Date: Mon, 16 Aug 2021 01:28:05 +0100 +Subject: [PATCH] Fixes for PHP 8.1 + +--- + rar_stream.c   |  6 ++++++ + rararch.c      |  8 +++++++- + rarentry.c     | 26 +++++++++++++++----------- + tests/047.phpt |  6 +++--- + 4 files changed, 31 insertions(+), 15 deletions(-) + +diff --git a/rar_stream.c b/rar_stream.c +index 6fe207a..c6546a6 100644 +--- a/rar_stream.c ++++ b/rar_stream.c +@@ -784,7 +784,13 @@ static int _rar_get_archive_and_fragment(php_stream_wrapper *wrapper, + #if PHP_MAJOR_VERSION < 7 + 			*archive = zend_resolve_path(tmp_archive, tmp_arch_len TSRMLS_CC); + #else ++#  if PHP_VERSION_ID < 80100 + 			zend_string *arc_str = zend_resolve_path(tmp_archive, tmp_arch_len); ++#  else ++			zend_string *tmp_archive_str = zend_string_init_fast(tmp_archive, tmp_arch_len); ++			zend_string *arc_str = zend_resolve_path(tmp_archive_str); ++			zend_string_free(tmp_archive_str); ++#  endif + 			if (arc_str != NULL) { + 				*archive = estrndup(arc_str->val, arc_str->len); + 			} else { +diff --git a/rararch.c b/rararch.c +index ed79f10..7cbfa26 100644 +--- a/rararch.c ++++ b/rararch.c +@@ -28,6 +28,7 @@ + /* $Id$ */ +  + #include "zend_types.h" ++#include <zend_API.h> + #ifdef __cplusplus + extern "C" { + #endif +@@ -962,6 +963,11 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_rararchive_setallowbroken, 0, 0, 1) + 	ZEND_ARG_INFO(0, allow_broken) + ZEND_END_ARG_INFO() +  ++#if PHP_MAJOR_VERSION >= 8 ++ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_rararchive_getiterator, 0, 0, Traversable, 0) ++ZEND_END_ARG_INFO() ++#endif ++ + ZEND_BEGIN_ARG_INFO(arginfo_rararchive_void, 0) + ZEND_END_ARG_INFO() + /* }}} */ +@@ -981,7 +987,7 @@ static zend_function_entry php_rararch_class_functions[] = { + 	PHP_ME(rararch,					__toString,				arginfo_rararchive_void,		ZEND_ACC_PUBLIC) + 	PHP_ME_MAPPING(__construct,		rar_bogus_ctor,			arginfo_rararchive_void,		ZEND_ACC_PRIVATE | ZEND_ACC_CTOR) + #if PHP_MAJOR_VERSION >= 8 +-	PHP_ME(rararch,					getIterator,			arginfo_rararchive_void,		ZEND_ACC_PUBLIC) ++	PHP_ME(rararch,					getIterator,			arginfo_rararchive_getiterator,	ZEND_ACC_PUBLIC) + #endif + 	{NULL, NULL, NULL} + }; +diff --git a/rarentry.c b/rarentry.c +index 5943f38..5e680f6 100644 +--- a/rarentry.c ++++ b/rarentry.c +@@ -27,11 +27,10 @@ +  + /* $Id$ */ +  +-#ifdef __cplusplus +-extern "C" { ++#include <zend_types.h> ++#ifndef _GNU_SOURCE ++#  define _GNU_SOURCE + #endif +- +-#define _GNU_SOURCE + #include <string.h> +  + #include <php.h> +@@ -270,8 +269,8 @@ static void _rar_dos_date_to_text(unsigned dos_time, char *date_string) /* {{{ * + /* }}} */ +  + /* {{{ Methods */ +-/* {{{ proto bool RarEntry::extract(string dir [, string filepath = '' +-       [, string password = NULL [, bool extended_data  = FALSE]]) ++/* {{{ public function extract(?string $dir, ?string $filepath = '', ++		?string $password = null, bool $extended_data = false): void {} +    Extract file from the archive */ + PHP_METHOD(rarentry, extract) + { /* lots of variables, but no need to be intimidated */ +@@ -298,7 +297,7 @@ PHP_METHOD(rarentry, extract) + 	 * password that's different from the one stored in the rar_file_t object*/ + 	rar_cb_user_data		cb_udata = {NULL}; +  +-	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ss!b", &dir, ++	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s!|s!s!b", &dir, + 			&dir_len, &filepath, &filepath_len, &password, &password_len, + 			&process_ed) == FAILURE ) { + 		return; +@@ -714,12 +713,21 @@ PHP_METHOD(rarentry, __toString) + /* }}} */ +  + /* {{{ arginfo */ ++#if PHP_MAJOR_VERSION < 8 + ZEND_BEGIN_ARG_INFO_EX(arginfo_rarentry_extract, 0, 0, 1) + 	ZEND_ARG_INFO(0, path) + 	ZEND_ARG_INFO(0, filename) + 	ZEND_ARG_INFO(0, password) + 	ZEND_ARG_INFO(0, extended_data) + ZEND_END_ARG_INFO() ++#else ++ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_rarentry_extract, 0, 1, _IS_BOOL, 0) ++	ZEND_ARG_TYPE_INFO(0, dir, IS_STRING, 1) ++	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, filepath, IS_STRING, 1, "\'\'") ++	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, password, IS_STRING, 1, "null") ++	ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, extended_data, _IS_BOOL, 0, "false") ++ZEND_END_ARG_INFO() ++#endif +  + ZEND_BEGIN_ARG_INFO_EX(arginfo_rarentry_getstream, 0, 0, 0) + 	ZEND_ARG_INFO(0, password) +@@ -829,7 +837,3 @@ void minit_rarentry(TSRMLS_D) + 	REG_RAR_CLASS_CONST_LONG("ATTRIBUTE_UNIX_SYM_LINK",				0x0A000L); + 	REG_RAR_CLASS_CONST_LONG("ATTRIBUTE_UNIX_SOCKET",				0x0C000L); + } +- +-#ifdef __cplusplus +-} +-#endif +diff --git a/tests/047.phpt b/tests/047.phpt +index b1b5f53..8bd3e90 100644 +--- a/tests/047.phpt ++++ b/tests/047.phpt +@@ -10,9 +10,9 @@ function resolve($vol) { + 	else + 		return null; + } +-function int32_to_hex($value) {  +-  $value &= 0xffffffff;  +-  return str_pad(strtoupper(dechex($value)), 8, "0", STR_PAD_LEFT);  ++function int32_to_hex($value) { ++  $value &= 0xffffffff; ++  return str_pad(strtoupper(dechex($value)), 8, "0", STR_PAD_LEFT); + } + echo "Fail:\n"; + $rar_file1 = rar_open(dirname(__FILE__).'/multi_broken.part1.rar'); +--  +2.31.1 +  | 
