Documentation index

値を初期化する(Value initialization)

プログラミング言語によっては変数の値を自動的に初期化しないので、明示的に初期化して、実行時にランダムなメモリが割り当てられるのを避けなければなりません。

具体例として corebot のソースコード を見てみましょう。

diffoscope output of the two different builds of the same coreboot
image

見ての通り、全てのフィールドを初期化していない構造体へデータを書き込んでいます。 例えば次のように修正する方法があります。

--- a/util/bimgtool/bimgtool.c
+++ b/util/bimgtool/bimgtool.c
@@ -160,7 +160,7 @@ static const struct crc_t crc_type = {
 static int write_binary(FILE *out, FILE *in, struct bimg_header *hdr)
 {
        static uint8_t file_buf[MAX_RECORD_BYTES];
-       struct bimg_data_header data_hdr;
+       struct bimg_data_header data_hdr = { 0 };
        size_t n_written;
 
        data_hdr.dest_addr = hdr->entry_addr;

Valgrind のような検査ツールを使えば、こういう問題を検出するのに役立ちます。


Documentation index

Follow us on Twitter @ReproBuilds, Mastodon @reproducible_builds@fosstodon.org & Reddit and please consider making a donation. • Content licensed under CC BY-SA 4.0, style licensed under MIT. Templates and styles based on the Tor Styleguide. Logos and trademarks belong to their respective owners. • Patches welcome via our Git repository (instructions) or via our mailing list. • Full contact info