» www.Giftbox.Az - Bir birindən gözəl hədiyyə satışı
ウィキペディアランダム
毎日カテゴリ
共有: WhatsappFacebookTwitterVK

strlcpy

strlcpyC言語文字列を安全にコピーするための関数である。ISO で規定された関数ではないが、BSD libc などに含まれている。危険な使い方をしてしまいがちな関数 strcpy や (strncpy) の代替として、Todd C. Miller およびテオ・デ・ラート (Theo de Raadt) が開発した[1]

概要

プロトタイプ

size_t strlcpy (char *dst, const char *src, size_t size); 

であり、ポインタsrcの指すアドレスから最大でsize - 1バイトの文字列をdstにコピーし、dstの指す文字列が必ずNULL文字で終わるようにする。これによって、dstがchar配列の場合にsizeof(dst)をsizeとして指定すればバッファオーバーランしないことが保証される。

strncpyは似たプロトタイプを持つが、最大でsizeバイトをコピーするのでNULL文字で終わるとは限らない点や、文字列が短い場合にdstの残った部分をすべてゼロで埋める点がstrlcpyと異なる。

実装状況

Millerとde RaadtはOpenBSDの開発者であり、strlcpyを最初に実装したOSはOpenBSD 2.4である。以後、FreeBSD 3.3を含め、SolarismacOS等の各OS、OpenSSL等のライブラリにも採用されている。Linux では libbsd ライブラリ経由で利用できる。

一方で、GNU Cライブラリ (glibc) の開発者たちは、GNU Coding Standardsで禁じられている「長い行を黙って切り詰める」関数である、このような仕様の関数はバグである、いい加減なプログラムを助長してしまう、新たなセキュリティ問題を生む、など否定的な見解を示しており[2]、標準規格に含まれない限りはglibcには実装しない意向である。

strlcpyが危険な例:

char cmd[] = "rm *.bak"; char buf[5]; strlcpy(buf, cmd, sizeof(buf)); system(buf); 

(sizeof(buf) が5であるため、最初の5-1=4文字しかコピーされず、"rm *" が実行されることになります)

関連項目

脚注

  1. ^ strlcpy and strlcat - consistent, safe, string copy and concatenation. - 1999 USENIX Annual Technical Conference, June 6-11, 1999, Monterey, California, USA
  2. ^ libc-alphaメーリングリストでの議論[1][2]より

外部リンク

ウィキペディア、ウィキ、本、library、論文、読んだ、ダウンロード、自由、無料ダウンロード、mp3、video、mp4、3gp、 jpg、jpeg、gif、png、画像、音楽、歌、映画、本、ゲーム、ゲーム。