Fix arithemtic overflow in Double.ToString exposed by Bug #383531.
authorEyal Alalouf <eyala@mainsoft.com>
Tue, 27 May 2008 12:18:26 +0000 (12:18 -0000)
committerEyal Alalouf <eyala@mainsoft.com>
Tue, 27 May 2008 12:18:26 +0000 (12:18 -0000)
svn path=/trunk/mcs/; revision=104129

mcs/class/corlib/System/ChangeLog
mcs/class/corlib/System/NumberFormatter.jvm.cs
mcs/class/corlib/Test/System/ChangeLog
mcs/class/corlib/Test/System/NumberFormatterTest.cs

index 356715524e242dd3246365b523a2df54162a7323..010b85af10b765aba5cbf436942051a5fe4f7594 100644 (file)
@@ -1,3 +1,8 @@
+2008-05-27  Eyal Alaluf <eyala@mainsoft.com>
+
+       * NumberFormatter.jvm.cs: Fix tables to avoid arithemtic overflow
+         in Double.ToString as exposed by Bug #383531.
+
 2008-05-24  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * String.cs: Comment out 2.0 compatibility fix for SubString, since it
 2008-05-24  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * String.cs: Comment out 2.0 compatibility fix for SubString, since it
index 1e71ffe344fa50a5ba2465f6673240cdb0e1bf03..5078eebcfbaff10bc07a6be74704f6c0c32b4e04 100644 (file)
@@ -75,7 +75,7 @@ namespace System
                        0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99};\r
 \r
                static readonly ulong[] MantissaBitsTable = {\r
                        0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99};\r
 \r
                static readonly ulong[] MantissaBitsTable = {\r
-                       4556951262222748432, 9113902524445496865, 18227805048890993730\r
+                       4556951262222748432, 9113902524445496865, 1822780504889099373, \r
                        3645561009778198746, 7291122019556397492, 14582244039112794984, \r
                        2916448807822558996, 5832897615645117993, 11665795231290235987, \r
                        2333159046258047197, 4666318092516094394, 9332636185032188789, \r
                        3645561009778198746, 7291122019556397492, 14582244039112794984, \r
                        2916448807822558996, 5832897615645117993, 11665795231290235987, \r
                        2333159046258047197, 4666318092516094394, 9332636185032188789, \r
@@ -141,7 +141,7 @@ namespace System
                        3575555834521367442, 7151111669042734884, 14302223338085469768, \r
                        2860444667617093953, 5720889335234187907, 11441778670468375814, \r
                        2288355734093675162, 4576711468187350325, 9153422936374700651, \r
                        3575555834521367442, 7151111669042734884, 14302223338085469768, \r
                        2860444667617093953, 5720889335234187907, 11441778670468375814, \r
                        2288355734093675162, 4576711468187350325, 9153422936374700651, \r
-                       18306845872749401303, 3661369174549880260, 7322738349099760521, \r
+                       1830684587274940130, 3661369174549880260, 7322738349099760521, \r
                        14645476698199521043, 2929095339639904208, 5858190679279808417, \r
                        11716381358559616834, 2343276271711923366, 4686552543423846733, \r
                        9373105086847693467, 1874621017369538693, 3749242034739077387, \r
                        14645476698199521043, 2929095339639904208, 5858190679279808417, \r
                        11716381358559616834, 2343276271711923366, 4686552543423846733, \r
                        9373105086847693467, 1874621017369538693, 3749242034739077387, \r
@@ -172,7 +172,7 @@ namespace System
                        3541058984203561811, 7082117968407123623, 14164235936814247246, \r
                        2832847187362849449, 5665694374725698898, 11331388749451397797, \r
                        2266277749890279559, 4532555499780559119, 9065110999561118238, \r
                        3541058984203561811, 7082117968407123623, 14164235936814247246, \r
                        2832847187362849449, 5665694374725698898, 11331388749451397797, \r
                        2266277749890279559, 4532555499780559119, 9065110999561118238, \r
-                       18130221999122236476, 3626044399824447295, 7252088799648894590, \r
+                       1813022199912223647, 3626044399824447295, 7252088799648894590, \r
                        14504177599297789180, 2900835519859557836, 5801671039719115672, \r
                        11603342079438231344, 2320668415887646268, 4641336831775292537, \r
                        9282673663550585075, 1856534732710117015, 3713069465420234030, \r
                        14504177599297789180, 2900835519859557836, 5801671039719115672, \r
                        11603342079438231344, 2320668415887646268, 4641336831775292537, \r
                        9282673663550585075, 1856534732710117015, 3713069465420234030, \r
@@ -206,7 +206,7 @@ namespace System
                        17955302187076837701, 3591060437415367540, 7182120874830735080, \r
                        14364241749661470161, 2872848349932294032, 5745696699864588064, \r
                        11491393399729176129, 2298278679945835225, 4596557359891670451, \r
                        17955302187076837701, 3591060437415367540, 7182120874830735080, \r
                        14364241749661470161, 2872848349932294032, 5745696699864588064, \r
                        11491393399729176129, 2298278679945835225, 4596557359891670451, \r
-                       9193114719783340903, 18386229439566681806, 3677245887913336361, \r
+                       9193114719783340903, 1838622943956668180, 3677245887913336361, \r
                        7354491775826672722, 14708983551653345445, 2941796710330669089, \r
                        5883593420661338178, 11767186841322676356, 2353437368264535271, \r
                        4706874736529070542, 9413749473058141084, 1882749894611628216, \r
                        7354491775826672722, 14708983551653345445, 2941796710330669089, \r
                        5883593420661338178, 11767186841322676356, 2353437368264535271, \r
                        4706874736529070542, 9413749473058141084, 1882749894611628216, \r
@@ -237,7 +237,7 @@ namespace System
                        17782069995880619867, 3556413999176123973, 7112827998352247947, \r
                        14225655996704495894, 2845131199340899178, 5690262398681798357, \r
                        11380524797363596715, 2276104959472719343, 4552209918945438686, \r
                        17782069995880619867, 3556413999176123973, 7112827998352247947, \r
                        14225655996704495894, 2845131199340899178, 5690262398681798357, \r
                        11380524797363596715, 2276104959472719343, 4552209918945438686, \r
-                       9104419837890877372, 18208839675781754744, 3641767935156350948, \r
+                       9104419837890877372, 1820883967578175474, 3641767935156350948, \r
                        7283535870312701897, 14567071740625403795, 2913414348125080759, \r
                        5826828696250161518, 11653657392500323036, 2330731478500064607, \r
                        4661462957000129214, 9322925914000258429, 1864585182800051685, \r
                        7283535870312701897, 14567071740625403795, 2913414348125080759, \r
                        5826828696250161518, 11653657392500323036, 2330731478500064607, \r
                        4661462957000129214, 9322925914000258429, 1864585182800051685, \r
@@ -302,7 +302,7 @@ namespace System
                        8929588994392773298, 17859177988785546597, 3571835597757109319, \r
                        7143671195514218638, 14287342391028437277, 2857468478205687455, \r
                        5714936956411374911, 11429873912822749822, 2285974782564549964, \r
                        8929588994392773298, 17859177988785546597, 3571835597757109319, \r
                        7143671195514218638, 14287342391028437277, 2857468478205687455, \r
                        5714936956411374911, 11429873912822749822, 2285974782564549964, \r
-                       4571949565129099928, 9143899130258199857, 18287798260516399715\r
+                       4571949565129099928, 9143899130258199857, 1828779826051639971, \r
                        3657559652103279943, 7315119304206559886, 14630238608413119772, \r
                        2926047721682623954, 5852095443365247908, 11704190886730495817, \r
                        2340838177346099163, 4681676354692198327, 9363352709384396654, \r
                        3657559652103279943, 7315119304206559886, 14630238608413119772, \r
                        2926047721682623954, 5852095443365247908, 11704190886730495817, \r
                        2340838177346099163, 4681676354692198327, 9363352709384396654, \r
@@ -333,7 +333,7 @@ namespace System
                        8843436600416711296, 17686873200833422592, 3537374640166684518, \r
                        7074749280333369037, 14149498560666738074, 2829899712133347614, \r
                        5659799424266695229, 11319598848533390459, 2263919769706678091, \r
                        8843436600416711296, 17686873200833422592, 3537374640166684518, \r
                        7074749280333369037, 14149498560666738074, 2829899712133347614, \r
                        5659799424266695229, 11319598848533390459, 2263919769706678091, \r
-                       4527839539413356183, 9055679078826712367, 18111358157653424735\r
+                       4527839539413356183, 9055679078826712367, 1811135815765342473, \r
                        3622271631530684947, 7244543263061369894, 14489086526122739788, \r
                        2897817305224547957, 5795634610449095915, 11591269220898191830, \r
                        2318253844179638366, 4636507688359276732, 9273015376718553464, \r
                        3622271631530684947, 7244543263061369894, 14489086526122739788, \r
                        2897817305224547957, 5795634610449095915, 11591269220898191830, \r
                        2318253844179638366, 4636507688359276732, 9273015376718553464, \r
@@ -368,7 +368,7 @@ namespace System
                        3587324068671531701, 7174648137343063403, 14349296274686126806, \r
                        2869859254937225361, 5739718509874450722, 11479437019748901445, \r
                        2295887403949780289, 4591774807899560578, 9183549615799121156, \r
                        3587324068671531701, 7174648137343063403, 14349296274686126806, \r
                        2869859254937225361, 5739718509874450722, 11479437019748901445, \r
                        2295887403949780289, 4591774807899560578, 9183549615799121156, \r
-                       18367099231598242312, 3673419846319648462, 7346839692639296924, \r
+                       1836709923159824231, 3673419846319648462, 7346839692639296924, \r
                        14693679385278593849, 2938735877055718769, 5877471754111437539, \r
                        11754943508222875079, 2350988701644575015, 4701977403289150031, \r
                        9403954806578300063, 1880790961315660012, 3761581922631320025, \r
                        14693679385278593849, 2938735877055718769, 5877471754111437539, \r
                        11754943508222875079, 2350988701644575015, 4701977403289150031, \r
                        9403954806578300063, 1880790961315660012, 3761581922631320025, \r
@@ -399,7 +399,7 @@ namespace System
                        3552713678800500929, 7105427357601001858, 14210854715202003717, \r
                        2842170943040400743, 5684341886080801486, 11368683772161602973, \r
                        2273736754432320594, 4547473508864641189, 9094947017729282379, \r
                        3552713678800500929, 7105427357601001858, 14210854715202003717, \r
                        2842170943040400743, 5684341886080801486, 11368683772161602973, \r
                        2273736754432320594, 4547473508864641189, 9094947017729282379, \r
-                       18189894035458564758, 3637978807091712951, 7275957614183425903, \r
+                       1818989403545856475, 3637978807091712951, 7275957614183425903, \r
                        14551915228366851806, 2910383045673370361, 5820766091346740722, \r
                        11641532182693481445, 2328306436538696289, 4656612873077392578, \r
                        9313225746154785156, 1862645149230957031, 3725290298461914062, \r
                        14551915228366851806, 2910383045673370361, 5820766091346740722, \r
                        11641532182693481445, 2328306436538696289, 4656612873077392578, \r
                        9313225746154785156, 1862645149230957031, 3725290298461914062, \r
@@ -464,7 +464,7 @@ namespace System
                        17840596158824498513, 3568119231764899702, 7136238463529799405, \r
                        14272476927059598810, 2854495385411919762, 5708990770823839524, \r
                        11417981541647679048, 2283596308329535809, 4567192616659071619, \r
                        17840596158824498513, 3568119231764899702, 7136238463529799405, \r
                        14272476927059598810, 2854495385411919762, 5708990770823839524, \r
                        11417981541647679048, 2283596308329535809, 4567192616659071619, \r
-                       9134385233318143238, 18268770466636286477, 3653754093327257295, \r
+                       9134385233318143238, 1826877046663628647, 3653754093327257295, \r
                        7307508186654514591, 14615016373309029182, 2923003274661805836, \r
                        5846006549323611672, 11692013098647223345, 2338402619729444669, \r
                        4676805239458889338, 9353610478917778676, 1870722095783555735, \r
                        7307508186654514591, 14615016373309029182, 2923003274661805836, \r
                        5846006549323611672, 11692013098647223345, 2338402619729444669, \r
                        4676805239458889338, 9353610478917778676, 1870722095783555735, \r
@@ -529,7 +529,7 @@ namespace System
                        8958978968711216842, 17917957937422433684, 3583591587484486736, \r
                        7167183174968973473, 14334366349937946947, 2866873269987589389, \r
                        5733746539975178779, 11467493079950357558, 2293498615990071511, \r
                        8958978968711216842, 17917957937422433684, 3583591587484486736, \r
                        7167183174968973473, 14334366349937946947, 2866873269987589389, \r
                        5733746539975178779, 11467493079950357558, 2293498615990071511, \r
-                       4586997231980143023, 9173994463960286046, 18347988927920572092\r
+                       4586997231980143023, 9173994463960286046, 1834798892792057209, \r
                        3669597785584114418, 7339195571168228837, 14678391142336457674, \r
                        2935678228467291534, 5871356456934583069, 11742712913869166139, \r
                        2348542582773833227, 4697085165547666455, 9394170331095332911, \r
                        3669597785584114418, 7339195571168228837, 14678391142336457674, \r
                        2935678228467291534, 5871356456934583069, 11742712913869166139, \r
                        2348542582773833227, 4697085165547666455, 9394170331095332911, \r
@@ -560,7 +560,7 @@ namespace System
                        8872543021186607550, 17745086042373215101, 3549017208474643020, \r
                        7098034416949286040, 14196068833898572081, 2839213766779714416, \r
                        5678427533559428832, 11356855067118857664, 2271371013423771532, \r
                        8872543021186607550, 17745086042373215101, 3549017208474643020, \r
                        7098034416949286040, 14196068833898572081, 2839213766779714416, \r
                        5678427533559428832, 11356855067118857664, 2271371013423771532, \r
-                       4542742026847543065, 9085484053695086131, 18170968107390172263\r
+                       4542742026847543065, 9085484053695086131, 1817096810739017226, \r
                        3634193621478034452, 7268387242956068905, 14536774485912137810, \r
                        2907354897182427562, 5814709794364855124, 11629419588729710248, \r
                        2325883917745942049, 4651767835491884099, 9303535670983768199, \r
                        3634193621478034452, 7268387242956068905, 14536774485912137810, \r
                        2907354897182427562, 5814709794364855124, 11629419588729710248, \r
                        2325883917745942049, 4651767835491884099, 9303535670983768199, \r
@@ -595,7 +595,7 @@ namespace System
                        3599131035634557106, 7198262071269114212, 14396524142538228424, \r
                        2879304828507645684, 5758609657015291369, 11517219314030582739, \r
                        2303443862806116547, 4606887725612233095, 9213775451224466191, \r
                        3599131035634557106, 7198262071269114212, 14396524142538228424, \r
                        2879304828507645684, 5758609657015291369, 11517219314030582739, \r
                        2303443862806116547, 4606887725612233095, 9213775451224466191, \r
-                       18427550902448932383, 3685510180489786476, 7371020360979572953, \r
+                       1842755090244893238, 3685510180489786476, 7371020360979572953, \r
                        14742040721959145907, 2948408144391829181, 5896816288783658362, \r
                        11793632577567316725, 2358726515513463345, 4717453031026926690, \r
                        9434906062053853380, 1886981212410770676, 3773962424821541352, \r
                        14742040721959145907, 2948408144391829181, 5896816288783658362, \r
                        11793632577567316725, 2358726515513463345, 4717453031026926690, \r
                        9434906062053853380, 1886981212410770676, 3773962424821541352, \r
@@ -626,7 +626,7 @@ namespace System
                        3564406732517340014, 7128813465034680029, 14257626930069360058, \r
                        2851525386013872011, 5703050772027744023, 11406101544055488046, \r
                        2281220308811097609, 4562440617622195218, 9124881235244390437, \r
                        3564406732517340014, 7128813465034680029, 14257626930069360058, \r
                        2851525386013872011, 5703050772027744023, 11406101544055488046, \r
                        2281220308811097609, 4562440617622195218, 9124881235244390437, \r
-                       18249762470488780874, 3649952494097756174, 7299904988195512349, \r
+                       1824976247048878087, 3649952494097756174, 7299904988195512349, \r
                        14599809976391024699, 2919961995278204939, 5839923990556409879, \r
                        11679847981112819759, 2335969596222563951, 4671939192445127903, \r
                        9343878384890255807, 1868775676978051161, 3737551353956102323, \r
                        14599809976391024699, 2919961995278204939, 5839923990556409879, \r
                        11679847981112819759, 2335969596222563951, 4671939192445127903, \r
                        9343878384890255807, 1868775676978051161, 3737551353956102323, \r
@@ -691,7 +691,7 @@ namespace System
                        17899314949046850752, 3579862989809370150, 7159725979618740301, \r
                        14319451959237480602, 2863890391847496120, 5727780783694992240, \r
                        11455561567389984481, 2291112313477996896, 4582224626955993792, \r
                        17899314949046850752, 3579862989809370150, 7159725979618740301, \r
                        14319451959237480602, 2863890391847496120, 5727780783694992240, \r
                        11455561567389984481, 2291112313477996896, 4582224626955993792, \r
-                       9164449253911987585, 18328898507823975170, 3665779701564795034, \r
+                       9164449253911987585, 1832889850782397517, 3665779701564795034, \r
                        7331559403129590068, 14663118806259180136, 2932623761251836027, \r
                        5865247522503672054, 11730495045007344109, 2346099009001468821, \r
                        4692198018002937643, 9384396036005875287, 1876879207201175057, \r
                        7331559403129590068, 14663118806259180136, 2932623761251836027, \r
                        5865247522503672054, 11730495045007344109, 2346099009001468821, \r
                        4692198018002937643, 9384396036005875287, 1876879207201175057, \r
@@ -756,12 +756,12 @@ namespace System
                        8988465674311579538, 17976931348623159077, 3595386269724631815, \r
                        7190772539449263630, 14381545078898527261, 2876309015779705452, \r
                        5752618031559410904, 11505236063118821809, 2301047212623764361, \r
                        8988465674311579538, 17976931348623159077, 3595386269724631815, \r
                        7190772539449263630, 14381545078898527261, 2876309015779705452, \r
                        5752618031559410904, 11505236063118821809, 2301047212623764361, \r
-                       4602094425247528723, 9204188850495057447, 18408377700990114895\r
+                       4602094425247528723, 9204188850495057447, 1840837770099011489, \r
                        3681675540198022979, 7363351080396045958, \r
                };\r
 \r
                static readonly int[] TensExponentTable = {\r
                        3681675540198022979, 7363351080396045958, \r
                };\r
 \r
                static readonly int[] TensExponentTable = {\r
-                       -323, -323, -323, -322, -322, -322, -321, -321, -321, -320, -320, -320, \r
+                       -323, -323, -322, -322, -322, -322, -321, -321, -321, -320, -320, -320, \r
                        -319, -319, -319, -319, -318, -318, -318, -317, -317, -317, -316, -316, \r
                        -316, -316, -315, -315, -315, -314, -314, -314, -313, -313, -313, -313, \r
                        -312, -312, -312, -311, -311, -311, -310, -310, -310, -310, -309, -309, \r
                        -319, -319, -319, -319, -318, -318, -318, -317, -317, -317, -316, -316, \r
                        -316, -316, -315, -315, -315, -314, -314, -314, -313, -313, -313, -313, \r
                        -312, -312, -312, -311, -311, -311, -310, -310, -310, -310, -309, -309, \r
@@ -777,7 +777,7 @@ namespace System
                        -276, -276, -276, -275, -275, -275, -274, -274, -274, -273, -273, -273, \r
                        -273, -272, -272, -272, -271, -271, -271, -270, -270, -270, -270, -269, \r
                        -269, -269, -268, -268, -268, -267, -267, -267, -267, -266, -266, -266, \r
                        -276, -276, -276, -275, -275, -275, -274, -274, -274, -273, -273, -273, \r
                        -273, -272, -272, -272, -271, -271, -271, -270, -270, -270, -270, -269, \r
                        -269, -269, -268, -268, -268, -267, -267, -267, -267, -266, -266, -266, \r
-                       -265, -265, -265, -264, -264, -264, -264, -263, -263, -263, -262, -262, \r
+                       -265, -265, -265, -264, -264, -264, -263, -263, -263, -263, -262, -262, \r
                        -262, -261, -261, -261, -260, -260, -260, -260, -259, -259, -259, -258, \r
                        -258, -258, -257, -257, -257, -257, -256, -256, -256, -255, -255, -255, \r
                        -254, -254, -254, -254, -253, -253, -253, -252, -252, -252, -251, -251, \r
                        -262, -261, -261, -261, -260, -260, -260, -260, -259, -259, -259, -258, \r
                        -258, -258, -257, -257, -257, -257, -256, -256, -256, -255, -255, -255, \r
                        -254, -254, -254, -254, -253, -253, -253, -252, -252, -252, -251, -251, \r
@@ -785,7 +785,7 @@ namespace System
                        -247, -247, -247, -246, -246, -246, -245, -245, -245, -245, -244, -244, \r
                        -244, -243, -243, -243, -242, -242, -242, -242, -241, -241, -241, -240, \r
                        -240, -240, -239, -239, -239, -239, -238, -238, -238, -237, -237, -237, \r
                        -247, -247, -247, -246, -246, -246, -245, -245, -245, -245, -244, -244, \r
                        -244, -243, -243, -243, -242, -242, -242, -242, -241, -241, -241, -240, \r
                        -240, -240, -239, -239, -239, -239, -238, -238, -238, -237, -237, -237, \r
-                       -236, -236, -236, -236, -235, -235, -235, -234, -234, -234, -233, -233, \r
+                       -236, -236, -236, -235, -235, -235, -235, -234, -234, -234, -233, -233, \r
                        -233, -232, -232, -232, -232, -231, -231, -231, -230, -230, -230, -229, \r
                        -229, -229, -229, -228, -228, -228, -227, -227, -227, -226, -226, -226, \r
                        -226, -225, -225, -225, -224, -224, -224, -223, -223, -223, -223, -222, \r
                        -233, -232, -232, -232, -232, -231, -231, -231, -230, -230, -230, -229, \r
                        -229, -229, -229, -228, -228, -228, -227, -227, -227, -226, -226, -226, \r
                        -226, -225, -225, -225, -224, -224, -224, -223, -223, -223, -223, -222, \r
@@ -793,7 +793,7 @@ namespace System
                        -218, -218, -218, -217, -217, -217, -217, -216, -216, -216, -215, -215, \r
                        -215, -214, -214, -214, -214, -213, -213, -213, -212, -212, -212, -211, \r
                        -211, -211, -211, -210, -210, -210, -209, -209, -209, -208, -208, -208, \r
                        -218, -218, -218, -217, -217, -217, -217, -216, -216, -216, -215, -215, \r
                        -215, -214, -214, -214, -214, -213, -213, -213, -212, -212, -212, -211, \r
                        -211, -211, -211, -210, -210, -210, -209, -209, -209, -208, -208, -208, \r
-                       -208, -207, -207, -207, -206, -206, -206, -205, -205, -205, -205, -204, \r
+                       -208, -207, -207, -207, -206, -206, -206, -205, -205, -205, -204, -204, \r
                        -204, -204, -203, -203, -203, -202, -202, -202, -201, -201, -201, -201, \r
                        -200, -200, -200, -199, -199, -199, -198, -198, -198, -198, -197, -197, \r
                        -197, -196, -196, -196, -195, -195, -195, -195, -194, -194, -194, -193, \r
                        -204, -204, -203, -203, -203, -202, -202, -202, -201, -201, -201, -201, \r
                        -200, -200, -200, -199, -199, -199, -198, -198, -198, -198, -197, -197, \r
                        -197, -196, -196, -196, -195, -195, -195, -195, -194, -194, -194, -193, \r
@@ -801,7 +801,7 @@ namespace System
                        -189, -189, -189, -189, -188, -188, -188, -187, -187, -187, -186, -186, \r
                        -186, -186, -185, -185, -185, -184, -184, -184, -183, -183, -183, -183, \r
                        -182, -182, -182, -181, -181, -181, -180, -180, -180, -180, -179, -179, \r
                        -189, -189, -189, -189, -188, -188, -188, -187, -187, -187, -186, -186, \r
                        -186, -186, -185, -185, -185, -184, -184, -184, -183, -183, -183, -183, \r
                        -182, -182, -182, -181, -181, -181, -180, -180, -180, -180, -179, -179, \r
-                       -179, -178, -178, -178, -177, -177, -177, -177, -176, -176, -176, -175, \r
+                       -179, -178, -178, -178, -177, -177, -177, -176, -176, -176, -176, -175, \r
                        -175, -175, -174, -174, -174, -173, -173, -173, -173, -172, -172, -172, \r
                        -171, -171, -171, -170, -170, -170, -170, -169, -169, -169, -168, -168, \r
                        -168, -167, -167, -167, -167, -166, -166, -166, -165, -165, -165, -164, \r
                        -175, -175, -174, -174, -174, -173, -173, -173, -173, -172, -172, -172, \r
                        -171, -171, -171, -170, -170, -170, -170, -169, -169, -169, -168, -168, \r
                        -168, -167, -167, -167, -167, -166, -166, -166, -165, -165, -165, -164, \r
@@ -817,7 +817,7 @@ namespace System
                        -132, -131, -131, -131, -130, -130, -130, -130, -129, -129, -129, -128, \r
                        -128, -128, -127, -127, -127, -127, -126, -126, -126, -125, -125, -125, \r
                        -124, -124, -124, -124, -123, -123, -123, -122, -122, -122, -121, -121, \r
                        -132, -131, -131, -131, -130, -130, -130, -130, -129, -129, -129, -128, \r
                        -128, -128, -127, -127, -127, -127, -126, -126, -126, -125, -125, -125, \r
                        -124, -124, -124, -124, -123, -123, -123, -122, -122, -122, -121, -121, \r
-                       -121, -121, -120, -120, -120, -119, -119, -119, -118, -118, -118, -118\r
+                       -121, -121, -120, -120, -120, -119, -119, -119, -118, -118, -118, -117\r
                        -117, -117, -117, -116, -116, -116, -115, -115, -115, -114, -114, -114, \r
                        -114, -113, -113, -113, -112, -112, -112, -111, -111, -111, -111, -110, \r
                        -110, -110, -109, -109, -109, -108, -108, -108, -108, -107, -107, -107, \r
                        -117, -117, -117, -116, -116, -116, -115, -115, -115, -114, -114, -114, \r
                        -114, -113, -113, -113, -112, -112, -112, -111, -111, -111, -111, -110, \r
                        -110, -110, -109, -109, -109, -108, -108, -108, -108, -107, -107, -107, \r
@@ -825,7 +825,7 @@ namespace System
                        -103, -102, -102, -102, -102, -101, -101, -101, -100, -100, -100, -99, \r
                        -99, -99, -99, -98, -98, -98, -97, -97, -97, -96, -96, -96, \r
                        -96, -95, -95, -95, -94, -94, -94, -93, -93, -93, -93, -92, \r
                        -103, -102, -102, -102, -102, -101, -101, -101, -100, -100, -100, -99, \r
                        -99, -99, -99, -98, -98, -98, -97, -97, -97, -96, -96, -96, \r
                        -96, -95, -95, -95, -94, -94, -94, -93, -93, -93, -93, -92, \r
-                       -92, -92, -91, -91, -91, -90, -90, -90, -90, -89, -89, -89, \r
+                       -92, -92, -91, -91, -91, -90, -90, -90, -89, -89, -89, -89, \r
                        -88, -88, -88, -87, -87, -87, -86, -86, -86, -86, -85, -85, \r
                        -85, -84, -84, -84, -83, -83, -83, -83, -82, -82, -82, -81, \r
                        -81, -81, -80, -80, -80, -80, -79, -79, -79, -78, -78, -78, \r
                        -88, -88, -88, -87, -87, -87, -86, -86, -86, -86, -85, -85, \r
                        -85, -84, -84, -84, -83, -83, -83, -83, -82, -82, -82, -81, \r
                        -81, -81, -80, -80, -80, -80, -79, -79, -79, -78, -78, -78, \r
@@ -834,7 +834,7 @@ namespace System
                        -70, -70, -70, -69, -69, -69, -68, -68, -68, -68, -67, -67, \r
                        -67, -66, -66, -66, -65, -65, -65, -65, -64, -64, -64, -63, \r
                        -63, -63, -62, -62, -62, -62, -61, -61, -61, -60, -60, -60, \r
                        -70, -70, -70, -69, -69, -69, -68, -68, -68, -68, -67, -67, \r
                        -67, -66, -66, -66, -65, -65, -65, -65, -64, -64, -64, -63, \r
                        -63, -63, -62, -62, -62, -62, -61, -61, -61, -60, -60, -60, \r
-                       -59, -59, -59, -59, -58, -58, -58, -57, -57, -57, -56, -56, \r
+                       -59, -59, -59, -58, -58, -58, -58, -57, -57, -57, -56, -56, \r
                        -56, -55, -55, -55, -55, -54, -54, -54, -53, -53, -53, -52, \r
                        -52, -52, -52, -51, -51, -51, -50, -50, -50, -49, -49, -49, \r
                        -49, -48, -48, -48, -47, -47, -47, -46, -46, -46, -46, -45, \r
                        -56, -55, -55, -55, -55, -54, -54, -54, -53, -53, -53, -52, \r
                        -52, -52, -52, -51, -51, -51, -50, -50, -50, -49, -49, -49, \r
                        -49, -48, -48, -48, -47, -47, -47, -46, -46, -46, -46, -45, \r
@@ -842,7 +842,7 @@ namespace System
                        -41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -38, -38, \r
                        -38, -37, -37, -37, -37, -36, -36, -36, -35, -35, -35, -34, \r
                        -34, -34, -34, -33, -33, -33, -32, -32, -32, -31, -31, -31, \r
                        -41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -38, -38, \r
                        -38, -37, -37, -37, -37, -36, -36, -36, -35, -35, -35, -34, \r
                        -34, -34, -34, -33, -33, -33, -32, -32, -32, -31, -31, -31, \r
-                       -31, -30, -30, -30, -29, -29, -29, -28, -28, -28, -27, -27, \r
+                       -30, -30, -30, -30, -29, -29, -29, -28, -28, -28, -27, -27, \r
                        -27, -27, -26, -26, -26, -25, -25, -25, -24, -24, -24, -24, \r
                        -23, -23, -23, -22, -22, -22, -21, -21, -21, -21, -20, -20, \r
                        -20, -19, -19, -19, -18, -18, -18, -18, -17, -17, -17, -16, \r
                        -27, -27, -26, -26, -26, -25, -25, -25, -24, -24, -24, -24, \r
                        -23, -23, -23, -22, -22, -22, -21, -21, -21, -21, -20, -20, \r
                        -20, -19, -19, -19, -18, -18, -18, -18, -17, -17, -17, -16, \r
@@ -858,7 +858,7 @@ namespace System
                        16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 19, 20, \r
                        20, 20, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, \r
                        24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 27, 27, \r
                        16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 19, 20, \r
                        20, 20, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, \r
                        24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 27, 27, \r
-                       27, 28, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31, \r
+                       27, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 31, \r
                        31, 31, 32, 32, 32, 32, 33, 33, 33, 34, 34, 34, \r
                        35, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, \r
                        38, 38, 39, 39, 39, 40, 40, 40, 41, 41, 41, 41, \r
                        31, 31, 32, 32, 32, 32, 33, 33, 33, 34, 34, 34, \r
                        35, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, \r
                        38, 38, 39, 39, 39, 40, 40, 40, 41, 41, 41, 41, \r
@@ -874,7 +874,7 @@ namespace System
                        74, 75, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, \r
                        78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, \r
                        81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 84, 85, \r
                        74, 75, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, \r
                        78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, \r
                        81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 84, 85, \r
-                       85, 85, 86, 86, 86, 87, 87, 87, 87, 88, 88, 88, \r
+                       85, 85, 86, 86, 86, 87, 87, 87, 88, 88, 88, 88, \r
                        89, 89, 89, 90, 90, 90, 91, 91, 91, 91, 92, 92, \r
                        92, 93, 93, 93, 94, 94, 94, 94, 95, 95, 95, 96, \r
                        96, 96, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, \r
                        89, 89, 89, 90, 90, 90, 91, 91, 91, 91, 92, 92, \r
                        92, 93, 93, 93, 94, 94, 94, 94, 95, 95, 95, 96, \r
                        96, 96, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, \r
@@ -882,7 +882,7 @@ namespace System
                        103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, \r
                        107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 110, 110, \r
                        110, 111, 111, 111, 112, 112, 112, 112, 113, 113, 113, 114, \r
                        103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, \r
                        107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 110, 110, \r
                        110, 111, 111, 111, 112, 112, 112, 112, 113, 113, 113, 114, \r
-                       114, 114, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, \r
+                       114, 114, 115, 115, 115, 116, 116, 116, 116, 117, 117, 117, \r
                        118, 118, 118, 119, 119, 119, 119, 120, 120, 120, 121, 121, \r
                        121, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, \r
                        125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, \r
                        118, 118, 118, 119, 119, 119, 119, 120, 120, 120, 121, 121, \r
                        121, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, \r
                        125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, \r
@@ -891,14 +891,14 @@ namespace System
                        136, 136, 136, 137, 137, 137, 137, 138, 138, 138, 139, 139, \r
                        139, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, \r
                        143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, \r
                        136, 136, 136, 137, 137, 137, 137, 138, 138, 138, 139, 139, \r
                        139, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, \r
                        143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, \r
-                       146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, \r
+                       147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, \r
                        150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, \r
                        154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 157, 157, \r
                        157, 158, 158, 158, 159, 159, 159, 159, 160, 160, 160, 161, \r
                        161, 161, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, \r
                        165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, \r
                        168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 171, \r
                        150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, \r
                        154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 157, 157, \r
                        157, 158, 158, 158, 159, 159, 159, 159, 160, 160, 160, 161, \r
                        161, 161, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, \r
                        165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, \r
                        168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 171, \r
-                       172, 172, 172, 173, 173, 173, 174, 174, 174, 174, 175, 175, \r
+                       172, 172, 172, 173, 173, 173, 174, 174, 174, 175, 175, 175, \r
                        175, 176, 176, 176, 177, 177, 177, 178, 178, 178, 178, 179, \r
                        179, 179, 180, 180, 180, 181, 181, 181, 181, 182, 182, 182, \r
                        183, 183, 183, 184, 184, 184, 184, 185, 185, 185, 186, 186, \r
                        175, 176, 176, 176, 177, 177, 177, 178, 178, 178, 178, 179, \r
                        179, 179, 180, 180, 180, 181, 181, 181, 181, 182, 182, 182, \r
                        183, 183, 183, 184, 184, 184, 184, 185, 185, 185, 186, 186, \r
@@ -915,7 +915,7 @@ namespace System
                        222, 223, 223, 223, 224, 224, 224, 224, 225, 225, 225, 226, \r
                        226, 226, 227, 227, 227, 227, 228, 228, 228, 229, 229, 229, \r
                        230, 230, 230, 230, 231, 231, 231, 232, 232, 232, 233, 233, \r
                        222, 223, 223, 223, 224, 224, 224, 224, 225, 225, 225, 226, \r
                        226, 226, 227, 227, 227, 227, 228, 228, 228, 229, 229, 229, \r
                        230, 230, 230, 230, 231, 231, 231, 232, 232, 232, 233, 233, \r
-                       233, 233, 234, 234, 234, 235, 235, 235, 236, 236, 236, 237, \r
+                       233, 234, 234, 234, 234, 235, 235, 235, 236, 236, 236, 237, \r
                        237, 237, 237, 238, 238, 238, 239, 239, 239, 240, 240, 240, \r
                        240, 241, 241, 241, 242, 242, 242, 243, 243, 243, 243, 244, \r
                        244, 244, 245, 245, 245, 246, 246, 246, 246, 247, 247, 247, \r
                        237, 237, 237, 238, 238, 238, 239, 239, 239, 240, 240, 240, \r
                        240, 241, 241, 241, 242, 242, 242, 243, 243, 243, 243, 244, \r
                        244, 244, 245, 245, 245, 246, 246, 246, 246, 247, 247, 247, \r
@@ -931,7 +931,7 @@ namespace System
                        280, 280, 281, 281, 281, 282, 282, 282, 283, 283, 283, 283, \r
                        284, 284, 284, 285, 285, 285, 286, 286, 286, 286, 287, 287, \r
                        287, 288, 288, 288, 289, 289, 289, 289, 290, 290, 290, 291, \r
                        280, 280, 281, 281, 281, 282, 282, 282, 283, 283, 283, 283, \r
                        284, 284, 284, 285, 285, 285, 286, 286, 286, 286, 287, 287, \r
                        287, 288, 288, 288, 289, 289, 289, 289, 290, 290, 290, 291, \r
-                       291, 291, 292, 292, 292, 292, 293, 293, \r
+                       291, 291, 292, 292, 292, 293, 293, 293, \r
                };\r
 \r
 #if false\r
                };\r
 \r
 #if false\r
@@ -942,8 +942,10 @@ namespace System
                // further the double ToString performance.\r
                private const int ExponentMid = 1043;\r
                private const int ExponentMax = 2047;\r
                // further the double ToString performance.\r
                private const int ExponentMid = 1043;\r
                private const int ExponentMax = 2047;\r
-               private const ulong UpperMapMark = UInt64.MaxValue / 2;\r
-               private const ulong LowerMapMark = UInt64.MaxValue / 5;\r
+\r
+               // Ensure that values won't cause overflow when multiplied with the double Mantissa.\r
+               private const ulong UpperMapMark = UInt64.MaxValue / 2 - (1 << 57);\r
+               private const ulong LowerMapMark = UInt64.MaxValue / 5 - (1 << 56);\r
 \r
                // The results of 2 ^ 64 / 5 * i for i in {0 .. 4}\r
                private static ulong[] Div5 = new ulong[] {\r
 \r
                // The results of 2 ^ 64 / 5 * i for i in {0 .. 4}\r
                private static ulong[] Div5 = new ulong[] {\r
index 2f0d5cf3717ae2884747c6774a6d083f8c8cd969..e81d60f573a28c5302b68bcfd5b511288c463a2c 100644 (file)
@@ -1,3 +1,8 @@
+2008-05-27  Eyal Alaluf <eyala@mainsoft.com>
+
+       * NumberFormatterTest.cs: Add test for arithemtic overflow in
+         Double.ToString as exposed by Bug #383531.
+
 2008-05-25  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * StringTest.cs: Added/improved tests for ToLower and ToUpper.
 2008-05-25  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * StringTest.cs: Added/improved tests for ToLower and ToUpper.
index c5ebca0291009ef06fb56710976518b4bd1c742d..dd32b3687c9b994f0f8578767a34a99d67f93399 100644 (file)
@@ -4287,6 +4287,21 @@ namespace MonoTests.System
                        AssertEquals ("#11", "3.40282347E+38", Single.MaxValue.ToString("R"));\r
                }\r
 \r
                        AssertEquals ("#11", "3.40282347E+38", Single.MaxValue.ToString("R"));\r
                }\r
 \r
+               // Tests arithmetic overflow in double.ToString exposed by Bug #383531\r
+               [Test]\r
+               public void TestToStringOverflow()\r
+               {\r
+                       // Test all the possible double exponents with the maximal mantissa\r
+            long dblPattern = 0xfffffffffffff; // all 1s significand\r
+\r
+            for (long exp = 0; exp < 4096; exp++) {\r
+                double val = BitConverter.Int64BitsToDouble((long)(dblPattern | (exp << 52)));\r
+                string strRes = val.ToString("R", NumberFormatInfo.InvariantInfo);\r
+                               double rndTripVal = Double.Parse(strRes);\r
+                               AssertEquals ("Iter#" + exp, val, rndTripVal);\r
+            }\r
+               }\r
+\r
                // Test17000 - Double and X\r
                [Test]\r
                [ExpectedException (typeof (FormatException))]\r
                // Test17000 - Double and X\r
                [Test]\r
                [ExpectedException (typeof (FormatException))]\r