mariadb-corporation / mariadb-connector-nodejs

MariaDB Connector/Node.js is used to connect applications developed on Node.js to MariaDB and MySQL databases. MariaDB Connector/Node.js is LGPL licensed.
GNU Lesser General Public License v2.1
366 stars 91 forks source link

RangeError: readFloatLE hard crash #228

Closed E-gy closed 1 year ago

E-gy commented 1 year ago

Error occurs when trying to execute a particular SELECT query.

Stack trace:

RangeError [ERR_OUT_OF_RANGE]: The value of "offset" is out of range. It must be >= 0 and <= 375. Received 537
  at new NodeError (node:internal/errors:363:5)
    at boundsError (node:internal/buffer:86:9)
    at Buffer.readFloatForwards [as readFloatLE] (node:internal/buffer:532:5)
    at PacketNodeEncoded.readFloat (node_modules\mariadb\lib\io\packet.js:432:26)
    at node_modules\mariadb\lib\cmd\column-definition.js:97:104
    at Execute.parseRowStdBinary (node_modules\mariadb\lib\cmd\parser.js:498:57)
    at Execute.readResultSetRow (node_modules\mariadb\lib\cmd\parser.js:399:29)
    at PacketInputStream.receivePacketBasic (node_modules\mariadb\lib\io\packet-input-stream.js:76:9)
    at PacketInputStream.onData (node_modules\mariadb\lib\io\packet-input-stream.js:139:20)
    at Socket.emit (node:events:394:28)

Tested on MariaDB version 3.0.0-3.0.2, Node 16, on both Windows and Linux (the above trace is from Win).

I haven't yet been able to discern the exact specificity of the query that causes the crash - it seems to be both related to the table and the data stored - as it crashes on particular column of particular row in particular table. As simple as it is the query in question returns a complete result set of a single item - it looks like this:

select stuff.pk as pk, stuff.a as a, stuff.b as b, ... from stuff_things stuff where (stuff.pk = ?) LIMIT 0,1

Running with query instead of execute simply returns undefined, with no errors whatsoever reported anywhere.

Finally and obviously, running the query in MySQL works as expected and returns the singled intended item correctly.

As a temporary fix, i'm returning the minimum columns required, which happen not to cause the crash, altho permanently it won't be possible to keep this behaviour due to service requirements.

rusher commented 1 year ago

Could you share the DDL of the table ? was there any TIME column in there ?

rusher commented 1 year ago

After checking code, this might be https://jira.mariadb.org/browse/CONJS-236

rusher commented 1 year ago

it will be corrected with 3.1.0 release (commit https://github.com/mariadb-corporation/mariadb-connector-nodejs/commit/be84cc4403f95cbcb80380d94866399e94f21c3f )