Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Having an $EDITOR with arguments raises an exception #11

Open
davidparsson opened this issue Nov 4, 2016 · 24 comments · May be fixed by #15
Open

Having an $EDITOR with arguments raises an exception #11

davidparsson opened this issue Nov 4, 2016 · 24 comments · May be fixed by #15

Comments

@davidparsson
Copy link

editor.edit('file') fails when the defined $EDITOR contains spaces:

$ touch /tmp/file
$ export EDITOR='vim -v'
$ python -c 'import editor; editor.edit("/tmp/file")' 
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "editor.py", line 103, in edit
    proc = subprocess.Popen(args, close_fds=True, stdout=stdout)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

After removing the space, it works:

$ export EDITOR='vim'
$ python -c 'import editor; editor.edit("/tmp/file")'

Originally (and improperly) reported here as an Alembic issue.

@davidparsson davidparsson changed the title Having an EDITOR with spaces raises exception Having an EDITOR with spaces raises an exception Nov 4, 2016
@eugene-eeo
Copy link
Contributor

eugene-eeo commented Nov 4, 2016

@davidparsson I forgot about the old behaviour, but this is most likely ibecause to avoid arbitrary code injection, the library uses subprocess.Popen and passes a list according to the following spec:

program, *args = [a1,a2,...]

the OS then resolves the program executable, e.g. looking in $PATH, etc. and tries to execute the program with the name program along with args as arguments (the strings you find in sys.argv). In this case, vim -v is not a valid program as it tries to execute vim<SPACE>-v, which is not found on your system.

If you're using the latest codebase, as in the master branch, it should not be an issue.

EDIT: I was mistaken as I briefly skimmed through the code. Sorry!

@davidparsson
Copy link
Author

@eugene-eeo, are you saying that this functionality is intended and not likely to change? I'm seeing this on the master branch as well.

@eugene-eeo
Copy link
Contributor

@davidparsson I can't read minds, but probably yes. Relevant code: https://github.com/fmoo/python-editor/blob/master/editor.py#L83

@davidparsson
Copy link
Author

All right, if so then that's a shame. Since having a space in an editor is supported by most Unix commands, I think it would make sense to support that here as well.

@eugene-eeo
Copy link
Contributor

eugene-eeo commented Nov 11, 2016

I think it can be implemented quite easily using the shlex module. Give me a moment and I'll hack up a version and see if it suits your needs.

@davidparsson does this look good? https://gist.github.com/eugene-eeo/f0baa1e79b5efbe240c2d5b3d9a899e8

@fmoo
Copy link
Owner

fmoo commented Nov 11, 2016

I think I'm a fan of making this use case work. Does this break editors that have a whitespace in their executable name?

Not sure that's a use case we need to care about, but I guess we can add some heuristics if we need to support it.

My main concern with the PR that I initially looked at was that it changed a couple of other things that seemed unrelated, but I haven't looked too closely yet.

On Nov 11, 2016, at 7:27 AM, Eeo Jun notifications@github.com wrote:

I think it can be implemented quite easily using the shlex module. Give me a moment and I'll hack up a version and see if it suits your needs.


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.

@eugene-eeo
Copy link
Contributor

eugene-eeo commented Nov 12, 2016

shlex handles editor\ binaries\ with\ spaces perfectly.

>>> import shlex
>>> shlex.split('abc\ def')
['abc def']

@davidparsson
Copy link
Author

@eugene-eeo, nearly, but not quite. The args passed to Popen for that code are in my case ['subl --wait', '--wait', 'file.txt'] which raises the same exception.

@eugene-eeo
Copy link
Contributor

@davidparsson it should work now :)

@davidparsson
Copy link
Author

@eugene-eeo, indeed it does. Thanks!

Do you think that this will be a part of a future release?

@eugene-eeo
Copy link
Contributor

@davidparsson that will be up to @fmoo. However I don't see any drawbacks from this and it makes the library more Unix-friendly so my best guess would be that it would be part of a future release.

@fmoo
Copy link
Owner

fmoo commented Nov 17, 2016

I published a 1.0.2, but setuptools is throwing a hissy fit and not letting me upload via cli.

So I tried uploading via the UI, but pip doesn't seem to see it. Any ideas?

On Nov 16, 2016, at 3:03 PM, Eeo Jun notifications@github.com wrote:

@davidparsson that will be up to @fmoo. However I don't see any drawbacks from this and it makes the library more Unix-friendly so my best guess would be that it would be part of a future release.


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

@eugene-eeo
Copy link
Contributor

eugene-eeo commented Nov 17, 2016

Can you share the warning that setuptools displayed? Maybe you've previously published the same version. BTW, my PR that you merged does not include this fix. Let me know if I should include the support for spaces as well, and I'll drop it in and write some tests.

@fmoo
Copy link
Owner

fmoo commented Nov 19, 2016

It was an authentication error. Which is weird because I can use the credentials to login through the web UI.

On Nov 17, 2016, at 4:42 AM, Eeo Jun notifications@github.com wrote:

Can you share the warning that setuptools displayed? Maybe you've previously published the same version.


You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

@eugene-eeo
Copy link
Contributor

Try checking for extraneous spaces at the end and such.

@davidparsson
Copy link
Author

@fmoo, please note that a fix for this has not been merged, since it was not included in #12, as stated above.

@fmoo
Copy link
Owner

fmoo commented Nov 29, 2016 via email

@davidparsson
Copy link
Author

@fmoo, sorry, I don't think I can be of any help there.

@eugene-eeo, would you mind opening a pull request with the fix for this issue as well?

@eugene-eeo
Copy link
Contributor

@fmoo please don't do that because it's IMO really scary magic that you need to maintain in the future.

@davidparsson sure, give me a moment.

@davidparsson
Copy link
Author

I'm still having this issue. Is there anything I can do to help get this fixed and released?

@eugene-eeo
Copy link
Contributor

@davidparsson I think the bugfix is released in the latest version. If not you can try bugging @fmoo to release the current code to PyPI.

@fmoo
Copy link
Owner

fmoo commented Oct 15, 2017 via email

davidparsson added a commit to davidparsson/python-editor that referenced this issue Oct 16, 2017
@davidparsson davidparsson linked a pull request Oct 16, 2017 that will close this issue
@davidparsson
Copy link
Author

I'm still able to reproduce the problem in 1.0.3, and I don't see the fix with shlex for this in editor.py on master.

The gist in #11 (comment) was never committed/merged.

I've opened #15 with those changes.

@davidparsson davidparsson changed the title Having an EDITOR with spaces raises an exception Having an $EDITOR with arguments raises an exception Oct 19, 2017
@fmoo
Copy link
Owner

fmoo commented Apr 23, 2019

Also wow I totally missed the updates to this thread last year. I'll take a look after work today.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants