Skip to content

Commit e7cf325

Browse files
committed
Fixed potential bug with exceptions containing non-string arguments. Also made related tests resistant to adding new lines to the library.
1 parent c9dd172 commit e7cf325

3 files changed

Lines changed: 14 additions & 7 deletions

File tree

atest/libs/failing.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ def failure(self, exception, message, evaluate=False):
1212
raise exception
1313
if evaluate:
1414
message = eval(message)
15+
if isinstance(message, tuple):
16+
raise exception(*message)
1517
raise exception(message)
1618

1719
def failure_deeper(self, rounds=10):

atest/tests/failing.txt

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Suite Teardown Stop Remote Library
55
Test Template Correct failure should occur
66

77
*** Variables ***
8-
${SOURCE} [\\w: /\\\\]+failing.py
8+
${SOURCE} File "[\\w: /\\\\]+failing.py", line \\d+
99

1010
*** Test Cases ***
1111
Generic exceptions
@@ -38,6 +38,12 @@ Non-ASCII bytes
3838
Binary message
3939
Exception \x00.\x01.\x02
4040

41+
Non-string message
42+
Exception 42 evaluate=yes
43+
Exception None
44+
Exception ('Message', 42) evaluate=yes
45+
Exception (u'\\xe4 ', 42) evaluate=yes
46+
4147
Failure deeper
4248
[Documentation] FAIL Finally failing
4349
[Template] NONE
@@ -47,7 +53,7 @@ Traceback
4753
[Documentation] FAIL MyException: My error message
4854
... LOG 1:1 FAIL MyException: My error message
4955
... LOG 1:2 DEBUG REGEXP: Traceback \\(most recent call last\\):
50-
... \\s+File "${SOURCE}", line 15, in failure
56+
... \\s+${SOURCE}, in failure
5157
... \\s+raise exception\\(message\\)
5258
[Template] NONE
5359
Failure MyException My error message
@@ -56,11 +62,11 @@ Traceback with multiple entries
5662
[Documentation] FAIL Finally failing
5763
... LOG 1:1 FAIL Finally failing
5864
... LOG 1:2 DEBUG REGEXP: Traceback \\(most recent call last\\):
59-
... \\s+File "${SOURCE}", line 21, in failure_deeper
65+
... \\s+${SOURCE}, in failure_deeper
6066
... \\s+self.failure_deeper\\(rounds-1\\)
61-
... \\s+File "${SOURCE}", line 21, in failure_deeper
67+
... \\s+${SOURCE}, in failure_deeper
6268
... \\s+self.failure_deeper\\(rounds-1\\)
63-
... \\s+File "${SOURCE}", line 20, in failure_deeper
69+
... \\s+${SOURCE}, in failure_deeper
6470
... \\s+raise RuntimeError\\('Finally failing'\\)
6571
[Template] NONE
6672
Failure Deeper rounds=3

src/robotremoteserver.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,7 @@ def _get_message_from_exception(self, value):
179179
try:
180180
msg = unicode(value)
181181
except UnicodeError:
182-
# TODO: This fails if args contain non-strings
183-
msg = ' '.join([unicode(a, errors='replace') for a in value.args])
182+
return ' '.join([self._str(a) for a in value.args])
184183
return self._handle_binary_result(msg)
185184

186185
def _get_error_traceback(self, exc_tb):

0 commit comments

Comments
 (0)