mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 15:32:46 +00:00 
			
		
		
		
	AK+LibHTTP: Ensure plus signs are percent encoded in query string
Adds a new optional parameter 'reserved_chars' to AK::URL::percent_encode. This new optional parameter allows the caller to specify custom characters to be percent encoded. This is then used to percent encode plus signs by HttpRequest::to_raw_request.
This commit is contained in:
		
							parent
							
								
									58398b1e12
								
							
						
					
					
						commit
						737f5b26b7
					
				
					 3 changed files with 7 additions and 7 deletions
				
			
		|  | @ -395,19 +395,19 @@ constexpr bool code_point_is_in_percent_encode_set(u32 code_point, URL::PercentE | |||
|     } | ||||
| } | ||||
| 
 | ||||
| void URL::append_percent_encoded_if_necessary(StringBuilder& builder, u32 code_point, URL::PercentEncodeSet set) | ||||
| void URL::append_percent_encoded_if_necessary(StringBuilder& builder, u32 code_point, URL::PercentEncodeSet set, StringView reserved_chars) | ||||
| { | ||||
|     if (code_point_is_in_percent_encode_set(code_point, set)) | ||||
|     if (code_point_is_in_percent_encode_set(code_point, set) || (!reserved_chars.is_null() && reserved_chars.contains(code_point))) | ||||
|         append_percent_encoded(builder, code_point); | ||||
|     else | ||||
|         builder.append_code_point(code_point); | ||||
| } | ||||
| 
 | ||||
| String URL::percent_encode(StringView input, URL::PercentEncodeSet set) | ||||
| String URL::percent_encode(StringView input, URL::PercentEncodeSet set, StringView reserved_chars) | ||||
| { | ||||
|     StringBuilder builder; | ||||
|     for (auto code_point : Utf8View(input)) { | ||||
|         append_percent_encoded_if_necessary(builder, code_point, set); | ||||
|         append_percent_encoded_if_necessary(builder, code_point, set, reserved_chars); | ||||
|     } | ||||
|     return builder.to_string(); | ||||
| } | ||||
|  |  | |||
							
								
								
									
										4
									
								
								AK/URL.h
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								AK/URL.h
									
										
									
									
									
								
							|  | @ -104,7 +104,7 @@ public: | |||
|     static u16 default_port_for_scheme(StringView); | ||||
|     static bool is_special_scheme(StringView); | ||||
| 
 | ||||
|     static String percent_encode(StringView input, PercentEncodeSet set = PercentEncodeSet::Userinfo); | ||||
|     static String percent_encode(StringView input, PercentEncodeSet set = PercentEncodeSet::Userinfo, StringView reserved_chars = {}); | ||||
|     static String percent_decode(StringView input); | ||||
| 
 | ||||
|     bool operator==(URL const& other) const { return equals(other, ExcludeFragment::No); } | ||||
|  | @ -122,7 +122,7 @@ private: | |||
|     bool compute_validity() const; | ||||
|     String serialize_data_url() const; | ||||
| 
 | ||||
|     static void append_percent_encoded_if_necessary(StringBuilder&, u32 code_point, PercentEncodeSet set = PercentEncodeSet::Userinfo); | ||||
|     static void append_percent_encoded_if_necessary(StringBuilder&, u32 code_point, PercentEncodeSet set = PercentEncodeSet::Userinfo, StringView reserved_chars = {}); | ||||
|     static void append_percent_encoded(StringBuilder&, u32 code_point); | ||||
| 
 | ||||
|     bool m_valid { false }; | ||||
|  |  | |||
|  | @ -37,7 +37,7 @@ ByteBuffer HttpRequest::to_raw_request() const | |||
|     builder.append(URL::percent_encode(m_url.path(), URL::PercentEncodeSet::EncodeURI)); | ||||
|     if (!m_url.query().is_empty()) { | ||||
|         builder.append('?'); | ||||
|         builder.append(URL::percent_encode(m_url.query(), URL::PercentEncodeSet::EncodeURI)); | ||||
|         builder.append(URL::percent_encode(m_url.query(), URL::PercentEncodeSet::EncodeURI, "+"sv)); | ||||
|     } | ||||
|     builder.append(" HTTP/1.1\r\nHost: "); | ||||
|     builder.append(m_url.host()); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 GeekFiftyFive
						GeekFiftyFive