เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ: เชŸเซ€เชฎเชธเชฟเชŸเซ€. เช“เชชเชจ เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ

เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ: เชŸเซ€เชฎเชธเชฟเชŸเซ€. เช“เชชเชจ เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ
เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เชตเชฟเชถเซเชฒเซ‡เชทเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชธเซŒเชฅเซ€ เชตเชฐเซเชคเชฎเชพเชจ เชฆเซƒเชถเซเชฏเซ‹เชฎเชพเช‚เชจเซเช‚ เชเช• เชธเซ€เช†เชˆ เชธเชฟเชธเซเชŸเชฎเซเชธ เชธเชพเชฅเซ‡เชจเซเช‚ เชเช•เซ€เช•เชฐเชฃ เช›เซ‡. เช…เชจเซ‡ เชคเซ‡เชฎ เช›เชคเชพเช‚ เชฒเช—เชญเช— เช•เซ‹เชˆเชชเชฃ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ เชธเชฟเชธเซเชŸเชฎเชฎเชพเช‚เชฅเซ€ PVS-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชฎเชพเชคเซเชฐ เชฅเซ‹เชกเชพ เช†เชฆเซ‡เชถเซ‹เชฎเชพเช‚ เชฌเชจเชพเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡, เช…เชฎเซ‡ เช† เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชตเชงเซ เช…เชจเซเช•เซ‚เชณ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เชšเชพเชฒเซ เชฐเชพเช–เซ€เช เช›เซ€เช. PVS-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เชนเชตเซ‡ เชŸเซ€เชฎเชธเชฟเชŸเซ€ - เชŸเซ€เชฎเชธเชฟเชŸเซ€ เช‡เชจเซเชธเซเชชเซ‡เช•เซเชถเชจ เชชเซเชฐเช•เชพเชฐ เชฎเชพเชŸเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเช• เช†เช‰เชŸเชชเซเชŸเชจเซ‡ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเชชเซ‹เชฐเซเชŸ เชงเชฐเชพเชตเซ‡ เช›เซ‡. เชšเชพเชฒเซ‹ เชœเซ‹เชˆเช เช•เซ‡ เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡.

เชตเชชเชฐเชพเชฏเซ‡เชฒ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชตเชฟเชถเซ‡ เชฎเชพเชนเชฟเชคเซ€

เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ โ€” C, C++, C# เช…เชจเซ‡ Java เช•เซ‹เชกเชจเซเช‚ เชธเซเชฅเชฟเชฐ เชตเชฟเชถเซเชฒเซ‡เชทเช•, เชตเชฟเชตเชฟเชง เชชเซเชฐเช•เชพเชฐเชจเซ€ เชญเซ‚เชฒเซ‹ เชถเซ‹เชงเชตเชพ เช…เชจเซ‡ เชธเซเชงเชพเชฐเชตเชพเชจเชพ เช•เชพเชฐเซเชฏเชจเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เช›เซ‡. เชตเชฟเชถเซเชฒเซ‡เชทเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— Windows, Linux เช…เชจเซ‡ macOS เชชเชฐ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡. เช† เชฒเซ‡เช–เชฎเชพเช‚ เช†เชชเชฃเซ‡ เชซเช•เซเชค เชตเชฟเชถเซเชฒเซ‡เชทเช•เชจเซ‹ เชœ เชจเชนเซ€เช‚, เชชเชฐเช‚เชคเซ เชคเซ‡เชจเชพ เชตเชฟเชคเชฐเชฃเชฎเชพเช‚เชฅเซ€ เช•เซ‡เชŸเชฒเซ€เช• เช‰เชชเชฏเซ‹เช—เชฟเชคเชพเช“เชจเซ‹ เชชเชฃ เชธเช•เซเชฐเชฟเชฏเชชเชฃเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚.

เชธเซ€เชเชฒ เชฎเซ‹เชจเชฟเชŸเชฐ โ€” เชเช• เชฎเซ‹เชจเชฟเชŸเชฐเชฟเช‚เช— เชธเชฐเซเชตเชฐ เช›เซ‡ เชœเซ‡ เช•เชฎเซเชชเชพเชˆเชฒเชฐ เชฒเซ‹เชจเซเชšเชจเซเช‚ เชฎเซ‹เชจเชฟเชŸเชฐ เช•เชฐเซ‡ เช›เซ‡. เชคเชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชจเชฟเชฐเซเชฎเชพเชฃ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเชคเชพ เชชเชนเซ‡เชฒเชพ เชคเซ‡ เชคเชฐเชค เชœ เชšเชฒเชพเชตเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡. เชธเซเชจเซ‚เชชเชฟเช‚เช— เชฎเซ‹เชกเชฎเชพเช‚, เชธเชฐเซเชตเชฐ เชฌเชงเชพ เชธเชชเซ‹เชฐเซเชŸเซ‡เชก เช•เชฎเซเชชเชพเช‡เชฒเชฐเซเชธเชจเชพ เชฐเชจเชจเซ‡ เช…เชŸเช•เชพเชตเชถเซ‡. เชคเซ‡ เชจเซ‹เช‚เชงเชตเซเช‚ เชฏเซ‹เช—เซเชฏ เช›เซ‡ เช•เซ‡ เช† เช‰เชชเชฏเซ‹เช—เชฟเชคเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชซเช•เซเชค C/C++ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡.

PlogConverter - เชตเชฟเชถเซเชฒเซ‡เชทเช• เช…เชนเซ‡เชตเชพเชฒเซ‹เชจเซ‡ เชตเชฟเชตเชฟเชง เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เช‰เชชเชฏเซ‹เช—เชฟเชคเชพ.

เช…เชญเซเชฏเชพเชธ เชนเซ‡เช เชณเชจเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชตเชฟเชถเซ‡ เชฎเชพเชนเชฟเชคเซ€

เชšเชพเชฒเซ‹ เช† เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพเชจเซ‡ เชตเซเชฏเชตเชนเชพเชฐเซ เช‰เชฆเชพเชนเชฐเชฃ เชชเชฐ เช…เชœเชฎเชพเชตเซ€เช - เชšเชพเชฒเซ‹ OpenRCT2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเซ€เช.

เช“เชชเชจเช†เชฐเชธเซ€เชŸเซ€ 2 - เชฐเชฎเชค เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 (RCT2) เชจเซเช‚ เช–เซเชฒเซเชฒเซเช‚ เช…เชฎเชฒเซ€เช•เชฐเชฃ, เชคเซ‡เชจเซ‡ เชจเชตเชพ เช•เชพเชฐเซเชฏเซ‹ เชธเชพเชฅเซ‡ เชตเชฟเชธเซเชคเชฐเชฃ เช…เชจเซ‡ เชฌเช—เซเชธ เชซเชฟเช•เซเชธเชฟเช‚เช—. เช—เซ‡เชฎเชชเซเชฒเซ‡ เชฐเชพเช‡เชกเซเชธ, เชฆเซเช•เชพเชจเซ‹ เช…เชจเซ‡ เชธเซเชตเชฟเชงเชพเช“ เชงเชฐเชพเชตเชคเซ‹ เชฎเชจเซ‹เชฐเช‚เชœเชจ เชชเชพเชฐเซเช• เชฌเชจเชพเชตเชตเชพ เช…เชจเซ‡ เชœเชพเชณเชตเชตเชพเชจเซ€ เช†เชธเชชเชพเชธ เชซเชฐเซ‡ เช›เซ‡. เช–เซ‡เชฒเชพเชกเซ€เช เชฎเชนเซ‡เชฎเชพเชจเซ‹เชจเซ‡ เช–เซเชถ เชฐเชพเช–เซ€เชจเซ‡ เชจเชซเซ‹ เชฎเซ‡เชณเชตเชตเชพ เช…เชจเซ‡ เชชเชพเชฐเซเช•เชจเซ€ เชธเชพเชฐเซ€ เชชเซเชฐเชคเชฟเชทเซเช เชพ เชœเชพเชณเชตเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชตเซ‹ เชœเซ‹เชˆเช. OpenRCT2 เชคเชฎเชจเซ‡ เชฆเซƒเชถเซเชฏ เช…เชจเซ‡ เชธเซ‡เชจเซเชกเชฌเซ‹เช•เซเชธ เชฌเช‚เชจเซ‡เชฎเชพเช‚ เชฐเชฎเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชฆเซƒเชถเซเชฏเซ‹ เชฎเชพเชŸเซ‡ เช–เซ‡เชฒเชพเชกเซ€เช เชšเซ‹เช•เซเช•เชธ เช•เชพเชฐเซเชฏเชจเซ‡ เชจเชฟเชฐเซเชงเชพเชฐเชฟเชค เชธเชฎเชฏเชจเซ€ เช…เช‚เชฆเชฐ เชชเซ‚เชฐเซเชฃ เช•เชฐเชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡, เชœเซเชฏเชพเชฐเซ‡ เชธเซ‡เชจเซเชกเชฌเซ‹เช•เซเชธ เช–เซ‡เชฒเชพเชกเซ€เชจเซ‡ เช•เซ‹เชˆเชชเชฃ เชชเซเชฐเชคเชฟเชฌเช‚เชงเซ‹ เช…เชฅเชตเชพ เชจเชพเชฃเชพเช‚ เชตเชฟเชจเชพ เชตเชงเซ เชฒเชตเชšเซ€เช• เชชเชพเชฐเซเช• เชฌเชจเชพเชตเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡.

เช—เซ‹เช เชตเชฃ

เชธเชฎเชฏ เชฌเชšเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชนเซเช‚ เชธเช‚เชญเชตเชคเชƒ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เช›เซ‹เชกเซ€ เชฆเชˆเชถ เช…เชจเซ‡ เชฎเชพเชฐเชพ เช•เชฎเซเชชเซเชฏเซเชŸเชฐ เชชเชฐ เชŸเซ€เชฎเชธเชฟเชŸเซ€ เชธเชฐเซเชตเชฐ เชšเชพเชฒเชคเซเช‚ เชนเซ‹เชฏ เชคเซ‡ เช•เซเชทเชฃเชฅเซ€ เชถเชฐเซ‚ เช•เชฐเซ€เชถ. เช…เชฎเชพเชฐเซ‡ เช…เชนเซ€เช‚ เชœเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡: localhost:{เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฆเชฐเชฎเชฟเชฏเชพเชจ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชชเซ‹เชฐเซเชŸ} (เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชฒเซ‹เช•เชฒเชนเซ‹เชธเซเชŸ:9090) เช…เชจเซ‡ เช…เชงเชฟเช•เซƒเชคเชคเชพ เชกเซ‡เชŸเชพ เชฆเชพเช–เชฒ เช•เชฐเซ‹. เชฆเชพเช–เชฒ เชฅเชฏเชพ เชชเช›เซ€ เช…เชฎเชพเชฐเซเช‚ เชธเซเชตเชพเช—เชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡:

เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ: เชŸเซ€เชฎเชธเชฟเชŸเซ€. เช“เชชเชจ เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ
เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเซ‹ เชฌเชŸเชจ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹. เช†เช—เชณ, เชฎเซ‡เชจเซเชฏเซเช…เชฒเซ€ เชชเชธเช‚เชฆ เช•เชฐเซ‹ เช…เชจเซ‡ เชซเซ€เชฒเซเชกเซเชธ เชญเชฐเซ‹.

เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ: เชŸเซ€เชฎเชธเชฟเชŸเซ€. เช“เชชเชจ เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ
เชฌเชŸเชจ เชฆเชฌเชพเชตเซเชฏเชพ เชชเช›เซ€ เชฌเชจเชพเชตเซ‹, เช…เชฎเชจเซ‡ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชธเชพเชฅเซ‡ เชตเชฟเชจเซเชกเซ‹ เชฆเซเชตเชพเชฐเชพ เช†เชตเช•เชพเชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ: เชŸเซ€เชฎเชธเชฟเชŸเซ€. เช“เชชเชจ เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ
เชšเชพเชฒเซ‹ เช•เซเชฒเชฟเช• เช•เชฐเซ€เช เชฌเชฟเชฒเซเชก เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชฌเชจเชพเชตเซ‹.

เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ: เชŸเซ€เชฎเชธเชฟเชŸเซ€. เช“เชชเชจ เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ
เชซเซ€เชฒเซเชกเซเชธ เชญเชฐเซ‹ เช…เชจเซ‡ เช•เซเชฒเชฟเช• เช•เชฐเซ‹ เชฌเชจเชพเชตเซ‹. เช…เชฎเซ‡ เชคเชฎเชจเซ‡ เชตเชฐเซเชเชจ เช•เช‚เชŸเซเชฐเซ‹เชฒ เชธเชฟเชธเซเชŸเชฎ เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชจเซเช‚ เช•เชนเซ‡เชคเซ€ เชตเชฟเชจเซเชกเซ‹ เชœเซ‹เชˆเช เช›เซ€เช. เชธเซเชคเซเชฐเซ‹เชคเซ‹ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชธเซเชฅเชพเชจเชฟเช• เชฐเซ€เชคเซ‡ เชธเซเชฅเชฟเชค เชนเซ‹เชตเชพเชฅเซ€, เช•เซเชฒเชฟเช• เช•เชฐเซ‹ เชœเชพเช“.

เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ: เชŸเซ€เชฎเชธเชฟเชŸเซ€. เช“เชชเชจ เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ
เช›เซ‡เชฒเซเชฒเซ‡, เช…เชฎเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ เชชเชฐ เช†เช—เชณ เชตเชงเซ€เช เช›เซ€เช.

เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ: เชŸเซ€เชฎเชธเชฟเชŸเซ€. เช“เชชเชจ เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ
เชšเชพเชฒเซ‹ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชธเซเชŸเซ‡เชชเซเชธ เช‰เชฎเซ‡เชฐเซ€เช, เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซเชฒเชฟเช• เช•เชฐเซ‹: เชฌเชฟเชฒเซเชก เชธเซเชŸเซ‡เชชเซเชธ -> เชฌเชฟเชฒเซเชก เชธเซเชŸเซ‡เชช เช‰เชฎเซ‡เชฐเซ‹.

เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ: เชŸเซ€เชฎเชธเชฟเชŸเซ€. เช“เชชเชจ เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ
เช…เชนเซ€เช‚ เช…เชฎเซ‡ เชชเชธเช‚เชฆ เช•เชฐเซ€เช เช›เซ€เช:

  • เชฐเชจเชฐ เชชเซเชฐเช•เชพเชฐ -> เช•เชฎเชพเชจเซเชก เชฒเชพเช‡เชจ
  • เชšเชฒเชพเชตเซ‹ -> เช•เชธเซเชŸเชฎ เชธเซเช•เซเชฐเชฟเชชเซเชŸ

เช…เชฎเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเช‚เช•เชฒเชจ เชฆเชฐเชฎเชฟเชฏเชพเชจ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเซ€เชถเซเช‚, เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เช…เชจเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชเช• เชชเช—เชฒเซเช‚ เชนเซ‹เชตเซเช‚ เชœเซ‹เชˆเช, เชคเซ‡เชฅเซ€ เชซเซ€เชฒเซเชก เชญเชฐเซ‹ เช•เชธเซเชŸเชฎ เชธเซเช•เซเชฐเชฟเชชเซเชŸ:

เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ: เชŸเซ€เชฎเชธเชฟเชŸเซ€. เช“เชชเชจ เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ
เช…เชฎเซ‡ เชตเซเชฏเช•เซเชคเชฟเช—เชค เชชเช—เชฒเชพเช‚เช“ เชชเช›เซ€เชฅเซ€ เชœเซ‹เชˆเชถเซเช‚. เชคเซ‡ เชฎเชนเชคเซเชตเชจเซเช‚ เช›เซ‡ เช•เซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเช• เชฒเซ‹เชก เช•เชฐเชตเชพ, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเชตเชพ, เชคเซ‡เชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเชตเชพ, เชฐเชฟเชชเซ‹เชฐเซเชŸเชจเซ‡ เช†เช‰เชŸเชชเซเชŸ เช•เชฐเชตเชพ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชซเซ‹เชฐเซเชฎเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชกเชจเซ€ เชฎเชพเชคเซเชฐ เช…เช—เชฟเชฏเชพเชฐ เชฒเชพเช‡เชจ เชฒเชพเช—เซ‡ เช›เซ‡.

เช›เซ‡เชฒเซเชฒเซ€ เชตเชธเซเชคเซ เชœเซ‡ เช†เชชเชฃเซ‡ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชคเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹เชจเซ‡ เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซ€ เช›เซ‡, เชœเซ‡เชจเซ€ เชฎเซ‡เช‚ เชคเซ‡เชฎเชจเซ€ เชตเชพเช‚เชšเชจเช•เซเชทเชฎเชคเชพ เชธเซเชงเชพเชฐเชตเชพเชจเซ€ เช•เซ‡เชŸเชฒเซ€เช• เชฐเซ€เชคเซ‹ เชฆเชฐเซเชถเชพเชตเซ€ เช›เซ‡. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชšเชพเชฒเซ‹ เช†เช—เชณ เชตเชงเซ€เช: เชชเชฐเชฟเชฎเชพเชฃเซ‹ -> เชจเชตเซเช‚ เชชเชฐเชฟเชฎเชพเชฃ เช‰เชฎเซ‡เชฐเซ‹ เช…เชจเซ‡ เชคเซเชฐเชฃ เชšเชฒเซ‹ เช‰เชฎเซ‡เชฐเซ‹:

เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ: เชŸเซ€เชฎเชธเชฟเชŸเซ€. เช“เชชเชจ เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ
เชคเชฎเชพเชฐเซ‡ เชซเช•เซเชค เชฌเชŸเชจ เชฆเชฌเชพเชตเชตเชพเชจเซเช‚ เช›เซ‡ เชšเชฒเชพเชตเซ‹ เช‰เชชเชฐ เชœเชฎเชฃเชพ เช–เซ‚เชฃเซ‡. เชœเซเชฏเชพเชฐเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชเชธเซ‡เชฎเซเชฌเชฒ เช…เชจเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชฐเชนเซเชฏเซ‹ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชนเซเช‚ เชคเชฎเชจเซ‡ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เชตเชฟเชถเซ‡ เชœเชฃเชพเชตเซ€เชถ.

เชธเซ€เชงเซ€ เชธเซเช•เซเชฐเชฟเชชเซเชŸ

เชชเซเชฐเชฅเชฎ, เช†เชชเชฃเซ‡ เชจเชตเซ€เชจเชคเชฎ PVS-Studio เชตเชฟเชคเชฐเชฃ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช† เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชšเซ‹เช•เชฒเซ‡เชŸเซ€ เชชเซ‡เช•เซ‡เชœ เชฎเซ‡เชจเซ‡เชœเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช. เชœเซ‡เช“ เช† เชตเชฟเชถเซ‡ เชตเชงเซ เชœเชพเชฃเชตเชพ เชฎเชพเช—เซ‡ เช›เซ‡ เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡ เช…เชจเซเชฐเซ‚เชช เช›เซ‡ เชฒเซ‡เช–:

choco install pvs-studio -y

เช†เช—เชณ, เชšเชพเชฒเซ‹ CLMonitor เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฌเชฟเชฒเซเชก เชŸเซเชฐเซ‡เช•เชฟเช‚เช— เชฏเซเชŸเชฟเชฒเชฟเชŸเซ€ เชฒเซ‹เช‚เชš เช•เชฐเซ€เช.

%CLmon% monitor โ€“-attach

เชชเช›เซ€ เช…เชฎเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเซ‡เชฐเซ€เชเชฌเชฒ เชคเชฐเซ€เช•เซ‡ เชฌเชจเชพเชตเซ€เชถเซเช‚ เชเชฎ.เชเชธ.เชฌเซ€. MSBuild เชจเชพ เชธเช‚เชธเซเช•เชฐเชฃเชจเซ‹ เชฎเชพเชฐเซเช— เช›เซ‡ เชœเซ‡ เชฎเชพเชฐเซ‡ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡

%MSB% %ProjPath% /t:clean
%MSB% %ProjPath% /t:rebuild /p:configuration=release
%MSB% %ProjPath% /t:g2
%MSB% %ProjPath% /t:PublishPortable

เชšเชพเชฒเซ‹ PVS-Studio เชฎเชพเชŸเซ‡ เชฒเซ‹เช—เชฟเชจ เช…เชจเซ‡ เชฒเชพเช‡เชธเชจเซเชธ เช•เซ€ เชฆเชพเช–เชฒ เช•เชฐเซ€เช:

%PVS-Studio_cmd% credentials --username %PVS_Name% --serialNumber %PVS_Key%

เชฌเชฟเชฒเซเชก เชชเซ‚เชฐเซเชฃ เชฅเชฏเชพ เชชเช›เซ€, เชชเซเชฐเซ€เชชเซเชฐเซ‹เชธเซ‡เชธเซเชก เชซเชพเช‡เชฒเซ‹ เช…เชจเซ‡ เชธเซเชŸเซ‡เชŸเชฟเช• เชเชจเชพเชฒเชฟเชธเชฟเชธ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชซเชฐเซ€เชฅเซ€ CLMonitor เชšเชฒเชพเชตเซ‹:

%CLmon% analyze -l "c:ptest.plog"

เชชเช›เซ€ เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชตเชฟเชคเชฐเชฃเชฎเชพเช‚เชฅเซ€ เช…เชจเซเชฏ เช‰เชชเชฏเซ‹เช—เชฟเชคเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚. PlogConverter เชฐเชฟเชชเซ‹เชฐเซเชŸเชจเซ‡ เชฎเชพเชจเช• เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚เชฅเซ€ TeamCity-เชตเชฟเชถเชฟเชทเซเชŸ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เช†เชจเซ‹ เช†เชญเชพเชฐ, เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชฌเชฟเชฒเซเชก เชตเชฟเช‚เชกเซ‹เชฎเชพเช‚ เชธเซ€เชงเชพ เชœ เชœเซ‹เชˆ เชถเช•เซ€เชถเซเช‚.

%PlogConverter% "c:ptest.plog" --renderTypes=TeamCity -o "C:temp"

เช›เซ‡เชฒเซเชฒเซเช‚ เชชเช—เชฒเซเช‚ เช เชซเซ‹เชฐเซเชฎเซ‡เชŸ เช•เชฐเซ‡เชฒ เชฐเชฟเชชเซ‹เชฐเซเชŸเชจเซ‡ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพเชจเซเช‚ เช›เซ‡ stdout, เชœเซเชฏเชพเช‚ เชคเซ‡เชจเซ‡ TeamCity เชชเชพเชฐเซเชธเชฐ เชฆเซเชตเชพเชฐเชพ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

type "C:tempptest.plog_TeamCity.txt"

เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซเช•เซเชฐเชฟเชชเซเชŸ เช•เซ‹เชก:

choco install pvs-studio -y
%CLmon% monitor --attach
set platform=x64
%MSB% %ProjPath% /t:clean
%MSB% %ProjPath% /t:rebuild /p:configuration=release
%MSB% %ProjPath% /t:g2
%MSB% %ProjPath% /t:PublishPortable
%PVS-Studio_cmd% credentials --username %PVS_Name% --serialNumber %PVS_Key%
%CLmon% analyze -l "c:ptest.plog"
%PlogConverter% "c:ptest.plog" --renderTypes=TeamCity -o "C:temp"
type "C:tempptest.plog_TeamCity.txt"

เช† เชฆเชฐเชฎเชฟเชฏเชพเชจ, เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เช…เชจเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เชธเชซเชณเชคเชพเชชเซ‚เชฐเซเชตเช• เชชเซ‚เชฐเซเชฃ เชฅเชˆ เช—เชฏเซเช‚ เช›เซ‡, เช…เชฎเซ‡ เชŸเซ‡เชฌ เชชเชฐ เชœเชˆ เชถเช•เซ€เช เช›เซ€เช เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธ เช…เชจเซ‡ เชคเซ‡เชจเซ€ เช–เชพเชคเชฐเซ€ เช•เชฐเซ‹.

เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ: เชŸเซ€เชฎเชธเชฟเชŸเซ€. เช“เชชเชจ เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ
เชนเชตเซ‡ เชšเชพเชฒเซ‹ เช•เซเชฒเชฟเช• เช•เชฐเซ€เช เชจเชฟเชฐเซ€เช•เซเชทเชฃเซ‹ เช•เซเชฒเชตเชฟเชถเซเชฒเซ‡เชทเช• เช…เชนเซ‡เชตเชพเชฒ เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡ เชœเชพเช“:

เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ: เชŸเซ€เชฎเชธเชฟเชŸเซ€. เช“เชชเชจ เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ
เชšเซ‡เชคเชตเชฃเซ€เช“เชจเซ‡ เชกเชพเชฏเช—เซเชจเซ‹เชธเซเชŸเชฟเช• เชจเชฟเชฏเชฎ เชจเช‚เชฌเชฐเซ‹ เชฆเซเชตเชพเชฐเชพ เชœเซ‚เชฅเชฌเชฆเซเชง เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เช•เซ‹เชก เชฎเชพเชฐเชซเชคเซ‡ เชจเซ‡เชตเชฟเช—เซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชšเซ‡เชคเชตเชฃเซ€ เชธเชพเชฅเซ‡ เชฒเชพเช‡เชจ เชจเช‚เชฌเชฐ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช‰เชชเชฐเชจเชพ เชœเชฎเชฃเชพ เช–เซ‚เชฃเชพเชฎเชพเช‚ เชชเซเชฐเชถเซเชจ เชšเชฟเชนเซเชจ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเชตเชพเชฅเซ€ เชคเชฎเชจเซ‡ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชธเชพเชฅเซ‡เชจเซเช‚ เชจเชตเซเช‚ เชŸเซ‡เชฌ เช–เซเชฒเชถเซ‡. เชคเชฎเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเช• เชšเซ‡เชคเชตเชฃเซ€ เชธเชพเชฅเซ‡เชจเชพ เชฒเชพเช‡เชจ เชจเช‚เชฌเชฐ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ€เชจเซ‡ เช•เซ‹เชก เชฆเซเชตเชพเชฐเชพ เชชเชฃ เชจเซ‡เชตเชฟเช—เซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹. เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชฐเชฟเชฎเซ‹เชŸ เช•เชฎเซเชชเซเชฏเซเชŸเชฐเชฅเซ€ เชจเซ‡เชตเชฟเช—เซ‡เชถเชจ เชถเช•เซเชฏ เช›เซ‡ SourceTreeRoot เชฎเชพเชฐเซเช•เชฐ เชตเชฟเชถเซเชฒเซ‡เชทเช•เชจเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€เชจเชพ เช† เชฎเซ‹เชกเชฎเชพเช‚ เชฐเชธ เชงเชฐเชพเชตเชจเชพเชฐ เช•เซ‹เชˆเชชเชฃ เชตเซเชฏเช•เซเชคเชฟ เช…เชจเซเชฐเซ‚เชช เชตเชฟเชญเชพเช—เชฅเซ€ เชชเซ‹เชคเชพเชจเซ‡ เชชเชฐเชฟเชšเชฟเชค เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ.

เชตเชฟเชถเซเชฒเซ‡เชทเช•เชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชœเซ‹เชˆ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชนเชตเซ‡ เชœเซเชฏเชพเชฐเซ‡ เช…เชฎเซ‡ เชฌเชฟเชฒเซเชกเชจเซ‡ เชœเชฎเชพเชตเชตเชพเชจเซเช‚ เช…เชจเซ‡ เช—เซ‹เช เชตเชตเชพเชจเซเช‚ เชชเซ‚เชฐเซเชฃ เช•เชฐเซ€ เชฒเซ€เชงเซเช‚ เช›เซ‡, เชšเชพเชฒเซ‹ เช†เชชเชฃเซ‡ เชœเซ‹เชˆ เชฐเชนเซเชฏเชพ เช›เซ€เช เชคเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชฎเชณเซ‡เชฒเซ€ เช•เซ‡เชŸเชฒเซ€เช• เชฐเชธเชชเซเชฐเชฆ เชšเซ‡เชคเชตเชฃเซ€เช“ เชชเชฐ เชเช• เชจเชœเชฐ เช•เชฐเซ€เช.

เชšเซ‡เชคเชตเชฃเซ€ N1

V773 [CWE-401] เช…เชชเชตเชพเชฆ 'เชชเชฐเชฟเชฃเชพเชฎ' เชจเชฟเชฐเซเชฆเซ‡เชถเช•เชจเซ‡ เชฌเชนเชพเชฐ เชชเชพเชกเซเชฏเชพ เชตเชฟเชจเชพ เชซเซ‡เช‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹. เชฎเซ‡เชฎเชฐเซ€ เชฒเซ€เช• เชถเช•เซเชฏ เช›เซ‡. libopenrct2 ObjectFactory.cpp 443

Object* CreateObjectFromJson(....)
{
  Object* result = nullptr;
  ....
  result = CreateObject(entry);
  ....
  if (readContext.WasError())
  {
    throw std::runtime_error("Object has errors");
  }
  ....
}

Object* CreateObject(const rct_object_entry& entry)
{
  Object* result;
  switch (entry.GetType())
  {
    case OBJECT_TYPE_RIDE:
      result = new RideObject(entry);
      break;
    case OBJECT_TYPE_SMALL_SCENERY:
      result = new SmallSceneryObject(entry);
      break;
    case OBJECT_TYPE_LARGE_SCENERY:
      result = new LargeSceneryObject(entry);
      break;
    ....
    default:
      throw std::runtime_error("Invalid object type");
  }
  return result;
}

เชตเชฟเชถเซเชฒเซ‡เชทเช•เซ‡ เชเช• เชญเซ‚เชฒ เชจเซ‹เช‚เชงเซ€ เช•เซ‡ เชœเซ‡ เชฎเซ‡เชฎเชฐเซ€เชจเซ‡ เช—เชคเชฟเชถเซ€เชฒ เชฐเซ€เชคเซ‡ เชซเชพเชณเชตเซเชฏเชพ เชชเช›เซ€ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเซ‹, เชœเซเชฏเชพเชฐเซ‡ เช…เชชเชตเชพเชฆ เชฅเชพเชฏ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชฎเซ‡เชฎเชฐเซ€ เชธเชพเชซ เชฅเชคเซ€ เชจเชฅเซ€, เช…เชจเซ‡ เชฎเซ‡เชฎเชฐเซ€ เชฒเซ€เช• เชฅเชพเชฏ เช›เซ‡.

เชšเซ‡เชคเชตเชฃเซ€ N2

V501 '|' เชจเซ€ เชกเชพเชฌเซ€ เช…เชจเซ‡ เชœเชฎเชฃเซ€ เชฌเชพเชœเซเช '(1ULL << WIDX_MONTH_BOX)' เชธเชฎเชพเชจ เชชเซ‡เชŸเชพ-เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟเช“ เช›เซ‡. เช“เชชเชฐเซ‡เชŸเชฐ libopenrct2ui Cheats.cpp 487

static uint64_t window_cheats_page_enabled_widgets[] = 
{
  MAIN_CHEAT_ENABLED_WIDGETS |
  (1ULL << WIDX_NO_MONEY) |
  (1ULL << WIDX_ADD_SET_MONEY_GROUP) |
  (1ULL << WIDX_MONEY_SPINNER) |
  (1ULL << WIDX_MONEY_SPINNER_INCREMENT) |
  (1ULL << WIDX_MONEY_SPINNER_DECREMENT) |
  (1ULL << WIDX_ADD_MONEY) |
  (1ULL << WIDX_SET_MONEY) |
  (1ULL << WIDX_CLEAR_LOAN) |
  (1ULL << WIDX_DATE_SET) |
  (1ULL << WIDX_MONTH_BOX) |  // <=
  (1ULL << WIDX_MONTH_UP) |
  (1ULL << WIDX_MONTH_DOWN) |
  (1ULL << WIDX_YEAR_BOX) |
  (1ULL << WIDX_YEAR_UP) |
  (1ULL << WIDX_YEAR_DOWN) |
  (1ULL << WIDX_DAY_BOX) |
  (1ULL << WIDX_DAY_UP) |
  (1ULL << WIDX_DAY_DOWN) |
  (1ULL << WIDX_MONTH_BOX) |  // <=
  (1ULL << WIDX_DATE_GROUP) |
  (1ULL << WIDX_DATE_RESET),
  ....
};

เชธเซเชŸเซ‡เชŸเชฟเช• เชตเชฟเชถเซเชฒเซ‡เชทเช• เชธเชฟเชตเชพเชฏเชจเชพ เชฅเซ‹เชกเชพ เชฒเซ‹เช•เซ‹ เช† เชธเชšเซ‡เชคเชคเชพเชจเซ€ เช•เชธเซ‹เชŸเซ€ เชชเชพเชธ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เช† เช•เซ‹เชชเซ€-เชชเซ‡เชธเซเชŸ เช‰เชฆเชพเชนเชฐเชฃ เชšเซ‹เช•เซเช•เชธ เช† เช•เชพเชฐเชฃเซ‹เชธเชฐ เชธเชพเชฐเซเช‚ เช›เซ‡.

เชšเซ‡เชคเชตเชฃเซ€เช“ N3

V703 เชคเซ‡ เชตเชฟเชšเชฟเชคเซเชฐ เช›เซ‡ เช•เซ‡ เชตเซเชฏเซเชคเซเชชเชจเซเชจ เชตเชฐเซเช— 'RCT12BannerElement' เชฎเชพเช‚ 'เชซเซเชฒเซ‡เช—' เชซเซ€เชฒเซเชก เชฌเซ‡เช เช•เซเชฒเชพเชธ 'RCT12TileElementBase' เชฎเชพเช‚ เชซเซ€เชฒเซเชกเชจเซ‡ เช“เชตเชฐเชฐเชพเชˆเชŸ เช•เชฐเซ‡ เช›เซ‡. เชฐเซ‡เช–เชพเช“ เชคเชชเชพเชธเซ‹: RCT12.h:570, RCT12.h:259. libopenrct2 RCT12.h 570

struct RCT12SpriteBase
{
  ....
  uint8_t flags;
  ....
};
struct rct1_peep : RCT12SpriteBase
{
  ....
  uint8_t flags;
  ....
};

เช…เชฒเชฌเชคเซเชค, เชฌเซ‡เช เช•เซเชฒเชพเชธ เช…เชจเซ‡ เชกเซ€เชธเซ‡เชจเซเชกเชจเซเชŸเชฎเชพเช‚ เชธเชฎเชพเชจ เชจเชพเชฎ เชธเชพเชฅเซ‡เชจเชพ เชšเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชนเช‚เชฎเซ‡เชถเชพ เชญเซ‚เชฒ เชจเชฅเซ€ เชนเซ‹เชคเซ‹. เชœเซ‹ เช•เซ‡, เชตเชพเชฐเชธเชพเช—เชค เชคเช•เชจเซ€เช• เชชเซ‹เชคเซ‡ เชœ เชงเชพเชฐเซ‡ เช›เซ‡ เช•เซ‡ เชชเชฟเชคเซƒ เชตเชฐเซเช—เชจเชพ เชคเชฎเชพเชฎ เช•เซเชทเซ‡เชคเซเชฐเซ‹ เชฌเชพเชณ เชตเชฐเซเช—เชฎเชพเช‚ เชนเชพเชœเชฐ เช›เซ‡. เชตเชพเชฐเชธเชฆเชพเชฐเชฎเชพเช‚ เชธเชฎเชพเชจ เชจเชพเชฎ เชธเชพเชฅเซ‡ เช•เซเชทเซ‡เชคเซเชฐเซ‹ เชœเชพเชนเซ‡เชฐ เช•เชฐเซ€เชจเซ‡, เช…เชฎเซ‡ เชฎเซ‚เช‚เชเชตเชฃ เชฐเชœเซ‚ เช•เชฐเซ€เช เช›เซ€เช.

เชšเซ‡เชคเชตเชฃเซ€ N4

V793 เชคเซ‡ เชตเชฟเชšเชฟเชคเซเชฐ เช›เซ‡ เช•เซ‡ 'imageDirection/8' เชธเซเชŸเซ‡เชŸเชฎเซ‡เชจเซเชŸเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เช เชถเชฐเชคเชจเซ‹ เชเช• เชญเชพเช— เช›เซ‡. เช•เชฆเชพเชš, เช† เชจเชฟเชตเซ‡เชฆเชจเชจเซ€ เชคเซเชฒเชจเชพ เช…เชจเซเชฏ เช•เช‚เชˆเช• เชธเชพเชฅเซ‡ เชฅเชตเซ€ เชœเซ‹เชˆเช. libopenrct2 ObservationTower.cpp 38

void vehicle_visual_observation_tower(...., int32_t imageDirection, ....)
{
  if ((imageDirection / 8) && (imageDirection / 8) != 3)
  {
    ....
  }
  ....
}

เชšเชพเชฒเซ‹ เชจเชœเซ€เช•เชฅเซ€ เชจเชœเชฐ เช•เชฐเซ€เช. เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟ imageDirection/8 เช–เซ‹เชŸเชพ เชนเชถเซ‡ เชœเซ‹ เช›เชฌเซ€ เชฆเชฟเชถเชพ -7 เชฅเซ€ 7 เชจเซ€ เชฐเซ‡เชจเซเชœเชฎเชพเช‚ เช›เซ‡. เชฌเซ€เชœเซ‹ เชญเชพเช—: (เช‡เชฎเซ‡เชœ เชกเชพเชฏเชฐเซ‡เช•เซเชถเชจ / 8) != 3 เชšเซ‡เช• เช›เชฌเซ€ เชฆเชฟเชถเชพ เชถเซเชฐเซ‡เชฃเซ€เชจเซ€ เชฌเชนเชพเชฐ เชนเซ‹เชตเชพ เชฌเชฆเชฒ: เช…เชจเซเช•เซเชฐเชฎเซ‡ -31 เชฅเซ€ -24 เช…เชจเซ‡ 24 เชฅเซ€ 31 เชธเซเชงเซ€. เช† เชฐเซ€เชคเซ‡ เชšเซ‹เช•เซเช•เชธ เชถเซเชฐเซ‡เชฃเซ€เชฎเชพเช‚ เชธเชฎเชพเชตเซ‡เชถ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเช‚เช–เซเชฏเชพเช“ เชคเชชเชพเชธเชตเซ€ เชคเซ‡ เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชคเชฆเซเชฆเชจ เชตเชฟเชšเชฟเชคเซเชฐ เชฒเชพเช—เซ‡ เช›เซ‡ เช…เชจเซ‡, เชœเซ‹ เช•เซ‹เชกเชจเชพ เช† เชญเชพเช—เชฎเชพเช‚ เช•เซ‹เชˆ เชญเซ‚เชฒ เชจ เชนเซ‹เชฏ เชคเซ‹ เชชเชฃ, เชนเซเช‚ เช† เชถเชฐเชคเซ‹เชจเซ‡ เชตเชงเซ เชธเซเชชเชทเซเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชซเชฐเซ€เชฅเซ€ เชฒเช–เชตเชพเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเซ€เชถ. เชœเซ‡ เชฒเซ‹เช•เซ‹ เช† เช•เซ‹เชก เชตเชพเช‚เชšเชถเซ‡ เช…เชจเซ‡ เชœเชพเชณเชตเชถเซ‡ เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡ เช†เชจเชพเชฅเซ€ เชœเซ€เชตเชจ เชตเชงเซ เชธเชฐเชณ เชฌเชจเชถเซ‡.

เชšเซ‡เชคเชตเชฃเซ€ N5

V587 เช† เชชเซเชฐเช•เชพเชฐเชจเซ€ เชธเซ‹เช‚เชชเชฃเซ€เช“เชจเซ‹ เชเช• เชตเชฟเชšเชฟเชคเซเชฐ เช•เซเชฐเชฎ: A = B; B = A;. เชฐเซ‡เช–เชพเช“ เชคเชชเชพเชธเซ‹: 1115, 1118. libopenrct2ui MouseInput.cpp 1118

void process_mouse_over(....)
{
  ....
  switch (window->widgets[widgetId].type)
  {
    case WWT_VIEWPORT:
      ebx = 0;
      edi = cursorId;                                 // <=
      // Window event WE_UNKNOWN_0E was called here,
      // but no windows actually implemented a handler and
      // it's not known what it was for
      cursorId = edi;                                 // <=
      if ((ebx & 0xFF) != 0)
      {
        set_cursor(cursorId);
        return;
      }
      break;
      ....
  }
  ....
}

เช† เช•เซ‹เชก เชŸเซเช•เชกเซ‹ เชฎเซ‹เชŸเชพเชญเชพเช—เซ‡ เชกเชฟเช•เชฎเซเชชเชฟเชฒเซ‡เชถเชจ เชฆเซเชตเชพเชฐเชพ เชฎเซ‡เชณเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹. เชชเช›เซ€, เชฌเชพเช•เซ€เชจเซ€ เชŸเชฟเชชเซเชชเชฃเซ€ เชฆเซเชตเชพเชฐเชพ เช…เชญเชฟเชชเซเชฐเชพเชฏ เช†เชชเชคเชพ, เชฌเชฟเชจ-เช•เชพเชฐเซเชฏเช•เชพเชฐเซ€ เช•เซ‹เชกเชจเซ‹ เชญเชพเช— เชฆเซ‚เชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹. เชœเซ‹ เช•เซ‡ เชนเชœเซ เชเช•-เชฌเซ‡ เช“เชชเชฐเซ‡เชถเชจ เชฌเชพเช•เซ€ เช›เซ‡ cursorId, เชœเซ‡เชจเซ‹ เชชเชฃ เชฌเชนเซ เช…เชฐเซเชฅ เชจเชฅเซ€.

เชšเซ‡เชคเชตเชฃเซ€ N6

V1004 [CWE-476] 'เชชเซเชฒเซ‡เชฏเชฐ' เชชเซ‹เช‡เชจเซเชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช…เชธเซเชฐเช•เซเชทเชฟเชค เชฐเซ€เชคเซ‡ nullptr เชธเชพเชฎเซ‡ เชšเช•เชพเชธเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เชชเช›เซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹. เชฐเซ‡เช–เชพเช“ เชคเชชเชพเชธเซ‹: 2085, 2094. libopenrct2 Network.cpp 2094

void Network::ProcessPlayerList()
{
  ....
  auto* player = GetPlayerByID(pendingPlayer.Id);
  if (player == nullptr)
  {
    // Add new player.
    player = AddPlayer("", "");
    if (player)                                          // <=
    {
      *player = pendingPlayer;
       if (player->Flags & NETWORK_PLAYER_FLAG_ISSERVER)
       {
         _serverConnection->Player = player;
       }
    }
    newPlayers.push_back(player->Id);                    // <=
  }
  ....
}

เช† เช•เซ‹เชก เชธเซเชงเชพเชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช•เชฆเชฎ เชธเชฐเชณ เช›เซ‡; เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เชคเซเชฐเซ€เชœเซ€ เชตเช–เชค เชคเชชเชพเชธเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เช–เซ‡เชฒเชพเชกเซ€ เชจเชฒ เชชเซ‹เช‡เชจเซเชŸเชฐ เชชเชฐ, เช…เชฅเชตเชพ เชคเซ‡เชจเซ‡ เชถเชฐเชคเซ€ เชจเชฟเชตเซ‡เชฆเชจเชจเชพ เชฎเซเช–เซเชฏ เชญเชพเช—เชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ‹. เชนเซเช‚ เชฌเซ€เชœเซ‹ เชตเชฟเช•เชฒเซเชช เชธเซ‚เชšเชตเซ€เชถ:

void Network::ProcessPlayerList()
{
  ....
  auto* player = GetPlayerByID(pendingPlayer.Id);
  if (player == nullptr)
  {
    // Add new player.
    player = AddPlayer("", "");
    if (player)
    {
      *player = pendingPlayer;
      if (player->Flags & NETWORK_PLAYER_FLAG_ISSERVER)
      {
        _serverConnection->Player = player;
      }
      newPlayers.push_back(player->Id);
    }
  }
  ....
}

เชšเซ‡เชคเชตเชฃเซ€ N7

V547 [CWE-570] เช…เชญเชฟเชตเซเชฏเช•เซเชคเชฟ 'name == nullptr' เชนเช‚เชฎเซ‡เชถเชพ เช–เซ‹เชŸเซ€ เชนเซ‹เชฏ เช›เซ‡. libopenrct2 ServerList.cpp 102

std::optional<ServerListEntry> ServerListEntry::FromJson(...)
{
  auto name = json_object_get(server, "name");
  .....
  if (name == nullptr || version == nullptr)
  {
    ....
  }
  else
  {
    ....
    entry.name = (name == nullptr ? "" : json_string_value(name));
    ....
  }
  ....
}

เชคเชฎเซ‡ เช•เซ‹เชกเชจเซ€ เชนเชพเชฐเซเชก-เชŸเซ-เชฐเซ€เชก เชฒเชพเช‡เชจเชฎเชพเช‚เชฅเซ€ เชเช• เชœ เชตเชพเชฐเชฎเชพเช‚ เช›เซ‚เชŸเช•เชพเชฐเซ‹ เชฎเซ‡เชณเชตเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ€ เชคเชชเชพเชธ เช•เชฐเซ€เชจเซ‡ เชธเชฎเชธเซเชฏเชพ เชนเชฒ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ nullptr. เชนเซเช‚ เชจเซ€เชšเซ‡ เชชเซเชฐเชฎเชพเชฃเซ‡ เช•เซ‹เชก เชฌเชฆเชฒเชตเชพเชจเซเช‚ เชธเซ‚เชšเชจ เช•เชฐเซเช‚ เช›เซเช‚:

std::optional<ServerListEntry> ServerListEntry::FromJson(...)
{
  auto name = json_object_get(server, "name");
  .....
  if (name == nullptr || version == nullptr)
  {
    name = ""
    ....
  }
  else
  {
    ....
    entry.name = json_string_value(name);
    ....
  }
  ....
}

เชšเซ‡เชคเชตเชฃเซ€ N8

V1048 [CWE-1164] 'ColumnHeaderPressedCurrentState' เชšเชฒเชจเซ‡ เชธเชฎเชพเชจ เชฎเซ‚เชฒเซเชฏ เช…เชธเชพเช‡เชจ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚. libopenrct2ui CustomListView.cpp 510

void CustomListView::MouseUp(....)
{
  ....
  if (!ColumnHeaderPressedCurrentState)
  {
    ColumnHeaderPressed = std::nullopt;
    ColumnHeaderPressedCurrentState = false;
    Invalidate();
  }
}

เช•เซ‹เชก เชคเชฆเซเชฆเชจ เชตเชฟเชšเชฟเชคเซเชฐ เชฒเชพเช—เซ‡ เช›เซ‡. เชฎเชจเซ‡ เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เชถเชฐเชคเชฎเชพเช‚ เช…เชฅเชตเชพ เชตเซ‡เชฐเซ€เชเชฌเชฒเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชธเซ‹เช‚เชชเชคเซ€ เชตเช–เชคเซ‡ เชŸเชพเช‡เชช เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€ เช•เซ‰เชฒเชฎเชนเซ‡เชกเชฐ เชชเซเชฐเซ‡เชธเซเชก เช•เชฐเช‚เชŸ เชธเซเชŸเซ‡เชŸ เช…เชฐเซเชฅ เช–เซ‹เชŸเซเช‚.

เชจเชฟเชทเซเช•เชฐเซเชท

เชœเซ‡เชฎ เช†เชชเชฃเซ‡ เชœเซ‹เชˆ เชถเช•เซ€เช เช›เซ€เช, PVS-Studio เชธเซเชŸเซ‡เชŸเชฟเช• เชตเชฟเชถเซเชฒเซ‡เชทเช•เชจเซ‡ เชคเชฎเชพเชฐเชพ TeamCity เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเซเช‚ เชเช•เชฆเชฎ เชธเชฐเชณ เช›เซ‡. เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชซเช•เซเชค เชเช• เชจเชพเชจเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒ เชฒเช–เชตเชพ เชฎเชพเชŸเซ‡ เชคเซ‡ เชชเซ‚เชฐเชคเซเช‚ เช›เซ‡. เช•เซ‹เชก เชคเชชเชพเชธเชตเชพเชฅเซ€ เชคเชฎเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒเซ€ เชชเช›เซ€ เชคเชฐเชค เชœ เชธเชฎเชธเซเชฏเชพเช“ เช“เชณเช–เซ€ เชถเช•เชถเซ‹, เชœเซ‡ เชœเชŸเชฟเชฒเชคเชพ เช…เชจเซ‡ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซ€ เช•เชฟเช‚เชฎเชค เชนเชœเซ เชชเชฃ เช“เช›เซ€ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡เชฎเชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเชถเซ‡.

เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ: เชŸเซ€เชฎเชธเชฟเชŸเซ€. เช“เชชเชจ เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ
เชœเซ‹ เชคเชฎเซ‡ เช† เชฒเซ‡เช– เช…เช‚เช—เซเชฐเซ‡เชœเซ€ เชฌเซ‹เชฒเชคเชพ เชชเซเชฐเซ‡เช•เซเชทเช•เซ‹ เชธเชพเชฅเซ‡ เชถเซ‡เชฐ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเชพ เชนเซ‹, เชคเซ‹ เช•เซƒเชชเชพ เช•เชฐเซ€เชจเซ‡ เช…เชจเซเชตเชพเชฆ เชฒเชฟเช‚เช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹: Vladislav Stolyarov. เชชเซ€เชตเซ€เชเชธ-เชธเซเชŸเซเชกเชฟเชฏเซ‹ เช…เชจเซ‡ เชธเชคเชค เชเช•เซ€เช•เชฐเชฃ: เชŸเซ€เชฎเชธเชฟเชŸเซ€. เช“เชชเชจ เชฐเซ‹เชฒเชฐเช•เซ‹เชธเซเชŸเชฐ เชŸเชพเชฏเช•เซ‚เชจ 2 เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹