[quicwg/base-drafts] minimum payload size requirement creates awkward special case (#2049)

Marten Seemann <notifications@github.com> Sun, 25 November 2018 04:14 UTC

Return-Path: <noreply@github.com>
X-Original-To: quic-issues@ietfa.amsl.com
Delivered-To: quic-issues@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 009B5128CE4 for <quic-issues@ietfa.amsl.com>; Sat, 24 Nov 2018 20:14:46 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -9.46
X-Spam-Level:
X-Spam-Status: No, score=-9.46 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.46, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_DNSWL_HI=-5, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=github.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Qrtn5bEJ-cex for <quic-issues@ietfa.amsl.com>; Sat, 24 Nov 2018 20:14:44 -0800 (PST)
Received: from out-4.smtp.github.com (out-4.smtp.github.com [192.30.252.195]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 79CAE123FFD for <quic-issues@ietf.org>; Sat, 24 Nov 2018 20:14:44 -0800 (PST)
Date: Sat, 24 Nov 2018 20:14:43 -0800
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1543119283; bh=xiDCZkyLJ8egNFXVcTDunYWRZYdKTn6pPnCWzkpDoHw=; h=Date:From:Reply-To:To:Cc:Subject:List-ID:List-Archive:List-Post: List-Unsubscribe:From; b=sDrMhyVCxE/dH/F/H2AmLGS6mGKoV4Z1yqYOeirxHLtlMnz6qiK0NccYYQKAx9Fnr kkNOKdzHFo2YCuLZjViiftsmWONpmPuMLDAndBXLzBHN5Uhda3GetgbURSIq5MTOVc xz21ALRhamgj5ZvPS8g6nx81q4/sQ048S9+tjDMI=
From: Marten Seemann <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+0166e4ab299f01019323e8678dd9420ab25a4492954bbe4b92cf000000011811e3b392a169ce16e4137a@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/issues/2049@github.com>
Subject: [quicwg/base-drafts] minimum payload size requirement creates awkward special case (#2049)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5bfa21b340fab_72953fb36d4d45bc46182d"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: marten-seemann
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
X-GitHub-Recipient-Address: quic-issues@ietf.org
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/21deGx22arKt6JZA_P-GdnL_1q4>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG <quic-issues.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic-issues/>
List-Post: <mailto:quic-issues@ietf.org>
List-Help: <mailto:quic-issues-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sun, 25 Nov 2018 04:14:46 -0000

In #2030 we set the minimum payload size to `4-packet number length`.
This creates a really awkward special case in my code. When packing STREAM frames, I make sure that the last STREAM frame doesn't have the length flag set, so I can save the bytes for encoding the payload length.

In the corner case where I only have a single stream for new a stream with stream ID < 64 that is closing that stream at offset 0, the length of this STREAM frame is just 2 bytes: 1 (type byte) + 1 (stream ID).
If I now add a PADDING frame in order to fulfill the minimum size requirement, this will be interpreted as part of the payload of the STREAM frame, so I will need special logic to detect the special case described above, and set the length flag on the STREAM frame in that case.

The motivation for #2030 was to avoid a special case that would rarely be executed (and which would lead to an undecryptable packet in the worst case). It seems that we achieved that by introducing an even rarer special case, which leads to incorrect delivery of stream data if not properly taken care of.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/quicwg/base-drafts/issues/2049