about summary refs log tree commit diff
path: root/lib/fileio.c
diff options
context:
space:
mode:
authorgiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2007-12-09 17:30:47 +0000
committergiraffedata <giraffedata@9d0c8265-081b-0410-96cb-a4ca84ce46f8>2007-12-09 17:30:47 +0000
commitd97e2f3a64b09a748bb0984fba33f3595298853a (patch)
treed5f388bde91bdc4ecad19f87c757c2790801ce69 /lib/fileio.c
parentb4799443c85bee0e0afc1fa23e034d2253a07635 (diff)
downloadnetpbm-mirror-d97e2f3a64b09a748bb0984fba33f3595298853a.tar.gz
netpbm-mirror-d97e2f3a64b09a748bb0984fba33f3595298853a.tar.xz
netpbm-mirror-d97e2f3a64b09a748bb0984fba33f3595298853a.zip
fix overflow calculation
git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@479 9d0c8265-081b-0410-96cb-a4ca84ce46f8
Diffstat (limited to 'lib/fileio.c')
-rw-r--r--lib/fileio.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/lib/fileio.c b/lib/fileio.c
index d891b05a..300ae303 100644
--- a/lib/fileio.c
+++ b/lib/fileio.c
@@ -85,10 +85,18 @@ pm_getuint(FILE * const ifP) {
     do {
         unsigned int const digitVal = ch - '0';
 
-        if (i > INT_MAX/10 - digitVal)
+        if (i > INT_MAX/10)
             pm_error("ASCII decimal integer in file is "
                      "too large to be processed.  ");
-        i = i * 10 + digitVal;
+        
+        i *= 10;
+
+        if (i > INT_MAX - digitVal)
+            pm_error("ASCII decimal integer in file is "
+                     "too large to be processed.  ");
+
+        i += digitVal;
+
         ch = pm_getc(ifP);
     } while (ch >= '0' && ch <= '9');