mirror of
https://github.com/nginx/nginx.git
synced 2025-08-05 14:06:16 +08:00
SPDY: fixed operator precedence in uint16/uint32 write macros.
Since the type cast has precedence higher than the bit shift operator, all values were truncated to 8 bits. These macros are used to construct header block for SYN_REPLY frame on platforms with strict alignment requirements. As a result, any response that contains a header with name or value longer than 255 bytes was corrupted on such platforms.
This commit is contained in:
parent
0750df4f16
commit
68336e1ede
@ -230,13 +230,16 @@ ngx_int_t ngx_http_spdy_send_output_queue(ngx_http_spdy_connection_t *sc);
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
#define ngx_spdy_frame_write_uint16(p, s) \
|
#define ngx_spdy_frame_write_uint16(p, s) \
|
||||||
((p)[0] = (u_char) (s) >> 8, (p)[1] = (u_char) (s), (p) + sizeof(uint16_t))
|
((p)[0] = (u_char) ((s) >> 8), \
|
||||||
|
(p)[1] = (u_char) (s), \
|
||||||
|
(p) + sizeof(uint16_t))
|
||||||
|
|
||||||
#define ngx_spdy_frame_write_uint32(p, s) \
|
#define ngx_spdy_frame_write_uint32(p, s) \
|
||||||
((p)[0] = (u_char) (s) >> 24, \
|
((p)[0] = (u_char) ((s) >> 24), \
|
||||||
(p)[1] = (u_char) (s) >> 16, \
|
(p)[1] = (u_char) ((s) >> 16), \
|
||||||
(p)[2] = (u_char) (s) >> 8, \
|
(p)[2] = (u_char) ((s) >> 8), \
|
||||||
(p)[3] = (u_char) (s), (p) + sizeof(uint32_t))
|
(p)[3] = (u_char) (s), \
|
||||||
|
(p) + sizeof(uint32_t))
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user