You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@drill.apache.org by "Paul Rogers (JIRA)" <ji...@apache.org> on 2017/03/10 19:57:04 UTC
[jira] [Updated] (DRILL-5330) NPE in
FunctionImplementationRegistry.functionReplacement()
[ https://issues.apache.org/jira/browse/DRILL-5330?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Paul Rogers updated DRILL-5330:
-------------------------------
Reviewer: Arina Ielchiieva
> NPE in FunctionImplementationRegistry.functionReplacement()
> -----------------------------------------------------------
>
> Key: DRILL-5330
> URL: https://issues.apache.org/jira/browse/DRILL-5330
> Project: Apache Drill
> Issue Type: Bug
> Affects Versions: 1.10.0
> Reporter: Paul Rogers
> Assignee: Paul Rogers
> Fix For: 1.11.0
>
>
> The code in {{FunctionImplementationRegistry.functionReplacement()}} will produce an NPE if ever it is called:
> {code}
> if (optionManager != null
> && optionManager.getOption(
> ExecConstants.CAST_TO_NULLABLE_NUMERIC).bool_val
> ...
> {code}
> If an option manager is provided, then get the specified option. The option manager will contain a value for that option only if the user has explicitly set that option. Suppose the user had not set the option. Then the return from {{getOption()}} will be null.
> The next thing we do is *assume* that the option exists and is a boolean by dereferencing the option. This will trigger an NPE. This NPE was seen in detail-level unit tests.
> The proper way to handle such options is to use an option validator. Strangely, one actually exists in {{ExecConstants}}:
> {code}
> String CAST_TO_NULLABLE_NUMERIC = "drill.exec.functions.cast_empty_string_to_null";
> OptionValidator CAST_TO_NULLABLE_NUMERIC_OPTION = new BooleanValidator(CAST_TO_NULLABLE_NUMERIC, false);
> {code}
> Then do:
> {code}
> optionManager.getOption(
> ExecConstants.CAST_TO_NULLABLE_NUMERIC_OPTION)
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)