From d@tr7320 @end|ng |rom un|@@ydney@edu@@u  Thu Jun 10 03:00:25 2021
From: d@tr7320 @end|ng |rom un|@@ydney@edu@@u (Dario Strbenac)
Date: Thu, 10 Jun 2021 01:00:25 +0000
Subject: [Rd] dgTMatrix Segmentation Fault
In-Reply-To: <661d72aa-655e-68ac-edfe-e37e9d39c6b8@insa-toulouse.fr>
References: <SYBPR01MB4761C684F1CA43CA4945FA25CD389@SYBPR01MB4761.ausprd01.prod.outlook.com>
 <91d30364-998a-c783-b9c5-9b05405d30b2@insa-toulouse.fr>
 <SYBPR01MB4761A3436511885B1346831ACD379@SYBPR01MB4761.ausprd01.prod.outlook.com>
 <24767.39822.987117.724657@stat.math.ethz.ch>,
 <661d72aa-655e-68ac-edfe-e37e9d39c6b8@insa-toulouse.fr>
Message-ID: <SYBPR01MB4761734287C9B00F00B2BD9ACD369@SYBPR01MB4761.ausprd01.prod.outlook.com>

Good day,

Thanks to handy hints from Martin Morgan, I ran R under gdb and checked for any numeric overflow. We pinpointed the cause:

(gdb) info locals
i = 0
j = 10738
m = 200000
n = 50000
ans = 0x55555b332790
aa = 0x55555b3327c0

There is a line of C code in dgeMatrix.c for (i = 0; i < m; i++) aa[i] += xx[i + j * m];

i  + j * m are all int, and overflow
(lldb) print 0 + 10738 * 200000
(int) $5 = -2147367296

So, either the code should check that this doesn't occur, or be adjusted to allow for large indexes.

If anyone is interested, this is in the context of single-cell ATAC-seq data, which typically has about 200000 genomic regions (rows) and perhaps 100000 biological cells (columns).

--------------------------------------
Dario Strbenac
University of Sydney
Camperdown NSW 2050
Australia


[Rd] dgTMatrix Segmentation Fault
Dario Strbenac