1d012387afef0ba02185ebe27bc6bb15551912e92Havoc Pennington/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington/* dbus-marshal-validate-util.c Would be in dbus-marshal-validate.c, but only used by tests/bus
3382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington *
4382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington * Copyright (C) 2005 Red Hat, Inc.
5382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington *
6382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington * Licensed under the Academic Free License version 2.1
7382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington *
8382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington * This program is free software; you can redistribute it and/or modify
9382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington * it under the terms of the GNU General Public License as published by
10382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington * the Free Software Foundation; either version 2 of the License, or
11382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington * (at your option) any later version.
12382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington *
13382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington * This program is distributed in the hope that it will be useful,
14382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington * but WITHOUT ANY WARRANTY; without even the implied warranty of
15382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington * GNU General Public License for more details.
17382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington *
18382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington * You should have received a copy of the GNU General Public License
19382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington * along with this program; if not, write to the Free Software
205baf2f856a9c6625993234855b07680da1c8916fTobias Mueller * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
21382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington *
22382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington */
23382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
24382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington#include <config.h>
25382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington#ifdef DBUS_BUILD_TESTS
2615ef0ef6fbba7827453b7973e62b6c1853576601Havoc Pennington
2715ef0ef6fbba7827453b7973e62b6c1853576601Havoc Pennington#ifndef DOXYGEN_SHOULD_SKIP_THIS
2815ef0ef6fbba7827453b7973e62b6c1853576601Havoc Pennington
29382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington#include "dbus-internals.h"
30382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington#include "dbus-marshal-validate.h"
31382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington#include "dbus-marshal-recursive.h"
32382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
33382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington#include "dbus-test.h"
34382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington#include <stdio.h>
35382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
36382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Penningtontypedef struct
37382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington{
38382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  const char *data;
39382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  DBusValidity expected;
40382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington} ValidityTest;
41382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
42382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Penningtonstatic void
43382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Penningtonrun_validity_tests (const ValidityTest *tests,
44382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                    int                 n_tests,
45382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                    DBusValidity (* func) (const DBusString*,int,int))
46382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington{
47382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  int i;
48382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
49382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  for (i = 0; i < n_tests; i++)
50382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    {
51382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      DBusString str;
52382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      DBusValidity v;
53382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
54382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_string_init_const (&str, tests[i].data);
55382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
56382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      v = (*func) (&str, 0, _dbus_string_get_length (&str));
57382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
58382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      if (v != tests[i].expected)
59382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        {
60382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_warn ("Improper validation result %d for '%s'\n",
61382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                      v, tests[i].data);
62382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_assert_not_reached ("test failed");
63382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        }
64382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
65382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      ++i;
66382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    }
67382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington}
68382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
69382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Penningtonstatic const ValidityTest signature_tests[] = {
70382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "", DBUS_VALID },
71382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "i", DBUS_VALID },
72382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "ai", DBUS_VALID },
73382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "(i)", DBUS_VALID },
743ed9db546e1143bc9aa2d83a6f423fdd81227352Havoc Pennington  { "w", DBUS_INVALID_UNKNOWN_TYPECODE },
75382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "a", DBUS_INVALID_MISSING_ARRAY_ELEMENT_TYPE },
76382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "aaaaaa", DBUS_INVALID_MISSING_ARRAY_ELEMENT_TYPE },
77382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "ii(ii)a", DBUS_INVALID_MISSING_ARRAY_ELEMENT_TYPE },
78382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "ia", DBUS_INVALID_MISSING_ARRAY_ELEMENT_TYPE },
79382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  /* DBUS_INVALID_SIGNATURE_TOO_LONG, */ /* too hard to test this way */
80382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
81382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    DBUS_INVALID_EXCEEDED_MAXIMUM_ARRAY_RECURSION },
82382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((ii))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))",
83382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    DBUS_INVALID_EXCEEDED_MAXIMUM_STRUCT_RECURSION },
84382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { ")", DBUS_INVALID_STRUCT_ENDED_BUT_NOT_STARTED },
85382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "i)", DBUS_INVALID_STRUCT_ENDED_BUT_NOT_STARTED },
86382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "a)", DBUS_INVALID_STRUCT_ENDED_BUT_NOT_STARTED },
87382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "(", DBUS_INVALID_STRUCT_STARTED_BUT_NOT_ENDED },
88382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "(i", DBUS_INVALID_STRUCT_STARTED_BUT_NOT_ENDED },
89382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "(iiiii", DBUS_INVALID_STRUCT_STARTED_BUT_NOT_ENDED },
90382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "(ai", DBUS_INVALID_STRUCT_STARTED_BUT_NOT_ENDED },
91382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "()", DBUS_INVALID_STRUCT_HAS_NO_FIELDS },
92382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "(())", DBUS_INVALID_STRUCT_HAS_NO_FIELDS },
93382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "a()", DBUS_INVALID_STRUCT_HAS_NO_FIELDS },
94382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  { "i()", DBUS_INVALID_STRUCT_HAS_NO_FIELDS },
950e53d4eed36f378e99802e516fbb0d1355641902Havoc Pennington  { "()i", DBUS_INVALID_STRUCT_HAS_NO_FIELDS },
960e53d4eed36f378e99802e516fbb0d1355641902Havoc Pennington  { "(a)", DBUS_INVALID_MISSING_ARRAY_ELEMENT_TYPE },
970e53d4eed36f378e99802e516fbb0d1355641902Havoc Pennington  { "a{ia}", DBUS_INVALID_MISSING_ARRAY_ELEMENT_TYPE },
9871f3b461b371d6bf7c7bc4e92578420b78d5c0d8Havoc Pennington  { "a{}", DBUS_INVALID_DICT_ENTRY_HAS_NO_FIELDS },
9971f3b461b371d6bf7c7bc4e92578420b78d5c0d8Havoc Pennington  { "a{aii}", DBUS_INVALID_DICT_KEY_MUST_BE_BASIC_TYPE },
1000e53d4eed36f378e99802e516fbb0d1355641902Havoc Pennington  /* { "a{i}", DBUS_INVALID_DICT_ENTRY_HAS_ONLY_ONE_FIELD }, */
1010e53d4eed36f378e99802e516fbb0d1355641902Havoc Pennington  /* { "{is}", DBUS_INVALID_DICT_ENTRY_NOT_INSIDE_ARRAY }, */
1020e53d4eed36f378e99802e516fbb0d1355641902Havoc Pennington  /* { "a{isi}", DBUS_INVALID_DICT_ENTRY_HAS_TOO_MANY_FIELDS }, */
103382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington};
104382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
105382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Penningtondbus_bool_t
106382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington_dbus_marshal_validate_test (void)
107382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington{
108382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  DBusString str;
109382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  int i;
110382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
111382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  const char *valid_paths[] = {
112382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "/",
113382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "/foo/bar",
114382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "/foo",
115382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "/foo/bar/baz"
116382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  };
117382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  const char *invalid_paths[] = {
118382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "bar",
119382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "bar/baz",
120382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "/foo/bar/",
121382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "/foo/"
122382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "foo/",
123382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "boo//blah",
124382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "//",
125382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "///",
126382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "foo///blah/",
127382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "Hello World",
128382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "",
129382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "   ",
130382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "foo bar"
131382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  };
132382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
133382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  const char *valid_interfaces[] = {
134382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "org.freedesktop.Foo",
135382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "Bar.Baz",
136382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "Blah.Blah.Blah.Blah.Blah",
137382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "a.b",
138382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "a.b.c.d.e.f.g",
139382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "a0.b1.c2.d3.e4.f5.g6",
140382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "abc123.foo27"
141382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  };
142382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  const char *invalid_interfaces[] = {
143382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ".",
144382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "",
145382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "..",
146382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ".Foo.Bar",
147382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "..Foo.Bar",
148382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "Foo.Bar.",
149382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "Foo.Bar..",
150382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "Foo",
151382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "9foo.bar.baz",
152382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "foo.bar..baz",
153382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "foo.bar...baz",
154382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "foo.bar.b..blah",
155382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":",
156382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":0-1",
157382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "10",
158382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":11.34324",
159382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "0.0.0",
160382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "0..0",
161382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "foo.Bar.%",
162382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "foo.Bar!!",
163382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "!Foo.bar.bz",
164382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "foo.$.blah",
165382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "",
166382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "   ",
167382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "foo bar"
168382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  };
169382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
170382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  const char *valid_unique_names[] = {
171382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":0",
172382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":a",
173382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":",
174382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":.a",
175382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":.1",
176382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":0.1",
177382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":000.2222",
178382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":.blah",
179382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":abce.freedesktop.blah"
180382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  };
181382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  const char *invalid_unique_names[] = {
18286b9f6ad4a6f466e24b5e4c1c320029041c50e3bJohn (J    //":-",
183382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":!",
18486b9f6ad4a6f466e24b5e4c1c320029041c50e3bJohn (J    //":0-10",
185382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":blah.",
186382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":blah.",
187382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":blah..org",
188382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":blah.org..",
189382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ":..blah.org",
190382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "",
191382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "   ",
192382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "foo bar"
193382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  };
194382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
195382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  const char *valid_members[] = {
196382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "Hello",
197382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "Bar",
198382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "foobar",
199382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "_foobar",
200382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "foo89"
201382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  };
202382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
203382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  const char *invalid_members[] = {
204382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "9Hello",
205382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "10",
206382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "1",
207382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "foo-bar",
208382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "blah.org",
209382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ".blah",
210382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "blah.",
211382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "Hello.",
212382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "!foo",
213382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "",
214382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "   ",
215382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "foo bar"
216382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  };
217382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
218382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  const char *valid_signatures[] = {
219382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "",
220382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "sss",
221382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "i",
222382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "b"
223382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  };
224382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
225382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  const char *invalid_signatures[] = {
226382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    " ",
227382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "not a valid signature",
228382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    "123",
229382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    ".",
230e8f8c1c5a2bddfbf43c168323c9c9fd78f51a643Colin Walters    "(",
2317b10b46c5c8658449783ce45f1273dd35c353bceColin Walters    "a{(ii)i}" /* https://bugs.freedesktop.org/show_bug.cgi?id=17803 */
232382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  };
233382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
234382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  /* Signature with reason */
235382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
236382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  run_validity_tests (signature_tests, _DBUS_N_ELEMENTS (signature_tests),
237382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                      _dbus_validate_signature_with_reason);
238382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
239382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  /* Path validation */
240382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  i = 0;
241382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (i < (int) _DBUS_N_ELEMENTS (valid_paths))
242382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    {
243382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_string_init_const (&str, valid_paths[i]);
244382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
245382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      if (!_dbus_validate_path (&str, 0,
246382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                _dbus_string_get_length (&str)))
247382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        {
248382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_warn ("Path \"%s\" should have been valid\n", valid_paths[i]);
249382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_assert_not_reached ("invalid path");
250382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        }
251382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
252382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      ++i;
253382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    }
254382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
255382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  i = 0;
256382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (i < (int) _DBUS_N_ELEMENTS (invalid_paths))
257382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    {
258382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_string_init_const (&str, invalid_paths[i]);
259382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
260382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      if (_dbus_validate_path (&str, 0,
261382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                               _dbus_string_get_length (&str)))
262382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        {
263382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_warn ("Path \"%s\" should have been invalid\n", invalid_paths[i]);
264382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_assert_not_reached ("valid path");
265382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        }
266382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
267382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      ++i;
268382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    }
269382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
270382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  /* Interface validation */
271382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  i = 0;
272382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (i < (int) _DBUS_N_ELEMENTS (valid_interfaces))
273382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    {
274382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_string_init_const (&str, valid_interfaces[i]);
275382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
276382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      if (!_dbus_validate_interface (&str, 0,
277382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                     _dbus_string_get_length (&str)))
278382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        {
279382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_warn ("Interface \"%s\" should have been valid\n", valid_interfaces[i]);
280382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_assert_not_reached ("invalid interface");
281382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        }
282382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
283382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      ++i;
284382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    }
285382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
286382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  i = 0;
287382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (i < (int) _DBUS_N_ELEMENTS (invalid_interfaces))
288382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    {
289382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_string_init_const (&str, invalid_interfaces[i]);
290382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
291382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      if (_dbus_validate_interface (&str, 0,
292382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                    _dbus_string_get_length (&str)))
293382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        {
294382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_warn ("Interface \"%s\" should have been invalid\n", invalid_interfaces[i]);
295382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_assert_not_reached ("valid interface");
296382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        }
297382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
298382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      ++i;
299382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    }
300382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
301382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  /* Bus name validation (check that valid interfaces are valid bus names,
302382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington   * and invalid interfaces are invalid services except if they start with ':')
303382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington   */
304382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  i = 0;
305382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (i < (int) _DBUS_N_ELEMENTS (valid_interfaces))
306382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    {
307382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_string_init_const (&str, valid_interfaces[i]);
308382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
309382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      if (!_dbus_validate_bus_name (&str, 0,
310382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                   _dbus_string_get_length (&str)))
311382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        {
312382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_warn ("Bus name \"%s\" should have been valid\n", valid_interfaces[i]);
313382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_assert_not_reached ("invalid bus name");
314382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        }
315382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
316382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      ++i;
317382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    }
318382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
319382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  i = 0;
320382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (i < (int) _DBUS_N_ELEMENTS (invalid_interfaces))
321382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    {
322382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      if (invalid_interfaces[i][0] != ':')
323382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        {
324382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_string_init_const (&str, invalid_interfaces[i]);
325382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
326382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          if (_dbus_validate_bus_name (&str, 0,
327382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                       _dbus_string_get_length (&str)))
328382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington            {
329382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington              _dbus_warn ("Bus name \"%s\" should have been invalid\n", invalid_interfaces[i]);
330382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington              _dbus_assert_not_reached ("valid bus name");
331382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington            }
332382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        }
333382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
334382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      ++i;
335382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    }
336382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
337382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  /* unique name validation */
338382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  i = 0;
339382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (i < (int) _DBUS_N_ELEMENTS (valid_unique_names))
340382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    {
341382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_string_init_const (&str, valid_unique_names[i]);
342382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
343382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      if (!_dbus_validate_bus_name (&str, 0,
344382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                    _dbus_string_get_length (&str)))
345382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        {
346382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_warn ("Bus name \"%s\" should have been valid\n", valid_unique_names[i]);
347382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_assert_not_reached ("invalid unique name");
348382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        }
349382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
350382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      ++i;
351382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    }
352382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
353382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  i = 0;
354382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (i < (int) _DBUS_N_ELEMENTS (invalid_unique_names))
355382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    {
356382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_string_init_const (&str, invalid_unique_names[i]);
357382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
358382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      if (_dbus_validate_bus_name (&str, 0,
359382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                   _dbus_string_get_length (&str)))
360382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        {
361382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_warn ("Bus name \"%s\" should have been invalid\n", invalid_unique_names[i]);
362382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_assert_not_reached ("valid unique name");
363382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        }
364382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
365382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      ++i;
366382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    }
367382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
368382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
369382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  /* Error name validation (currently identical to interfaces)
370382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington   */
371382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  i = 0;
372382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (i < (int) _DBUS_N_ELEMENTS (valid_interfaces))
373382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    {
374382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_string_init_const (&str, valid_interfaces[i]);
375382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
376382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      if (!_dbus_validate_error_name (&str, 0,
377382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                      _dbus_string_get_length (&str)))
378382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        {
379382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_warn ("Error name \"%s\" should have been valid\n", valid_interfaces[i]);
380382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_assert_not_reached ("invalid error name");
381382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        }
382382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
383382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      ++i;
384382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    }
385382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
386382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  i = 0;
387382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (i < (int) _DBUS_N_ELEMENTS (invalid_interfaces))
388382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    {
389382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      if (invalid_interfaces[i][0] != ':')
390382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        {
391382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_string_init_const (&str, invalid_interfaces[i]);
392382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
393382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          if (_dbus_validate_error_name (&str, 0,
394382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                         _dbus_string_get_length (&str)))
395382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington            {
396382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington              _dbus_warn ("Error name \"%s\" should have been invalid\n", invalid_interfaces[i]);
397382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington              _dbus_assert_not_reached ("valid error name");
398382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington            }
399382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        }
400382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
401382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      ++i;
402382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    }
403382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
404382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  /* Member validation */
405382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  i = 0;
406382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (i < (int) _DBUS_N_ELEMENTS (valid_members))
407382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    {
408382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_string_init_const (&str, valid_members[i]);
409382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
410382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      if (!_dbus_validate_member (&str, 0,
411382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                  _dbus_string_get_length (&str)))
412382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        {
413382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_warn ("Member \"%s\" should have been valid\n", valid_members[i]);
414382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_assert_not_reached ("invalid member");
415382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        }
416382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
417382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      ++i;
418382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    }
419382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
420382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  i = 0;
421382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (i < (int) _DBUS_N_ELEMENTS (invalid_members))
422382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    {
423382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_string_init_const (&str, invalid_members[i]);
424382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
425382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      if (_dbus_validate_member (&str, 0,
426382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                 _dbus_string_get_length (&str)))
427382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        {
428382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_warn ("Member \"%s\" should have been invalid\n", invalid_members[i]);
429382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_assert_not_reached ("valid member");
430382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        }
431382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
432382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      ++i;
433382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    }
434382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
435382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  /* Signature validation */
436382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  i = 0;
437382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (i < (int) _DBUS_N_ELEMENTS (valid_signatures))
438382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    {
439382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_string_init_const (&str, valid_signatures[i]);
440382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
441382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      if (!_dbus_validate_signature (&str, 0,
442382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                     _dbus_string_get_length (&str)))
443382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        {
444382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_warn ("Signature \"%s\" should have been valid\n", valid_signatures[i]);
445382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_assert_not_reached ("invalid signature");
446382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        }
447382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
448382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      ++i;
449382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    }
450382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
451382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  i = 0;
452382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (i < (int) _DBUS_N_ELEMENTS (invalid_signatures))
453382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    {
454382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_string_init_const (&str, invalid_signatures[i]);
455382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
456382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      if (_dbus_validate_signature (&str, 0,
457382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                    _dbus_string_get_length (&str)))
458382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        {
459382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_warn ("Signature \"%s\" should have been invalid\n", invalid_signatures[i]);
460382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          _dbus_assert_not_reached ("valid signature");
461382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        }
462382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
463382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      ++i;
464382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    }
465382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
466382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  /* Validate claimed length longer than real length */
467382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  _dbus_string_init_const (&str, "abc.efg");
468382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  if (_dbus_validate_bus_name (&str, 0, 8))
469382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    _dbus_assert_not_reached ("validated too-long string");
470382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  if (_dbus_validate_interface (&str, 0, 8))
471382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    _dbus_assert_not_reached ("validated too-long string");
472382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  if (_dbus_validate_error_name (&str, 0, 8))
473382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    _dbus_assert_not_reached ("validated too-long string");
474382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
475382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  _dbus_string_init_const (&str, "abc");
476382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  if (_dbus_validate_member (&str, 0, 4))
477382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    _dbus_assert_not_reached ("validated too-long string");
478382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
479382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  _dbus_string_init_const (&str, "sss");
480382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  if (_dbus_validate_signature (&str, 0, 4))
481382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    _dbus_assert_not_reached ("validated too-long signature");
482382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
483382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  /* Validate string exceeding max name length */
484382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  if (!_dbus_string_init (&str))
485382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    _dbus_assert_not_reached ("no memory");
486382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
487382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (_dbus_string_get_length (&str) <= DBUS_MAXIMUM_NAME_LENGTH)
488382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    if (!_dbus_string_append (&str, "abc.def"))
489382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_assert_not_reached ("no memory");
490382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
491382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  if (_dbus_validate_bus_name (&str, 0, _dbus_string_get_length (&str)))
492382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    _dbus_assert_not_reached ("validated overmax string");
493382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  if (_dbus_validate_interface (&str, 0, _dbus_string_get_length (&str)))
494382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    _dbus_assert_not_reached ("validated overmax string");
495382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  if (_dbus_validate_error_name (&str, 0, _dbus_string_get_length (&str)))
496382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    _dbus_assert_not_reached ("validated overmax string");
497382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
498382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  /* overlong member */
499382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  _dbus_string_set_length (&str, 0);
500382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (_dbus_string_get_length (&str) <= DBUS_MAXIMUM_NAME_LENGTH)
501382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    if (!_dbus_string_append (&str, "abc"))
502382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_assert_not_reached ("no memory");
503382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
504382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  if (_dbus_validate_member (&str, 0, _dbus_string_get_length (&str)))
505382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    _dbus_assert_not_reached ("validated overmax string");
506382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
507382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  /* overlong unique name */
508382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  _dbus_string_set_length (&str, 0);
509382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  _dbus_string_append (&str, ":");
510382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  while (_dbus_string_get_length (&str) <= DBUS_MAXIMUM_NAME_LENGTH)
511382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    if (!_dbus_string_append (&str, "abc"))
512382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_assert_not_reached ("no memory");
513382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
514382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  if (_dbus_validate_bus_name (&str, 0, _dbus_string_get_length (&str)))
515382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    _dbus_assert_not_reached ("validated overmax string");
516382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
517382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  _dbus_string_free (&str);
518382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
519382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  /* Body validation; test basic validation of valid bodies for both endian */
520382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
521382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  {
522382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    int sequence;
523382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    DBusString signature;
524382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    DBusString body;
525382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
526382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    if (!_dbus_string_init (&signature) || !_dbus_string_init (&body))
527382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      _dbus_assert_not_reached ("oom");
528382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
529382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    sequence = 0;
530382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    while (dbus_internal_do_not_use_generate_bodies (sequence,
531382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                                     DBUS_LITTLE_ENDIAN,
532382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                                     &signature, &body))
533382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      {
534382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        DBusValidity validity;
535382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
536382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        validity = _dbus_validate_body_with_reason (&signature, 0,
537382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                                    DBUS_LITTLE_ENDIAN,
538382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                                    NULL, &body, 0,
539382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                                    _dbus_string_get_length (&body));
540382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        if (validity != DBUS_VALID)
541382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          {
542382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington            _dbus_warn ("invalid code %d expected valid on sequence %d little endian\n",
543382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                        validity, sequence);
544382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington            _dbus_verbose_bytes_of_string (&signature, 0, _dbus_string_get_length (&signature));
545382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington            _dbus_verbose_bytes_of_string (&body, 0, _dbus_string_get_length (&body));
546382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington            _dbus_assert_not_reached ("test failed");
547382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          }
548382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
549382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        _dbus_string_set_length (&signature, 0);
550382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        _dbus_string_set_length (&body, 0);
551382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        ++sequence;
552382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      }
553382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
554382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    sequence = 0;
555382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    while (dbus_internal_do_not_use_generate_bodies (sequence,
556382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                                     DBUS_BIG_ENDIAN,
557382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                                     &signature, &body))
558382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      {
559382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        DBusValidity validity;
560382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
561382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        validity = _dbus_validate_body_with_reason (&signature, 0,
562382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                                    DBUS_BIG_ENDIAN,
563382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                                    NULL, &body, 0,
564382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                                                    _dbus_string_get_length (&body));
565382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        if (validity != DBUS_VALID)
566382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          {
567382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington            _dbus_warn ("invalid code %d expected valid on sequence %d big endian\n",
568382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington                        validity, sequence);
569382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington            _dbus_verbose_bytes_of_string (&signature, 0, _dbus_string_get_length (&signature));
570382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington            _dbus_verbose_bytes_of_string (&body, 0, _dbus_string_get_length (&body));
571382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington            _dbus_assert_not_reached ("test failed");
572382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington          }
573382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
574382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        _dbus_string_set_length (&signature, 0);
575382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        _dbus_string_set_length (&body, 0);
576382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington        ++sequence;
577382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington      }
578382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
579382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    _dbus_string_free (&signature);
580382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington    _dbus_string_free (&body);
581382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  }
582382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
583382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington  return TRUE;
584382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington}
585382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington
58615ef0ef6fbba7827453b7973e62b6c1853576601Havoc Pennington#endif /* !DOXYGEN_SHOULD_SKIP_THIS */
58715ef0ef6fbba7827453b7973e62b6c1853576601Havoc Pennington
588382d5ad0b4adf0070948fc2da623bc52894a7788Havoc Pennington#endif /* DBUS_BUILD_TESTS */
589