From nobody Thu Dec 26 18:15:08 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=patchew-devel-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=patchew-devel-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1543308593708854.0860447827605; Tue, 27 Nov 2018 00:49:53 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 5FE553086267; Tue, 27 Nov 2018 08:49:52 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5156860C47; Tue, 27 Nov 2018 08:49:52 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 436DB3F953; Tue, 27 Nov 2018 08:49:52 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wAR8np9G010725 for ; Tue, 27 Nov 2018 03:49:51 -0500 Received: by smtp.corp.redhat.com (Postfix) id B8DE25DAA0; Tue, 27 Nov 2018 08:49:51 +0000 (UTC) Received: from mx1.redhat.com (ext-mx19.extmail.prod.ext.phx2.redhat.com [10.5.110.48]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B74DA5DD63; Tue, 27 Nov 2018 08:49:45 +0000 (UTC) Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8CD8C3078AA7; Tue, 27 Nov 2018 08:49:43 +0000 (UTC) Received: by mail-wr1-f47.google.com with SMTP id j2so21771452wrw.1; Tue, 27 Nov 2018 00:49:43 -0800 (PST) Received: from localhost.localdomain ([2001:b07:6468:f312:60a1:384e:4c17:72ad]) by smtp.gmail.com with ESMTPSA id y34sm5083010wrd.68.2018.11.27.00.49.40 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 27 Nov 2018 00:49:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ua1AtJxJDRCF3uJdRlvudHpy50kqJfwNljEdFtJ4Xh0=; b=cXA5eC3oXW5HrvmRci5UwyYoujKAVNGL50mTYiB1ABxwVkvGj5VxyyrNsMqvhKo3Ny Lyf1fuBz3oY/cu1ecs7+T4dvNFtVQifArxZc6uyiyktSzb9bJn1L+vGlOv4NQ/smrg21 LlmZXebMBQOnGAS0INDhcF9FNMejccjiC1paW0TMLQQD/kNxvLxJ2eusrvw4QjitMIeF q93KHei4Vi2z01TXvCrwTU+RMqyY4CigPthMOLM9whwlPCTXI33wbb32rt8a9ookY6YW EFe+LUUfyGYq8w+onmVigkvtoL+xrxTZQff8K72+z7TkU7aMWFbm6x7NCgerNzbX8mHj vPtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=ua1AtJxJDRCF3uJdRlvudHpy50kqJfwNljEdFtJ4Xh0=; b=WC5LwWbnGMgczjg90G5Uv3v0uwsffGQ3jcAJ2Qa+MRxjfCnVLugWPyispuqQO0s2Zd OdFDFO19YTV9O+/1L+G1nQN30bFhuGoIeblPLjhCfmQFXGVbBuGXw+gF2rqAXVJUDBuk SlgMWvdiuUTrt85mfQJ/vlJsQyRdAgPD2toAaYXgTIvmUTPDEDz5Opm5YMb3io2Bj0lr XGBrSQvTfaW+tvUJvTMDfWPf2vjkuW5SXxHDyb14U0WfyPw42dSWWqQ0MkETx7l32Dv5 NlZ3emKRHRrRcM4BmIL2XGtEUfIAXrNHipjhxjOeOYWUhtlROf1rjWW3bGvIstmIrXrb ClJA== X-Gm-Message-State: AA+aEWbnUVsb1BKBtjA++XjYlM0n9uSrIgJd8F0JZK+N/X6jiHK6+G0M qLWRJntxHD6qFX4LO5W6Vm7d6gNY X-Google-Smtp-Source: AFSGD/WspFC6F+DTWcayG/WvzOveIlT63T/ktnpyF5HGm/BdKH24TCMESjN6nbBmN5S7WgIxEqa//Q== X-Received: by 2002:a5d:43d0:: with SMTP id v16mr28378078wrr.67.1543308581896; Tue, 27 Nov 2018 00:49:41 -0800 (PST) From: Paolo Bonzini To: patchew-devel@redhat.com Date: Tue, 27 Nov 2018 09:49:34 +0100 Message-Id: <20181127084935.17898-2-pbonzini@redhat.com> In-Reply-To: <20181127084935.17898-1-pbonzini@redhat.com> References: <20181127084935.17898-1-pbonzini@redhat.com> MIME-Version: 1.0 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.48]); Tue, 27 Nov 2018 08:49:43 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.48]); Tue, 27 Nov 2018 08:49:43 +0000 (UTC) for IP:'209.85.221.47' DOMAIN:'mail-wr1-f47.google.com' HELO:'mail-wr1-f47.google.com' FROM:'paolo.bonzini@gmail.com' RCPT:'' X-RedHat-Spam-Score: 0.24 (DKIM_SIGNED, DKIM_VALID, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_NONE, SPF_PASS) 209.85.221.47 mail-wr1-f47.google.com 209.85.221.47 mail-wr1-f47.google.com X-RedHat-Possible-Forgery: Paolo Bonzini X-Scanned-By: MIMEDefang 2.84 on 10.5.110.48 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: patchew-devel@redhat.com Cc: famz@redhat.com Subject: [Patchew-devel] [PATCH 1/2] views: join messages as bytes into the mbox X-BeenThere: patchew-devel@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Patchew development and discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: patchew-devel-bounces@redhat.com Errors-To: patchew-devel-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Tue, 27 Nov 2018 08:49:52 +0000 (UTC) X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" To simplify the code, let email.message do the encoding and create the From= line for the mbox. The case where a message cannot be parsed is not handled any= more; it was not necessary because that should have resulted in a failed import in the first place. Signed-off-by: Paolo Bonzini Reviewed-by: Caio Carrara --- www/views.py | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/www/views.py b/www/views.py index 49357e2..45f63c8 100644 --- a/www/views.py +++ b/www/views.py @@ -286,17 +286,14 @@ def view_mbox(request, project, message_id): =20 def get_mbox_with_tags(m): mbox =3D m.get_mbox() - try: - msg =3D email.message_from_string(mbox) - except Exception: - return mbox + msg =3D email.message_from_string(mbox) container =3D msg.get_payload(0) if msg.is_multipart() else msg if container.get_content_type() !=3D "text/plain": - return mbox + return msg.as_bytes(unixfrom=3DTrue) =20 payload =3D decode_payload(container) container.set_payload('\n'.join(mbox_with_tags_iter(payload, m.tag= s))) - return msg.as_string() + return msg.as_bytes(unixfrom=3DTrue) =20 s =3D api.models.Message.objects.find_message(message_id, project) if not s: @@ -310,14 +307,8 @@ def view_mbox(request, project, message_id): =20 mbox_list =3D [] for message in messages: - mbox_list.append( - "From %s %s\n%s" % ( - message.get_sender_addr(), - message.get_asctime(), - get_mbox_with_tags(message) - ) - ) - mbox =3D "\n".join(mbox_list) + mbox_list.append(get_mbox_with_tags(message)) + mbox =3D b"\n".join(mbox_list) return HttpResponse(mbox, content_type=3D"text/plain") =20 =20 --=20 2.19.1 _______________________________________________ Patchew-devel mailing list Patchew-devel@redhat.com https://www.redhat.com/mailman/listinfo/patchew-devel From nobody Thu Dec 26 18:15:08 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=patchew-devel-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=patchew-devel-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1543308595911667.9956792410844; Tue, 27 Nov 2018 00:49:55 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 94661307DAC1; Tue, 27 Nov 2018 08:49:54 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 84D5D5C26E; Tue, 27 Nov 2018 08:49:54 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 7866F3F953; Tue, 27 Nov 2018 08:49:54 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id wAR8nr9w010735 for ; Tue, 27 Nov 2018 03:49:53 -0500 Received: by smtp.corp.redhat.com (Postfix) id BC7501001F5E; Tue, 27 Nov 2018 08:49:53 +0000 (UTC) Received: from mx1.redhat.com (ext-mx10.extmail.prod.ext.phx2.redhat.com [10.5.110.39]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 6CBCA105B1E0; Tue, 27 Nov 2018 08:49:47 +0000 (UTC) Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 09CE39B307; Tue, 27 Nov 2018 08:49:45 +0000 (UTC) Received: by mail-wr1-f51.google.com with SMTP id r10so21729182wrs.10; Tue, 27 Nov 2018 00:49:44 -0800 (PST) Received: from localhost.localdomain ([2001:b07:6468:f312:60a1:384e:4c17:72ad]) by smtp.gmail.com with ESMTPSA id y34sm5083010wrd.68.2018.11.27.00.49.41 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 27 Nov 2018 00:49:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=F3wki+Eg21nq2XmqDurPmbvjpylp+h+ZUhZ+wvTLb/0=; b=qx3zr8wJ4MWMr6nxXBy+zuSVeGpJZdAowL3ipgEp3QkElw4CaWv/OS/qc5Gq1E9+ai FXb5aGlZo4/FyhQApP6c8NpRAp9g/i1kI4egSLg3L/wrjQvZKGdDy9qO9wTFzO7kZa2q +gNjPLRTrf4mP53eDV9BehjUrhVDyY2guKzICYWDe/0Emkrosh2w5Jq6qGWuL9wfe+f7 0HvdE1AZAma7pHf5f8gqUbR7eYqi8SdeFV1M2S1dkhgoLTKEpa43rUgmq28SGF+kz9oQ gqHdt/m6BQmNk6WrK7IygwMpfi7V4SFaVQVbLKX2Ool5TW6wJda7IB3CSWXMnEUceHdb nLwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=F3wki+Eg21nq2XmqDurPmbvjpylp+h+ZUhZ+wvTLb/0=; b=XK1xA8k6jSiwWa6Fi8chzy5szkqAQ+fDh5XMo9dTR/G9CE1/DxNld3OgwKol1U+W45 C5pBAKO/vkIRrOzJaxlTz+2XqxoqgjNgoPoTecoXvfpib3k2QR3Hi5hnd6hl4HZqAf+Y 2BYND9zU36LgqlPLDGBu7hVi6TeFPG4yW5mRyAJvMdVpO8AG0eZabG8aPTOWwNn7qD/3 qrrKNog48rfsILggu3qAIVteg5UtFc0IQOpPdBS3UMWCLy4M9ZcRzS6aBQala5pbgkOf 4wjutrafdNzJ8fBv/QAcUcxJ+6SAFwUPWEqFBzcI1jY68/sCgnhYl70l/iOkAAzzB19j 9Ceg== X-Gm-Message-State: AA+aEWa+VCqULqY5QW591aiLUAfmUsa1f/e86Nd16oUQ7FmFzMQzaKW9 iEIeR5PoURGDb2InYtAujvt5fiUk X-Google-Smtp-Source: AFSGD/W9aXVf+qQsAfo99m+4X0vewJqZt5aXihmis5x4SsACTb/U+GN1PiFAj5ur0M4R0dtiVCXtxg== X-Received: by 2002:a5d:4286:: with SMTP id k6mr26747865wrq.225.1543308583140; Tue, 27 Nov 2018 00:49:43 -0800 (PST) From: Paolo Bonzini To: patchew-devel@redhat.com Date: Tue, 27 Nov 2018 09:49:35 +0100 Message-Id: <20181127084935.17898-3-pbonzini@redhat.com> In-Reply-To: <20181127084935.17898-1-pbonzini@redhat.com> References: <20181127084935.17898-1-pbonzini@redhat.com> MIME-Version: 1.0 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 27 Nov 2018 08:49:45 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 27 Nov 2018 08:49:45 +0000 (UTC) for IP:'209.85.221.51' DOMAIN:'mail-wr1-f51.google.com' HELO:'mail-wr1-f51.google.com' FROM:'paolo.bonzini@gmail.com' RCPT:'' X-RedHat-Spam-Score: 0.24 (DKIM_SIGNED, DKIM_VALID, FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_NONE, SPF_PASS) 209.85.221.51 mail-wr1-f51.google.com 209.85.221.51 mail-wr1-f51.google.com X-RedHat-Possible-Forgery: Paolo Bonzini X-Scanned-By: MIMEDefang 2.78 on 10.5.110.39 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-loop: patchew-devel@redhat.com Cc: famz@redhat.com Subject: [Patchew-devel] [PATCH 2/2] views: fix Content-Transfer-Encoding and Content-Type of downloaded mbox X-BeenThere: patchew-devel@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Patchew development and discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: patchew-devel-bounces@redhat.com Errors-To: patchew-devel-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Tue, 27 Nov 2018 08:49:54 +0000 (UTC) X-ZohoMail-DKIM: fail (Header signature does not verify) set_payload expects the argument to be already encoded according to the message's content type and transfer encoding. Force a good charset and transfer encoding, in case the source message's is incompatible with the trailers. Otherwise, if the source message specified for example an iso-8859-1 encoding, we get mojibake in the utf-8 trailers. Otherwise, adding an 8-bit trailer to a 7-bit message causes the email module to switch to quoted-printable, without the body actually being quoted-printable. As a result, all equals sign in the original message are broken. Signed-off-by: Paolo Bonzini Reviewed-by: Caio Carrara --- tests/data/0028-tags-need-8bit-encoding.mbox.gz | Bin 0 -> 6585 bytes tests/test_tags.py | 13 +++++++++++++ www/views.py | 11 ++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 tests/data/0028-tags-need-8bit-encoding.mbox.gz diff --git a/tests/data/0028-tags-need-8bit-encoding.mbox.gz b/tests/data/0= 028-tags-need-8bit-encoding.mbox.gz new file mode 100644 index 0000000000000000000000000000000000000000..4156beed26b6e4f2b2f03442ddb= 01043d411c34f GIT binary patch literal 6585 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', payload) + if __name__ =3D=3D '__main__': main() diff --git a/www/views.py b/www/views.py index 45f63c8..2aae127 100644 --- a/www/views.py +++ b/www/views.py @@ -17,6 +17,7 @@ from django.utils.html import format_html from django.conf import settings import api import email +import quopri from mbox import decode_payload import re from mod import dispatch_module_hook @@ -292,7 +293,15 @@ def view_mbox(request, project, message_id): return msg.as_bytes(unixfrom=3DTrue) =20 payload =3D decode_payload(container) - container.set_payload('\n'.join(mbox_with_tags_iter(payload, m.tag= s))) + # We might be adding 8-bit trailers to a message with 7bit CTE. F= or + # patches, quoted-printable is safe and mostly human-readable. + try: + container.replace_header('Content-Transfer-Encoding', 'quoted-= printable') + except: + msg.add_header('Content-Transfer-Encoding', 'quoted-printable') + payload =3D '\n'.join(mbox_with_tags_iter(payload, m.tags)) + payload =3D quopri.encodestring(payload.encode('utf-8')) + container.set_payload(payload, charset=3D'utf-8') return msg.as_bytes(unixfrom=3DTrue) =20 s =3D api.models.Message.objects.find_message(message_id, project) --=20 2.19.1 _______________________________________________ Patchew-devel mailing list Patchew-devel@redhat.com https://www.redhat.com/mailman/listinfo/patchew-devel