Skip to content

Commit 353366f

Browse files
Merge pull request #903 from Muuhh-CTJ/jp-translation-free
Japanese translation of free
2 parents 1888053 + 08a525f commit 353366f

File tree

2 files changed

+108
-0
lines changed

2 files changed

+108
-0
lines changed

docs/labs/free.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ info =
77
{
88
present: String.raw`\s*free[^;]*; asprintf`,
99
text: "Do not free the input first, you need to use it.",
10+
text_ja: "入力を最初に free しないでください。それは使う必要があります。",
1011
examples: [
1112
[
1213
"free(s);\nasprintf(&result, \"pre_%s_post\", s);"
@@ -17,6 +18,7 @@ info =
1718
present: String.raw`\s* asprintf \(`,
1819
absent: "free",
1920
text: "This fails to free the memory, likely leading to a missing release.",
21+
text_ja: "メモリを解放し忘れています。",
2022
examples: [
2123
[
2224
"asprintf(&result, \"\"pre_%s_post\"\", s);"
@@ -26,10 +28,12 @@ info =
2628
{
2729
absent: "return",
2830
text: "This fails to return the result.",
31+
text_ja: "結果を返し忘れています。",
2932
},
3033
{
3134
absent: String.raw`\s* [^;]+;[^;]+;[^;]+; \s*`,
3235
text: "There should be 3 statements, each terminated with a semicolon.",
36+
text_ja: "それぞれがセミコロンで終わる3つのステートメントが必要です。",
3337
examples: [
3438
[
3539
"asprintf(&result, \"pre_%s_post\", s);\nfree(s);\nreturn result"
@@ -39,6 +43,7 @@ info =
3943
{
4044
present: String.raw`\s* return result ; free \s*`,
4145
text: "Do not do anything after the return, it will not execute.",
46+
text_ja: "return のあとは何もしないでください。それは実行されません。",
4247
examples: [
4348
[
4449
"asprintf(&result, \"pre_%s_post\", s);\nreturn result;\nfree(s);"

docs/labs/ja_free.html

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
<!DOCTYPE html>
2+
<html lang="ja">
3+
<head>
4+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
5+
<meta charset="utf-8">
6+
<meta name="viewport" content="width=device-width, initial-scale=1">
7+
<link rel="stylesheet" href="https://best.openssf.org/assets/css/style.css">
8+
<link rel="stylesheet" href="checker.css">
9+
<script src="checker.js"></script>
10+
<script src="free.js"></script>
11+
<link rel="license" href="https://creativecommons.org/licenses/by/4.0/">
12+
13+
<!-- See create_labs.md for how to create your own lab! -->
14+
15+
</head>
16+
<body>
17+
<!-- For GitHub Pages formatting: -->
18+
<div class="container-lg px-3 my-5 markdown-body">
19+
<h1>ラボ演習 free</h1>
20+
<p>
21+
これはセキュアなソフトウェア開発に関するラボ演習です。
22+
ラボの詳細については、<a href="ja_introduction.html" target="_blank">概要</a>をご覧ください。
23+
24+
<p>
25+
<h2>タスク</h2>
26+
<p>
27+
<b>以下のコードを変更して、シンプルな解放後使用(use-after-free)バグを修正してください。</b>
28+
29+
<p>
30+
<h2>背景</h2>
31+
<p>
32+
実際、全てのプログラミング言語は開発者が迅速にメモリを確保し、そのメモリ領域にデータを保管することを許しています。
33+
プログラムがそのメモリを使い終わったら、ほとんどのプログラミング言語は自動的にメモリを回収します。
34+
35+
<p>
36+
しかしながら、C と C++ では <i>手動による</i> メモリ管理が求められます。
37+
これはつまり、C と C++ を使用する開発者は、<i>手動で</i> システムにメモリ領域の解放を(それぞれ <tt>free</tt><tt>delete</tt> を使って)要求しなければならない、ということです。
38+
手動でのメモリ管理はパフォーマンスに優位性があり、また概念的にはシンプルです。
39+
しかし手動でのメモリ管理はまた、多様なよくあるタイプのバグをもたらします。
40+
41+
42+
<ol>
43+
<li>二重解放: 同じメモリ領域を2回以上解放してしまうこと
44+
<li>解放後使用(use-after-free): 解放後に(読み込みまたは書き込みとして)メモリを使用してしまうこと
45+
<li>解放し忘れ: 使わなくなったメモリを解放し忘れてしまうこと
46+
</ol>
47+
48+
<p>
49+
50+
これらのバグは頻繁に発生します。なぜなら、これはいつものことですが、ソフトウェアが大きく、また複雑になるにつれて、完璧に実装することが難しくなるからです。
51+
多くの脆弱性は、手動でのメモリ管理のバグに起因しています。
52+
そのようなバグの <i>全てが脆弱性ではありません</i> が、多くは脆弱性になります。
53+
54+
<p>
55+
<h2>タスクの詳細</h2>
56+
<p>
57+
58+
<p>
59+
以下の C コードを変更して、シンプルな解放後使用(user-after-free)バグを修正してください。
60+
このコードで実装されている関数 <tt>tweak</tt><tt>s</tt> という文字列を受け取ります。
61+
この関数は <tt>pre_</tt>、入力されたテキスト(<tt>s</tt>)、<tt>_post</tt> という新しい文字列を生成するために <tt>asprintf</tt> という関数を呼び出します。
62+
関数 <tt>tweak</tt> は最終的にこの新しい結果を返す必要があります。
63+
残念なことに現在のコードは、メモリ領域を最後に使用するより <i>前に</i> その領域を解放するための <tt>free</tt> を呼び出しています。
64+
これにより「解放後使用(use-after-free)」バグが引き起こされます。
65+
このバグが問題となるかどうかは実装の多くの詳細によりますが、いずれにせよ私たちは問題を引き起こしたくはありません。
66+
67+
<p>
68+
コードを修正しましょう!
69+
必要に応じて、「ヒント」ボタンと「諦める」ボタンを使用してください。
70+
71+
<p>
72+
<h2>演習 (<span id="grade"></span>)</h2>
73+
<p>
74+
<form id="lab">
75+
<pre><code
76+
>#include &lt;stdlib.h&gt;
77+
#include &lt;string.h&gt;
78+
#include &lt;stdio.h&gt;
79+
80+
// 調整バージョンの文字列 s を返す。s は解放する。
81+
char *tweak(char *s) {
82+
char *result; // 結果はここに格納する
83+
<textarea id="attempt0" rows="4" cols="60" spellcheck="false">
84+
free(s);
85+
asprintf(&result, "pre_%s_post", s);
86+
return result;
87+
</textarea>
88+
}
89+
</code></pre>
90+
<button type="button" class="hintButton">ヒント</button>
91+
<button type="button" class="resetButton">リセット</button>
92+
<button type="button" class="giveUpButton">諦める</button>
93+
<br><br>
94+
<p>
95+
<i>このラボは、<a href="https://www.linuxfoundation.org/">Linux Foundation</a>のDavid A. Wheelerによって開発されました。</i>
96+
<br><br>
97+
<p id="correctStamp" class="small">
98+
<textarea id="debugData" class="displayNone" rows="20" cols="65" readonly>
99+
</textarea>
100+
</form>
101+
</div><!-- End GitHub pages formatting -->
102+
</body>
103+
</html>

0 commit comments

Comments
 (0)