remove boundary characters that pkg:http_parser cannot parse (#72)
diff --git a/lib/src/boundary_characters.dart b/lib/src/boundary_characters.dart
new file mode 100644
index 0000000..03b7ac2
--- /dev/null
+++ b/lib/src/boundary_characters.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// All character codes that are valid in multipart boundaries. This is the
+/// intersection of the characters allowed in the `bcharsnospace` production
+/// defined in [RFC 2046][] and those allowed in the `token` production
+/// defined in [RFC 1521][].
+///
+/// [RFC 2046]: http://tools.ietf.org/html/rfc2046#section-5.1.1.
+/// [RFC 1521]: https://tools.ietf.org/html/rfc1521#section-4
+const List<int> BOUNDARY_CHARACTERS = const <int>[
+ 39, 43, 95, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
+ 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+ 122
+];
diff --git a/lib/src/multipart_request.dart b/lib/src/multipart_request.dart
index 7250def..8132f80 100644
--- a/lib/src/multipart_request.dart
+++ b/lib/src/multipart_request.dart
@@ -7,6 +7,7 @@
import 'dart:math';
import 'base_request.dart';
+import 'boundary_characters.dart';
import 'byte_stream.dart';
import 'multipart_file.dart';
import 'utils.dart';
@@ -117,21 +118,6 @@
return new ByteStream(controller.stream);
}
- /// All character codes that are valid in multipart boundaries. This is the
- /// intersection of the characters allowed in the `bcharsnospace` production
- /// defined in [RFC 2046][] and those allowed in the `token` production
- /// defined in [RFC 1521][].
- ///
- /// [RFC 2046]: http://tools.ietf.org/html/rfc2046#section-5.1.1.
- /// [RFC 1521]: https://tools.ietf.org/html/rfc1521#section-4
- static const List<int> _BOUNDARY_CHARACTERS = const <int>[
- 39, 43, 95, 44, 45, 46, 58, 61, 63, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
- 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
- 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
- 122
- ];
-
/// Returns the header string for a field. The return value is guaranteed to
/// contain only ASCII characters.
String _headerForField(String name, String value) {
@@ -172,7 +158,7 @@
var prefix = "dart-http-boundary-";
var list = new List<int>.generate(_BOUNDARY_LENGTH - prefix.length,
(index) =>
- _BOUNDARY_CHARACTERS[_random.nextInt(_BOUNDARY_CHARACTERS.length)],
+ BOUNDARY_CHARACTERS[_random.nextInt(BOUNDARY_CHARACTERS.length)],
growable: false);
return "$prefix${new String.fromCharCodes(list)}";
}
diff --git a/test/io/utils.dart b/test/io/utils.dart
index 4594b6e..24276fa 100644
--- a/test/io/utils.dart
+++ b/test/io/utils.dart
@@ -85,7 +85,7 @@
requestBody = requestBodyBytes;
}
- var content = {
+ var content = <String, dynamic>{
'method': request.method,
'path': request.uri.path,
'headers': {}
diff --git a/test/multipart_test.dart b/test/multipart_test.dart
index 8f908f9..ae3c4b3 100644
--- a/test/multipart_test.dart
+++ b/test/multipart_test.dart
@@ -5,6 +5,7 @@
import 'dart:async';
import 'package:http/http.dart' as http;
+import 'package:http/src/boundary_characters.dart';
import 'package:http_parser/http_parser.dart';
import 'package:unittest/unittest.dart';
@@ -18,6 +19,13 @@
'''));
});
+ test('boundary characters', () {
+ var testBoundary = new String.fromCharCodes(BOUNDARY_CHARACTERS);
+ var contentType = new MediaType.parse('text/plain; boundary=${testBoundary}');
+ var boundary = contentType.parameters['boundary'];
+ expect(boundary, testBoundary);
+ });
+
test('with fields and files', () {
var request = new http.MultipartRequest('POST', dummyUrl);
request.fields['field1'] = 'value1';