Fix grpc-web issue when decoding empty repeated. (#187)

This commit is contained in:
Sigurd Meldgaard 2019-06-06 12:23:46 +02:00 committed by GitHub
parent 1578122a63
commit 8aa5b51760
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 3 deletions

View File

@ -78,12 +78,11 @@ class _GrpcWebConversionSink extends ChunkedConversionSink<ByteBuffer> {
final dataLength = _dataHeader.buffer.asByteData().getUint32(0);
_dataOffset = 0;
_state = _GrpcWebParseState.Message;
_data = new Uint8List(dataLength);
if (dataLength == 0) {
// empty message
_finishMessage();
}
_data = new Uint8List(dataLength);
}
}

View File

@ -29,7 +29,7 @@ class GrpcMetadata extends GrpcMessage {
class GrpcData extends GrpcMessage {
final List<int> data;
final bool isCompressed;
GrpcData(this.data, {this.isCompressed});
GrpcData(this.data, {this.isCompressed}) : assert(data != null);
@override
String toString() => 'gRPC Data (${data.length} bytes)';

View File

@ -0,0 +1,17 @@
import 'dart:async';
import 'dart:typed_data';
import 'package:grpc/src/client/transport/web_streams.dart';
import 'package:grpc/src/shared/message.dart';
import 'package:test/test.dart';
main() {
test("decoding an empty repeated", () async {
final GrpcData data = await GrpcWebDecoder()
.bind(Stream.fromIterable([
Uint8List.fromList([0, 0, 0, 0, 0]).buffer
]))
.first as GrpcData;
expect(data.data, []);
});
}