MarcosBL

Aprendiz de todo, maestro de nada

Bug detectado en escapeshellarg() y escapeshellcmd()

Con la mudanza de servidores, me he encontrado un fallo curioso en PHP, que además debo decir afecta a todas sus versiones. El bug ya lo he publicado en su ticket correspondiente y mencionado como «user note» en php.net.

Resumiendo, cuando utilizaba la función escapeshellarg() (también afecta a escapeshellcmd) para «sanitizar» una linea de comandos a ejecutar, escapeshellarg() se cargaba los acentos y caracteres extendidos (á, ü, €, etc…) . Tratándose como era de un software para tratamiento de textos, eso hacia el servicio totalmente inusable. Al final descubrí que era porque PHP utiliza el encoding por defecto de la consola para realizar el «sanitize», incluso antes de llamar a consola. Como mi variable de consola LC_ALL estaba vacía, esto producía el error mencionado.

Para solucionarlo, bastó con un simple

root@machine:> export LC_ALL=es_ES.utf8

y reiniciar Apache para que recogiese la nueva variable.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *