• Tatsuhiro Tsujikawa's avatar
    More strict stream state handling · 16c46114
    Tatsuhiro Tsujikawa authored
    Previously, in server side, we used closed streams to detect the error
    that the misbehaving client sends a frame on the incoming stream it
    explicitly closed.  With this commit, we make a further step, and
    detect one more error case.  Since we retain closed streams as long as
    the sum of its size and the number of opened streams are equal or less
    than max concurrent streams, we can safely say that if we get a frame
    which is sent on the stream that is not found in either closed or
    opened stream, it is already closed or has not existed.  Then we can
    send GOAWAY.
    
    The previous code shrinks closed streams when we closed another
    stream, but now it is removed.  It is enough to adjust closed streams
    when new incoming stream is created.
    
    While creating this commit, we noticed that
    NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS is defined as INT32_MAX.  But
    since SETTINGS can contain value up to UINT32_MAX, it is not enough.
    However, since the stream ID space is limited to INT32_MAX, it is high
    enough.  We could keep this value, but this time we deprecate
    NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS macro.  While it is in public
    header, the effect of deprecating it is negligible because of the
    reason we wrote above, and usually application sets much smaller value
    (say, 100) as SETTINGS_MAX_CONCURRENT_STREAMS.
    16c46114
nghttp2_session_test.c 348 KB