diff --git a/cplusplus/meson.build b/cplusplus/meson.build index 2f65d13a..f00e58ab 100644 --- a/cplusplus/meson.build +++ b/cplusplus/meson.build @@ -9,6 +9,7 @@ libvips_cpp_lib = library('vips-cpp', dependencies: libvips_dep, include_directories: libvips_cpp_includedir, version: library_version, + darwin_versions: darwin_versions, gnu_symbol_visibility: 'hidden', install: true, ) diff --git a/libvips/foreign/csvload.c b/libvips/foreign/csvload.c index 815648bc..6ffffd9a 100644 --- a/libvips/foreign/csvload.c +++ b/libvips/foreign/csvload.c @@ -657,7 +657,7 @@ vips_foreign_load_csv_source_class_init( VipsForeignLoadCsvFileClass *class ) object_class->nickname = "csvload_source"; object_class->build = vips_foreign_load_csv_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_csv_source_is_a_source; diff --git a/libvips/foreign/fitsload.c b/libvips/foreign/fitsload.c index cdf67b97..d067ab3a 100644 --- a/libvips/foreign/fitsload.c +++ b/libvips/foreign/fitsload.c @@ -188,7 +188,7 @@ vips_foreign_load_fits_class_init( VipsForeignLoadFitsClass *class ) /* cfitsio has not been fuzzed, so should not be used with * untrusted input unless you are very careful. */ - operation_class->flags = VIPS_OPERATION_UNTRUSTED; + operation_class->flags |= VIPS_OPERATION_UNTRUSTED; /* is_a() is not that quick ... lower the priority. */ @@ -332,7 +332,7 @@ vips_foreign_load_fits_source_class_init( object_class->description = _( "load FITS from a source" ); object_class->build = vips_foreign_load_fits_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_fits_source_is_a_source; diff --git a/libvips/foreign/fitssave.c b/libvips/foreign/fitssave.c index cc7c7e6d..fc58852a 100644 --- a/libvips/foreign/fitssave.c +++ b/libvips/foreign/fitssave.c @@ -133,7 +133,7 @@ vips_foreign_save_fits_class_init( VipsForeignSaveFitsClass *class ) /* cfitsio has not been fuzzed, so should not be used with * untrusted input unless you are very careful. */ - operation_class->flags = VIPS_OPERATION_UNTRUSTED; + operation_class->flags |= VIPS_OPERATION_UNTRUSTED; foreign_class->suffs = vips__fits_suffs; diff --git a/libvips/foreign/heifload.c b/libvips/foreign/heifload.c index bee66053..40f619b2 100644 --- a/libvips/foreign/heifload.c +++ b/libvips/foreign/heifload.c @@ -1391,7 +1391,7 @@ vips_foreign_load_heif_source_class_init( object_class->nickname = "heifload_source"; object_class->build = vips_foreign_load_heif_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_heif_source_is_a_source; diff --git a/libvips/foreign/heifsave.c b/libvips/foreign/heifsave.c index c76842e3..f8380377 100644 --- a/libvips/foreign/heifsave.c +++ b/libvips/foreign/heifsave.c @@ -868,7 +868,7 @@ vips_foreign_save_avif_target_class_init( /* Hide from UI. */ - operation_class->flags = VIPS_OPERATION_DEPRECATED; + operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void diff --git a/libvips/foreign/jp2kload.c b/libvips/foreign/jp2kload.c index 8cdfb62f..a6dd7d4c 100644 --- a/libvips/foreign/jp2kload.c +++ b/libvips/foreign/jp2kload.c @@ -1279,7 +1279,7 @@ vips_foreign_load_jp2k_source_class_init( object_class->nickname = "jp2kload_source"; object_class->build = vips_foreign_load_jp2k_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_jp2k_is_a_source; diff --git a/libvips/foreign/jpegload.c b/libvips/foreign/jpegload.c index 0fb058f7..386f6942 100644 --- a/libvips/foreign/jpegload.c +++ b/libvips/foreign/jpegload.c @@ -260,7 +260,7 @@ vips_foreign_load_jpeg_source_class_init( object_class->description = _( "load image from jpeg source" ); object_class->build = vips_foreign_load_jpeg_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_jpeg_source_is_a_source; diff --git a/libvips/foreign/jxlload.c b/libvips/foreign/jxlload.c index 80e57534..34de4d8a 100644 --- a/libvips/foreign/jxlload.c +++ b/libvips/foreign/jxlload.c @@ -918,7 +918,7 @@ vips_foreign_load_jxl_source_class_init( VipsForeignLoadJxlSourceClass *class ) object_class->nickname = "jxlload_source"; object_class->build = vips_foreign_load_jxl_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_jxl_is_a_source; diff --git a/libvips/foreign/magick6load.c b/libvips/foreign/magick6load.c index 903d18d7..7ce6fac4 100644 --- a/libvips/foreign/magick6load.c +++ b/libvips/foreign/magick6load.c @@ -114,7 +114,7 @@ vips_foreign_load_magick_class_init( VipsForeignLoadMagickClass *class ) /* Don't cache magickload: it can gobble up memory and disc. */ - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; /* *magick is fuzzed, but it's such a huge thing it's safer to * disable it. diff --git a/libvips/foreign/magick7load.c b/libvips/foreign/magick7load.c index 0e275277..2e50abee 100644 --- a/libvips/foreign/magick7load.c +++ b/libvips/foreign/magick7load.c @@ -355,7 +355,7 @@ vips_foreign_load_magick7_class_init( VipsForeignLoadMagick7Class *class ) /* Don't cache magickload: it can gobble up memory and disc. */ - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; /* *magick is fuzzed, but it's such a huge thing it's safer to * disable it. diff --git a/libvips/foreign/matrixload.c b/libvips/foreign/matrixload.c index 5bc6f442..6903d0cb 100644 --- a/libvips/foreign/matrixload.c +++ b/libvips/foreign/matrixload.c @@ -458,7 +458,7 @@ vips_foreign_load_matrix_source_class_init( object_class->nickname = "matrixload_source"; object_class->build = vips_foreign_load_matrix_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_matrix_source_is_a_source; diff --git a/libvips/foreign/niftiload.c b/libvips/foreign/niftiload.c index a530dbe2..27eb5679 100644 --- a/libvips/foreign/niftiload.c +++ b/libvips/foreign/niftiload.c @@ -595,7 +595,7 @@ vips_foreign_load_nifti_class_init( VipsForeignLoadNiftiClass *class ) /* nificlib has not been fuzzed, so should not be used with * untrusted input unless you are very careful. */ - operation_class->flags = VIPS_OPERATION_UNTRUSTED; + operation_class->flags |= VIPS_OPERATION_UNTRUSTED; /* is_a() is not that quick ... lower the priority. */ @@ -783,7 +783,7 @@ vips_foreign_load_nifti_source_class_init( object_class->description = _( "load NIfTI volumes" ); object_class->build = vips_foreign_load_nifti_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_nifti_source_is_a_source; diff --git a/libvips/foreign/niftisave.c b/libvips/foreign/niftisave.c index f899a79e..988023b1 100644 --- a/libvips/foreign/niftisave.c +++ b/libvips/foreign/niftisave.c @@ -432,7 +432,7 @@ vips_foreign_save_nifti_class_init( VipsForeignSaveNiftiClass *class ) /* nificlib has not been fuzzed, so should not be used with * untrusted input unless you are very careful. */ - operation_class->flags = VIPS_OPERATION_UNTRUSTED; + operation_class->flags |= VIPS_OPERATION_UNTRUSTED; foreign_class->suffs = vips_foreign_nifti_suffs; diff --git a/libvips/foreign/nsgifload.c b/libvips/foreign/nsgifload.c index b967b8c5..499211b1 100644 --- a/libvips/foreign/nsgifload.c +++ b/libvips/foreign/nsgifload.c @@ -826,7 +826,7 @@ vips_foreign_load_nsgif_source_class_init( object_class->description = _( "load gif from source" ); object_class->build = vips_foreign_load_nsgif_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_nsgif_is_a_source; diff --git a/libvips/foreign/openslideload.c b/libvips/foreign/openslideload.c index f90af316..16bffae7 100644 --- a/libvips/foreign/openslideload.c +++ b/libvips/foreign/openslideload.c @@ -859,6 +859,7 @@ vips_foreign_load_openslide_class_init( VipsForeignLoadOpenslideClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); VipsObjectClass *object_class = (VipsObjectClass *) class; + VipsOperationClass *operation_class = VIPS_OPERATION_CLASS( class ); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; @@ -879,6 +880,16 @@ vips_foreign_load_openslide_class_init( VipsForeignLoadOpenslideClass *class ) */ foreign_class->priority = 100; + /* libopenslide does not try to recover from errors, so it's not safe + * to cache. + */ + operation_class->flags |= VIPS_OPERATION_NOCACHE; + + /* openslide has not been fuzzed and is largly unmaintained, so should + * not be used with untrusted input unless you are very careful. + */ + operation_class->flags |= VIPS_OPERATION_UNTRUSTED; + load_class->get_flags_filename = vips_foreign_load_openslide_get_flags_filename; load_class->get_flags = vips_foreign_load_openslide_get_flags; @@ -1053,7 +1064,6 @@ vips_foreign_load_openslide_source_class_init( { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); VipsObjectClass *object_class = (VipsObjectClass *) class; - VipsOperationClass *operation_class = VIPS_OPERATION_CLASS( class ); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; @@ -1063,16 +1073,6 @@ vips_foreign_load_openslide_source_class_init( object_class->description = _( "load source with OpenSlide" ); object_class->build = vips_foreign_load_openslide_source_build; - /* libopenslide does not try to recover from errors, so it's not safe - * to cache. - */ - operation_class->flags = VIPS_OPERATION_NOCACHE; - - /* openslide has not been fuzzed and is largly unmaintained, so should - * not be used with untrusted input unless you are very careful. - */ - operation_class->flags |= VIPS_OPERATION_UNTRUSTED; - load_class->is_a_source = vips_foreign_load_openslide_source_is_a_source; diff --git a/libvips/foreign/pdfiumload.c b/libvips/foreign/pdfiumload.c index 90130f64..743f603a 100644 --- a/libvips/foreign/pdfiumload.c +++ b/libvips/foreign/pdfiumload.c @@ -967,7 +967,7 @@ vips_foreign_load_pdf_source_class_init( object_class->description = _( "load PDF from source" ); object_class->build = vips_foreign_load_pdf_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_pdf_source_is_a_source; diff --git a/libvips/foreign/pngload.c b/libvips/foreign/pngload.c index 4b5c01e4..af000f83 100644 --- a/libvips/foreign/pngload.c +++ b/libvips/foreign/pngload.c @@ -233,7 +233,7 @@ vips_foreign_load_png_source_class_init( VipsForeignLoadPngSourceClass *class ) object_class->description = _( "load png from source" ); object_class->build = vips_foreign_load_png_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_png_source_is_a_source; diff --git a/libvips/foreign/popplerload.c b/libvips/foreign/popplerload.c index 7bf2a32f..5736169b 100644 --- a/libvips/foreign/popplerload.c +++ b/libvips/foreign/popplerload.c @@ -519,6 +519,7 @@ vips_foreign_load_pdf_class_init( VipsForeignLoadPdfClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); VipsObjectClass *object_class = (VipsObjectClass *) class; + VipsOperationClass *operation_class = VIPS_OPERATION_CLASS( class ); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_pdf_dispose; @@ -529,6 +530,10 @@ vips_foreign_load_pdf_class_init( VipsForeignLoadPdfClass *class ) object_class->description = _( "load PDF with libpoppler" ); object_class->build = vips_foreign_load_pdf_build; + /* libpoppler is fuzzed, but not by us. + */ + operation_class->flags |= VIPS_OPERATION_UNTRUSTED; + load_class->get_flags_filename = vips_foreign_load_pdf_get_flags_filename; load_class->get_flags = vips_foreign_load_pdf_get_flags; @@ -846,7 +851,7 @@ vips_foreign_load_pdf_source_class_init( object_class->description = _( "load PDF from source" ); object_class->build = vips_foreign_load_pdf_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_pdf_source_is_a_source; diff --git a/libvips/foreign/ppmload.c b/libvips/foreign/ppmload.c index 3c599a8e..7114cc15 100644 --- a/libvips/foreign/ppmload.c +++ b/libvips/foreign/ppmload.c @@ -886,7 +886,7 @@ vips_foreign_load_ppm_source_class_init( VipsForeignLoadPpmFileClass *class ) object_class->nickname = "ppmload_source"; object_class->build = vips_foreign_load_ppm_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_ppm_is_a_source; diff --git a/libvips/foreign/ppmsave.c b/libvips/foreign/ppmsave.c index 7f09b27d..37230307 100644 --- a/libvips/foreign/ppmsave.c +++ b/libvips/foreign/ppmsave.c @@ -641,7 +641,7 @@ vips_foreign_save_pbm_target_class_init( /* Hide from UI. */ - operation_class->flags = VIPS_OPERATION_DEPRECATED; + operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void @@ -673,7 +673,7 @@ vips_foreign_save_pgm_target_class_init( /* Hide from UI. */ - operation_class->flags = VIPS_OPERATION_DEPRECATED; + operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void @@ -705,7 +705,7 @@ vips_foreign_save_pfm_target_class_init( /* Hide from UI. */ - operation_class->flags = VIPS_OPERATION_DEPRECATED; + operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void diff --git a/libvips/foreign/radload.c b/libvips/foreign/radload.c index 35f1e4ac..932252f1 100644 --- a/libvips/foreign/radload.c +++ b/libvips/foreign/radload.c @@ -199,7 +199,7 @@ vips_foreign_load_rad_source_class_init( VipsForeignLoadRadSourceClass *class ) object_class->description = _( "load rad from source" ); object_class->build = vips_foreign_load_rad_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_rad_source_is_a_source; diff --git a/libvips/foreign/spngload.c b/libvips/foreign/spngload.c index 5431a611..2e441945 100644 --- a/libvips/foreign/spngload.c +++ b/libvips/foreign/spngload.c @@ -748,7 +748,7 @@ vips_foreign_load_png_source_class_init( VipsForeignLoadPngSourceClass *class ) object_class->description = _( "load png from source" ); object_class->build = vips_foreign_load_png_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_png_source_is_a_source; diff --git a/libvips/foreign/svgload.c b/libvips/foreign/svgload.c index 130ef38e..f9f8c3f1 100644 --- a/libvips/foreign/svgload.c +++ b/libvips/foreign/svgload.c @@ -691,7 +691,7 @@ vips_foreign_load_svg_class_init( VipsForeignLoadSvgClass *class ) /* librsvg has not been fuzzed, so should not be used with * untrusted input unless you are very careful. */ - operation_class->flags = VIPS_OPERATION_UNTRUSTED; + operation_class->flags |= VIPS_OPERATION_UNTRUSTED; /* is_a() is not that quick ... lower the priority. */ @@ -814,7 +814,7 @@ vips_foreign_load_svg_source_class_init( VipsForeignLoadSvgSourceClass *class ) object_class->nickname = "svgload_source"; object_class->description = _( "load svg from source" ); - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_svg_source_is_a_source; load_class->header = vips_foreign_load_svg_source_header; diff --git a/libvips/foreign/tiffload.c b/libvips/foreign/tiffload.c index 5aee49f7..656fd5b6 100644 --- a/libvips/foreign/tiffload.c +++ b/libvips/foreign/tiffload.c @@ -282,7 +282,7 @@ vips_foreign_load_tiff_source_class_init( object_class->description = _( "load tiff from source" ); object_class->build = vips_foreign_load_tiff_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_tiff_source_is_a_source; diff --git a/libvips/foreign/vips2magick.c b/libvips/foreign/vips2magick.c index d121974f..14d08d1b 100644 --- a/libvips/foreign/vips2magick.c +++ b/libvips/foreign/vips2magick.c @@ -470,7 +470,7 @@ vips_foreign_save_magick_class_init( VipsForeignSaveMagickClass *class ) /* *magick is fuzzed, but it's such a huge thing it's safer to * disable it. */ - operation_class->flags = VIPS_OPERATION_UNTRUSTED; + operation_class->flags |= VIPS_OPERATION_UNTRUSTED; /* We need to be well to the back of the queue since vips's * dedicated savers are usually preferable. @@ -686,7 +686,7 @@ vips_foreign_save_magick_bmp_file_class_init( /* Hide from UI. */ - operation_class->flags = VIPS_OPERATION_DEPRECATED; + operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void @@ -719,7 +719,7 @@ vips_foreign_save_magick_bmp_buffer_class_init( /* Hide from UI. */ - operation_class->flags = VIPS_OPERATION_DEPRECATED; + operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void @@ -752,7 +752,7 @@ vips_foreign_save_magick_gif_file_class_init( /* Hide from UI. */ - operation_class->flags = VIPS_OPERATION_DEPRECATED; + operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void @@ -785,7 +785,7 @@ vips_foreign_save_magick_gif_buffer_class_init( /* Hide from UI. */ - operation_class->flags = VIPS_OPERATION_DEPRECATED; + operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void diff --git a/libvips/foreign/vipsload.c b/libvips/foreign/vipsload.c index 95fbbccd..63483427 100644 --- a/libvips/foreign/vipsload.c +++ b/libvips/foreign/vipsload.c @@ -302,7 +302,7 @@ vips_foreign_load_vips_source_class_init( VipsForeignLoadVipsClass *class ) object_class->description = _( "load vips from source" ); object_class->build = vips_foreign_load_vips_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_vips_source_is_a_source; diff --git a/libvips/foreign/webpload.c b/libvips/foreign/webpload.c index acd27a4a..c3fc5fde 100644 --- a/libvips/foreign/webpload.c +++ b/libvips/foreign/webpload.c @@ -264,7 +264,7 @@ vips_foreign_load_webp_source_class_init( object_class->description = _( "load webp from source" ); object_class->build = vips_foreign_load_webp_source_build; - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips__iswebp_source; diff --git a/libvips/iofuncs/system.c b/libvips/iofuncs/system.c index 9f23e95f..a923cc2d 100644 --- a/libvips/iofuncs/system.c +++ b/libvips/iofuncs/system.c @@ -271,7 +271,7 @@ vips_system_class_init( VipsSystemClass *class ) /* Commands can have side-effects, so don't cache them. */ - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; VIPS_ARG_BOXED( class, "in", 0, _( "Input" ), diff --git a/libvips/meson.build b/libvips/meson.build index 6a6f6f66..9e6750f8 100644 --- a/libvips/meson.build +++ b/libvips/meson.build @@ -23,6 +23,7 @@ libvips_lib = library('vips', link_whole: libvips_components, dependencies: libvips_deps, version: library_version, + darwin_versions: darwin_versions, gnu_symbol_visibility: 'hidden', install: true, ) diff --git a/libvips/resample/thumbnail.c b/libvips/resample/thumbnail.c index c6aca815..1890ee1b 100644 --- a/libvips/resample/thumbnail.c +++ b/libvips/resample/thumbnail.c @@ -949,7 +949,7 @@ vips_thumbnail_class_init( VipsThumbnailClass *class ) /* We mustn't cache these calls, since we open the file or buffer in * sequential mode. */ - operation_class->flags = VIPS_OPERATION_NOCACHE; + operation_class->flags |= VIPS_OPERATION_NOCACHE; VIPS_ARG_IMAGE( class, "out", 2, _( "Output" ), diff --git a/meson.build b/meson.build index 968310f7..7d9b8f7a 100644 --- a/meson.build +++ b/meson.build @@ -23,6 +23,7 @@ library_current = 57 library_age = 15 library_revision = 0 library_version = '@0@.@1@.@2@'.format(library_current - library_age, library_age, library_revision) +darwin_versions = [library_current + 1, '@0@.@1@'.format(library_current + 1, library_revision)] gnome = import('gnome') pymod = import('python')