Current File : //opt/RZruby/share/doc/ruby/html/da/d2d/safe_8c_source.html |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/>
<title>Ruby: safe.c Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">Ruby
 <span id="projectnumber">1.9.3p551(2014-11-13revision48407)</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="../../index.html"><span>Main Page</span></a></li>
<li><a href="../../modules.html"><span>Modules</span></a></li>
<li><a href="../../annotated.html"><span>Data Structures</span></a></li>
<li class="current"><a href="../../files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="../../files.html"><span>File List</span></a></li>
<li><a href="../../globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle">
<div class="title">safe.c</div> </div>
</div><!--header-->
<div class="contents">
<a href="../../da/d2d/safe_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/**********************************************************************</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"></span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> safe.c -</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"></span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> $Author: tadf $</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> created at: Tue Sep 23 09:44:32 JST 2008</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"></span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> Copyright (C) 2008 Yukihiro Matsumoto</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"></span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">**********************************************************************/</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">/* safe-level:</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment"> 0 - strings from streams/environment/ARGV are tainted (default)</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment"> 1 - no dangerous operation by tainted value</span></div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment"> 2 - process/file operations prohibited</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment"> 3 - all generated objects are tainted</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment"> 4 - no global (non-tainted) variable modification/no direct output</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">*/</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div>
<div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#a7cf1dc7af55b073c766e27872f25c1c3"> 20</a></span> <span class="preprocessor">#define SAFE_LEVEL_MAX 4</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="preprocessor"></span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="preprocessor">#include "<a class="code" href="../../de/de6/ruby_2ruby_8h.html">ruby/ruby.h</a>"</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="preprocessor">#include "<a class="code" href="../../d8/d32/vm__core_8h.html">vm_core.h</a>"</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">/* $SAFE accessor */</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span> </div>
<div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keywordtype">int</span></div>
<div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#ab0c493934f850e8e533656b3ae640154"> 28</a></span> <a class="code" href="../../d5/d9d/tcltklib_8c.html#a6f520624fabb8332dc98fd223491bf8d">rb_safe_level</a>(<span class="keywordtype">void</span>)</div>
<div class="line"><a name="l00029"></a><span class="lineno"> 29</span> {</div>
<div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  <span class="keywordflow">return</span> <a class="code" href="../../d8/d32/vm__core_8h.html#a8deb84ec6023e3229db88ac2c9da6138">GET_THREAD</a>()->safe_level;</div>
<div class="line"><a name="l00031"></a><span class="lineno"> 31</span> }</div>
<div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#abff7d7eef2e9bf380a72a0844af0c960"> 34</a></span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a2dc3c261c5388aa84c552741c90f243f">rb_set_safe_level_force</a>(<span class="keywordtype">int</span> <a class="code" href="../../d5/d9d/tcltklib_8c.html#a3165c7b86c85463f7d64defedf6b0d43">safe</a>)</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <a class="code" href="../../d8/d32/vm__core_8h.html#a8deb84ec6023e3229db88ac2c9da6138">GET_THREAD</a>()->safe_level = <a class="code" href="../../d5/d9d/tcltklib_8c.html#a3165c7b86c85463f7d64defedf6b0d43">safe</a>;</div>
<div class="line"><a name="l00037"></a><span class="lineno"> 37</span> }</div>
<div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#a6a9d70420ad09052b04f8103796bb31d"> 40</a></span> <a class="code" href="../../d5/d9d/tcltklib_8c.html#ac95c385910a0bb5f780fb6545d83d881">rb_set_safe_level</a>(<span class="keywordtype">int</span> <a class="code" href="../../db/d74/zlib_8c.html#a96fb68396dd219a7b489e051d4c8dfa5">level</a>)</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span> {</div>
<div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <a class="code" href="../../d2/d66/structrb__thread__struct.html">rb_thread_t</a> *<a class="code" href="../../d5/d9d/tcltklib_8c.html#a16a4e0379b897e4edef4a665c09f32e9">th</a> = <a class="code" href="../../d8/d32/vm__core_8h.html#a8deb84ec6023e3229db88ac2c9da6138">GET_THREAD</a>();</div>
<div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keywordflow">if</span> (level > th-><a class="code" href="../../d2/d66/structrb__thread__struct.html#adc5048ddde96e3ea2e6b22c3e58ce696">safe_level</a>) {</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">if</span> (level > <a class="code" href="../../da/d2d/safe_8c.html#a7cf1dc7af55b073c766e27872f25c1c3">SAFE_LEVEL_MAX</a>) {</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  level = <a class="code" href="../../da/d2d/safe_8c.html#a7cf1dc7af55b073c766e27872f25c1c3">SAFE_LEVEL_MAX</a>;</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  }</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  th-><a class="code" href="../../d2/d66/structrb__thread__struct.html#adc5048ddde96e3ea2e6b22c3e58ce696">safe_level</a> = <a class="code" href="../../db/d74/zlib_8c.html#a96fb68396dd219a7b489e051d4c8dfa5">level</a>;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  }</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span> }</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">static</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#aa6a1040cbacdc1c2a409fb3f002071bc">VALUE</a></div>
<div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#a769d8ca3b9b4c86cdb473ef7879bee92"> 53</a></span> <a class="code" href="../../da/d2d/safe_8c.html#a769d8ca3b9b4c86cdb473ef7879bee92">safe_getter</a>(<span class="keywordtype">void</span>)</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span> {</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">return</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#aca9f83a35416ed9d6e0b860afa5eaf0f">INT2NUM</a>(<a class="code" href="../../d5/d9d/tcltklib_8c.html#a6f520624fabb8332dc98fd223491bf8d">rb_safe_level</a>());</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span> }</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> </div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#a0416993d3eb81f15ec19cd65a41c1069"> 59</a></span> <a class="code" href="../../da/d2d/safe_8c.html#a0416993d3eb81f15ec19cd65a41c1069">safe_setter</a>(<a class="code" href="../../de/de6/ruby_2ruby_8h.html#aa6a1040cbacdc1c2a409fb3f002071bc">VALUE</a> <a class="code" href="../../d5/d11/ripper_8c.html#a68fefa607ad528d20b0ae5d69a346d46">val</a>)</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordtype">int</span> <a class="code" href="../../db/d74/zlib_8c.html#a96fb68396dd219a7b489e051d4c8dfa5">level</a> = <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a877c38180d23c5447d976c70dda89d69">NUM2INT</a>(val);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <a class="code" href="../../d2/d66/structrb__thread__struct.html">rb_thread_t</a> *<a class="code" href="../../d5/d9d/tcltklib_8c.html#a16a4e0379b897e4edef4a665c09f32e9">th</a> = <a class="code" href="../../d8/d32/vm__core_8h.html#a8deb84ec6023e3229db88ac2c9da6138">GET_THREAD</a>();</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">if</span> (level < th-><a class="code" href="../../d5/d9d/tcltklib_8c.html#a6366ec8aa00fb0b6278c5633431e15b0">safe_level</a>) {</div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <a class="code" href="../../db/dcc/error_8c.html#a0f771a2840561f1838169b3d7d4616f3">rb_raise</a>(<a class="code" href="../../db/dcc/error_8c.html#ae53f1d228c34c2a7715d7d39ab1a2991">rb_eSecurityError</a>,</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="stringliteral">"tried to downgrade safe level from %d to %d"</span>,</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  th-><a class="code" href="../../d2/d66/structrb__thread__struct.html#adc5048ddde96e3ea2e6b22c3e58ce696">safe_level</a>, level);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  }</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordflow">if</span> (level == 3) {</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <a class="code" href="../../db/dcc/error_8c.html#afd461c64916576849b159b21a26123da">rb_warning</a>(<span class="stringliteral">"$SAFE=3 does no sandboxing; you might want to use $SAFE=4"</span>);</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  }</div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">if</span> (level > <a class="code" href="../../da/d2d/safe_8c.html#a7cf1dc7af55b073c766e27872f25c1c3">SAFE_LEVEL_MAX</a>) {</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  level = <a class="code" href="../../da/d2d/safe_8c.html#a7cf1dc7af55b073c766e27872f25c1c3">SAFE_LEVEL_MAX</a>;</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  }</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  th-><a class="code" href="../../d2/d66/structrb__thread__struct.html#adc5048ddde96e3ea2e6b22c3e58ce696">safe_level</a> = <a class="code" href="../../db/d74/zlib_8c.html#a96fb68396dd219a7b489e051d4c8dfa5">level</a>;</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span> }</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span> </div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#ac2e05133c9611b1515227e673dfa61a9"> 79</a></span> <a class="code" href="../../d5/d9d/tcltklib_8c.html#a94573b23a7c5d9c129da54deebf38842">rb_secure</a>(<span class="keywordtype">int</span> <a class="code" href="../../db/d74/zlib_8c.html#a96fb68396dd219a7b489e051d4c8dfa5">level</a>)</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span> {</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">if</span> (level <= <a class="code" href="../../d5/d9d/tcltklib_8c.html#a6f520624fabb8332dc98fd223491bf8d">rb_safe_level</a>()) {</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d3/d57/eval_8c.html#a16eb77144d8d67c75e6c321b3c0ea8a0">rb_frame_callee</a>()) {</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="../../db/dcc/error_8c.html#a0f771a2840561f1838169b3d7d4616f3">rb_raise</a>(<a class="code" href="../../db/dcc/error_8c.html#ae53f1d228c34c2a7715d7d39ab1a2991">rb_eSecurityError</a>, <span class="stringliteral">"Insecure operation `%s' at level %d"</span>,</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <a class="code" href="../../d5/d11/ripper_8c.html#a877bc58c495643fcf49dc64c44631e72">rb_id2name</a>(<a class="code" href="../../d3/d57/eval_8c.html#a16eb77144d8d67c75e6c321b3c0ea8a0">rb_frame_callee</a>()), <a class="code" href="../../d5/d9d/tcltklib_8c.html#a6f520624fabb8332dc98fd223491bf8d">rb_safe_level</a>());</div>
<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div>
<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <a class="code" href="../../db/dcc/error_8c.html#a0f771a2840561f1838169b3d7d4616f3">rb_raise</a>(<a class="code" href="../../db/dcc/error_8c.html#ae53f1d228c34c2a7715d7d39ab1a2991">rb_eSecurityError</a>, <span class="stringliteral">"Insecure operation at level %d"</span>,</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="../../d5/d9d/tcltklib_8c.html#a6f520624fabb8332dc98fd223491bf8d">rb_safe_level</a>());</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div>
<div class="line"><a name="l00091"></a><span class="lineno"> 91</span> }</div>
<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> </div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#a07e4978ae540041dee1f0731a54c095a"> 94</a></span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a40f969bbf67ca9a4c966dc1d2d110396">rb_secure_update</a>(<a class="code" href="../../de/de6/ruby_2ruby_8h.html#aa6a1040cbacdc1c2a409fb3f002071bc">VALUE</a> <a class="code" href="../../d5/d9d/tcltklib_8c.html#aea4012fb11c03c5c1b1fe5399e95342f">obj</a>)</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> {</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">if</span> (!<a class="code" href="../../de/de6/ruby_2ruby_8h.html#a621bc62b1fd82640c1078daf90e1c061">OBJ_TAINTED</a>(obj))</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="../../d5/d9d/tcltklib_8c.html#a94573b23a7c5d9c129da54deebf38842">rb_secure</a>(4);</div>
<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> }</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#aa044289e0f51478acb5dcd2a7dcddc74"> 101</a></span> <a class="code" href="../../da/d2d/safe_8c.html#aa044289e0f51478acb5dcd2a7dcddc74">rb_insecure_operation</a>(<span class="keywordtype">void</span>)</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> {</div>
<div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d3/d57/eval_8c.html#a16eb77144d8d67c75e6c321b3c0ea8a0">rb_frame_callee</a>()) {</div>
<div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="../../db/dcc/error_8c.html#a0f771a2840561f1838169b3d7d4616f3">rb_raise</a>(<a class="code" href="../../db/dcc/error_8c.html#ae53f1d228c34c2a7715d7d39ab1a2991">rb_eSecurityError</a>, <span class="stringliteral">"Insecure operation - %s"</span>,</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="../../d5/d11/ripper_8c.html#a877bc58c495643fcf49dc64c44631e72">rb_id2name</a>(<a class="code" href="../../d3/d57/eval_8c.html#a16eb77144d8d67c75e6c321b3c0ea8a0">rb_frame_callee</a>()));</div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <a class="code" href="../../db/dcc/error_8c.html#a0f771a2840561f1838169b3d7d4616f3">rb_raise</a>(<a class="code" href="../../db/dcc/error_8c.html#ae53f1d228c34c2a7715d7d39ab1a2991">rb_eSecurityError</a>, <span class="stringliteral">"Insecure operation: -r"</span>);</div>
<div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  }</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> }</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> </div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#a70e1d6fddfc0c801c1527aa1c3fc5cc3"> 113</a></span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#ad8603a60fefb7b6b74fea406244d277b">rb_check_safe_obj</a>(<a class="code" href="../../de/de6/ruby_2ruby_8h.html#aa6a1040cbacdc1c2a409fb3f002071bc">VALUE</a> x)</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> {</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">if</span> (<a class="code" href="../../d5/d9d/tcltklib_8c.html#a6f520624fabb8332dc98fd223491bf8d">rb_safe_level</a>() > 0 && <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a621bc62b1fd82640c1078daf90e1c061">OBJ_TAINTED</a>(x)) {</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <a class="code" href="../../da/d2d/safe_8c.html#aa044289e0f51478acb5dcd2a7dcddc74">rb_insecure_operation</a>();</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <a class="code" href="../../d5/d9d/tcltklib_8c.html#a94573b23a7c5d9c129da54deebf38842">rb_secure</a>(4);</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#a294b31f9a6cb4e8fc1e9d4e0796234b0"> 122</a></span> <a class="code" href="../../da/d2d/safe_8c.html#a294b31f9a6cb4e8fc1e9d4e0796234b0">rb_check_safe_str</a>(<a class="code" href="../../de/de6/ruby_2ruby_8h.html#aa6a1040cbacdc1c2a409fb3f002071bc">VALUE</a> x)</div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> {</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <a class="code" href="../../de/de6/ruby_2ruby_8h.html#ad8603a60fefb7b6b74fea406244d277b">rb_check_safe_obj</a>(x);</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">if</span> (<a class="code" href="../../de/de6/ruby_2ruby_8h.html#a394faf7191f18552a20cb17ce14226f0">TYPE</a>(x) != <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a22a8c2a4bbaae9b68f65c9bb92fd4e39">T_STRING</a>) {</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <a class="code" href="../../db/dcc/error_8c.html#a0f771a2840561f1838169b3d7d4616f3">rb_raise</a>(<a class="code" href="../../db/dcc/error_8c.html#a565ed9d70f4089e1b4a36e9b3381b8c6">rb_eTypeError</a>, <span class="stringliteral">"wrong argument type %s (expected String)"</span>,</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a9b4f42ada717bfbe7a78830639476aed">rb_obj_classname</a>(x));</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> }</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keywordtype">void</span></div>
<div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#acbe1829460c81a046646ab4afd4b5228"> 132</a></span> <a class="code" href="../../da/d2d/safe_8c.html#acbe1829460c81a046646ab4afd4b5228">Init_safe</a>(<span class="keywordtype">void</span>)</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> {</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a16645ebd6327288fc96a4df38d58f36b">rb_define_virtual_variable</a>(<span class="stringliteral">"$SAFE"</span>, <a class="code" href="../../da/d2d/safe_8c.html#a769d8ca3b9b4c86cdb473ef7879bee92">safe_getter</a>, <a class="code" href="../../da/d2d/safe_8c.html#a0416993d3eb81f15ec19cd65a41c1069">safe_setter</a>);</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> }</div>
<div class="ttc" id="tcltklib_8c_html_a16a4e0379b897e4edef4a665c09f32e9"><div class="ttname"><a href="../../d5/d9d/tcltklib_8c.html#a16a4e0379b897e4edef4a665c09f32e9">th</a></div><div class="ttdeci">static VALUE VALUE th</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d9d/tcltklib_8c_source.html#l02937">tcltklib.c:2937</a></div></div>
<div class="ttc" id="ruby_2ruby_8h_html_a16645ebd6327288fc96a4df38d58f36b"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#a16645ebd6327288fc96a4df38d58f36b">rb_define_virtual_variable</a></div><div class="ttdeci">void rb_define_virtual_variable(const char *, VALUE(*)(ANYARGS), void(*)(ANYARGS))</div><div class="ttdef"><b>Definition:</b> <a href="../../d0/d2a/variable_8c_source.html#l00527">variable.c:527</a></div></div>
<div class="ttc" id="ruby_2ruby_8h_html_a877c38180d23c5447d976c70dda89d69"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#a877c38180d23c5447d976c70dda89d69">NUM2INT</a></div><div class="ttdeci">#define NUM2INT(x)</div><div class="ttdef"><b>Definition:</b> <a href="../../de/de6/ruby_2ruby_8h_source.html#l00536">ruby.h:536</a></div></div>
<div class="ttc" id="ripper_8c_html_a68fefa607ad528d20b0ae5d69a346d46"><div class="ttname"><a href="../../d5/d11/ripper_8c.html#a68fefa607ad528d20b0ae5d69a346d46">val</a></div><div class="ttdeci">parser parser_yylval val</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d11/ripper_8c_source.html#l14289">ripper.c:14289</a></div></div>
<div class="ttc" id="ruby_2ruby_8h_html"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html">ruby.h</a></div></div>
<div class="ttc" id="error_8c_html_a565ed9d70f4089e1b4a36e9b3381b8c6"><div class="ttname"><a href="../../db/dcc/error_8c.html#a565ed9d70f4089e1b4a36e9b3381b8c6">rb_eTypeError</a></div><div class="ttdeci">VALUE rb_eTypeError</div><div class="ttdef"><b>Definition:</b> <a href="../../db/dcc/error_8c_source.html#l00467">error.c:467</a></div></div>
<div class="ttc" id="ruby_2ruby_8h_html_aa6a1040cbacdc1c2a409fb3f002071bc"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#aa6a1040cbacdc1c2a409fb3f002071bc">VALUE</a></div><div class="ttdeci">unsigned long VALUE</div><div class="ttdef"><b>Definition:</b> <a href="../../de/de6/ruby_2ruby_8h_source.html#l00088">ruby.h:88</a></div></div>
<div class="ttc" id="ruby_2ruby_8h_html_aca9f83a35416ed9d6e0b860afa5eaf0f"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#aca9f83a35416ed9d6e0b860afa5eaf0f">INT2NUM</a></div><div class="ttdeci">static VALUE INT2NUM(int v)</div><div class="ttdef"><b>Definition:</b> <a href="../../de/de6/ruby_2ruby_8h_source.html#l00981">ruby.h:981</a></div></div>
<div class="ttc" id="tcltklib_8c_html_a3165c7b86c85463f7d64defedf6b0d43"><div class="ttname"><a href="../../d5/d9d/tcltklib_8c.html#a3165c7b86c85463f7d64defedf6b0d43">safe</a></div><div class="ttdeci">int safe</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d9d/tcltklib_8c_source.html#l06393">tcltklib.c:6393</a></div></div>
<div class="ttc" id="tcltklib_8c_html_a6366ec8aa00fb0b6278c5633431e15b0"><div class="ttname"><a href="../../d5/d9d/tcltklib_8c.html#a6366ec8aa00fb0b6278c5633431e15b0">safe_level</a></div><div class="ttdeci">callq safe_level</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d9d/tcltklib_8c_source.html#l07185">tcltklib.c:7185</a></div></div>
<div class="ttc" id="error_8c_html_a0f771a2840561f1838169b3d7d4616f3"><div class="ttname"><a href="../../db/dcc/error_8c.html#a0f771a2840561f1838169b3d7d4616f3">rb_raise</a></div><div class="ttdeci">void rb_raise(VALUE exc, const char *fmt,...)</div><div class="ttdef"><b>Definition:</b> <a href="../../db/dcc/error_8c_source.html#l01574">error.c:1574</a></div></div>
<div class="ttc" id="error_8c_html_ae53f1d228c34c2a7715d7d39ab1a2991"><div class="ttname"><a href="../../db/dcc/error_8c.html#ae53f1d228c34c2a7715d7d39ab1a2991">rb_eSecurityError</a></div><div class="ttdeci">VALUE rb_eSecurityError</div><div class="ttdef"><b>Definition:</b> <a href="../../db/dcc/error_8c_source.html#l00476">error.c:476</a></div></div>
<div class="ttc" id="safe_8c_html_a769d8ca3b9b4c86cdb473ef7879bee92"><div class="ttname"><a href="../../da/d2d/safe_8c.html#a769d8ca3b9b4c86cdb473ef7879bee92">safe_getter</a></div><div class="ttdeci">static VALUE safe_getter(void)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00053">safe.c:53</a></div></div>
<div class="ttc" id="structrb__thread__struct_html"><div class="ttname"><a href="../../d2/d66/structrb__thread__struct.html">rb_thread_struct</a></div><div class="ttdef"><b>Definition:</b> <a href="../../d8/d32/vm__core_8h_source.html#l00393">vm_core.h:393</a></div></div>
<div class="ttc" id="ruby_2ruby_8h_html_a621bc62b1fd82640c1078daf90e1c061"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#a621bc62b1fd82640c1078daf90e1c061">OBJ_TAINTED</a></div><div class="ttdeci">#define OBJ_TAINTED(x)</div><div class="ttdef"><b>Definition:</b> <a href="../../de/de6/ruby_2ruby_8h_source.html#l00963">ruby.h:963</a></div></div>
<div class="ttc" id="ruby_2ruby_8h_html_a9b4f42ada717bfbe7a78830639476aed"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#a9b4f42ada717bfbe7a78830639476aed">rb_obj_classname</a></div><div class="ttdeci">const char * rb_obj_classname(VALUE)</div><div class="ttdef"><b>Definition:</b> <a href="../../d0/d2a/variable_8c_source.html#l00318">variable.c:318</a></div></div>
<div class="ttc" id="safe_8c_html_acbe1829460c81a046646ab4afd4b5228"><div class="ttname"><a href="../../da/d2d/safe_8c.html#acbe1829460c81a046646ab4afd4b5228">Init_safe</a></div><div class="ttdeci">void Init_safe(void)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00132">safe.c:132</a></div></div>
<div class="ttc" id="vm__core_8h_html_a8deb84ec6023e3229db88ac2c9da6138"><div class="ttname"><a href="../../d8/d32/vm__core_8h.html#a8deb84ec6023e3229db88ac2c9da6138">GET_THREAD</a></div><div class="ttdeci">#define GET_THREAD()</div><div class="ttdef"><b>Definition:</b> <a href="../../d8/d32/vm__core_8h_source.html#l00690">vm_core.h:690</a></div></div>
<div class="ttc" id="tcltklib_8c_html_a94573b23a7c5d9c129da54deebf38842"><div class="ttname"><a href="../../d5/d9d/tcltklib_8c.html#a94573b23a7c5d9c129da54deebf38842">rb_secure</a></div><div class="ttdeci">rb_secure(4)</div></div>
<div class="ttc" id="safe_8c_html_a7cf1dc7af55b073c766e27872f25c1c3"><div class="ttname"><a href="../../da/d2d/safe_8c.html#a7cf1dc7af55b073c766e27872f25c1c3">SAFE_LEVEL_MAX</a></div><div class="ttdeci">#define SAFE_LEVEL_MAX</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00020">safe.c:20</a></div></div>
<div class="ttc" id="ruby_2ruby_8h_html_a40f969bbf67ca9a4c966dc1d2d110396"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#a40f969bbf67ca9a4c966dc1d2d110396">rb_secure_update</a></div><div class="ttdeci">void rb_secure_update(VALUE)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00094">safe.c:94</a></div></div>
<div class="ttc" id="tcltklib_8c_html_aea4012fb11c03c5c1b1fe5399e95342f"><div class="ttname"><a href="../../d5/d9d/tcltklib_8c.html#aea4012fb11c03c5c1b1fe5399e95342f">obj</a></div><div class="ttdeci">static VALUE VALUE obj</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d9d/tcltklib_8c_source.html#l03147">tcltklib.c:3147</a></div></div>
<div class="ttc" id="ruby_2ruby_8h_html_a394faf7191f18552a20cb17ce14226f0"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#a394faf7191f18552a20cb17ce14226f0">TYPE</a></div><div class="ttdeci">#define TYPE(x)</div><div class="ttdef"><b>Definition:</b> <a href="../../de/de6/ruby_2ruby_8h_source.html#l00441">ruby.h:441</a></div></div>
<div class="ttc" id="zlib_8c_html_a96fb68396dd219a7b489e051d4c8dfa5"><div class="ttname"><a href="../../db/d74/zlib_8c.html#a96fb68396dd219a7b489e051d4c8dfa5">level</a></div><div class="ttdeci">gz level</div><div class="ttdef"><b>Definition:</b> <a href="../../db/d74/zlib_8c_source.html#l02025">zlib.c:2025</a></div></div>
<div class="ttc" id="vm__core_8h_html"><div class="ttname"><a href="../../d8/d32/vm__core_8h.html">vm_core.h</a></div></div>
<div class="ttc" id="ruby_2ruby_8h_html_a2dc3c261c5388aa84c552741c90f243f"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#a2dc3c261c5388aa84c552741c90f243f">rb_set_safe_level_force</a></div><div class="ttdeci">void rb_set_safe_level_force(int)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00034">safe.c:34</a></div></div>
<div class="ttc" id="tcltklib_8c_html_ac95c385910a0bb5f780fb6545d83d881"><div class="ttname"><a href="../../d5/d9d/tcltklib_8c.html#ac95c385910a0bb5f780fb6545d83d881">rb_set_safe_level</a></div><div class="ttdeci">rb_set_safe_level(q->safe_level)</div></div>
<div class="ttc" id="safe_8c_html_aa044289e0f51478acb5dcd2a7dcddc74"><div class="ttname"><a href="../../da/d2d/safe_8c.html#aa044289e0f51478acb5dcd2a7dcddc74">rb_insecure_operation</a></div><div class="ttdeci">void rb_insecure_operation(void)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00101">safe.c:101</a></div></div>
<div class="ttc" id="eval_8c_html_a16eb77144d8d67c75e6c321b3c0ea8a0"><div class="ttname"><a href="../../d3/d57/eval_8c.html#a16eb77144d8d67c75e6c321b3c0ea8a0">rb_frame_callee</a></div><div class="ttdeci">ID rb_frame_callee(void)</div><div class="ttdef"><b>Definition:</b> <a href="../../d3/d57/eval_8c_source.html#l00807">eval.c:807</a></div></div>
<div class="ttc" id="safe_8c_html_a0416993d3eb81f15ec19cd65a41c1069"><div class="ttname"><a href="../../da/d2d/safe_8c.html#a0416993d3eb81f15ec19cd65a41c1069">safe_setter</a></div><div class="ttdeci">static void safe_setter(VALUE val)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00059">safe.c:59</a></div></div>
<div class="ttc" id="ruby_2ruby_8h_html_a22a8c2a4bbaae9b68f65c9bb92fd4e39"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#a22a8c2a4bbaae9b68f65c9bb92fd4e39">T_STRING</a></div><div class="ttdeci">#define T_STRING</div><div class="ttdef"><b>Definition:</b> <a href="../../de/de6/ruby_2ruby_8h_source.html#l00418">ruby.h:418</a></div></div>
<div class="ttc" id="safe_8c_html_a294b31f9a6cb4e8fc1e9d4e0796234b0"><div class="ttname"><a href="../../da/d2d/safe_8c.html#a294b31f9a6cb4e8fc1e9d4e0796234b0">rb_check_safe_str</a></div><div class="ttdeci">void rb_check_safe_str(VALUE x)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00122">safe.c:122</a></div></div>
<div class="ttc" id="ruby_2ruby_8h_html_ad8603a60fefb7b6b74fea406244d277b"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#ad8603a60fefb7b6b74fea406244d277b">rb_check_safe_obj</a></div><div class="ttdeci">void rb_check_safe_obj(VALUE)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00113">safe.c:113</a></div></div>
<div class="ttc" id="tcltklib_8c_html_a6f520624fabb8332dc98fd223491bf8d"><div class="ttname"><a href="../../d5/d9d/tcltklib_8c.html#a6f520624fabb8332dc98fd223491bf8d">rb_safe_level</a></div><div class="ttdeci">#define rb_safe_level()</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d9d/tcltklib_8c_source.html#l00090">tcltklib.c:90</a></div></div>
<div class="ttc" id="ripper_8c_html_a877bc58c495643fcf49dc64c44631e72"><div class="ttname"><a href="../../d5/d11/ripper_8c.html#a877bc58c495643fcf49dc64c44631e72">rb_id2name</a></div><div class="ttdeci">const char * rb_id2name(ID id)</div><div class="ttdef"><b>Definition:</b> <a href="../../d5/d11/ripper_8c_source.html#l16362">ripper.c:16362</a></div></div>
<div class="ttc" id="structrb__thread__struct_html_adc5048ddde96e3ea2e6b22c3e58ce696"><div class="ttname"><a href="../../d2/d66/structrb__thread__struct.html#adc5048ddde96e3ea2e6b22c3e58ce696">rb_thread_struct::safe_level</a></div><div class="ttdeci">int safe_level</div><div class="ttdef"><b>Definition:</b> <a href="../../d8/d32/vm__core_8h_source.html#l00401">vm_core.h:401</a></div></div>
<div class="ttc" id="error_8c_html_afd461c64916576849b159b21a26123da"><div class="ttname"><a href="../../db/dcc/error_8c.html#afd461c64916576849b159b21a26123da">rb_warning</a></div><div class="ttdeci">void rb_warning(const char *fmt,...)</div><div class="ttdef"><b>Definition:</b> <a href="../../db/dcc/error_8c_source.html#l00212">error.c:212</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by  <a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.5
</small></address>
</body>
</html>