When executing this script via lua5.4 typeof.lua I get a crash every time with the following typeof.lua script:
local vips = require "vips"
local im = vips.Image.xyz(1,1)
print(im:get_typeof("width"))
It doesn't crash with Lua 5.2, Lua 5.3 or Luajit. It also crashes in the interpreter when I enter the commands on one line like this:
Lua 5.4.8 Copyright (C) 1994-2025 Lua.org, PUC-Rio
> vips = require "vips"
> im = vips.Image.xyz(1,1); print(im:get_typeof("width"))
Ungültiger Maschinenbefehl (Speicherabzug geschrieben)
This issue (like others in the past) can be fixed by stopping and restarting garbage collection during the call to
vips_lib.vips_image_get_typeof(self.vimage, name)
in function Image_method:get_typeof(name). But there must be a better fix for these issues.
The crash also happens when I create the image with a different method that uses voperation.call, i.e.
im = vips.Image.new_from_file("filename.jpg")
or
im = vips.Image.new_from_array {0}
im = im:bandjoin(im)
In the latter example the second line is needed to create the crash. The first line doesn't use voperation.call, but calls vips_image_new_matrix_from_array directly.
I guess there is something wrong regarding garbage collection in voperation.call. It only shows up in Lu5.4 because of the more aggressive garbage collection.
When executing this script via
lua5.4 typeof.luaI get a crash every time with the followingtypeof.luascript:It doesn't crash with Lua 5.2, Lua 5.3 or Luajit. It also crashes in the interpreter when I enter the commands on one line like this:
This issue (like others in the past) can be fixed by stopping and restarting garbage collection during the call to
in
function Image_method:get_typeof(name). But there must be a better fix for these issues.The crash also happens when I create the image with a different method that uses
voperation.call, i.e.or
In the latter example the second line is needed to create the crash. The first line doesn't use
voperation.call, but callsvips_image_new_matrix_from_arraydirectly.I guess there is something wrong regarding garbage collection in
voperation.call. It only shows up in Lu5.4 because of the more aggressive garbage collection.