From 7e45ed3a9674e9f436c337bed647ce9f60939ee0 Mon Sep 17 00:00:00 2001 From: Michael Albinus Date: Tue, 29 Sep 2020 19:43:02 +0200 Subject: More strict D-Bus type checking * lisp/net/dbus.el (dbus-register-monitor): Register proper key. (dbus-monitor-handler): Adapt docstring. Use grave text-quoting-style. * src/dbusbind.c (xd_signature, xd_append_arg): More strict tests. (syms_of_dbusbind): Adapt docstring. * test/lisp/net/dbus-tests.el (dbus-test01-basic-types): Extend test. --- test/lisp/net/dbus-tests.el | 73 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 62 insertions(+), 11 deletions(-) (limited to 'test/lisp/net') diff --git a/test/lisp/net/dbus-tests.el b/test/lisp/net/dbus-tests.el index b853542a1f0..74c0dddcf52 100644 --- a/test/lisp/net/dbus-tests.el +++ b/test/lisp/net/dbus-tests.el @@ -99,7 +99,10 @@ "Check basic D-Bus type arguments." (skip-unless dbus--test-enabled-session-bus) - ;; Unknown keyword. + ;; No argument or unknown keyword. + (should-error + (dbus-check-arguments :session dbus--test-service) + :type 'wrong-number-of-arguments) (should-error (dbus-check-arguments :session dbus--test-service :keyword) :type 'wrong-type-argument) @@ -107,6 +110,9 @@ ;; `:string'. (should (dbus-check-arguments :session dbus--test-service "string")) (should (dbus-check-arguments :session dbus--test-service :string "string")) + (should-error + (dbus-check-arguments :session dbus--test-service :string) + :type 'wrong-type-argument) (should-error (dbus-check-arguments :session dbus--test-service :string 0.5) :type 'wrong-type-argument) @@ -115,6 +121,10 @@ (should (dbus-check-arguments :session dbus--test-service :object-path "/object/path")) + (should-error + (dbus-check-arguments :session dbus--test-service :object-path) + :type 'wrong-type-argument) + ;; Raises an error on stdin. (should-error (dbus-check-arguments :session dbus--test-service :object-path "string") :type 'dbus-error) @@ -124,6 +134,10 @@ ;; `:signature'. (should (dbus-check-arguments :session dbus--test-service :signature "as")) + (should-error + (dbus-check-arguments :session dbus--test-service :signature) + :type 'wrong-type-argument) + ;; Raises an error on stdin. (should-error (dbus-check-arguments :session dbus--test-service :signature "string") :type 'dbus-error) @@ -136,16 +150,19 @@ (should (dbus-check-arguments :session dbus--test-service t)) (should (dbus-check-arguments :session dbus--test-service :boolean nil)) (should (dbus-check-arguments :session dbus--test-service :boolean t)) - ;; Will be handled as `nil'. - (should (dbus-check-arguments :session dbus--test-service :boolean)) - ;; Will be handled as `t'. (should (dbus-check-arguments :session dbus--test-service :boolean 'whatever)) + (should-error + (dbus-check-arguments :session dbus--test-service :boolean) + :type 'wrong-type-argument) ;; `:byte'. (should (dbus-check-arguments :session dbus--test-service :byte 0)) ;; Only the least significant byte is taken into account. (should (dbus-check-arguments :session dbus--test-service :byte most-positive-fixnum)) + (should-error + (dbus-check-arguments :session dbus--test-service :byte) + :type 'wrong-type-argument) (should-error (dbus-check-arguments :session dbus--test-service :byte -1) :type 'wrong-type-argument) @@ -160,6 +177,9 @@ (should (dbus-check-arguments :session dbus--test-service :int16 0)) (should (dbus-check-arguments :session dbus--test-service :int16 #x7fff)) (should (dbus-check-arguments :session dbus--test-service :int16 #x-8000)) + (should-error + (dbus-check-arguments :session dbus--test-service :int16) + :type 'wrong-type-argument) (should-error (dbus-check-arguments :session dbus--test-service :int16 #x8000) :type 'args-out-of-range) @@ -176,6 +196,9 @@ ;; `:uint16'. (should (dbus-check-arguments :session dbus--test-service :uint16 0)) (should (dbus-check-arguments :session dbus--test-service :uint16 #xffff)) + (should-error + (dbus-check-arguments :session dbus--test-service :uint16) + :type 'wrong-type-argument) (should-error (dbus-check-arguments :session dbus--test-service :uint16 #x10000) :type 'args-out-of-range) @@ -193,6 +216,9 @@ (should (dbus-check-arguments :session dbus--test-service :int32 0)) (should (dbus-check-arguments :session dbus--test-service :int32 #x7fffffff)) (should (dbus-check-arguments :session dbus--test-service :int32 #x-80000000)) + (should-error + (dbus-check-arguments :session dbus--test-service :int32) + :type 'wrong-type-argument) (should-error (dbus-check-arguments :session dbus--test-service :int32 #x80000000) :type 'args-out-of-range) @@ -210,6 +236,9 @@ (should (dbus-check-arguments :session dbus--test-service 0)) (should (dbus-check-arguments :session dbus--test-service :uint32 0)) (should (dbus-check-arguments :session dbus--test-service :uint32 #xffffffff)) + (should-error + (dbus-check-arguments :session dbus--test-service :uint32) + :type 'wrong-type-argument) (should-error (dbus-check-arguments :session dbus--test-service :uint32 #x100000000) :type 'args-out-of-range) @@ -229,6 +258,9 @@ (dbus-check-arguments :session dbus--test-service :int64 #x7fffffffffffffff)) (should (dbus-check-arguments :session dbus--test-service :int64 #x-8000000000000000)) + (should-error + (dbus-check-arguments :session dbus--test-service :int64) + :type 'wrong-type-argument) (should-error (dbus-check-arguments :session dbus--test-service :int64 #x8000000000000000) :type 'args-out-of-range) @@ -246,6 +278,9 @@ (should (dbus-check-arguments :session dbus--test-service :uint64 0)) (should (dbus-check-arguments :session dbus--test-service :uint64 #xffffffffffffffff)) + (should-error + (dbus-check-arguments :session dbus--test-service :uint64) + :type 'wrong-type-argument) (should-error (dbus-check-arguments :session dbus--test-service :uint64 #x10000000000000000) :type 'args-out-of-range) @@ -267,6 +302,9 @@ ;; Shall both be supported? (should (dbus-check-arguments :session dbus--test-service :double 1.0e+INF)) (should (dbus-check-arguments :session dbus--test-service :double 0.0e+NaN)) + (should-error + (dbus-check-arguments :session dbus--test-service :double) + :type 'wrong-type-argument) (should-error (dbus-check-arguments :session dbus--test-service :double "string") :type 'wrong-type-argument) @@ -278,6 +316,9 @@ ;; D-Bus message). Mainly testing, that values out of `:uint32' ;; type range fail. (should (dbus-check-arguments :session dbus--test-service :unix-fd 0)) + (should-error + (dbus-check-arguments :session dbus--test-service :unix-fd) + :type 'wrong-type-argument) (should-error (dbus-check-arguments :session dbus--test-service :unix-fd -1) :type 'args-out-of-range) @@ -300,7 +341,7 @@ (should (dbus-check-arguments :session dbus--test-service '(:array :string "string1" "string2"))) - ;; Empty array. + ;; Empty array (of strings). (should (dbus-check-arguments :session dbus--test-service '(:array))) (should (dbus-check-arguments :session dbus--test-service '(:array :signature "o"))) @@ -318,7 +359,11 @@ (should (dbus-check-arguments :session dbus--test-service '(:variant (:array "string")))) - ;; More than one element. + ;; No or more than one element. + ;; FIXME. + ;; (should-error + ;; (dbus-check-arguments :session dbus--test-service '(:variant)) + ;; :type 'wrong-type-argument) (should-error (dbus-check-arguments :session dbus--test-service @@ -336,10 +381,13 @@ (dbus-check-arguments :session dbus--test-service '(:array :dict-entry (:string "string" :boolean t)))) - ;; The second element is `nil' (implicitly). FIXME: Is this right? - (should - (dbus-check-arguments - :session dbus--test-service '(:array (:dict-entry :string "string")))) + ;; FIXME: Must be errors. + ;; (should + ;; (dbus-check-arguments + ;; :session dbus--test-service '(:array (:dict-entry)))) + ;; (should + ;; (dbus-check-arguments + ;; :session dbus--test-service '(:array (:dict-entry :string "string")))) ;; Not two elements. (should-error (dbus-check-arguments @@ -357,7 +405,8 @@ (dbus-check-arguments :session dbus--test-service '(:dict-entry :string "string" :boolean t)) :type 'wrong-type-argument) - ;; Different dict entry types can be part of an array. + ;; FIXME:! This doesn't look right. + ;; Different dict entry types can be part of an array ??? (should (dbus-check-arguments :session dbus--test-service @@ -366,6 +415,8 @@ (:dict-entry :string "string2" :object-path "/object/path")))) ;; `:struct'. There is no restriction what could be an element of a struct. + ;; Empty struct. FIXME: Is this right? + ;; (should (dbus-check-arguments :session dbus--test-service '(:struct))) (should (dbus-check-arguments :session dbus--test-service -- cgit v1.2.3