From 3b0318ca3eea211c7d9bd4b5bd0300ae3e0897ef Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Sat, 31 Oct 2015 04:26:33 -0400
Subject: [PATCH] Fix race-condition in setting current page between list and getunread requests
---
program/steps/mail/func.inc | 7 +++++--
program/js/app.js | 2 +-
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/program/js/app.js b/program/js/app.js
index 27fe3a4..78df592 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -352,7 +352,7 @@
if (this.gui_objects.mailboxlist) {
this.env.unread_counts = {};
this.gui_objects.folderlist = this.gui_objects.mailboxlist;
- this.http_request('getunread');
+ this.http_request('getunread', {_page: this.env.current_page});
}
// init address book widget
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index e7b6940..672bbd2 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -78,11 +78,12 @@
// set current mailbox and some other vars in client environment
$OUTPUT->set_env('mailbox', $mbox_name);
$OUTPUT->set_env('pagesize', $RCMAIL->storage->get_pagesize());
+ $OUTPUT->set_env('current_page', max(1, $_SESSION['page']));
$OUTPUT->set_env('delimiter', $delimiter);
$OUTPUT->set_env('threading', $threading);
$OUTPUT->set_env('threads', $threading || $RCMAIL->storage->get_capability('THREAD'));
$OUTPUT->set_env('reply_all_mode', (int) $RCMAIL->config->get('reply_all_mode'));
- $OUTPUT->set_env('preview_pane_mark_read', $RCMAIL->config->get('preview_pane_mark_read', 0));
+ $OUTPUT->set_env('preview_pane_mark_read', (int) $RCMAIL->config->get('preview_pane_mark_read'));
if ($RCMAIL->storage->get_capability('QUOTA')) {
$OUTPUT->set_env('quota', true);
@@ -163,7 +164,9 @@
$mbox = strlen($_SESSION['mbox']) ? $_SESSION['mbox'] : 'INBOX';
}
- if ($RCMAIL->action == 'list') {
+ // we handle 'page' argument on 'list' and 'getunread' to prevent from
+ // race condition and unintentional page overwrite in session
+ if ($RCMAIL->action == 'list' || $RCMAIL->action == 'getunread') {
if (!($page = intval($_GET['_page']))) {
$page = $_SESSION['page'] ? $_SESSION['page'] : 1;
}
--
Gitblit v1.9.1