ctt-gob-es / clienteafirma

Cliente @firma
http://administracionelectronica.gob.es/ctt/clienteafirma
246 stars 120 forks source link

Autofirma se cierra inesperadamente al ser llamado desde rutas con emoticonos #382

Open gonzaleztroyano opened 3 months ago

gonzaleztroyano commented 3 months ago

Tl;DR: Autofirma no arranca cuando la ruta tiene emoticonos.

Descripción del problema

El problema ocurre al iniciar Autofirma (en última versión) desde el menú contextual de Windows, tanto en la opción de Firmar con Autofirma, como la de Generar huella digital, así como la de Verificar con Autofirma (esta última opción para archivos ya firmados, claro).

Aparece el loader de Autofirma, pero se cierra inesperadamente pasados unos segundos.

Detalles técnicos

Versión Autofirma: v1.8.2 Versión Windows: Windows 11 Pro Version 23H2 OS build 22631.3155 Version de Java: 17.0.6 Arquitectura del JRE: 64 Java Vendor: Eclipse Adoptium

logs

El archivo de log ubicado en %HOMEPATH%\.afirma\AUTOFIRMA.afirma.log.xml no muestra nada. Contenido completo tras la ejecución:

<?xml version="1.0" encoding="windows-1252" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
</log>

Ejecución vía CLI

Utilizando un archivo de ejemplo parece ser que internamente parece convertir los emoticonos en signos de interrogación de cierre (?):

PS C:\Program Files\AutoFirma\AutoFirma> AutoFirmaCommandLine verify -i "C:\Users\pablo\Downloads\🤛🏼🫡❤️❤️\ejemplo.xlsx_signed.csig"
El fichero de entrada no existe: C:\Users\pablo\Downloads\??????????\ejemplo.xlsx_signed.csig

CAU Abierto (y cerrado)

Se remitieron los detalles, así como un vídeo reproduciendo los problemas en la Incidencia # 102200, creada a través del Centro de Servicios. Esta fue cerrada sin detalles, redirigiéndome al 060. Se puede remitir sin problemas a los mantenedores del proyecto.

Disponible para la realización de cualquier prueba adicional. ¡Un saludo y muchas gracias!

Gamuci commented 3 months ago

He estado haciendo pruebas y parece ser que el problema de la compatibilidad con estas rutas está en la codificación por defecto de Windows. AutoFirma interpreta los parámetros de entrada en UTF-8, pero la codificación de los emoticonos que le llegan no coincide y no se encuentra la ruta especificada. He probado en Linux y ahí sí que funcionan las rutas con estos caracteres. También he probado a cambiar la codificación por defecto en Windows 11 (en "Panel de Control" -> "Región" -> Pestaña "Administrativo" -> "Cambiar configuración regional del sistema" he activado la casilla "Versión beta: Use UTF-8 Unicode para la compatibilidad de idioma en todo el mundo") y, después de reiniciar, también me ha funcionado bien con rutas con emoticonos, tanto desde consola como al iniciar una firma a través del menú contextual.

Sobre el soporte de emoticonos no se va a hacer nada, ya que dependemos del sistema, pero sí se va a corregir el que la aplicación se cierre sin advertir al usuario cuando falla la carga del fichero. Lo correcto sería que se muestre un error mediante un diálogo o por consola según si se ejecutó una operación con interfaz gráfica o no. Lo que no puedo asegurar es que el cambio llegue a tiempo para AutoFirma 1.9.

gonzaleztroyano commented 3 months ago

Hola:

Verificación

Efectivamente, tras activar la versión beta de compatibilidad UTF-8, se puede verificar una firma:

Resultado al verificar

Sí es cierto que se muestran varios Fatal Error al lanzar el comando desde consola ([1]):

[Fatal Error] :1:1: Invalid byte 1 of 1-byte UTF-8 sequence.

Estos errores no se muestran al ser llamada la función de verificar desde el menú contextual (GUI). Por otro lado, en la interfaz de Autofirma no se muestran correctamente los caracteres en la codificación UTF-8 ([2]).

Firma

Similar al caso anterior, sí es posible firmar desde la GUI (llamando a AutoFirma desde el menú contextual). Se firma correctamente, no muestra error ninguno; y el fichero generado es validado por Autofirma, posteriormente.

Si se llama a AutoFirma desde consola (el proceso se completa vía GUI, eso sí), se muestran mensajes de error distintos al caso de verificación; aunque sí firma correctamente y el fichero resultante puede ser verificado por el programa como firma correcta.

Resultado al firmar

Tal y como se puede ver en la captura, al lanzar el programa, en la carga del archivo se generan las siguientes salidas a la consola:

[Fatal Error] :1:1: Content is not allowed in prolog. ## x8

Durante el proceso de firma, una vez seleccionado el certificado deseado y la ruta para el resultado, se genera la siguiente salida (misma salida que en el caso de verificación):

[Fatal Error] :1:1: Invalid byte 1 of 1-byte UTF-8 sequence.

Huellas digitales

Se verifica que, tanto a través de GUI como la CLI, es posible generar huellas digitales.

Próximos pasos

Respecto a lo comentado sobre la solución a implementar:

Sobre el soporte de emoticonos no se va a hacer nada, ya que dependemos del sistema, pero sí se va a corregir el que la aplicación se cierre sin advertir al usuario cuando falla la carga del fichero. Lo correcto sería que se muestre un error mediante un diálogo o por consola según si se ejecutó una operación con interfaz gráfica o no. Lo que no puedo asegurar es que el cambio llegue a tiempo para AutoFirma 1.9.

Okay a todo. Si efectivamente no es posible corregir el tema del soporte de emoticonos al depender del sistema, nada que hacer en ese sentido. Aunque sí, como comentas, @Gamuci, sería interesante que se mostrasen mensajes de error (por la vía más oportuna en cada sentido) alertando al usuario de la situación que se ha generado.

Si fuese posible distinguir entre tipos de errores, opino, sería interesante especificar si se trata de emoticonos, así como con un enlace a una FAQ sobre cómo solucionarlo (lo comentado UTF-8, mover/renombrar el archivo, lo que sea).

Sería fantástico si estos mensajes de error, así como todos los mostrados por AutoFirma, siguieran las buenas prácticas de la industria y las recomendaciones de UX.

Si no fuera posible que estas correcciones fuesen incluidas en la versión 1.9, tampoco es algo grave, pues el error no es crítico y estoy seguro afecta a un número bastante limitado de usuarios/as.

¡Muchísimas gracias por todo!