パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Firefox 96 の不調は治った?」記事へのコメント

  • by Anonymous Coward

    HTTP/3で"Content-Length"のパースをcase sensitiveに行っていたから小文字の"content-length"を送られると応答の長さの取得に失敗するって…

    • by Anonymous Coward

      ダサい原因のバグを作ったことがない人はコードを書いたことがない人だけ。君みたいにね。

      • by Anonymous Coward on 2022年01月18日 9時57分 (#4186349)

        聖人かな?

        さすがにここまでダサいコードは書いたことないよ。
        仮に書いたとして、自分のでもダサいって言うし、他人のもダサいって言うだけのこと。
        事実を事実として捉えられない君とは違うから。

        親コメント
        • by Anonymous Coward on 2022年01月18日 10時29分 (#4186366)

          何がダサいって規格違反のデータを考慮しなければならない現実かな…

          親コメント
          • by Anonymous Coward on 2022年01月18日 10時59分 (#4186381)

            Hypertext Transfer Protocol Version 3 (HTTP/3) [quicwg.org]

            Field names are strings containing a subset of ASCII characters. Properties of HTTP field names and values are discussed in more detail in Section 5.1 of [SEMANTICS]. As in HTTP/2, characters in field names MUST be converted to lowercase prior to their encoding. A request or response containing uppercase characters in field names MUST be treated as malformed (Section 4.1.3).

            ほんとだ、規格上は全部小文字にしろって書いてあるのか。
            ただ、実体として定義されているフィールドからして [iana.org]は大文字混じっていて、なんだかなーという感じ。

            親コメント
            • by Anonymous Coward

              小文字にしなきなならない項目の名前を大文字混じりにするから余計混乱してんじゃん…
              #規格策定の前提として企画が守られない場合を考慮しなければならないという暗黙のルールは守られない。考慮した結果無視することにしましただったらごめんなさい。

              • by Anonymous Coward on 2022年01月18日 14時02分 (#4186484)

                HTTP1.1 は case-insensitive [w3.org]
                HTTP2.0 は 「header field names MUST be converted to lowercase」 [ietf.org]。
                HTTP3.0 は#4186381で示されている通り、HTTP2.0 と同じ。

                しかし HTTP2.0 への移行時、RFC 通りだと見られなくなるサイトが多かったことは想像に難くない。
                RFC では「MUST be treated as malformed」だけど、その通りのブラウザなんてないんじゃないかな。
                なお mozzila のサイト [mozilla.org]では HTTP1.1 時代のままなのか、区別しないと書かれている。

                HTTP headers let the client and the server pass additional information with an HTTP request or response. An HTTP header consists of its case-insensitive name followed by a colon (:), then by its value. Whitespace before the value is ignored.

                だからといって「Content-Length」を case-sensitive でチェックしているのは、RFC 関係なく開発側のミスとは思うけど。

                親コメント
            • by Anonymous Coward

              「規格に違反しているヘッダを読み込めるのはバグだ」なんて言うようになったりして。

              • by Anonymous Coward

                前に試してみたけど、規格違反のヘッダがそのまま読み込まれる事例はあるね。

                551 not found

                とかあり得ないステータスコードでも、エラーにならなかったり。
                …どう表現するのが正しいのか、「http通信を完了できませんでした」みたいなことにはならず、
                http通信としては通信が完了した上で、変なステータスコードがちゃんと入った状態になるという意味でのエラーにならない。

                どこまで大きな数値を入れられるのか試してみたら、int型でオーバーフローするような挙動が見られたり、
                どう数値変換したらそうなるのかよく分からない値に変換されたり。
                バッファオーバーフローの脆弱性があるような処理はしてないだろうと思うけど、ちょっと気持ち悪かった。

                際限なく受け付けられる訳でもないし、何されるか分からないし、規格違反は蹴るのが本当は正しいはず。

              • by Anonymous Coward

                551があり得ないって何で?
                ステータスコードなんて随時拡張されてる物だよ

              • by Anonymous Coward

                551があるときー、551がないときー、ってCMは大阪外には通じないのか。

                その地域限定ネタはともかく、4桁でも5桁でも「ステータスコードが変なだけの正しいhttp通信」として処理された。
                3桁の整数と仕様に明記されてたはずだからこれはhttp通信ではない、と蹴らないとおかしい。

          • by Anonymous Coward on 2022年01月18日 15時56分 (#4186540)

            何がダサいって規格違反のデータを考慮しなければならない現実かな…

            全くの出鱈目です。
            https://bugzilla.mozilla.org/show_bug.cgi?id=1749957#c5 [mozilla.org]

            > However that function only looks at case-sensitive Content-Length:, but the header is in lowercase in the buffer, so we don't compute the content-length and leave it as zero. So we get here and get to the wrong branch, and fail to send the body and consume the rest of the buffer, so we loop indefinitely.

            規格上は "content-length" としなければならない(現実にはそうなっていないケースも多いが)のですが、
            Firefox は case-sensitive で "Content-Length" でなければ正しく処理できませんでした。

            つまり、Firefox は規格通りのデータを処理できなかったのです。

            100% Firefox が悪いです。

            親コメント
        • by Anonymous Coward

          完全に理解してそう...

「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常

処理中...