exception when calling dbus method that returns dictionary<string, dictionary<string,object>>

Bug #385254 reported by Kevron Rees
14
This bug affects 3 people
Affects Status Importance Assigned to Milestone
NDesk D-Bus
New
Undecided
Unassigned

Bug Description

I get this exception when trying to get a call that returns a Dictionary<string,Dictionary<string,object>>:

Unhandled Exception: System.IndexOutOfRangeException: Array index is out of range.
  at NDesk.DBus.MessageReader.MarshalUInt (System.Byte* dst) [0x00017] in /build/buildd/ndesk-dbus-0.6.0/src/MessageReader.cs:195
  at NDesk.DBus.MessageReader.ReadInt32 () [0x00000] in /build/buildd/ndesk-dbus-0.6.0/src/MessageReader.cs:213
  at NDesk.DBus.MessageReader.ReadValue (DType dtype) [0x000a0] in /build/buildd/ndesk-dbus-0.6.0/src/MessageReader.cs:95
  at NDesk.DBus.MessageReader.ReadValue (System.Type type) [0x0011d] in /build/buildd/ndesk-dbus-0.6.0/src/MessageReader.cs:68
  at NDesk.DBus.MessageReader.ReadStruct (System.Type type) [0x0002b] in /build/buildd/ndesk-dbus-0.6.0/src/MessageReader.cs:410
  at NDesk.DBus.MessageReader.ReadValue (System.Type type) [0x0010d] in /build/buildd/ndesk-dbus-0.6.0/src/MessageReader.cs:64
  at NDesk.DBus.MessageReader.ReadArray (System.Type elemType) [0x000b2] in /build/buildd/ndesk-dbus-0.6.0/src/MessageReader.cs:374
  at NDesk.DBus.MessageReader.ReadValue (System.Type type) [0x0001d] in /build/buildd/ndesk-dbus-0.6.0/src/MessageReader.cs:44
  at NDesk.DBus.MessageReader.ReadStruct (System.Type type) [0x0002b] in /build/buildd/ndesk-dbus-0.6.0/src/MessageReader.cs:410
  at NDesk.DBus.MessageReader.ReadValue (System.Type type) [0x0010d] in /build/buildd/ndesk-dbus-0.6.0/src/MessageReader.cs:64
  at NDesk.DBus.MessageHelper.GetDynamicValues (NDesk.DBus.Message msg, System.Type[] types) [0x00086] in /build/buildd/ndesk-dbus-0.6.0/src/Mapper.cs:289
  at NDesk.DBus.BusObject.SendMethodCall (System.String iface, System.String member, System.String inSigStr, NDesk.DBus.MessageWriter writer, System.Type retType, System.Exception& exception) [0x000b5] in /build/buildd/ndesk-dbus-0.6.0/src/BusObject.cs:149
  at INetworkManagerSettingsConnectionProxy.GetSettings () [0x00000]
  at testNMDbus.MainClass.Main (System.String[] args) [0x00010] in /home/kev/Projects/VTel/GPS/GPSLocationAssistant/testNMDbus/Main.cs:15

The dbus method is from org.freedesktop.NetworkManagerSettings.Connection. I generated the c# interface from DBus-explorer.

Revision history for this message
Kevron Rees (tripzero) wrote :

Example code to reproduce the bug:

using System;
using System.Collections.Generic;
using NDesk.DBus;

namespace testNMDbus
{
 public class NetworkManagerSettings
 {
  private INetworkManagerSettings nms;
  private Connection DBusConnection;
  public NetworkManagerSettings()
  {
   DBusConnection = Bus.System;
   nms = DBusConnection.GetObject<INetworkManagerSettings>("org.freedesktop.NetworkManagerUserSettings", new ObjectPath("/org/freedesktop/NetworkManagerSettings"));
  }

  public ObjectPath[] ListConnections()
  {
   return nms.ListConnections();
  }
 }

 [Interface("org.freedesktop.NetworkManagerSettings")]
 public interface INetworkManagerSettings
 {
     ObjectPath[] ListConnections();
 }

 public delegate void UpdatedSettingsHandler(Dictionary<string, Dictionary<string, object>> properties);

 public class NetworkManagerSettingsConnection
 {
  private Connection DBusConnection;
  public INetworkManagerSettingsConnection nmsc;
  public NetworkManagerSettingsConnection(ObjectPath connectionPath)
  {
   DBusConnection = Bus.System;
   nmsc = DBusConnection.GetObject<INetworkManagerSettingsConnection>("org.freedesktop.NetworkManagerUserSettings", connectionPath);
  }
 }

 [Interface("org.freedesktop.NetworkManagerSettings.Connection")]
 public interface INetworkManagerSettingsConnection
 {
     Dictionary<string, Dictionary<string, object>> GetSettings();
     void Delete();
     void Update(Dictionary<string, Dictionary<string, object>> properties);
     event EventHandler Removed;
     event UpdatedSettingsHandler Updated;

 }

 class MainClass
 {
  public static void Main(string[] args)
  {
   NetworkManagerSettingsConnection connection = new NetworkManagerSettingsConnection(new ObjectPath("/org/freedesktop/NetworkManagerSettings/10"));

   Dictionary<string,Dictionary<string,object>> settings = connection.nmsc.GetSettings();

   foreach(string key in settings.Keys)
   {
    Console.WriteLine(key+":");
    foreach(string setting in settings[key].Keys)
    {
     object value = settings[key][setting];
     Console.WriteLine("\t"+setting+" = "+value.ToString());
    }
   }
  }
 }
}

Revision history for this message
Kevron Rees (tripzero) wrote :

This appears to be fixed in the git version.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.