<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent posts to Discussion</title><link>https://sourceforge.net/p/cppcheck/discussion/</link><description>Recent posts to Discussion</description><atom:link href="https://sourceforge.net/p/cppcheck/discussion/feed" rel="self"/><language>en</language><lastBuildDate>Fri, 18 Sep 2026 07:55:51 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/cppcheck/discussion/feed" rel="self" type="application/rss+xml"/><item><title>FALSE NEGATIVE: Division-by-zero checking misses zero from a logical ternary</title><link>https://sourceforge.net/p/cppcheck/discussion/general/thread/8e23bd1078/?limit=25#38a4</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Thanks for reporting, ticket is here: &lt;a href="https://trac.cppcheck.net/ticket/15052" rel="nofollow"&gt;https://trac.cppcheck.net/ticket/15052&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">CHR</dc:creator><pubDate>Fri, 18 Sep 2026 07:55:51 -0000</pubDate><guid isPermaLink="false">https://sourceforge.net65f16cf80128f4af9539b0636977f47b2cb5dc0d</guid></item><item><title>FALSE NEGATIVE: `zerodiv` misses zero written through an out-parameter</title><link>https://sourceforge.net/p/cppcheck/discussion/general/thread/da4d0975cb/?limit=25#09d8</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Example added here: &lt;a href="https://trac.cppcheck.net/ticket/14239" rel="nofollow"&gt;https://trac.cppcheck.net/ticket/14239&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">CHR</dc:creator><pubDate>Fri, 18 Sep 2026 07:43:35 -0000</pubDate><guid isPermaLink="false">https://sourceforge.net0229b06aeb5784c08f7479e9b88a6d1a113c8500</guid></item><item><title>FALSE NEGATIVE: zerodiv misses a known zero divisor in a function template with an unknown branch condition</title><link>https://sourceforge.net/p/cppcheck/discussion/general/thread/e34e317956/?limit=25#f4e1</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Thanks for reporting, ticket is here: &lt;a href="https://trac.cppcheck.net/ticket/15051" rel="nofollow"&gt;https://trac.cppcheck.net/ticket/15051&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">CHR</dc:creator><pubDate>Fri, 18 Sep 2026 07:40:59 -0000</pubDate><guid isPermaLink="false">https://sourceforge.netfe65854c8ccd8547c8f22d80b75c8d44cbb686ab</guid></item><item><title>FALSE NEGATIVE: Division-by-zero checking misses a divisor constrained by a switch case</title><link>https://sourceforge.net/p/cppcheck/discussion/general/thread/58b1fee0e3/?limit=25#05db</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;See &lt;a href="https://trac.cppcheck.net/ticket/10" rel="nofollow"&gt;https://trac.cppcheck.net/ticket/10&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">CHR</dc:creator><pubDate>Fri, 18 Sep 2026 07:29:24 -0000</pubDate><guid isPermaLink="false">https://sourceforge.netae851e6b021e3491a73af3c1a4afec6585d1f8a0</guid></item><item><title>FALSE NEGATIVE: `zerodiv` misses a scalar zeroed by `memset`</title><link>https://sourceforge.net/p/cppcheck/discussion/general/thread/b103de764f/?limit=25#28cd</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;See &lt;a href="https://trac.cppcheck.net/ticket/14239" rel="nofollow"&gt;https://trac.cppcheck.net/ticket/14239&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">CHR</dc:creator><pubDate>Fri, 18 Sep 2026 06:44:13 -0000</pubDate><guid isPermaLink="false">https://sourceforge.net65e4329f111f0e5e03aef192d34c8e50f2cb3749</guid></item><item><title>FALSE NEGATIVE: `zerodiv` misses zero assigned by a temporary object's destructor</title><link>https://sourceforge.net/p/cppcheck/discussion/general/thread/8153adffbd/?limit=25#e45b</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi, I found a false negative in Cppcheck 2.21.0 and 2.22 dev when destruction of a temporary object changes a global value to zero before a division.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Affected tool&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Cppcheck 2.21.0; also reproduced with Cppcheck 2.22 dev&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Affected checker&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Cppcheck CheckOther::checkZeroDivision (zerodiv / zerodivcond)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Minimal reproducer&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;global&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;struct&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;Value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;global&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;global&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;{};&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;global&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Reproduction command&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cppcheck&lt;span class="w"&gt; &lt;/span&gt;--version
cppcheck&lt;span class="w"&gt; &lt;/span&gt;--enable&lt;span class="o"&gt;=&lt;/span&gt;warning&lt;span class="w"&gt; &lt;/span&gt;--std&lt;span class="o"&gt;=&lt;/span&gt;c++17&lt;span class="w"&gt; &lt;/span&gt;--checkers-report&lt;span class="o"&gt;=&lt;/span&gt;checkers.txt&lt;span class="w"&gt; &lt;/span&gt;--template&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{file}:{line}:{column}: [{id}] {message}'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;cppcheck-zerodiv-fn-temporary-destructor.cpp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Current behavior&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cppcheck produces neither a &lt;code&gt;zerodiv&lt;/code&gt; nor a &lt;code&gt;zerodivcond&lt;/code&gt; diagnostic. The checker report lists &lt;code&gt;CheckOther::checkZeroDivision&lt;/code&gt; as active.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected behavior&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cppcheck should report line 10 because the temporary's destructor assigns zero to &lt;code&gt;global&lt;/code&gt; before the division.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Rodri</dc:creator><pubDate>Thu, 17 Sep 2026 17:21:31 -0000</pubDate><guid isPermaLink="false">https://sourceforge.netf3e0e499b740732835ef0200ade5107d81bd47e0</guid></item><item><title>FALSE NEGATIVE: zerodiv misses a known zero divisor in a function template with an unknown branch condition</title><link>https://sourceforge.net/p/cppcheck/discussion/general/thread/e34e317956/?limit=25#f969</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi, I found a false negative in Cppcheck 2.21.0 and 2.22 dev when a constant argument makes a division inside a function-template instantiation divide by zero.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Affected tool&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Cppcheck 2.21.0; also reproduced with Cppcheck 2.22 dev&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Affected checker&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Cppcheck CheckOther::checkZeroDivision (zerodiv / zerodivcond)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Minimal reproducer&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;bool&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;T&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;divide&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;test&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;divide&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Reproduction command&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cppcheck&lt;span class="w"&gt; &lt;/span&gt;--version
cppcheck&lt;span class="w"&gt; &lt;/span&gt;--enable&lt;span class="o"&gt;=&lt;/span&gt;warning&lt;span class="w"&gt; &lt;/span&gt;--std&lt;span class="o"&gt;=&lt;/span&gt;c++17&lt;span class="w"&gt; &lt;/span&gt;--checkers-report&lt;span class="o"&gt;=&lt;/span&gt;checkers.txt&lt;span class="w"&gt; &lt;/span&gt;--template&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{file}:{line}:{column}: [{id}] {message}'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;cppcheck-zerodiv-fn-template-unknown-branch.cpp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Current behavior&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cppcheck produces neither a &lt;code&gt;zerodiv&lt;/code&gt; nor a &lt;code&gt;zerodivcond&lt;/code&gt; diagnostic. The checker report lists &lt;code&gt;CheckOther::checkZeroDivision&lt;/code&gt; as active.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected behavior&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cppcheck should report line 6 because the instantiation receives &lt;code&gt;value == 5&lt;/code&gt;, making &lt;code&gt;value - 5&lt;/code&gt; equal to zero.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Rodri</dc:creator><pubDate>Thu, 17 Sep 2026 17:20:09 -0000</pubDate><guid isPermaLink="false">https://sourceforge.neta3db7ab86370407874c0b2450cb59c1152ec7328</guid></item><item><title>FALSE NEGATIVE: Division-by-zero checking misses a divisor constrained by a switch case</title><link>https://sourceforge.net/p/cppcheck/discussion/general/thread/58b1fee0e3/?limit=25#edfd</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi, I found a false negative in Cppcheck 2.21.0 when a switch case constrains the divisor to zero.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Affected tool&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Cppcheck 2.21.0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Affected checker&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Cppcheck CheckOther::checkZeroDivision (zerodiv / zerodivcond)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Minimal reproducer&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;divide_in_zero_case&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;switch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Reproduction command&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cppcheck&lt;span class="w"&gt; &lt;/span&gt;--version
cppcheck&lt;span class="w"&gt; &lt;/span&gt;--enable&lt;span class="o"&gt;=&lt;/span&gt;warning&lt;span class="w"&gt; &lt;/span&gt;--std&lt;span class="o"&gt;=&lt;/span&gt;c11&lt;span class="w"&gt; &lt;/span&gt;--checkers-report&lt;span class="o"&gt;=&lt;/span&gt;checkers.txt&lt;span class="w"&gt; &lt;/span&gt;--template&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{file}:{line}:{column}: [{id}] {message}'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;cppcheck-zerodiv-fn-switch-case.c
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Current behavior&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cppcheck produces neither a &lt;code&gt;zerodiv&lt;/code&gt; nor a &lt;code&gt;zerodivcond&lt;/code&gt; diagnostic. The checker report lists &lt;code&gt;CheckOther::checkZeroDivision&lt;/code&gt; as active.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected behavior&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cppcheck should report a division-by-zero diagnostic at line 4 because the &lt;code&gt;case 0&lt;/code&gt; branch executes the division with &lt;code&gt;value == 0&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Rodri</dc:creator><pubDate>Thu, 17 Sep 2026 17:19:33 -0000</pubDate><guid isPermaLink="false">https://sourceforge.net9abe650b21e088fd2c2d1ebf56f4ab556cc85c87</guid></item><item><title>FALSE NEGATIVE: `zerodiv` misses zero written through an out-parameter</title><link>https://sourceforge.net/p/cppcheck/discussion/general/thread/da4d0975cb/?limit=25#3fe6</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi, I found a false negative in Cppcheck 2.21.0 and 2.22 dev when a helper writes zero through a pointer before the pointed-to value is used as a divisor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Affected tool&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Cppcheck 2.21.0; also reproduced with Cppcheck 2.22 dev&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Affected checker&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Cppcheck CheckOther::checkZeroDivision (zerodiv / zerodivcond)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Minimal reproducer&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;set_zero&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;test&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="n"&gt;set_zero&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Reproduction command&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cppcheck&lt;span class="w"&gt; &lt;/span&gt;--version
cppcheck&lt;span class="w"&gt; &lt;/span&gt;--enable&lt;span class="o"&gt;=&lt;/span&gt;warning&lt;span class="w"&gt; &lt;/span&gt;--std&lt;span class="o"&gt;=&lt;/span&gt;c++17&lt;span class="w"&gt; &lt;/span&gt;--checkers-report&lt;span class="o"&gt;=&lt;/span&gt;checkers.txt&lt;span class="w"&gt; &lt;/span&gt;--template&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{file}:{line}:{column}: [{id}] {message}'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;cppcheck-zerodiv-fn-out-parameter.cpp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Current behavior&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cppcheck produces neither a &lt;code&gt;zerodiv&lt;/code&gt; nor a &lt;code&gt;zerodivcond&lt;/code&gt; diagnostic. The checker report lists &lt;code&gt;CheckOther::checkZeroDivision&lt;/code&gt; as active.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected behavior&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cppcheck should report line 8 because &lt;code&gt;set_zero(&amp;amp;value)&lt;/code&gt; stores zero in &lt;code&gt;value&lt;/code&gt; before the division.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Rodri</dc:creator><pubDate>Thu, 17 Sep 2026 17:18:24 -0000</pubDate><guid isPermaLink="false">https://sourceforge.netfdcc33b86630e7c55abd2454c0061a81f0071bce</guid></item><item><title>FALSE NEGATIVE: Division-by-zero checking misses a zero sum after two constraints</title><link>https://sourceforge.net/p/cppcheck/discussion/general/thread/2a77b49dd0/?limit=25#78f6</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi, I found a false negative in Cppcheck 2.21.0 when two branch constraints establish that an expression used as a divisor is zero.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Affected tool&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Cppcheck 2.21.0&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Affected checker&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Cppcheck CheckOther::checkZeroDivision (zerodiv / zerodivcond)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Minimal reproducer&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;divide_after_two_constraints&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Reproduction command&lt;/strong&gt;&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;cppcheck&lt;span class="w"&gt; &lt;/span&gt;--version
cppcheck&lt;span class="w"&gt; &lt;/span&gt;--enable&lt;span class="o"&gt;=&lt;/span&gt;warning&lt;span class="w"&gt; &lt;/span&gt;--std&lt;span class="o"&gt;=&lt;/span&gt;c++11&lt;span class="w"&gt; &lt;/span&gt;--checkers-report&lt;span class="o"&gt;=&lt;/span&gt;checkers.txt&lt;span class="w"&gt; &lt;/span&gt;--template&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{file}:{line}:{column}: [{id}] {message}'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;cppcheck-zerodiv-fn-multiple-constraints.cpp
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Current behavior&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cppcheck produces neither a &lt;code&gt;zerodiv&lt;/code&gt; nor a &lt;code&gt;zerodivcond&lt;/code&gt; diagnostic. The checker report lists &lt;code&gt;CheckOther::checkZeroDivision&lt;/code&gt; as active.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Expected behavior&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cppcheck should report a division-by-zero diagnostic at line 6 because reaching that statement establishes &lt;code&gt;x + y == 0&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Rodri</dc:creator><pubDate>Thu, 17 Sep 2026 17:17:23 -0000</pubDate><guid isPermaLink="false">https://sourceforge.neta19016dee5e2987e5c08b09b79fdc6f421d04a0e</guid></item></channel></rss>