Segfaults do Apache ao fazer upload de qualquer arquivo

1

Eu tenho a configuração padrão do Ubuntu Server 12.04 no micro instância do Amazon EC2. Eu configurei o usual, PHP, Apache, MySQL, etc. Tudo roda ok, até eu tentar fazer upload de algum arquivo via PHP. O tamanho do arquivo não importa. Acontece mesmo com o arquivo jpeg de 5kb. O que eu recebo é:

[Thu Nov 08 18:52:11 2012] [notice] child pid 1199 exit signal Segmentation fault (11)

Quando executo o mesmo código, mas sem fixar a imagem, funciona (mas preciso da imagem, é claro)

Eu tenho que notar que exatamente o mesmo código está funcionando muito bem em uma máquina OpenSUSE 11.1, estou apenas movendo-o na instância do Amazon para testes adicionais. Eu configurei dezenas de servidores e nunca encontrei esse erro. Eu realmente estou presa, pois não encontrei nada relacionado.

uname -a dá

Linux server 3.2.0-31-virtual #50-Ubuntu SMP Fri Sep 7 16:36:36 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

Apache / 2.2.22 (Ubuntu), PHP 5.3.10-1ubuntu3.4

variáveis php:

post_max_size   150M
memory_limit    256M
upload_max_filesize 150M

Nota: Eu também adicionei o arquivo de swap 2Gb, e também testei o mesmo em uma instância EC2 maior com 1.7Gb de RAM, apenas no caso, e o resultado foi exatamente o mesmo, então não é memória suficiente.

    
por kkazakov 08.11.2012 / 20:03

1 resposta

0

Eu finalmente resolvi isso. Acontece que há um bug no método imagefillborder (). Consegui rastreá-lo para essas linhas, ambas com falha:

Eu tenho que notar que este código funciona no PHP 5.2.x, então isso significa que é um novo bug introduzido no 5.3.x.

Meu tamanho de imagem é 296 px x 296 px. Estou criando cantos arredondados e preenchendo todos os quatro cantos com uma cor. Esses que falham são os cantos superior direito e inferior direito (observe que o segundo valor corresponde ao tamanho da imagem). Quando eu decremento com 1px, funciona como suposto.

Erro realmente estranho.

Este um segfaults:

imagefilltoborder(Resource id #95, 296, 0, 1924607, 1924607);
imagefilltoborder(Resource id #95, 296, 296, 1924607, 1924607);

Este funciona:

imagefilltoborder(Resource id #96, 296-1, 0, 11333839, 11333839);
imagefilltoborder(Resource id #96, 296-1, 296-1, 11333839, 11333839);
    
por 09.11.2012 / 06:29