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();

Reply via email to