ruby-dbus icon indicating copy to clipboard operation
ruby-dbus copied to clipboard

Check types of method/signal arguments and return values

Open mvidner opened this issue 3 years ago • 0 comments

Both at the client and service side we should add type checking of method arguments and return values

(This is related to #97 which was specifically about properties)

  1. Client method arguments, emitting signals: trying to use a string instead of an integer, or the other way around, will raise an exception before the bus sees the wrong type, but the exception is an implementation accident. It should be an explicit

    type A was expected but type B was seen, in argument foo

    (the the method and interface names will be easily seen from the backtrace)

  2. Client return values: not trying to catch confused/malicious services for now

  3. Service method arguments: this should be avoided by client libraries paying attention to introspection data and doing their own type checking (see (1)), but it is relatively easy to send a mistyped call. Here an example of passing an integer where a string is expected, the caller gets to see an exception caused by the wrong type:

    $ dbus-send --print-reply --session --dest=org.ruby.service /org/ruby/MyInstance org.ruby.AnotherInterface.Reverse uint32:42 
    Error org.freedesktop.DBus.Error.Failed: undefined method `split' for 42:Integer
    
         outstr = instr.split(//).reverse.join
                        ^^^^^^; caused by 1 sender=:1.1226 -> dest=org.ruby.service serial=2 reply_serial= path=/org/ruby/MyInstance;  interface=org.ruby.AnotherInterface; member=Reverse error_name=
    

    TODO: find a well known error name+format for type errors

    Listening for signals: what if someone sends a mistyped signal? Could be even pretty easy if the listener filters only on interface and not a well-known sender

    Properties.Set with a wrong type: I know I said this was about methods, not properties, but I think this check is still missing :-(

  4. Service return values: similar to (1)

mvidner avatar Jul 19 '22 13:07 mvidner