@@ -119,28 +119,23 @@ bool RouteTable::AddRoute(const std::string& uri_pattern,
119119 std::vector<std::string> url_segments;
120120 base::SplitString (uri_pattern, ' /' , &url_segments);
121121
122- if (url_segments.size () < 4
123- || !url_segments[0 ].empty () || url_segments[ 1 ] != " session " || url_segments[ 2 ] != " * " ) {
124- GlobalLogger::Log (kWarningLogLevel , " Custom commands must begin with \" /session/*/ \" " );
122+ if (url_segments.size () < 2
123+ || !url_segments[0 ].empty ()) {
124+ GlobalLogger::Log (kWarningLogLevel , " Custom commands too short " );
125125 return false ;
126126 }
127-
128- // check custom prefix, should be of the form:
129- // '-' + vendor prefix + '-' + command name
130- std::vector<std::string> prefix_segments;
131- base::SplitString (url_segments[3 ], ' -' , &prefix_segments);
132- #if defined(OS_WIN)
133- if (prefix_segments.size () < 3 || !prefix_segments[0 ].empty () || prefix_segments[2 ].empty ()
134- || prefix_segments[1 ].empty () || !isalpha (prefix_segments[1 ].at (0 ))) {
135- #else // OS_WIN
136- if (prefix_segments.size () < 3 || !prefix_segments[0 ].empty () || prefix_segments[2 ].empty ()
137- || prefix_segments[1 ].empty () || !std::isalpha (prefix_segments[1 ].at (0 ))) {
138- #endif // OS_WIN
139-
140- GlobalLogger::Log (kWarningLogLevel , " Custom prefix invalid" );
127+ if (url_segments.size () >= 2
128+ && url_segments[0 ].empty () && url_segments[1 ] != " session" ) {
129+ if (!CheckCustomPrefix (url_segments[1 ]))
130+ return false ;
131+ } else if (url_segments.size () < 4 || !url_segments[0 ].empty ()
132+ || url_segments[1 ] != " session" || url_segments[2 ] != " *" ) {
133+ GlobalLogger::Log (kWarningLogLevel , " Invalid custom commands" );
141134 return false ;
135+ } else {
136+ if (!CheckCustomPrefix (url_segments[3 ]))
137+ return false ;
142138 }
143-
144139 }
145140 std::vector<webdriver::internal::RouteDetails>::iterator route;
146141 for (route = routes_.begin ();
@@ -165,6 +160,23 @@ bool RouteTable::AddRoute(const std::string& uri_pattern,
165160 return true ;
166161}
167162
163+ bool RouteTable::CheckCustomPrefix (const std::string& prefix) {
164+ std::vector<std::string> prefix_segments;
165+ base::SplitString (prefix, ' -' , &prefix_segments);
166+ #if defined(OS_WIN)
167+ if (prefix_segments.size () < 3 || !prefix_segments[0 ].empty () || prefix_segments[2 ].empty ()
168+ || prefix_segments[1 ].empty () || !isalpha (prefix_segments[1 ].at (0 ))) {
169+ #else // OS_WIN
170+ if (prefix_segments.size () < 3 || !prefix_segments[0 ].empty () || prefix_segments[2 ].empty ()
171+ || prefix_segments[1 ].empty () || !std::isalpha (prefix_segments[1 ].at (0 ))) {
172+ #endif // OS_WIN
173+
174+ GlobalLogger::Log (kWarningLogLevel , " Custom prefix invalid" );
175+ return false ;
176+ }
177+ return true ;
178+ }
179+
168180bool RouteTable::MatchPattern (const std::string& url, const std::string& pattern) const {
169181 std::vector<std::string> url_segments;
170182 std::vector<std::string> pattern_segments;
0 commit comments