summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorLinus Färnstrand <linus@mullvad.net>2018-03-01 09:40:03 +0100
committerLinus Färnstrand <linus@mullvad.net>2018-03-01 09:40:03 +0100
commita7a6a681421bc88c7789f74340a4eec0874c36b5 (patch)
treec6535a60a3bc969cff7ff985a2258905a020ad63
parent13651b5bd3b4ea6f864803846c8b544ebc47dec5 (diff)
parent2a2dd810f8941d072aa7b7fd30dc26dd510141e6 (diff)
downloadmullvadvpn-2018.1.tar.xz
mullvadvpn-2018.1.zip
Merge branch 'fix-problem-report' into prepare-2018.12018.1
-rw-r--r--CHANGELOG.md12
-rw-r--r--app/components/Support.js10
-rw-r--r--app/lib/problem-report.js59
-rw-r--r--app/main.js2
4 files changed, 45 insertions, 38 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b00b96850c..63d10df066 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,8 +16,16 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
## [Unreleased]
-## [2018.1] - 2018-02-27
-Identical to 2018.1-beta10, just removing the beta label.
+## [2018.1] - 2018-03-01
+### Changed
+- Redact all account numbers in the account number history from problem reports instead of only the
+ currently logged in one.
+
+### Fixed
+- Increase a timeout for problem report collection to fix a timeout error on slower machines.
+- Fix a memory leak in the problem report collection routine.
+- Fix an issue when viewing a problem report brought up a dialog to choose the application to open
+ the file.
## [2018.1-beta10] - 2018-02-13
diff --git a/app/components/Support.js b/app/components/Support.js
index dc646bdb0e..d1586430e0 100644
--- a/app/components/Support.js
+++ b/app/components/Support.js
@@ -56,16 +56,12 @@ export default class Support extends Component {
});
}
- _getLog() {
- const toRedact = [];
- if (this.props.account.accountToken) {
- toRedact.push(this.props.account.accountToken.toString());
- }
-
+ _getLog(): Promise<string> {
+ const accountsToRedact = this.props.account.accountHistory;
const { savedReport } = this.state;
return savedReport ?
Promise.resolve(savedReport) :
- this.props.onCollectLog(toRedact)
+ this.props.onCollectLog(accountsToRedact)
.then( path => {
return new Promise(resolve => this.setState({ savedReport: path }, () => resolve(path)));
});
diff --git a/app/lib/problem-report.js b/app/lib/problem-report.js
index 17130fd05d..94a435b617 100644
--- a/app/lib/problem-report.js
+++ b/app/lib/problem-report.js
@@ -5,39 +5,42 @@ import { ipcRenderer } from 'electron';
import { log } from './platform';
import uuid from 'uuid';
-const collectProblemReport = (toRedact: string) => {
- const unAnsweredIpcCalls = new Map();
- function reapIpcCall(id) {
- const promise = unAnsweredIpcCalls.get(id);
- unAnsweredIpcCalls.delete(id);
+const collectProblemReport = (toRedact: Array<string>): Promise<string> => {
+ return new Promise((resolve, reject) => {
+ const requestId = uuid.v4();
+ let responseListener: Function;
+
+ const removeResponseListener = () => {
+ ipcRenderer.removeListener('collect-logs-reply', responseListener);
+ };
+
+ // timeout after 10 seconds if no ipc response received
+ const requestTimeout = setTimeout(() => {
+ removeResponseListener();
+ log.error('Timed out when collecting a problem report');
+ reject(new Error('Timed out'));
+ }, 10000);
- if (promise) {
- promise.reject(new Error('Timed out'));
- }
- }
- ipcRenderer.on('collect-logs-reply', (_event, id, err, reportId) => {
- const promise = unAnsweredIpcCalls.get(id);
- unAnsweredIpcCalls.delete(id);
- if(promise) {
- if(err) {
- promise.reject(err);
+ responseListener = (_event, id, error, reportPath) => {
+ if(id !== requestId) { return; }
+
+ clearTimeout(requestTimeout);
+ removeResponseListener();
+
+ if(error) {
+ log.error(`Cannot collect a problem report: ${ error.err }`);
+ log.error(`Stdout: ${ error.stdout }`);
+ reject(error);
} else {
- promise.resolve(reportId);
+ resolve(reportPath);
}
- }
- });
- return new Promise((resolve, reject) => {
+ };
- const id = uuid.v4();
- unAnsweredIpcCalls.set(id, { resolve, reject });
- ipcRenderer.send('collect-logs', id, toRedact);
- setTimeout(() => reapIpcCall(id), 1000);
- }).catch((e) => {
- const { err, stdout } = e;
- log.error('Failed collecting problem report', err);
- log.error(' stdout: ' + stdout);
+ // add ipc response listener
+ ipcRenderer.on('collect-logs-reply', responseListener);
- throw e;
+ // send ipc request
+ ipcRenderer.send('collect-logs', requestId, toRedact);
});
};
diff --git a/app/main.js b/app/main.js
index 8cda655f47..639510a1d7 100644
--- a/app/main.js
+++ b/app/main.js
@@ -114,7 +114,7 @@ const appDelegate = {
const logFiles = files.filter(file => file.endsWith('.log'))
.map(f => path.join(appDelegate._logFileLocation, f));
- const reportPath = path.join(writableDirectory, uuid.v4() + '.report');
+ const reportPath = path.join(writableDirectory, uuid.v4() + '.log');
const binPath = resolveBin('problem-report');
let args = [