Do not throw on malformed UTF-8 encodings. (#1890)
diff --git a/lib/src/package_meta.dart b/lib/src/package_meta.dart
index 3258b7f..ffdfe40 100644
--- a/lib/src/package_meta.dart
+++ b/lib/src/package_meta.dart
@@ -4,6 +4,7 @@
library dartdoc.package_meta;
+import 'dart:convert';
import 'dart:io';
import 'package:analyzer/dart/element/element.dart';
@@ -14,6 +15,7 @@
import 'logging.dart';
Map<String, PackageMeta> _packageMetaCache = {};
+Encoding utf8AllowMalformed = new Utf8Codec(allowMalformed: true);
Directory get defaultSdkDir {
Directory sdkDir = new File(Platform.resolvedExecutable).parent.parent;
@@ -212,7 +214,7 @@
factory FileContents(File file) =>
file == null ? null : new FileContents._(file);
- String get contents => file.readAsStringSync();
+ String get contents => file.readAsStringSync(encoding: utf8AllowMalformed);
bool get isMarkdown => file.path.toLowerCase().endsWith('.md');
diff --git a/test/package_meta_test.dart b/test/package_meta_test.dart
index 15b4d49..6112aea 100644
--- a/test/package_meta_test.dart
+++ b/test/package_meta_test.dart
@@ -7,6 +7,7 @@
import 'dart:io';
import 'package:dartdoc/src/package_meta.dart';
+import 'package:path/path.dart' as pathLib;
import 'package:test/test.dart';
void main() {
@@ -23,6 +24,14 @@
});
});
+ group('PackageMeta for the test package', () {
+ PackageMeta p = new PackageMeta.fromDir(new Directory(pathLib.join(Directory.current.path, 'testing', 'test_package')));
+
+ test('readme with corrupt UTF-8 loads without throwing', () {
+ expect(p.getReadmeContents().contents, contains('Here is some messed up UTF-8.\nÃf'));
+ });
+ });
+
group('PackageMeta.fromDir for this package', () {
PackageMeta p = new PackageMeta.fromDir(Directory.current);
diff --git a/testing/test_package/README.md b/testing/test_package/README.md
index 22d04e9..9e4d75e 100644
--- a/testing/test_package/README.md
+++ b/testing/test_package/README.md
@@ -5,6 +5,8 @@
This is an amazing package.
+## Here is some messed up UTF-8.
+ÃÂfÃÂÃÂÃzÂâ°
## Examples