プログラミング言語SML#解説

Chapter SML#使用上の注意

SML#1.0.1版を使用する上で注意すべき点を列挙します.

  1. OS.FileSys.tmpName : unit -> string関数について.
    基本ライブラリ(Standard ML Basis Library)で提供されているこの 関数の1.0.1版での実装は,Cの標準ライブラリ関数tmpnamを使用し ています. このCライブラリ関数の使用に関しては,セキュリティ上の問題がある ことが知られています(詳しくはBSD系のManページなどをご覧ください). SML#コンパイラを使うユーザが,この基本ライブラリ関数 OS.FileSys.tmpNameを使用し一時ファイルを作成するプログラムを書いた 場合にも,同様の問題が発生する可能性があります.

    _require "basis.smi"などの宣言を通じてこの関数をリンクする実 行形式プログラムの作成時には,

    xxxx.o : In function `F45xxx':
    (xxxx) : warning: the use of `tmpnam' is dangerous, better use `mkstemp'

    とのメッセージが出力されます. この警告は,このtmpnamがリンクされていることによるものです.

    Cのライブラリ関数tmpnamを使って一時ファイルを作成する上でのセ キュリティ上の問題の一つは,一時ファイル名の生成と実際に使用する一時ファ イルを作成する操作が分離されているために起こります. 基本ライブラリのOS_FILE_SYSシグネチャが要求するtmpName : unit -> stringの型をもつ関数の実装を変更するのみでは, この問題の根本的な解決は難しいと思われます. SML#では,OS.FileSys基本ライブラリモジュールに代わ る,より安全でかつ効率と使用勝手のよいモジュールを提供することを検討中で す.