Repository: systemml Updated Branches: refs/heads/master b19f6f5a9 -> 10f8e23d5
[MINOR] Function with no args gives ArrayIndexOutOfBoundsException Handle built-in function calls with no args (such as 'x=min();'), since this could give an ArrayIndexOutOfBoundsException in the toString() of BuiltinFunctionExpression during live variable analysis. Closes #630. Project: http://git-wip-us.apache.org/repos/asf/systemml/repo Commit: http://git-wip-us.apache.org/repos/asf/systemml/commit/10f8e23d Tree: http://git-wip-us.apache.org/repos/asf/systemml/tree/10f8e23d Diff: http://git-wip-us.apache.org/repos/asf/systemml/diff/10f8e23d Branch: refs/heads/master Commit: 10f8e23d55c26e676ae3f07a62e51b8397b8a8b0 Parents: b19f6f5 Author: Deron Eriksson <[email protected]> Authored: Wed Aug 23 17:13:50 2017 -0700 Committer: Deron Eriksson <[email protected]> Committed: Wed Aug 23 17:13:50 2017 -0700 ---------------------------------------------------------------------- .../sysml/parser/BuiltinFunctionExpression.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/systemml/blob/10f8e23d/src/main/java/org/apache/sysml/parser/BuiltinFunctionExpression.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/sysml/parser/BuiltinFunctionExpression.java b/src/main/java/org/apache/sysml/parser/BuiltinFunctionExpression.java index aa26f2d..ef3f368 100644 --- a/src/main/java/org/apache/sysml/parser/BuiltinFunctionExpression.java +++ b/src/main/java/org/apache/sysml/parser/BuiltinFunctionExpression.java @@ -328,6 +328,9 @@ public class BuiltinFunctionExpression extends DataIdentifier DataIdentifier output = new DataIdentifier(outputName); output.setAllPositions(this.getFilename(), this.getBeginLine(), this.getBeginColumn(), this.getEndLine(), this.getEndColumn()); + if (this.getFirstExpr() == null) { + raiseValidateError("Function " + this + " has no arguments.", false); + } Identifier id = this.getFirstExpr().getOutput(); output.setProperties(this.getFirstExpr().getOutput()); output.setNnz(-1); //conservatively, cannot use input nnz! @@ -1330,10 +1333,14 @@ public class BuiltinFunctionExpression extends DataIdentifier } public String toString() { - StringBuilder sb = new StringBuilder(_opcode.toString() + "(" + _args[0].toString()); - for(int i=1; i < _args.length; i++) { - sb.append(","); - sb.append(_args[i].toString()); + StringBuilder sb = new StringBuilder(_opcode.toString() + "("); + if (_args != null) { + for (int i = 0; i < _args.length; i++) { + if (i > 0) { + sb.append(","); + } + sb.append(_args[i].toString()); + } } sb.append(")"); return sb.toString();
