Make Hint encoding safe for passing them as GET parameter in URLs
Thanks @TheMarex for flagging this!
This commit is contained in:
		
							parent
							
								
									d0c534e5fa
								
							
						
					
					
						commit
						8a4551500d
					
				| @ -4,6 +4,9 @@ | |||||||
| 
 | 
 | ||||||
| #include <boost/assert.hpp> | #include <boost/assert.hpp> | ||||||
| 
 | 
 | ||||||
|  | #include <iterator> | ||||||
|  | #include <algorithm> | ||||||
|  | 
 | ||||||
| namespace osrm | namespace osrm | ||||||
| { | { | ||||||
| namespace engine | namespace engine | ||||||
| @ -18,13 +21,29 @@ bool Hint::IsValid(const util::Coordinate new_input_coordinates, | |||||||
|            facade.GetCheckSum() == data_checksum; |            facade.GetCheckSum() == data_checksum; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::string Hint::ToBase64() const { return encodeBase64Bytewise(*this); } | std::string Hint::ToBase64() const | ||||||
|  | { | ||||||
|  |     auto base64 = encodeBase64Bytewise(*this); | ||||||
|  | 
 | ||||||
|  |     // Make safe for usage as GET parameter in URLs
 | ||||||
|  |     std::replace(begin(base64), end(base64), '+', '-'); | ||||||
|  |     std::replace(begin(base64), end(base64), '/', '_'); | ||||||
|  | 
 | ||||||
|  |     return base64; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
| Hint Hint::FromBase64(const std::string &base64Hint) | Hint Hint::FromBase64(const std::string &base64Hint) | ||||||
| { | { | ||||||
|     BOOST_ASSERT_MSG(base64Hint.size() == ENCODED_HINT_SIZE, "Hint has invalid size"); |     BOOST_ASSERT_MSG(base64Hint.size() == ENCODED_HINT_SIZE, "Hint has invalid size"); | ||||||
| 
 | 
 | ||||||
|     return decodeBase64Bytewise<Hint>(base64Hint); |     // We need mutability but don't want to change the API
 | ||||||
|  |     auto encoded = base64Hint; | ||||||
|  | 
 | ||||||
|  |     // Reverses above encoding we need for GET parameters in URL
 | ||||||
|  |     std::replace(begin(encoded), end(encoded), '-', '+'); | ||||||
|  |     std::replace(begin(encoded), end(encoded), '_', '/'); | ||||||
|  | 
 | ||||||
|  |     return decodeBase64Bytewise<Hint>(encoded); | ||||||
| } | } | ||||||
| } | } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user