Guard against app.getPath throwing with OS fallback
authorKevin Sawicki <kevinsawicki@gmail.com>
Thu, 6 Oct 2016 17:02:46 +0000 (10:02 -0700)
committerKevin Sawicki <kevinsawicki@gmail.com>
Thu, 6 Oct 2016 17:07:40 +0000 (10:07 -0700)
lib/common/api/crash-reporter.js

index def77e7..312868e 100644 (file)
@@ -1,6 +1,7 @@
 'use strict'
 
 const {spawn} = require('child_process')
+const os = require('os')
 const electron = require('electron')
 const {app} = process.type === 'browser' ? electron : electron.remote
 const binding = process.atomBinding('crash_reporter')
@@ -13,7 +14,7 @@ class CrashReporter {
     this.productName = options.productName
     let {autoSubmit, companyName, extra, ignoreSystemCrashHandler, submitURL} = options
 
-    this.tempDirectory = app.getPath('temp')
+    this.tempDirectory = getTempPath()
     if (this.productName == null) {
       this.productName = app.getName()
     }
@@ -72,9 +73,18 @@ class CrashReporter {
 
   getUploadedReports () {
     const productName = this.productName != null ? this.productName : app.getName()
-    const tempDirectory = this.tempDirectory != null ? this.tempDirectory : app.getPath('temp')
+    const tempDirectory = this.tempDirectory != null ? this.tempDirectory : getTempPath()
     return binding._getUploadedReports(productName, tempDirectory)
   }
 }
 
+const getTempPath = () => {
+  try {
+    return app.getPath('temp')
+  } catch (error) {
+    // app.getPath may throw so fallback to OS temp directory
+    return os.tmpdir()
+  }
+}
+
 module.exports = new CrashReporter()