You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Laird Nelson (JIRA)" <ji...@apache.org> on 2017/03/17 18:18:41 UTC

[jira] [Updated] (MRESOLVER-19) DefaultRepositorySystem resolveDependencies() line 370 can yield a NullPointerException

     [ https://issues.apache.org/jira/browse/MRESOLVER-19?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Laird Nelson updated MRESOLVER-19:
----------------------------------
    Description: 
If a transfer of an artifact fails, then a {{NullPointerException}} is thrown.

Starting from line 366:
{code}
ArtifactRequestBuilder builder = new ArtifactRequestBuilder( trace );
DependencyFilter filter = request.getFilter();
DependencyVisitor visitor = ( filter != null ) ? new FilteringDependencyVisitor( builder, filter ) : builder;
visitor = new TreeDependencyVisitor( visitor );
result.getRoot().accept( visitor ); // <-- if getRoot() is null: kaboom!
List<ArtifactRequest> requests = builder.getRequests();
{code}

This is the relevant section of my code that causes the error:

{code}
final CollectRequest collectRequest = new CollectRequest();
collectRequest.setRoot(new Dependency(artifact, JavaScopes.COMPILE));
collectRequest.setRepositories(Collections.singletonList(mavenCentral));

final DependencyRequest dependencyRequest = new DependencyRequest(collectRequest, classpathFilter);
final DependencyResult dependencyResult = repositorySystem.resolveDependencies(repositorySystemSession, dependencyRequest);
{code}

From looking inside {{DefaultRepositorySystem.java}}, it looks like the collection result never gets its root set.  At line 340 and following you see this:

{code}
if ( request.getRoot() != null )
{
    result.setRoot( request.getRoot() );
}
else if ( request.getCollectRequest() != null )
{
    CollectResult collectResult;
    try
    {
        request.getCollectRequest().setTrace( trace );
        collectResult = dependencyCollector.collectDependencies( session, request.getCollectRequest() );
    }
    catch ( DependencyCollectionException e )
    {
        dce = e;
        collectResult = e.getResult();
    }
    result.setRoot( collectResult.getRoot() );
    result.setCycles( collectResult.getCycles() );
    result.setCollectExceptions( collectResult.getExceptions() );
}
{code}

Note in particular this line: 
{code}
result.setRoot( collectResult.getRoot() );
{code}

Unless I'm missing something there's no guarantee that {{collectResult.getRoot()}} will be non-{{null}} if the collection request failed.

  was:
If a transfer of an artifact fails, then a {{NullPointerException}} is thrown.

Starting from line 366:
{code}
ArtifactRequestBuilder builder = new ArtifactRequestBuilder( trace );
DependencyFilter filter = request.getFilter();
DependencyVisitor visitor = ( filter != null ) ? new FilteringDependencyVisitor( builder, filter ) : builder;
visitor = new TreeDependencyVisitor( visitor );
result.getRoot().accept( visitor ); // <-- if getRoot() is null: kaboom!
List<ArtifactRequest> requests = builder.getRequests();
{code}

This is the relevant section of my code that causes the error:

{code}
final CollectRequest collectRequest = new CollectRequest();
collectRequest.setRoot(new Dependency(artifact, JavaScopes.COMPILE));
collectRequest.setRepositories(Collections.singletonList(mavenCentral));

final DependencyRequest dependencyRequest = new DependencyRequest(collectRequest, classpathFilter);
final DependencyResult dependencyResult = repositorySystem.resolveDependencies(repositorySystemSession, dependencyRequest);
{code}

From looking inside {{DefaultRepositorySystem.java}}, it looks like the collection result never gets its root set.  At line 357 and following you see this:

{code}
if ( request.getRoot() != null )
{
    result.setRoot( request.getRoot() );
}
else if ( request.getCollectRequest() != null )
{
    CollectResult collectResult;
    try
    {
        request.getCollectRequest().setTrace( trace );
        collectResult = dependencyCollector.collectDependencies( session, request.getCollectRequest() );
    }
    catch ( DependencyCollectionException e )
    {
        dce = e;
        collectResult = e.getResult();
    }
    result.setRoot( collectResult.getRoot() );
    result.setCycles( collectResult.getCycles() );
    result.setCollectExceptions( collectResult.getExceptions() );
}
{code}

Note in particular this line: 
{code}
result.setRoot( collectResult.getRoot() );
{code}

Unless I'm missing something there's no guarantee that {{collectResult.getRoot()}} will be non-{{null}} if the collection request failed.


> DefaultRepositorySystem resolveDependencies() line 370 can yield a NullPointerException
> ---------------------------------------------------------------------------------------
>
>                 Key: MRESOLVER-19
>                 URL: https://issues.apache.org/jira/browse/MRESOLVER-19
>             Project: Maven Resolver
>          Issue Type: Bug
>          Components: resolver
>    Affects Versions: Maven Artifact Resolver 1.0.3
>            Reporter: Laird Nelson
>
> If a transfer of an artifact fails, then a {{NullPointerException}} is thrown.
> Starting from line 366:
> {code}
> ArtifactRequestBuilder builder = new ArtifactRequestBuilder( trace );
> DependencyFilter filter = request.getFilter();
> DependencyVisitor visitor = ( filter != null ) ? new FilteringDependencyVisitor( builder, filter ) : builder;
> visitor = new TreeDependencyVisitor( visitor );
> result.getRoot().accept( visitor ); // <-- if getRoot() is null: kaboom!
> List<ArtifactRequest> requests = builder.getRequests();
> {code}
> This is the relevant section of my code that causes the error:
> {code}
> final CollectRequest collectRequest = new CollectRequest();
> collectRequest.setRoot(new Dependency(artifact, JavaScopes.COMPILE));
> collectRequest.setRepositories(Collections.singletonList(mavenCentral));
> final DependencyRequest dependencyRequest = new DependencyRequest(collectRequest, classpathFilter);
> final DependencyResult dependencyResult = repositorySystem.resolveDependencies(repositorySystemSession, dependencyRequest);
> {code}
> From looking inside {{DefaultRepositorySystem.java}}, it looks like the collection result never gets its root set.  At line 340 and following you see this:
> {code}
> if ( request.getRoot() != null )
> {
>     result.setRoot( request.getRoot() );
> }
> else if ( request.getCollectRequest() != null )
> {
>     CollectResult collectResult;
>     try
>     {
>         request.getCollectRequest().setTrace( trace );
>         collectResult = dependencyCollector.collectDependencies( session, request.getCollectRequest() );
>     }
>     catch ( DependencyCollectionException e )
>     {
>         dce = e;
>         collectResult = e.getResult();
>     }
>     result.setRoot( collectResult.getRoot() );
>     result.setCycles( collectResult.getCycles() );
>     result.setCollectExceptions( collectResult.getExceptions() );
> }
> {code}
> Note in particular this line: 
> {code}
> result.setRoot( collectResult.getRoot() );
> {code}
> Unless I'm missing something there's no guarantee that {{collectResult.getRoot()}} will be non-{{null}} if the collection request failed.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)