@@ -339,8 +339,9 @@ typedef bool (*CheckTypeCallback) (Local<Value>& value, const char* sig);
339
339
340
340
// Getting sub-signature object
341
341
dbus_signature_iter_recurse (&arraySiter, &dictSubSiter);
342
+ char *keySig = dbus_signature_iter_get_signature (&dictSubSiter);
342
343
dbus_signature_iter_next (&dictSubSiter);
343
- char *sig = dbus_signature_iter_get_signature (&dictSubSiter);
344
+ char *valSig = dbus_signature_iter_get_signature (&dictSubSiter);
344
345
345
346
// process each elements
346
347
Local<Array> prop_names = value_object->GetPropertyNames ();
@@ -362,13 +363,15 @@ typedef bool (*CheckTypeCallback) (Local<Value>& value, const char* sig);
362
363
Local<Value> prop_value = value_object->Get (prop_key);
363
364
364
365
// Append the key
365
- char *prop_key_str = strdup (*String::Utf8Value (prop_key->ToString ()));
366
- // printf("key: %s\n", prop_key_str);
367
- dbus_message_iter_append_basic (&dict_iter, DBUS_TYPE_STRING, &prop_key_str);
368
- dbus_free (prop_key_str);
366
+ if (!EncodeObject (prop_key, &dict_iter, keySig)) {
367
+ dbus_message_iter_close_container (&subIter, &dict_iter);
368
+ printf (" Failed to encode element of dictionary\n " );
369
+ failed = true ;
370
+ break ;
371
+ }
369
372
370
373
// Append the value
371
- if (!EncodeObject (prop_value, &dict_iter, sig )) {
374
+ if (!EncodeObject (prop_value, &dict_iter, valSig )) {
372
375
dbus_message_iter_close_container (&subIter, &dict_iter);
373
376
printf (" Failed to encode element of dictionary\n " );
374
377
failed = true ;
@@ -378,7 +381,8 @@ typedef bool (*CheckTypeCallback) (Local<Value>& value, const char* sig);
378
381
dbus_message_iter_close_container (&subIter, &dict_iter);
379
382
}
380
383
381
- dbus_free (sig);
384
+ dbus_free (keySig);
385
+ dbus_free (valSig);
382
386
dbus_message_iter_close_container (iter, &subIter);
383
387
384
388
if (failed)
0 commit comments