bugGNU Octave - Bugs: bug #54781, Matrix creation functions (eye,...


bug #54781: Matrix creation functions (eye, rand, zeros, ...) allow invalid non-integer dimensions

Submitted by:  Kai Torben Ohlhus <siko1056>
Submitted on:  Thu 04 Oct 2018 02:19:30 PM UTC  
Category:  Interpreter Severity:  4 - Important
Priority:  5 - Normal Item Group:  Incorrect Result
Status:  Fixed Assigned to:  None
Originator Name:  Open/Closed:  Closed
Release:  dev Operating System:  Any

Add a New Comment(Rich Markup)

You are not logged in

Please log in, so followups can be emailed to you.


( Jump to the original submission)

Fri 12 Oct 2018 08:12:15 AM UTC, comment #10:

Awesome =) In the spirit of your changes Rik, I added a small change for "eye()" in cset https://hg.savannah.gnu.org/hgweb/octave/rev/a533a7c4d2cc .

Regarding comment #8 for Matlab R2018b:

Same for Octave now (with your patches applied) =)

I really consider this item to be fixed/closed as well. Thank you Rik and jwe for your help!

Kai Torben Ohlhus <siko1056>
Project Member
Thu 11 Oct 2018 10:49:33 PM UTC, comment #9:

I pushed another changeset which fixes the remaining issue (https://hg.savannah.gnu.org/hgweb/octave/rev/d6581134daaa). This revealed that Octave was doing an inappropriate conversion in rand() of a dimension vector in to an int type rather than an octave_idx_type.

Marking bug as fixed and closing report.

Rik <rik5>
Project Administrator
Thu 11 Oct 2018 09:13:02 PM UTC, comment #8:

For compatibility, what does Matlab return for


Rik <rik5>
Project Administrator
Thu 11 Oct 2018 09:05:57 PM UTC, comment #7:

I pushed a changeset that fixes all of the utility matrices like eye, ones, etc. as well as rand. See https://hg.savannah.gnu.org/hgweb/octave/rev/373fe1608f7c. I also added some BIST tests while I was at it.

The remaining issue is a dimension vector such as

which still passes.

Rik <rik5>
Project Administrator
Thu 11 Oct 2018 07:14:17 PM UTC, comment #6:

Rik, thanks for taking care of this. I applied file #45170 and can confirm the outputs of comment #5.

It improves the situation for the creation matrices, except for "rand". I think it should be applied to all four overloaded versions of libinterp/corefcn/data.cc (fill_matrix) and we leave this report open.

Kai Torben Ohlhus <siko1056>
Project Member
Tue 09 Oct 2018 05:38:14 PM UTC, comment #5:

Attached is a quick diff that works for me. The error message is different now, but maybe that is okay?



It doesn't mention that the dimension must be a scalar integer. On the other hand, it identifies the argument that is in error far better.

The diff is trivial

However, this still doesn't error out if a dimension vector is used.

That is a different codepath in the function fill_matrix in data.cc.

(file #45170)

Rik <rik5>
Project Administrator
Tue 09 Oct 2018 05:09:04 PM UTC, comment #4:

Agreed. This was done for Matlab compatibility, but I never liked it either because I prefer strict input validation. Marking bug as confirmed.

Rik <rik5>
Project Administrator
Thu 04 Oct 2018 04:09:12 PM UTC, comment #3:

OK, I'd be glad to require dimension arguments to be integers. I never liked the rounding behavior anyway. It was only done in Octave for compatibility, as far as I know.

John W. Eaton <jwe>
Project Administrator
Thu 04 Oct 2018 03:04:24 PM UTC, comment #2:

Okay, my Matlab experience refers to a much shorter timespan ;-)

At least R2018a errors in all cases with a hint to use integer dimensions only.

Kai Torben Ohlhus <siko1056>
Project Member
Thu 04 Oct 2018 02:36:17 PM UTC, comment #1:

Originally, Matlab rounded (I think) non-integer values passed as dimensions to functions like eye, ones, and zeros. So Octave did the same for compatibility. What does modern Matlab do?

John W. Eaton <jwe>
Project Administrator
Thu 04 Oct 2018 02:19:30 PM UTC, original submission:

While fixing another bug, I received errors, because of potentially erroneous test cases (maybe copy&paste errors from "sprand")

Additionally, Octave does not error on the following statements, and silently creates nonsense:

Similar for "zeros" and "ones" (only the first as example given below:

Kai Torben Ohlhus <siko1056>
Project Member


(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach Files:

Attached Files
file #45170:  intidx.diff added by rik5 (659B - text/x-patch)


Depends on the following items: None found

Items that depend on this one: None found


Carbon-Copy List
  • -email is unavailable- added by rik5 (Posted a comment)
  • -email is unavailable- added by jwe (Posted a comment)
  • -email is unavailable- added by siko1056 (Submitted the item)

    Do you think this task is very important?
    If so, you can add your encouragement to it.
    This task has 0 encouragements so far.

    Only project members can vote.




    Follow 6 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2018-10-11 rik5 StatusConfirmed => Fixed
        Open/ClosedOpen => Closed
    2018-10-11 rik5 StatusPatch Submitted => Confirmed
    2018-10-09 rik5 Attached File- => Added intidx.diff, #45170
        StatusConfirmed => Patch Submitted
    2018-10-09 rik5 StatusNone => Confirmed

    Back to the top

    Powered by Savane 3.4