Linux heracles.o2switch.net 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64
/
opt
/
alt
/
ruby21
/
share
/
doc
/
ruby
/
capi
/
html
/
da
/
d2d
/
//opt/alt/ruby21/share/doc/ruby/capi/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.14"/> <meta name="viewport" content="width=device-width, initial-scale=1"/> <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 id="projectalign" style="padding-left: 0.5em;"> <div id="projectname">Ruby  <span id="projectnumber">2.1.10p492(2016-04-01revision54464)</span> </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.14 --> <script type="text/javascript" src="../../menudata.js"></script> <script type="text/javascript" src="../../menu.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(function() { initMenu('../../',false,false,'search.php','Search'); }); /* @license-end */</script> <div id="main-nav"></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: nobu $</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">*/</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> </div><div class="line"><a name="l00019"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#a7cf1dc7af55b073c766e27872f25c1c3"> 19</a></span> <span class="preprocessor">#define SAFE_LEVEL_MAX RUBY_SAFE_LEVEL_MAX</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> </div><div class="line"><a name="l00021"></a><span class="lineno"> 21</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="l00022"></a><span class="lineno"> 22</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="l00023"></a><span class="lineno"> 23</span> </div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">/* $SAFE accessor */</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#undef rb_secure</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#undef rb_set_safe_level</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#undef ruby_safe_level_4_warning</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="keywordtype">int</span></div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#a7667147d9b9db567040c009ac7313dac"> 31</a></span> <a class="code" href="../../da/d2d/safe_8c.html#a7667147d9b9db567040c009ac7313dac">ruby_safe_level_4_warning</a>(<span class="keywordtype">void</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="keywordflow">return</span> 4;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> }</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> <span class="keywordtype">int</span></div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#ab0c493934f850e8e533656b3ae640154"> 37</a></span> <a class="code" href="../../da/d2d/safe_8c.html#ab0c493934f850e8e533656b3ae640154">rb_safe_level</a>(<span class="keywordtype">void</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="keywordflow">return</span> <a class="code" href="../../d8/d32/vm__core_8h.html#aec678927729c3dcca12b2fae241158b0">GET_THREAD</a>()-><a class="code" href="../../d2/d66/structrb__thread__struct.html#adc5048ddde96e3ea2e6b22c3e58ce696">safe_level</a>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> }</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> <span class="keywordtype">void</span></div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#abff7d7eef2e9bf380a72a0844af0c960"> 43</a></span> <a class="code" href="../../da/d2d/safe_8c.html#abff7d7eef2e9bf380a72a0844af0c960">rb_set_safe_level_force</a>(<span class="keywordtype">int</span> safe)</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <a class="code" href="../../d8/d32/vm__core_8h.html#aec678927729c3dcca12b2fae241158b0">GET_THREAD</a>()-><a class="code" href="../../d2/d66/structrb__thread__struct.html#adc5048ddde96e3ea2e6b22c3e58ce696">safe_level</a> = safe;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</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> <span class="keywordtype">void</span></div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#a6a9d70420ad09052b04f8103796bb31d"> 49</a></span> <a class="code" href="../../da/d2d/safe_8c.html#a6a9d70420ad09052b04f8103796bb31d">rb_set_safe_level</a>(<span class="keywordtype">int</span> <a class="code" href="../../df/d38/vm__exec_8c.html">level</a>)</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>  <a class="code" href="../../d2/d66/structrb__thread__struct.html">rb_thread_t</a> *th = <a class="code" href="../../d8/d32/vm__core_8h.html#aec678927729c3dcca12b2fae241158b0">GET_THREAD</a>();</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <span class="keywordflow">if</span> (<a class="code" href="../../df/d38/vm__exec_8c.html">level</a> > th-><a class="code" href="../../d2/d66/structrb__thread__struct.html#adc5048ddde96e3ea2e6b22c3e58ce696">safe_level</a>) {</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">if</span> (<a class="code" href="../../df/d38/vm__exec_8c.html">level</a> > <a class="code" href="../../da/d2d/safe_8c.html#a7cf1dc7af55b073c766e27872f25c1c3">SAFE_LEVEL_MAX</a>) {</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="../../db/dcc/error_8c.html#a0f771a2840561f1838169b3d7d4616f3">rb_raise</a>(<a class="code" href="../../db/dcc/error_8c.html#ab5e2a9fec766c75176fbb262bfe6a596">rb_eArgError</a>, <span class="stringliteral">"$SAFE=4 is obsolete"</span>);</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>  th-><a class="code" href="../../d2/d66/structrb__thread__struct.html#adc5048ddde96e3ea2e6b22c3e58ce696">safe_level</a> = <a class="code" href="../../df/d38/vm__exec_8c.html">level</a>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> }</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="keyword">static</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a></div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#a769d8ca3b9b4c86cdb473ef7879bee92"> 62</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="l00063"></a><span class="lineno"> 63</span> {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordflow">return</span> <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a7bce65407b21f6812267e8d5426201f0">INT2NUM</a>(<a class="code" href="../../da/d2d/safe_8c.html#ab0c493934f850e8e533656b3ae640154">rb_safe_level</a>());</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="keyword">static</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#a0416993d3eb81f15ec19cd65a41c1069"> 68</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#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> <a class="code" href="../../df/d38/vm__exec_8c.html">val</a>)</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordtype">int</span> <a class="code" href="../../df/d38/vm__exec_8c.html">level</a> = <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a877c38180d23c5447d976c70dda89d69">NUM2INT</a>(<a class="code" href="../../df/d38/vm__exec_8c.html">val</a>);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <a class="code" href="../../d2/d66/structrb__thread__struct.html">rb_thread_t</a> *th = <a class="code" href="../../d8/d32/vm__core_8h.html#aec678927729c3dcca12b2fae241158b0">GET_THREAD</a>();</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordflow">if</span> (level < th->safe_level) {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</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="l00075"></a><span class="lineno"> 75</span>  <span class="stringliteral">"tried to downgrade safe level from %d to %d"</span>,</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  th-><a class="code" href="../../d2/d66/structrb__thread__struct.html#adc5048ddde96e3ea2e6b22c3e58ce696">safe_level</a>, <a class="code" href="../../df/d38/vm__exec_8c.html">level</a>);</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="keywordflow">if</span> (<a class="code" href="../../df/d38/vm__exec_8c.html">level</a> == 3) {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <a class="code" href="../../db/dcc/error_8c.html#afd461c64916576849b159b21a26123da">rb_warning</a>(<span class="stringliteral">"$SAFE=3 does no sandboxing"</span>);</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> (<a class="code" href="../../df/d38/vm__exec_8c.html">level</a> > <a class="code" href="../../da/d2d/safe_8c.html#a7cf1dc7af55b073c766e27872f25c1c3">SAFE_LEVEL_MAX</a>) {</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="../../db/dcc/error_8c.html#a0f771a2840561f1838169b3d7d4616f3">rb_raise</a>(<a class="code" href="../../db/dcc/error_8c.html#ab5e2a9fec766c75176fbb262bfe6a596">rb_eArgError</a>, <span class="stringliteral">"$SAFE=4 is obsolete"</span>);</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  th-><a class="code" href="../../d2/d66/structrb__thread__struct.html#adc5048ddde96e3ea2e6b22c3e58ce696">safe_level</a> = <a class="code" href="../../df/d38/vm__exec_8c.html">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> </div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00088"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#ac2e05133c9611b1515227e673dfa61a9"> 88</a></span> <a class="code" href="../../da/d2d/safe_8c.html#ac2e05133c9611b1515227e673dfa61a9">rb_secure</a>(<span class="keywordtype">int</span> <a class="code" href="../../df/d38/vm__exec_8c.html">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>  <span class="keywordflow">if</span> (<a class="code" href="../../df/d38/vm__exec_8c.html">level</a> <= <a class="code" href="../../da/d2d/safe_8c.html#ab0c493934f850e8e533656b3ae640154">rb_safe_level</a>()) {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <a class="code" href="../../de/de6/ruby_2ruby_8h.html#afa5b9137f051ac26d7ccc8824f178233">ID</a> caller_name = <a class="code" href="../../d3/d57/eval_8c.html#a16eb77144d8d67c75e6c321b3c0ea8a0">rb_frame_callee</a>();</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">if</span> (caller_name) {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</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="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="../../d5/d11/ripper_8c.html#a877bc58c495643fcf49dc64c44631e72">rb_id2name</a>(caller_name), <a class="code" href="../../da/d2d/safe_8c.html#ab0c493934f850e8e533656b3ae640154">rb_safe_level</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">else</span> {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</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="l00098"></a><span class="lineno"> 98</span>  <a class="code" href="../../da/d2d/safe_8c.html#ab0c493934f850e8e533656b3ae640154">rb_safe_level</a>());</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>  }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</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="keywordtype">void</span></div><div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#a07e4978ae540041dee1f0731a54c095a"> 104</a></span> <a class="code" href="../../da/d2d/safe_8c.html#a07e4978ae540041dee1f0731a54c095a">rb_secure_update</a>(<a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> obj)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> {</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> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#aa044289e0f51478acb5dcd2a7dcddc74"> 109</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="l00110"></a><span class="lineno"> 110</span> {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="../../de/de6/ruby_2ruby_8h.html#afa5b9137f051ac26d7ccc8824f178233">ID</a> caller_name = <a class="code" href="../../d3/d57/eval_8c.html#a16eb77144d8d67c75e6c321b3c0ea8a0">rb_frame_callee</a>();</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordflow">if</span> (caller_name) {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</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="l00114"></a><span class="lineno"> 114</span>  <a class="code" href="../../d5/d11/ripper_8c.html#a877bc58c495643fcf49dc64c44631e72">rb_id2name</a>(caller_name));</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keywordflow">else</span> {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</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="l00118"></a><span class="lineno"> 118</span>  }</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#a70e1d6fddfc0c801c1527aa1c3fc5cc3"> 122</a></span> <a class="code" href="../../da/d2d/safe_8c.html#a70e1d6fddfc0c801c1527aa1c3fc5cc3">rb_check_safe_obj</a>(<a class="code" href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">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>  <span class="keywordflow">if</span> (<a class="code" href="../../da/d2d/safe_8c.html#ab0c493934f850e8e533656b3ae640154">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="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="../../da/d2d/safe_8c.html#aa044289e0f51478acb5dcd2a7dcddc74">rb_insecure_operation</a>();</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> }</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> <span class="keywordtype">void</span></div><div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#a294b31f9a6cb4e8fc1e9d4e0796234b0"> 130</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#a3c1d4bfc6a81af60bdcb48744c35f760">VALUE</a> x)</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="../../da/d2d/safe_8c.html#a70e1d6fddfc0c801c1527aa1c3fc5cc3">rb_check_safe_obj</a>(x);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keywordflow">if</span> (!<a class="code" href="../../de/de6/ruby_2ruby_8h.html#ac4f895997656c2abd27a29a8b8e982ca">RB_TYPE_P</a>(x, <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a22a8c2a4bbaae9b68f65c9bb92fd4e39">T_STRING</a>)) {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</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="l00135"></a><span class="lineno"> 135</span>  <a class="code" href="../../de/de6/ruby_2ruby_8h.html#a9b4f42ada717bfbe7a78830639476aed">rb_obj_classname</a>(x));</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="keywordtype">void</span></div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="../../da/d2d/safe_8c.html#acbe1829460c81a046646ab4afd4b5228"> 140</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="l00141"></a><span class="lineno"> 141</span> {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</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="l00143"></a><span class="lineno"> 143</span> }</div><div class="ttc" id="safe_8c_html_a70e1d6fddfc0c801c1527aa1c3fc5cc3"><div class="ttname"><a href="../../da/d2d/safe_8c.html#a70e1d6fddfc0c801c1527aa1c3fc5cc3">rb_check_safe_obj</a></div><div class="ttdeci">void rb_check_safe_obj(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_a7bce65407b21f6812267e8d5426201f0"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#a7bce65407b21f6812267e8d5426201f0">INT2NUM</a></div><div class="ttdeci">#define INT2NUM(x)</div><div class="ttdef"><b>Definition:</b> <a href="../../de/de6/ruby_2ruby_8h_source.html#l01296">ruby.h:1296</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#l00616">variable.c:616</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#l00630">ruby.h:630</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#l00548">error.c:548</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#l01857">error.c:1857</a></div></div> <div class="ttc" id="safe_8c_html_a07e4978ae540041dee1f0731a54c095a"><div class="ttname"><a href="../../da/d2d/safe_8c.html#a07e4978ae540041dee1f0731a54c095a">rb_secure_update</a></div><div class="ttdeci">void rb_secure_update(VALUE obj)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00104">safe.c:104</a></div></div> <div class="ttc" id="safe_8c_html_abff7d7eef2e9bf380a72a0844af0c960"><div class="ttname"><a href="../../da/d2d/safe_8c.html#abff7d7eef2e9bf380a72a0844af0c960">rb_set_safe_level_force</a></div><div class="ttdeci">void rb_set_safe_level_force(int safe)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00043">safe.c:43</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#l00557">error.c:557</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#l00062">safe.c:62</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#l00524">vm_core.h:524</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#l01182">ruby.h:1182</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#l00406">variable.c:406</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#l00140">safe.c:140</a></div></div> <div class="ttc" id="ruby_2ruby_8h_html_ac4f895997656c2abd27a29a8b8e982ca"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#ac4f895997656c2abd27a29a8b8e982ca">RB_TYPE_P</a></div><div class="ttdeci">#define RB_TYPE_P(obj, type)</div><div class="ttdef"><b>Definition:</b> <a href="../../de/de6/ruby_2ruby_8h_source.html#l01672">ruby.h:1672</a></div></div> <div class="ttc" id="vm__exec_8c_html"><div class="ttname"><a href="../../df/d38/vm__exec_8c.html">level</a></div><div class="ttdeci">#define level</div></div> <div class="ttc" id="safe_8c_html_a7667147d9b9db567040c009ac7313dac"><div class="ttname"><a href="../../da/d2d/safe_8c.html#a7667147d9b9db567040c009ac7313dac">ruby_safe_level_4_warning</a></div><div class="ttdeci">int ruby_safe_level_4_warning(void)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00031">safe.c:31</a></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#l00019">safe.c:19</a></div></div> <div class="ttc" id="ruby_2ruby_8h_html_afa5b9137f051ac26d7ccc8824f178233"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#afa5b9137f051ac26d7ccc8824f178233">ID</a></div><div class="ttdeci">unsigned long ID</div><div class="ttdef"><b>Definition:</b> <a href="../../de/de6/ruby_2ruby_8h_source.html#l00089">ruby.h:89</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_a3c1d4bfc6a81af60bdcb48744c35f760"><div class="ttname"><a href="../../de/de6/ruby_2ruby_8h.html#a3c1d4bfc6a81af60bdcb48744c35f760">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="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#l00109">safe.c:109</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#l00949">eval.c:949</a></div></div> <div class="ttc" id="safe_8c_html_ab0c493934f850e8e533656b3ae640154"><div class="ttname"><a href="../../da/d2d/safe_8c.html#ab0c493934f850e8e533656b3ae640154">rb_safe_level</a></div><div class="ttdeci">int rb_safe_level(void)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00037">safe.c:37</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#l00068">safe.c:68</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#l00482">ruby.h:482</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#l00130">safe.c:130</a></div></div> <div class="ttc" id="safe_8c_html_a6a9d70420ad09052b04f8103796bb31d"><div class="ttname"><a href="../../da/d2d/safe_8c.html#a6a9d70420ad09052b04f8103796bb31d">rb_set_safe_level</a></div><div class="ttdeci">void rb_set_safe_level(int level)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00049">safe.c:49</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#l17271">ripper.c:17271</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#l00532">vm_core.h:532</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#l00236">error.c:236</a></div></div> <div class="ttc" id="safe_8c_html_ac2e05133c9611b1515227e673dfa61a9"><div class="ttname"><a href="../../da/d2d/safe_8c.html#ac2e05133c9611b1515227e673dfa61a9">rb_secure</a></div><div class="ttdeci">void rb_secure(int level)</div><div class="ttdef"><b>Definition:</b> <a href="../../da/d2d/safe_8c_source.html#l00088">safe.c:88</a></div></div> <div class="ttc" id="vm__core_8h_html_aec678927729c3dcca12b2fae241158b0"><div class="ttname"><a href="../../d8/d32/vm__core_8h.html#aec678927729c3dcca12b2fae241158b0">GET_THREAD</a></div><div class="ttdeci">static rb_thread_t * GET_THREAD(void)</div><div class="ttdef"><b>Definition:</b> <a href="../../d8/d32/vm__core_8h_source.html#l00929">vm_core.h:929</a></div></div> <div class="ttc" id="error_8c_html_ab5e2a9fec766c75176fbb262bfe6a596"><div class="ttname"><a href="../../db/dcc/error_8c.html#ab5e2a9fec766c75176fbb262bfe6a596">rb_eArgError</a></div><div class="ttdeci">VALUE rb_eArgError</div><div class="ttdef"><b>Definition:</b> <a href="../../db/dcc/error_8c_source.html#l00549">error.c:549</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.14 </small></address> </body> </html>