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

Side by Side Diff: pkg/analysis_server/lib/src/domain_analysis.dart

Issue 1511833004: Validate that root paths are absolute and normalized. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library domain.analysis; 5 library domain.analysis;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:core' hide Resource; 8 import 'dart:core' hide Resource;
9 9
10 import 'package:analysis_server/plugin/analysis/analysis_domain.dart'; 10 import 'package:analysis_server/plugin/analysis/analysis_domain.dart';
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 /** 168 /**
169 * Implement the `analysis.getReachableSources` request. 169 * Implement the `analysis.getReachableSources` request.
170 */ 170 */
171 Response getReachableSources(Request request) { 171 Response getReachableSources(Request request) {
172 AnalysisGetReachableSourcesParams params = 172 AnalysisGetReachableSourcesParams params =
173 new AnalysisGetReachableSourcesParams.fromRequest(request); 173 new AnalysisGetReachableSourcesParams.fromRequest(request);
174 ContextSourcePair pair = server.getContextSourcePair(params.file); 174 ContextSourcePair pair = server.getContextSourcePair(params.file);
175 if (pair.context == null || pair.source == null) { 175 if (pair.context == null || pair.source == null) {
176 return new Response.getReachableSourcesInvalidFile(request); 176 return new Response.getReachableSourcesInvalidFile(request);
177 } 177 }
178 Map<String, List<String>> sources = new ReachableSourceCollector( 178 Map<String, List<String>> sources =
179 pair.source, pair.context).collectSources(); 179 new ReachableSourceCollector(pair.source, pair.context)
180 .collectSources();
180 return new AnalysisGetReachableSourcesResult(sources) 181 return new AnalysisGetReachableSourcesResult(sources)
181 .toResponse(request.id); 182 .toResponse(request.id);
182 } 183 }
183 184
184 @override 185 @override
185 Response handleRequest(Request request) { 186 Response handleRequest(Request request) {
186 try { 187 try {
187 String requestName = request.method; 188 String requestName = request.method;
188 if (requestName == ANALYSIS_GET_ERRORS) { 189 if (requestName == ANALYSIS_GET_ERRORS) {
189 return getErrors(request); 190 return getErrors(request);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 server.reanalyze(rootResources); 239 server.reanalyze(rootResources);
239 } 240 }
240 return new AnalysisReanalyzeResult().toResponse(request.id); 241 return new AnalysisReanalyzeResult().toResponse(request.id);
241 } 242 }
242 243
243 /** 244 /**
244 * Implement the 'analysis.setAnalysisRoots' request. 245 * Implement the 'analysis.setAnalysisRoots' request.
245 */ 246 */
246 Response setAnalysisRoots(Request request) { 247 Response setAnalysisRoots(Request request) {
247 var params = new AnalysisSetAnalysisRootsParams.fromRequest(request); 248 var params = new AnalysisSetAnalysisRootsParams.fromRequest(request);
249 List<String> includedPathList = params.included;
250 List<String> excludedPathList = params.excluded;
251 // validate
252 for (String path in includedPathList) {
253 if (!server.isValidFilePath(path)) {
254 return new Response.invalidFilePathFormat(request, path);
255 }
256 }
257 for (String path in excludedPathList) {
258 if (!server.isValidFilePath(path)) {
259 return new Response.invalidFilePathFormat(request, path);
260 }
261 }
248 // continue in server 262 // continue in server
249 server.setAnalysisRoots(request.id, params.included, params.excluded, 263 server.setAnalysisRoots(request.id, includedPathList, excludedPathList,
250 params.packageRoots == null ? {} : params.packageRoots); 264 params.packageRoots ?? <String, String>{});
251 return new AnalysisSetAnalysisRootsResult().toResponse(request.id); 265 return new AnalysisSetAnalysisRootsResult().toResponse(request.id);
252 } 266 }
253 267
254 /** 268 /**
255 * Implement the 'analysis.setGeneralSubscriptions' request. 269 * Implement the 'analysis.setGeneralSubscriptions' request.
256 */ 270 */
257 Response setGeneralSubscriptions(Request request) { 271 Response setGeneralSubscriptions(Request request) {
258 AnalysisSetGeneralSubscriptionsParams params = 272 AnalysisSetGeneralSubscriptionsParams params =
259 new AnalysisSetGeneralSubscriptionsParams.fromRequest(request); 273 new AnalysisSetGeneralSubscriptionsParams.fromRequest(request);
260 server.setGeneralAnalysisSubscriptions(params.subscriptions); 274 server.setGeneralAnalysisSubscriptions(params.subscriptions);
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 } 354 }
341 } 355 }
342 } 356 }
343 357
344 /** 358 /**
345 * An implementation of [AnalysisDomain] for [AnalysisServer]. 359 * An implementation of [AnalysisDomain] for [AnalysisServer].
346 */ 360 */
347 class AnalysisDomainImpl implements AnalysisDomain { 361 class AnalysisDomainImpl implements AnalysisDomain {
348 final AnalysisServer server; 362 final AnalysisServer server;
349 363
350 final Map<ResultDescriptor, 364 final Map<ResultDescriptor, StreamController<engine.ComputedResult>>
351 StreamController<engine.ComputedResult>> controllers = 365 controllers =
352 <ResultDescriptor, StreamController<engine.ComputedResult>>{}; 366 <ResultDescriptor, StreamController<engine.ComputedResult>>{};
353 367
354 AnalysisDomainImpl(this.server) { 368 AnalysisDomainImpl(this.server) {
355 server.onContextsChanged.listen((ContextsChangedEvent event) { 369 server.onContextsChanged.listen((ContextsChangedEvent event) {
356 event.added.forEach(_subscribeForContext); 370 event.added.forEach(_subscribeForContext);
357 }); 371 });
358 } 372 }
359 373
360 @override 374 @override
361 Stream<engine.ComputedResult> onResultComputed(ResultDescriptor descriptor) { 375 Stream<engine.ComputedResult> onResultComputed(ResultDescriptor descriptor) {
(...skipping 24 matching lines...) Expand all
386 context.onResultComputed(descriptor).listen((result) { 400 context.onResultComputed(descriptor).listen((result) {
387 StreamController<engine.ComputedResult> controller = 401 StreamController<engine.ComputedResult> controller =
388 controllers[result.descriptor]; 402 controllers[result.descriptor];
389 if (controller != null) { 403 if (controller != null) {
390 controller.add(result); 404 controller.add(result);
391 } 405 }
392 }); 406 });
393 } 407 }
394 } 408 }
395 } 409 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698