[ https://issues.apache.org/jira/browse/CASSANDRA-14385?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16444075#comment-16444075 ]
ASF GitHub Bot commented on CASSANDRA-14385: -------------------------------------------- GitHub user brettKK opened a pull request: https://github.com/apache/cassandra/pull/219 CASSANDRA-14385 @LJ1043041006 found a potential NPE in cassandra --- We have developed a static analysis tool [NPEDetector](https://github.com/lujiefsi/NPEDetector) to find some potential NPE. Our analysis shows that some callees may return null in corner case(e.g. node crash , IO exception), some of their callers have !=null check but some do not have. In this issue we post a patch which can add !=null based on existed !=null check. For example: Calle Schema#getView may return null: ``` public ViewMetadata getView(String keyspaceName, String viewName) { assert keyspaceName != null; KeyspaceMetadata ksm = keyspaces.getNullable(keyspaceName); return (ksm == null) ? null : ksm.views.getNullable(viewName);//may return null } ``` it have 4 callers, 3 of them have !=null check, like its caller MigrationManager#announceViewDrop have !=null check() ``` public static void announceViewDrop(String ksName, String viewName, boolean announceLocally) throws ConfigurationException { ViewMetadata view = Schema.instance.getView(ksName, viewName); if (view == null)//null pointer checker throw new ConfigurationException(String.format("Cannot drop non existing materialized view '%s' in keyspace '%s'.", viewName, ksName)); KeyspaceMetadata ksm = Schema.instance.getKeyspaceMetadata(ksName); logger.info("Drop table '{}/{}'", view.keyspace, view.name); announce(SchemaKeyspace.makeDropViewMutation(ksm, view, FBUtilities.timestampMicros()), announceLocally); } ``` but caller MigrationManager#announceMigration does not have You can merge this pull request into a Git repository by running: $ git pull https://github.com/brettKK/cassandra CASSANDRA-14385 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/cassandra/pull/219.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #219 ---- commit 61b4ed4afbd80fbde24bef3cedb9e8d3b06f788c Author: brettkk <1099446733@...> Date: 2018-04-19T13:49:49Z fix CASSANDRA-14385 ---- > Fix Some Potential NPE > ----------------------- > > Key: CASSANDRA-14385 > URL: https://issues.apache.org/jira/browse/CASSANDRA-14385 > Project: Cassandra > Issue Type: Bug > Reporter: lujie > Priority: Major > Attachments: CA-14385_1.patch > > > We have developed a static analysis tool > [NPEDetector|https://github.com/lujiefsi/NPEDetector] to find some potential > NPE. Our analysis shows that some callees may return null in corner case(e.g. > node crash , IO exception), some of their callers have _!=null_ check but > some do not have. In this issue we post a patch which can add !=null based > on existed !=null check. For example: > Calle Schema#getView may return null: > {code:java} > public ViewMetadata getView(String keyspaceName, String viewName) > { > assert keyspaceName != null; > KeyspaceMetadata ksm = keyspaces.getNullable(keyspaceName); > return (ksm == null) ? null : ksm.views.getNullable(viewName);//may > return null > } > {code} > it have 4 callers, 3 of them have !=null check, like its caller > MigrationManager#announceViewDrop have !=null check() > {code:java} > public static void announceViewDrop(String ksName, String viewName, boolean > announceLocally) throws ConfigurationException > { > ViewMetadata view = Schema.instance.getView(ksName, viewName); > if (view == null)//null pointer checker > throw new ConfigurationException(String.format("Cannot drop non > existing materialized view '%s' in keyspace '%s'.", viewName, ksName)); > KeyspaceMetadata ksm = Schema.instance.getKeyspaceMetadata(ksName); > logger.info("Drop table '{}/{}'", view.keyspace, view.name); > announce(SchemaKeyspace.makeDropViewMutation(ksm, view, > FBUtilities.timestampMicros()), announceLocally); > } > {code} > but caller MigrationManager#announceMigration does not have > We add !=null check based on MigrationManager#announceViewDrop: > {code:java} > if (current == null) > throw new InvalidRequestException("There is no materialized view in > keyspace " + keyspace()); > {code} > But due to we are not very familiar with CASSANDRA, hope some expert can > review it. > Thanks!!!! > -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org