# HG changeset patch # User Jordi GutiƩrrez Hermoso # Date 1353002844 18000 # Node ID 126285fce87676cdc42d82c900dcec1c17b9cfe4 # Parent 8b04a7d67d8ae9cd9c231debda16bafa5df27c27 check for allowed struct field names in subsref and subsasgn * ov-struct.cc (octave_scalar_struct::dotref): Check if the provided field name is valid. (octave_scalar_struct::subsasgn) Ditto. diff --git a/libinterp/octave-value/ov-struct.cc b/libinterp/octave-value/ov-struct.cc --- a/libinterp/octave-value/ov-struct.cc +++ b/libinterp/octave-value/ov-struct.cc @@ -1093,11 +1093,19 @@ octave_value octave_scalar_struct::dotref (const octave_value_list& idx, bool auto_add) { + octave_value retval; + assert (idx.length () == 1); std::string nm = idx(0).string_value (); - octave_value retval = map.getfield (nm); + if (! valid_identifier (nm)) + { + error ("subsref: invalid structure field name '%s'", nm.c_str ()); + return retval; + } + + retval = map.getfield (nm); if (! auto_add && retval.is_undefined ()) error ("structure has no member '%s'", nm.c_str ()); @@ -1218,6 +1226,12 @@ std::string key = key_idx(0).string_value (); + if (! valid_identifier (key)) + { + error ("subsasgn: invalid structure field name '%s'", key.c_str ()); + return retval; + } + if (n > 1) { std::list next_idx (idx);