Сборка PHP5.6.18 на Arch Linux: тестирование windows не пропускается, несмотря на проверку PHP_OS

Почему этот неизмененный код из официального релиза PHP 5.6.18:

--SKIPIF--
<?php
if (phpversion() < "5.3.0") { die('SKIP php version so lower.'); }
if (!extension_loaded('openssl')) { die('ext/openssl required'); }
if(substr(PHP_OS, 0, 3) != 'WIN' ) {
die('skip windows only test');
}
?>

… не пропустить тест только для Windows при сборке пакета PHP на Arch Linux?

Я пытаюсь собрать PHP5.6.18, используя PKGBUILD из официальной системы сборки Arch. Вот что я сделал:

  1. git clone git://projects.archlinux.org/svntogit/packages.git
  2. Я прошел через git история пакета php, и определили этот коммит как лучшая отправная точка — в основном последний коммит перед обновлением до PHP7. Итак, я в packages, а также git checkout этот идентификатор фиксации.
  3. Я обновил PKGBUILD следующим образом:
    • задавать pkgver=5.6.18
    • задавать pkgrel=1
    • установите первый md5sum в '177ba962557795866ae331ad4ad99bba'
  4. настроить чистую chroot для сборки (это уменьшило количество сбоев теста с 2-3 до 1)
  5. Сборка php: makechrootpkg -c -r $CHROOT (в каталоге с PKGBUILD файл.

Сборка работает нормально, но я получаю следующий тестовый сбой:

Number of tests : 6651              6180
Tests skipped   :  471 (  7.1%) --------
Tests warned    :    1 (  0.0%) (  0.0%)
Tests failed    :    1 (  0.0%) (  0.0%)
Expected fail   :    9 (  0.1%) (  0.1%)
Tests passed    : 6169 ( 92.8%) ( 99.8%)
---------------------------------------------------------------------
Time taken      :   45 seconds
...
FAILED TEST SUMMARY
---------------------------------------------------------------------
mixed stream_socket_enable_crypto(resource $stream , bool $enable [, int $crypto_type [, resource $session_stream
]] ) ; [ext/standard/tests/streams/stream_socket_enable_crypto-win32.phpt]
=====================================================================

=====================================================================
WARNED TEST SUMMARY
---------------------------------------------------------------------
Bug #70172 - Use After Free Vulnerability in unserialize() [ext/standard/tests/serialize/bug70172.phpt] (warn: XFA
IL section but test passes)
=====================================================================

Ок, так win32 уже выглядит подозрительно в имени файла, и просмотр содержимого файла действительно предполагает, что тест должен быть пропущен в Linux:

--TEST--
mixed stream_socket_enable_crypto(resource $stream , bool $enable [, int $crypto_type [, resource $session_stream ]] ) ;
...
--SKIPIF--
<?php
if (phpversion() < "5.3.0") { die('SKIP php version so lower.'); }
if (!extension_loaded('openssl')) { die('ext/openssl required'); }
if(substr(PHP_OS, 0, 3) != 'WIN' ) {
die('skip windows only test');
}
?>

Обратите внимание PHP_OS связанная проверка. Итак, я думаю, возможно, PHP_OS каким-то образом получает неправильное значение. Так что я:

  1. Вручную зайдите в сборку chroot: arch-nspawn $CHROOT/$USER/
  2. добавлять echo substr(PHP_OS, 0, 3)
    в начале этого теста (только под <?php в --FILE-- раздел, а в актуальном stream_socket_enable_crypto-win32.php файл)
  3. Перезапустите его, используя stream_socket_enable_crypto-win32.sh скрипт в том же каталоге, я действительно вижу ожидаемый Lin выход.

Почему этот тест не пропущен? Я действительно смущен. Как я могу исправить эту проблему?

0

Решение

В качестве обходного пути, сейчас я просто удалю тест в prepare() раздел PKGBUILD файл:

prepare() {
cd ${srcdir}/${pkgbase}-${pkgver}
# ....
# add this line:
rm ./ext/standard/tests/streams/stream_socket_enable_crypto-win32.phpt
}
1

Другие решения

Было бы неплохо, если бы M01 дал нам знать имя файла PKGBUILD, который он отредактировал, чтобы я мог также взглянуть на это.

Но до тех пор просто откройте этот файл:

/usr/src/php/ext/standard/tests/streams/stream_socket_enable_crypto-win32.phpt

и найдите эту строку, как показано выше.

И просто закомментируйте строку, если кто-то все еще использует php 5.3, он все равно должен быть отмечен и очищен, lol.

  //commented out by dave due to bug and should be skipped
//if (phpversion() < "5.3.0") { die('SKIP php version so lower.'); }
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector