Admin message

Due to an influx of spam, we have had to require each new account to be manually approved. Please register an account and then write an email to accountsupport@archlinux.org to get it approved. Sorry for the inconvenience.

ffi.lua:87: bad argument #1 to 'fromarray' (lgi.record expected, got table) with glib 2.88
<!-- Warning: Do not ignore this template! Failure to provide the required information risks automatic closure. Please read our Bug reporting guidelines before opening a bug: https://wiki.archlinux.org/title/Bug_reporting_guidelines If you want to help catching more bugs upfront, consider joining the Arch Testing Team: https://wiki.archlinux.org/title/Arch_Testing_Team --> # Description: Since the upgrade to glib 2.88, the following code fails: ``` $ lua5.3 -e 'print(require("lgi").cairo.Pattern.create_rgba)' lua5.3: /usr/share/lua/5.3/lgi/ffi.lua:87: bad argument #1 to 'fromarray' (lgi.record expected, got table) stack traceback: [C]: in field 'fromarray' /usr/share/lua/5.3/lgi/ffi.lua:87: in function 'lgi.ffi.load_enum' /usr/share/lua/5.3/lgi/override/cairo.lua:55: in main chunk [C]: in function 'require' /usr/share/lua/5.3/lgi/namespace.lua:183: in function 'lgi.namespace.require' (...tail calls...) (command line):1: in main chunk [C]: in ? ``` It breaks, amongst other things, Awesome WM: ``` error while running function! stack traceback: [C]: in field 'fromarray' /usr/share/lua/5.3/lgi/ffi.lua:87: in function 'lgi.ffi.load_enum' /usr/share/lua/5.3/lgi/override/cairo.lua:55: in main chunk [C]: in function 'require' /usr/share/lua/5.3/lgi/namespace.lua:183: in function 'lgi.require' (...tail calls...) /usr/share/awesome/lib/gears/color.lua:54: in main chunk [C]: in function 'require' /usr/share/awesome/lib/gears/init.lua:10: in main chunk [C]: in function 'require' /home/arch/.config/awesome/rc.lua:2: in main chunk ``` # Additional info: <!-- The exact package version is compulsory. --> * package version(s): 0.9.2-13 * config and/or log files: N/A * link to upstream bug report, if any: https://github.com/lgi-devs/lgi/issues/358 # Steps to reproduce: <!-- Describe how to reproduce the bug step by step including the commands --> 1. Run the example snippet # Suggested patch I manually applied changes from https://github.com/lgi-devs/lgi/pull/352 and it works again: ``` $ lua5.3 -e 'print(require("lgi").cairo.Pattern.create_rgba)' lgi.efn (0x7f9606fa8350): cairo.SolidPattern.create_rgba ``` ```diff --- usr/share/lua/5.3/lgi/ffi.lua 2026-01-05 22:31:33.000000000 +0100 +++ /usr/share/lua/5.3/lgi/ffi.lua 2026-04-08 03:42:56.894702128 +0200 @@ -76,16 +76,22 @@ -- Creates new enum/flags table with all values from specified gtype. function ffi.load_enum(gtype, name) - local GObject = core.repo.GObject + local GLib, GObject = core.repo.GLib, core.repo.GObject local is_flags = GObject.Type.is_a(gtype, GObject.Type.FLAGS) local enum_component = component.create( gtype, is_flags and enum.bitflags_mt or enum.enum_mt, name) local type_class = GObject.TypeClass.get(gtype) local enum_class = core.record.cast( type_class, is_flags and GObject.FlagsClass or GObject.EnumClass) - for i = 0, enum_class.n_values - 1 do - local val = core.record.fromarray(enum_class.values, i) - enum_component[core.upcase(val.value_nick):gsub('%-', '_')] = val.value + if GLib.check_version(2, 87, 0) then + for i = 0, enum_class.n_values - 1 do + local val = core.record.fromarray(enum_class.values, i) + enum_component[core.upcase(val.value_nick):gsub('%-', '_')] = val.value + end + else + for _, val in ipairs(enum_class.values) do + enum_component[core.upcase(val.value_nick):gsub('%-', '_')] = val.value + end end return enum_component end ```
issue