<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Wed, 11 Nov 2026 04:18:55 +0000</lastBuildDate>
    <item>
      <title>HSEC-2026-0012 — Out-of-bounds read in Eq and Ord on numbers with extreme exponents</title>
      <link>https://db.gcve.eu/vuln/hsec-2026-0012</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Hackage: scientific&lt;/p&gt;
&lt;p&gt;# Out-of-bounds read in Eq and Ord on numbers with extreme exponents&lt;/p&gt;
&lt;p&gt;`scientific-0.3.9.0` reimplemented `Eq` and `Ord` without normalising their
arguments. The new implementation short-circuits on
`integerLog10&amp;#39; c + e` computed in `Int`, which overflows when the base-10
exponent is close to `maxBound :: Int`. The overflowed comparison then falls
through to `magnitude (e1 - e2)`, where the exponent difference overflows to a
negative `Int` as well. `magnitude` indexed its cached power-of-ten array
without a bounds check, so the negative index performed an out-of-bounds read
and the process died with `SIGSEGV`.&lt;/p&gt;
&lt;p&gt;With `scientific-0.3.9.0` (GHC 9.10.3, x86_64-linux), as reported in
[basvandijk/scientific#120](https://github.com/basvandijk/scientific/issues/120):&lt;/p&gt;
&lt;p&gt;```haskell
import Data.Scientific&lt;/p&gt;
&lt;p&gt;main :: IO ()
main = print (scientific 10 maxBound == scientific 1 minBound)
```&lt;/p&gt;
&lt;p&gt;```
$ ./repro; echo &amp;#34;exit=$?&amp;#34;
exit=139
```&lt;/p&gt;
&lt;p&gt;The issue was discovered when Stackage nightly test suites
(`genvalidity-hspec-aeson`, `genvalidity-sydtest-aeson`) started segfaulting
after upgrading to `scientific-0.3.9.0`: their property tests round-trip
`aeson` `Value`s, which produces `Scientific`s with extreme exponents.&lt;/p&gt;
&lt;p&gt;Versions before `0.3.9.0` did not crash, but `Eq`/`Ord` returned invalid
results there instead (the normalisation-based implementation overflows the
exponent, reporting `scientific 10 maxBound == scientific 1 minBound` as
`True`). The same unchecked read was also reachable through `(+)`…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Hackage: scientific&lt;/p&gt;
&lt;p&gt;# Out-of-bounds read in Eq and Ord on numbers with extreme exponents&lt;/p&gt;
&lt;p&gt;`scientific-0.3.9.0` reimplemented `Eq` and `Ord` without normalising their
arguments. The new implementation short-circuits on
`integerLog10&amp;#39; c + e` computed in `Int`, which overflows when the base-10
exponent is close to `maxBound :: Int`. The overflowed comparison then falls
through to `magnitude (e1 - e2)`, where the exponent difference overflows to a
negative `Int` as well. `magnitude` indexed its cached power-of-ten array
without a bounds check, so the negative index performed an out-of-bounds read
and the process died with `SIGSEGV`.&lt;/p&gt;
&lt;p&gt;With `scientific-0.3.9.0` (GHC 9.10.3, x86_64-linux), as reported in
[basvandijk/scientific#120](https://github.com/basvandijk/scientific/issues/120):&lt;/p&gt;
&lt;p&gt;```haskell
import Data.Scientific&lt;/p&gt;
&lt;p&gt;main :: IO ()
main = print (scientific 10 maxBound == scientific 1 minBound)
```&lt;/p&gt;
&lt;p&gt;```
$ ./repro; echo &amp;#34;exit=$?&amp;#34;
exit=139
```&lt;/p&gt;
&lt;p&gt;The issue was discovered when Stackage nightly test suites
(`genvalidity-hspec-aeson`, `genvalidity-sydtest-aeson`) started segfaulting
after upgrading to `scientific-0.3.9.0`: their property tests round-trip
`aeson` `Value`s, which produces `Scientific`s with extreme exponents.&lt;/p&gt;
&lt;p&gt;Versions before `0.3.9.0` did not crash, but `Eq`/`Ord` returned invalid
results there instead (the normalisation-based implementation overflows the
exponent, reporting `scientific 10 maxBound == scientific 1 minBound` as
`True`). The same unchecked read was also reachable through `(+)`…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/hsec-2026-0012</guid>
    </item>
  </channel>
</rss>
