Backwards file reader codemagic.utilities.backwards_file_reader.iter_backwards can fail with UnicodeDecodeError if the file contains some invalid byte sequence. One case when this can happen is during reading Xcode build logs:
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/cli/cli_app.py", line 206, in invoke_cli
CliApp._running_app._invoke_action(args)
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/cli/cli_app.py", line 163, in _invoke_action
return cli_action(**action_args)
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/cli/cli_app.py", line 458, in wrapper
return func(self, *args, **kwargs)
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/tools/xcode_project.py", line 270, in build_ipa
xcarchive = xcodebuild.archive(
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/models/xcodebuild.py", line 249, in archive
errors = _XcodebuildLogErrorFinder(self.logs_path).find_failure_logs()
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/models/xcodebuild.py", line 440, in find_failure_logs
failed_commands = self._get_failed_commands()
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/models/xcodebuild.py", line 390, in _get_failed_commands
for line in self._backwards_log_iterator:
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/utilities/backwards_file_reader.py", line 49, in iter_backwards
yield from _iter_backwards(fd, buffer_size, file_size=file_path.stat().st_size)
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/utilities/backwards_file_reader.py", line 19, in _iter_backwards
buffer = file_descriptor.read(min(unprocessed_size, buffer_size))
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError('utf-8', ..., '1', 'invalid start byte')
Applied changes:
Support backwards line iteration from in-memory binary file descriptors.
Read the files in binary instead of text mode whenever possible to avoid such errors.
Ignore decoding errors when converting bytes back to strings.
Backwards file reader
codemagic.utilities.backwards_file_reader.iter_backwards
can fail withUnicodeDecodeError
if the file contains some invalid byte sequence. One case when this can happen is during reading Xcode build logs:Applied changes:
Updated actions:
xcode-project build-ipa