バグと思われるものを見つけた:ユーザー名とパスワードの組み合わせが十分長いと、bitcoind の Base64 エンコーダーが以下のような Authorization ヘッダーを生成する:
... Authorization: Basic YWJiYWJiYWFiYmE6aGVsbG93b3JsZGhlbGxvd29ybGRoZWxsb3dvcmxkaGVsbG93 b3JsZGhlbGxvd29ybGRoZWxsb3dvcmxk64 文字ごとに改行が挿入されるため、Authorization ヘッダーが壊れ、“bitcoin getinfo”のようなコマンドが失敗する。サーバー自体は正しく動作するクライアントからは問題なく動作する。
これは Base64Encode 関数の末尾で改行を除去すれば解決できる:
result.erase(std::remove(result.begin(), result.end(), ' '), result.end()); result.erase(std::remove(result.begin(), result.end(), ' '), result.end());
このバグを見つけるほど長いパスワードを使っていたことに+1 だ。
SVN にリビジョン 110 としてアップロードした。