bump svg header size to 1000 bytes
see https://github.com/jcupitt/libvips/pull/543
This commit is contained in:
parent
5ec605c98c
commit
495e0b2d14
@ -67,9 +67,13 @@
|
|||||||
#include <cairo.h>
|
#include <cairo.h>
|
||||||
#include <librsvg/rsvg.h>
|
#include <librsvg/rsvg.h>
|
||||||
|
|
||||||
|
/* The <svg tag must appear within this many bytes of the start of the file.
|
||||||
|
*/
|
||||||
|
#define SVG_HEADER_SIZE (1000)
|
||||||
|
|
||||||
/* The maximum pixel width librsvg is able to render.
|
/* The maximum pixel width librsvg is able to render.
|
||||||
*/
|
*/
|
||||||
#define RSVG_MAX_WIDTH 32767
|
#define RSVG_MAX_WIDTH (32767)
|
||||||
|
|
||||||
/* Old librsvg versions don't include librsvg-features.h by default.
|
/* Old librsvg versions don't include librsvg-features.h by default.
|
||||||
* Newer versions deprecate direct inclusion.
|
* Newer versions deprecate direct inclusion.
|
||||||
@ -197,7 +201,7 @@ vips_foreign_load_svg_is_a( const void *buf, size_t len )
|
|||||||
*
|
*
|
||||||
* Simple rules:
|
* Simple rules:
|
||||||
* - first 24 chars are plain ascii
|
* - first 24 chars are plain ascii
|
||||||
* - first 300 chars contain "<svg", upper or lower case.
|
* - first SVG_HEADER_SIZE chars contain "<svg", upper or lower case.
|
||||||
*
|
*
|
||||||
* We could rsvg_handle_new_from_data() on the buffer, but that can be
|
* We could rsvg_handle_new_from_data() on the buffer, but that can be
|
||||||
* horribly slow for large documents.
|
* horribly slow for large documents.
|
||||||
@ -207,7 +211,7 @@ vips_foreign_load_svg_is_a( const void *buf, size_t len )
|
|||||||
for( i = 0; i < 24; i++ )
|
for( i = 0; i < 24; i++ )
|
||||||
if( !isascii( str[i] ) )
|
if( !isascii( str[i] ) )
|
||||||
return( FALSE );
|
return( FALSE );
|
||||||
for( i = 0; i < 300 && i < len - 5; i++ )
|
for( i = 0; i < SVG_HEADER_SIZE && i < len - 5; i++ )
|
||||||
if( g_ascii_strncasecmp( str + i, "<svg", 4 ) == 0 )
|
if( g_ascii_strncasecmp( str + i, "<svg", 4 ) == 0 )
|
||||||
return( TRUE );
|
return( TRUE );
|
||||||
|
|
||||||
@ -462,10 +466,11 @@ G_DEFINE_TYPE( VipsForeignLoadSvgFile, vips_foreign_load_svg_file,
|
|||||||
static gboolean
|
static gboolean
|
||||||
vips_foreign_load_svg_file_is_a( const char *filename )
|
vips_foreign_load_svg_file_is_a( const char *filename )
|
||||||
{
|
{
|
||||||
unsigned char buf[300];
|
unsigned char buf[SVG_HEADER_SIZE];
|
||||||
guint64 bytes;
|
guint64 bytes;
|
||||||
|
|
||||||
return( (bytes = vips__get_bytes( filename, buf, 300 )) > 0 &&
|
return( (bytes = vips__get_bytes( filename,
|
||||||
|
buf, SVG_HEADER_SIZE )) > 0 &&
|
||||||
vips_foreign_load_svg_is_a( buf, bytes ) );
|
vips_foreign_load_svg_is_a( buf, bytes ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user