Bug Report
Note: This is not a bug in LibreSign itself, but a heads-up about a bug in a vendored dependency that affects LibreSign users.
Summary
When uploading certain PDF files (e.g. PDFs with Type1 fonts where is an indirect object reference), LibreSign throws a fatal error:
This originates in the vendored library at:
Root Cause
The PDF spec (Table 5.11) allows a font's entry to be either a name or an indirect reference to an encoding dictionary (). When it is an indirect reference, tried to cast the to string via , which throws a in PHP 8+ because has no .
The affected PDF is not corrupt — it is valid per the PDF specification.
Upstream Fix
This has been reported and fixed upstream in :
The fix adds a type-safe branch in that handles encoding dictionaries by reading the header entry instead of casting to string.
Request
Please update the vendored in to a version that includes the upstream fix (once merged), so that LibreSign users are no longer affected by this error.
Environment
- Nextcloud version: 33.0.5.1
- LibreSign vendored pdfparser commit:
- PHP version: 8.x
- Triggered by: Uploading a EncodingAsIndirectPDFObject.pdf PDF with Type1 fonts using indirect references
Nextcloud Log
Workaround
Until the vendored library is updated, the fix can be applied manually to:
3rdparty/composer/smalot/pdfparser/src/Smalot/PdfParser/Font.php
Replace the Encoding line in getDetails() with:
\$encoding = \$this->has('Encoding') ? \$this->get('Encoding') : null;
if (\$encoding instanceof PDFObject) {
\$baseEncoding = \$encoding->getHeader()->get('BaseEncoding');
\$details['Encoding'] = (\$baseEncoding instanceof Element && (string) \$baseEncoding !== '')
? (string) \$baseEncoding
: 'Ansi';
} elseif (\$encoding instanceof Element) {
\$details['Encoding'] = (string) \$encoding;
} else {
\$details['Encoding'] = 'Ansi';
}
Bug Report
Note: This is not a bug in LibreSign itself, but a heads-up about a bug in a vendored dependency that affects LibreSign users.
Summary
When uploading certain PDF files (e.g. PDFs with Type1 fonts where is an indirect object reference), LibreSign throws a fatal error:
This originates in the vendored library at:
Root Cause
The PDF spec (Table 5.11) allows a font's entry to be either a name or an indirect reference to an encoding dictionary (). When it is an indirect reference, tried to cast the to string via , which throws a in PHP 8+ because has no .
The affected PDF is not corrupt — it is valid per the PDF specification.
Upstream Fix
This has been reported and fixed upstream in :
The fix adds a type-safe branch in that handles encoding dictionaries by reading the header entry instead of casting to string.
Request
Please update the vendored in to a version that includes the upstream fix (once merged), so that LibreSign users are no longer affected by this error.
Environment
Nextcloud Log
Workaround
Until the vendored library is updated, the fix can be applied manually to:
3rdparty/composer/smalot/pdfparser/src/Smalot/PdfParser/Font.phpReplace the
Encodingline ingetDetails()with: