{"id":198060,"date":"2013-10-18T11:59:03","date_gmt":"2013-10-18T07:59:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=198060"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=198060","title":{"rendered":"<span class=\"post_title\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 VirtualDub<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" align=\"left\" src=\"http:\/\/habr.habrastorage.org\/post_images\/4a0\/517\/cc2\/4a0517cc2eed1c6f75175563320a3169.jpg\" alt=\"PVS-Studio, VirtualDub\"\/><br \/>  \u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e, \u044f \u0441\u0435\u043b \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u043f\u0440\u043e\u0435\u043a\u0442 VirtualDub \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PVS-Studio. \u0412\u044b\u0431\u043e\u0440 \u0431\u044b\u043b \u0441\u043b\u0443\u0447\u0430\u0435\u043d. \u042f \u0441\u0447\u0438\u0442\u0430\u044e, \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c\/\u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 PVS-Studio. \u0410 \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d, \u043d\u0435 \u0442\u0430\u043a \u0432\u0430\u0436\u043d\u043e. \u041e\u0448\u0438\u0431\u043a\u0438 \u0435\u0441\u0442\u044c \u0432\u0435\u0437\u0434\u0435. \u041f\u0440\u043e\u0435\u043a\u0442 VirtualDub \u043c\u044b \u0443\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438 \u0432 2011 \u0433\u043e\u0434\u0443, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c. \u0412\u043e\u0442 \u044f \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043e\u0431\u0441\u0442\u043e\u044f\u0442 \u0434\u0435\u043b\u0430, \u0441\u043f\u0443\u0441\u0442\u044f 2 \u0433\u043e\u0434\u0430.<\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<p>  \u042f \u0441\u043a\u0430\u0447\u0430\u043b \u0441 \u0441\u0430\u0439\u0442\u0430 <a href=\"http:\/\/www.viva64.com\/go.php?url=1307\">VirtualDub<\/a> \u0430\u0440\u0445\u0438\u0432 VirtualDub-1.10.3-src.7z. \u0414\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b <a href=\"http:\/\/www.viva64.com\/ru\/pvs-studio-download\/\">PVS-Studio<\/a> \u0432\u0435\u0440\u0441\u0438\u0438 5.10. \u041d\u0430 \u0430\u043d\u0430\u043b\u0438\u0437 \u044f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043e\u043a\u043e\u043b\u043e \u0447\u0430\u0441\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u0441\u0443\u0434\u0438\u0442\u0435 \u0441\u0442\u0440\u043e\u0433\u043e. \u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430, \u044f \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043b. \u0418 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043c\u043e\u0433 \u043f\u043ec\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u043a\u043e\u0434 \u0437\u0430 \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439. \u041f\u0440\u043e\u0448\u0443, \u0442\u0435\u0445, \u043a\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 VirtualDub \u043d\u0435 \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043c\u043e\u0439 \u043e\u0442\u0447\u0435\u0442, \u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443. \u041c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 <a href=\"http:\/\/www.viva64.com\/ru\/b\/0193\/\">\u0438\u0434\u0451\u043c \u043d\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0443<\/a> open-source \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0443 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043b\u044e\u0447.<\/p>\n<p>  \u0415\u0449\u0451 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u042d\u0432\u0435\u0440\u0438 \u041b\u0438 \u043e\u0442\u043d\u0435\u0441\u0442\u0438\u0441\u044c \u043a \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0441 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435\u043c. \u0412 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437, \u043e\u043d <a href=\"http:\/\/www.viva64.com\/go.php?url=756\">\u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u043e<\/a> \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u044f\u043b \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u0435 VirtualDub \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043c\u043e\u0438\u0445 \u0441\u0442\u0430\u0442\u0435\u0439. \u042f \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u0445\u043e\u0442\u0435\u043b, \u0438 \u043d\u0435 \u0445\u043e\u0447\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u043b\u044e\u0447\u043d\u043e\u0439. <a href=\"http:\/\/www.viva64.com\/ru\/examples\/\">\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0435\u0441\u0442\u044c \u0432\u0435\u0437\u0434\u0435<\/a>. \u041c\u043e\u044f \u0446\u0435\u043b\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043a\u043e\u0434\u0430. \u041f\u043e\u043f\u0443\u0442\u043d\u043e, \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u0442 open-source \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u0435\u0435. \u042d\u0442\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0440\u0430\u0437\u043e\u0432\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u0430\u043b\u043e\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b. \u041d\u043e \u0441 \u044d\u0442\u0438\u043c, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043c\u043e\u0433\u0443. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u042f \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0433\u0443 \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c, \u0432 \u0447\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u0430 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0412\u043e\u0442 \u043e\u0434\u043d\u0430 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0437\u0430\u043c\u0435\u0442\u043e\u043a \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443: <a href=\"http:\/\/www.viva64.com\/ru\/b\/0105\/\">\u041b\u0435\u0432 \u0422\u043e\u043b\u0441\u0442\u043e\u0439 \u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043a\u043e\u0434\u0430<\/a>.<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0440\u043e \u043e\u0448\u0438\u0431\u043a\u0438, \u0430 \u043d\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043d\u0430\u0448\u0435\u043b \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 PVS-Studio \u0432 VirtualDub.<\/p>\n<h2>\u0412\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b<\/h2>\n<p>  \u0412 \u044f\u0437\u044b\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f C++ \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043f\u043e\u043b\u0438\u043c\u043e\u0440\u0444\u043d\u043e\u0433\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c. \u0422\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0447\u0435\u0440\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441.<\/p>\n<p>  \u042f \u0437\u043d\u0430\u044e, \u0447\u0442\u043e \u0432\u0441\u0435 \u044d\u0442\u043e \u0437\u043d\u0430\u044e\u0442. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u0437\u0430\u0431\u044b\u0442\u044c \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c. <\/p>\n<p>  \u0412 VirtualDub \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 VDDialogBaseW32:  <\/p>\n<pre><code class=\"cpp\">class VDDialogBaseW32 {   ....   ~VDDialogBaseW32();   ....   virtual INT_PTR DlgProc(....) = 0;   virtual bool PreNCDestroy();   .... }<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043d\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c. \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043e\u043d \u043d\u0435\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, VDDialogAudioFilterFormatConvConfig:  <\/p>\n<pre><code class=\"cpp\">class VDDialogAudioFilterFormatConvConfig :   public VDDialogBaseW32 { .... };<\/code><\/pre>\n<p>  \u041e\u0448\u0438\u0431\u043a\u0430 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">INT_PTR CALLBACK VDDialogBaseW32::StaticDlgProc(....) {   VDDialogBaseW32 *pThis =     (VDDialogBaseW32 *)GetWindowLongPtr(hwnd, DWLP_USER);   ....   delete pThis;   .... }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PVS-Studio: V599 The destructor was not declared as a virtual one, although the &#8216;VDDialogBaseW32&#8217; class contains virtual functions. VirtualDub gui.cpp 997<\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0434\u043b\u044f \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441. \u0422\u0430\u043a\u043e\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \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.<\/p>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u0431\u0435\u0434\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438 \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c VDMPEGAudioPolyphaseFilter.<\/p>\n<h2>\u0415\u0449\u0451 \u043e \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438<\/h2>\n<p>  \u041f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u043e\u0448\u0438\u0431\u043e\u043a, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u043c, \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442. \u041d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u043a\u043e\u043b\u044c\u0437\u043a\u043e\u0439 \u0442\u0435\u043c\u043e\u0439 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0434\u0432\u0438\u0433\u0430. \u0412\u043e\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432:  <\/p>\n<pre><code class=\"cpp\">void AVIVideoGIFOutputStream::write(....) { {   ....   for(int i=0; i&lt;palsize; ++i)     dict[i].mPrevAndLastChar = (-1 &lt;&lt; 16) + i;   .... }<\/code><\/pre>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 10 \u043b\u0435\u0442. \u041e\u0434\u043d\u0430\u043a\u043e, \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e, \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0412\u043e\u0442 \u0447\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043d\u0430 \u0442\u0435\u043c\u0443 \u0442\u0430\u043a\u0438\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439:<\/p>\n<p>  <i>The shift operators &lt;&lt; and &gt;&gt; group left-to-right.<\/i> <\/p>\n<p>  <i>shift-expression &lt;&lt; additive-expression<\/i><\/p>\n<p>  <i>shift-expression &gt;&gt; additive-expression<\/i><\/p>\n<p>  <i>The operands shall be of integral or unscoped enumeration type and integral promotions are performed.<\/i><\/p>\n<p>  <i>1. The type of the result is that of the promoted left operand. The behavior is undefined if the right operand is negative, or greater than or equal to the length in bits of the promoted left operand.<\/i><\/p>\n<p>  <i>2. The value of E1 &lt;&lt; E2 is E1 left-shifted E2 bit positions; vacated bits are zero-filled. If E1 has an unsigned type, the value of the result is E1 * 2^E2, reduced modulo one more than the maximum value representable in the result type. <\/i><b><i>Otherwise, if E1 has a signed type and non-negative value, and E1*2^E2 is representable in the result type, then that is the resulting value; otherwise, the behavior is undefined.<\/i><\/b><\/p>\n<p>  <i>3. The value of E1 &gt;&gt; E2 is E1 right-shifted E2 bit positions. If E1 has an unsigned type or if E1 has a signed type and a non-negative value, the value of the result is the integral part of the quotient of E1\/2^E2<\/i><b><i>. If E1 has a signed type and a negative value, the resulting value is implementation-defined.<\/i><\/b><\/p>\n<p>  \u0422\u043e, \u0447\u0442\u043e \u043a\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u044d\u0442\u043e \u0432\u0435\u0437\u0435\u043d\u0438\u0435. \u041f\u0440\u0438 \u043e\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0451 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u0441\u0434\u0432\u0438\u0433\u0438 \u0438 \u043e \u0442\u043e\u043c, \u0441\u0442\u043e\u0438\u0442 \u0438\u043b\u0438 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0434, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 &quot;<a href=\"http:\/\/www.viva64.com\/ru\/b\/0142\/\">\u041d\u0435 \u0437\u043d\u0430\u044f \u0431\u0440\u043e\u0434\u0430, \u043d\u0435 \u043b\u0435\u0437\u044c \u0432 \u0432\u043e\u0434\u0443. \u0427\u0430\u0441\u0442\u044c \u0442\u0440\u0435\u0442\u044c\u044f<\/a>&quot;.<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 <a href=\"http:\/\/www.viva64.com\/external-pictures\/txt\/VirtualDub-ub.txt\">\u0441\u043f\u0438\u0441\u043e\u043a \u043c\u0435\u0441\u0442<\/a>, \u0433\u0434\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 PVS-Studio \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b Undefined behavior \u0438\u043b\u0438 Unspecified behavior \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 VirtualDub.<\/p>\n<h2>\u041e\u043f\u0435\u0447\u0430\u0442\u043a\u0438<\/h2>\n<p>  <\/p>\n<pre><code class=\"cpp\">static ModuleInfo *CrashGetModules(void *&amp;ptr) {   ....   while(*pszHeap++);     if (pszHeap[-1]=='.')       period = pszHeap-1;   .... }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PVS-Studio: V529 Odd semicolon &#8216;;&#8217; after &#8216;while&#8217; operator. VirtualDub crash.cpp 462<\/p>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0442\u043e\u0447\u043a\u0443 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0441\u0442\u043e\u044f\u0449\u0443\u044e \u043f\u043e\u0441\u043b\u0435 &#8216;while&#8217;. \u0417\u0434\u0435\u0441\u044c \u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0430 \u0438\u043b\u0438 \u043a\u043e\u0434 \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d. \u042f \u0434\u0443\u043c\u0430\u044e, \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0448\u0438\u0431\u043a\u0430. \u0426\u0438\u043a\u043b \u00abwhile(*pszHeap++);\u00bb \u043f\u0440\u043e\u0439\u0434\u0435\u0442 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f &#8216;pszHeap&#8217; \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0430\u043c\u044f\u0442\u044c <a href=\"http:\/\/www.viva64.com\/ru\/t\/0088\/\">\u043f\u043e\u0441\u043b\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0443\u043b\u044f<\/a>. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u00abif (pszHeap[-1]==&#8217;.&#8217;)\u00bb \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430. \u041f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u00abpszHeap[-1]\u00bb \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043d\u043e\u043b\u044c.<\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0440\u0443\u0433\u0443\u044e \u043e\u043f\u0435\u0447\u0430\u0442\u043a\u0443, \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438.  <\/p>\n<pre><code class=\"cpp\">void VDBackfaceService::Execute(...., char *s) {   ....   if (*s == '&quot;') {     while(*s &amp;&amp; *s != '&quot;')       ++s;   } else {   .... }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PVS-Studio: V637 Two opposite conditions were encountered. The second condition is always false. Check lines: 183, 184. VirtualDub backface.cpp 183<\/p>\n<p>  \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0451, \u0447\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u0445. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043c\u043d\u0435 \u0442\u0430\u043a \u043a\u0430\u0436\u0435\u0442\u0441\u044f. \u041e\u0434\u043d\u0430\u043a\u043e, \u0443\u0441\u043b\u043e\u0432\u0438\u0435 (*s &amp;&amp; *s != &#8216;&quot;&#8217;) \u0441\u0440\u0430\u0437\u0443 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u043e\u0436\u043d\u044b\u043c. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">if (*s == '&quot;') {   ++s;   while(*s &amp;&amp; *s != '&quot;')     ++s; }<\/code><\/pre>\n<p>  <\/p>\n<h2>\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 new \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438<\/h2>\n<p>  \u0412 \u0441\u0442\u0430\u0440\u043e\u043c \u043a\u043e\u0434\u0435, \u0447\u0430\u0441\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u0435\u0440\u043d\u0443\u043b \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 new. \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"cpp\">int *p = new int[10]; if (!p)   return false;<\/code><\/pre>\n<p>  \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u044f\u0437\u044b\u043a\u0430 \u0421\u0438++, \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 &#8216;new&#8217; \u043d\u0435 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u043d\u043e \u043a \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u044b\u043c \u0441\u043b\u0443\u0447\u0430\u044f\u043c, \u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442. <\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 if (!p) \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u043d\u0435\u0439. \u0412 \u0446\u0435\u043b\u043e\u043c \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0431\u0435\u0437\u043e\u0431\u0438\u0434\u0435\u043d. \u041b\u0438\u0448\u043d\u044f\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430. \u041d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0433\u043e.  <\/p>\n<pre><code class=\"cpp\">\u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f\u043c. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 VirtualDub. void HexEditor::Find(HWND hwndParent) {   ....   int *next = new int[nFindLength+1];   char *searchbuffer = new char[65536];   char *revstring = new char[nFindLength];   ....   if (!next || !searchbuffer || !revstring) {     delete[] next;     delete[] searchbuffer;     delete[] revstring;     return;   }   .... }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PV-Studio: V668 There is no sense in testing the &#8216;next&#8217; pointer against null, as the memory was allocated using the &#8216;new&#8217; operator. The exception will be generated in the case of memory allocation error. VirtualDub hexviewer.cpp 2012<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u00abchar *revstring = new char[nFindLength];\u00bb \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0443\u0442\u0435\u0447\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438. \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b delete[] \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u044b. \u041d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e \u043d\u0435\u0451 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c.<\/p>\n<p>  <a href=\"http:\/\/www.viva64.com\/external-pictures\/txt\/VirtualDub-new.txt\">\u0417\u0434\u0435\u0441\u044c<\/a>, \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u0432 VirtualDub \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 &#8216;new&#8217;.<\/p>\n<h2>\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442<\/h2>\n<p>  <\/p>\n<pre><code class=\"cpp\">vdlist_iterator&amp; operator--(int) {   vdlist_iterator tmp(*this);   mp = mp-&gt;mListNodePrev;   return tmp; }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PVS-Studio: V558 Function returns the reference to temporary local object: tmp. VirtualDub vdstl.h 460<\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u041e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 &#8216;tmp&#8217;. \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0445\u043e\u0434\u0430 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0443\u0436\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u044d\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u043e\u0439, \u043f\u0440\u0438\u0432\u0435\u0434\u0451\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.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 ++, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0439\u0441\u044f \u0440\u044f\u0434\u043e\u043c, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.<\/p>\n<h2>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c, \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c<\/h2>\n<p>  \u0412 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u0445, \u0447\u0430\u0441\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0443, \u043a\u043e\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0430 \u0443\u0436\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441 NULL. \u0422\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0435 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u044e\u0442 \u0441\u0435\u0431\u044f \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f NULL, \u044d\u0442\u043e \u043d\u0435\u0448\u0442\u0430\u0442\u043d\u0430\u044f \u0440\u0435\u0434\u043a\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f. \u042d\u0442\u0438 \u043d\u0435\u0434\u043e\u0447\u0451\u0442\u044b, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u0432 \u043a\u043e\u0434\u0435 VirtualDub. \u041f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">LRESULT YUVCodec::DecompressGetFormat(BITMAPINFO *lpbiInput,                                       BITMAPINFO *lpbiOutput) {   BITMAPINFOHEADER *bmihInput    = &amp;lpbiInput-&gt;bmiHeader;   BITMAPINFOHEADER *bmihOutput  = &amp;lpbiOutput-&gt;bmiHeader;   LRESULT res;    if (!lpbiOutput)     return sizeof(BITMAPINFOHEADER);   .... }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PVS-Studio: V595 The &#8216;lpbiOutput&#8217; pointer was utilized before it was verified against nullptr. Check lines: 82, 85. VirtualDub yuvcodec.cpp 82<\/p>\n<p>  \u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u00ablpbiOutput\u00bb \u0440\u0430\u0437\u044b\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f: \u00abif (!lpbiOutput)\u00bb. \u0422\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430. \u041d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e \u043d\u0443\u0436\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439:  <\/p>\n<pre><code class=\"cpp\">LRESULT YUVCodec::DecompressGetFormat(BITMAPINFO *lpbiInput,                                       BITMAPINFO *lpbiOutput) {   if (!lpbiOutput)     return sizeof(BITMAPINFOHEADER);   BITMAPINFOHEADER *bmihInput    = &amp;lpbiInput-&gt;bmiHeader;   BITMAPINFOHEADER *bmihOutput  = &amp;lpbiOutput-&gt;bmiHeader;   LRESULT res;   .... }<\/code><\/pre>\n<p>  \u0414\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0441\u0442\u0430, \u0433\u0434\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u0435\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435 V595, \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b <a href=\"http:\/\/www.viva64.com\/external-pictures\/txt\/VirtualDub-595.txt\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0442\u0438\u043f\u043e\u043c HRESULT<\/h2>\n<p>  <\/p>\n<pre><code class=\"cpp\">VDPosition AVIReadTunnelStream::TimeToPosition(VDTime timeInUs) {   AVISTREAMINFO asi;   if (AVIStreamInfo(pas, &amp;asi, sizeof asi))     return 0;    return VDRoundToInt64(timeInUs * (double)asi.dwRate \/ (double)asi.dwScale * (1.0 \/ 1000000.0)); }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PVS-Studio: V545 Such conditional expression of &#8216;if&#8217; operator is incorrect for the HRESULT type value &#8216;AVIStreamInfoA(pas, &amp; asi, sizeof asi)&#8217;. The SUCCEEDED or FAILED macro should be used instead. VirtualDub avireadhandlertunnelw32.cpp 230<\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f AVIStreamInfo() \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 HRESULT. \u042d\u0442\u043e\u0442 \u0442\u0438\u043f \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a &#8216;bool&#8217;. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u0445\u0440\u0430\u043d\u044f\u0449\u0430\u044f\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0442\u0438\u043f\u0430 HRESULT, \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e <a href=\"http:\/\/www.viva64.com\/go.php?url=422\">\u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443<\/a>. \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f HRESULT \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 SUCCEEDED \u0438\u043b\u0438 FAILED, \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u00abWinError.h\u00bb. \u0412\u043e\u0442 \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u044d\u0442\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u044b:  <\/p>\n<pre><code class=\"cpp\">#define FAILED(hr) (((HRESULT)(hr)) &lt; 0) #define SUCCEEDED(hr) (((HRESULT)(hr)) &gt;= 0)<\/code><\/pre>\n<p>  \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u0434\u0430:  <\/p>\n<pre><code class=\"cpp\">if (FAILED(AVIStreamInfo(pas, &amp;asi, sizeof asi)))<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f PVS-Studio \u0432\u044b\u0434\u0430\u0451\u0442 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<ul>\n<li>avireadhandlertunnelw32.cpp 238<\/li>\n<li>avireadhandlertunnelw32.cpp 335<\/li>\n<li>inputfileavi.cpp 440<\/li>\n<li>context_d3d11.cpp 959<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0447\u0438\u0441\u043b\u0430<\/h2>\n<p>  \u0417\u0430\u0434\u0430\u043d\u0438\u0435 \u0434\u043b\u0438\u043d\u044b \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0447\u0438\u0441\u043b\u0430 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0438\u0434\u0435\u044f. \u041e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f, \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u044b. \u041f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">bool VDOpenGLBinding::Attach(....) {   ....   if (!memcmp(start, &quot;GL_EXT_blend_subtract&quot;, 20))   .... }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PVS-Studio: V512 A call of the &#8216;memcmp&#8217; function will lead to underflow of the buffer &#8216;\u00abGL_EXT_blend_subtract\u00bb&#8217;. Riza opengl.cpp 393<\/p>\n<p>  \u0414\u043b\u0438\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 \u00abGL_EXT_blend_subtract\u00bb \u043d\u0435 20, \u0430 21 \u0441\u0438\u043c\u0432\u043e\u043b. \u041e\u0448\u0438\u0431\u043a\u0430 \u043d\u0435\u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0430. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0439 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0445 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0447\u0438\u0441\u0435\u043b. \u041b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043a\u0440\u043e\u0441 \u0434\u043b\u044f \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430 \u0434\u043b\u0438\u043d\u044b \u0441\u0442\u0440\u043e\u043a\u0438. \u041f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"cpp\">#define LiteralStrLen(S) (sizeof(S) \/ sizeof(S[0]) - 1)<\/code><\/pre>\n<p>  \u0412 \u0421\u0438++ \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0443\u044e \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:  <\/p>\n<pre><code class=\"cpp\">template &lt;typename T, size_t N&gt; char (&amp;ArraySizeHelper(T (&amp;array)[N]))[N];  template &lt;typename T, size_t N&gt; size_t LiteralStrLen(T (&amp;array)[N]) {   return sizeof(ArraySizeHelper(array)) - 1; }<\/code><\/pre>\n<p>  \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u2014 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u0451\u043c \u043e\u043f\u0438\u0441\u0430\u043d \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 &quot;<a href=\"http:\/\/www.viva64.com\/ru\/a\/0074\/\">PVS-Studio vs Chromium<\/a>&quot;.<\/p>\n<h2>\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u043f\u0443\u0442\u0438<\/h2>\n<p>  <\/p>\n<pre><code class=\"cpp\">VDDbgHelpDynamicLoaderW32::VDDbgHelpDynamicLoaderW32() {   hmodDbgHelp = LoadLibrary(     &quot;c:\\\\program files\\\\debugging tools for windows\\\\dbghelp&quot;);   if (!hmodDbgHelp) {     hmodDbgHelp = LoadLibrary(&quot;c:\\\\program files (x86)\\\\......   .... }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PVS-Studio: V631 Consider inspecting the &#8216;LoadLibraryA&#8217; function call. Defining an absolute path to the file or directory is considered a poor style. VirtualDub leaks.cpp 67, 69<\/p>\n<p>  \u0414\u0443\u043c\u0430\u044e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0435\u043c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043f\u043b\u043e\u0445. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043a\u043e\u0434 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439, \u0438 \u0432\u0440\u044f\u0434 \u043b\u0438 \u043a\u0430\u043a-\u0442\u043e \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u043e \u0441\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u0445. \u041d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e, \u0431\u044b\u043b\u043e \u0431\u044b \u043b\u0443\u0447\u0448\u0435 <a href=\"http:\/\/www.viva64.com\/go.php?url=1308\">\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c<\/a> \u0434\u043e Program Files.<\/p>\n<h2>\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442<\/h2>\n<p>  <\/p>\n<pre><code class=\"cpp\">sint64 rva;  void tool_lookup(....) {   ....   printf(&quot;%08I64x   %s + %x [%s:%d]\\n&quot;,     addr, sym-&gt;name, addr-sym-&gt;rva, fn, line);   .... }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PVS-Studio: V576 Incorrect format. Consider checking the fourth actual argument of the &#8216;printf&#8217; function. The argument is expected to be not greater than 32-bit. Asuka lookup.cpp 56<\/p>\n<p>  \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f &#8216;rva&#8217; \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f 64-\u0431\u0438\u0442\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432 \u0441\u0442\u0435\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u043e 8 \u0431\u0430\u0439\u0442. \u0424\u0443\u043d\u043a\u0446\u0438\u044f printf() \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0441 <a href=\"http:\/\/www.viva64.com\/ru\/t\/0069\/\">\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/a>. \u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0440\u043e\u043a\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f &#8216;rva&#8217; \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u043a\u0430\u043a 32-\u0431\u0438\u0442\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f (&quot;%x&quot;).<\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u0434\u0430\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u043a \u0441\u0431\u043e\u044e \u0438\u043b\u0438 \u043d\u0435\u0442, \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0438 \u043e\u0442 \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 <a href=\"http:\/\/www.viva64.com\/ru\/t\/0055\/\">Win64<\/a> \u0432\u0441\u0435 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043a 64-\u0431\u0438\u0442\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443, \u0438 \u0443\u0436\u0435 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u0442\u0435\u043a. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0439\u043c\u0435\u0442 \u0432 \u0441\u0442\u0435\u043a\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430, \u0447\u0435\u043c \u043d\u0430\u0434\u043e, \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f &#8216;rva&#8217; \u0445\u0440\u0430\u043d\u0438\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 INT_MAX, \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u043d\u043e \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e.<\/p>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0432\u044b\u0434\u0430\u0451\u0442 \u0437\u0434\u0435\u0441\u044c:<\/p>\n<ul>\n<li>dubstatus.cpp 360<\/li>\n<li>lookup.cpp 58<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f<\/h2>\n<p>  <\/p>\n<pre><code class=\"cpp\">void VDVideoCompressorVCM::GetState(vdfastvector&lt;uint8&gt;&amp; data) {   DWORD res;   ....   res = ICGetState(hic, data.data(), size);   ....   if (res &lt; 0)     throw MyICError(&quot;Video compression&quot;, res); }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PVS-Studio: V547 Expression &#8216;res &lt; 0&#8217; is always false. Unsigned type value is never &lt; 0. Riza w32videocodecpack.cpp 828<\/p>\n<p>  \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f &#8216;res&#8217; \u0438\u043c\u0435\u0435\u043c \u0431\u0435\u0437\u0437\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0442\u0438\u043f DWORD. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u00abres &lt; 0\u00bb \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e &#8216;false&#8217;.<\/p>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c: w32videocodec.cpp 284.<\/p>\n<p>  \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u0441\u0445\u043e\u0436\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443.  <\/p>\n<pre><code class=\"cpp\">#define ICERR_CUSTOM           -400L static const char *GetVCMErrorString(uint32 icErr) {   ....   if (icErr &lt;= ICERR_CUSTOM) err = &quot;A codec-specific error occurred.&quot;;   .... }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PVS-Studio: V605 Consider verifying the expression: icErr &lt;= \u2014 400L. An unsigned value is compared to the number -400. system error_win32.cpp 54<\/p>\n<p>  \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f &#8216; icErr&#8217; \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f &#8216;unsigned&#8217;. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u0435\u0440\u0435\u0434 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c \u0447\u0438\u0441\u043b\u043e &#8216;-400&#8217; \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u044f\u0432\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043e \u0432 &#8216;unsigned&#8217;. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 &#8216;-400&#8217; \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u0432 4294966896. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 (icErr &lt;= -400) \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e (icErr &lt;= 4294966896). \u041f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u044d\u0442\u043e \u043d\u0435 \u0442\u043e, \u0447\u0442\u043e \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442.<\/p>\n<h2>\u0420\u0430\u0437\u043d\u043e\u0435 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0435<\/h2>\n<p>  <\/p>\n<pre><code class=\"cpp\">void AVIOutputFile::finalize() {   ....   if (stream.mChunkCount &amp;&amp; hdr.dwScale &amp;&amp; stream.mChunkCount)   .... }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PVS-Studio: V501 There are identical sub-expressions &#8216;stream.mChunkCount&#8217; to the left and to the right of the &#8216;&amp;&amp;&#8217; operator. VirtualDub avioutputfile.cpp 761<\/p>\n<p>  \u0414\u0432\u0430 \u0440\u0430\u0437\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f &#8216;stream.mChunkCount&#8217;. \u041e\u0434\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043b\u0438\u0448\u043d\u044f\u044f \u0438\u043b\u0438 \u0437\u0430\u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0451.  <\/p>\n<pre><code class=\"cpp\">void VDVideoCompressorVCM::Start(const void *inputFormat,                                  uint32 inputFormatSize,                                  const void *outputFormat,                                  uint32 outputFormatSize,                                  const VDFraction&amp; frameRate,                                  VDPosition frameCount) {   this-&gt;hic = hic;   .... }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PVS-Studio: V570 The &#8216;this-&gt;hic&#8217; variable is assigned to itself. Riza w32videocodecpack.cpp 253  <\/p>\n<pre><code class=\"cpp\">void VDDialogAudioConversionW32::RecomputeBandwidth() {   ....   if (IsDlgButtonChecked(mhdlg, IDC_PRECISION_NOCHANGE)) {     if (mbSourcePrecisionKnown &amp;&amp; mbSource16Bit)       bps *= 2;     else       bps = 0;   } if (IsDlgButtonChecked(mhdlg, IDC_PRECISION_16BIT))     bps *= 2;   .... }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PVS-Studio: V646 Consider inspecting the application&#8217;s logic. It&#8217;s possible that &#8216;else&#8217; keyword is missing. VirtualDub optdlg.cpp 120<\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u043e\u0434 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d. \u0410 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0437\u0430\u0431\u044b\u0442\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e &#8216;else&#8217;.  <\/p>\n<pre><code class=\"cpp\">bool VDCaptureDriverScreen::Init(VDGUIHandle hParent) {   ....   mbAudioHardwarePresent = false;   mbAudioHardwarePresent = true;   .... }<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0434\u0430\u043d\u043d\u043e\u0435 PVS-Studio: V519 The &#8216;mbAudioHardwarePresent&#8217; variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 274, 275. VDCapture cap_screen.cpp 275<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0440\u0430\u0437\u043e\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u0435\u043d. \u041d\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u0435\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e. \u0412\u0435\u0434\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f (warnings) \u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u043d\u0435 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0434 \u0440\u0435\u043b\u0438\u0437\u043e\u043c, \u0430 \u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0438\u043c\u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e. \u0422\u0430 \u0436\u0435 \u0441\u0430\u043c\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0438 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430. \u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438. \u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c PVS-Studio \u043a\u0430\u043a \u043d\u0435\u043a\u0443\u044e \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043d\u0430\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0434\u0430\u0451\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439. \u041d\u0430\u0438\u043b\u0443\u0447\u0448\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"http:\/\/www.viva64.com\/ru\/d\/0218\/\">\u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430<\/a> \u043a\u043e\u0434\u0430. \u0412\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u0435 \u043d\u043e\u0432\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/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\/company\/pvs-studio\/blog\/198060\/\"> http:\/\/habrahabr.ru\/company\/pvs-studio\/blog\/198060\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" align=\"left\" src=\"http:\/\/habr.habrastorage.org\/post_images\/4a0\/517\/cc2\/4a0517cc2eed1c6f75175563320a3169.jpg\" alt=\"PVS-Studio, VirtualDub\"\/><br \/>  \u0422\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e, \u044f \u0441\u0435\u043b \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b \u043f\u0440\u043e\u0435\u043a\u0442 VirtualDub \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PVS-Studio. \u0412\u044b\u0431\u043e\u0440 \u0431\u044b\u043b \u0441\u043b\u0443\u0447\u0430\u0435\u043d. \u042f \u0441\u0447\u0438\u0442\u0430\u044e, \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c\/\u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 PVS-Studio. \u0410 \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d, \u043d\u0435 \u0442\u0430\u043a \u0432\u0430\u0436\u043d\u043e. \u041e\u0448\u0438\u0431\u043a\u0438 \u0435\u0441\u0442\u044c \u0432\u0435\u0437\u0434\u0435. \u041f\u0440\u043e\u0435\u043a\u0442 VirtualDub \u043c\u044b \u0443\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438 \u0432 2011 \u0433\u043e\u0434\u0443, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u0447\u0442\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c. \u0412\u043e\u0442 \u044f \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043e\u0431\u0441\u0442\u043e\u044f\u0442 \u0434\u0435\u043b\u0430, \u0441\u043f\u0443\u0441\u0442\u044f 2 \u0433\u043e\u0434\u0430.<\/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-198060","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/198060","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=198060"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/198060\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=198060"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=198060"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=198060"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}