Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 969c0de

Browse files
committed
Avoid crash on EOF error in file with Windows line encoding
+ start using spans from CFE (now that they're available) Change-Id: I4fe82070d32948a64fb0fab527bd4cc857eebeb4 Reviewed-on: https://dart-review.googlesource.com/49841 Reviewed-by: Sigmund Cherem <[email protected]>
1 parent 8054409 commit 969c0de

File tree

9 files changed

+43
-74
lines changed

9 files changed

+43
-74
lines changed

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
*.yaml text
1515

1616
# Files that should not be converted.
17+
tests/compiler/dart2js_extra/eof_line_ending_test.dart -text
1718
tests/compiler/dart2js_extra/string_interpolation_test.dart -text
1819
tests/compiler/dart2js_extra/string_interpolation_dynamic_test.dart -text
1920
tests/compiler/dart2js_extra/literal_string_juxtaposition_test.dart -text

pkg/compiler/lib/src/io/source_file.dart

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'dart:math';
99
import 'dart:typed_data' show Uint8List;
1010

1111
import 'package:kernel/ast.dart' as kernel show Location, Source;
12+
1213
import 'location_provider.dart' show LocationProvider;
1314
import '../../compiler_new.dart';
1415

@@ -102,10 +103,6 @@ abstract class SourceFile<T> implements Input<T>, LocationProvider {
102103
if (colorize == null) {
103104
colorize = (text) => text;
104105
}
105-
if (end > length) {
106-
start = length - 1;
107-
end = length;
108-
}
109106

110107
kernel.Location startLocation = kernelSource.getLocation(null, start);
111108
kernel.Location endLocation = kernelSource.getLocation(null, end);
@@ -142,9 +139,15 @@ abstract class SourceFile<T> implements Input<T>, LocationProvider {
142139
for (int line = lineStart; line <= lineEnd; line++) {
143140
String textLine = kernelSource.getTextLine(line + 1);
144141
if (line == lineStart) {
142+
if (columnStart > textLine.length) {
143+
columnStart = textLine.length;
144+
}
145145
buf.write(textLine.substring(0, columnStart));
146146
buf.writeln(colorize(textLine.substring(columnStart)));
147147
} else if (line == lineEnd) {
148+
if (columnEnd > textLine.length) {
149+
columnEnd = textLine.length;
150+
}
148151
buf.write(colorize(textLine.substring(0, columnEnd)));
149152
buf.writeln(textLine.substring(columnEnd));
150153
} else {

pkg/compiler/lib/src/kernel/front_end_adapter.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ void reportFrontEndMessage(
8383
Spannable span;
8484
if (message.span != null) {
8585
span = new SourceSpan(message.span.start.sourceUrl,
86-
message.span.start.offset, message.span.start.offset + 1);
86+
message.span.start.offset, message.span.end.offset);
8787
} else {
8888
span = NO_LOCATION_SPANNABLE;
8989
}

pkg/compiler/testing.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
],
1515

1616
"exclude": [
17-
"^tests/compiler/dart2js/data/.*",
1817
"^tests/compiler/dart2js/inference/data/super_invoke\\.dart",
18+
"^tests/compiler/dart2js/old_frontend/data/.*",
1919
"^tests/compiler/dart2js/path with spaces/.*"
2020
]
2121
}

pkg/compiler/testing_dart.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
"exclude": [
1717
"^tests/compiler/dart2js/codegen_helper\\.dart",
1818
"^tests/compiler/dart2js/codegen/type_inference8_test\\.dart",
19-
"^tests/compiler/dart2js/data/one_line_dart_program\\.dart",
2019
"^tests/compiler/dart2js/deferred/inline_restrictions_test\\.dart",
2120
"^tests/compiler/dart2js/deferred/load_graph_segmentation2_test\\.dart",
2221
"^tests/compiler/dart2js/deferred/load_graph_segmentation_test\\.dart",
@@ -48,9 +47,10 @@
4847
"^tests/compiler/dart2js/needs_no_such_method_test\\.dart",
4948
"^tests/compiler/dart2js/no_such_method_enabled_test\\.dart",
5049
"^tests/compiler/dart2js/output_collector\\.dart",
51-
"^tests/compiler/dart2js/old_frontend/patch_test\\.dart",
50+
"^tests/compiler/dart2js/old_frontend/data/one_line_dart_program\\.dart",
5251
"^tests/compiler/dart2js/old_frontend/message_kind_helper\\.dart",
5352
"^tests/compiler/dart2js/old_frontend/metadata_test\\.dart",
53+
"^tests/compiler/dart2js/old_frontend/patch_test\\.dart",
5454
"^tests/compiler/dart2js/old_frontend/reexport_handled_test\\.dart",
5555
"^tests/compiler/dart2js/old_frontend/resolution_test\\.dart",
5656
"^tests/compiler/dart2js/quarantined/http_launch_data/http_launch_main_package\\.dart",

tests/co19/co19-dart2js.status

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -7037,7 +7037,6 @@ Language/Classes/Getters/same_name_method_t05: MissingCompileTimeError
70377037
Language/Classes/Getters/same_name_method_t07: MissingCompileTimeError
70387038
Language/Classes/Superinterfaces/more_than_once_t01: MissingCompileTimeError
70397039
Language/Classes/Superinterfaces/superclass_as_superinterface_t01: MissingCompileTimeError
7040-
Language/Classes/definition_t16: Crash
70417040
Language/Classes/definition_t24: MissingCompileTimeError
70427041
Language/Classes/same_name_instance_and_static_members_t01: MissingCompileTimeError
70437042
Language/Classes/same_name_instance_and_static_members_t02: MissingCompileTimeError
@@ -7060,36 +7059,15 @@ Language/Expressions/Constants/exception_t02: MissingCompileTimeError
70607059
Language/Expressions/Constants/logical_expression_t04: MissingCompileTimeError
70617060
Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t04: Crash
70627061
Language/Expressions/Instance_Creation/Const/exception_t01: MissingCompileTimeError
7063-
Language/Expressions/Maps/syntax_t08: Crash
70647062
Language/Expressions/Method_Invocation/Ordinary_Invocation/evaluation_t08: RuntimeError
70657063
Language/Expressions/Method_Invocation/Super_Invocation/accessible_instance_member_t02: Crash
70667064
Language/Expressions/Method_Invocation/Super_Invocation/evaluation_t05: RuntimeError
70677065
Language/Expressions/Method_Invocation/Super_Invocation/invocation_t02: Crash
70687066
Language/Expressions/Null/instance_of_class_null_t01: RuntimeError
7069-
Language/Expressions/Strings/String_Interpolation/syntax_t08: Crash
7070-
Language/Expressions/Strings/multi_line_t11: Crash # Investiage: source-data from FE causes us to crash
7071-
Language/Expressions/Strings/multi_line_t12: Crash
7072-
Language/Expressions/Strings/multi_line_t13: Crash
7073-
Language/Expressions/Strings/multi_line_t15: Crash
7074-
Language/Expressions/Strings/multi_line_t16: Crash
7075-
Language/Expressions/Strings/multi_line_t17: Crash
7076-
Language/Expressions/Strings/multi_line_t18: Crash
7077-
Language/Expressions/Strings/multi_line_t19: Crash
7078-
Language/Expressions/Strings/multi_line_t20: Crash
7079-
Language/Expressions/Strings/multi_line_t21: Crash
7080-
Language/Expressions/Strings/multi_line_t22: Crash
7081-
Language/Expressions/Strings/multi_line_t23: Crash
7082-
Language/Expressions/Strings/multi_line_t24: Crash
7083-
Language/Expressions/Strings/multi_line_t25: Crash
7084-
Language/Expressions/Strings/multi_line_t28: Crash
7085-
Language/Expressions/Strings/multi_line_t29: Crash
7086-
Language/Expressions/Strings/multi_line_t32: Crash
7087-
Language/Expressions/Strings/multi_line_t33: Crash
70887067
Language/Expressions/This/placement_t04: Crash
70897068
Language/Functions/External_Functions/not_connected_to_a_body_t01: RuntimeError
70907069
Language/Functions/Formal_Parameters/Optional_Formals/default_value_t01: MissingCompileTimeError
70917070
Language/Functions/Formal_Parameters/Optional_Formals/default_value_t02: MissingCompileTimeError
7092-
Language/Functions/syntax_t09: Crash
70937071
Language/Libraries_and_Scripts/Imports/same_name_t10: RuntimeError
70947072
Language/Libraries_and_Scripts/Scripts/top_level_main_t01: CompileTimeError
70957073
Language/Metadata/before_class_t01: RuntimeError
@@ -7182,7 +7160,6 @@ Language/Classes/Instance_Methods/Operators/allowed_names_t19: Crash
71827160
Language/Classes/Instance_Methods/Operators/allowed_names_t20: Crash
71837161
Language/Classes/Instance_Methods/Operators/allowed_names_t21: Crash
71847162
Language/Classes/Instance_Methods/Operators/allowed_names_t22: Crash
7185-
Language/Classes/definition_t16: Crash
71867163
Language/Classes/member_definition_t04: Crash
71877164
Language/Classes/member_definition_t06: Crash
71887165
Language/Classes/member_definition_t07: Crash
@@ -7193,39 +7170,18 @@ Language/Classes/member_definition_t11: Crash
71937170
Language/Classes/member_definition_t12: Crash
71947171
Language/Expressions/Constants/depending_on_itself_t03: Crash
71957172
Language/Expressions/Function_Invocation/Unqualified_Invocation/instance_context_invocation_t04: Crash
7196-
Language/Expressions/Maps/syntax_t08: Crash
71977173
Language/Expressions/Method_Invocation/Super_Invocation/accessible_instance_member_t02: Crash
71987174
Language/Expressions/Method_Invocation/Super_Invocation/evaluation_t05: Crash
71997175
Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t03: Crash
72007176
Language/Expressions/Method_Invocation/Super_Invocation/getter_lookup_failed_t04: Crash
72017177
Language/Expressions/Method_Invocation/Super_Invocation/invocation_t02: Crash
7202-
Language/Expressions/Strings/String_Interpolation/syntax_t08: Crash
7203-
Language/Expressions/Strings/multi_line_t11: Crash
7204-
Language/Expressions/Strings/multi_line_t12: Crash
7205-
Language/Expressions/Strings/multi_line_t13: Crash
7206-
Language/Expressions/Strings/multi_line_t15: Crash
7207-
Language/Expressions/Strings/multi_line_t16: Crash
7208-
Language/Expressions/Strings/multi_line_t17: Crash
7209-
Language/Expressions/Strings/multi_line_t18: Crash
7210-
Language/Expressions/Strings/multi_line_t19: Crash
7211-
Language/Expressions/Strings/multi_line_t20: Crash
7212-
Language/Expressions/Strings/multi_line_t21: Crash
7213-
Language/Expressions/Strings/multi_line_t22: Crash
7214-
Language/Expressions/Strings/multi_line_t23: Crash
7215-
Language/Expressions/Strings/multi_line_t24: Crash
7216-
Language/Expressions/Strings/multi_line_t25: Crash
7217-
Language/Expressions/Strings/multi_line_t28: Crash
7218-
Language/Expressions/Strings/multi_line_t29: Crash
7219-
Language/Expressions/Strings/multi_line_t32: Crash
7220-
Language/Expressions/Strings/multi_line_t33: Crash
72217178
Language/Expressions/This/placement_t04: Crash
72227179
Language/Functions/setter_modifier_t01: Crash
72237180
Language/Functions/setter_modifier_t02: Crash
72247181
Language/Functions/setter_modifier_t03: Crash
72257182
Language/Functions/setter_modifier_t04: Crash
72267183
Language/Functions/setter_modifier_t05: Crash
72277184
Language/Functions/setter_modifier_t06: Crash
7228-
Language/Functions/syntax_t09: Crash
72297185
Language/Statements/For/syntax_t13: Crash
72307186
Language/Statements/For/syntax_t20: Crash
72317187
LibTest/core/Invocation/namedArguments_A01_t01: Crash

tests/compiler/dart2js/zero_termination_test.dart renamed to tests/compiler/dart2js/old_frontend/zero_termination_test.dart

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import 'package:compiler/src/commandline_options.dart';
1616
import 'package:expect/expect.dart';
1717
import 'package:path/path.dart' as path;
1818

19-
import 'end_to_end/launch_helper.dart' show launchDart2Js;
19+
import '../end_to_end/launch_helper.dart' show launchDart2Js;
2020

2121
Uri pathOfData = Platform.script;
2222
Directory tempDir;
@@ -53,30 +53,35 @@ void check(ProcessResult result) {
5353
Expect.notEquals(0, result.exitCode);
5454
List<int> stdout = result.stdout;
5555
String stdoutString = utf8.decode(stdout);
56-
Expect.isTrue(stdoutString.contains("Error"));
56+
Expect.isTrue(stdoutString.contains("Error"), "stdout:\n$stdoutString");
5757
// Make sure the "499" from the last line is in the output.
58-
Expect.isTrue(stdoutString.contains("499"));
58+
Expect.isTrue(stdoutString.contains("499"), "stdout:\n$stdoutString");
5959

6060
// Make sure that the output does not contain any 0 character.
6161
Expect.isFalse(stdout.contains(0));
6262
}
6363

64-
Future testFile({bool useKernel}) async {
64+
Future testFile() async {
6565
String inFilePath =
6666
pathOfData.resolve('data/one_line_dart_program.dart').path;
67-
List<String> args = [inFilePath, "--out=" + outFilePath];
68-
if (!useKernel) args.add(Flags.useOldFrontend);
69-
67+
List<String> args = [
68+
inFilePath,
69+
"--out=" + outFilePath,
70+
Flags.useOldFrontend
71+
];
7072
await cleanup();
7173
check(await launchDart2Js(args, noStdoutEncoding: true));
7274
await cleanup();
7375
}
7476

75-
Future serverRunning(HttpServer server, {bool useKernel}) async {
77+
Future serverRunning(HttpServer server) async {
7678
int port = server.port;
7779
String inFilePath = "http://127.0.0.1:$port/data/one_line_dart_program.dart";
78-
List<String> args = [inFilePath, "--out=" + outFilePath];
79-
if (!useKernel) args.add(Flags.useOldFrontend);
80+
List<String> args = [
81+
inFilePath,
82+
"--out=" + outFilePath,
83+
Flags.useOldFrontend
84+
];
8085

8186
server.listen(handleRequest);
8287
try {
@@ -88,32 +93,26 @@ Future serverRunning(HttpServer server, {bool useKernel}) async {
8893
}
8994
}
9095

91-
Future testHttp({bool useKernel}) {
96+
Future testHttp() {
9297
return HttpServer
9398
.bind(InternetAddress.LOOPBACK_IP_V4, 0)
94-
.then((HttpServer server) => serverRunning(server, useKernel: useKernel));
99+
.then((HttpServer server) => serverRunning(server));
95100
}
96101

97-
runTests({bool useKernel}) async {
102+
runTests() async {
98103
tempDir = Directory.systemTemp.createTempSync('directory_test');
99104
outFilePath = path.join(tempDir.path, "out.js");
100105

101106
try {
102-
await testFile(useKernel: useKernel);
103-
if (!useKernel) {
104-
// TODO(johnniwinther): Handle this test for kernel.
105-
await testHttp(useKernel: useKernel);
106-
}
107+
await testFile();
108+
await testHttp();
107109
} finally {
108110
await tempDir.delete(recursive: true);
109111
}
110112
}
111113

112114
main() {
113115
asyncTest(() async {
114-
print('--test from ast---------------------------------------------------');
115-
await runTests(useKernel: false);
116-
print('--test from kernel------------------------------------------------');
117-
await runTests(useKernel: true);
116+
await runTests();
118117
});
119118
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
// Regression test derived from language/issue_1578_test.dart with Windows
6+
// line encoding.
7+
8+
main() {}
9+
10+
]~<)$ //# 01: compile-time error

0 commit comments

Comments
 (0)