PVS-Studio 7.04

Gambar 4

Musim panas bukan hanya musim liburan, tetapi juga saat kerja yang bermanfaat. Hari-hari cerah begitu menginspirasi bahwa ada energi yang cukup baik untuk jalan-jalan lambat dan melakukan kode besar. Rilis musim panas kedua PVS-Studio 7.04 ternyata cukup besar, jadi kami sarankan untuk perhatian Anda pada siaran pers ini, di mana kami akan memberi tahu Anda tentang semuanya.

PVS-Studio adalah alat yang dirancang untuk mendeteksi kesalahan dan kerentanan potensial dalam kode sumber program, ditulis dalam C, C ++, C #, Java. Ia bekerja di lingkungan Windows, Linux, dan macOS.

Kumpulan kesalahan luas yang ditemukan dalam kode selama pemeriksaan berbagai proyek sumber terbuka dengan jelas menunjukkan kemampuan penganalisa.

Berikut ini gambaran umum fitur-fitur baru yang hadir dengan rilis PVS-Studio 7.04.

Cari File dengan Lisensi Copyleft


Saat mengerjakan tugas, pengembang mengambil kode dari berbagai tempat. Sumber kode Copy-Paste yang populer adalah situs web Stackoverflow dan yang serupa. Ada kasus ketika pengembang mengambil kode dari proyek open source dan tidak memeriksa persyaratan lisensi. Dengan demikian, proyek sumber tertutup dapat secara tidak sengaja mendapatkan beberapa file dari proyek sumber terbuka dengan lisensi Copyleft, yang mengharuskan seluruh kode proyek menjadi open source. Di perusahaan dengan jumlah karyawan yang besar, sulit untuk melacak hal ini, sedangkan tindakan seperti itu dapat menyebabkan risiko dan masalah yang merugikan. Jadi, PVS-Studio sekarang memiliki diagnostik, yang akan membantu menemukan file tersebut. Ini berhubungan dengan semua bahasa yang didukung (C, C ++, C #, Java).

Nomor diagnostik untuk berbagai bahasa:


Mari kita melihat lebih dekat pada diagnostik ini dan mencari tahu untuk apa mereka dibuat. Contoh komentar yang dianalisis akan mengeluarkan peringatan kepada:

/* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ 

Untuk proyek tertutup


Jika Anda menambahkan file dengan lisensi seperti itu (dalam hal ini, GPL3) dalam proyek tertutup, Anda harus membuka kode sisanya karena spesifikasi lisensi ini.

Jenis lisensi semacam itu disebut " viral " karena kemampuan mereka untuk memperluas ke seluruh file proyek. Masalahnya adalah bahwa penggunaan setidaknya satu file dengan lisensi seperti itu dalam proyek tertutup secara otomatis membuat seluruh kode sumber terbuka dan berkewajiban untuk mendistribusikannya bersama dengan file biner.

Diagnostik sedang mencari lisensi "virus" berikut:

  • AGPL-3.0
  • GPL-2.0
  • GPL-3.0
  • LGPL-3.0

Berikut adalah opsi apa yang dapat Anda lakukan jika Anda mendeteksi penggunaan file dengan lisensi copyleft dalam proyek tertutup:

  1. Jangan menggunakan kode (pustaka) seperti itu di proyek Anda;
  2. Ganti perpustakaan yang digunakan;
  3. Jadikan proyek itu sumber terbuka.

Untuk proyek terbuka


Kami memahami bahwa diagnostik ini tidak sesuai untuk proyek sumber terbuka. Tim PVS-Studio berkontribusi untuk pengembangan proyek sumber terbuka, membantu memperbaiki kesalahan di dalamnya dan memberikan opsi lisensi gratis . Namun, produk kami adalah solusi B2B dan karenanya diagnostik ini diaktifkan secara default.

Jika kode Anda didistribusikan di bawah salah satu lisensi copyleft di atas, Anda dapat menonaktifkan diagnostik ini dengan cara berikut (untuk C \ C ++ itu adalah V1042):

  • Jika Anda menggunakan plugin PVS-Studio untuk Visual Studio, Anda dapat menonaktifkan diagnostik ini dengan masuk ke Pilihan> PVS-Studio> Kesalahan yang Dapat Dideteksi> 1. Analisis Umum> V1042. Setelah ini, itu tidak akan ditampilkan dalam laporan analisa. Kelemahan dari metode ini adalah bahwa kesalahan masih akan ditulis dalam log analisys sambil menyimpannya (atau jika analisis dijalankan dari baris perintah). Oleh karena itu, ketika Anda membuka log seperti itu di komputer lain atau mengonversi hasil analisis ke format lain, pesan yang dinonaktifkan dengan cara ini dapat muncul kembali.
  • Jika Anda tidak menggunakan plugin dan ingin memblokir aturan untuk seluruh tim, atau menghapusnya dari laporan analisys, Anda dapat menambahkan komentar "// - V :: 1042" ke file konfigurasi (.pvsconfig) atau ke salah satu file header global. Untuk pengembang, yang menggunakan Visual C ++, opsi yang bagus adalah menambahkan komentar ini di "stdafx.h". file. Komentar ini memberi tahu penganalisa untuk menonaktifkan diagnostik V1042. Dokumentasi memberikan informasi lebih rinci tentang menonaktifkan diagnostik menggunakan komentar.
  • Jika Anda menggunakan utilitas Plog Converter untuk mengonversi laporan, Anda dapat menonaktifkan diagnostik menggunakan tombol "-d".

Untuk C # V3144 adalah angka yang sesuai dengan diagnostik, V6071 - untuk Java.

Memperluas Daftar Lisensi Berbahaya


Jika Anda tahu jenis-jenis lisensi "virus" lain yang tidak terdeteksi oleh PVS-Studio pada saat ini, Anda dapat memberi tahu kami melalui formulir tanggapan kami. Kami akan menambahkannya di rilis berikutnya.

Diagnostik baru


C, C ++ (Umum)


  • V1040 . Kemungkinan salah ketik dalam pengejaan nama makro yang telah ditentukan.
  • V1041 . Anggota kelas diinisialisasi dengan referensi menggantung.
  • V1042 . File ini ditandai dengan lisensi copyleft, yang mengharuskan Anda untuk membuka kode sumber yang diturunkan.
  • V1043 . Variabel objek global dideklarasikan di header. Beberapa salinannya akan dibuat di semua unit terjemahan yang menyertakan file header ini.

Saya ingin memberikan perhatian khusus pada diagnostik dengan nomor V1040 . Kami berhasil menemukan kesalahan menarik di perpustakaan proyek CMake yang terkenal bahkan pada tahap beta:

V1040 Kemungkinan salah ketik dalam ejaan nama makro yang telah ditentukan sebelumnya. Makro '__MINGW32_' mirip dengan '__MINGW32__'. winapi.h 4112

 /* from winternl.h */ #if !defined(__UNICODE_STRING_DEFINED) && defined(__MINGW32_) #define __UNICODE_STRING_DEFINED #endif 

Ada kesalahan ketik yang dibuat atas nama __MINGW32_ . Pada akhirnya, satu karakter garis bawah hilang. Jika Anda mencari kode dengan nama ini, Anda dapat melihat bahwa versi dengan dua karakter garis bawah di kedua sisi digunakan dalam proyek:

Gambar 8

Anda dapat memeriksa semua kesalahan yang ditemukan dalam proyek CMake di artikel: " CMake: Kasus ketika Kualitas Proyek Tidak Dapat Diampuni ".

C, C ++ (MISRA)


  • V2551 . Misra. Variabel harus dideklarasikan dalam lingkup yang meminimalkan visibilitasnya.
  • V2552 . Misra. Ekspresi dengan tipe dasar enum harus memiliki nilai yang sesuai dengan enumerator enumerasi.
  • V2553 . Misra. Operator minus unary tidak boleh diterapkan pada ekspresi dari tipe yang tidak ditandatangani.
  • V2554 . Misra. Ekspresi yang mengandung kenaikan (++) atau penurunan (-) tidak boleh memiliki efek samping lain.
  • V2555 . Misra. Ekspresi pemindahan yang salah.
  • V2556 . Misra. Penggunaan pointer ke FILE saat aliran terkait telah ditutup.
  • V2557 . Misra. Operand sizeof () operator seharusnya tidak memiliki efek samping lain.

C #


  • V3140 Accessor properti menggunakan bidang dukungan yang berbeda.
  • V3141 . Ekspresi di bawah 'throw' adalah null potensial, yang dapat menyebabkan NullReferenceException.
  • V3142 . Kode yang tidak dapat dijangkau terdeteksi. Mungkin saja ada kesalahan.
  • V3143 . Parameter 'nilai' ditulis ulang di dalam setter properti, dan tidak digunakan setelah itu.
  • V3144 . File ini ditandai dengan lisensi copyleft, yang mengharuskan Anda untuk membuka kode sumber yang diturunkan.
  • V3145. Dereferensi tidak aman dari target WeakReference. Objek tersebut dapat berupa sampah yang dikumpulkan sebelum properti 'Target' diakses.

Sedangkan untuk penganalisa C #, kami menambahkan evaluasi nilai baca \ tulis dari pengambil properti dan setter, serta dari metode async.

Kami saat ini sedang mengerjakan peningkatan nilai-nilai dan sifat-sifat bidang pemantauan objek saat mereka diteruskan ke metode, serta memantau konten turples. Perbaikan ini akan tersedia dalam rilis analisa berikutnya.

Jawa


  • V6068 Penggunaan BigDecimal yang mencurigakan.
  • V6069 Penugasan shift kanan yang tidak ditandatangani dari nilai 'byte' / 'pendek' negatif.
  • V6070 Sinkronisasi tidak aman pada suatu objek.
  • V6071 File ini ditandai dengan lisensi copyleft, yang mengharuskan Anda untuk membuka kode sumber yang diturunkan.

SonarQube 7.9 LTS


Rilis yang ditunggu-tunggu


Sudah hampir 2 tahun sejak rilis terakhir versi LTS SonarQube 6.7. Versi baru ditunggu-tunggu dimulai dengan SQ 7.x dan ketika LTS dirilis, pengguna mulai aktif beralih ke sana, yang menyebabkan berbagai masalah. Segera SQ 7.9.1 LTS keluar dengan perbaikan kecil dan pengembang plugin pihak ketiga juga membuat tambalan.

Untungnya, plugin PVS-Studio hanya memiliki satu masalah, terkait dengan beralih ke Java 11, yang dengan cepat diperbaiki dan klien kami segera beralih ke versi yang bisa diterapkan.

Kami juga menjaga kompatibilitas dengan versi SonarQube lama dan daftar versi yang didukung sekarang terlihat sebagai berikut: SonarQube 6.7 LTS dan yang lebih baru

Lebih Banyak Plugin Bahasa yang Didukung


Plugin PVS-Studio hanya mengubah hasil analisis ke dalam format database SonarQube. Dengan kata lain, itu hanya mengunduh hasil analisis PVS-Studuio di SQ. Untuk menjalankan utilitas SonarScanner sepenuhnya, Anda perlu menginstal plugin untuk bahasa pemrograman. Kami tidak mulai mengembangkan apa yang sudah ada, jadi kami hanya menambahkan dukungan dari plugin populer yang sudah ada. Dalam versi ini, kami telah menambahkan kompatibilitas dengan plugin Sonar C Community dan SonarCFamily.

Seluruh daftar plugin bahasa yang didukung terlihat seperti ini:


Untuk mengunggah hasil analisis PVS-Studio, cukup memasang setidaknya satu plugin dari daftar ini. Sebagian besar pengguna hanya menginstal Sonar C ++ Community, SonarC # atau SonarJava. Plugin sisanya mungkin diperlukan untuk proyek yang lebih spesifik.

Saat memilih plugin, pertimbangkan fakta bahwa plugin Komunitas tidak kompatibel dengan SonarCFamily. Tetapi jika Anda hanya menggunakan Edisi Komunitas SonarQube, tidak akan ada masalah seperti itu.

Halaman Pengaturan Baru


Sebelumnya, orang hanya dapat mengkonfigurasi analisa hanya melalui file konfigurasi sonar-project.properties . Tidak ada keluhan tentang metode ini. Ini sangat nyaman dan digunakan 99% dari waktu, tetapi kami telah membuat halaman pengaturan tambahan di Administrasi> Configuration> PVS-Studio di sisi server SonarQube, karena dapat digunakan untuk beberapa skenario.

Halaman pengaturan terlihat seperti ini:

Gambar 10

Saat mengatur konfigurasi dengan dua cara, yang ditentukan dalam file sonar-project.properties adalah prioritas tertinggi.

Plugin untuk IntelliJ IDEA


Rilis versi IntelliJ IDEA dan PVS-Studio baru berbeda tanggal. Baru-baru ini kami mengalami situasi ketika IntelliJ IDEA 192. * dirilis tetapi plugin PVS-Studio tidak dapat diinstal di dalamnya. Dalam rilis ini, kami telah menambahkan dukungan untuk versi IntelliJ IDEA terbaru, serta penyempurnaan untuk menghindari masalah serupa di masa mendatang.

Pengaya untuk jenkins


Plugin PVS-Studio

Plugin PVS-Studio dimaksudkan untuk menerbitkan laporan hasil analisa PVS-Studio dalam sistem integrasi berkelanjutan Jenkins dalam format HTML. Sebelumnya, plugin ini hanya tersedia untuk pengguna Windows karena itu disebut konverter laporan secara otomatis dan melakukannya hanya untuk Windows. Dalam PVS-Studio 7.04, plugin hanya mendukung laporan-HTML yang harus dibuat dalam satu langkah, tetapi langkah ini membuat lintas platform plugin.

Peringatan Plugin NG

Untuk Jenkins, ada plugin yang berguna. Plugin Next Generation untuk melihat hasil analisis dari berbagai alat. Kami baru saja menambahkan dukungan PVS-Studio di dalamnya. Kemampuan untuk memuat hasil analisis PVS-Studio menggunakan plugin ini menjadi tersedia di 6.0.0 , rilisnya secara tidak sengaja bertepatan dengan rilis PVS-Studio 7.04:

Gambar 1

Perbaikan lainnya


PVS-Studio_Cmd

PVS-Studio_Cmd.exe sekarang memiliki mode operasional khusus - kredensial. Mode ini memungkinkan Anda untuk membuat file pengaturan dan memasukkan informasi lisensi tanpa menggunakan antarmuka GUI (misalnya, plugin Visual Studio atau utilitas UI Pemantau Kompiler C dan C ++). Mode ini sangat relevan ketika digunakan pada server build (di mana utilitas GUI mungkin tidak ada), dalam wadah, saat berintegrasi dengan solusi cloud.

Analisis Proyek Mesin Unreal

Kami menambahkan opsi AutoloadUnrealEngineLog di plugin PVS-Studio untuk Visual Studio yang memungkinkan Anda untuk secara otomatis mengunggah laporan analisa di jendela output PVS-Studio setelah analisis. Tanpa opsi ini, log harus diunggah secara manual melalui menu plugin.

Juga bagian dokumentasi " Analisis proyek-proyek Mesin Tidak Nyata " menjelaskan perubahan skrip pembuatan standar yang memungkinkan Anda membuat dan menganalisis dalam satu tindakan. Tanpa modifikasi skrip (saat menambahkan flag -StaticAnalyzer = PVSStudio untuk meluncurkan argumen) proyek hanya dianalisis, bukan dibangun.

CLMonitor

Untuk utilitas CLMonitor, kami telah menambahkan kemampuan untuk memantau proses kompiler untuk proses tertentu. Ini akan memungkinkan Anda memantau proses kompiler, hanya terkait dengan proyek tertentu, bahkan selama pembangunan paralel beberapa proyek. Untuk bekerja dalam mode ini, flag --parentProcessID% PID% (monitor CLMonitor memproses yang terkait dengan anak yang ditentukan) dan --attach (monitor CLMonitor memproses yang terkait dengan konsol saat ini) digunakan.

pvs-studio-analyzer

Bendera --ignore-ccache ditambahkan dalam utilitas pvs-studio-analyzer , yang dimaksudkan untuk memeriksa proyek-proyek di Linux dan macOS:

 pvs-studio-analyzer analyze ... --ignore-ccache ... 

Jika utilitas ccache digunakan dalam membangun proyek, PVS-Studio beroperasi dalam mode analisis tambahan. Untuk memeriksa seluruh proyek tanpa mengatur ulang cache utilitas ccache , pilih flag ini.

Tautan tambahan


Berlangganan untuk mendapat informasi tentang publikasi baru kami:

  1. Twitter: @Code_Analysis
  2. Youtube: PVS-Studio
  3. Facebook: @StaticCodeAnalyzer
  4. Instagram: @pvsstudio
  5. Telegram: PVS-Studio
  6. RSS: viva64-blog-en

PVS-Studio:

  1. Halaman produk PVS-Studio
  2. Unduh
  3. Dokumentasi
  4. Klien

Source: https://habr.com/ru/post/id466195/


All Articles