<p dir="auto">Bumps <a href="https://github.com/ruby/net-imap">net-imap</a> from 0.5.5 to 0.5.6.</p>
<details>
<summary>Release notes</summary>
<p dir="auto"><em>Sourced from <a href="https://github.com/ruby/net-imap/releases">net-imap's releases</a>.</em></p>
<blockquote>
<h2 dir="auto">v0.5.6</h2>
<h2 dir="auto">What's Changed</h2>
<h3 dir="auto">🔒 Security Fix</h3>
<p dir="auto">Fixes <a title="CVE-2025-25186" data-hovercard-type="advisory" data-hovercard-url="/advisories/GHSA-7fc5-f82f-cx69/hovercard" href="https://github.com/advisories/GHSA-7fc5-f82f-cx69">CVE-2025-25186</a> (<a title="GHSA-7fc5-f82f-cx69" data-hovercard-type="advisory" data-hovercard-url="/advisories/GHSA-7fc5-f82f-cx69/hovercard" href="https://github.com/advisories/GHSA-7fc5-f82f-cx69">GHSA-7fc5-f82f-cx69</a>): A malicious server can exhaust client memory by sending <code class="notranslate">APPENDUID</code> or <code class="notranslate">COPYUID</code> responses with very large <code class="notranslate">uid-set</code> ranges. <code class="notranslate">Net::IMAP::UIDPlusData</code> expands these ranges into arrays of integers.</p>
<h4 dir="auto">Fix with minor API changes</h4>
<p dir="auto">Set <code class="notranslate">config.parser_use_deprecated_uidplus_data</code> to <code class="notranslate">false</code> to replace <code class="notranslate">UIDPlusData</code> with <code class="notranslate">AppendUIDData</code> and <code class="notranslate">CopyUIDData</code>.  These classes store their UIDs as <code class="notranslate">Net::IMAP::SequenceSet</code> objects (<em>not</em> expanded into arrays of integers).  Code that does not handle <code class="notranslate">APPENDUID</code> or <code class="notranslate">COPYUID</code> responses should not see any difference.  Code that does handle these responses <em>may</em> need to be updated.</p>
<p dir="auto">For v0.3.8, this option is not available
For v0.4.19, the default value is <code class="notranslate">true</code>.
For v0.5.6, the default value is <code class="notranslate">:up_to_max_size</code>.
For v0.6.0, the only allowed value will be <code class="notranslate">false</code>  <em>(<code class="notranslate">UIDPlusData</code> will be removed from v0.6)</em>.</p>
<h4 dir="auto">Mitigate with backward compatible API</h4>
<p dir="auto">Adjust <code class="notranslate">config.parser_max_deprecated_uidplus_data_size</code> to limit the maximum <code class="notranslate">UIDPlusData</code> UID set size.
When <code class="notranslate">config.parser_use_deprecated_uidplus_data == true</code>, larger sets will crash.
When  <code class="notranslate">config.parser_use_deprecated_uidplus_data == :up_to_max_size</code>, larger sets will use <code class="notranslate">AppendUIDData</code> or <code class="notranslate">CopyUIDData</code>.</p>
<p dir="auto">For v0.3,8, this limit is <em>hard-coded</em> to 10,000.
For v0.4.19, this limit defaults to 1000.
For v0.5.6, this limit defaults to 100.
For v0.6.0, the only allowed value will be <code class="notranslate">0</code>  <em>(<code class="notranslate">UIDPlusData</code> will be removed from v0.6)</em>.</p>
<h4 dir="auto">Please Note: unhandled responses</h4>
<p dir="auto">If the client does not add response handlers to prune unhandled responses, a malicious server can still eventually exhaust all client memory, by repeatedly sending malicious responses.  However, <code class="notranslate">net-imap</code> has always retained unhandled responses, and it has always been necessary for long-lived connections to prune these responses.  This is not significantly different from connecting to a trusted server with a long-lived connection.  To limit the maximum number of retained responses, a simple handler might look something like the following:</p>
<div class="highlight highlight-source-ruby" dir="auto"><pre class="notranslate"><span class="pl-s1">limit</span> <span class="pl-c1">=</span> <span class="pl-c1">1000</span>
<span class="pl-en">imap</span><span class="pl-kos">.</span><span class="pl-en">add_response_handler</span> <span class="pl-k">do</span> |<span class="pl-s1">resp</span>|
  <span class="pl-k">next</span> <span class="pl-k">unless</span> <span class="pl-s1">resp</span><span class="pl-kos">.</span><span class="pl-en">respond_to?</span><span class="pl-kos">(</span><span class="pl-pds">:name</span><span class="pl-kos">)</span> && <span class="pl-s1">resp</span><span class="pl-kos">.</span><span class="pl-en">respond_to?</span><span class="pl-kos">(</span><span class="pl-pds">:data</span><span class="pl-kos">)</span>
  <span class="pl-s1">name</span> <span class="pl-c1">=</span> <span class="pl-s1">resp</span><span class="pl-kos">.</span><span class="pl-s1">name</span>
  <span class="pl-s1">code</span> <span class="pl-c1">=</span> <span class="pl-s1">resp</span><span class="pl-kos">.</span><span class="pl-en">data</span><span class="pl-kos">.</span><span class="pl-s1">code</span>&.<span class="pl-s1">name</span> <span class="pl-k">if</span> <span class="pl-s1">resp</span><span class="pl-kos">.</span><span class="pl-en">data</span><span class="pl-kos">.</span><span class="pl-en">is_a?</span><span class="pl-kos">(</span><span class="pl-v">Net</span>::<span class="pl-c1">IMAP</span>::<span class="pl-v">ResponseText</span><span class="pl-kos">)</span>
  <span class="pl-en">imap</span><span class="pl-kos">.</span><span class="pl-en">responses</span><span class="pl-kos">(</span><span class="pl-s1">name</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-en">_1</span><span class="pl-kos">.</span><span class="pl-en">slice!</span><span class="pl-kos">(</span><span class="pl-c1">0</span>...-<span class="pl-s1">limit</span><span class="pl-kos">)</span> <span class="pl-kos">}</span>
  <span class="pl-en">imap</span><span class="pl-kos">.</span><span class="pl-en">responses</span><span class="pl-kos">(</span><span class="pl-s1">code</span><span class="pl-kos">)</span> <span class="pl-kos">{</span> <span class="pl-en">_1</span><span class="pl-kos">.</span><span class="pl-en">slice!</span><span class="pl-kos">(</span><span class="pl-c1">0</span>...-<span class="pl-s1">limit</span><span class="pl-kos">)</span> <span class="pl-kos">}</span>
<span class="pl-k">end</span></pre></div>
<h3 dir="auto">Added</h3>
<ul dir="auto">
<li>🔧 Ensure ResponseParser config is mutable and non-global by <a href="https://github.com/nevans"><code class="notranslate">@​nevans</code></a> in <a href="https://redirect.github.com/ruby/net-imap/pull/381">ruby/net-imap#381</a></li>
<li>✨ Add SequenceSet methods for querying about duplicates by <a href="https://github.com/nevans"><code class="notranslate">@​nevans</code></a> in <a href="https://redirect.github.com/ruby/net-imap/pull/384">ruby/net-imap#384</a></li>
<li>✨ Add <code class="notranslate">SequenceSet#each_ordered_number</code> by <a href="https://github.com/nevans"><code class="notranslate">@​nevans</code></a> in <a href="https://redirect.github.com/ruby/net-imap/pull/386">ruby/net-imap#386</a></li>
<li>✨ Add <code class="notranslate">SequenceSet#find_ordered_index</code> by <a href="https://github.com/nevans"><code class="notranslate">@​nevans</code></a> in <a href="https://redirect.github.com/ruby/net-imap/pull/396">ruby/net-imap#396</a></li>
<li>✨ Add <code class="notranslate">SequenceSet#ordered_at</code> by <a href="https://github.com/nevans"><code class="notranslate">@​nevans</code></a> in <a href="https://redirect.github.com/ruby/net-imap/pull/397">ruby/net-imap#397</a></li>
<li>✨ Add AppendUIDData and CopyUIDData classes by <a href="https://github.com/nevans"><code class="notranslate">@​nevans</code></a> in <a href="https://redirect.github.com/ruby/net-imap/pull/400">ruby/net-imap#400</a></li>
<li>🔧 Add parser config for <code class="notranslate">APPENDUID</code>/<code class="notranslate">COPYUID</code>, 🗑️ Deprecate UIDPlusData by <a href="https://github.com/nevans"><code class="notranslate">@​nevans</code></a> in <a href="https://redirect.github.com/ruby/net-imap/pull/401">ruby/net-imap#401</a></li>
</ul>
<h3 dir="auto">Fixed</h3>
<ul dir="auto">
<li>🐛 Fix <code class="notranslate">SequenceSet#append</code> when its <code class="notranslate">@string</code> is nil by <a href="https://github.com/nevans"><code class="notranslate">@​nevans</code></a> in <a href="https://redirect.github.com/ruby/net-imap/pull/376">ruby/net-imap#376</a></li>
<li>🐛 Fix SequenceSet merging in another SequenceSet by <a href="https://github.com/nevans"><code class="notranslate">@​nevans</code></a> in <a href="https://redirect.github.com/ruby/net-imap/pull/377">ruby/net-imap#377</a></li>
<li>🐛 Fix SequenceSet count dups with multiple "*" by <a href="https://github.com/nevans"><code class="notranslate">@​nevans</code></a> in <a href="https://redirect.github.com/ruby/net-imap/pull/387">ruby/net-imap#387</a></li>
</ul>

</blockquote>
<p dir="auto">... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul dir="auto">
<li><a href="https://github.com/ruby/net-imap/commit/62710b905d5672dc3dcc6d6774c1863a46e4be2b"><code class="notranslate">62710b9</code></a> 🔖 Bump version to 0.5.6</li>
<li><a href="https://github.com/ruby/net-imap/commit/70e3ddd071a94e450b3238570af482c296380b35"><code class="notranslate">70e3ddd</code></a> Merge commit from fork</li>
<li><a href="https://github.com/ruby/net-imap/commit/e58aff64d55dda4215fa0cfd7f4d1ea7b9ca51ba"><code class="notranslate">e58aff6</code></a> 🔧 Add <code class="notranslate">:up_to_max_size</code> config for UIDPlusData</li>
<li><a href="https://github.com/ruby/net-imap/commit/2f58d020580176ed13fcd1e571ab7bc0e1e8f155"><code class="notranslate">2f58d02</code></a> 🔧 Add config option for max UIDPlusData size</li>
<li><a href="https://github.com/ruby/net-imap/commit/c67470092e53d5f8d1f8d47c80450dd7b5995302"><code class="notranslate">c674700</code></a> 🔒 Limit exponential memory usage to parse uid-set</li>
<li><a href="https://github.com/ruby/net-imap/commit/60f577690d80dd2593edaeb1d09b7681bedac368"><code class="notranslate">60f5776</code></a> 🔧🗑️ Deprecate UIDPlusData, with config to upgrade</li>
<li><a href="https://github.com/ruby/net-imap/commit/8f41dea368f456ee502c5eaf80491e924691010a"><code class="notranslate">8f41dea</code></a> 🔀 Merge pull request <a href="https://redirect.github.com/ruby/net-imap/issues/400">#400</a> from ruby/add-appenduid-copyuid-classes</li>
<li><a href="https://github.com/ruby/net-imap/commit/bcb261d12e9911eaf89d35db314c626501c92b72"><code class="notranslate">bcb261d</code></a> ✨ Add CopyUIDData (to replace UIDPlusData)</li>
<li><a href="https://github.com/ruby/net-imap/commit/01bb49f4ae3220a695e21314ba4d92a84fe64b35"><code class="notranslate">01bb49f</code></a> ✨ Add AppendUIDData (to replace UIDPlusData)</li>
<li><a href="https://github.com/ruby/net-imap/commit/85d0aa264daa682106c73bd4a33d047888b3eee7"><code class="notranslate">85d0aa2</code></a> 🚚 Rename UIDPLUS test file for consistency</li>
<li>Additional commits viewable in <a href="https://github.com/ruby/net-imap/compare/v0.5.5...v0.5.6">compare view</a></li>
</ul>
</details>
<br>
<p dir="auto"><a href="https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores"><img src="https://camo.githubusercontent.com/0b4b1b55e3b40cbf3d0d7c3852a74bd980a60870d60540ab5810622ca480a25f/68747470733a2f2f646570656e6461626f742d6261646765732e6769746875626170702e636f6d2f6261646765732f636f6d7061746962696c6974795f73636f72653f646570656e64656e63792d6e616d653d6e65742d696d6170267061636b6167652d6d616e616765723d62756e646c65722670726576696f75732d76657273696f6e3d302e352e35266e65772d76657273696f6e3d302e352e36" alt="Dependabot compatibility score" data-canonical-src="https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=net-imap&package-manager=bundler&previous-version=0.5.5&new-version=0.5.6" style="max-width: 100%;"></a></p>
<p dir="auto">Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting <code class="notranslate">@dependabot rebase</code>.</p>
<hr>
<details>
<summary>Dependabot commands and options</summary>
<br>
<p dir="auto">You can trigger Dependabot actions by commenting on this PR:</p>
<ul dir="auto">
<li><code class="notranslate">@dependabot rebase</code> will rebase this PR</li>
<li><code class="notranslate">@dependabot recreate</code> will recreate this PR, overwriting any edits that have been made to it</li>
<li><code class="notranslate">@dependabot merge</code> will merge this PR after your CI passes on it</li>
<li><code class="notranslate">@dependabot squash and merge</code> will squash and merge this PR after your CI passes on it</li>
<li><code class="notranslate">@dependabot cancel merge</code> will cancel a previously requested merge and block automerging</li>
<li><code class="notranslate">@dependabot reopen</code> will reopen this PR if it is closed</li>
<li><code class="notranslate">@dependabot close</code> will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually</li>
<li><code class="notranslate">@dependabot show <dependency name> ignore conditions</code> will show all of the ignore conditions of the specified dependency</li>
<li><code class="notranslate">@dependabot ignore this major version</code> will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)</li>
<li><code class="notranslate">@dependabot ignore this minor version</code> will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)</li>
<li><code class="notranslate">@dependabot ignore this dependency</code> will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)<br>
You can disable automated security fix PRs for this repo from the <a href="https://github.com/openstreetmap/openstreetmap-website/network/alerts">Security Alerts page</a>.</li>
</ul>
</details>

<hr>

<h4>You can view, comment on, or merge this pull request online at:</h4>
<p>  <a href='https://github.com/openstreetmap/openstreetmap-website/pull/5644'>https://github.com/openstreetmap/openstreetmap-website/pull/5644</a></p>

<h4>Commit Summary</h4>
<ul>
  <li><a href="https://github.com/openstreetmap/openstreetmap-website/pull/5644/commits/5296fe9e9199b5734d3c4f76c3573f79c6fa046d" class="commit-link">5296fe9</a>  Bump net-imap from 0.5.5 to 0.5.6</li>
</ul>

<h4 style="display: inline-block">File Changes </h4> <p style="display: inline-block">(<a href="https://github.com/openstreetmap/openstreetmap-website/pull/5644/files">1 file</a>)</p>
<ul>
  <li>
    <strong>M</strong>
    <a href="https://github.com/openstreetmap/openstreetmap-website/pull/5644/files#diff-89cade48462044ee1b672dc5f4c3ec250fbd29effcd8932096a23c1283c6731f">Gemfile.lock</a>
    (2)
  </li>
</ul>

<h4>Patch Links:</h4>
<ul>
  <li><a href='https://github.com/openstreetmap/openstreetmap-website/pull/5644.patch'>https://github.com/openstreetmap/openstreetmap-website/pull/5644.patch</a></li>
  <li><a href='https://github.com/openstreetmap/openstreetmap-website/pull/5644.diff'>https://github.com/openstreetmap/openstreetmap-website/pull/5644.diff</a></li>
</ul>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />Reply to this email directly, <a href="https://github.com/openstreetmap/openstreetmap-website/pull/5644">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/AAK2OLLNWAHPRWUUQ53VODT2PDSRFAVCNFSM6AAAAABW3GBOO6VHI2DSMVQWIX3LMV43ASLTON2WKOZSHA2DGMRSGM2TAMY">unsubscribe</a>.<br />You are receiving this because you are subscribed to this thread.<img src="https://github.com/notifications/beacon/AAK2OLOKBAL6QV4WPGTB6XL2PDSRFA5CNFSM6AAAAABW3GBOO6WGG33NNVSW45C7OR4XAZNFJFZXG5LFVJRW63LNMVXHIX3JMTHKS6BFZ4.gif" height="1" width="1" alt="" /><span style="color: transparent; font-size: 0; display: none; visibility: hidden; overflow: hidden; opacity: 0; width: 0; height: 0; max-width: 0; max-height: 0; mso-hide: all">Message ID: <span><openstreetmap/openstreetmap-website/pull/5644</span><span>@</span><span>github</span><span>.</span><span>com></span></span></p>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/openstreetmap/openstreetmap-website/pull/5644",
"url": "https://github.com/openstreetmap/openstreetmap-website/pull/5644",
"name": "View Pull Request"
},
"description": "View this Pull Request on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]</script>