Commit Graph
1793 Commits
Author SHA1 Message Date
Darko Gjorgjijoski c82371fdde New translations en.json (Romanian) 2026-04-08 10:11:16 +02:00
Darko Gjorgjijoski 7265719fc2 Update source file en.json 2026-04-08 10:05:08 +02:00
mchev 83caff13cd Merge pull request #615 from InvoiceShelf/translations
New Crowdin updates
2026-04-08 09:29:39 +02:00
mchev d2736b1c46 Merge pull request #616 from mchev/taxdecimal
Support 3-decimal tax percentages (e.g. 6.625%)
2026-04-08 09:28:44 +02:00
mchev cdc504f518 Merge pull request #617 from mchev/duplicate_expense
Add duplicate expense action
2026-04-08 09:28:22 +02:00
Darko Gjorgjijoski 2c840b2d97 Bump version from 2.3.2 to 2.3.3 2.3.3 2026-04-07 21:25:20 +02:00
Darko Gjorgjijoski 34db4b7897 Sanitize PDF address fields against SSRF, not just notes
Closes the residual surface from the three published SSRF advisories (GHSA-pc5v-8xwc-v9xq, GHSA-38hf-fq8x-q49r, GHSA-q9wx-ggwq-mcgh / CVE-2026-34365 to 34367). The original fix in 07757e74 only sanitized the Notes field via Invoice/Estimate/Payment::getNotes(), but the same blade templates also render company/billing/shipping address fields with {!! !!} (Blade unescaped output). Those address strings are produced by getCompanyAddress(), getCustomerBillingAddress(), getCustomerShippingAddress() which feed into GeneratesPdfTrait::getFormattedString() — and that method does not call PdfHtmlSanitizer.

Customer-controlled fields (name, street, phone, custom field values) are substituted into address templates via getFieldsArray() without HTML-escaping. A malicious customer name like "Acme <img src='http://attacker/probe'>" therefore reaches Dompdf as raw HTML through the address path, exactly the same CWE-918 SSRF pattern the advisories describe — only blocked today by the secondary defense of dompdf's enable_remote=false. If a self-hoster sets DOMPDF_ENABLE_REMOTE=true for legitimate remote logos, the address surface immediately re-opens.

Move the PdfHtmlSanitizer::sanitize() call into the chokepoint at GeneratesPdfTrait::getFormattedString(), so all four sinks — notes plus the three address fields, on all three models — get the same treatment via a single call site. The explicit wrapper in each model's getNotes() becomes redundant and is removed (along with the now-unused App\Support\PdfHtmlSanitizer imports). Verified getFormattedString() is only called from PDF code paths (no email body callers, which use strtr() directly) so there is no risk of stripping useful HTML from a non-PDF context.

Extends tests/Unit/PdfHtmlSanitizerTest.php with three new cases covering the address-template scenario, iframe/link tag stripping, and on* event handler removal. All 8 tests pass via vendor/bin/pest tests/Unit/PdfHtmlSanitizerTest.php.
2026-04-07 20:39:19 +02:00
mchev beb2a43ed3 Duplicate expense 2026-04-07 19:00:07 +02:00
mchev 7a25a15877 Increasing tax decimal 2026-04-07 18:35:30 +02:00
Darko Gjorgjijoski 8eee4bc4f5 New translations en.json (Serbian (Latin)) 2026-04-07 14:51:02 +02:00
Darko Gjorgjijoski c34cfeea11 New translations en.json (Swahili) 2026-04-07 14:51:01 +02:00
Darko Gjorgjijoski f37edbcc92 New translations en.json (Malay) 2026-04-07 14:50:59 +02:00
Darko Gjorgjijoski ba581313df New translations en.json (Hindi) 2026-04-07 14:50:58 +02:00
Darko Gjorgjijoski 1c1a180dd5 New translations en.json (Latvian) 2026-04-07 14:50:57 +02:00
Darko Gjorgjijoski 8e815fd887 New translations en.json (Estonian) 2026-04-07 14:50:56 +02:00
Darko Gjorgjijoski df612bc773 New translations en.json (Croatian) 2026-04-07 14:50:55 +02:00
Darko Gjorgjijoski 10b2cf5af1 New translations en.json (Thai) 2026-04-07 14:50:53 +02:00
Darko Gjorgjijoski f140256efd New translations en.json (Bengali) 2026-04-07 14:50:52 +02:00
Darko Gjorgjijoski 1ed8e5b2d0 New translations en.json (Persian) 2026-04-07 14:50:50 +02:00
Darko Gjorgjijoski fcb7c96bca New translations en.json (Indonesian) 2026-04-07 14:50:49 +02:00
Darko Gjorgjijoski d587e3fd00 New translations en.json (Portuguese, Brazilian) 2026-04-07 14:50:48 +02:00
Darko Gjorgjijoski 1b26d47539 New translations en.json (Vietnamese) 2026-04-07 14:50:47 +02:00
Darko Gjorgjijoski 340522da19 New translations en.json (Urdu (Pakistan)) 2026-04-07 14:50:45 +02:00
Darko Gjorgjijoski 3ecfcede3e New translations en.json (Chinese Traditional) 2026-04-07 14:50:44 +02:00
Darko Gjorgjijoski 30f76c044a New translations en.json (Chinese Simplified) 2026-04-07 14:50:43 +02:00
Darko Gjorgjijoski 854a8bb50d New translations en.json (Ukrainian) 2026-04-07 14:50:41 +02:00
Darko Gjorgjijoski 1be3132dc4 New translations en.json (Turkish) 2026-04-07 14:50:40 +02:00
Darko Gjorgjijoski fefd856cfb New translations en.json (Swedish) 2026-04-07 14:50:39 +02:00
Darko Gjorgjijoski e5fe62e4de New translations en.json (Albanian) 2026-04-07 14:50:38 +02:00
Darko Gjorgjijoski 129d63c5b1 New translations en.json (Slovenian) 2026-04-07 14:50:37 +02:00
Darko Gjorgjijoski 65e9182272 New translations en.json (Slovak) 2026-04-07 14:50:35 +02:00
Darko Gjorgjijoski 3abcba2752 New translations en.json (Russian) 2026-04-07 14:50:34 +02:00
Darko Gjorgjijoski 6c1e51d126 New translations en.json (Portuguese) 2026-04-07 14:50:33 +02:00
Darko Gjorgjijoski c1b8ba448d New translations en.json (Polish) 2026-04-07 14:50:31 +02:00
Darko Gjorgjijoski ab5ea81424 New translations en.json (Norwegian) 2026-04-07 14:50:30 +02:00
Darko Gjorgjijoski befd69fdb2 New translations en.json (Dutch) 2026-04-07 14:50:29 +02:00
Darko Gjorgjijoski 417b92ad9f New translations en.json (Macedonian) 2026-04-07 14:50:27 +02:00
Darko Gjorgjijoski d6b1e102fe New translations en.json (Lithuanian) 2026-04-07 14:50:26 +02:00
Darko Gjorgjijoski d7bf942da2 New translations en.json (Georgian) 2026-04-07 14:50:25 +02:00
Darko Gjorgjijoski 5db82db958 New translations en.json (Japanese) 2026-04-07 14:50:24 +02:00
Darko Gjorgjijoski c63355391a New translations en.json (Italian) 2026-04-07 14:50:22 +02:00
Darko Gjorgjijoski de3c8f89fb New translations en.json (Hungarian) 2026-04-07 14:50:21 +02:00
Darko Gjorgjijoski cab4c62c5d New translations en.json (Hebrew) 2026-04-07 14:50:20 +02:00
Darko Gjorgjijoski 4b634f96c9 New translations en.json (Finnish) 2026-04-07 14:50:19 +02:00
Darko Gjorgjijoski 9ef0932c6e New translations en.json (Greek) 2026-04-07 14:50:17 +02:00
Darko Gjorgjijoski d122c8c95a New translations en.json (German) 2026-04-07 14:50:16 +02:00
Darko Gjorgjijoski 820073e8e0 New translations en.json (Danish) 2026-04-07 14:50:14 +02:00
Darko Gjorgjijoski 80c14b4b7f New translations en.json (Czech) 2026-04-07 14:50:13 +02:00
Darko Gjorgjijoski 174acbf70e New translations en.json (Catalan) 2026-04-07 14:50:12 +02:00
Darko Gjorgjijoski c93b8f0da9 New translations en.json (Bulgarian) 2026-04-07 14:50:11 +02:00