[#390749] Why are there so many similar/identical methods in core classes — Kassym Dorsel <k.dorsel@...>

Let's look at the Array class and start with method aliases.

14 messages 2011/12/02

[#390755] Inverse Operation of Module#include — Su Zhang <su.comp.lang.ruby@...>

Hi list,

21 messages 2011/12/02
[#390759] Re: Inverse Operation of Module#include — Ryan Davis <ryand-ruby@...> 2011/12/02

[#390764] Re: Inverse Operation of Module#include — Isaac Sanders <isaacbfsanders@...> 2011/12/02

I would suggest an Adapter pattern use here. IF there is something that has

[#390876] black magical hash element vivification — Chad Perrin <code@...>

Ruby (1.9.3p0 to be precise, installed with RVM) is not behaving as I

12 messages 2011/12/05

[#390918] WEB SURVEY about Ruby Community — Intransition <transfire@...>

Did any one else get this survey request?

14 messages 2011/12/07

[#390976] Confusing results from string multiplication — Rob Marshall <robmarshall@...>

Hi,

19 messages 2011/12/08

[#391019] How can I do h["foo"] += "bar" if h["foo"] does not exist? — "Andrew S." <andrewinfosec@...>

Hi there,

13 messages 2011/12/09

[#391027] reading from file without end-of-lines — Janko Muzykant <umrzykus@...>

hi,

20 messages 2011/12/09
[#391028] Re: reading from file without end-of-lines — Gavin Sinclair <gsinclair@...> 2011/12/09

> i'm trying to read a few text values from single file:

[#391031] Re: reading from file without end-of-lines — Robert Klemme <shortcutter@...> 2011/12/09

On Fri, Dec 9, 2011 at 9:58 AM, Gavin Sinclair <gsinclair@gmail.com> wrote:

[#391042] Re: reading from file without end-of-lines — Gavin Sinclair <gsinclair@...> 2011/12/09

On Fri, Dec 9, 2011 at 8:18 PM, Robert Klemme

[#391135] I need advice on what to do next. — Nathan Kossaeth <system_freak_2004@...>

I am new to programming. I read the ebook "Learn to Program" by Chris

23 messages 2011/12/12

[#391216] perf optimization using profile results — Chuck Remes <cremes.devlist@...>

I need some help with optimizing a set of libraries that I use. They are ffi-rzmq, zmqmachine and rzmq_brokers (all up on github).

13 messages 2011/12/13
[#391218] Re: perf optimization using profile results — Chuck Remes <cremes.devlist@...> 2011/12/13

On Dec 13, 2011, at 9:57 AM, Chuck Remes wrote:

[#391234] Re: perf optimization using profile results — Charles Oliver Nutter <headius@...> 2011/12/14

A couple quick observations.

[#391238] Re: perf optimization using profile results — Chuck Remes <cremes.devlist@...> 2011/12/14

On Dec 13, 2011, at 7:03 PM, Charles Oliver Nutter wrote:

[#391324] ruby 1.9 threading performance goes non-linear — Joel VanderWerf <joelvanderwerf@...>

12 messages 2011/12/16
[#391325] Re: ruby 1.9 threading performance goes non-linear — Eric Wong <normalperson@...> 2011/12/16

Joel VanderWerf <joelvanderwerf@gmail.com> wrote:

[#391420] Accessing class instance variables from an instance? — "Shareef J." <shareef@...>

Hi there,

26 messages 2011/12/20
[#391454] Re: Accessing class instance variables from an instance? — Khat Harr <myphatproxy@...> 2011/12/21

Actually, now that I'm thinking about it the existing behavior sort of

[#391456] Re: Accessing class instance variables from an instance? — Josh Cheek <josh.cheek@...> 2011/12/21

On Tue, Dec 20, 2011 at 9:42 PM, Khat Harr <myphatproxy@hotmail.com> wrote:

[#391545] Kernel#exit raises an exception? — Khat Harr <myphatproxy@...>

While I was working on embedding an interpreter I wrote a function to

13 messages 2011/12/24

[#391618] rvmsh: An easy installer for RVM — Bryan Dunsmore <dunsmoreb@...>

I have recently begun work on a project called [rvmsh]

12 messages 2011/12/29

[#391783] Mailspam — Gunther Diemant <g.diemant@...>

Is there a way to stop this mailspam of Luca (Mail)?

12 messages 2011/12/29

[#391790] What’s the standard way of implementing #hash for value objects in Ruby? — Nikolai Weibull <now@...>

Hi!

23 messages 2011/12/29
[#391792] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Gunther Diemant <g.diemant@...> 2011/12/29

I think you can't access instance variables from a class method, so

[#391793] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Nikolai Weibull <now@...> 2011/12/29

On Thu, Dec 29, 2011 at 15:52, Gunther Diemant <g.diemant@gmx.net> wrote:

[#391811] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Robert Klemme <shortcutter@...> 2011/12/29

On Thu, Dec 29, 2011 at 4:06 PM, Nikolai Weibull <now@bitwi.se> wrote:

[#391812] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Nikolai Weibull <now@...> 2011/12/29

On Fri, Dec 30, 2011 at 00:26, Robert Klemme <shortcutter@googlemail.com> w=

[#391816] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Josh Cheek <josh.cheek@...> 2011/12/30

On Thu, Dec 29, 2011 at 5:47 PM, Nikolai Weibull <now@bitwi.se> wrote:

[#391833] Re: What’s the standard way of implementing #hash for value objects in Ruby? — Robert Klemme <shortcutter@...> 2011/12/30

On Fri, Dec 30, 2011 at 12:47 AM, Nikolai Weibull <now@bitwi.se> wrote:

Ruby, SAFE, method interception, and plugins

From: Garthy D <garthy_lmkltybr@...>
Date: 2011-12-18 08:16:12 UTC
List: ruby-talk #391359
Hi all,

I am working on an embedded Ruby application that may support 
user-written Ruby plugins in the future, and I am trying to get a rough 
idea as to what is and isn't possible, as it will affect the design I go 
with. Basically, if you've worked on such a thing before, please share 
your experiences. :)

The ideal in my case is that the app will load in user-written Ruby code 
as a plugin, and the plugin author can interact with the rest of the 
code via a predefined and restricted set of objects and methods, but 
cannot mess with things outside of its environment, and especially not 
start exploring outside that environment in any way. I want to be able 
to completely lock the user out of using certain objects or classes.

Having not done anything like this in Ruby before, I'm trying to get a 
feel as to what might be possible and practical.

For example, many of the criteria in a $SAFE level of 4 seem appropriate 
to me- although what I'm really after is a way to lock things up, call 
some user code, and then revert back to a normal $SAFE level. It looks 
like the only way this could really be done though is to launch the 
plugin in its own (Ruby) thread and handle any synchronisation issues 
arising from it myself. Is this right?

Being able to set up my own access control by intercepting every method 
call made by the plugin would also be useful. I could then, for example, 
have a set of testing criteria that I could use on each method call to 
determine if it should be allowed (for example, class whitelists). I 
wonder if I could set up a series of proxy objects for objects that I'd 
like to wrap, but I wouldn't want a plugin author to use those proxy 
classes to get at the original objects, and mess with them directly. The 
interface could be as thin as two objects- an application object that 
you send messages to, and a plugin base object that the plugin uses to 
receive messages from the application. In this case I'd like the user to 
be able to create their own classes, manipulate strings and arrays (for 
example), but not interact with any of the remaining Ruby code at all, 
and certainly not examine it in any way.

As some app users might run plugins other app users have written, being 
able to limit the damage they can cause is also important. I'm not 
fussed if certain operations could cause a denial of service (eg. just 
run "while true; end"), as the environment would be such that the 
affected user could just kill the process and disable the plugin- it's 
not a web server. I *would* be fussed though if the plugin was able to 
read and write files to the system directly, or cause lasting damage 
outside of the application itself.

As you can tell, my thoughts on the subject are still somewhat 
disorganised. I'm trying to determine roughly which parts of this 
infrastructure would be easy, difficult, or impossible to implement. I 
would greatly benefit from the thoughts and experiences of people who 
have been down this road before. If you can find the time, please share 
your experiences, and let me know what worked, and what did not.

Thanks in advance, apologies for the long, rambling question. :)

Garth

In This Thread

Prev Next