[exim-cvs] Fix parsing of option type Kint (integer, stored…

Top Page
Delete this message
Reply to this message
Author: Exim Git Commits Mailing List
Date:  
To: exim-cvs
Subject: [exim-cvs] Fix parsing of option type Kint (integer, stored in K). Bug 2348
Gitweb: https://git.exim.org/exim.git/commitdiff/fa792e2ce96b4d6f9e39e350ec967ccb833277a7
Commit:     fa792e2ce96b4d6f9e39e350ec967ccb833277a7
Parent:     b2758501d772f37e5baa22ed2c379f0a473cffc2
Author:     Jeremy Harris <jgh146exb@???>
AuthorDate: Fri Dec 14 14:03:18 2018 +0000
Committer:  Jeremy Harris <jgh146exb@???>
CommitDate: Fri Dec 14 14:07:29 2018 +0000


    Fix parsing of option type Kint (integer, stored in K).  Bug 2348


    Broken-by: a45431fa71
---
 src/src/readconf.c           | 13 ++++++-------
 test/paniclog/0415           |  2 +-
 test/scripts/0000-Basic/0415 |  2 +-
 test/stderr/0415             |  2 +-
 test/stdout/0415             |  2 +-
 5 files changed, 10 insertions(+), 11 deletions(-)


diff --git a/src/src/readconf.c b/src/src/readconf.c
index f21ce4d..44452ba 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 68a0f44..8ab0c2c 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 09f582b..411efac 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 4292620..211d732 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 7215cca..619f9f3 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