removelistener() must not remove path validation listeners
This commit is contained in:
parent
748ad889d4
commit
117dac8b4f
1 changed files with 14 additions and 3 deletions
17
Nasal/io.nas
17
Nasal/io.nas
|
@ -302,9 +302,19 @@ _setlistener("/sim/signals/nasal-dir-initialized", func {
|
||||||
|
|
||||||
# validation listeners for load[xml]/save[xml]/parsexml() (see utils.cxx:fgValidatePath)
|
# validation listeners for load[xml]/save[xml]/parsexml() (see utils.cxx:fgValidatePath)
|
||||||
var n = props.globals.getNode("/sim/paths/validate", 1).remove();
|
var n = props.globals.getNode("/sim/paths/validate", 1).remove();
|
||||||
_setlistener(n.getNode("read", 1)._g, read_validator);
|
var rval = _setlistener(n.getNode("read", 1)._g, read_validator);
|
||||||
_setlistener(n.getNode("write", 1)._g, write_validator);
|
var wval = _setlistener(n.getNode("write", 1)._g, write_validator);
|
||||||
|
|
||||||
|
# wrap removelistener
|
||||||
|
globals.removelistener = var remove_listener = (func {
|
||||||
|
var _removelistener = globals.removelistener;
|
||||||
|
func(n) {
|
||||||
|
if (n != rval and n != wval)
|
||||||
|
return _removelistener(n);
|
||||||
|
|
||||||
|
die("removelistener(): removal of protected listener #'" ~ n ~ "' denied (unauthorized access)\n ");
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
# wrap io.open()
|
# wrap io.open()
|
||||||
io.open = var io_open = (func {
|
io.open = var io_open = (func {
|
||||||
|
@ -328,7 +338,8 @@ _setlistener("/sim/signals/nasal-dir-initialized", func {
|
||||||
func(fn, level = 0) {
|
func(fn, level = 0) {
|
||||||
var thisfunction = caller(0)[1];
|
var thisfunction = caller(0)[1];
|
||||||
if (fn != thislistener and fn != io_open and fn != thisfunction
|
if (fn != thislistener and fn != io_open and fn != thisfunction
|
||||||
and fn != read_validator and fn != write_validator)
|
and fn != read_validator and fn != write_validator
|
||||||
|
and fn != remove_listener)
|
||||||
return _closure(fn, level);
|
return _closure(fn, level);
|
||||||
|
|
||||||
die("closure(): query denied (unauthorized access)\n ");
|
die("closure(): query denied (unauthorized access)\n ");
|
||||||
|
|
Loading…
Add table
Reference in a new issue