Add a patch from Debian to fix wrong encoding of output message

This commit is contained in:
Björn Esser 2019-01-06 20:41:58 +01:00
parent 1716f69410
commit 18fc62ff32
No known key found for this signature in database
GPG Key ID: F52E98007594C21D
2 changed files with 75 additions and 1 deletions

View File

@ -0,0 +1,68 @@
Description: Fix the crash from #912099
ITS Tool 2.0.4 crashes when building some documentation, as reported in
#912099. This comes from translations with invalid XML markup, which ITS Tool
fails to merge (which is not abnormal), and to report these issues, needlessly
encodes the original msgstr from unicode to bytes, causing it to be recoded
using the default ascii codec, which fails when the msgstr contains anything
out of ascii.
.
This patch removes the useless decoding, avoiding the failing subsequent
recoding. It also explicitly encodes the output strings to be able to print
them in all cases, even when the output encoding cannot be detected.
Bug: https://github.com/itstool/itstool/issues/25
Bug-Debian: https://bugs.debian.org/912099
Forwarded: https://github.com/itstool/itstool/issues/25
Author: Tanguy Ortolo <tanguy+debian@ortolo.eu>
Last-Update: 2018-12-071
Index: itstool/itstool.in
===================================================================
--- itstool.orig/itstool.in 2018-12-10 18:31:23.762143539 +0100
+++ itstool/itstool.in 2018-12-10 18:38:03.496777117 +0100
@@ -44,9 +44,22 @@
else:
return str(s)
ustr_type = str
+ def pr_str(s):
+ """Return a string that can be safely print()ed"""
+ # Since print works on both bytes and unicode, just return the argument
+ return s
else:
string_types = basestring,
ustr = ustr_type = unicode
+ def pr_str(s):
+ """Return a string that can be safely print()ed"""
+ if isinstance(s, str):
+ # Since print works on str, just return the argument
+ return s
+ else:
+ # print may not work on unicode if the output encoding cannot be
+ # detected, so just encode with UTF-8
+ return unicode.encode(s, 'utf-8')
NS_ITS = 'http://www.w3.org/2005/11/its'
NS_ITST = 'http://itstool.org/extensions/'
@@ -1060,9 +1073,9 @@
if strict:
raise
else:
- sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
+ sys.stderr.write(pr_str('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
(lang + ' ') if lang is not None else '',
- msgstr.encode('utf-8')))
+ msgstr)))
self._xml_err = ''
return node
def scan_node(node):
@@ -1087,9 +1100,9 @@
if strict:
raise
else:
- sys.stderr.write('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
+ sys.stderr.write(pr_str('Warning: Could not merge %stranslation for msgid:\n%s\n' % (
(lang + ' ') if lang is not None else '',
- msgstr.encode('utf-8')))
+ msgstr)))
self._xml_err = ''
ctxt.doc().freeDoc()
return node

View File

@ -1,11 +1,13 @@
Name: itstool
Version: 2.0.5
Release: 1%{?dist}
Release: 2%{?dist}
Summary: ITS-based XML translation tool
License: GPLv3+
URL: http://itstool.org/
Source0: http://files.itstool.org/itstool/%{name}-%{version}.tar.bz2
# See: https://github.com/itstool/itstool/issues/25
Patch0: https://sources.debian.org/data/main/i/itstool/2.0.5-2/debian/patches/fix_crash_912099.patch#/%{name}-2.0.5-fix-crash-wrong-encoding.patch
BuildArch: noarch
@ -20,6 +22,7 @@ how to separate it into PO file messages.
%prep
%setup -q
%patch0 -p 1 -b .encoding
%build
export PYTHON=%{__python3}
@ -37,6 +40,9 @@ export PYTHON=%{__python3}
%{_mandir}/man1/itstool.1*
%changelog
* Sun Jan 06 2019 Björn Esser <besser82@fedoraproject.org> - 2.0.5-2
- Add a patch from Debian to fix wrong encoding of output message
* Tue Dec 04 2018 Kalev Lember <klember@redhat.com> - 2.0.5-1
- Update to 2.0.5
- Use make_build and make_install macros