Remaining UBSan reproducers for int format images
Author: kleisaukeCreated Mar 5, 2026Updated Aug 25, 2026
Labelsbug
This issue tracks the remaining UBSan reproducers for images tagged as VIPS_FORMAT_INT / VIPS_FORMAT_UINT, similar to the one fixed in PR #4922 (and related).
conva$ printf 'P5\n2 2\n65536\n' > max_int_2x2.ppm
$ printf '\x7F\xFF\xFF\xFF%.0s' {1..4} >> max_int_2x2.ppm
$ vips cast max_int_2x2.ppm max_int_2x2.v int
$ vips conva max_int_2x2.v x.v max_int_2x2.v
../libvips/convolution/conva.c:959:5: runtime error: signed integer overflow: -3 - 2147483647 cannot be represented in type 'int'
#0 0x7ff5fa54d082 in vips_conva_hgenerate /home/kleisauke/libvips/build/../libvips/convolution/conva.c:959:5
#1 0x7ff5fa967fe2 in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1614:6
#2 0x7ff5fa949ea3 in vips_region_fill /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:867:7
#3 0x7ff5fa96779c in vips_region_prepare /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1682:7
#4 0x7ff5fa55b3e0 in vips_conva_vgenerate /home/kleisauke/libvips/build/../libvips/convolution/conva.c:1143:6
#5 0x7ff5fa967fe2 in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1614:6
#6 0x7ff5fa949ea3 in vips_region_fill /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:867:7
#7 0x7ff5fa96779c in vips_region_prepare /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1682:7
#8 0x7ff5fa8b89e7 in vips_image_write_gen /home/kleisauke/libvips/build/../libvips/iofuncs/image.c:2600:6
#9 0x7ff5fa967fe2 in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1614:6
#10 0x7ff5fa949ea3 in vips_region_fill /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:867:7
#11 0x7ff5fa96779c in vips_region_prepare /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1682:7
#12 0x7ff5fa380767 in vips_copy_gen /home/kleisauke/libvips/build/../libvips/conversion/copy.c:140:6
#13 0x7ff5fa967fe2 in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1614:6
#14 0x7ff5fa949ea3 in vips_region_fill /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:867:7
#15 0x7ff5fa96779c in vips_region_prepare /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1682:7
#16 0x7ff5fa8b89e7 in vips_image_write_gen /home/kleisauke/libvips/build/../libvips/iofuncs/image.c:2600:6
#17 0x7ff5fa967fe2 in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1614:6
#18 0x7ff5fa96afcb in vips_region_prepare_to_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1737:6
#19 0x7ff5fa969c1c in vips_region_prepare_to /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1854:7
#20 0x7ff5fa902eca in wbuffer_work_fn /home/kleisauke/libvips/build/../libvips/iofuncs/sinkdisc.c:438:11
#21 0x7ff5fa82f5ec in vips_worker_work_unit /home/kleisauke/libvips/build/../libvips/iofuncs/threadpool.c:368:6
#22 0x7ff5fa82ddf0 in vips_thread_main_loop /home/kleisauke/libvips/build/../libvips/iofuncs/threadpool.c:393:3
#23 0x7ff5fa828c2e in vips_threadset_work /home/kleisauke/libvips/build/../libvips/iofuncs/threadset.c:187:3
#24 0x7ff5fa823ba4 in vips_thread_run /home/kleisauke/libvips/build/../libvips/iofuncs/thread.c:108:11
#25 0x7ff5f991f741 (/lib64/libglib-2.0.so.0+0x75741) (BuildId: 2932f63ee7c53ae67d9b0b3ff877ece14c13edd5)
#26 0x0000004a380a in asan_thread_start(void*) asan_interceptors.cpp.o
#27 0x7ff5f9469463 in start_thread (/lib64/libc.so.6+0x72463) (BuildId: ff0267465bc3d76e21003b3bc5598fd5ee63e261)
#28 0x7ff5f94ec5eb in __GI___clone3 (/lib64/libc.so.6+0xf55eb) (BuildId: ff0267465bc3d76e21003b3bc5598fd5ee63e261)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../libvips/convolution/conva.c:959:5
Aborted vips conva max_int_2x2.v x.v max_int_2x2.vconvasep$ printf 'P5\n1 2\n65536\n' > max_int_1x2.ppm
$ printf '\x7F\xFF\xFF\xFF%.0s' {1..2} >> max_int_1x2.ppm
$ vips cast max_int_1x2.ppm max_int_1x2.v int
$ vips convasep max_int_1x2.v x.v max_int_1x2.v
../libvips/convolution/convasep.c:612:4: runtime error: signed integer overflow: 2147483647 + 2147483647 cannot be represented in type 'int'
#0 0x7f8b6d22fe35 in vips_convasep_generate_horizontal /home/kleisauke/libvips/build/../libvips/convolution/convasep.c:612:4
#1 0x7f8b6d567fe2 in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1614:6
#2 0x7f8b6d549ea3 in vips_region_fill /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:867:7
#3 0x7f8b6d56779c in vips_region_prepare /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1682:7
#4 0x7f8b6d23bbb1 in vips_convasep_generate_vertical /home/kleisauke/libvips/build/../libvips/convolution/convasep.c:745:6
#5 0x7f8b6d567fe2 in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1614:6
#6 0x7f8b6d549ea3 in vips_region_fill /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:867:7
#7 0x7f8b6d56779c in vips_region_prepare /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1682:7
#8 0x7f8b6d4b89e7 in vips_image_write_gen /home/kleisauke/libvips/build/../libvips/iofuncs/image.c:2600:6
#9 0x7f8b6d567fe2 in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1614:6
#10 0x7f8b6d549ea3 in vips_region_fill /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:867:7
#11 0x7f8b6d56779c in vips_region_prepare /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1682:7
#12 0x7f8b6cf80767 in vips_copy_gen /home/kleisauke/libvips/build/../libvips/conversion/copy.c:140:6
#13 0x7f8b6d567fe2 in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1614:6
#14 0x7f8b6d549ea3 in vips_region_fill /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:867:7
#15 0x7f8b6d56779c in vips_region_prepare /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1682:7
#16 0x7f8b6d4b89e7 in vips_image_write_gen /home/kleisauke/libvips/build/../libvips/iofuncs/image.c:2600:6
#17 0x7f8b6d567fe2 in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1614:6
#18 0x7f8b6d56afcb in vips_region_prepare_to_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1737:6
#19 0x7f8b6d569c1c in vips_region_prepare_to /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1854:7
#20 0x7f8b6d502eca in wbuffer_work_fn /home/kleisauke/libvips/build/../libvips/iofuncs/sinkdisc.c:438:11
#21 0x7f8b6d42f5ec in vips_worker_work_unit /home/kleisauke/libvips/build/../libvips/iofuncs/threadpool.c:368:6
#22 0x7f8b6d42ddf0 in vips_thread_main_loop /home/kleisauke/libvips/build/../libvips/iofuncs/threadpool.c:393:3
#23 0x7f8b6d428c2e in vips_threadset_work /home/kleisauke/libvips/build/../libvips/iofuncs/threadset.c:187:3
#24 0x7f8b6d423ba4 in vips_thread_run /home/kleisauke/libvips/build/../libvips/iofuncs/thread.c:108:11
#25 0x7f8b6c51f741 (/lib64/libglib-2.0.so.0+0x75741) (BuildId: 2932f63ee7c53ae67d9b0b3ff877ece14c13edd5)
#26 0x0000004a380a in asan_thread_start(void*) asan_interceptors.cpp.o
#27 0x7f8b6c07b463 in start_thread (/lib64/libc.so.6+0x72463) (BuildId: ff0267465bc3d76e21003b3bc5598fd5ee63e261)
#28 0x7f8b6c0fe5eb in __GI___clone3 (/lib64/libc.so.6+0xf55eb) (BuildId: ff0267465bc3d76e21003b3bc5598fd5ee63e261)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../libvips/convolution/convasep.c:612:4
Aborted vips convasep max_int_1x2.v x.v max_int_1x2.vconviEdit: Fixed via commit 94c4e15baebe479de42eebeb229772db22e87584.
$ printf 'P5\n1 2\n65536\n' > max_uint_1x2.ppm
$ printf '\xFF\xFF\xFF\xFF%.0s' {1..2} >> max_uint_1x2.ppm
$ vips convi max_uint_1x2.ppm x.v max_uint_1x2.ppm
../libvips/convolution/convi.c:825:4: runtime error: signed integer overflow: -9223372034707292160 + -9223372034707292160 cannot be represented in type 'int64_t' (aka 'long')
#0 0x7fe1e3657825 in vips_convi_gen /home/kleisauke/libvips/build/../libvips/convolution/convi.c:825:4
#1 0x7fe1e39f477f in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1747:6
#2 0x7fe1e39d00a3 in vips_region_fill /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:867:7
#3 0x7fe1e39f3f41 in vips_region_prepare /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1815:7
#4 0x7fe1e33fd727 in vips_copy_gen /home/kleisauke/libvips/build/../libvips/conversion/copy.c:140:6
#5 0x7fe1e39f477f in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1747:6
#6 0x7fe1e39d00a3 in vips_region_fill /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:867:7
#7 0x7fe1e39f3f41 in vips_region_prepare /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1815:7
#8 0x7fe1e393db27 in vips_image_write_gen /home/kleisauke/libvips/build/../libvips/iofuncs/image.c:2647:6
#9 0x7fe1e39f477f in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1747:6
#10 0x7fe1e39f776b in vips_region_prepare_to_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1870:6
#11 0x7fe1e39f63b8 in vips_region_prepare_to /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1987:7
#12 0x7fe1e3988d9a in wbuffer_work_fn /home/kleisauke/libvips/build/../libvips/iofuncs/sinkdisc.c:438:11
#13 0x7fe1e38b468e in vips_worker_work_unit /home/kleisauke/libvips/build/../libvips/iofuncs/threadpool.c:362:6
#14 0x7fe1e38b31bf in vips_thread_main_loop /home/kleisauke/libvips/build/../libvips/iofuncs/threadpool.c:388:12
#15 0x7fe1e38ae48e in vips_threadset_work /home/kleisauke/libvips/build/../libvips/iofuncs/threadset.c:187:3
#16 0x7fe1e38a93e4 in vips_thread_run /home/kleisauke/libvips/build/../libvips/iofuncs/thread.c:112:11
#17 0x7fe1e291bc51 (/lib64/libglib-2.0.so.0+0x7dc51) (BuildId: a55397c41cae330fee603dd8a00cf8cd2ac399ca)
#18 0x0000004a435a in asan_thread_start(void*) asan_interceptors.cpp.o
#19 0x7fe1e24d2c18 in start_thread (/lib64/libc.so.6+0x72c18) (BuildId: 5bd941be836f538fe5e10eff508f7f5dd94905a6)
#20 0x7fe1e25565cb in __GI___clone3 (/lib64/libc.so.6+0xf65cb) (BuildId: 5bd941be836f538fe5e10eff508f7f5dd94905a6)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../libvips/convolution/convi.c:825:4
Aborted vips convi max_uint_1x2.ppm x.v max_uint_1x2.ppmmerge$ printf 'P5\n2 2\n65536\n' > max_int_2x2.ppm
$ printf '\x7F\xFF\xFF\xFF%.0s' {1..4} >> max_int_2x2.ppm
$ vips cast max_int_2x2.ppm max_int_2x2.v int
$ vips merge max_int_2x2.v max_int_2x2.v x.v horizontal 0 0
../libvips/mosaicing/lrmerge.c:645:4: runtime error: signed integer overflow: 4096 * 2147483647 cannot be represented in type 'int'
#0 0x7fe9deda997b in lr_blend /home/kleisauke/libvips/build/../libvips/mosaicing/lrmerge.c:645:4
#1 0x7fe9ded7c75f in vips__merge_gen /home/kleisauke/libvips/build/../libvips/mosaicing/lrmerge.c:1035:8
#2 0x7fe9deb67fe2 in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1614:6
#3 0x7fe9deb49ea3 in vips_region_fill /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:867:7
#4 0x7fe9deb6779c in vips_region_prepare /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1682:7
#5 0x7fe9de580767 in vips_copy_gen /home/kleisauke/libvips/build/../libvips/conversion/copy.c:140:6
#6 0x7fe9deb67fe2 in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1614:6
#7 0x7fe9deb49ea3 in vips_region_fill /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:867:7
#8 0x7fe9deb6779c in vips_region_prepare /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1682:7
#9 0x7fe9deab89e7 in vips_image_write_gen /home/kleisauke/libvips/build/../libvips/iofuncs/image.c:2600:6
#10 0x7fe9deb67fe2 in vips_region_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1614:6
#11 0x7fe9deb6afcb in vips_region_prepare_to_generate /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1737:6
#12 0x7fe9deb69c1c in vips_region_prepare_to /home/kleisauke/libvips/build/../libvips/iofuncs/region.c:1854:7
#13 0x7fe9deb02eca in wbuffer_work_fn /home/kleisauke/libvips/build/../libvips/iofuncs/sinkdisc.c:438:11
#14 0x7fe9dea2f5ec in vips_worker_work_unit /home/kleisauke/libvips/build/../libvips/iofuncs/threadpool.c:368:6
#15 0x7fe9dea2ddf0 in vips_thread_main_loop /home/kleisauke/libvips/build/../libvips/iofuncs/threadpool.c:393:3
#16 0x7fe9dea28c2e in vips_threadset_work /home/kleisauke/libvips/build/../libvips/iofuncs/threadset.c:187:3
#17 0x7fe9dea23ba4 in vips_thread_run /home/kleisauke/libvips/build/../libvips/iofuncs/thread.c:108:11
#18 0x7fe9ddb1f741 (/lib64/libglib-2.0.so.0+0x75741) (BuildId: 2932f63ee7c53ae67d9b0b3ff877ece14c13edd5)
#19 0x0000004a380a in asan_thread_start(void*) asan_interceptors.cpp.o
#20 0x7fe9dd706463 in start_thread (/lib64/libc.so.6+0x72463) (BuildId: ff0267465bc3d76e21003b3bc5598fd5ee63e261)
#21 0x7fe9dd7895eb in __GI___clone3 (/lib64/libc.so.6+0xf55eb) (BuildId: ff0267465bc3d76e21003b3bc5598fd5ee63e261)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../libvips/mosaicing/lrmerge.c:645:4
Aborted vips merge max_int_2x2.v max_int_2x2.v x.v horizontal 0 0project$ printf 'P5\n1 2\n65536\n' > max_int_1x2.ppm
$ printf '\x7F\xFF\xFF\xFF%.0s' {1..2} >> max_int_1x2.ppm
$ vips cast max_int_1x2.ppm max_int_1x2.v int
$ vips project max_int_1x2.v sum1.v sum2.v
../libvips/arithmetic/project.c:238:3: runtime error: signed integer overflow: 2147483647 + 2147483647 cannot be represented in type 'int'
#0 0x7fb6ffd27d9c in vips_project_scan /home/kleisauke/libvips/build/../libvips/arithmetic/project.c:238:3
#1 0x7fb6ffda5d4d in vips_statistic_scan /home/kleisauke/libvips/build/../libvips/arithmetic/statistic.c:86:7
#2 0x7fb7006f7400 in sink_work /home/kleisauke/libvips/build/../libvips/iofuncs/sink.c:417:12
#3 0x7fb70062f5ec in vips_worker_work_unit /home/kleisauke/libvips/build/../libvips/iofuncs/threadpool.c:368:6
#4 0x7fb70062ddf0 in vips_thread_main_loop /home/kleisauke/libvips/build/../libvips/iofuncs/threadpool.c:393:3
#5 0x7fb700628c2e in vips_threadset_work /home/kleisauke/libvips/build/../libvips/iofuncs/threadset.c:187:3
#6 0x7fb700623ba4 in vips_thread_run /home/kleisauke/libvips/build/../libvips/iofuncs/thread.c:108:11
#7 0x7fb6ff71f741 (/lib64/libglib-2.0.so.0+0x75741) (BuildId: 2932f63ee7c53ae67d9b0b3ff877ece14c13edd5)
#8 0x0000004a380a in asan_thread_start(void*) asan_interceptors.cpp.o
#9 0x7fb6ff2da463 in start_thread (/lib64/libc.so.6+0x72463) (BuildId: ff0267465bc3d76e21003b3bc5598fd5ee63e261)
#10 0x7fb6ff35d5eb in __GI___clone3 (/lib64/libc.so.6+0xf55eb) (BuildId: ff0267465bc3d76e21003b3bc5598fd5ee63e261)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior ../libvips/arithmetic/project.c:238:3
Aborted vips project max_int_1x2.v sum1.v sum2.vUsually, the fix is to use a 64-bit intermediate in these paths, but for these operations this is somewhat non-trivial.
Source: libvips/libvips