<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.hoenzb
        {mso-style-name:hoenzb;}
span.StylE-mailovZprvy18
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Ted,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Thanks very much!&nbsp; And no need to apologize, you’re still very fast.&nbsp; If there’s anything else I’ll try to post another message.&nbsp; One thing I noticed was that
 if preprocessing is turned off weird stuff happens...I was trying to keep my row/column numbering but the preprocess step prevented that – so I tried to turn it off, but I think the program crashed.&nbsp; I’ll try to reproduce this.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Thanks again,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D">Filip<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1F497D"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><b><span lang="CS" style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;">From:</span></b><span lang="CS" style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;"> Ted Ralphs [mailto:ted@lehigh.edu]
<br>
<b>Sent:</b> Tuesday, October 28, 2014 2:12 AM<br>
<b>To:</b> Konvicka Filip<br>
<b>Cc:</b> symphony@list.coin-or.org<br>
<b>Subject:</b> Re: [Symphony] Suspicious Code<o:p></o:p></span></p>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<div>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Hi Filip,<o:p></o:p></p>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Sorry for the delay. I made the fixes you pointed out and pushed them to trunk and stable. The fixes for CoinUtils have already been released along with some other fixes I made. I will have a new release of
 SYMPHONY incorporating everything in a day or two. Thanks for the feedback!<o:p></o:p></p>
</div>
<p class="MsoNormal">Cheers,<br>
<br>
Ted<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<div>
<p class="MsoNormal">On Thu, Sep 25, 2014 at 12:52 PM, Ted Ralphs &lt;<a href="mailto:ted@lehigh.edu" target="_blank">ted@lehigh.edu</a>&gt; wrote:<o:p></o:p></p>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Thanks for the report! I haven't had a chance to fix these issues yet, but I will do so soon.<o:p></o:p></p>
</div>
<p class="MsoNormal">Cheers,<br>
<br>
Ted<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
<div>
<div>
<div>
<p class="MsoNormal">On Tue, Sep 16, 2014 at 7:03 AM, Konvicka Filip &lt;<a href="mailto:Filip.Konvicka@logis.cz" target="_blank">Filip.Konvicka@logis.cz</a>&gt; wrote:<o:p></o:p></p>
</div>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Hi,<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">While cleaning some warnings I stumbled upon several very suspicious lines of code in Symphony 5.5.7.<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Note that item 1 is a change in the headers, and unless this is fixed this causes warnings in programs that link libsymphony.<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Items 2 - 4 are possible bugs in Symphony.<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">1.&nbsp; In OsiSolverInterface.hpp and OsiClpSolverInterface.hpp, there are functions defined with the default parameter values of std::string::npos.&nbsp; The type of this is size_t, but
 the argument for which the default is defined is unsigned. In 64bit builds, this leads to a truncation of the value.<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">virtual</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white"> std::string getRowName(</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">int</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">
 rowIndex,</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">unsigned</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white"> maxLen =
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">static_cast</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&lt;</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">unsigned</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&gt;(std::string::npos))
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">const</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">;</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="CS">&nbsp;<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="CS">I think that it is better to use<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="CS">&nbsp;<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">virtual</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white"> std::string getRowName(</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">int</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">
 rowIndex,</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">unsigned</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white"> maxLen = std::numeric_limits&lt;</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">unsigned</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&gt;::max())
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">const</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">;</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="CS">&nbsp;<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="CS">If you look at how COIN_INT_MAX is defined in CoinFinite.hpp, this is seems to be an acceptable COIN coding practice.&nbsp; There are 5 occurrences in total of this (in
</span>OsiSolverInterface.hpp and OsiClpSolverInterface.hpp).&nbsp; The only use of this that I could find is OsiNames.cpp which uses this as a limit to std::string::substr.&nbsp; Also this change should not break the ABI since this does not affect the symbols.<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="CS">&nbsp;<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">2.&nbsp; In lp_heuristics.c, line 1410:<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">if</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">(dive_depth &gt; dive_depth_limit/2){&nbsp;&nbsp;&nbsp; &nbsp;
</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;fix_incr_cnt =(</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">int</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">)(1.0*(frac_ip_cnt
 - d_fixed_cnt)/</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dive_depth_limit &gt; (dive_depth ? dive_depth_limit - dive_depth : 1)));</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">if</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">(fix_incr_cnt &lt; 1) fix_incr_cnt = 1;</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Look at the division.&nbsp; The divider is a bool value!
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">
(dive_depth_limit &gt; (dive_depth ? dive_depth_limit - dive_depth : 1))</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">I think that most likely this should have been (dive_depth_limit &gt; dive_depth) ? dive_depth_limit-dive_depth : 1, which by the way is equivalent to std::max(dive_depth_limit - dive_depth,
 1).<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">if</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">(dive_depth &gt; dive_depth_limit/2){</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; fix_incr_cnt =(</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">int</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">)(1.0*(frac_ip_cnt
 - d_fixed_cnt)/</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((dive_depth_limit &gt; dive_depth) ? dive_depth_limit - dive_depth : 1));</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">if</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">(fix_incr_cnt &lt; 1) fix_incr_cnt = 1;</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">By the way, the warning that caught the compiler's attention was - lp_heuristics.c(1412): warning C4804: '/' : unsafe use of type 'bool' in operation<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">3. In master_prep_base.c:504, I can also see something very suspicious:<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">if</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">(</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:gray;background:white">P</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">-&gt;ub
 &lt; (</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:gray;background:white">P</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">-&gt;mip-&gt;obj_sense ==
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:#6F008A;background:white">SYM_MAXIMIZE</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">) ? -(</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:gray;background:white">P</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">-&gt;mip-&gt;obj_offset)
 : </span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:gray;background:white">P</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">-&gt;mip-&gt;obj_offset){</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">This is actually evaluated as (P-&gt;ub &lt; (P-&gt;mip-&gt;obj_sense == SYM_MAXIMIZE)) ? -(P-&gt;mip-&gt;obj_offset) : P-&gt;mip-&gt;obj_offset, but obviously the intention was<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">if</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">(</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:gray;background:white">P</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">-&gt;ub
 &lt; ((</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:gray;background:white">P</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">-&gt;mip-&gt;obj_sense ==
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:#6F008A;background:white">SYM_MAXIMIZE</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">) ? -(</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:gray;background:white">P</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">-&gt;mip-&gt;obj_offset)
 : </span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:gray;background:white">P</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">-&gt;mip-&gt;obj_offset)){</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">Again the warning was master_prep_base.c(504): warning C4804: '&lt;' : unsafe use of type 'bool' in operation<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">4. In master.c:231 and 233, there are assignments like this:<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp; tm_par-&gt;warm_start_node_limit = (</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:blue;background:white">int</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">)</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:#6F008A;background:white">SYM_INFINITY</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="CS">&nbsp;<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">warm_start_node_limit is an int, while SYM_INFINITY is defined as 1e20 (i.e. a double).&nbsp; This does not make much sense (the conversion results in some strange value), so I think
 that it's much safer to write<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto">&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;&nbsp; tm_par-&gt;warm_start_node_limit =
</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:#6F008A;background:white">INT_MAX</span><span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">;
</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;</span><span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
Note that 1e20 mod (UINT_MAX&#43;1) is the number that gets assigned, which is 1661992960 for 4byte ints but zero for 2byte ints.&nbsp; Lucky we don't have small ints anymore :-)<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
&nbsp;<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
Cheers,<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
Filip<span lang="CS"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;text-autospace:none">
<span lang="CS" style="font-size:9.5pt;font-family:Consolas;color:black;background:white">&nbsp;</span><span lang="CS"><o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p>&nbsp;</o:p></p>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt">_______________________________________________<br>
Symphony mailing list<br>
<a href="mailto:Symphony@list.coin-or.org" target="_blank">Symphony@list.coin-or.org</a><br>
<a href="http://list.coin-or.org/mailman/listinfo/symphony" target="_blank">http://list.coin-or.org/mailman/listinfo/symphony</a><o:p></o:p></p>
</blockquote>
</div>
<p class="MsoNormal"><span style="color:#888888"><br>
<br clear="all">
<br>
<span class="hoenzb">-- </span><br>
<span class="hoenzb">Dr. Ted Ralphs</span><br>
<span class="hoenzb">Associate Professor, Lehigh University</span><br>
<span class="hoenzb"><a href="tel:%28610%29%20628-1280" target="_blank">(610) 628-1280</a></span><br>
<span class="hoenzb">ted 'at' lehigh 'dot' edu</span><br>
<span class="hoenzb"><a href="http://coral.ie.lehigh.edu/~ted" target="_blank">coral.ie.lehigh.edu/~ted</a></span></span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><br>
<br clear="all">
<br>
-- <o:p></o:p></p>
<div>
<p class="MsoNormal">Dr. Ted Ralphs<br>
Professor, Lehigh University<br>
(610) 628-1280<br>
ted 'at' lehigh 'dot' edu<br>
<a href="http://coral.ie.lehigh.edu/~ted" target="_blank">coral.ie.lehigh.edu/~ted</a><o:p></o:p></p>
</div>
</div>
</div>
</body>
</html>