Merge branch 'PHP-5.5'

* PHP-5.5:
  fix #65070, bgcolor does not use the same format as the input image with imagerotate
  fix #65070, bgcolor does not use the same format as the input image with imagerotate
  Fix the spelling of the php_cli_server_http_response_status_code_pair typedef.
  Change the search in get_status_string() to correctly handle unknown codes.
  Update git rules (5.5 is stable, 5.3 sec only)
  skip test for bug #64936 when tokenizer not built
  Bump version
  Update credits
  Merge NEWS from PHP 5.4 branch
  Reorder NEWS for PHP 5.5.0 final

Conflicts:
	configure.in
	ext/gd/libgd/gd_interpolation.c
	main/php_version.h
This commit is contained in:
Pierre Joye 2013-06-20 22:32:52 +02:00
commit a1d0a869be
9 changed files with 182 additions and 55 deletions

View File

@ -45,15 +45,16 @@ Currently we have the following branches in use::
master The active development branch.
PHP-5.5 Is used to release the PHP 5.5.x series. It allows for larger
enhancements.
PHP-5.4 Is used to release the PHP 5.4.x series. This is current
PHP-5.5 Is used to release the PHP 5.5.x series. This is a current
stable version and is open for bugfixes only.
PHP-5.3 Is used to release the PHP 5.3.x series. This is current
PHP-5.4 Is used to release the PHP 5.4.x series. This is a current
stable version and is open for bugfixes only.
PHP-5.3 Is used to release the PHP 5.3.x series. This is currently
in extended support and open forsecurity fixes only. Triaged
via security@php.net
PHP-5.2 This branch is closed.
PHP-5.1 This branch is closed.

View File

@ -3044,7 +3044,7 @@ int gdImagePaletteToTrueColor(gdImagePtr src)
for (x = 0; x < sx; x++) {
const unsigned char c = *(src_row + x);
if (c == src->transparent) {
*(dst_row + x) = gdTrueColorAlpha(0, 0, 0, 127);;
*(dst_row + x) = gdTrueColorAlpha(0, 0, 0, 127);
} else {
*(dst_row + x) = gdTrueColorAlpha(src->red[c], src->green[c], src->blue[c], src->alpha[c]);
}
@ -3061,6 +3061,12 @@ int gdImagePaletteToTrueColor(gdImagePtr src)
src->pixels = NULL;
src->alphaBlendingFlag = 0;
src->saveAlphaFlag = 1;
if (src->transparent >= 0) {
const unsigned char c = src->transparent;
src->transparent = gdTrueColorAlpha(src->red[c], src->green[c], src->blue[c], src->alpha[c]);
}
return 1;
clean_on_error:

View File

@ -1672,13 +1672,6 @@ gdImagePtr gdImageRotateNearestNeighbour(gdImagePtr src, const float degrees, co
unsigned int i;
gdImagePtr dst;
/* impact perf a bit, but not that much. Implementation for palette
images can be done at a later point.
*/
if (src->trueColor == 0) {
gdImagePaletteToTrueColor(src);
}
dst = gdImageCreateTrueColor(new_width, new_height);
if (!dst) {
return NULL;
@ -1735,17 +1728,11 @@ gdImagePtr gdImageRotateGeneric(gdImagePtr src, const float degrees, const int b
f_slop_x > f_slop_y ? gd_divfx(f_slop_y, f_slop_x) : gd_divfx(f_slop_x, f_slop_y)
: 0;
if (bgColor < 0) {
return NULL;
}
/* impact perf a bit, but not that much. Implementation for palette
images can be done at a later point.
*/
if (src->trueColor == 0) {
gdImagePaletteToTrueColor(src);
}
dst = gdImageCreateTrueColor(new_width, new_height);
if (!dst) {
return NULL;
@ -1799,13 +1786,6 @@ gdImagePtr gdImageRotateBilinear(gdImagePtr src, const float degrees, const int
unsigned int src_offset_x, src_offset_y;
gdImagePtr dst;
/* impact perf a bit, but not that much. Implementation for palette
images can be done at a later point.
*/
if (src->trueColor == 0) {
gdImagePaletteToTrueColor(src);
}
dst = gdImageCreateTrueColor(new_width, new_height);
if (dst == NULL) {
return NULL;
@ -1925,13 +1905,6 @@ gdImagePtr gdImageRotateBicubicFixed(gdImagePtr src, const float degrees, const
unsigned int i;
gdImagePtr dst;
/* impact perf a bit, but not that much. Implementation for palette
images can be done at a later point.
*/
if (src->trueColor == 0) {
gdImagePaletteToTrueColor(src);
}
dst = gdImageCreateTrueColor(new_width, new_height);
if (dst == NULL) {
@ -2180,11 +2153,21 @@ gdImagePtr gdImageRotateBicubicFixed(gdImagePtr src, const float degrees, const
gdImagePtr gdImageRotateInterpolated(const gdImagePtr src, const float angle, int bgcolor)
{
const int angle_rounded = (int)floor(angle * 100);
if (bgcolor < 0) {
return NULL;
}
/* impact perf a bit, but not that much. Implementation for palette
images can be done at a later point.
*/
if (src->trueColor == 0) {
if (bgcolor >= 0) {
bgcolor = gdTrueColorAlpha(src->red[bgcolor], src->green[bgcolor], src->blue[bgcolor], src->alpha[bgcolor]);
}
gdImagePaletteToTrueColor(src);
}
/* no interpolation needed here */
switch (angle_rounded) {
case 9000:

View File

@ -3,6 +3,10 @@ ReflectionMethod::getDocComment() uses left over doc comment from previous scann
--INI--
opcache.save_comments=1
opcache.load_comments=1
--SKIPIF--
<?php
if (!extension_loaded('reflection') || !extension_loaded('tokenizer')) print 'skip missing reflection of tokernizer extension';
?>
--FILE--
<?php

View File

@ -42,8 +42,8 @@ CREDIT_LINE("MS SQL", "Frank M. Kromann");
CREDIT_LINE("Multibyte String Functions", "Tsukada Takuya, Rui Hirokawa");
CREDIT_LINE("MySQL driver for PDO", "George Schlossnagle, Wez Furlong, Ilia Alshanetsky, Johannes Schlueter");
CREDIT_LINE("MySQLi", "Zak Greant, Georg Richter, Andrey Hristov, Ulf Wendel");
CREDIT_LINE("MySQLnd", "Andrey Hristov, Ulf Wendel, Georg Richter");
CREDIT_LINE("MySQL", "Zeev Suraski, Zak Greant, Georg Richter");
CREDIT_LINE("MySQLnd", "Andrey Hristov, Ulf Wendel, Georg Richter, Johannes Schlueter");
CREDIT_LINE("MySQL", "Zeev Suraski, Zak Greant, Georg Richter, Andrey Hristov");
CREDIT_LINE("OCI8", "Stig Bakken, Thies C. Arntzen, Andy Sautins, David Benson, Maxim Maletsky, Harald Radi, Antony Dovgal, Andi Gutmans, Wez Furlong, Christopher Jones, Oracle Corporation");
CREDIT_LINE("ODBC driver for PDO", "Wez Furlong");
CREDIT_LINE("ODBC", "Stig Bakken, Andreas Karajannis, Frank M. Kromann, Daniel R. Kalowsky");

View File

@ -20,6 +20,7 @@
/* $Id: php_cli.c 306938 2011-01-01 02:17:06Z felipe $ */
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <assert.h>
@ -194,17 +195,17 @@ typedef struct php_cli_server {
HashTable clients;
} php_cli_server;
typedef struct php_cli_server_http_reponse_status_code_pair {
typedef struct php_cli_server_http_response_status_code_pair {
int code;
const char *str;
} php_cli_server_http_reponse_status_code_pair;
} php_cli_server_http_response_status_code_pair;
typedef struct php_cli_server_ext_mime_type_pair {
const char *ext;
const char *mime_type;
} php_cli_server_ext_mime_type_pair;
static php_cli_server_http_reponse_status_code_pair status_map[] = {
static php_cli_server_http_response_status_code_pair status_map[] = {
{ 100, "Continue" },
{ 101, "Switching Protocols" },
{ 200, "OK" },
@ -251,7 +252,7 @@ static php_cli_server_http_reponse_status_code_pair status_map[] = {
{ 511, "Network Authentication Required" },
};
static php_cli_server_http_reponse_status_code_pair template_map[] = {
static php_cli_server_http_response_status_code_pair template_map[] = {
{ 400, "<h1>%s</h1><p>Your browser sent a request that this server could not understand.</p>" },
{ 404, "<h1>%s</h1><p>The requested resource <code class=\"url\">%s</code> was not found on this server.</p>" },
{ 500, "<h1>%s</h1><p>The server is temporarily unavailable.</p>" },
@ -337,28 +338,43 @@ static char *get_last_error() /* {{{ */
return pestrdup(strerror(errno), 1);
} /* }}} */
static int status_comp(const void *a, const void *b) /* {{{ */
{
const php_cli_server_http_response_status_code_pair *pa = (const php_cli_server_http_response_status_code_pair *) a;
const php_cli_server_http_response_status_code_pair *pb = (const php_cli_server_http_response_status_code_pair *) b;
if (pa->code < pb->code) {
return -1;
} else if (pa->code > pb->code) {
return 1;
}
return 0;
} /* }}} */
static const char *get_status_string(int code) /* {{{ */
{
size_t e = (sizeof(status_map) / sizeof(php_cli_server_http_reponse_status_code_pair));
size_t s = 0;
php_cli_server_http_response_status_code_pair needle, *result = NULL;
while (e != s) {
size_t c = MIN((e + s + 1) / 2, e - 1);
int d = status_map[c].code;
if (d > code) {
e = c;
} else if (d < code) {
s = c;
} else {
return status_map[c].str;
}
needle.code = code;
needle.str = NULL;
result = bsearch(&needle, status_map, sizeof(status_map) / sizeof(needle), sizeof(needle), status_comp);
if (result) {
return result->str;
}
return NULL;
/* Returning NULL would require complicating append_http_status_line() to
* not segfault in that case, so let's just return a placeholder, since RFC
* 2616 requires a reason phrase. This is basically what a lot of other Web
* servers do in this case anyway. */
return "Unknown Status Code";
} /* }}} */
static const char *get_template_string(int code) /* {{{ */
{
size_t e = (sizeof(template_map) / sizeof(php_cli_server_http_reponse_status_code_pair));
size_t e = (sizeof(template_map) / sizeof(php_cli_server_http_response_status_code_pair));
size_t s = 0;
while (e != s) {

View File

@ -0,0 +1,39 @@
--TEST--
Bug #65066 (Cli server not responsive when responding with 422 http status code): 100 status code
--INI--
allow_url_fopen=1
--SKIPIF--
<?php
include "skipif.inc";
?>
--FILE--
<?php
include "php_cli_server.inc";
php_cli_server_start('http_response_code(100);');
list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS);
$port = intval($port)?:80;
$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
if (!$fp) {
die("connect failed");
}
if(fwrite($fp, <<<HEADER
GET / HTTP/1.1
Host: {$host}
HEADER
)) {
while (!feof($fp)) {
echo fgets($fp);
}
}
?>
--EXPECTF--
HTTP/1.1 100 Continue
Host: %s
Connection: close
X-Powered-By: PHP/%s
Content-type: text/html

View File

@ -0,0 +1,39 @@
--TEST--
Bug #65066 (Cli server not responsive when responding with 422 http status code): 422 status code
--INI--
allow_url_fopen=1
--SKIPIF--
<?php
include "skipif.inc";
?>
--FILE--
<?php
include "php_cli_server.inc";
php_cli_server_start('http_response_code(422);');
list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS);
$port = intval($port)?:80;
$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
if (!$fp) {
die("connect failed");
}
if(fwrite($fp, <<<HEADER
GET / HTTP/1.1
Host: {$host}
HEADER
)) {
while (!feof($fp)) {
echo fgets($fp);
}
}
?>
--EXPECTF--
HTTP/1.1 422 Unknown Status Code
Host: %s
Connection: close
X-Powered-By: PHP/%s
Content-type: text/html

View File

@ -0,0 +1,39 @@
--TEST--
Bug #65066 (Cli server not responsive when responding with 422 http status code): 511 status code
--INI--
allow_url_fopen=1
--SKIPIF--
<?php
include "skipif.inc";
?>
--FILE--
<?php
include "php_cli_server.inc";
php_cli_server_start('http_response_code(511);');
list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS);
$port = intval($port)?:80;
$fp = fsockopen($host, $port, $errno, $errstr, 0.5);
if (!$fp) {
die("connect failed");
}
if(fwrite($fp, <<<HEADER
GET / HTTP/1.1
Host: {$host}
HEADER
)) {
while (!feof($fp)) {
echo fgets($fp);
}
}
?>
--EXPECTF--
HTTP/1.1 511 Network Authentication Required
Host: %s
Connection: close
X-Powered-By: PHP/%s
Content-type: text/html