26 #include "dbus-address.h"
27 #include "dbus-internals.h"
28 #include "dbus-list.h"
29 #include "dbus-string.h"
30 #include "dbus-protocol.h"
66 const char *address_problem_type,
67 const char *address_problem_field,
68 const char *address_problem_other)
70 if (address_problem_type !=
NULL)
72 "Server address of type %s was missing argument %s",
73 address_problem_type, address_problem_field);
76 "Could not parse server address: %s",
77 address_problem_other);
84 #define _DBUS_ADDRESS_OPTIONALLY_ESCAPED_BYTE(b) \
85 (((b) >= 'a' && (b) <= 'z') || \
86 ((b) >= 'A' && (b) <= 'Z') || \
87 ((b) >= '0' && (b) <= '9') || \
107 const unsigned char *p;
108 const unsigned char *end;
115 p = _dbus_string_get_const_udata (unescaped);
193 for (i = 0; entries[i] !=
NULL; i++)
194 dbus_address_entry_free (entries[i]);
267 append_unescaped_value (
DBusString *unescaped,
280 end = p + escaped_len;
300 "In D-Bus address, percent character was not followed by two hex digits");
319 "In D-Bus address, percent character was followed by characters other than hex digits");
327 "In D-Bus address, character '%c' should have been escaped\n",
339 _DBUS_SET_OOM (error);
369 int pos, end_pos, len, i;
373 _DBUS_ASSERT_ERROR_IS_CLEAR (error);
384 "Empty address '%s'", address);
394 entry = create_entry ();
406 dbus_address_entry_free (entry);
429 while (pos < end_pos)
431 int comma_pos, equals_pos;
437 equals_pos == pos || equals_pos + 1 == comma_pos)
440 "'=' character not found or has no value following it");
494 if (!append_unescaped_value (value, &str, equals_pos + 1,
495 comma_pos - equals_pos - 1, error))
544 entry_array [*array_len] =
NULL;
550 entry_array[i] = link->
data;
556 *entry_result = entry_array;
565 dbus_address_entry_free (link->
data);
631 if (!append_unescaped_value (&unescaped, &escaped,
641 _DBUS_SET_OOM (error);
651 #ifdef DBUS_ENABLE_EMBEDDED_TESTS
653 #ifndef DOXYGEN_SHOULD_SKIP_THIS
655 #include "dbus-test.h"
661 const char *unescaped;
664 static const EscapeTest escape_tests[] = {
665 {
"abcde",
"abcde" },
670 {
"abc%24",
"abc$" },
671 {
"%24abc",
"$abc" },
672 {
"abc%24abc",
"abc$abc" },
683 {
"%c3%b6",
"\xc3\xb6" }
686 static const char* invalid_escaped_values[] = {
700 _dbus_address_test (
void)
710 const EscapeTest *test = &escape_tests[i];
718 if (strcmp (escaped, test->escaped) != 0)
720 _dbus_warn (
"Escaped '%s' as '%s' should have been '%s'",
721 test->unescaped, escaped, test->escaped);
727 if (unescaped ==
NULL)
735 if (strcmp (unescaped, test->unescaped) != 0)
737 _dbus_warn (
"Unescaped '%s' as '%s' should have been '%s'",
738 test->escaped, unescaped, test->unescaped);
753 if (unescaped !=
NULL)
755 _dbus_warn (
"Should not have successfully unescaped '%s' to '%s'",
756 invalid_escaped_values[i], unescaped);
768 &entries, &len, &error))