アカウント名:
パスワード:
申請にN個のドメインが含まれていた場合、Boulderは1個のみを選択してN回チェックしていたとのこと。
ぐあぁぁ(なにかトラウマが刺激されたらしい)
これだけじゃ何のことか分からんという人のために、丁寧に解説してくださっているブログを見つけたので参照。Let's EncryptがはまったGolangの落とし穴 [hatenablog.com]
これは、ループ内でループ変数iの参照を配列に入れてしまうことで、ループ終了後の出力値が(…中略)のように配列が全て同じ値になってしまう問題です。
for や range などで扱うループ変数が同じ参照になることを知っていないとやってしまいそうな初心者的な間違いです。(…中略)これはひょっとしたら自分もいつかこのようなバグを仕込んでしまうかも、と背筋が寒くなりました。
Goはよくわからんので「Goでよくある間違い」をC++に移植してみた。
#include <iostream>#include <vector> int main() { std::vector<int*> out; for (int i = 0; i < 3; ++i) { out.push_back(&i); } std::cout << "Vaues: " << *out[0] << " " << *out[1] << " " << *out[2] << std::endl; std::cout << "Addresses: " << out[0] << " " << out
あ、iのスコープはforループの中だから見事に鼻から悪魔が出てた。
int i; for (i = 0; i < 3; ++i) {
こうしないとダメか。C++だといかにも不自然になるな
ループ変数の値でなく参照を配列に積んでいくって、どう考えたらそういう発想になるのか判らないのですが...Goだと、参照を渡すのがほぼ常だとかいうのがあるのでしょうか。
Let's encryptのバグはRustで実装していたら防げたの? [qiita.com]によると
実際のLet's encryptの実装ミスは、ループの中で関数呼び出しを挟んでいるので気づくのが難しいとも感じました。
だそうで、積んでるのが参照だということを見落としやすい形になっていたのかも
そりゃ問題を示すための最小限のコードなんだからわざとらしいに決まってるだろ。「どうしてオブジェクト指向では犬や猫を鳴かせるのかさっぱり」みたいな言いがかりだな
ぺろっ。こ、これは並列処理?!
並列以前な部分だぞ
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
UNIXはただ死んだだけでなく、本当にひどい臭いを放ち始めている -- あるソフトウェアエンジニア
ぐええ (スコア:5, おもしろおかしい)
申請にN個のドメインが含まれていた場合、Boulderは1個のみを選択してN回チェックしていたとのこと。
ぐあぁぁ
(なにかトラウマが刺激されたらしい)
補足ね (スコア:2)
これだけじゃ何のことか分からんという人のために、
丁寧に解説してくださっているブログを見つけたので参照。
Let's EncryptがはまったGolangの落とし穴 [hatenablog.com]
これは、ループ内でループ変数iの参照を配列に入れてしまうことで、ループ終了後の出力値が
(…中略)
のように配列が全て同じ値になってしまう問題です。
for や range などで扱うループ変数が同じ参照になることを知っていないとやってしまいそうな初心者的な間違いです。
(…中略)
これはひょっとしたら自分もいつかこのようなバグを仕込んでしまうかも、と背筋が寒くなりました。
Re: (スコア:0)
Goはよくわからんので「Goでよくある間違い」をC++に移植してみた。
Re: (スコア:0)
あ、iのスコープはforループの中だから見事に鼻から悪魔が出てた。
こうしないとダメか。C++だといかにも不自然になるな
「よくある間違い」なの? (スコア:0)
ループ変数の値でなく参照を配列に積んでいくって、どう考えたらそういう発想になるのか判らないのですが...
Goだと、参照を渡すのがほぼ常だとかいうのがあるのでしょうか。
Re:「よくある間違い」なの? (スコア:1)
Let's encryptのバグはRustで実装していたら防げたの? [qiita.com]によると
実際のLet's encryptの実装ミスは、ループの中で関数呼び出しを挟んでいるので
気づくのが難しいとも感じました。
だそうで、積んでるのが参照だということを見落としやすい形になっていたのかも
うじゃうじゃ
Re: (スコア:0)
そりゃ問題を示すための最小限のコードなんだからわざとらしいに決まってるだろ。「どうしてオブジェクト指向では犬や猫を鳴かせるのかさっぱり」みたいな言いがかりだな
Re: (スコア:0)
ぺろっ。
こ、これは並列処理?!
Re: (スコア:0)
並列以前な部分だぞ