[Piglit] [PATCH 3/5] framework: handle UnicodeDecodeError

Dylan Baker dylan at pnwbakers.com
Wed May 2 21:15:04 UTC 2018


Quoting Marek Olšák (2018-05-02 13:55:06)
> On Wed, May 2, 2018 at 4:48 PM, Dylan Baker <dylan at pnwbakers.com> wrote:
> 
>     Quoting Marek Olšák (2018-05-02 13:32:45)
>     > From: Marek Olšák <marek.olsak at amd.com>
>     >
>     > This happens due to LLVM printing colored text into stdout/stderr on
>     error.
>     > ---
>     >  framework/test/base.py | 3 +++
>     >  1 file changed, 3 insertions(+)
>     >
>     > diff --git a/framework/test/base.py b/framework/test/base.py
>     > index 134b87245..f187c0210 100644
>     > --- a/framework/test/base.py
>     > +++ b/framework/test/base.py
>     > @@ -369,20 +369,23 @@ class Test(object):
>     >                  os.killpg(os.getpgid(proc.pid), signal.SIGKILL)
>>     >              # Since the process isn't running it's safe to get any
>     remaining
>     >              # stdout/stderr values out and store them.
>     >              self.result.out, self.result.err = proc.communicate()
>>     >              raise TestRunError(
>     >                  'Test run time exceeded timeout value ({} seconds)\
>     n'.format(
>     >                      self.timeout),
>     >                  'timeout')
>     > +        # LLVM prints colored text into stdout/stderr on error, which
>     raises:
>     > +        except UnicodeDecodeError as e:
>     > +            raise TestRunError("UnicodeDecodeError.\n", 'crash')
> 
>     This seems odd to me, Popen.communicate() returns bytes, and the conversion
>     is
>     done right after this (it's hideous, but there is a setter function for
>     result.out and result.err that converts bytes to unicode), but is uses
>     replace
>     for characters it doesn't understand.
> 
> 
> I doubt that it can filter out shell colors, though I'm not sure right now. If
> I encounter the error again, can I just push this without Rb?
> 
> Marek

Actually, I take that back, apparently univeral_newlines in python3 makes out
and err a text stream instead of a byte stream. I think in the long term we
should dump universal newlines to avoid this sort of problem, but for now this
seems reasonable.

Reviewed-by: Dylan Baker <dylan at pnwbakers.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: signature
URL: <https://lists.freedesktop.org/archives/piglit/attachments/20180502/367cf4d8/attachment.sig>


More information about the Piglit mailing list