Sfoglia il codice sorgente

Values read as multipart/form-data are not URL encoded

bel 8 anni fa
parent
commit
67eb68c5b7
1 ha cambiato i file con 30 aggiunte e 15 eliminazioni
  1. 30 15
      src/handle_form.inl

+ 30 - 15
src/handle_form.inl

@@ -115,6 +115,21 @@ url_encoded_field_get(const struct mg_connection *conn,
 
 
 
 
 static int
 static int
+unencoded_field_get(const struct mg_connection *conn,
+                    const char *key,
+                    size_t key_len,
+                    const char *value,
+                    size_t value_len,
+                    struct mg_form_data_handler *fdh)
+{
+	char key_dec[1024];
+	mg_url_decode(key, (int)key_len, key_dec, (int)sizeof(key_dec), 1);
+
+	return fdh->field_get(key_dec, value, value_len, fdh->user_data);
+}
+
+
+static int
 field_stored(const struct mg_connection *conn,
 field_stored(const struct mg_connection *conn,
              const char *path,
              const char *path,
              long long file_size,
              long long file_size,
@@ -672,14 +687,14 @@ mg_handle_form_request(struct mg_connection *conn,
 				towrite -= bl + 4;
 				towrite -= bl + 4;
 
 
 				if (field_storage == FORM_FIELD_STORAGE_GET) {
 				if (field_storage == FORM_FIELD_STORAGE_GET) {
-					url_encoded_field_get(conn,
-					                      ((get_block > 0) ? NULL : nbeg),
-					                      ((get_block > 0)
-					                           ? 0
-					                           : (size_t)(nend - nbeg)),
-					                      hend,
-					                      towrite,
-					                      fdh);
+					unencoded_field_get(conn,
+					                    ((get_block > 0) ? NULL : nbeg),
+					                    ((get_block > 0)
+					                         ? 0
+					                         : (size_t)(nend - nbeg)),
+					                    hend,
+					                    towrite,
+					                    fdh);
 					get_block++;
 					get_block++;
 				}
 				}
 
 
@@ -728,13 +743,13 @@ mg_handle_form_request(struct mg_connection *conn,
 
 
 			if (field_storage == FORM_FIELD_STORAGE_GET) {
 			if (field_storage == FORM_FIELD_STORAGE_GET) {
 				/* Call callback */
 				/* Call callback */
-				url_encoded_field_get(conn,
-				                      ((get_block > 0) ? NULL : nbeg),
-				                      ((get_block > 0) ? 0
-				                                       : (size_t)(nend - nbeg)),
-				                      hend,
-				                      towrite,
-				                      fdh);
+				unencoded_field_get(conn,
+				                    ((get_block > 0) ? NULL : nbeg),
+				                    ((get_block > 0) ? 0
+				                                     : (size_t)(nend - nbeg)),
+				                    hend,
+				                    towrite,
+				                    fdh);
 			}
 			}
 
 
 			if (field_storage == FORM_FIELD_STORAGE_STORE) {
 			if (field_storage == FORM_FIELD_STORAGE_STORE) {