#5688: instance Read Integer/Rational/Double readsPrec out of memory and crash
due
to exponential notation
---------------------------------+------------------------------------------
Reporter: gracjan | Owner:
Type: bug | Status: patch
Priority: highest | Milestone: 7.4.1
Component: libraries/base | Version: 6.12.3
Keywords: | Os: Unknown/Multiple
Architecture: Unknown/Multiple | Failure: Runtime crash
Difficulty: Unknown | Testcase:
Blockedby: | Blocking:
Related: |
---------------------------------+------------------------------------------
Comment(by iustin):
Replying to [comment:21 maeder]:
> Before you call read for Integer you can/should check if your string has
at least one and only digits. Calling read is currently just as risky as
calling "{{{^}}}" yourself.
I'm sorry, unless I misunderstood what you meant, this is not an
acceptable workaround except in trivial programs. This breaks any complex
data structure that has Int/Integer/Rational fields, and it also breaks
any libraries which assume that converting a string to an int is safe. For
example, it also affects Text.JSON:
{{{
Prelude Text.JSON> decode "12e1000000000000" :: Result Int
… hangs …
}}}
or the Aeson library:
{{{
Prelude Data.Aeson> decode "[12e1000000000000]" :: Maybe [Int]
… hangs too …
}}}
So no, telling people that suddenly "read" is no longer safe and you have
to do manual checks on its input depending on intended result type is not
acceptable; this needs to be fixed at compiler level and also, IMHO, the
fix backported to previous versions.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5688#comment:22>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs