Re: [Bug Fix]ECPG: cancellation of significant digits on ECPG
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: "Higuchi, Daisuke" <higuchi.daisuke@jp.fujitsu.com>
Cc: "'Dmitry Dolgov'" <9erthalion6@gmail.com>,
PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2018-11-12T23:07:20Z
Lists: pgsql-hackers
Attachments
- ecpg_numeric_bug_fix_v3.patch (text/x-diff) patch v3
"Higuchi, Daisuke" <higuchi.daisuke@jp.fujitsu.com> writes: > From: Dmitry Dolgov [mailto:9erthalion6@gmail.com] >> Thanks for the patches. Unfortunately, judging from the cfbot.cputube.org they >> can't be applied anymore to the current master, could you please rebase them? > Thank you for checking! > I rebased patches on the current master, so I attach them. I took a quick look at this. I concur that the code is broken as-is; it's failing to reproduce the state of the digit buffer accurately. However, I think there's a second bug, which is that it doesn't even try to duplicate the state when ndigits = 0. That basically means that the sqlda area might contain dangling pointers (they'll point to the PGTYPESnumeric_from_asc output, which is freed immediately after we set up the sqlda copy). Now *maybe* that doesn't lead to any obvious problem, but I don't think that this code deserves any expectation of correctness given that you just found such a large bug in it. So I think that we ought to unconditionally make the sqlda value's digit buffer look just like the one we're copying, even when ndigits = 0, which just requires removing the tests on ndigits. I also noted that the comment adjacent to this code was badly obsolete. In short, the attached. (I didn't bother to keep the test changes separate from the code fix.) regards, tom lane
Commits
-
Second try at fixing numeric data passed through an ECPG SQLDA.
- 06c723447b6b 12.0 landed
- f9e25ba14077 9.6.12 landed
- 68f30638a050 9.5.16 landed
- 41609776f2c2 9.4.21 landed
- 4618fdd67412 11.2 landed
- 2e8ed4659972 10.7 landed
-
Fix incorrect results for numeric data passed through an ECPG SQLDA.
- ecfd5579561c 12.0 landed
- e1f25901268c 9.6.12 landed
- be38945c6e66 9.5.16 landed
- 9e5e3861c782 9.4.21 landed
- 68393f3fd6b9 11.2 landed
- 32060f6780bc 10.7 landed