From e5da009cdcbf13eba2b4e0b5c534b31af162f317 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 3 Sep 2015 11:31:01 -0700 Subject: [PATCH] Strip colon-number suffixes from args before parsing them as URLs --- src/browser/atom-application.coffee | 31 +++++++++++++---------------- src/browser/main.coffee | 13 +----------- 2 files changed, 15 insertions(+), 29 deletions(-) diff --git a/src/browser/atom-application.coffee b/src/browser/atom-application.coffee index 29cda2290..f280db059 100644 --- a/src/browser/atom-application.coffee +++ b/src/browser/atom-application.coffee @@ -17,6 +17,8 @@ url = require 'url' {EventEmitter} = require 'events' _ = require 'underscore-plus' +LocationSuffixRegExp = /(:\d+)(:\d+)?$/ + DefaultSocketPath = if process.platform is 'win32' '\\\\.\\pipe\\atom-sock' @@ -63,12 +65,11 @@ class AtomApplication exit: (status) -> app.exit(status) constructor: (options) -> - {@resourcePath, @devResourcePath, @version, @devMode, @safeMode, @socketPath} = options + {@resourcePath, @devResourcePath, @executedFrom, @version, @devMode, @safeMode, @socketPath} = options global.atomApplication = this @pidsToOpenWindows = {} - @pathsToOpen ?= [] @windows = [] @autoUpdateManager = new AutoUpdateManager(@version, options.test) @@ -369,13 +370,8 @@ class AtomApplication # :windowDimensions - Object with height and width keys. # :window - {AtomWindow} to open file paths in. openPaths: ({pathsToOpen, pidToKillWhenClosed, newWindow, devMode, safeMode, windowDimensions, profileStartup, window}={}) -> - pathsToOpen = pathsToOpen.map (pathToOpen) -> - if fs.existsSync(pathToOpen) - fs.normalize(pathToOpen) - else - pathToOpen - locationsToOpen = (@locationForPathToOpen(pathToOpen) for pathToOpen in pathsToOpen) + pathsToOpen = (locationToOpen.pathToOpen for locationToOpen in locationsToOpen) unless pidToKillWhenClosed or newWindow existingWindow = @windowForPaths(pathsToOpen, devMode) @@ -523,19 +519,20 @@ class AtomApplication locationForPathToOpen: (pathToOpen) -> return {pathToOpen} unless pathToOpen - return {pathToOpen} if url.parse(pathToOpen).protocol? - return {pathToOpen} if fs.existsSync(pathToOpen) pathToOpen = pathToOpen.replace(/[:\s]+$/, '') + match = pathToOpen.match(LocationSuffixRegExp) - [fileToOpen, initialLine, initialColumn] = path.basename(pathToOpen).split(':') - return {pathToOpen} unless initialLine - return {pathToOpen} unless parseInt(initialLine) >= 0 + if match? + pathToOpen = pathToOpen.slice(0, -match[0].length) + initialLine = Math.max(0, parseInt(match[1].slice(1)) - 1) if match[1] + initialColumn = Math.max(0, parseInt(match[2].slice(1)) - 1) if match[2] + else + initialLine = initialColumn = null + + unless url.parse(pathToOpen).protocol? + pathToOpen = path.resolve(@executedFrom, fs.normalize(pathToOpen)) - # Convert line numbers to a base of 0 - initialLine = Math.max(0, initialLine - 1) if initialLine - initialColumn = Math.max(0, initialColumn - 1) if initialColumn - pathToOpen = path.join(path.dirname(pathToOpen), fileToOpen) {pathToOpen, initialLine, initialColumn} # Opens a native dialog to prompt the user for a path. diff --git a/src/browser/main.coffee b/src/browser/main.coffee index d14eb5bec..33a58289c 100644 --- a/src/browser/main.coffee +++ b/src/browser/main.coffee @@ -5,7 +5,6 @@ app = require 'app' fs = require 'fs-plus' path = require 'path' yargs = require 'yargs' -url = require 'url' console.log = require 'nslog' start = -> @@ -32,16 +31,6 @@ start = -> app.removeListener 'open-file', addPathToOpen app.removeListener 'open-url', addUrlToOpen - cwd = args.executedFrom?.toString() or process.cwd() - args.pathsToOpen = args.pathsToOpen.map (pathToOpen) -> - normalizedPath = fs.normalize(pathToOpen) - if url.parse(pathToOpen).protocol? - pathToOpen - else if cwd - path.resolve(cwd, normalizedPath) - else - path.resolve(pathToOpen) - AtomApplication = require path.join(args.resourcePath, 'src', 'browser', 'atom-application') AtomApplication.open(args) @@ -126,7 +115,7 @@ parseCommandLine = -> process.stdout.write("#{version}\n") process.exit(0) - executedFrom = args['executed-from'] + executedFrom = args['executed-from']?.toString() ? process.cwd() devMode = args['dev'] safeMode = args['safe'] pathsToOpen = args._