<html>
 <body>
  <div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
   <table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
    <tr>
     <td>
      This is an automatically generated e-mail. To reply, visit:
      <a href="https://reviewboard.asterisk.org/r/4533/">https://reviewboard.asterisk.org/r/4533/</a>
     </td>
    </tr>
   </table>
   <br />










<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
 <p style="margin-top: 0;">On April 1st, 2015, 3:16 a.m. CEST, <b>rmudgett</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  



<table width="100%" border="0" bgcolor="white" style="border: 1px solid #C0C0C0; border-collapse: collapse; margin: 2px padding: 2px;">
 <thead>
  <tr>
   <th colspan="4" bgcolor="#F0F0F0" style="border-bottom: 1px solid #C0C0C0; font-size: 9pt; padding: 4px 8px; text-align: left;">
    <a href="https://reviewboard.asterisk.org/r/4533/diff/7/?file=73369#file73369line174" style="color: black; font-weight: bold; text-decoration: underline;">/branches/13/funcs/func_curl.c</a>
    <span style="font-weight: normal;">

     (Diff revision 7)

    </span>
   </th>
  </tr>
 </thead>

 <tbody style="background-color: #e4d9cb; padding: 4px 8px; text-align: center;">
  <tr>

   <td colspan="4"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">ASTERISK_FILE_VERSION(__FILE__, "$Revision$")</pre></td>

  </tr>
 </tbody>



 
 

 <tbody>

  <tr>
    <th bgcolor="#e9eaa8" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2">174</font></th>
    <td bgcolor="#fdfebc" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="cp">#define CURLOPT_SPECIAL_HASHCOMPAT -500</span></pre></td>
    <th bgcolor="#e9eaa8" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">174</font></th>
    <td bgcolor="#fdfebc" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="c1"><span class="hl">//</span>#define CURLOPT_SPECIAL_HASHCOMPAT -500</span></pre></td>
  </tr>

 </tbody>


 
 

 <tbody>

  <tr>
    <th bgcolor="#b1ebb0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2"></font></th>
    <td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
    <th bgcolor="#b1ebb0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">175</font></th>
    <td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "><span class="cp">#define CURLOPT_SPECIAL_HASHCOMPAT CURLOPT_SPECIAL_HASHCOMPAT</span></pre></td>
  </tr>

 </tbody>

</table>

  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Try defining this as:
#define CURLOPT_SPECIAL_HASHCOMPAT ((CURLoption) -500)

This should shut-up the compiler without changing the binary value.</pre>
 </blockquote>



 <p>On April 1st, 2015, 3:59 a.m. CEST, <b>Diederik de Groot</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">CurlOption is a positive enum though. So the warning about it not being allowed to be negative remains, won't it ?

BTW: I made a typo while changing this one
I was meaning to set it to:
#define CURLOPT_SPECIAL_HASHCOMPAT CURLOPT_LASTENTRY
Which is a legal value. Not really happy with this though.

Setting it to 
#define CURLOPT_SPECIAL_HASHCOMPAT ((CURLoption) 500)
Might be an option, not sure if this is checked though.

This would require a little further source investigation.
</pre>
 </blockquote>





 <p>On April 1st, 2015, 4:44 a.m. CEST, <b>rmudgett</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">The cast should shut the compiler up as you are telling the compiler to reinterpret the -500 to be a member of the enum.  If not then it's another of those compilers that tenatiously guards their stupidity.  Reinterpreting a negative number as an unsigned value results in a very large number on two's complement machines.  Are there any modern machines that don't use two's complement?

Using CURLOPT_LASTENTRY should also work as a last resort since it has the down side of library updates adding new enum values and changing the last entry value.</pre>
 </blockquote>





 <p>On April 7th, 2015, 9:44 p.m. CEST, <b>rmudgett</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">This is the last issue I have with this patch.
I'd say ship it if clang is happy with my initial cast suggestion.</pre>
 </blockquote>





 <p>On April 8th, 2015, 1:25 a.m. CEST, <b>Diederik de Groot</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Will do !
clang is just fine with it. 
does go against my grain a little, especially because we end up out of bounds of the CURLOPT_LASTENTRY, which could get checked at some time in the curl source code (if not already). Making the change though.</pre>
 </blockquote>





 <p>On April 8th, 2015, 2:09 a.m. CEST, <b>rmudgett</b> wrote:</p>
 <blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
  <pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">I don't think that value can ever get passed to the curl library.  The value only seems to be used for configuration.  The curl library won't know what to do with it anyway.</pre>
 </blockquote>







</blockquote>
<pre style="margin-left: 1em; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Didn't look too deep into it to be honest. Taking your word for it ;-)</pre>
<br />




<p>- Diederik</p>


<br />
<p>On April 8th, 2015, 1:26 a.m. CEST, Diederik de Groot wrote:</p>








<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('https://reviewboard.asterisk.org/static/rb/images/review_request_box_top_bg.ab6f3b1072c9.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
 <tr>
  <td>

<div>Review request for Asterisk Developers.</div>
<div>By Diederik de Groot.</div>


<p style="color: grey;"><i>Updated April 8, 2015, 1:26 a.m.</i></p>







<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Bugs: </b>


 <a href="https://issues.asterisk.org/jira/browse/ASTERISK-24917">ASTERISK-24917</a>


</div>



<div style="margin-top: 1.5em;">
 <b style="color: #575012; font-size: 10pt;">Repository: </b>
Asterisk
</div>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
 <table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">clang's static analyzer will throw quite a number warnings / errors during compilation, some of which can be very helpfull in finding corner-case bugs

clang compiler warning:-Wtautological-compare

Changes:
/branches/13/channels/pjsip/dialplan_functions.c:869
len is of type size_t, which is unsigned. It will not be able to hold a value < 0

/branches/13/funcs/func_curl.c:174
Not a 100% sure how to do this correctly. But assiging a negative value is problematic. Extending the enum in curl/curl.h is not possible either. I opted to use the enum last entry (CURL_LAST) which is currently not used for any thing. Another option would be to use one of the OBSOLETE VALUES like 16. Neither way is very nice though.

/branches/13/include/asterisk/app.h:988
Needed to convey the error state returned by res/res_stasis_recording.c:stasis_app_recording_if_exists_parse

/branches/13/include/asterisk/cel.h:77
Added to convey not-found or error state. Not sure which name would be prefered for such an enum value.

/branches/13/main/cel.c:536
Return actual enum instead of -1,l which can not be conveyed by this enum.

/branches/13/main/enum.c:260
dn_expand return signed int

/branches/13/main/event.c:202
enum type cannot be < 0

/branches/13/main/indications.c:362
tone_data.freq1 and freq2 are unsigned int's so no need to check if < 0. Not sure what should happend when freq1 / freq2 are 0 already... (needs recheck by source owner)

/branches/13/main/presencestate.c:293
Should use the actual enum value for INVALID State

/branches/13/main/security_events.c:432/890/1176/
enum event_type cannot be <0

/branches/13/main/udptl.c:365/649/661
encode_length returns and unsigned int, so checking if < 0 does not make sence. Not 100% if encode_length has side effects, so left the actual call the this function in place. (Needs to be rechecked by code-owner)

/branches/13/res/res_pjsip_exten_state.c:411
Used a temporary int variable to be able to check the return value from ast_hint_presence_state.. Not very nice, but did not want to change the signature of this function.

/branches/13/res/res_stasis_playback.c:634
operation is enum and cannot be < 0

/branches/13/res/res_stasis_recording.c:598/604
recording->state / operation is enum and cannot be < 0

/branches/13/res/res_security_log.c:992
enum event_type cannot be <0

use of ARRAY_IN_BOUNDS with enum results in tautological comparison for the lower limit which is always true.</pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
 <tr>
  <td>
   <pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Compiles without warning
</pre>
  </td>
 </tr>
</table>


<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">

 <li>/branches/13/res/res_stasis_recording.c <span style="color: grey">(433444)</span></li>

 <li>/branches/13/res/res_stasis_playback.c <span style="color: grey">(433444)</span></li>

 <li>/branches/13/res/res_pjsip_exten_state.c <span style="color: grey">(433444)</span></li>

 <li>/branches/13/res/ari/resource_channels.c <span style="color: grey">(433444)</span></li>

 <li>/branches/13/res/ari/resource_bridges.c <span style="color: grey">(433444)</span></li>

 <li>/branches/13/main/udptl.c <span style="color: grey">(433444)</span></li>

 <li>/branches/13/main/security_events.c <span style="color: grey">(433444)</span></li>

 <li>/branches/13/main/presencestate.c <span style="color: grey">(433444)</span></li>

 <li>/branches/13/main/indications.c <span style="color: grey">(433444)</span></li>

 <li>/branches/13/main/event.c <span style="color: grey">(433444)</span></li>

 <li>/branches/13/main/enum.c <span style="color: grey">(433444)</span></li>

 <li>/branches/13/main/cel.c <span style="color: grey">(433444)</span></li>

 <li>/branches/13/main/app.c <span style="color: grey">(433444)</span></li>

 <li>/branches/13/include/asterisk/utils.h <span style="color: grey">(433444)</span></li>

 <li>/branches/13/include/asterisk/logger.h <span style="color: grey">(433444)</span></li>

 <li>/branches/13/include/asterisk/cel.h <span style="color: grey">(433444)</span></li>

 <li>/branches/13/include/asterisk/app.h <span style="color: grey">(433444)</span></li>

 <li>/branches/13/funcs/func_curl.c <span style="color: grey">(433444)</span></li>

 <li>/branches/13/channels/pjsip/dialplan_functions.c <span style="color: grey">(433444)</span></li>

 <li>/branches/13/channels/chan_skinny.c <span style="color: grey">(433444)</span></li>

</ul>

<p><a href="https://reviewboard.asterisk.org/r/4533/diff/" style="margin-left: 3em;">View Diff</a></p>







  </td>
 </tr>
</table>








  </div>
 </body>
</html>