summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2021-07-03 18:59:19 +0200
committerAlbrecht Schlosser <albrechts.fltk@online.de>2021-07-03 19:10:38 +0200
commitce26f04f2d478bbf71bb72032dd0f07d75e629bf (patch)
tree22bb598065e4334ceb04ce88a34064767c627603 /src
parent6361e7d1b794113c8b5869a76b6936daa47b0a06 (diff)
Check for valid length and simplify BOM check (#247)
Diffstat (limited to 'src')
-rw-r--r--src/fl_images_core.cxx19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/fl_images_core.cxx b/src/fl_images_core.cxx
index 260e9281c..1392652a3 100644
--- a/src/fl_images_core.cxx
+++ b/src/fl_images_core.cxx
@@ -145,8 +145,23 @@ fl_check_images(const char *name, // I - Filename
buf += lutf8; count -= lutf8;
}
- if ((count >= 5 && memcmp(buf, "<?xml", 5) == 0) ||
- (count >= 4 && memcmp(buf, "<svg", 4) == 0))
+ // Check if we have a UTF-8 BOM in the first three bytes (issue #247).
+ // If yes we need at least 5 more bytes to recognize the signature.
+ // Note: BOM (Byte Order Marker) in UTF-8 is not recommended but allowed.
+
+ if (count >= 8) {
+ const uchar bom[3] = { 0xef, 0xbb, 0xbf };
+ if (memcmp(buf, bom, 3) == 0) {
+ buf += 3;
+ count -= 3;
+ }
+ }
+
+ // Check svg or xml signature
+
+ if ((count >= 5 &&
+ (memcmp(buf, "<?xml", 5) == 0 ||
+ memcmp(buf, "<svg ", 5) == 0)))
return new Fl_SVG_Image(name);
#endif // FLTK_USE_SVG