Skip to content

Commit 02ced42

Browse files
committed
[nnbd] Fix remaining NNBD errors in dart:_http and dart:io.
HeaderValue parameters must have non-null values per the specification. Bug: #40040 Change-Id: I39f8c894015197c014057888026e4ad474aa5dc8 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/134722 Reviewed-by: Lasse R.H. Nielsen <[email protected]> Commit-Queue: Jonas Termansen <[email protected]>
1 parent 514a8d4 commit 02ced42

File tree

7 files changed

+44
-36
lines changed

7 files changed

+44
-36
lines changed

sdk_nnbd/lib/_http/http_headers.dart

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -624,12 +624,12 @@ class _HttpHeaders implements HttpHeaders {
624624

625625
class _HeaderValue implements HeaderValue {
626626
String _value;
627-
Map<String, String?>? _parameters;
628-
Map<String, String?>? _unmodifiableParameters;
627+
Map<String, String>? _parameters;
628+
Map<String, String>? _unmodifiableParameters;
629629

630-
_HeaderValue([this._value = "", Map<String, String?>? parameters]) {
630+
_HeaderValue([this._value = "", Map<String, String>? parameters]) {
631631
if (parameters != null) {
632-
_parameters = new HashMap<String, String?>.from(parameters);
632+
_parameters = new HashMap<String, String>.from(parameters);
633633
}
634634
}
635635

@@ -645,19 +645,23 @@ class _HeaderValue implements HeaderValue {
645645

646646
String get value => _value;
647647

648-
Map<String, String?> _ensureParameters() =>
649-
_parameters ??= HashMap<String, String?>();
648+
Map<String, String> _ensureParameters() =>
649+
_parameters ??= HashMap<String, String>();
650650

651-
Map<String, String?> get parameters =>
651+
Map<String, String> get parameters =>
652652
_unmodifiableParameters ??= UnmodifiableMapView(_ensureParameters());
653653

654654
String toString() {
655655
StringBuffer sb = new StringBuffer();
656656
sb.write(_value);
657657
var parameters = this._parameters;
658658
if (parameters != null && parameters.length > 0) {
659-
parameters.forEach((String name, String? value) {
660-
sb..write("; ")..write(name)..write("=")..write(value ?? "");
659+
parameters.forEach((String name, String value) {
660+
sb
661+
..write("; ")
662+
..write(name)
663+
..write("=")
664+
..write(value == "" ? '""' : value);
661665
});
662666
}
663667
return sb.toString();
@@ -717,7 +721,7 @@ class _HeaderValue implements HeaderValue {
717721
return s.substring(start, index).toLowerCase();
718722
}
719723

720-
String? parseParameterValue() {
724+
String parseParameterValue() {
721725
if (!done() && s[index] == "\"") {
722726
// Parse quoted value.
723727
StringBuffer sb = new StringBuffer();
@@ -742,8 +746,7 @@ class _HeaderValue implements HeaderValue {
742746
return sb.toString();
743747
} else {
744748
// Parse non-quoted value.
745-
var val = parseValue();
746-
return val == "" ? null : val;
749+
return parseValue();
747750
}
748751
}
749752

@@ -753,17 +756,17 @@ class _HeaderValue implements HeaderValue {
753756
String name = parseParameterName();
754757
skipWS();
755758
if (done()) {
756-
parameters[name] = null;
759+
parameters[name] = "";
757760
return;
758761
}
759762
maybeExpect("=");
760763
skipWS();
761764
if (done()) {
762-
parameters[name] = null;
765+
parameters[name] = "";
763766
return;
764767
}
765-
String? value = parseParameterValue();
766-
if (name == 'charset' && this is _ContentType && value != null) {
768+
String value = parseParameterValue();
769+
if (name == 'charset' && this is _ContentType) {
767770
// Charset parameter of ContentTypes are always lower-case.
768771
value = value.toLowerCase();
769772
}
@@ -790,17 +793,17 @@ class _ContentType extends _HeaderValue implements ContentType {
790793
String _subType = "";
791794

792795
_ContentType(String primaryType, String subType, String? charset,
793-
Map<String, String?>? parameters)
796+
Map<String, String>? parameters)
794797
: _primaryType = primaryType,
795798
_subType = subType,
796799
super("") {
797800
_value = "$_primaryType/$_subType";
798801
if (parameters != null) {
799802
var parameterMap = _ensureParameters();
800-
parameters.forEach((String key, String? value) {
803+
parameters.forEach((String key, String value) {
801804
String lowerCaseKey = key.toLowerCase();
802805
if (lowerCaseKey == "charset") {
803-
value = value?.toLowerCase();
806+
value = value.toLowerCase();
804807
}
805808
parameterMap[lowerCaseKey] = value;
806809
});

sdk_nnbd/lib/_http/http_impl.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1512,7 +1512,7 @@ class _HttpOutgoing implements StreamConsumer<List<int>> {
15121512
_gzipAdd = socket.add;
15131513
if (_gzipBufferLength > 0) {
15141514
_gzipSink!.add(new Uint8List.view(_gzipBuffer!.buffer,
1515-
_gzipBuffer.offsetInBytes, _gzipBufferLength));
1515+
_gzipBuffer!.offsetInBytes, _gzipBufferLength));
15161516
}
15171517
_gzipBuffer = null;
15181518
_gzipSink!.close();
@@ -1523,7 +1523,7 @@ class _HttpOutgoing implements StreamConsumer<List<int>> {
15231523
// Add any remaining data in the buffer.
15241524
if (_length > 0) {
15251525
socket.add(new Uint8List.view(
1526-
_buffer!.buffer, _buffer.offsetInBytes, _length));
1526+
_buffer!.buffer, _buffer!.offsetInBytes, _length));
15271527
}
15281528
// Clear references, for better GC.
15291529
_buffer = null;
@@ -1608,15 +1608,15 @@ class _HttpOutgoing implements StreamConsumer<List<int>> {
16081608
// If _buffer is not null, we have not written the header yet. Write
16091609
// it now.
16101610
add(new Uint8List.view(
1611-
_buffer!.buffer, _buffer.offsetInBytes, _length));
1611+
_buffer!.buffer, _buffer!.offsetInBytes, _length));
16121612
_buffer = null;
16131613
_length = 0;
16141614
}
16151615
add(chunk);
16161616
return;
16171617
}
16181618
if (chunk.length > _buffer!.length - _length) {
1619-
add(new Uint8List.view(_buffer!.buffer, _buffer.offsetInBytes, _length));
1619+
add(new Uint8List.view(_buffer!.buffer, _buffer!.offsetInBytes, _length));
16201620
_buffer = new Uint8List(_OUTGOING_BUFFER_SIZE);
16211621
_length = 0;
16221622
}

sdk_nnbd/lib/_http/http_parser.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -932,7 +932,7 @@ class _HttpParser extends Stream<_HttpIncoming> {
932932

933933
void _releaseBuffer() {
934934
_buffer = null;
935-
_index = null;
935+
_index = -1;
936936
}
937937

938938
static bool _isTokenChar(int byte) {
@@ -1075,7 +1075,7 @@ class _HttpParser extends Stream<_HttpIncoming> {
10751075
void _reportBodyError(error, [stackTrace]) {
10761076
_socketSubscription?.cancel();
10771077
_state = _State.FAILURE;
1078-
_bodyController.addError(error, stackTrace);
1078+
_bodyController?.addError(error, stackTrace);
10791079
// In case of drain(), error event will close the stream.
10801080
_bodyController?.close();
10811081
}

sdk_nnbd/lib/_http/websocket.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ class CompressionOptions {
134134
HeaderValue? requested) {
135135
var info = new _CompressionMaxWindowBits("", 0);
136136

137-
String? part = requested?.parameters?.[_serverMaxWindowBits];
137+
String? part = requested?.parameters[_serverMaxWindowBits];
138138
if (part != null) {
139139
if (part.length >= 2 && part.startsWith('0')) {
140140
throw new ArgumentError("Illegal 0 padding on value.");
@@ -479,7 +479,7 @@ abstract class WebSocket
479479
/**
480480
* Sets the user agent to use for WebSocket connections.
481481
*/
482-
static set userAgent(String userAgent) {
482+
static set userAgent(String? userAgent) {
483483
_WebSocketImpl.userAgent = userAgent;
484484
}
485485
}

sdk_nnbd/lib/_http/websocket_impl.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -602,7 +602,9 @@ class _WebSocketPerMessageDeflate {
602602
final result = new BytesBuilder();
603603
List<int> out;
604604

605-
while ((out = decoder.processed()) != null) {
605+
while (true) {
606+
final out = decoder.processed();
607+
if (out == null) break;
606608
result.add(out);
607609
}
608610

@@ -633,8 +635,9 @@ class _WebSocketPerMessageDeflate {
633635

634636
encoder.process(buffer, 0, buffer.length);
635637

636-
List<int> out;
637-
while ((out = encoder.processed()) != null) {
638+
while (true) {
639+
final out = encoder.processed();
640+
if (out == null) break;
638641
result.addAll(out);
639642
}
640643

sdk_nnbd/lib/_internal/vm/bin/process_patch.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -571,11 +571,13 @@ Future<ProcessResult> _runNonInteractiveProcess(
571571
Future foldStream(Stream<List<int>> stream, Encoding? encoding) {
572572
if (encoding == null) {
573573
return stream
574-
.fold(new BytesBuilder(), (builder, data) => builder..add(data))
574+
.fold<BytesBuilder>(
575+
new BytesBuilder(), (builder, data) => builder..add(data))
575576
.then((builder) => builder.takeBytes());
576577
} else {
577-
return stream.transform(encoding.decoder).fold(new StringBuffer(),
578-
(buf, data) {
578+
return stream
579+
.transform(encoding.decoder)
580+
.fold<StringBuffer>(new StringBuffer(), (buf, data) {
579581
buf.write(data);
580582
return buf;
581583
}).then((sb) => sb.toString());

sdk_nnbd/lib/_internal/vm/bin/socket_patch.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1311,7 +1311,7 @@ class _RawServerSocket extends Stream<RawSocket> implements RawServerSocket {
13111311
controller.add(_RawSocket(socket));
13121312
if (controller.isPaused) return;
13131313
}
1314-
}), error: zone.bindBinaryCallbackGuarded((e, st) {
1314+
}), error: zone.bindBinaryCallbackGuarded((Object e, StackTrace st) {
13151315
controller.addError(e, st);
13161316
controller.close();
13171317
}), destroyed: () {
@@ -1425,7 +1425,7 @@ class _RawSocket extends Stream<RawSocketEvent> implements RawSocket {
14251425
_controller.add(RawSocketEvent.closed);
14261426
_controller.close();
14271427
},
1428-
error: zone.bindBinaryCallbackGuarded((e, st) {
1428+
error: zone.bindBinaryCallbackGuarded((Object e, StackTrace st) {
14291429
_controller.addError(e, st);
14301430
_socket.close();
14311431
}));
@@ -1978,7 +1978,7 @@ class _RawDatagramSocket extends Stream<RawSocketEvent>
19781978
_controller.add(RawSocketEvent.closed);
19791979
_controller.close();
19801980
},
1981-
error: zone.bindBinaryCallbackGuarded((e, st) {
1981+
error: zone.bindBinaryCallbackGuarded((Object e, StackTrace st) {
19821982
_controller.addError(e, st);
19831983
_socket.close();
19841984
}));

0 commit comments

Comments
 (0)