From 037af6890fe6fdb84a08d3c86083e847c90ec0ad Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Tue, 22 Oct 2013 08:17:26 -0400 Subject: [PATCH] Fix vulnerability in handling _session argument of utils/save-prefs (#1489382) --- plugins/managesieve/managesieve.js | 33 ++++++++++++++++++++------------- 1 files changed, 20 insertions(+), 13 deletions(-) diff --git a/plugins/managesieve/managesieve.js b/plugins/managesieve/managesieve.js index 6bf99ac..da8da67 100644 --- a/plugins/managesieve/managesieve.js +++ b/plugins/managesieve/managesieve.js @@ -231,27 +231,34 @@ // Delete filter row case 'del': - var i, list = this.filters_list, rows = list.rows; + var i = 0, list = this.filters_list; list.remove_row(this.managesieve_rowid(o.id)); list.clear_selection(); this.show_contentframe(false); this.enable_command('plugin.managesieve-del', 'plugin.managesieve-act', false); - // re-numbering filters - for (i=0; i<rows.length; i++) { - if (rows[i] != null && rows[i].uid > o.id) - rows[i].uid = rows[i].uid-1; - } + // filter identifiers changed, fix the list + $('tr', this.filters_list.list).each(function() { + // remove hidden (deleted) rows + if (this.style.display == 'none') { + $(this).detach(); + return; + } + + // modify ID and remove all attached events + $(this).attr('id', 'rcmrow'+(i++)).unbind(); + }); + list.init(); break; // Update filter row case 'update': - var i, row = $('#rcmrow'+o.id); + var i, row = $('#rcmrow'+this.managesieve_rowid(o.id)); if (o.name) - $('td', row).html(o.name); + $('td', row).text(o.name); if (o.disabled) row.addClass('disabled'); else @@ -266,7 +273,7 @@ var list = this.filters_list, row = $('<tr><td class="name"></td></tr>'); - $('td', row).html(o.name); + $('td', row).text(o.name); row.attr('id', 'rcmrow'+o.id); if (o.disabled) row.addClass('disabled'); @@ -290,7 +297,7 @@ tr = document.createElement('TR'); td = document.createElement('TD'); - td.innerHTML = el.name; + $(td).text(el.name); td.className = 'name'; tr.id = 'rcmrow' + el.id; if (el['class']) @@ -339,7 +346,7 @@ list = this.filtersets_list, row = $('<tr class="disabled"><td class="name"></td></tr>'); - $('td', row).html(o.name); + $('td', row).text(o.name); row.attr('id', 'rcmrow'+id); this.env.filtersets[id] = o.name; @@ -635,7 +642,7 @@ enabled = {}, elems = { mailbox: document.getElementById('action_mailbox' + id), - target: document.getElementById('action_target' + id), + target: document.getElementById('redirect_target' + id), target_area: document.getElementById('action_target_area' + id), flags: document.getElementById('action_flags' + id), vacation: document.getElementById('action_vacation' + id), @@ -747,7 +754,7 @@ // load form in the iframe var frame = $('<iframe>').attr({src: url, frameborder: 0}) - dialog.empty().append(frame).dialog('dialog').resize(); + dialog.empty().append(frame).dialog('widget').resize(); // Change [Next Step] button with [Save] button buttons = {}; -- Gitblit v1.9.1