Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(804)

Unified Diff: pkg/analysis_server/lib/src/domain_completion.dart

Issue 1531353002: report invalid param if offset is out of bounds (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: merge Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/domain_completion.dart
diff --git a/pkg/analysis_server/lib/src/domain_completion.dart b/pkg/analysis_server/lib/src/domain_completion.dart
index 370e7bfad1d573ab8c3b5e32957132c8a1d795aa..653d50990e20dc5c5da5cee90ffd94702d8e58db 100644
--- a/pkg/analysis_server/lib/src/domain_completion.dart
+++ b/pkg/analysis_server/lib/src/domain_completion.dart
@@ -181,17 +181,26 @@ class CompletionDomainHandler implements RequestHandler {
*/
Response processRequest(Request request, [CompletionManager manager]) {
performance = new CompletionPerformance();
- // extract params
+
+ // extract and validate params
CompletionGetSuggestionsParams params =
new CompletionGetSuggestionsParams.fromRequest(request);
- // schedule completion analysis
- String completionId = (_nextCompletionId++).toString();
ContextSourcePair contextSource = server.getContextSourcePair(params.file);
AnalysisContext context = contextSource.context;
Source source = contextSource.source;
if (context == null || !context.exists(source)) {
return new Response.unknownSource(request);
}
+ TimestampedData<String> contents = context.getContents(source);
+ if (params.offset < 0 || params.offset > contents.data.length) {
+ return new Response.invalidParameter(
+ request,
+ 'params.offset',
+ 'Expected offset between 0 and source length inclusive,'
+ ' but found ${params.offset}');
+ }
+
+ // schedule completion analysis
recordRequest(performance, context, source, params.offset);
if (manager == null) {
manager = completionManagerFor(context, source);
@@ -199,6 +208,7 @@ class CompletionDomainHandler implements RequestHandler {
CompletionRequest completionRequest = new CompletionRequestImpl(context,
server.resourceProvider, server.searchEngine, source, params.offset);
int notificationCount = 0;
+ String completionId = (_nextCompletionId++).toString();
manager.results(completionRequest).listen((CompletionResult result) {
++notificationCount;
bool isLast = result is CompletionResultImpl ? result.isLast : true;
« no previous file with comments | « no previous file | pkg/analysis_server/lib/src/services/completion/dart_completion_manager.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698