35 lines
1.7 KiB
Diff
35 lines
1.7 KiB
Diff
# UNDF: UNDF-2026-000000190
|
|
diff --git a/libinterp/corefcn/data.cc b/libinterp/corefcn/data.cc
|
|
index a1b2c3d..d4e5f6a 100644
|
|
--- a/libinterp/corefcn/data.cc
|
|
+++ b/libinterp/corefcn/data.cc
|
|
@@ -133,9 +133,10 @@ parse_vecdim_arg (const octave_value &dimarg, const Array<octave_value> &arg,
|
|
// Add remaining dims to permutation vector
|
|
for (int i = 0; i < ndims; i++)
|
|
{
|
|
- if (std::find (vecdim.begin (), vecdim.end (), i)
|
|
- == vecdim.end ())
|
|
+ // CWE-407 fix: vecdim is already sorted (std::sort above);
|
|
+ // std::find ignores the sort and is O(|vecdim|) per iteration.
|
|
+ // std::binary_search is O(log |vecdim|).
|
|
+ if (!std::binary_search (vecdim.begin (), vecdim.end (), i))
|
|
{
|
|
perm_vec(idx) = i;
|
|
new_sz(idx) = sz(i);
|
|
diff --git a/libinterp/corefcn/numeric/max.cc b/libinterp/corefcn/numeric/max.cc
|
|
index b2c3d4e..e5f6a7b 100644
|
|
--- a/libinterp/corefcn/numeric/max.cc
|
|
+++ b/libinterp/corefcn/numeric/max.cc
|
|
@@ -106,9 +106,10 @@ do_minmax_nd (const octave_value& arg, int dim, bool ismin,
|
|
// Add remaining dims to permutation vector
|
|
for (int i = 0; i < ndims; i++)
|
|
{
|
|
- if (std::find (vecdim.begin (), vecdim.end (), i)
|
|
- == vecdim.end ())
|
|
+ // CWE-407 fix: vecdim is already sorted (std::sort above);
|
|
+ // std::find ignores the sort and is O(|vecdim|) per iteration.
|
|
+ // std::binary_search is O(log |vecdim|).
|
|
+ if (!std::binary_search (vecdim.begin (), vecdim.end (), i))
|
|
{
|
|
perm_vec(idx) = i;
|
|
new_sz(idx) = sz(i);
|