From 27281dca56fd1c7fb03efd70f9d0f5dfc5f869d2 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Fri, 15 Jan 2016 17:04:28 +0100 Subject: [PATCH] luci-base: prevent CBI map save on invalid values (#618) Signed-off-by: Jo-Philipp Wich --- modules/luci-base/luasrc/cbi.lua | 62 +++++++++++++++++--------------- 1 file changed, 33 insertions(+), 29 deletions(-) diff --git a/modules/luci-base/luasrc/cbi.lua b/modules/luci-base/luasrc/cbi.lua index 2f97539ab..738431b14 100644 --- a/modules/luci-base/luasrc/cbi.lua +++ b/modules/luci-base/luasrc/cbi.lua @@ -385,41 +385,45 @@ function Map.parse(self, readinput, ...) Node.parse(self, ...) - self:_run_hooks("on_save", "on_before_save") - for i, config in ipairs(self.parsechain) do - self.uci:save(config) - end - self:_run_hooks("on_after_save") - if (not self.proceed and self.flow.autoapply) or luci.http.formvalue("cbi.apply") then - self:_run_hooks("on_before_commit") + if self.save then + self:_run_hooks("on_save", "on_before_save") for i, config in ipairs(self.parsechain) do - self.uci:commit(config) + self.uci:save(config) + end + self:_run_hooks("on_after_save") + if (not self.proceed and self.flow.autoapply) or luci.http.formvalue("cbi.apply") then + self:_run_hooks("on_before_commit") + for i, config in ipairs(self.parsechain) do + self.uci:commit(config) + + -- Refresh data because commit changes section names + self.uci:load(config) + end + self:_run_hooks("on_commit", "on_after_commit", "on_before_apply") + if self.apply_on_parse then + self.uci:apply(self.parsechain) + self:_run_hooks("on_apply", "on_after_apply") + else + -- This is evaluated by the dispatcher and delegated to the + -- template which in turn fires XHR to perform the actual + -- apply actions. + self.apply_needed = true + end - -- Refresh data because commit changes section names - self.uci:load(config) + -- Reparse sections + Node.parse(self, true) end - self:_run_hooks("on_commit", "on_after_commit", "on_before_apply") - if self.apply_on_parse then - self.uci:apply(self.parsechain) - self:_run_hooks("on_apply", "on_after_apply") - else - -- This is evaluated by the dispatcher and delegated to the - -- template which in turn fires XHR to perform the actual - -- apply actions. - self.apply_needed = true + for i, config in ipairs(self.parsechain) do + self.uci:unload(config) + end + if type(self.commit_handler) == "function" then + self:commit_handler(self:submitstate()) end - - -- Reparse sections - Node.parse(self, true) - end - for i, config in ipairs(self.parsechain) do - self.uci:unload(config) - end - if type(self.commit_handler) == "function" then - self:commit_handler(self:submitstate()) end - if self.proceed then + if not self.save then + self.state = FORM_INVALID + elseif self.proceed then self.state = FORM_PROCEED elseif self.changed then self.state = FORM_CHANGED -- 2.25.1