aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/test/compat_oracle/char_array.pgc
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2019-01-24 16:46:55 -0500
committerTom Lane <tgl@sss.pgh.pa.us>2019-01-24 16:47:06 -0500
commitd5a1fde397269bd60b99e70a4eb2934b75fd31ec (patch)
tree16b5d39d7efe4be09c2baa281d39028bc1907b1b /src/interfaces/ecpg/test/compat_oracle/char_array.pgc
parentbbd5c207b960dd072445a3547f16abea0c27f726 (diff)
downloadpostgresql-d5a1fde397269bd60b99e70a4eb2934b75fd31ec.tar.gz
postgresql-d5a1fde397269bd60b99e70a4eb2934b75fd31ec.zip
Remove infinite-loop hazards in ecpg test suite.
A report from Andrew Dunstan showed that an ecpglib breakage that causes repeated query failures could lead to infinite loops in some ecpg test scripts, because they contain "while(1)" loops with no exit condition other than successful test completion. That might be all right for manual testing, but it seems entirely unacceptable for automated test environments such as our buildfarm. We don't want buildfarm owners to have to intervene manually when a test goes wrong. To fix, just change all those while(1) loops to exit after at most 100 iterations (which is more than any of them expect to iterate). This seems sufficient since we'd see discrepancies in the test output if any loop executed the wrong number of times. I tested this by dint of intentionally breaking ecpg_do_prologue to always fail, and verifying that the tests still got to completion. Back-patch to all supported branches, since the whole point of this exercise is to protect the buildfarm against future mistakes. Discussion: https://postgr.es/m/18693.1548302004@sss.pgh.pa.us
Diffstat (limited to 'src/interfaces/ecpg/test/compat_oracle/char_array.pgc')
-rw-r--r--src/interfaces/ecpg/test/compat_oracle/char_array.pgc4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/interfaces/ecpg/test/compat_oracle/char_array.pgc b/src/interfaces/ecpg/test/compat_oracle/char_array.pgc
index 8d7d9bf2d19..7ee312216ca 100644
--- a/src/interfaces/ecpg/test/compat_oracle/char_array.pgc
+++ b/src/interfaces/ecpg/test/compat_oracle/char_array.pgc
@@ -19,7 +19,7 @@ int main() {
EXEC SQL WHENEVER SQLERROR SQLPRINT;
const char *ppppp = "XXXXX";
-
+ int loopcount;
EXEC SQL BEGIN DECLARE SECTION;
char shortstr[5];
char bigstr[11];
@@ -44,7 +44,7 @@ int main() {
EXEC SQL WHENEVER NOT FOUND DO BREAK;
printf("Full Str. : Short Ind.\n");
- while(1) {
+ for (loopcount = 0; loopcount < 100; loopcount++) {
strncpy(shortstr, ppppp, sizeof shortstr);
memset(bigstr, 0, sizeof bigstr);
EXEC SQL FETCH C into :bigstr :bigstr_ind, :shortstr :shstr_ind;