<?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>Thu, 08 Oct 2026 19:36:19 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-107220</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-107220</link>
      <description>&lt;p&gt;Excelize is a Go language library for reading and writing Microsoft Excel spreadsheets. From 2.7.1 to 2.11.0, mergeCellsParser leaves the cached rectangle empty for an empty mergeCell ref and then passes that empty slice to cellInRange without a length check. GetCellValue reaches mergeCellsParser, which passes an empty rectangle derived from the mergeCell ref attribute into cellInRange. When a crafted worksheet contains an empty mergeCell ref and a non-streaming cell API reads the worksheet, cellInRange indexes four positions in an empty slice, allowing an attacker to panic on the first affected cell operation. No fixed version is available as of this review.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Excelize is a Go language library for reading and writing Microsoft Excel spreadsheets. From 2.7.1 to 2.11.0, mergeCellsParser leaves the cached rectangle empty for an empty mergeCell ref and then passes that empty slice to cellInRange without a length check. GetCellValue reaches mergeCellsParser, which passes an empty rectangle derived from the mergeCell ref attribute into cellInRange. When a crafted worksheet contains an empty mergeCell ref and a non-streaming cell API reads the worksheet, cellInRange indexes four positions in an empty slice, allowing an attacker to panic on the first affected cell operation. No fixed version is available as of this review.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-107220</guid>
    </item>
    <item>
      <title>GHSA-g27h-8qhm-6pff — Excelize: Panic in cellInRange on a worksheet with an empty mergeCell ref</title>
      <link>https://db.gcve.eu/vuln/ghsa-g27h-8qhm-6pff</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/xuri/excelize/v2&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;A worksheet containing `&amp;lt;mergeCell ref=&amp;#34;&amp;#34;/&amp;gt;` makes `mergeCellsParser` leave the cached rectangle empty, and `cellInRange` then indexes that empty slice without a length check. Every non-streaming cell API panics with `index out of range [0] with length 0` on the first cell read after opening the file.&lt;/p&gt;
&lt;p&gt;### Where it is&lt;/p&gt;
&lt;p&gt;`cell.go`, `cellInRange`&lt;/p&gt;
&lt;p&gt;func cellInRange(cell, ref []int) bool {
    	return cell[0] &amp;gt;= ref[0] &amp;amp;&amp;amp; cell[0] &amp;lt;= ref[2] &amp;amp;&amp;amp; cell[1] &amp;gt;= ref[1] &amp;amp;&amp;amp; cell[1] &amp;lt;= ref[3]
    }&lt;/p&gt;
&lt;p&gt;`ref` is indexed at four positions with no bounds check.&lt;/p&gt;
&lt;p&gt;The caller that can hand it an empty slice, `mergeCellsParser`&lt;/p&gt;
&lt;p&gt;if ref := ws.MergeCells.Cells[i].Ref; len(ws.MergeCells.Cells[i].rect) == 0 &amp;amp;&amp;amp; ref != &amp;#34;&amp;#34; {
    	if strings.Count(ref, &amp;#34;:&amp;#34;) != 1 {
    		ref += &amp;#34;:&amp;#34; + ref
    	}
    	rect, err := rangeRefToCoordinates(ref)
    	if err != nil {
    		return cell, err
    	}
    	_ = sortCoordinates(rect)
    	ws.MergeCells.Cells[i].rect = rect
    }
    if cellInRange([]int{col, row}, ws.MergeCells.Cells[i].rect) {&lt;/p&gt;
&lt;p&gt;The `ref != &amp;#34;&amp;#34;` condition means an empty `ref` skips the block that populates `rect`, so `rect` stays nil. The `cellInRange` call on the next line is unconditional and receives that nil slice.&lt;/p&gt;
&lt;p&gt;`Ref` comes straight from `xl/worksheets/sheetN.xml` through `encoding/xml`, so an empty string is entirely attacker-controlled.&lt;/p&gt;
&lt;p&gt;### Impact&lt;/p&gt;
&lt;p&gt;Any consumer that opens an untrusted workbook and reads a cell panics. The loop scans every merged cell, so any cell reference trig…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/xuri/excelize/v2&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;A worksheet containing `&amp;lt;mergeCell ref=&amp;#34;&amp;#34;/&amp;gt;` makes `mergeCellsParser` leave the cached rectangle empty, and `cellInRange` then indexes that empty slice without a length check. Every non-streaming cell API panics with `index out of range [0] with length 0` on the first cell read after opening the file.&lt;/p&gt;
&lt;p&gt;### Where it is&lt;/p&gt;
&lt;p&gt;`cell.go`, `cellInRange`&lt;/p&gt;
&lt;p&gt;func cellInRange(cell, ref []int) bool {
    	return cell[0] &amp;gt;= ref[0] &amp;amp;&amp;amp; cell[0] &amp;lt;= ref[2] &amp;amp;&amp;amp; cell[1] &amp;gt;= ref[1] &amp;amp;&amp;amp; cell[1] &amp;lt;= ref[3]
    }&lt;/p&gt;
&lt;p&gt;`ref` is indexed at four positions with no bounds check.&lt;/p&gt;
&lt;p&gt;The caller that can hand it an empty slice, `mergeCellsParser`&lt;/p&gt;
&lt;p&gt;if ref := ws.MergeCells.Cells[i].Ref; len(ws.MergeCells.Cells[i].rect) == 0 &amp;amp;&amp;amp; ref != &amp;#34;&amp;#34; {
    	if strings.Count(ref, &amp;#34;:&amp;#34;) != 1 {
    		ref += &amp;#34;:&amp;#34; + ref
    	}
    	rect, err := rangeRefToCoordinates(ref)
    	if err != nil {
    		return cell, err
    	}
    	_ = sortCoordinates(rect)
    	ws.MergeCells.Cells[i].rect = rect
    }
    if cellInRange([]int{col, row}, ws.MergeCells.Cells[i].rect) {&lt;/p&gt;
&lt;p&gt;The `ref != &amp;#34;&amp;#34;` condition means an empty `ref` skips the block that populates `rect`, so `rect` stays nil. The `cellInRange` call on the next line is unconditional and receives that nil slice.&lt;/p&gt;
&lt;p&gt;`Ref` comes straight from `xl/worksheets/sheetN.xml` through `encoding/xml`, so an empty string is entirely attacker-controlled.&lt;/p&gt;
&lt;p&gt;### Impact&lt;/p&gt;
&lt;p&gt;Any consumer that opens an untrusted workbook and reads a cell panics. The loop scans every merged cell, so any cell reference trig…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-g27h-8qhm-6pff</guid>
    </item>
  </channel>
</rss>
