diff options
| author | mbkma <[email protected]> | 2026-09-28 12:56:37 +0200 |
|---|---|---|
| committer | mbkma <[email protected]> | 2026-10-06 08:44:03 +0200 |
| commit | 6d0ef84fb65aa9bdf2a0a37018e286a29dfa0405 (patch) | |
| tree | 91516d05de4dd9efd3c0d793b10574e5d36d4b52 | |
| parent | 9dc963c93bda7a20408623dd13d1560c57c5bcf1 (diff) | |
| download | atril-sign.tar.bz2 atril-sign.tar.xz | |
fix black sign rectangle, add WITHOUT_OCSP_REVOCATION_CHECK if the check returns a generic errorsign
| -rw-r--r-- | backend/pdf/ev-poppler.cc | 49 | ||||
| -rw-r--r-- | configure.ac | 16 |
2 files changed, 55 insertions, 10 deletions
diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc index b7c388c4..72394b93 100644 --- a/backend/pdf/ev-poppler.cc +++ b/backend/pdf/ev-poppler.cc @@ -3426,13 +3426,42 @@ pdf_document_signatures_get_signature_state (EvDocumentSignatures *document, NULL, &error); if (!signature_info) { + if (error) + g_warning ("Signature validation failed: %s", error->message); all_valid = FALSE; continue; } - signature_status = poppler_signature_info_get_signature_status (signature_info); certificate_status = poppler_signature_info_get_certificate_status (signature_info); + /* POPPLER_CERTIFICATE_GENERIC_ERROR here means the online OCSP + * revocation check itself could not complete (no network, or no + * OCSP responder configured on the certificate) -- an actual + * revocation is reported as POPPLER_CERTIFICATE_REVOKED regardless + * of this retry, so this never masks a real revocation. Retry + * without OCSP so an otherwise-trusted chain whose revocation + * status merely couldn't be checked isn't reported as broken. */ + if (certificate_status == POPPLER_CERTIFICATE_GENERIC_ERROR) { + g_autoptr(GError) retry_error = NULL; + PopplerSignatureInfo *retry_info; + + retry_info = poppler_form_field_signature_validate_sync (field, + (PopplerSignatureValidationFlags) + (POPPLER_SIGNATURE_VALIDATION_FLAG_VALIDATE_CERTIFICATE | + POPPLER_SIGNATURE_VALIDATION_FLAG_WITHOUT_OCSP_REVOCATION_CHECK), + NULL, + &retry_error); + if (retry_info) { + poppler_signature_info_free (signature_info); + signature_info = retry_info; + certificate_status = poppler_signature_info_get_certificate_status (signature_info); + } else if (retry_error) { + g_warning ("Signature validation retry (without OCSP) failed: %s", retry_error->message); + } + } + + signature_status = poppler_signature_info_get_signature_status (signature_info); + switch (signature_status) { case POPPLER_SIGNATURE_VALID: break; @@ -3528,9 +3557,9 @@ pdf_document_signatures_sign (EvDocumentSignatures *document, poppler_signing_data_set_signature_text_left (signing_data, data->signature_left); color = poppler_color_new (); - color->red = data->font_color.red * 255; - color->green = data->font_color.green * 255; - color->blue = data->font_color.blue * 255; + color->red = data->font_color.red * 65535; + color->green = data->font_color.green * 65535; + color->blue = data->font_color.blue * 65535; poppler_signing_data_set_font_color (signing_data, color); g_clear_pointer (&color, poppler_color_free); @@ -3539,16 +3568,16 @@ pdf_document_signatures_sign (EvDocumentSignatures *document, poppler_signing_data_set_border_width (signing_data, data->border_width); color = poppler_color_new (); - color->red = data->border_color.red * 255; - color->green = data->border_color.green * 255; - color->blue = data->border_color.blue * 255; + color->red = data->border_color.red * 65535; + color->green = data->border_color.green * 65535; + color->blue = data->border_color.blue * 65535; poppler_signing_data_set_border_color (signing_data, color); g_clear_pointer (&color, poppler_color_free); color = poppler_color_new (); - color->red = data->background_color.red * 255; - color->green = data->background_color.green * 255; - color->blue = data->background_color.blue * 255; + color->red = data->background_color.red * 65535; + color->green = data->background_color.green * 65535; + color->blue = data->background_color.blue * 65535; poppler_signing_data_set_background_color (signing_data, color); g_clear_pointer (&color, poppler_color_free); diff --git a/configure.ac b/configure.ac index 3ff04caa..87ca738a 100644 --- a/configure.ac +++ b/configure.ac @@ -434,6 +434,21 @@ fi AM_CONDITIONAL(ENABLE_PDF, test x$enable_pdf = xyes) dnl ================== end of pdf checks ============================================ +dnl ================== pdf digital signing checks =================================== +dnl The PDF backend always calls poppler-glib's signing/validation API +dnl (poppler_document_sign and friends) when PDF support is enabled, so this +dnl is informational only: it reports whether the poppler-glib found above +dnl actually declares that API, it does not disable the PDF backend. +enable_pdf_signing=no +if test "x$enable_pdf" = "xyes"; then + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $POPPLER_CFLAGS" + AC_CHECK_DECLS([poppler_document_sign], [enable_pdf_signing=yes], [enable_pdf_signing=no], + [#include <poppler.h>]) + CFLAGS="$save_CFLAGS" +fi +dnl ================== end of pdf digital signing checks ============================= + dnl libspectre (used by ps and dvi backends) SPECTRE_REQUIRED=0.2.0 PKG_CHECK_MODULES(SPECTRE, libspectre >= $SPECTRE_REQUIRED,have_spectre=yes,have_spectre=no) @@ -792,6 +807,7 @@ Configure summary: Tests...............: $enable_tests PDF Backend.........: $enable_pdf + PDF Digital Signing.: $enable_pdf_signing Synctex enabled.....: $enable_synctex PostScript Backend..: $enable_ps TIFF Backend........: $enable_tiff |
