質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2085閲覧

テストの作成

majiponi

総合スコア1720

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/09/06 08:01

編集2016/09/06 11:45

今、libHaruというオープンソースのライブラリに、bmpファイルの読み込みを実装しています。自分で用意したテストデータは問題なく取り扱えるのですが、「不適切な連長圧縮がされたファイル」(※)を作成するソフトが見当たらず、テストが十分にできていません。このような特殊なデータを作成するソフトをご存じの方、またはこの手のデバッグのノウハウをお持ちの方、ご鞭撻よろしくお願いいたします。

参考URL: http://www.ruche-home.net/program/bmp/rle

※参考資料中の「エンコーダは、このような~の扱い方をするべきではない。」というような、不適切な処理がされているファイルのこと。GIMP、Bmp To Bmp、2種類のソフトで試したものの、どちらも優秀なソフトで不適切な処理をしなかった。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

このような特殊なデータを作成するソフト

特殊データを生成するツールを作る(既存ツールを改造するなど)のが近道と思いました。

またはこの手のデバッグのノウハウをお持ちの方、ご鞭撻よろしくお願いいたします。

ファズ・テスト(fuzz testing)の一種と言えます。最も単純(あまり効率が良くない)なのは、正しいデータをランダムに書き換えてテストケースを作ることです。しかし質問中にある確認項目を見る限り、意図的にそのようなデータを作り出さないと有効な試験とならない気がします。


他回答へのコメント:どうしてもソフトなければ、その機能を削除することも考えてます(対応する必要性自体なくなるから)

上記表現について、個人的に少し気になったのでコメントしておきます。

非圧縮BMPにおける行データは4バイトの整数倍のサイズに揃えなければならなかったが、RLEにおいてはそのような制約はなく、エンコーダは有効なピクセル数分だけ圧縮すればよい。

これは「RLEでは無視される/すべきバイトは存在しない」と言っているだけですから、デコーダ側では何も気にしなくて良いはずです。仮に、エンコーダがこの条件に従わなかった場合、単にデコード画像が斜めに崩れるだけです。

エンコーダは、このようなEOLの扱い方をするべきではない。
エンコーダは、このようなEOBの扱い方をするべきではない。

データの早期打ち切り(データが足りない)ケースは比較的対応が簡単ですし、保護機構の一種ですから実装だけはしておいたほうが良いと思います。

意図する場合を除き、エンコーダは位置移動情報を利用するべきではない。

(これは少々厄介かもしれません。そもそも"位置移動情報"を生成するRLE BMPエンコーダが存在するのかも含め、私には知識がありません。)

投稿2016/09/09 12:43

yohhoy

総合スコア6191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

majiponi

2016/09/09 13:33

補足すると、そもそもRLEを作るソフト自体が少ない中、さらに特殊な事態にまで完璧に対応する必要に、疑問が出てきたのです。ライブラリは、多機能であるだけではなく、コンパクトで、高速である必要もありますから。特殊なエンコーダーがそもそも出回っていなければ、実装せず、万一の場合には「対応していない」とエラーを出すだけでもいいような気がするのです。なので、エンコーダーが存在するか、という点を質問しました。
yohhoy

2016/09/09 13:52

完璧に対応する必要はありませんが、少なくとも防衛的プログラミングは必要ですね。悪意を持った攻撃者が攻撃データを入力可能なシステムの場合、防御機構がない場合はシステムの脆弱性につながります。この辺りは、RLEデコーダが実際に使われるユースケースやセキュリティ要件、実装言語にあわせて判断されたほうがよいでしょう。
majiponi

2016/09/14 07:07

しばらく様子を見ましたが、メジャーなソフトでは、なさそうです。機能としてどこまで対応するかは、libHaruのコミュで継続審議することにしました。お二方とも、ありがとうございました。
guest

0

画像に関してはまったくの素人ですが……
要は、「不正なデータ」を作成できればいいのであれば、バイナリエディタなどで直接「正常なデータ」のビットをいじって、不正なデータに書き換えてしまえばいいのではないでしょうか。

私の知っているバイナリエディタですと、Stirlingとかがあります。(古いソフトですが、Win732bitでは動きました)
そのほかにも色々なバイナリエディタがあると思うので、調べてみてはいかがでしょう。

Stirling
http://www.vector.co.jp/soft/win95/util/se079072.html

投稿2016/09/07 10:03

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

majiponi

2016/09/09 11:58

そりゃ、バイナリエディタなり、自作のコードで作れはしますけど、あまりにも効率悪いので、自動でなんとかしたいのです。どうしてもソフトなければ、その機能を削除することも考えてます(対応する必要性自体なくなるから)
退会済みユーザー

退会済みユーザー

2016/09/09 12:06

効率の良い方法をお探しだとしたら、私の回答は的外れでしたね。 存じ上げませんですみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問