Pull to refresh

Релиз PHP 5.3.3

Reading time 11 min
Views 7K
Команда разработчиков PHP анонсировала PHP 5.3.3. Этот релиз сфокусирован на улучшении стабильности и безопасности ветки PHP 5.3.x, в нем исправлено более 100 ошибок, некоторые из которых относятся к безопасности. Всем пользователям рекомендуется обновиться до этого релиза.

Обратно несовместимые изменения:


Методы с таким же именем как и последний элемент класса в пространстве имен не будет больше восприниматься как конструктор. Это изменение не затронет классы вне пространства имен.
Copy Source | Copy HTML
  1. <?php
  2. namespace Foo;
  3. class Bar {
  4.     public function Bar() {
  5.         // treated as constructor in PHP 5.3.0-5.3.2
  6.         // treated as regular method in PHP 5.3.3
  7.     }
  8. }
  9. ?>

Здесь нет ударения на переход с PHP 5.2 так как пространства имен были представлены только в PHP 5.3.

Улучшения безопасности и исправления в PHP 5.3.3:


Переписана функция var_export() с использованием smart_str в обход output buffering, для предотвращения раскрытия данных при возникновении фатальной ошибки. (CVE-2010-2531).
Исправлена возможные проблемы уничтожения ресурса в shm_put_var().
Исправлена возможная утечка информации из-за вмешательства оператора XOR.
Исправлена возможность повреждения памяти из-за не ожидаемой передачи аргумента по ссылке в момент вызова и последующие затирания памяти через функции обратного вызова.
Исправлена возможность повреждения памяти в методе ArrayObject::uasort().
Исправлена возможность повреждения памяти в функции parse_str().
Исправлена возможность повреждения памяти в функции pack().
Исправлена возможность повреждения памяти в функции substr_replace().
Исправлена возможность повреждения памяти в функции addcslashes().
Исправлена возможность переполнения стека внутри функции fnmatch().
Исправлена возможность переполнения буфера dechunking filter.
Исправлена возможность произвольного доступа к памяти внутри расширения sqlite.
Исправлен формат валидации строк внутри расширения phar.
Исправлена обработка сериализации сессионных переменных с определенными префиксными символами.
Исправлено удаление ссылки на нулевой указатель при обработке невалидных запросов XML-RPC.
Исправлены проблемы десериализации класса SplObjectStorage.
Исправлены возможные переполнения буфера в mysqlnd_list_fields, mysqlnd_change_user.
Исправлены возможные переполнения буфера при обработки пакетов с ошибками в mysqlnd.

Ключевые улучшения в PHP 5.3.3 включают в себя:


Обновлен входящий в установочный пакет sqlite, до версии 3.6.23.1
Обновлен входящий в установочный пакет PCRE, до версии 8.02
Менеджер процессов FastCGI (FPM) добавлен в SAPI.
Добавлены фильтры потоков расширения mcrypt (портированы из mcrypt_filter).
Добавлен фильтр full_special_chars в расширение ext/filter.
Исправлено возможность ошибки из-за рекурсивной активации сборщика мусора.
Исправлена ошибка №52238 (Падение при выкидывании исключения во время работы функции iterator_to_array).
Исправлена ошибка №52041 (Утечка памяти при записи в не инициализированную при возврате из функции).
Исправлена ошибка №52060 (Утечка памяти при передаче замыкания в функцию method_exists()).
Исправлена ошибка №52001 (Ошибка выделения памяти после использования переменных переменных).
Исправлена ошибка №51723 (Заголовок Content-length ограничен 32-битным целым в Apache2 на платформе Windows).
Исправлена ошибка №48930 (__COMPILER_HALT_OFFSET__ не корректно работает в PHP >= 5.3).

Полный changelog:


— Обновлен входящий в установочный пакет sqlite, до версии 3.6.23.1
— Обновлен входящий в установочный пакет PCRE, до версии 8.02

— Добавлена опция JSON_NUMERIC_CHECK в функции json_encode(), которая переводит числа в виде строки в целые числа.
— Добавлена функция stream_set_read_buffer, позволяющая установить буфер для операций чтения из потока.
— Добавлены фильтры потоков расширения mcrypt (портированы из mcrypt_filter).
— Добавлен фильтр full_special_chars в расширение ext/filter.
— Добавлена опция числа непереданных пакетов в контексте сокета для функции stream_socket_server().
— Добавлен пятый параметр в функции openssl_encrypt()/openssl_decrypt()
(string $iv) для использования ненулевого вектора инициализации.
При неявном использовании нулевого вектора инициализации высылается warning.
— Добавлена функция openssl_cipher_iv_length().
— Менеджер процессов FastCGI (FPM) добавлен в SAPI.
— Добавлены распространенные версии Windows в функцию php_uname и исправлена поддержка неизвестных версий windows.
— Добавлена поддержка Berkeley DB 5 в расширение DBA.
— Добавлена поддержка копирования в/из массива/файла для расширения pdo_pgsql.
— В PDO добавлен метод inTransaction(), со специальной поддержкой Postgres.

— Изменены классы в пространствах имен, так что теперь конструктор может быть задан только через __construct.
— Сброс ошибочного состояния в PDO::beginTransaction().

— Реализовано FR#51295 (не существующий SQLite3::busyTimeout)
— Реализовано FR#35638 (добавлена Adding дата в результаты функции imap_fetch_overview).
— Переписана функция var_export() с использованием smart_str в обход output buffering, для предотвращения раскрытия данных при возникновении фатальной ошибки. (CVE-2010-2531).
— Исправлены возможные переполнения буфера в mysqlnd_list_fields, mysqlnd_change_user.
— Исправлены возможные переполнения буфера при обработки пакетов с ошибками в mysqlnd.
— Исправлена очень редкая утечка памяти в mysqlnd, при прикреплении тысяч столбцов.
— Исправлена ошибка при вызове несуществующего метод класса, который наследует от PDOStatement и экземпляр которого создан напрямую, в обход создания методами PDO.

— Исправлена утечка памяти по ошибке в mcrypt_create_iv на платформе Windows.
— Исправлено возможность ошибки из-за рекурсивной активации сборщика мусора.
— Исправлена возможные проблемы уничтожения ресурса в shm_put_var().
— Исправлена возможная утечка информации из-за вмешательства оператора XOR.
— Исправлена возможность повреждения памяти из-за не ожидаемой передачи аргумента по ссылке в момент вызова и последующие затирания памяти через функции обратного вызова.
— Исправлена возможность повреждения памяти в методе ArrayObject::uasort().
— Исправлена возможность повреждения памяти в функции parse_str().
— Исправлена возможность повреждения памяти в функции pack().
— Исправлена возможность повреждения памяти в функции substr_replace().
— Исправлена возможность повреждения памяти в функции addcslashes().
— Исправлена возможность переполнения стека внутри функции fnmatch().
— Исправлена возможность переполнения буфера dechunking filter.
— Исправлена возможность произвольного доступа к памяти внутри расширения sqlite.
— Исправлен формат валидации строк внутри расширения phar.
— Исправлена обработка сериализации сессионных переменных с определенными префиксными символами.
— Исправлено удаление ссылки на нулевой указатель при обработке невалидных запросов XML-RPC.
— Исправлено переполнение 64-битного целого в функции mhash_keygen_s2k().
— Исправлены проблемы десериализации класса SplObjectStorage.
— Исправлена ini настройка mail.log в случае когда не указано имя файла.

— Исправлена ошибка №52317 (Ошибка сегментации при использовании функции mail() на rhel 4.x (только 64 бита)).
— Исправлена ошибка №52262 (json_decode() не отображал ошибок при декодировании невалидного UTF-8).
— Исправлена ошибка №52240 (функция hash_copy() не копировала HMAC ключ, что вызывало неправильные результаты и падения PHP).
— Исправлена ошибка №52238 (Падение при выкидывании исключения во время работы функции iterator_to_array).
— Исправлена ошибка №52193 (преобразование замыкания в массив приводило к пустому массиву).
— Исправлена ошибка №52183 (класс ReflectionFunction отображал неправильного количество аргументов для псевдонимов функций).
— Исправлена ошибка №52162 (убраны установленные пользователем переменные заголовков запроса с номерами).
— Исправлена ошибка №52160 (Неправильная ошибка уровня E_STRICT при переопределении конструктора).
— Исправлена ошибка №52138 (Константы парсящиеся в ini файле как имена секций).
— Исправлена ошибка №52115 (mysqli_result::fetch_all возвращает null, а не пустой массив).
— Исправлена ошибка №52101 (мусор возвращаемый dns_get_record() в поле 'ipv6' на платформе Windows).
— Исправлена ошибка №52082 (сброс character_set_client и character_set_connection после вызова mysqli_change_user())
— Исправлена ошибка №52043 (GD не распознавал последние версии библиотеки libJPEG).
— Исправлена ошибка №52041 (Утечка памяти при записи в не инициализированную при возврате из функции).
— Исправлена ошибка №52060 (Утечка памяти при передаче замыкания в функцию method_exists()).
— Исправлена ошибка №52057 (ReflectionClass не мог обработать класс Closure).
— Исправлена ошибка №52051 (обработка регистрозависимости конструкторов старого стиля изменена в 5.3+).
— Исправлена ошибка №52037 (Ошибка конкурентная сборки в инсталляционных программах).
— Исправлена ошибка №52019 (lcov больше не поддерживает переменную TESTS).
— Исправлена ошибка №52010 (Ошибка ограничений open_basedir при команде vacuum).
— Исправлена ошибка №52001 (Ошибка выделения памяти после использования переменных переменных).
— Исправлена ошибка №51991 (spl_autoload и поддержка *nix с пространствами имен).
— Исправлена ошибка №51943 (AIX: несколько файлов выходили за рамки спецификации ANSI).
— Исправлена ошибка №51911 (Утечки памяти при вызове ReflectionParameter::getDefaultValue() константного массива).
— Исправлена ошибка №51905 (ReflectionParameter не срабатывал если значение по-умолчанию массив с доступом к self::).
— Исправлена ошибка №51899 (Ошибка разбора в функции parse_ini_file() когда после пустого значения отсутствует символ перевода строки).
— Исправлена ошибка №51844 (checkdnsrr не поддерживал типы любые записей кроме MX).
— Исправлена ошибка №51827 (Неправильный warning в случае когда register_shutdown_function вызван с неправильным количеством аргументов).
— Исправлена ошибка №51822 (Ошибка сегментации со странным __destruct() для статичных переменных класса).
— Исправлена ошибка №51791 (функция constant() прерывала исполнение после неудачной попытки проверить неустановленную константу).
— Исправлена ошибка №51732 (__construct или open Fileinfo не работал с NULL).
— Исправлена ошибка №51725 (xmlrpc_get_type() возвращал true на некорректные даты).
— Исправлена ошибка №51723 (Заголовок Content-length ограничен 32-битным целым в Apache2 на платформе Windows).
— Исправлена ошибка №51721 (DOMNodeList и DOMNamedNodeMap помечены как Traversable).
— Исправлена ошибка №51712 (Проверка mysql_mysqlnd_read_timeout_long не должна срабатывать на MySQL4).
— Исправлена ошибка №51697 (Небезопасные операции в free_storage итераторов SPL вызывали падение во время завершения работы).
— Исправлена ошибка №51690 (Phar::setStub проверял регистрозависимый __HALT_COMPILER()).
— Исправлена ошибка №51688 (ini per dir падал при неправильном указании document root).
— Исправлена ошибка №51671 (некорректная работа imagefill с маленькими изображениями).
— Исправлена ошибка №51670 (getColumnMeta вызывал ошибка сегментации при повторном исполнении запроса после вызова nextRowset).
— Исправлена ошибка №51647 (Файл сертификата без приватного ключа (приватный ключ в другом файле) не работал).
— Исправлена ошибка №51629 (Вводящая в заблуждение сообщение об ошибке CURLOPT_FOLLOWLOCATION).
— Исправлена ошибка №51627 (script path не корректно воспринимался).
— Исправлена ошибка №51624 (Падение при вызове mysqli_options()).
— Исправлена ошибка №51615 (PHP падал при передачи неправильного HTML в SimpleXML).
— Исправлена ошибка №51609 (pg_copy_to: неправильные результаты при использовании четвертого аргумента).
— Исправлена ошибка №51608 (pg_copy_to: ПРЕДУПРЕЖДЕНИЕ: нестандартное использование \\ в строковом литерале).
— Исправлена ошибка №51607 (pg_copy_from не позволял указание схемы в аргументе имени таблицы).
— Исправлена ошибка №51605 (Mysqli — зомби ссылки).
— Исправлена ошибка №51604 (перенос строки в конце заголовка отображался в начале сообщения).
— Исправлена ошибка №51590 (неустановленная константа JSON_ERROR_UTF8).
— Исправлена ошибка №51583 (Ошибка шины из-за неправильного расположения в mysqlnd).
— Исправлена ошибка №51582 (Не допускайте что UINT64_C когда-либо будет доступен).
— Исправлена ошибка №51577 (Неинициализированная ссылка на память в oci_bind_array_by_name).
— Исправлена ошибка №51562 (Таймаут запроса в mssql не может быть изменен под отдельный запрос).
— Исправлена ошибка №51552 (debug_backtrace() вызывал ошибку сегментации и/или проблемы с памятью).
— Исправлена ошибка №51445 (неправильное/медленное определение *RECURSION* в var_dump()).
— Исправлена ошибка №51435 (Отсутствующие ifdef / ошибки логики в шифрующем коде могут вызвать ошибки компиляции).
— Исправлена ошибка №51424 (функция crypt() зависает после 3-го вызова).
— Исправлена ошибка №51394 (Строка ошибки определяется некорректно если обработчик ошибок высылает исключение).
— Исправлена ошибка №51393 (DateTime::createFromFormat() не срабатывал если строка с форматом содержит временную зону).
— Исправлена ошибка №51347 (утечка памяти mysqli_close / connection).
— Исправлена ошибка №51338 (подстановка в URL работает даже в случае установленного параметра use_only_cookies).
— Исправлена ошибка №51291 (oci_error не сообщал о последней ошибке, в случае когда вызван дважды).
— Исправлена ошибка №51276 (php_load_extension() отсутствует когда не определена HAVE_LIBDL).
— Исправлена ошибка №51273 (Свойство Faultstring не существует когда faultstring пуст).
— Исправлена ошибка №51269 (zlib.output_compression переписывал заголовок Vary).
— Исправлена ошибка №51257 (CURL_VERSION_LARGEFILE неправильно используется после libcurl версии 7.10.1).
— Исправлена ошибка №51242 (Пустая конфигурационная настройка mysql.default_port больше не определяется по-умолчанию как 3306, а определяется как 0).
— Исправлена ошибка №51237 (падение milter SAPI при запуске).
— Исправлена ошибка №51213 (pdo_mssql обрезает значение столбца типа money).
— Исправлена ошибка №51190 (ftp_put() возвращает false при успешной передаче).
— Исправлена ошибка №51183 (ext/date/php_date.c не компилируется с помощью Sun Studio).
— Исправлена ошибка №51176 (Статические вызовы не статических методов срабатывают как $this->).
— Исправлена ошибка №51171 (curl_setopt() не выводит каких-либо ошибок или предупреждений в случае когда указана несуществующая опция).
— Исправлена ошибка №51128 (imagefill() не работает с большими изображениями).
— Исправлена ошибка №51096 ('last day' и 'first day' обрабатываются некорректно при разборе строк с датой).
— Исправлена ошибка №51086 (DBA DB4 не работает с Berkeley DB 4.8).
— Исправлена ошибка №51062 (DBA DB4 использует ошибочные заголовки и библиотеки).
— Исправлена ошибка №51026 (mysqli_ssl_set не работает).
— Исправлена ошибка №51023 (filter не поддерживает переполнение целого в GCC 4.4).
— Исправлена ошибка №50999 (доступ к нейтральной памяти в dba_fetch()).
— Исправлена ошибка №50976 (Авторизация по заголовкам Soap не разрешена).
— Исправлена ошибка №50828 (DOMNotation не является дочерним классом DOMNode).
— Исправлена ошибка №50810 (propert_exists не работает с приватными свойствами).
— Исправлена ошибка №50762 (в режиме WSDL функция обработчик заголовков Soap вызывается только если указана в WSDL).
— Исправлена ошибка №50731 (Несогласованные пространства имен отправляются функциям, зарегистрированным с помощью spl_autoload_register).
— Исправлена ошибка №50563 (Убран E_WARNING из функции parse_url).
— Исправлена ошибка №50578 (некорректная штука(?) в phar.phar).
— Исправлена ошибка №50555 (DateTime::sub() позволяет относительные модификации времени).
— Исправлена ошибка №50392 (date_create_from_format форсирует 6 чисел для символа форматирования 'u').
— Исправлена ошибка №50383 (Исключения выкинутые в __call / __callStatic не включали в себя файл и строку в трассировочной информации).
— Исправлена ошибка №50358 (Ошибка компиляции ext/phar/util.lo).
— Исправлена ошибка №50101 (Пересечение имен локальной и глобальной переменных).
— Исправлена ошибка №51002 (исправлены возможные повреждения памяти при очень длинных именах).
— Исправлена ошибка №49893 (Падение при создании экземпляра Zend_Mail_Storage_Pop3).
— Исправлена ошибка №49819 (STDOUT теряет данных с posix_isatty()).
— Исправлена ошибка №49778 (DateInterval::format("%a") всегда ноль в случае когда интервал создан из строки в формате ISO).
— Исправлена ошибка №49700 (утечки памями в php_date.c при включенном сборщике мусора).
— Исправлена ошибка №49576 (фильтру FILTER_VALIDATE_EMAIL требуется обновление).
— Исправлена ошибка №49490 (Конфликт префиксов пространств имен XPath).
— Исправлена ошибка №49429 (odbc_autocommit не работает).
— Исправлена ошибка №49320 (PDO возвращает null если подключение SQLite не удается).
— Исправлена ошибка №49234 (mysqli_ssl_set не найден).
— Исправлена ошибка №49216 (Рефлексия работает некорректно с классом mysqli).
— Исправлена ошибка №49192 (PHP падает в случае когда сборщик мусора запущен на COM object).
— Исправлена ошибка №49081 (Ошибка DateTime::diff() если начало в январе и интервал больше 28 дней).
— Исправлена ошибка №49059 (DateTime::diff() повторяет предыдущую операцию sub()).
— Исправлена ошибка №48983 (Неправильная кодировка DOMDocument:saveHTMLFile).
— Исправлена ошибка №48930 (__COMPILER_HALT_OFFSET__ не корректно работает в PHP >= 5.3).
— Исправлена ошибка №48902 (База данных переводов времени устарела).
— Исправлена ошибка №48781 (Утечка памяти циклического сборщика мусора).
— Исправлена ошибка №48601 (xpath() возвращает FALSE для легитимного запроса).
— Исправлена ошибка №48361 (SplFileInfo::getPathInfo должен возвращает родительскую директорию).
— Исправлена ошибка №48289 (схема quoted-printable функции iconv_mime_encode() сломана).
— Исправлена ошибка №47842 (sscanf() не поддерживает 64-битные значения).
— Исправлена ошибка №46111 (Некоторые идентификаторы временной зоны не могут быть обработаны).
— Исправлена ошибка №45808 (stream_socket_enable_crypto() блокирует и съедает ресурсы процессора).
— Исправлена ошибка №43233 (поддержка sasl для ldap на платформе Windows).
— Исправлена ошибка №35673 (formatOutput не работает с saveHTML).
— Исправлена ошибка №33210 (getimagesize() не удается определить ширину/высоту некоторых файлов JPEG).
Tags:
Hubs:
+70
Comments 66
Comments Comments 66

Articles