タグ

ブックマーク / ytqwerty.hatenadiary.org (3)

  • 例外 - Note

    gistのはてなダイアリー埋め込みテストも兼ねて。 LLVMでの例外の扱いは基的にgccと同じようです。libgccを使って投げた例外を受けることができます。 gccの例外をゼロから実装するにはぱーそなりてぃふぁんくしょんというとても面倒な関数を書かないといけませんので、手を抜いてlibstdc++(g++のランタイム)とlibgnat(GNATのランタイム)を使って例外を投げてみました。 ↑とほぼ等価なC++コード #include <cstdio> int main() { try { throw 0; } catch(int) { std::puts("int"); } catch(float) { std::puts("float"); } return 0; } ↑とほぼ等価なAdaコード with GNAT.IO; procedure main is begin raise

    例外 - Note
  • 2011-01-08

    前にも書いたとおりAdaのStringは規格ではLatin-1*1ということになってまして、IO関係はWide_Text_IOであってもファイル名は軒並みStringですので、規格を鵜呑みにすると、Latin-1以外の文字が使われたファイル名を扱う方法が全くないとか、ワイド文字を識別子に使える規格なのに識別子を返す系の関数でLatin-1に収まらない文字がどうなるかはimplementation-definedだったりするとか、Wide_Characters.HandlingやWide_Wide_Maps.Wide_Wide_ConstantsがLatin-1の範囲外を扱わないと規格に明記されちゃってて仮に真面目にワイド文字を扱う実装をしたら逆に違反になってしまうとか、とにかく酷いとしか言いようがないわけです。 多バイト文字圏の人はAdaなんて使っちゃダメですマジで……。 とりあえず私の自

    2011-01-08
  • strcpy_sなんて使うな - Note

    超今さらですが、C1x?に、セキュア文字列関数群*1が正式に入るみたいですね。 http://www.open-std.org/JTC1/SC22/WG14/www/projects#24731-1 で、google:strcpy_sで検索すると、strcpyなんて使うな。安全でセキュリティの高いstrcpy_sを使え!という旨の文面がいっぱいでてくるわけですよ。馬鹿だと思いますね。この「セキュア」文字列関数群を最初に考えた人も、乗せられて使え使え言ってる人達も……。勿論strncpy*2やstrlcpyも含めて。 確かにバッファオーバーフローは阻止できますよ。スタックが上書きされて暴走したり悪意のあるコードが実行されたりするのは阻止できますよ。でも、その結果、データが欠けたまま処理が進んでしまうわけですよ。規格ではset_constraint_handler_sでオーバーフロー時のハンド

    strcpy_sなんて使うな - Note
  • 1