Re: [quicwg/base-drafts] HTTP/3 references QUIC Stream IDs directly, allowing illegal references (#3273)

Kazuho Oku <> Fri, 06 December 2019 01:16 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 0B73212004D for <>; Thu, 5 Dec 2019 17:16:40 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -7.999
X-Spam-Status: No, score=-7.999 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, 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_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: (amavisd-new); dkim=pass (1024-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id Ngwe1G8gTKik for <>; Thu, 5 Dec 2019 17:16:38 -0800 (PST)
Received: from ( []) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 9BAD912004C for <>; Thu, 5 Dec 2019 17:16:38 -0800 (PST)
Received: from ( []) by (Postfix) with ESMTP id 68FAEA04D6 for <>; Thu, 5 Dec 2019 17:16:37 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=pf2014; t=1575594997; bh=whS2iKTfqI6xcO+DBnvwQZAdmJcqKJv/7RruHllx4/o=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=vJIEnB4k3Rv9wjCZVaCwRizrVX3SCYUs+zsiRSxYMI9Hzgz1NVzmYOdSoat8mMHzZ gJaaq7Efcq2Saalgm4LztCOxJ2IOHwrSPzuhbADzAI+Oqv1MJdvyFOfSEv6Od6ZJC6 trbHMs9adEoiDLxu4vWGYDSkzhXFYT3cp8TnNrR4=
Date: Thu, 05 Dec 2019 17:16:37 -0800
From: Kazuho Oku <>
Reply-To: quicwg/base-drafts <>
To: quicwg/base-drafts <>
Cc: Subscribed <>
Message-ID: <quicwg/base-drafts/issues/3273/>
In-Reply-To: <quicwg/base-drafts/issues/>
References: <quicwg/base-drafts/issues/>
Subject: Re: [quicwg/base-drafts] HTTP/3 references QUIC Stream IDs directly, allowing illegal references (#3273)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5de9abf5596bb_22633fe5320cd968829f5"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: kazuho
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
Archived-At: <>
X-Mailman-Version: 2.1.29
List-Id: Notification list for GitHub issues related to the QUIC WG <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Fri, 06 Dec 2019 01:16:40 -0000

@martinthomson I'm not sure if the logic is correct. It is my understanding that the server need to set GOAWAY.stream_id to the largest request stream ID it has processed, __added by 4__.

This is because the rules are:
* The GOAWAY frame indicates that client-initiated requests on lower stream IDs were or might be processed in this connection, while requests on the indicated stream ID and greater were rejected ([section 5.2](
* It carries a QUIC Stream ID for a client-initiated bidirectional stream encoded as a variable-length integer ([section 7.2.6](

@LPardue My point is that the specification requires a server to send an stream ID it has never seen, when there are no requests inflight.

I thought that it would be good to use as an example the case where no requests have ever been sent, and that the spec has to call out what should happen in that particular case is a leak.

But that might not have been the best example. Maybe I should have given the example when one request is exchanged then the server idle-timeouts. In such case, GOAWAY.stream_id is expected to be 4, which is a stream ID that the server has never seen.

You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub: