You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@accumulo.apache.org by "Christopher Tubbs (JIRA)" <ji...@apache.org> on 2019/04/23 23:43:00 UTC
[jira] [Resolved] (ACCUMULO-4336) Command line interpreter escaping
issues
[ https://issues.apache.org/jira/browse/ACCUMULO-4336?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Christopher Tubbs resolved ACCUMULO-4336.
-----------------------------------------
Resolution: Won't Fix
Not sure it's reasonable for the shell to handle all such edge cases. The shell is limited, primarily intended for triage. It cannot replace programmatic access.
> Command line interpreter escaping issues
> ----------------------------------------
>
> Key: ACCUMULO-4336
> URL: https://issues.apache.org/jira/browse/ACCUMULO-4336
> Project: Accumulo
> Issue Type: Bug
> Components: shell
> Reporter: Matt Peterson
> Priority: Minor
>
> To see the problem, add the following unit test. It will fail.
> {code:title=ShellTest.java|borderStyle=solid}
> Test
> public void scanEscapedQuote() throws Exception {
> exec("createtable test", true);
> exec("insert \\\" f q v", true);
> exec("scan", true, "\" f: q [] v"); // passes
> exec("scan -e \\\"", true, "\" f: q [] v"); // fails
> exec("deletetable test -f", true, "Table: [test] has been deleted");
> }
> {code}
> It appears that the commons-cli library that is used for parsing commands will strip the leading \" from the option's value and return an empty string.
> {code:title=Parser.java, line 332|borderStyle=solid}
> opt.addValueForProcessing(Util.stripLeadingAndTrailingQuotes(str));
> {code}
> For scans, an empty string as an end row will cause the scan to do nothing, which is a reasonable way to fail.
> For compactions, an empty string as an end row will cause the end row to be ignored, which can lead to accidentally initiating a compaction over much of a table. It is not possible to test the compaction issue with ShellTest because MockTableOperationsImpl does not do anything with compactions. But the problem code can be seen in the constructor for CompactRange:
> {code:title=CompactRange.java|borderStyle=solid}
> this.endRow = endRow.length == 0 ? null : endRow;
> {code}
> This code will treat an end row of \" as though there was no end row at all.
> The workaround for this is to use the \x22 instead of \".
> Additionally, some characters are not possible to include as either begin or end rows. For example, a ! character cannot be escaped but without escaping will crash the shell.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)