pytest-dev / py

Python development support library (note: maintenance only)
MIT License
67 stars 106 forks source link

BUG FIX: Securing length calculation (line could not always be a string) #205

Closed alaouimehdi1995 closed 5 years ago

alaouimehdi1995 commented 5 years ago

Here is an example of the fixed bug (discovered using pytest). The line variable isn't always a string. To secure it, better use the str python's builtin function to convert whatever it is into a string. Used python version: python 2.7.15rc1

File "/home/mehdi/python2env/bin/pytest", line 11, in <module>                                      
    sys.exit(main())                                                                                
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/_pytest/config/__init__.py", line 77, in main                                                               
    return config.hook.pytest_cmdline_main(config=config)                                              
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/hooks.py", line 284, in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)                                          
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/manager.py", line 67, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)                                                 
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/manager.py", line 61, in <lambda>
    firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,                             
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/callers.py", line 208, in _multicall
    return outcome.get_result()                                                                        
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/callers.py", line 81, in get_result
    _reraise(*ex)  # noqa                                                                              
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/callers.py", line 187, in _multicall
    res = hook_impl.function(*args)                                                                    
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/_pytest/main.py", line 218, in pytest_cmdline_main
    return wrap_session(config, _main)                                                                 
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/_pytest/main.py", line 211, in wrap_session
    session=session, exitstatus=session.exitstatus                                                     
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/hooks.py", line 284, in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)                                          
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/manager.py", line 67, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)                                                 
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/manager.py", line 61, in <lambda>
    firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,                             
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/callers.py", line 203, in _multicall
    gen.send(outcome)                                                                                  
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/_pytest/terminal.py", line 639, in pytest_sessionfinish
    terminalreporter=self, exitstatus=exitstatus                                                       
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/hooks.py", line 284, in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)                                          
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/manager.py", line 67, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)                                                 
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/manager.py", line 61, in <lambda>
    firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,                             
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/callers.py", line 208, in _multicall
    return outcome.get_result()                                                                        
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/callers.py", line 81, in get_result
    _reraise(*ex)  # noqa                                                                              
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/pluggy/callers.py", line 182, in _multicall
    next(gen)  # first yield                                                                           
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/_pytest/terminal.py", line 649, in pytest_terminal_summary
    self.summary_failures()                                                                         
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/_pytest/terminal.py", line 791, in summary_failures
    self._outrep_summary(rep)                                                                       
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/_pytest/terminal.py", line 815, in _outrep_summary
    rep.toterminal(self._tw)                                                                        
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/_pytest/reports.py", line 37, in toterminal
    out.line(longrepr)                                                                              
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/py/_io/terminalwriter.py", line 272, in line
    self._checkfill(s)                                                                              
  File "/home/mehdi/python2env/local/lib/python2.7/site-packages/py/_io/terminalwriter.py", line 284, in _checkfill
    diff2last = self._lastlen - len(line)
TypeError: object of type 'ExceptionInfo' has no len()
blueyed commented 5 years ago

@alaouimehdi1995 Why was this closed again?

alaouimehdi1995 commented 5 years ago

@blueyed Because the fix wasn't validated by Travis..