]> git.mxchange.org Git - simgear.git/commitdiff
Fix an infinite loop (due to an overflow condition) when printing some
authorandy <andy>
Fri, 11 Mar 2005 21:49:31 +0000 (21:49 +0000)
committerandy <andy>
Fri, 11 Mar 2005 21:49:31 +0000 (21:49 +0000)
very large numbers.

simgear/nasal/string.c

index 6d9434f726a966d6f3a0204939f8420f0f2754d1..fc0acb0408cefde5c64bbf239074b94257ee597a 100644 (file)
@@ -213,13 +213,13 @@ static int tonum(unsigned char* s, int len, double* result)
 
 // Very simple positive (!) integer print routine.  Puts the result in
 // s and returns the number of characters written.  Does not null
-// terminate the result.
+// terminate the result.  Presumes at least a 32 bit integer, and
+// cannot print integers larger than 9999999999.
 static int decprint(int val, unsigned char* s)
 {
     int p=1, i=0;
     if(val == 0) { *s = '0'; return 1; }
-    while(p <= val) p *= 10;
-    p /= 10;
+    while(p < 1000000000 && p*10 < val) p *= 10;
     while(p > 0) {
         int count = 0;
         while(val >= p) { val -= p; count++; }