# After upgrading to ruby v 3.2.3 rb\_scan\_args() skips argument value

**URL:** <https://www.ruby-forum.com/t/after-upgrading-to-ruby-v-3-2-3-rb-scan-args-skips-argument-value/264678>\
**Category:** Development\
**Created:** [March 13, 2024, 7:13am UTC](https://www.ruby-forum.com/t/after-upgrading-to-ruby-v-3-2-3-rb-scan-args-skips-argument-value/264678 "2024-03-13T07:13:22Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![praveenrocket](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/8edcca/32.png) [@praveenrocket](https://www.ruby-forum.com/u/praveenrocket)\
**Post date:** [March 13, 2024, 7:13am UTC](https://www.ruby-forum.com/t/after-upgrading-to-ruby-v-3-2-3-rb-scan-args-skips-argument-value/264678/1 "2024-03-13T07:13:22Z")

</div>

Hi,

Note: I am not an expert at ruby.

I am working on ibm\_db gem, its an adapter developed using ruby C extension, which helps ruby & rails applications to connect to DB2 database.  
Under github source is at ibmdb/ruby-ibmdb/

As of now ibm\_db gem is compatible with ruby v 3.1.  
Now I am trying to make ibm\_db gem compatible with ruby v 3.2.3.

All my test cases were working for ruby v 3.1, but post upgrading to ruby v 3.2.3, most of my test cases are failing.

After debugging using gdb what I see is, my ruby test cases calls ruby C extension API passing required arguments, but inside C extension code arguments are not parsed, indeed nothing is read. Because of this most of test cases are failing.

Below is a sample ruby script which when run calls ibm\_db extension,

```auto
$ irb
irb(main):001:0> require 'ibm_db'
=> true
irb(main):002:0> conn = IBM_DB.connect("DATABASE=sample;HOSTNAME=waldevdbclnxtst06.dev.rocketsoftware.com;PORT=60000;PROTOCOL=TCPIP;UID=zurbie;PWD=A2m8test;",'','')
(irb):2: warning: undefining the allocator of T_DATA class IBM_DB::Connection
=> #<IBM_DB::Connection:0x00007ff60314ce58>
irb(main):003:0> stmt = IBM_DB.exec conn,'create table abc(C1 int)'
=> false
irb(main):004:0>
irb(main):005:0> IBM_DB.close(conn)
=> true
irb(main):006:0> exit

```

Above, If you observe IBM\_DB.exec is called passing two arguments conn & string with create table query.  
In extension code ibmdb/ruby-ibmdb/blob/master/IBM\_DB\_Driver/ibm\_db.c,  
below function will be called

```auto
VALUE ibm_db_exec(int argc, VALUE *argv, VALUE self)
{
....
rb_scan_args(argc, argv, "21", &connection, &stmt, &options);
......

}

```

Note: Please refer ibm\_db.c under github ibmdb/ruby-ibmdb/blob/master/IBM\_DB\_Driver/ibm\_db.c for complete code.

rb\_scan\_args used to parse arguments very well in ruby v 3.1, but now its failing to do so. I see stmt parameter doesnt hold anything.

I just want to know whats issue here, Am I passing arguments in wrong way (in ruby script), or am I not using rb\_scan\_args properly ?

To reproduce,  
Install ruby v 3.2.3,  
Install ibm\_db gem version 5.4.1 (latest)  
Run above sample ruby script using IRB.

Response at earliest is much appreciated.

Thanks  
Praveen

---

<div class="post-metadata">

**Author:** ![robert-b](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/54ee81/32.png) [@robert-b](https://www.ruby-forum.com/u/robert-b)\
**Post date:** [March 13, 2024, 7:13am UTC](https://www.ruby-forum.com/t/after-upgrading-to-ruby-v-3-2-3-rb-scan-args-skips-argument-value/264678/2 "2024-03-13T07:13:29Z")

</div>

Hi Praveen,

Seems that the issue is with how `rb_scan_args` function is parsing the arguments in Ruby v 3.2.3. The “21” argument in the `rb_scan_args` call expects two mandatory arguments and one optional. Check if you have provided all the necessary arguments while calling this function. Also, ensure that you’re using the latest version of the extension, as they might have fixed any compatibility issues with newer versions of Ruby.

If the issue still persists, you might want to drop an issue on the gem’s Github repository.

Best,  
Bobby

---

<div class="post-metadata">

**Author:** ![praveenrocket](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/8edcca/32.png) [@praveenrocket](https://www.ruby-forum.com/u/praveenrocket)\
**Post date:** [March 13, 2024, 7:19am UTC](https://www.ruby-forum.com/t/after-upgrading-to-ruby-v-3-2-3-rb-scan-args-skips-argument-value/264678/3 "2024-03-13T07:19:10Z")

</div>

Hi Robert,

I am the one who is maintaining ibm\_db extension code. I am under way to make this extension compatible with Ruby v 3.2.3.

And I am passing necessary arguments to rb\_scan\_args, below is ruby line, conn is first argument and sql string is second argument. There are no optional arguments here.

```auto
stmt = IBM_DB.exec conn,'create table abc(C1 int)'

```

Thanks  
Praveen
