When the analyzer is analyzing a package using a different version of meta than the one it was compiled with, it may crash:
Unhandled exception:
RangeError (index): Invalid value: Not in inclusive range 0..12: 13
#0 List.[] (dart:core-patch/array.dart:268:52)
#1 BestPracticesVerifier._targetKindsFor (package:analyzer/src/error/best_practices_verifier.dart:1601:38)
#2 BestPracticesVerifier.visitAnnotation (package:analyzer/src/error/best_practices_verifier.dart:253:17)
#3 AnnotationImpl.accept (package:analyzer/src/dart/ast/ast.dart:302:50)
#4 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:7517:20)
#5 AnnotatedNodeImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:145:17)
#6 ClassDeclarationImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:1537:11)
#7 RecursiveAstVisitor.visitClassDeclaration (package:analyzer/dart/ast/visitor.dart:711:10)
#8 BestPracticesVerifier.visitClassDeclaration (package:analyzer/src/error/best_practices_verifier.dart:323:13)
#9 ClassDeclarationImpl.accept (package:analyzer/src/dart/ast/ast.dart:1514:50)
#10 NodeListImpl.accept (package:analyzer/src/dart/ast/ast.dart:7517:20)
#11 CompilationUnitImpl.visitChildren (package:analyzer/src/dart/ast/ast.dart:2112:21)
#12 RecursiveAstVisitor.visitCompilationUnit (package:analyzer/dart/ast/visitor.dart:735:10)
#13 CompilationUnitImpl.accept (package:analyzer/src/dart/ast/ast.dart:2105:50)
#14 LibraryAnalyzer._computeHints (package:analyzer/src/dart/analysis/library_analyzer.dart:276:10)
#15 LibraryAnalyzer.analyzeSync.<anonymous closure> (package:analyzer/src/dart/analysis/library_analyzer.dart:158:9)
#16 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:397:8)
#17 LibraryAnalyzer.analyzeSync (package:analyzer/src/dart/analysis/library_analyzer.dart:157:13)
#18 LibraryAnalyzer.analyze (package:analyzer/src/dart/analysis/library_analyzer.dart:104:12)
#19 AnalysisDriver._computeAnalysisResult.<anonymous closure> (package:analyzer/src/dart/analysis/driver.dart:1315:63)
#20 PerformanceLog.run (package:analyzer/src/dart/analysis/performance_logger.dart:32:15)
#21 AnalysisDriver._computeAnalysisResult (package:analyzer/src/dart/analysis/driver.dart:1286:20)
#22 AnalysisDriver._computeErrors (package:analyzer/src/dart/analysis/driver.dart:1369:26)
#23 AnalysisDriver.performWork (package:analyzer/src/dart/analysis/driver.dart:987:20)
#24 AnalysisDriverScheduler._run (package:analyzer/src/dart/analysis/driver.dart:2006:24)
<asynchronous suspension>
#0 AnalysisDriver._computeAnalysisResult.<anonymous closure> (package:analyzer/src/dart/analysis/driver.dart:1344:9)
#1 PerformanceLog.run (package:analyzer/src/dart/analysis/performance_logger.dart:32:15)
#2 AnalysisDriver._computeAnalysisResult (package:analyzer/src/dart/analysis/driver.dart:1286:20)
#3 AnalysisDriver._computeErrors (package:analyzer/src/dart/analysis/driver.dart:1369:26)
#4 AnalysisDriver.performWork (package:analyzer/src/dart/analysis/driver.dart:987:20)
#5 AnalysisDriverScheduler._run (package:analyzer/src/dart/analysis/driver.dart:2006:24)
<asynchronous suspension>
It looks like the culprit is this logic here:
|
for (var kindObject in value.getField('kinds')!.toSetValue()!) { |
|
var index = kindObject.getField('index')!.toIntValue()!; |
|
kinds.add(TargetKind.values[index]); |
|
} |
kindObject.getField('index')!.toIntValue()! refers to the index of the value in the actual meta package used by the code analyzed. However, TargetKind.values may be a different meta version (the one used when the SDK was built). Due to this mismatch, the analyzer may resolve to a wrong TargetKind. If a new meta update adds a new TargetKind with a higher index than what's available in the meta version used to compile the SDK, the analyzer crashes.
To reproduce:
cd /tmp
curl https://storage.googleapis.com/pub-packages/packages/moor-4.3.2.tar.gz --output moor.tar.gz
mkdir moor
cd moor
tar --extract --gzip --file ../moor.tar.gz
dart pub upgrade
dartanalyzer lib
I'll contribute a fix myself, just wanted to report this first.
When the analyzer is analyzing a package using a different version of
metathan the one it was compiled with, it may crash:It looks like the culprit is this logic here:
sdk/pkg/analyzer/lib/src/error/best_practices_verifier.dart
Lines 1626 to 1629 in 0742ed6
kindObject.getField('index')!.toIntValue()!refers to the index of the value in the actual meta package used by the code analyzed. However,TargetKind.valuesmay be a different meta version (the one used when the SDK was built). Due to this mismatch, the analyzer may resolve to a wrongTargetKind. If a newmetaupdate adds a newTargetKindwith a higher index than what's available in the meta version used to compile the SDK, the analyzer crashes.To reproduce:
I'll contribute a fix myself, just wanted to report this first.