@@ -30,6 +30,8 @@ mod canonicalized {
30
30
}
31
31
}
32
32
33
+ use gix_url:: ArgumentSafety ;
34
+
33
35
#[ test]
34
36
fn user ( ) -> crate :: Result {
35
37
let mut url = gix_url:: parse ( "https://user:password@host/path" . into ( ) ) ?;
@@ -53,81 +55,108 @@ fn password() -> crate::Result {
53
55
}
54
56
55
57
#[ test]
56
- fn user_argument_safe ( ) -> crate :: Result {
58
+ fn user_argument_safety ( ) -> crate :: Result {
57
59
let url = gix_url:: parse ( "ssh://-Fconfigfile@foo/bar" . into ( ) ) ?;
58
60
59
61
assert_eq ! ( url. user( ) , Some ( "-Fconfigfile" ) ) ;
62
+ assert_eq ! ( url. user_as_argument( ) , ArgumentSafety :: Dangerous ( "-Fconfigfile" ) ) ;
60
63
assert_eq ! ( url. user_argument_safe( ) , None ) ; // An unsafe username is blocked.
61
64
62
65
assert_eq ! ( url. host( ) , Some ( "foo" ) ) ;
66
+ assert_eq ! ( url. host_as_argument( ) , ArgumentSafety :: Usable ( "foo" ) ) ;
63
67
assert_eq ! ( url. host_argument_safe( ) , Some ( "foo" ) ) ;
64
68
65
69
assert_eq ! ( url. path, "/bar" ) ;
70
+ assert_eq ! ( url. path_as_argument( ) , ArgumentSafety :: Usable ( "/bar" . into( ) ) ) ;
66
71
assert_eq ! ( url. path_argument_safe( ) , Some ( "/bar" . into( ) ) ) ;
67
72
68
73
Ok ( ( ) )
69
74
}
70
75
71
76
#[ test]
72
- fn host_argument_safe ( ) -> crate :: Result {
77
+ fn host_argument_safety ( ) -> crate :: Result {
73
78
let url = gix_url:: parse ( "ssh://-oProxyCommand=open$IFS-aCalculator/foo" . into ( ) ) ?;
74
79
75
80
assert_eq ! ( url. user( ) , None ) ;
81
+ assert_eq ! ( url. user_as_argument( ) , ArgumentSafety :: Absent ) ;
76
82
assert_eq ! ( url. user_argument_safe( ) , None ) ; // As there is no user. See all_argument_safe_valid().
77
83
78
84
assert_eq ! ( url. host( ) , Some ( "-oProxyCommand=open$IFS-aCalculator" ) ) ;
85
+ assert_eq ! (
86
+ url. host_as_argument( ) ,
87
+ ArgumentSafety :: Dangerous ( "-oProxyCommand=open$IFS-aCalculator" )
88
+ ) ;
79
89
assert_eq ! ( url. host_argument_safe( ) , None ) ; // An unsafe host string is blocked.
80
90
81
91
assert_eq ! ( url. path, "/foo" ) ;
92
+ assert_eq ! ( url. path_as_argument( ) , ArgumentSafety :: Usable ( "/foo" . into( ) ) ) ;
82
93
assert_eq ! ( url. path_argument_safe( ) , Some ( "/foo" . into( ) ) ) ;
83
94
84
95
Ok ( ( ) )
85
96
}
86
97
87
98
#[ test]
88
- fn path_argument_safe ( ) -> crate :: Result {
99
+ fn path_argument_safety ( ) -> crate :: Result {
89
100
let url = gix_url:: parse ( "ssh://foo/-oProxyCommand=open$IFS-aCalculator" . into ( ) ) ?;
90
101
91
102
assert_eq ! ( url. user( ) , None ) ;
103
+ assert_eq ! ( url. user_as_argument( ) , ArgumentSafety :: Absent ) ;
92
104
assert_eq ! ( url. user_argument_safe( ) , None ) ; // As there is no user. See all_argument_safe_valid().
93
105
94
106
assert_eq ! ( url. host( ) , Some ( "foo" ) ) ;
107
+ assert_eq ! ( url. host_as_argument( ) , ArgumentSafety :: Usable ( "foo" ) ) ;
95
108
assert_eq ! ( url. host_argument_safe( ) , Some ( "foo" ) ) ;
96
109
97
110
assert_eq ! ( url. path, "/-oProxyCommand=open$IFS-aCalculator" ) ;
111
+ assert_eq ! (
112
+ url. path_as_argument( ) ,
113
+ ArgumentSafety :: Dangerous ( "/-oProxyCommand=open$IFS-aCalculator" . into( ) )
114
+ ) ;
98
115
assert_eq ! ( url. path_argument_safe( ) , None ) ; // An unsafe path is blocked.
99
116
100
117
Ok ( ( ) )
101
118
}
102
119
103
120
#[ test]
104
- fn all_argument_safe_allowed ( ) -> crate :: Result {
121
+ fn all_argument_safety_safe ( ) -> crate :: Result {
105
122
let url = gix_url
:: parse ( "ssh://[email protected] /path/to/file" . into ( ) ) ?
;
106
123
107
124
assert_eq ! ( url. user( ) , Some ( "user.name" ) ) ;
125
+ assert_eq ! ( url. user_as_argument( ) , ArgumentSafety :: Usable ( "user.name" ) ) ;
108
126
assert_eq ! ( url. user_argument_safe( ) , Some ( "user.name" ) ) ;
109
127
110
128
assert_eq ! ( url. host( ) , Some ( "example.com" ) ) ;
129
+ assert_eq ! ( url. host_as_argument( ) , ArgumentSafety :: Usable ( "example.com" ) ) ;
111
130
assert_eq ! ( url. host_argument_safe( ) , Some ( "example.com" ) ) ;
112
131
113
132
assert_eq ! ( url. path, "/path/to/file" ) ;
133
+ assert_eq ! ( url. path_as_argument( ) , ArgumentSafety :: Usable ( "/path/to/file" . into( ) ) ) ;
114
134
assert_eq ! ( url. path_argument_safe( ) , Some ( "/path/to/file" . into( ) ) ) ;
115
135
116
136
Ok ( ( ) )
117
137
}
118
138
119
139
#[ test]
120
- fn all_argument_safe_disallowed ( ) -> crate :: Result {
140
+ fn all_argument_safety_not_safe ( ) -> crate :: Result {
121
141
let all_bad = "ssh://-Fconfigfile@-oProxyCommand=open$IFS-aCalculator/-oProxyCommand=open$IFS-aCalculator" ;
122
142
let url = gix_url:: parse ( all_bad. into ( ) ) ?;
123
143
124
144
assert_eq ! ( url. user( ) , Some ( "-Fconfigfile" ) ) ;
145
+ assert_eq ! ( url. user_as_argument( ) , ArgumentSafety :: Dangerous ( "-Fconfigfile" ) ) ;
125
146
assert_eq ! ( url. user_argument_safe( ) , None ) ; // An unsafe username is blocked.
126
147
127
148
assert_eq ! ( url. host( ) , Some ( "-oProxyCommand=open$IFS-aCalculator" ) ) ;
149
+ assert_eq ! (
150
+ url. host_as_argument( ) ,
151
+ ArgumentSafety :: Dangerous ( "-oProxyCommand=open$IFS-aCalculator" )
152
+ ) ;
128
153
assert_eq ! ( url. host_argument_safe( ) , None ) ; // An unsafe host string is blocked.
129
154
130
155
assert_eq ! ( url. path, "/-oProxyCommand=open$IFS-aCalculator" ) ;
156
+ assert_eq ! (
157
+ url. path_as_argument( ) ,
158
+ ArgumentSafety :: Dangerous ( "/-oProxyCommand=open$IFS-aCalculator" . into( ) )
159
+ ) ;
131
160
assert_eq ! ( url. path_argument_safe( ) , None ) ; // An unsafe path is blocked.
132
161
133
162
Ok ( ( ) )
0 commit comments