[GHC] #8695: Arithmetic overflow from (minBound :: Int) `quot` (-1)

GHC ghc-devs at haskell.org
Sun Jan 26 10:08:48 UTC 2014


#8695: Arithmetic overflow from (minBound :: Int) `quot` (-1)
------------------------------------------------+--------------------------
        Reporter:  rleslie                      |            Owner:
            Type:  bug                          |           Status:  new
        Priority:  normal                       |        Milestone:
       Component:  libraries/haskell2010        |          Version:  7.6.3
      Resolution:                               |         Keywords:
Operating System:  Unknown/Multiple             |     Architecture:
 Type of failure:  Incorrect result at runtime  |  Unknown/Multiple
       Test Case:                               |       Difficulty:
        Blocking:                               |  Unknown
                                                |       Blocked By:
                                                |  Related Tickets:
------------------------------------------------+--------------------------

Comment (by rleslie):

 Replying to [comment:2 hvr]:
 > Fwiw, you also have to avoid calling `quot`/`div` with a `0`-divisor,
 otherwise a div-by-zero exception is raised.  I wonder if this isn't
 rather a deficiency of the Haskell2010 report, failing to mention that the
 modulo-semantics make an exception for the `quot`/`div` operations.

 I think a division-by-zero exception is reasonably well-understood, since
 there is no value {{{q = d `quot` 0}}} that could be returned in general
 such that `q * 0 == d`, even with modulo arithmetic.

 Most code performing division with arbitrary operands is well aware of the
 possibility of a division-by-zero exception, and defensively avoids it.
 Much less well known or understood, I think, is the possibility of
 overflow from the singular case of {{{minBound `quot` (-1)}}} which, if
 not accounted for, can also break one’s application (and possibly be a
 vector for denial-of-service attacks…)

 I think I’d much rather have {{{minBound `quot` (-1) == minBound}}} under
 modulo arithmetic than a justification for the current exception.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8695#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list