hugopl / gi-crystal

Tool to generate Crystal bindings for gobject-based libraries (i.e. GTK)
BSD 3-Clause "New" or "Revised" License
45 stars 3 forks source link

nullable transfer full params doesn't check for null before increase object reference. #119

Closed hugopl closed 1 year ago

hugopl commented 1 year ago

Following code:

/**
 * test_subject_nullable_transfer_full_param:
 * @gobj: (transfer full) (nullable):
 */
void test_subject_nullable_transfer_full_param(GObject* gobj);

Generates:

    def self.nullable_transfer_full_param(gobj : GObject::Object?) : Nil
      # test_subject_nullable_transfer_full_param: (None)
      # @gobj: (transfer full) (nullable)
      # Returns: (transfer none)

      # Generator::NullableArrayPlan
      gobj = if gobj.nil?
               Pointer(Void).null
             else
               gobj.to_unsafe
             end
      # Generator::TransferFullArgPlan
      LibGObject.g_object_ref_sink(gobj)
      # C call
      LibTest.test_subject_nullable_transfer_full_param(gobj)

      # Return value handling
    end

LibGObject.g_object_ref_sink(gobj) must be uder a if obj, otherwise NULL is passed to g_object_ref_sink causing some warnings.