Mitmproxy: Crash when editing str-options

Created on 28 Jun 2018  路  4Comments  路  Source: mitmproxy/mitmproxy

Steps to reproduce the problem:
  1. Start mitmproxy in interactive mode
  2. Type O to switch to the options view
  3. Edit a random str-option
  4. See mitmproxy crash with the following stacktrace:
Traceback (most recent call last):
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/mitmproxy/master.py", line 86, in run_loop
    loop()
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/main_loop.py", line 286, in run
    self._run()
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/main_loop.py", line 384, in _run
    self.event_loop.run()
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/main_loop.py", line 1484, in run
    reraise(*exc_info)
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/compat.py", line 58, in reraise
    raise value
  File "/usr/lib/python3.6/asyncio/events.py", line 145, in _run
    self._callback(*self._args)
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/raw_display.py", line 404, in <lambda>
    event_loop, callback, self.get_available_raw_input())
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/raw_display.py", line 502, in parse_input
    callback(processed, processed_codes)
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/main_loop.py", line 411, in _update
    self.process_input(keys)
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/main_loop.py", line 511, in process_input
    k = self._topmost_widget.keypress(self.screen_size, k)
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/mitmproxy/tools/console/window.py", line 309, in keypress
    k = super().keypress(size, k)
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/container.py", line 1131, in keypress
    return self.body.keypress( (maxcol, remaining), key )
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/mitmproxy/tools/console/window.py", line 44, in keypress
    ret = super().keypress(size, key)
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/container.py", line 1131, in keypress
    return self.body.keypress( (maxcol, remaining), key )
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/mitmproxy/tools/console/options.py", line 283, in keypress
    return self.focus_item.keypress(tsize, key)
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/mitmproxy/tools/console/options.py", line 177, in keypress
    d = self.master.options.parse_setval(foc.opt.name, v)
  File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/mitmproxy/optmanager.py", line 332, in parse_setval
    if o.typespec in (str, typing.Optional[str]):
AttributeError: 'str' object has no attribute 'typespec'

mitmproxy has crashed!
Please lodge a bug report at:
        https://github.com/mitmproxy/mitmproxy
System information
Mitmproxy: 4.0.3
Python:    3.6.6
OpenSSL:   OpenSSL 1.1.0h  27 Mar 2018
Platform:  Linux-4.17.0-x86_64-with-debian-buster-sid
areconsole kinbug

Most helpful comment

Really inconvenient issue, any timeline on this?

All 4 comments

Hi there, I'm not sure if this has been fixed in v4.0.4 (which was released a month after this change was merged because I'm getting the same error. @gcmurphy

steps:

  • mitmproxy -p 8088
  • type O to edit options
  • enter a in the intercept option
Traceback (most recent call last):
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/mitmproxy/master.py", line 86, in run_loop
    loop()
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/main_loop.py", line 286, in run
    self._run()
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/main_loop.py", line 384, in _run
    self.event_loop.run()
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/main_loop.py", line 1484, in run
    reraise(*exc_info)
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/compat.py", line 58, in reraise
    raise value
  File "/usr/local/opt/python/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/events.py", line 88, in _run
    self._context.run(self._callback, *self._args)
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/raw_display.py", line 404, in <lambda>
    event_loop, callback, self.get_available_raw_input())
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/raw_display.py", line 502, in parse_input
    callback(processed, processed_codes)
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/main_loop.py", line 411, in _update
    self.process_input(keys)
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/main_loop.py", line 511, in process_input
    k = self._topmost_widget.keypress(self.screen_size, k)
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/mitmproxy/tools/console/window.py", line 309, in keypress
    k = super().keypress(size, k)
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/container.py", line 1131, in keypress
    return self.body.keypress( (maxcol, remaining), key )
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/mitmproxy/tools/console/window.py", line 44, in keypress
    ret = super().keypress(size, key)
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/container.py", line 1131, in keypress
    return self.body.keypress( (maxcol, remaining), key )
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/mitmproxy/tools/console/options.py", line 283, in keypress
    return self.focus_item.keypress(tsize, key)
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/mitmproxy/tools/console/options.py", line 177, in keypress
    d = self.master.options.parse_setval(foc.opt.name, v)
  File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/mitmproxy/optmanager.py", line 332, in parse_setval
    if o.typespec in (str, typing.Optional[str]):
AttributeError: 'str' object has no attribute 'typespec'

mitmproxy has crashed!
Please lodge a bug report at:
    https://github.com/mitmproxy/mitmproxy

System information

Mitmproxy: 4.0.4
Python:    3.7.0
OpenSSL:   OpenSSL 1.0.2o  27 Mar 2018
Platform:  Darwin-16.7.0-x86_64-i386-64bit

thanks.

Had a quick look and I don't think my change landed in v4.0.4. I'm seeing this for the line that changed on a v4.0.4 checkout.

fea08ef91 mitmproxy/tools/console/options.py (Aldo Cortesi        2017-03-17 14:11:33 +1300 177)                     d = self.master.options.parse_setval(foc.opt.name, v)

The stacktrace also shows the old line of code d = self.master.options.parse_setval(foc.opt.name, v)

You are right - it is only available on master.
We typically don't backport "smaller things", but I think this one would be nice to have on the v4.x branch as well!

@mhils?

Really inconvenient issue, any timeline on this?

Was this page helpful?
0 / 5 - 0 ratings