Skip to content

ContentType with utf-8 not encoded properly in Dart 3.6 #59719

@tomyeh

Description

@tomyeh

When servicing the following code, it'll throw an exception, Latin1Codec.encode. Looks like the encoding is not used properly

It happens only in Dart 3.6.0. It works fine with 3.5.x.

import "dart:io";

void main() {
  HttpServer
  .bind(InternetAddress.anyIPv4, 8081)
  .then((server) {
    server.autoCompress = true;
    server.listen((request) {
      request.response
        ..headers.contentType = ContentType("text", "plain", charset: "utf-8")
        ..writeln('日本語')
        ..close();
    });
  });
}

The stack trace:

Invalid argument (string): Contains invalid characters.: "日本語\n"
#0      _UnicodeSubsetEncoder.convert (dart:convert/ascii.dart:85:9)
#1      Latin1Codec.encode (dart:convert/latin1.dart:40:46)
#2      _IOSinkImpl._writeString (dart:_http/http_impl.dart:1064:21)
#3      _IOSinkImpl.writeln (dart:_http/http_impl.dart:1090:5)
#4      main.<anonymous closure>.<anonymous closure> (file:///Users/tomyeh/prj/boeneo/server/test/20807.dart:13:11)
#5      _RootZone.runUnaryGuarded (dart:async/zone.dart:1609:10)
#6      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:366:11)
#7      _BufferingStreamSubscription._add (dart:async/stream_impl.dart:297:7)
#8      _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:777:19)
#9      _StreamController._add (dart:async/stream_controller.dart:651:7)
#10     _StreamController.add (dart:async/stream_controller.dart:606:5)
#11     _HttpServer._handleRequest (dart:_http/http_impl.dart:3339:19)
#12     new _HttpConnection.<anonymous closure> (dart:_http/http_impl.dart:3123:19)
#13     _RootZone.runUnaryGuarded (dart:async/zone.dart:1609:10)
#14     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:366:11)
#15     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:297:7)
#16     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:777:19)
#17     _StreamController._add (dart:async/stream_controller.dart:651:7)
#18     _StreamController.add (dart:async/stream_controller.dart:606:5)
#19     _HttpParser._headersEnd (dart:_http/http_parser.dart:390:19)
#20     _HttpParser._doParse (dart:_http/http_parser.dart:759:15)
#21     _HttpParser._parse (dart:_http/http_parser.dart:320:7)
#22     _HttpParser._onData (dart:_http/http_parser.dart:887:5)
#23     _RootZone.runUnaryGuarded (dart:async/zone.dart:1609:10)
#24     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:366:11)
#25     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:297:7)
#26     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:777:19)
#27     _StreamController._add (dart:async/stream_controller.dart:651:7)
#28     _StreamController.add (dart:async/stream_controller.dart:606:5)
#29     _Socket._onData (dart:io-patch/socket_patch.dart:2455:41)
#30     _RootZone.runUnaryGuarded (dart:async/zone.dart:1609:10)
#31     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:366:11)
#32     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:297:7)
#33     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:777:19)
#34     _StreamController._add (dart:async/stream_controller.dart:651:7)
#35     _StreamController.add (dart:async/stream_controller.dart:606:5)
#36     new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:1942:33)
#37     _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:1385:14)
#38     _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
#39     _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
#40     _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
#41     _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:185:5)

Metadata

Metadata

Assignees

Labels

P2A bug or feature request we're likely to work onarea-vmUse area-vm for VM related issues, including code coverage, and the AOT and JIT backends.triagedIssue has been triaged by sub teamtype-bugIncorrect behavior (everything from a crash to more subtle misbehavior)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions