{"id":255943,"date":"2015-04-24T13:30:04","date_gmt":"2015-04-24T09:30:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=255943"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=255943","title":{"rendered":"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Haiku (\u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e BeOS) c \u043f\u043e\u043c\u043e\u0449\u044c\u044e PVS-Studio. \u0427\u0430\u0441\u0442\u044c 2"},"content":{"rendered":"<p>     \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/b5c\/a3f\/a72\/b5ca3fa729424a862852e149dc855578.png\" align=\"left\"\/><br \/>  \u042d\u0442\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Haiku. \u0412 <a href=\"http:\/\/habrahabr.ru\/company\/pvs-studio\/blog\/256347\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u0431\u044b\u043b\u0438 \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a, \u043d\u043e \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0443\u0441\u043b\u043e\u0432\u0438\u0439. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c. \u0421\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u0440\u0443\u043f\u043f.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/go.php?url=1530\">Haiku<\/a> \u2014 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0446\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 \u0434\u0432\u043e\u0438\u0447\u043d\u0443\u044e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 BeOS. Haiku \u0432\u043e\u043f\u043b\u043e\u0449\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0438\u0434\u0435\u0438 BeOS. \u042d\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e \u0440\u0435\u0448\u0451\u043d\u043d\u0430\u044f \u043a\u0430\u043a \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0435 \u044f\u0434\u0440\u043e: \u043c\u0438\u043a\u0440\u043e\u044f\u0434\u0435\u0440\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438.<\/p>\n<p>  \u041f\u0440\u043e\u0435\u043a\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0441\u044f \u043f\u043e \u043f\u0440\u043e\u0441\u044c\u0431\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 Haiku \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"http:\/\/www.viva64.com\/ru\/pvs-studio\/\">PVS-Studio 5.24<\/a>.<\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438<\/h2>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0116\/\">V527<\/a> It is odd that the &#8216;\\0&#8217; value is assigned to &#8216;char&#8217; type pointer. Probably meant: *scratchPtr = &#8216;\\0&#8217;. TextGapBuffer.cpp 228  <\/p>\n<pre><code class=\"cpp\">const char* TextGapBuffer::Text() {   const char* realText = RealText();    if (fPasswordMode) {     ....      char* scratchPtr = fScratchBuffer;     for (uint32 i = 0; i &lt; numChars; i++) {       memcpy(scratchPtr, B_UTF8_BULLET, bulletCharLen);       scratchPtr += bulletCharLen;     }     scratchPtr = '\\0';      \/\/&lt;==      return fScratchBuffer;   }    return realText; }<\/code><\/pre>\n<p>  \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0445\u043e\u0442\u0435\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043b\u044c \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a\u0438, \u0430 \u043d\u0435 \u043e\u0431\u043d\u0443\u043b\u0438\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442: &quot;*scratchPtr = &#8216;\\0&#8217;;&quot;.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0328\/\">V692<\/a> An inappropriate attempt to append a null character to a string. To determine the length of a string by &#8216;strlen&#8217; function correctly, a string ending with a null terminator should be used in the first place. PoorManWindow.cpp 254  <\/p>\n<pre><code class=\"cpp\">void PoorManWindow::MessageReceived(BMessage* message) {   ....   if (inet_ntop(AF_INET, &amp;sin_addr, addr, sizeof(addr)) != NULL){     addr[strlen(addr)] = '\\0';  \/\/&lt;==     line &lt;&lt; '(' &lt;&lt; addr &lt;&lt; &quot;) &quot;;   }   .... }<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c <a href=\"http:\/\/www.viva64.com\/ru\/t\/0088\/\">\u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043b\u044c<\/a> \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u0442\u0440\u043e\u043a\u0438, \u0442\u0443\u0442 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 strlen(), \u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c, \u0432\u0435\u0434\u044c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 strlen() \u0441\u0442\u0440\u043e\u043a\u0430 \u0443\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u043d\u0443\u043b\u0451\u043c. \u041d\u043e\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u043a\u0430\u043a \u0440\u0430\u0437 \u0432 \u0442\u0443 \u044f\u0447\u0435\u0439\u043a\u0443, \u0433\u0434\u0435 \u0431\u044b\u043b \u043d\u0430\u0439\u0434\u0435\u043d 0. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c, \u0444\u0443\u043d\u043a\u0446\u0438\u044f strlen() \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0439\u0442\u0438 \u0434\u0430\u043b\u0435\u043a\u043e \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0431\u0443\u0444\u0435\u0440\u0430, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0434, \u043d\u0430\u0434\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0434\u043b\u0438\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0438 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c.<\/p>\n<h2>\u041f\u043b\u043e\u0445\u0438\u0435 \u0446\u0438\u043a\u043b\u044b<\/h2>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0118\/\">V529<\/a> Odd semicolon &#8216;;&#8217; after &#8216;for&#8217; operator. ringqueue.cpp 39  <\/p>\n<pre><code class=\"cpp\">int compute_order(unsigned long size) {   int  order;   unsigned long tmp;   for (order = 0, tmp = size; tmp &gt;&gt;= 1; ++order); \/\/&lt;==     if (size &amp; ~(1 &lt;&lt; order))       ++order;     return order; }<\/code><\/pre>\n<p>  \u0427\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439: \u0446\u0438\u043a\u043b \u0431\u0435\u0437 \u0442\u0435\u043b\u0430 \u0438\u0437-\u0437\u0430 \u0442\u043e\u0447\u043a\u0438 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432 \u043a\u043e\u043d\u0446\u0435; \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432 \u0442\u0435\u043b\u0435 \u0446\u0438\u043a\u043b\u0430. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f &#8216;tmp&#8217; \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0438\u0433\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>  \u041c\u043e\u0436\u0435\u0442 \u0445\u043e\u0442\u0435\u043b\u0438 \u0442\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u0442\u044c:  <\/p>\n<pre><code class=\"cpp\">int compute_order(unsigned long size) {   int  order;   unsigned long tmp;   for (order = 0, tmp = size; tmp &gt;&gt;= 1; ++order)     if (tmp &amp; ~(1 &lt;&lt; order))       ++order;   return order; }<\/code><\/pre>\n<p>  \u041d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0446\u0438\u043a\u043b\u0430 for(;;) \u0432 \u0442\u0435\u043b\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0441\u0442\u0438\u043b\u044c.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0124\/\">V535<\/a> The variable &#8216;k&#8217; is being used for this loop and for the outer loop. Check lines: 3598, 3610. rules.c 3610  <\/p>\n<pre><code class=\"cpp\">void solver_get_unneeded(Solver *solv, Queue *unneededq, int filtered) {   ....   if (dep_possible(solv, *dp, &amp;installedm))   {     Queue iq;     Id iqbuf[16];     queue_init_buffer(&amp;iq, iqbuf, sizeof(iqbuf)\/sizeof(*iqbuf));     dep_pkgcheck(solv, *dp, 0, &amp;iq);     for (k = 0; k &lt; iq.count; k++)            \/\/&lt;==       {   Id p = iq.elements[k];   Solvable *sp = pool-&gt;solvables + p;   if (....)     continue;   for (j = 0; j &lt; count; j++)     if (p == unneededq-&gt;elements[j])       break;   \/* now add edge from j + 1 to i + 1 *\/   queue_insert(....);   \/* addapt following edge pointers *\/   for (k = j + 2; k &lt; count + 2; k++)         \/\/&lt;==     edges.elements[k]++;       }     queue_free(&amp;iq);   }   .... }<\/code><\/pre>\n<p>  \u041a\u043e\u0434 \u0442\u0430\u043a \u043f\u043b\u043e\u0445\u043e \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0430, \u0442\u043e \u043e\u043d\u0430 \u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u0430 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e. \u041f\u043b\u043e\u0445\u043e\u0439 \u0441\u0442\u0438\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0432\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0446\u0438\u043a\u043b\u0430\u0445 for(;;).<\/p>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e:<\/p>\n<ul>\n<li>V535 The variable &#8216;i&#8217; is being used for this loop and for the outer loop. Check lines: 2319, 2349. solver.c 2349<\/li>\n<\/ul>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0251\/\">V634<\/a> The priority of the &#8216;*&#8217; operation is higher than that of the &#8216;&lt;&lt;&#8216; operation. It&#8217;s possible that parentheses should be used in the expression. RAW.cpp 1141  <\/p>\n<pre><code class=\"cpp\">void DCRaw::_WaveletDenoise() {   ....   for (i = 0; i &lt; (1 &lt;&lt; dim * 2); i++) {  \/\/&lt;==     if (fimg[i] &lt; -fThreshold)       fimg[i] += fThreshold;     else if (fimg[i] &gt; fThreshold)       fimg[i] -= fThreshold;     else       fimg[i] = 0;   }   .... }<\/code><\/pre>\n<p>  \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0432\u044b\u0448\u0435, \u0447\u0435\u043c \u0443 \u0441\u0434\u0432\u0438\u0433\u0430. \u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043a\u0430\u043a \u0437\u0434\u0435\u0441\u044c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u0440\u0443\u0433\u043b\u044b\u0445 \u0441\u043a\u043e\u0431\u043e\u043a \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u0432 \u0431\u0435\u0434\u0443\u044e\u0449\u0435\u043c.<\/p>\n<p>  \u041f\u043e\u0445\u043e\u0436\u0435\u0435 \u043c\u0435\u0441\u0442\u043e:<\/p>\n<ul>\n<li>V634 The priority of the &#8216;*&#8217; operation is higher than that of the &#8216;&lt;&lt;&#8216; operation. It&#8217;s possible that parentheses should be used in the expression. RAW.cpp 1099<\/li>\n<\/ul>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0334\/\">V696<\/a> The &#8216;continue&#8217; operator will terminate &#8216;do {\u2026 } while (FALSE)&#8217; loop because the condition is always false. Check lines: 1939, 1945. Roster.cpp 1939  <\/p>\n<pre><code class=\"cpp\">status_t BRoster::_LaunchApp(....) const {   ....   do {     \/\/ find the app     ....     if (appType.InitCheck() == B_OK       &amp;&amp; appType.GetAppHint(&amp;hintRef) == B_OK       &amp;&amp; appRef == hintRef) {       appType.SetAppHint(NULL);       \/\/ try again       continue;     }     ...   } while (false);   .... }<\/code><\/pre>\n<p>  \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8216;continue&#8217; \u0432 \u0446\u0438\u043a\u043b\u0435 \u00abdo {\u2026 } while(\u2026 )\u00bb \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044e \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0446\u0438\u043a\u043b\u0430, \u0430 \u0442\u0430\u043a \u043e\u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u043b\u043e\u0436\u043d\u043e \u2014 \u043f\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u043e \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u0432\u044b\u0445\u043e\u0434 \u0438\u0437 \u0446\u0438\u043a\u043b\u0430 \u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u00abtry again\u00bb, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0432\u043e\u0434\u0438\u0442 \u0432 \u0437\u0430\u0431\u043b\u0443\u0436\u0434\u0435\u043d\u0438\u0435.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0347\/\">V706<\/a> Suspicious division: sizeof (kBaudrates) \/ sizeof (char *). Size of every element in &#8216;kBaudrates&#8217; array does not equal to divisor. SerialWindow.cpp 162  <\/p>\n<pre><code class=\"cpp\">const int SerialWindow::kBaudrates[] = { 50, 75, 110, .... };  SerialWindow::SerialWindow() : .... {   ....   for(int i = sizeof(kBaudrates) \/ sizeof(char*); --i &gt;= 0;)\/\/&lt;==   {     message = new BMessage(kMsgSettings);     message-&gt;AddInt32(&quot;baudrate&quot;, kBaudrateConstants[i]);      char buffer[7];     sprintf(buffer, &quot;%d&quot;, kBaudrates[i]);                   \/\/&lt;==     BMenuItem* item = new BMenuItem(buffer, message);      fBaudrateMenu-&gt;AddItem(item);   }   .... }<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 &#8216;kBaudrates&#8217;, \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0434\u0435\u043b\u044f\u0442 \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f, \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u0432 32-\u0445 \u0431\u0438\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0435\u0441\u044c \u043c\u0430\u0441\u0441\u0438\u0432, \u0430 \u0432 64-\u0445 \u0431\u0438\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430.<\/p>\n<h2>\u041c\u0430\u0441\u0441\u0438\u0432\u044b<\/h2>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0138\/\">V548<\/a> Consider reviewing type casting. TYPE X[][] in not equivalent to TYPE **X. RAW.cpp 1668  <\/p>\n<pre><code class=\"cpp\">void DCRaw::_AdobeCoefficients(const char *make, const char *model) {   static const struct {     const char *prefix;     short black, trans[12];   } table[] = {     { &quot;Canon EOS D2000&quot;, 0,       { 24542,-10860,-3401,-1490,11370,-297,2858,-605,3225 }},     { &quot;Canon EOS D6000&quot;, 0,       { 20482,-7172,-3125,-1033,10410,-285,2542,226,3136 }},     ....   };   double cameraXYZ[4][3];    for (uint32 i = 0; i &lt; sizeof table \/ sizeof *table; i++) {     if (!strncasecmp(model, table[i].prefix, strlen(....))) {       if (table[i].black)         fMeta.black = table[i].black;       for (uint32 j = 0; j &lt; 12; j++) {         ((double**)cameraXYZ)[0][j] = table[i].trans[j] \/10000.0;       }       _CameraXYZCoefficients(cameraXYZ);       break;     }   } }<\/code><\/pre>\n<p>  \u041c\u0430\u0441\u0441\u0438\u0432 &#8216;cameraXYZ&#8217;, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u043a \u00abdouble cameraXYZ[4][3]\u00bb, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0442\u0438\u043f\u0443 \u00abdouble **\u00bb. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u043b\u0435\u0447\u044c \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p>  \u0422\u0438\u043f\u044b \u00abtype[a][b]\u00bb \u0438 \u00abtype **\u00bb \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u043e\u0439 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445. Type[a][b] \u044d\u0442\u043e \u0435\u0434\u0438\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0441 \u0434\u0432\u0443\u043c\u0435\u0440\u043d\u044b\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c. Type ** \u2014 \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u043d\u0430 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0145\/\">V554<\/a> Incorrect use of auto_ptr. The memory allocated with &#8216;new []&#8217; will be cleaned using &#8216;delete&#8217;. DefaultCatalog.cpp 208  <\/p>\n<pre><code class=\"cpp\">status_t DefaultCatalog::ReadFromFile(const char *path) {   ....   auto_ptr&lt;char&gt; buf(new(std::nothrow) char [sz]);   .... }<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u043c\u043d\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e. \u041a\u043b\u0430\u0441\u0441 &#8216;auto_ptr&#8217; \u043d\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438, \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8216;delete&#8217;, \u0430 \u0435\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c &#8216;delete[]&#8217;, \u0442\u043e \u043a\u043e\u0434 \u043d\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430:  <\/p>\n<pre><code class=\"cpp\">status_t DefaultCatalog::ReadFromFile(const char *path) {   ....   unique_ptr&lt;char[]&gt; buf(new(std::nothrow) char[sz]);   .... }<\/code><\/pre>\n<p>  \u0415\u0449\u0451 \u0442\u0430\u043a\u043e\u0435 \u043c\u0435\u0441\u0442\u043e:<\/p>\n<ul>\n<li>V554 Incorrect use of auto_ptr. The memory allocated with &#8216;new []&#8217; will be cleaned using &#8216;delete&#8217;. DefaultCatalog.cpp 249<\/li>\n<\/ul>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0148\/\">V557<\/a> Array overrun is possible. The &#8216;8&#8217; index is pointing beyond array bound. floppy_ctrl.c 637<br \/>  V557 Array overrun is possible. The &#8216;9&#8217; index is pointing beyond array bound. floppy_ctrl.c 638  <\/p>\n<pre><code class=\"cpp\">typedef struct floppy {   ....   uint8 result[8]; \/* status of the last finished command *\/   .... };  void floppy_dump_reg(floppy_t *flp) {   ....   \/\/uint8 result[10];           \/\/&lt;== This was correct!   uint8 *result = flp-&gt;result;  \/\/&lt;== Bad fix! :)   ....   dprintf(FLO &quot;gap=%d wg=%d eis=%d fifo=%d poll=%d thresh=%d pretrk=%d\\n&quot;,      (result[7] &amp; 0x02) &gt;&gt; 1, result[7] &amp; 0x01,     (result[8] &amp; 0x40) &gt;&gt; 6,      (result[8] &amp; 0x20) &gt;&gt; 5, (result[8] &amp; 0x10) &gt;&gt; 4,      result[8] &amp; 0x0f, result[9]);   .... }<\/code><\/pre>\n<p>  \u0414\u0432\u0430 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u0415\u0441\u043b\u0438 \u0441\u0443\u0434\u0438\u0442\u044c \u043f\u043e \u0437\u0430\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443, \u0440\u0430\u043d\u044c\u0448\u0435 \u043c\u0430\u0441\u0441\u0438\u0432 &#8216;result[]&#8217; \u0441\u043e\u0441\u0442\u043e\u044f\u043b \u0438\u0437 10 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u0442\u0430\u043b \u0434\u043b\u0438\u043d\u043e\u0439 8 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u043a\u043e\u0434\u0435 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0435\u0441\u044f\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438 \u043e\u0442 0 \u0434\u043e 9. <\/p>\n<h2>\u0418\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445<\/h2>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0302\/\">V672<\/a> There is probably no need in creating the new &#8216;path&#8217; variable here. One of the function&#8217;s arguments possesses the same name and this argument is a reference. Check lines: 348, 429. translate.cpp 429  <\/p>\n<pre><code class=\"cpp\">status_t Translator::FindPath(const translation_format *format,   BPositionIO &amp;stream, TypeList &amp;typesSeen, TypeList &amp;path, ....) {   ....   TypeList path;   double quality;   if (FindPath(...) == B_OK) {     if (bestQuality &lt; quality * formatQuality) {       bestQuality = quality * formatQuality;       bestPath.SetTo(path);       bestPath.Add(formats[j].type);       status = B_OK;     }   }   .... }<\/code><\/pre>\n<p>  \u0421\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 &#8216;path&#8217; \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0441 \u0441\u0441\u044b\u043b\u043a\u043e\u0439, \u043a\u0430\u043a \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435) \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u043f\u043e\u0442\u0435\u0440\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043a\u0430\u043c.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0352\/\">V711<\/a> It is dangerous to create a local variable within a loop with a same name as a variable controlling this loop. ipv4.cpp 514  <\/p>\n<pre><code class=\"cpp\">static int dump_ipv4_multicast(int argc, char** argv) {   MulticastState::Iterator it = sMulticastState-&gt;GetIterator();    while (it.HasNext()) {     ....     int count = 0;     IPv4GroupInterface::AddressSet::Iterator it       = state-&gt;Sources().GetIterator();     while (it.HasNext()) {       ....     }      kprintf(&quot;}&gt; sock %p\\n&quot;, state-&gt;Parent()-&gt;Socket());   }    return 0; }<\/code><\/pre>\n<p>  \u0412 \u0442\u0435\u043b\u0435 \u0446\u0438\u043a\u043b\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 &#8216;it&#8217;, \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0439 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0446\u0438\u043a\u043b\u0430. \u0422\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438, \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u0447\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430.<\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e<\/h2>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0208\/\">V597<\/a> The compiler could delete the &#8216;memset&#8217; function call, which is used to flush &#8216;password&#8217; buffer. The RtlSecureZeroMemory() function should be used to erase the private data. login.cpp 126  <\/p>\n<pre><code class=\"cpp\">static status_t login(const char* user, struct passwd** _passwd) {   ....   bool ok = verify_password(passwd, spwd, password);   memset(password, 0, sizeof(password));      if (!ok)     return B_PERMISSION_DENIED;    *_passwd = passwd;   return B_OK; }<\/code><\/pre>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c \u043d\u0435\u043e\u0447\u0438\u0449\u0435\u043d\u043d\u044b\u043c. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 &#8216;password&#8217; \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0446\u0435 \u0438 \u0431\u043e\u043b\u0435\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 Release \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0443\u0434\u0430\u043b\u0438\u0442 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 memset(). \u041d\u0430 \u044d\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u043e. \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f Windows, \u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430.<\/p>\n<p>  \u0415\u0449\u0451 \u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430:<\/p>\n<ul>\n<li>V597 The compiler could delete the &#8216;memset&#8217; function call, which is used to flush &#8216;finalcount&#8217; buffer. The RtlSecureZeroMemory() function should be used to erase the private data. sha1.c 228<\/li>\n<li>V597 The compiler could delete the &#8216;memset&#8217; function call, which is used to flush &#8216;encoded_block&#8217; buffer. The RtlSecureZeroMemory() function should be used to erase the private data. dst_api.c 446<\/li>\n<li>V597 The compiler could delete the &#8216;memset&#8217; function call, which is used to flush &#8216;in_buff&#8217; buffer. The RtlSecureZeroMemory() function should be used to erase the private data. dst_api.c 916<\/li>\n<li>V597 The compiler could delete the &#8216;memset&#8217; function call, which is used to flush &#8216;repeatedPassword&#8217; buffer. The RtlSecureZeroMemory() function should be used to erase the private data. passwd.cpp 171<\/li>\n<\/ul>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0247\/\">V630<\/a> The &#8216;malloc&#8217; function is used to allocate memory for an array of objects which are classes containing constructors. PDFWriter.cpp 117  <\/p>\n<pre><code class=\"cpp\">status_t PDFWriter::PrintPage(int32  pageNumber, int32 pageCount) {   ....   pictures =     (BPicture **)malloc(pictureCount * sizeof(BPicture *));   picRects =     (BRect *)malloc(pictureCount * sizeof(BRect));    \/\/&lt;==   picPoints =     (BPoint *)malloc(pictureCount * sizeof(BPoint));  \/\/&lt;==   picRegion = new BRegion();   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e malloc \u043f\u043e\u0434 \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043a\u0430\u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u043a\u043b\u0430\u0441\u0441\u0430, \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438, \u043d\u0438 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043f\u0440\u0438 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0438. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043d\u0435\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0430\u043c.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0101\/\">V512<\/a> A call of the &#8216;memset&#8217; function will lead to underflow of the buffer &#8216;context&#8217;. sha2.c 623  <\/p>\n<pre><code class=\"cpp\">#define MEMSET_BZERO(p,l)  memset((p), 0, (l))  void solv_SHA256_Final(sha2_byte digest[], SHA256_CTX* context) {   ....   \/* Clean up state data: *\/   MEMSET_BZERO(context, sizeof(context));   usedspace = 0; }<\/code><\/pre>\n<p>  \u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0440\u0430\u0432\u0435\u043d \u043d\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>  \u0415\u0449\u0451 \u0442\u0430\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430:<\/p>\n<ul>\n<li>V512 A call of the &#8216;memset&#8217; function will lead to underflow of the buffer &#8216;context&#8217;. sha2.c 644<\/li>\n<li>V512 A call of the &#8216;memset&#8217; function will lead to underflow of the buffer &#8216;context&#8217;. sha2.c 953<\/li>\n<li>V512 A call of the &#8216;memset&#8217; function will lead to underflow of the buffer &#8216;context&#8217;. sha2.c 973<\/li>\n<li>V512 A call of the &#8216;memset&#8217; function will lead to underflow of the buffer &#8216;context&#8217;. sha2.c 1028<\/li>\n<li>V512 A call of the &#8216;memset&#8217; function will lead to underflow of the buffer &#8216;context&#8217;. sha2.c 1048<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041f\u0440\u043e\u0447\u0435\u0435<\/h2>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0195\/\">V591<\/a> Non-void function should return a value. pc.c 1031  <\/p>\n<pre><code class=\"cpp\">ULONG set_var(char *name, ULONG val) {   variable *v;    v = lookup_var(name);   if (v != NULL)     v-&gt;value = val;   else     add_var(name, val); }<\/code><\/pre>\n<p>  \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 set_var(), \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u041d\u043e \u0435\u0441\u043b\u0438 \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0301\/\">V671<\/a> It is possible that the &#8216;swap&#8217; function interchanges the &#8216;std::declval &lt; _Alloc &amp; &gt; ()&#8217; variable with itself. alloc_traits.h 191  <\/p>\n<pre><code class=\"cpp\">static constexpr bool _S_nothrow_swap() {   using std::swap;   return !_S_propagate_on_swap()     || noexcept(          swap(std::declval&lt;_Alloc&amp;&gt;(), std::declval&lt;_Alloc&amp;&gt;())); }<\/code><\/pre>\n<p>  \u041d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 swap(): \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0108\/\">V519<\/a> The &#8216;data-&gt;error&#8217; variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 222, 223. repo_solv.c 223  <\/p>\n<pre><code class=\"cpp\">static unsigned char * data_read_idarray(.... , Repodata *data) {   ....   data-&gt;error = pool_error(            \/\/&lt;==     data-&gt;repo-&gt;pool, SOLV_ERROR_ID_RANGE,     &quot;data_read_idarray: id too large (%u\/%u)&quot;, x, max);   data-&gt;error = SOLV_ERROR_ID_RANGE;   \/\/&lt;==   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043e\u0434\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u0440\u044f\u0434. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0430.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/ru\/d\/0163\/\">V568<\/a> It&#8217;s odd that the argument of sizeof() operator is the &#8216;sizeof (struct tlv_header_t)&#8217; expression. print-slow.c 255  <\/p>\n<pre><code class=\"cpp\">void slow_print(register const u_char *pptr, register u_int len) {   ....   if (vflag &gt; 1)     print_unknown_data(tptr+sizeof(sizeof(struct tlv_header_t)),       &quot;\\n\\t  &quot;, tlv_len-sizeof(struct tlv_header_t));   .... }<\/code><\/pre>\n<p>  \u0410\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 sizeof() \u0442\u043e\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f sizeof(). \u042d\u0442\u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0442\u0438\u043f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u043d\u043e \u0441\u0430\u043c\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f, \u0442.\u0435. \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0437\u0434\u0435\u0441\u044c \u043d\u0438 \u043d\u0430 \u0447\u0442\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442.<\/p>\n<p>  \u0422\u0430\u043a\u0438\u0445 \u043c\u0435\u0441\u0442 \u043c\u043d\u043e\u0433\u043e:<\/p>\n<ul>\n<li>V568 It&#8217;s odd that the argument of sizeof() operator is the &#8216;sizeof (struct lmp_object_header)&#8217; expression. print-lmp.c 872<\/li>\n<li>V568 It&#8217;s odd that the argument of sizeof() operator is the &#8216;sizeof (struct tlv_header_t)&#8217; expression. print-slow.c 182<\/li>\n<li>V568 It&#8217;s odd that the argument of sizeof() operator is the &#8216;sizeof (struct eigrp_tlv_header)&#8217; expression. print-eigrp.c 283<\/li>\n<li>V568 It&#8217;s odd that the argument of sizeof() operator is the &#8216;sizeof (struct eigrp_tlv_header)&#8217; expression. print-eigrp.c 471<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  Haiku \u2014 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442. \u0411\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0432\u043a\u043b\u0430\u0434 \u0432 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043c\u043e\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 open-source \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438, \u0442\u0443\u0442 \u044f \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0434\u043a\u0438\u0445 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430. \u0412 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u043e\u0448\u043b\u0438 \u0441\u0430\u043c\u044b\u0435 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0412\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0435 \u0432\u043e\u0448\u043b\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u044e \u0438\u043b\u0438 \u0431\u044b\u043b\u043e \u043c\u043d\u043e\u044e \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043e, \u0430\u0432\u0442\u043e\u0440\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441\u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0439\u0442\u0438 \u0432 \u043f\u043e\u043b\u043d\u043e\u043c \u043b\u043e\u0433\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.<\/p>\n<h2>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c<\/h2>\n<p>  \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u0441 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0439 \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u0435\u0439, \u0442\u043e \u043f\u0440\u043e\u0448\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434: Svyatoslav Razmyslov. <a href=\"http:\/\/www.viva64.com\/en\/b\/0318\/\">Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2<\/a>.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044e \u0438 \u0435\u0441\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441?<\/b><\/p>\n<div class=\"spoiler_text\">\u0427\u0430\u0441\u0442\u043e \u043a \u043d\u0430\u0448\u0438\u043c \u0441\u0442\u0430\u0442\u044c\u044f\u043c \u0437\u0430\u0434\u0430\u044e\u0442 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b. \u041e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u043d\u0438\u0445 \u043c\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u0437\u0434\u0435\u0441\u044c: <a href=\"http:\/\/www.viva64.com\/ru\/a\/0085\/\">\u041e\u0442\u0432\u0435\u0442\u044b \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e PVS-Studio \u0438 CppCat, \u0432\u0435\u0440\u0441\u0438\u044f 2015<\/a>. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c.  <\/div>\n<\/div>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/256525\/\"> http:\/\/habrahabr.ru\/post\/256525\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/b5c\/a3f\/a72\/b5ca3fa729424a862852e149dc855578.png\" align=\"left\"\/><br \/>  \u042d\u0442\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Haiku. \u0412 <a href=\"http:\/\/habrahabr.ru\/company\/pvs-studio\/blog\/256347\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u0431\u044b\u043b\u0438 \u0441\u043e\u0431\u0440\u0430\u043d\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a, \u043d\u043e \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0443\u0441\u043b\u043e\u0432\u0438\u0439. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c. \u0421\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u0440\u0443\u043f\u043f.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/go.php?url=1530\">Haiku<\/a> \u2014 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0446\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 \u0434\u0432\u043e\u0438\u0447\u043d\u0443\u044e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 BeOS. Haiku \u0432\u043e\u043f\u043b\u043e\u0449\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0438\u0434\u0435\u0438 BeOS. \u042d\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e \u0440\u0435\u0448\u0451\u043d\u043d\u0430\u044f \u043a\u0430\u043a \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u043e\u0435 \u044f\u0434\u0440\u043e: \u043c\u0438\u043a\u0440\u043e\u044f\u0434\u0435\u0440\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u0430\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438.<\/p>\n<p>  \u041f\u0440\u043e\u0435\u043a\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0441\u044f \u043f\u043e \u043f\u0440\u043e\u0441\u044c\u0431\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 Haiku \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"http:\/\/www.viva64.com\/ru\/pvs-studio\/\">PVS-Studio 5.24<\/a>.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-255943","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/255943","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=255943"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/255943\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=255943"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=255943"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=255943"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}