ctt-gob-es / clienteafirma

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

Numbers of source Raster bands and source color space components do not match [Linux] #161

Closed lorenzogrv closed 3 years ago

lorenzogrv commented 3 years ago

Saludos,

Últimamente me estoy encontrando este error al firmar ciertos formularios PDF, y aún no he llegado a la raíz del problema. Creo que el problema viene de los pdf en sí y no de la aplicación, pero de algún modo la aplicación no se comporta como creo que debería, dado que no informa del error.

He investigado en los issues de este repo, que en otras ocasiones - hoy incluída - me han ayudado a comprender y solucionar otros problemas con AutoFirma, pero en este caso no logré encontrar nada similar que me de pistas para seguir.

Decidí crear este issue, quizás alguien de por aquí se lo ha encontrado alguna vez o puede compartir indicaciones sobre cómo bucear en el origen del problema. Si alguien es capaz de confirmarme que puede reproducir el problema, también sería un avance. Por mi parte sobre cualquier idea puedo hacer alguna prueba, o añadir información.

Trace completo del error:

Exception in thread "Thread-7" java.lang.IllegalArgumentException: Numbers of source Raster bands and source color space components do not match
    at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:482)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(JPEGImageReader.java:1288)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1255)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1058)
    at org.apache.pdfbox.filter.DCTFilter.decode(DCTFilter.java:91)
    at org.apache.pdfbox.cos.COSInputStream.create(COSInputStream.java:77)
    at org.apache.pdfbox.cos.COSStream.createInputStream(COSStream.java:175)
    at org.apache.pdfbox.pdmodel.common.PDStream.createInputStream(PDStream.java:241)
    at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.createInputStream(PDImageXObject.java:729)
    at org.apache.pdfbox.pdmodel.graphics.image.SampledImageReader.from8bit(SampledImageReader.java:367)
    at org.apache.pdfbox.pdmodel.graphics.image.SampledImageReader.getRGBImage(SampledImageReader.java:225)
    at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.getImage(PDImageXObject.java:443)
    at org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject.getImage(PDImageXObject.java:424)
    at org.apache.pdfbox.rendering.PageDrawer.drawImage(PageDrawer.java:1034)
    at org.apache.pdfbox.contentstream.operator.graphics.DrawObject.process(DrawObject.java:62)
    at org.apache.pdfbox.contentstream.PDFStreamEngine.processOperator(PDFStreamEngine.java:848)
    at org.apache.pdfbox.contentstream.PDFStreamEngine.processStreamOperators(PDFStreamEngine.java:503)
    at org.apache.pdfbox.contentstream.PDFStreamEngine.processStream(PDFStreamEngine.java:477)
    at org.apache.pdfbox.contentstream.PDFStreamEngine.processPage(PDFStreamEngine.java:150)
    at org.apache.pdfbox.rendering.PageDrawer.drawPage(PageDrawer.java:254)
    at org.apache.pdfbox.rendering.PDFRenderer.renderImage(PDFRenderer.java:245)
    at org.apache.pdfbox.rendering.PDFRenderer.renderImageWithDPI(PDFRenderer.java:179)
    at es.gob.afirma.standalone.ui.pdf.Pdf2ImagesConverter.pdf2ImagesUsefulSections(Pdf2ImagesConverter.java:61)
    at es.gob.afirma.standalone.ui.pdf.PdfLoader.lambda$loadPdf$0(PdfLoader.java:37)
    at java.lang.Thread.run(Thread.java:748)

Pasos para reproducir

  1. Se puede usar este fichero pdf, anexo de un procedimiento de la Xunta de Galicia
  2. Abrir el cliente de AutoFirma, seleleccionar el fichero
  3. Marcar "Hacer la firma visible dentro del PDF"
  4. Intentar Firmar el fichero con el botón correspondiente
  5. Observar la traza del error en el log

Info del environment

> uname -v
#57~18.04.1-Ubuntu SMP Thu Oct 15 14:04:49 UTC 2020
> uname -m
x86_64
> uname -r
5.4.0-52-generic

> java -version
openjdk version "1.8.0_265"
OpenJDK Runtime Environment (build 1.8.0_265-8u265-b01-0ubuntu2~18.04-b01)
OpenJDK 64-Bit Server VM (build 25.265-b01, mixed mode)

> apt show autofirma
Package: autofirma
Version: 1.6.5
Status: install ok installed
Priority: optional
Section: utils
Maintainer: Gobierno de Espana <soporte.afirma@correo.gob.es>
Installed-Size: 48,4 MB
Depends: libnss3-tools
Homepage: https://administracionelectronica.gob.es/ctt/clienteafirma
Recomends: openjdk-11-jre
License: GPL-2+ | EUPL-1.1
Download-Size: desconocido
APT-Manual-Installed: yes
APT-Sources: /var/lib/dpkg/status
Description: AutoFirma - Cliente @firma
lorenzogrv commented 3 years ago

Sorry, casi me olvido de la info del fichero:

> wget https://sede.xunta.gal/doc-invia/rest/anexos/23258696
(...)

> file 23258696 
23258696: PDF document, version 1.6

> pdfinfo 23258696 
Title:          Servidor Repositorio Solicitude
Author:         webadm
Creator:        Adobe LiveCycle Designer ES 9.0
Producer:       Adobe LiveCycle Designer ES 9.0
CreationDate:   Fri Feb 21 13:27:10 2020 CET
ModDate:        Fri Feb 21 13:29:14 2020 CET
Tagged:         yes
UserProperties: no
Suspects:       no
Form:           XFA
JavaScript:     yes
Pages:          1
Encrypted:      no
Page size:      594.935 x 841.969 pts (A4)
Page rot:       0
File size:      2145190 bytes
Optimized:      yes
PDF version:    1.6
clawgrip commented 3 years ago

Hola Lorenzo, Bastante curioso el error, es un JPEG que Java (Java Image I/O) no consigue decodificar... Voy a echarle un vistazo.

¡Gracias!

clawgrip commented 3 years ago

Arreglado, ha sido fácil. Esos JPEGs están mal formados, y Java no tolera incorrecciones respecto al estándar JPEG. Instalando un plugin de Java Image I/O más tolerante con los JPEG mal formados se resuelve el problema.

lorenzogrv commented 3 years ago

@clawgrip lo último que me esperaba cuando abrí el issue era verlo solucionado y pusheado en 3 horas! XD

Intenté construír el cliente para probarlo, pero con la información que encontré - y mis nulos conocimientos de maven y el ecosistema de java - no fuí capaz.

De cualquier modo me alegra si la info fué útil de cara a un futuro release.

Saludos, L.