summaryrefslogtreecommitdiff
path: root/src/fl_images_core.cxx
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-03-04 21:15:47 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-03-04 21:15:47 +0100
commit72840ea2c12c41b36aff623b18f9c219ae085da3 (patch)
treebc3321cb09159b6f267959fd7dd8c02896343691 /src/fl_images_core.cxx
parentad7d1dc1c64f47ccfaf84d03aeb31af29232e184 (diff)
Fix: Filechooser preview of XML file shows it as a corrupt image (#926)
Diffstat (limited to 'src/fl_images_core.cxx')
-rw-r--r--src/fl_images_core.cxx20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/fl_images_core.cxx b/src/fl_images_core.cxx
index 431e7c98c..45835fa20 100644
--- a/src/fl_images_core.cxx
+++ b/src/fl_images_core.cxx
@@ -36,6 +36,7 @@
#include <FL/fl_utf8.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "flstring.h"
#if defined(HAVE_LIBZ)
#include <zlib.h>
@@ -125,7 +126,7 @@ fl_check_images(const char *name, // I - Filename
// SVG or SVGZ (gzip'ed SVG)
#ifdef FLTK_USE_SVG
- uchar header2[64]; // buffer for decompression
+ uchar header2[300]; // buffer for decompression
uchar *buf = header; // original header data
int count = headerlen; // original header data size
@@ -158,11 +159,18 @@ fl_check_images(const char *name, // I - Filename
}
// Check svg or xml signature
-
- if ((count >= 5 &&
- (memcmp(buf, "<?xml", 5) == 0 ||
- memcmp(buf, "<svg", 4) == 0)))
- return new Fl_SVG_Image(name);
+ bool found_svg = false;
+ if (memcmp(buf, "<svg", 4) == 0) found_svg = true;
+ else if (memcmp(buf, "<?xml", 5) == 0) {
+ uchar *p = buf;
+ do {
+ if (memcmp(p, "<svg", 4) == 0) {
+ found_svg = true;
+ break;
+ }
+ } while (++p < buf + count - 4);
+ }
+ if (found_svg) return new Fl_SVG_Image(name);
#endif // FLTK_USE_SVG
// unknown image format