Re: BUG #17725: Sefault when seg_in() called with a large argument
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Robins Tharakan <tharakan@gmail.com>
Cc: John Naylor <john.naylor@enterprisedb.com>,
pgsql-bugs@lists.postgresql.org
Date: 2022-12-20T17:06:31Z
Lists: pgsql-bugs
I wrote: > I don't see a crash either, but I can't help observing that this > input leads to a "seg" struct with "-46" significant digits: > ... > So we're invoking sprintf with a fairly insane precision spec: Actually, it looks like sprintf is not the problem. This is: (gdb) 984 buf[10 + n] = '\0'; (gdb) p n $9 = -46 So first off, we're stomping on something we shouldn't, and secondly we're failing to nul-terminate buf[], which easily explains your observed crash at the strcpy a little further down. On most platforms strcpy would find a nul byte not too much further on, which might prevent the worst sorts of damage, but this is still very ugly. regards, tom lane
Commits
-
Fix contrib/seg to be more wary of long input numbers.
- f489b480f4aa 14.7 landed
- d35f1d485c39 13.10 landed
- c8314d62a9bd 12.14 landed
- b87037b373cf 15.2 landed
- 701c881f782b 16.0 landed
- 0ff4056b8ce9 11.19 landed