Skip to content

Commit 93322d3

Browse files
nex3yjbanov
authored andcommitted
Don't quote the multipart boundary header. (dart-lang#63)
This is be more broadly compatible than the quoted version, although the quoted version is what's described by the spec. curl and browsers send unquoted boundaries, so we can safely assume that any server will support them. Closes dart-lang#61
1 parent f6cb79e commit 93322d3

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
## 0.11.3+12
2+
3+
* Don't quote the boundary header for `MultipartRequest`. This is more
4+
compatible with server quirks.
5+
6+
## 0.11.3+11
7+
8+
* Fix the SDK constraint to only include SDK versions that support importing
9+
`dart:io` everywhere.
10+
111
## 0.11.3+10
212

313
* Stop using `dart:mirrors`.

lib/src/multipart_request.dart

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class MultipartRequest extends BaseRequest {
8383
ByteStream finalize() {
8484
// TODO(nweiz): freeze fields and files
8585
var boundary = _boundaryString();
86-
headers['content-type'] = 'multipart/form-data; boundary="$boundary"';
86+
headers['content-type'] = 'multipart/form-data; boundary=$boundary';
8787
super.finalize();
8888

8989
var controller = new StreamController<List<int>>(sync: true);
@@ -117,14 +117,19 @@ class MultipartRequest extends BaseRequest {
117117
return new ByteStream(controller.stream);
118118
}
119119

120-
/// All character codes that are valid in multipart boundaries. From
121-
/// http://tools.ietf.org/html/rfc2046#section-5.1.1.
120+
/// All character codes that are valid in multipart boundaries. This is the
121+
/// intersection of the characters allowed in the `bcharsnospace` production
122+
/// defined in [RFC 2046][] and those allowed in the `token` production
123+
/// defined in [RFC 1521][].
124+
///
125+
/// [RFC 2046]: http://tools.ietf.org/html/rfc2046#section-5.1.1.
126+
/// [RFC 1521]: https://tools.ietf.org/html/rfc1521#section-4
122127
static const List<int> _BOUNDARY_CHARACTERS = const <int>[
123-
39, 40, 41, 43, 95, 44, 45, 46, 47, 58, 61, 63, 48, 49, 50, 51, 52, 53, 54,
124-
55, 56, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
125-
81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103,
126-
104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
127-
119, 120, 121, 122
128+
39, 43, 95, 44, 45, 46, 58, 61, 63, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
129+
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
130+
84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
131+
107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
132+
122
128133
];
129134

130135
/// Returns the header string for a field. The return value is guaranteed to

0 commit comments

Comments
 (0)