Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 11790] ファイルの概要

このコミットは、Go言語の標準ライブラリである image/png パッケージ内のテストファイル reader_test.go を修正し、ビルドエラーを解消することを目的としています。具体的には、zlib ライブラリが返すエラーメッセージの文字列が変更されたことに対応し、テストが期待するエラーメッセージを更新しています。これにより、テストが正しくパスし、ビルドが成功するようになります。

コミット

  • コミットハッシュ: 21a3aceb4a960cffdd0f1b85f2c3718635526108
  • 作者: Robert Griesemer gri@golang.org
  • コミット日時: 2012年2月10日 金曜日 17:26:40 -0800

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/21a3aceb4a960cffdd0f1b85f2c3718635526108

元コミット内容

fix build: update image/png test

R=nigeltao
CC=golang-dev
https://golang.org/cl/5649062

変更の背景

このコミットの背景には、Go言語の image/png パッケージが依存している zlib ライブラリ、またはそのGo言語バインディングにおける内部的な変更があります。zlib はデータ圧縮・伸長に使われるライブラリであり、PNG画像フォーマットの内部でも画像データの圧縮に利用されています。

以前のバージョンでは、zlib のチェックサムエラーが発生した場合に "zlib checksum error" というエラーメッセージが返されていました。しかし、何らかの変更(おそらく zlib ライブラリ自体のアップデート、またはGo言語の compress/zlib パッケージの実装変更)により、同じエラー条件で返されるメッセージが "zlib: invalid checksum" に変更されました。

image/png パッケージのテストスイートには、意図的に不正なPNGファイルを読み込ませて、期待されるエラーが返されることを確認するテストが含まれています。reader_test.go 内の readerErrors 変数は、特定の不正なファイル名とそのファイルから期待されるエラーメッセージのペアを定義しています。invalid-zlib.png というファイルは、zlib のチェックサムが不正なPNGファイルであり、このファイルに対するテストは "zlib checksum error" が返されることを期待していました。

エラーメッセージの変更により、既存のテストは新しいエラーメッセージと一致しなくなり、テストが失敗するようになりました。これは、GoのCI/CDパイプラインにおいてビルドエラーとして報告され、開発者がこの問題を修正する必要が生じました。このコミットは、このビルドエラーを解消し、テストスイートが最新の zlib の挙動に適合するように更新するために行われました。

前提知識の解説

PNG (Portable Network Graphics)

PNGは、可逆圧縮を特徴とするラスターグラフィックスファイルフォーマットです。ウェブ上で広く利用されており、透明度(アルファチャンネル)をサポートします。PNGファイルは、画像データを圧縮するために DEFLATE 圧縮アルゴリズムを使用しており、このアルゴリズムは zlib ライブラリによって実装されています。

zlib

zlib は、データ圧縮のためのオープンソースのソフトウェアライブラリです。RFC 1950 (zlib format)、RFC 1951 (DEFLATE compressed data format)、RFC 1952 (gzip format) で定義された圧縮アルゴリズムを実装しています。PNGファイル内の画像データは zlib 形式で圧縮されており、PNGデコーダは zlib を使用してそのデータを伸長します。

チェックサム (Checksum)

チェックサムは、データの整合性を検証するために使用される小さなデータブロックです。データが転送または保存される際に、そのデータからチェックサムが計算され、データと共に送信または保存されます。受信側または読み出し側で再度チェックサムを計算し、元のチェックサムと比較することで、データが破損していないか、改ざんされていないかを確認できます。zlib ストリームには、データの整合性を保証するためのチェックサムが含まれています。

Go言語の image/png パッケージ

Go言語の標準ライブラリには、image パッケージとそのサブパッケージとして image/png が含まれています。image/png パッケージは、PNG形式の画像をエンコード(書き込み)およびデコード(読み込み)するための機能を提供します。このパッケージは、内部でGo言語の compress/zlib パッケージを利用してPNGデータの圧縮・伸長を行っています。

Go言語のテスト

Go言語では、テストは非常に重要な開発プラクティスです。テストファイルは通常、テスト対象のソースファイルと同じディレクトリに _test.go というサフィックスを付けて配置されます。テスト関数は Test で始まり、testing パッケージを使用します。このコミットで変更された reader_test.go は、image/png パッケージのPNGデコーダの挙動を検証するためのテストファイルです。特に、不正な入力に対するエラーハンドリングが正しく行われるかを検証しています。

技術的詳細

このコミットの技術的な核心は、Go言語の compress/zlib パッケージが返すエラーメッセージの変更に image/png パッケージのテストが追従する必要があった点です。

src/pkg/image/png/reader_test.go ファイルには、readerErrors という名前の構造体スライスが定義されています。このスライスは、テストケースとして、特定の不正なPNGファイル名と、そのファイルをデコードしようとした際に期待されるエラーメッセージのペアを保持しています。

var readerErrors = []struct {
	file string
	err  string
}{
	{"invalid-zlib.png", "zlib checksum error"}, // 変更前
	// ...
}

invalid-zlib.png は、意図的に zlib のチェックサムが不正になるように作成されたテスト用のPNGファイルです。このテストの目的は、image/png デコーダがこのような不正な zlib データに遭遇した際に、適切なエラー(この場合はチェックサムエラー)を返すことを確認することです。

以前の zlib の実装では、チェックサムエラーが発生した場合に "zlib checksum error" という文字列がエラーとして返されていました。しかし、zlib ライブラリまたはGoの compress/zlib パッケージの内部実装が更新され、同じエラー条件で返されるエラーメッセージが "zlib: invalid checksum" に変更されました。

この変更により、reader_test.go 内の readerErrors スライスに定義されていた期待値 "zlib checksum error" が、実際に image/png デコーダが返す "zlib: invalid checksum" と一致しなくなり、テストが失敗するようになりました。

このコミットは、この不一致を解消するために、readerErrors スライス内の invalid-zlib.png に対応する期待エラーメッセージを、新しいメッセージである "zlib: invalid checksum" に更新しています。これにより、テストは再びパスするようになり、ビルドが正常に完了するようになります。

この種の変更は、ライブラリの依存関係が更新された際に、そのライブラリの挙動(特にエラーメッセージのような外部から観測可能な挙動)が変わった場合に発生しがちです。テストはこのような変更を検出し、コードの整合性を保つ上で重要な役割を果たします。

コアとなるコードの変更箇所

変更は src/pkg/image/png/reader_test.go ファイルの1箇所のみです。

--- a/src/pkg/image/png/reader_test.go
+++ b/src/pkg/image/png/reader_test.go
@@ -246,7 +246,7 @@ var readerErrors = []struct {
 	file string
 	err  string
 }{
-	{"invalid-zlib.png", "zlib checksum error"},
+	{"invalid-zlib.png", "zlib: invalid checksum"},
 	{"invalid-crc32.png", "invalid checksum"},
 	{"invalid-noend.png", "unexpected EOF"},
 	{"invalid-trunc.png", "unexpected EOF"},

具体的には、readerErrors スライス内の invalid-zlib.png に対応する err フィールドの値が、"zlib checksum error" から "zlib: invalid checksum" に変更されています。

コアとなるコードの解説

変更された行は、Go言語のテストコードの一部であり、image/png パッケージのデコーダが特定の不正なPNGファイルを処理した際に、期待されるエラーメッセージを定義しています。

readerErrors は、struct のスライスであり、各要素は file (テストに使用する不正なPNGファイルのパス) と err (そのファイルから期待されるエラーメッセージの文字列) の2つのフィールドを持っています。

元のコード:

{"invalid-zlib.png", "zlib checksum error"},

この行は、「invalid-zlib.png というファイルが与えられた場合、デコーダは "zlib checksum error" というエラー文字列を返すことを期待する」というテスト条件を定義していました。

変更後のコード:

{"invalid-zlib.png", "zlib: invalid checksum"},

この行は、上記と同じテストファイルに対して、「デコーダは "zlib: invalid checksum" というエラー文字列を返すことを期待する」という新しいテスト条件を定義しています。

この変更は、image/png パッケージが内部的に使用している zlib ライブラリ(またはGoの compress/zlib パッケージ)が、チェックサムエラー発生時に返すエラーメッセージのフォーマットを変更したことに対応するものです。テストは、実際のコードの挙動に合わせて更新される必要があり、このコミットはその調整を行っています。これにより、テストが最新のライブラリの挙動と一致し、ビルドが正常に完了するようになります。

関連リンク

  • Gerrit Change-ID: https://golang.org/cl/5649062 これは、Goプロジェクトがコードレビューに利用しているGerritシステムにおける変更セットのIDです。Goのコミットメッセージには、関連するGerritの変更へのリンクがよく含まれています。このリンクを辿ることで、このコミットに至るまでのコードレビューの議論や、関連する他の変更を確認することができます。

参考にした情報源リンク

特になし。この解説は、提供されたコミット情報と一般的なプログラミングおよびGo言語の知識に基づいて作成されました。