@ikeji コードアナライザとかで、は確かにできそう。メリットある場合もあるかも?その場合はコストと天秤にかけて、Cプログラマが受け入れてよいくらいまで楽で効果的なら、って感じかなぁ。
最後の方のは、一つの案としては、スタックに確保した&バイト数が分かってるやつしか受け入れない、という方針のAPIやらなんやらを作ってみるのはありかもね。
型を強制することによって安全性を確保……になるのかな??かも。
@ikeji コードアナライザとかで、は確かにできそう。メリットある場合もあるかも?その場合はコストと天秤にかけて、Cプログラマが受け入れてよいくらいまで楽で効果的なら、って感じかなぁ。
最後の方のは、一つの案としては、スタックに確保した&バイト数が分かってるやつしか受け入れない、という方針のAPIやらなんやらを作ってみるのはありかもね。
型を強制することによって安全性を確保……になるのかな??かも。
@ikeji これでいろいろ考えてたけどとりあえず。Rubyの方はStringValueCStrを呼び出さないと、NUL終端は保証しないはずです(というのがやや最近だったのかも?)。
なので実態としては、「そうであることを助ける機構まではある」くらいじゃないかな。
@ikeji 「Cの文字列型」と言われたとき、「……のバイト数が明示的に宣言・制限されたものに限る」という修飾子がつく、という想像は、文脈含めて流石にできなかった(できない)と思いますです。
「Cの文字列型の中には長さが入っているものもある」ならわかる。けど文字列型一般ではないと思う。
@ikeji 結論だけおしえてくださると助かる
@ikeji うん、それは普通のconst char *じゃないからね。
という、予防線を張っても堂々と無視されると、議論が進まなくてうむむ……
@ikeji うん、そう思うー
@ikeji 何となく分かったんだけど、これはtypedefの例えではないってことかな?
@ikeji うん、それはそうだけど。なんだか話がかみ合って無い気がする?
@ikeji 型には入ってないよね?つまり(普通のconst char *では)静的には検証できない。
@ikeji あれ、それは10文字じゃなくて文字列十個だよね?
@ikeji うん、そう思う。つまり短い=255文字まで、なので、それより短い(というか、確保するバイト数が少ない)型は存在しないんじゃない?と言いたかった
@ikeji ざっとFreePascalというのを見たら、むしろ
ShortString = String[255];
と書いてあった。短くても255?
https://www.freepascal.org/docs-html/ref/refsu9.html#x32-370003.2.4
@ikeji おぉ、それらしい感じだね。Pascalは型でそういうのってあるのかな?1バイト目がヘッダ(長さ)なので255まで、とかいう固定長なのはありそう。
@ikeji ところでこないだPascal配列 (???) を作ったので自慢しておきます。 https://github.com/tadd/libscary
差が20バイトあるけど、おそらく先頭のユーザーIDが64ビットの整数で、それを10進で文字列化したものだった(最大20バイト)、としたらとても素直な説明になりそう
アルゴリズムに脆弱性があったのかと誤読しかけたけどそんなことなかった。
もともとbcryptは「入力は72バイトまで」という仕様らしいので(好ましくはないけど脆弱性とは言えないと思う)、それをはみ出る長さのユーザー名を入力として使っちゃった側・仕様を考慮しなかった側が悪いってだけのはず。
https://gigazine.net/news/20241105-okta-ad-ldap-delegated-authentication-username/
言語処理系側として考えられるのは…強引かもしんないけど、文字列の長さまで型にできる依存型?
73以上の長い文字列がbcryptの処理に渡される可能性を静的に検出する。いやびみょうかもしれない
ただbcryptの実装として、73文字以上が渡されたら教える、とかするのはやってもいいかも知れない、いややりすぎかも知れない。
@ikeji が一番詳しそうなので一般論としてお聞きしたいんだけどさ、
ノートパソコンを直すパーツが欲しい時ってどこで手に入れる?アリエクとか?
ファンにずっと異音♪があって、掃除してもだめだから自分で替えようと思ってて。けどPCメーカー公式に聞いたら市販の3倍はしそうでアホらしくて、他で買いたい。
Digikeyとかから部品メーカーの本物を買おうとしてもなかなか見つからなくて、あとはAmazon/Ali Expressのアヤシイとこくらいしか分かんなくて、どこがましなんだろう?と悩んでて質問してみました。
ちなみにAmazon.co.jpで売ってるのは2.5kくらいで安めなので、まともそうなとこがんばって探した上で変なのが届いても、まーいいかー(今のに戻せるし)と思ってます。
@ikeji @zundan @omasanori なるほど、そのへんは選べた方がよさげ、というのは同意。
076萌SNS is a social network, courtesy of 076. It runs on GNU social, version 2.0.2-beta0, available under the GNU Affero General Public License.
All 076萌SNS content and data are available under the Creative Commons Attribution 3.0 license.