Skip to content

Check types of method/signal arguments and return values #118

Open
@mvidner

Description

@mvidner
Owner

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @mvidner

        Issue actions

          Check types of method/signal arguments and return values · Issue #118 · mvidner/ruby-dbus