summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Harris <jgh146exb@wizmail.org>2018-12-14 14:03:18 +0000
committerJeremy Harris <jgh146exb@wizmail.org>2018-12-14 14:07:29 +0000
commitfa792e2ce96b4d6f9e39e350ec967ccb833277a7 (patch)
treef8b890e87dd578422a7034e0400175dc41c4b430
parentb2758501d772f37e5baa22ed2c379f0a473cffc2 (diff)
downloadexim4-fa792e2ce96b4d6f9e39e350ec967ccb833277a7.tar.gz
Fix parsing of option type Kint (integer, stored in K). Bug 2348
Broken-by: a45431fa71
-rw-r--r--src/src/readconf.c13
-rw-r--r--test/paniclog/04152
-rw-r--r--test/scripts/0000-Basic/04152
-rw-r--r--test/stderr/04152
-rw-r--r--test/stdout/04152
5 files changed, 10 insertions, 11 deletions
diff --git a/src/src/readconf.c b/src/src/readconf.c
index f21ce4d04..44452baa6 100644
--- a/src/src/readconf.c
+++ b/src/src/readconf.c
@@ -2130,7 +2130,7 @@ switch (type)
inttype = US"octal ";
/* Integer: a simple(ish) case; allow octal and hex formats, and
- suffixes K, M and G. The different types affect output, not input. */
+ suffixes K, M, G, and T. The different types affect output, not input. */
case opt_mkint:
case opt_int:
@@ -2147,7 +2147,7 @@ switch (type)
if (errno != ERANGE && *endptr)
{
- uschar * mp = US"GgMmKk\0"; /* YyZzEePpTtGgMmKk */
+ uschar * mp = US"TtGgMmKk\0"; /* YyZzEePpTtGgMmKk */
if ((mp = Ustrchr(mp, *endptr)))
{
@@ -2182,8 +2182,7 @@ switch (type)
*(int *)ol->value = value;
break;
- /* Integer held in K: again, allow octal and hex formats, and suffixes K, M,
- G and T. */
+ /* Integer held in K: again, allow formats and suffixes as above. */
case opt_Kint:
{
@@ -2197,12 +2196,12 @@ switch (type)
if (errno != ERANGE && *endptr)
{
- uschar * mp = US"EePpTtGgMmKk\0"; /* YyZzEePpTtGgMmKk */
+ uschar * mp = US"ZzEePpTtGgMmKk\0"; /* YyZzEePpTtGgMmKk */
if ((mp = Ustrchr(mp, *endptr)))
{
endptr++;
- do
+ while (*(mp += 2))
{
if (lvalue > EXIM_ARITH_MAX/1024 || lvalue < EXIM_ARITH_MIN/1024)
{
@@ -2211,7 +2210,6 @@ switch (type)
}
lvalue *= 1024;
}
- while (*(mp += 2));
}
else
lvalue = (lvalue + 512)/1024;
@@ -2489,6 +2487,7 @@ switch(ol->type & opt_mask)
int_eximarith_t x = *((int_eximarith_t *)value);
if (!no_labels) printf("%s = ", name);
if (x == 0) printf("0\n");
+ else if ((x & ((1<<30)-1)) == 0) printf(PR_EXIM_ARITH "T\n", x >> 30);
else if ((x & ((1<<20)-1)) == 0) printf(PR_EXIM_ARITH "G\n", x >> 20);
else if ((x & ((1<<10)-1)) == 0) printf(PR_EXIM_ARITH "M\n", x >> 10);
else printf(PR_EXIM_ARITH "K\n", x);
diff --git a/test/paniclog/0415 b/test/paniclog/0415
index 68a0f4491..8ab0c2cb9 100644
--- a/test/paniclog/0415
+++ b/test/paniclog/0415
@@ -1,5 +1,5 @@
1999-03-02 09:44:33 Exim configuration error in line 15 of TESTSUITE/test-config:
- absolute value of integer "4000E" is too large (overflow)
+ absolute value of integer "4000Z" is too large (overflow)
1999-03-02 09:44:33 Exim configuration error in line 15 of TESTSUITE/test-config:
extra characters follow integer value for check_spool_space
1999-03-02 09:44:33 Exim configuration error in line 16 of TESTSUITE/test-config:
diff --git a/test/scripts/0000-Basic/0415 b/test/scripts/0000-Basic/0415
index 09f582b62..411efac16 100644
--- a/test/scripts/0000-Basic/0415
+++ b/test/scripts/0000-Basic/0415
@@ -1,6 +1,6 @@
# overflow in integer options
1
-exim -DARG1=4000E -bP check_spool_space
+exim -DARG1=4000Z -bP check_spool_space
****
exim -DARG1=4000G -bP check_spool_space
****
diff --git a/test/stderr/0415 b/test/stderr/0415
index 429262094..211d7323b 100644
--- a/test/stderr/0415
+++ b/test/stderr/0415
@@ -1,6 +1,6 @@
LOG: PANIC DIE
Exim configuration error in line 15 of TESTSUITE/test-config:
- absolute value of integer "4000E" is too large (overflow)
+ absolute value of integer "4000Z" is too large (overflow)
LOG: PANIC DIE
Exim configuration error in line 15 of TESTSUITE/test-config:
extra characters follow integer value for check_spool_space
diff --git a/test/stdout/0415 b/test/stdout/0415
index 7215cca80..619f9f373 100644
--- a/test/stdout/0415
+++ b/test/stdout/0415
@@ -1,4 +1,4 @@
-check_spool_space = 4096000G
+check_spool_space = 4000G
queue_only_load = 2000000.123
finduser_retries = 0
finduser_retries = 999999999