]> git.kaiwu.me - nginx.git/commitdiff
SPDY: fixed off_t/size_t type conversions on 32 bits platforms.
authorValentin Bartenev <vbart@nginx.com>
Wed, 15 Jan 2014 09:23:31 +0000 (13:23 +0400)
committerValentin Bartenev <vbart@nginx.com>
Wed, 15 Jan 2014 09:23:31 +0000 (13:23 +0400)
Parameters of ngx_http_spdy_filter_get_shadow() are changed from size_t to off_t
since the last call of the function may get size and offset from the rest of a
file buffer.  This fixes possible data loss rightfully complained by MSVC on 32
bits systems where off_t is 8 bytes long while size_t is only 4 bytes.

The other two type casts are needed just to suppress warnings about possible
data loss also complained by MSVC but false positive in these cases.

src/http/ngx_http_spdy_filter_module.c

index 5d45ebc1b601e06346fa178898a6868efecf3971..7a7559ee8b5902c1f772c0814a11bca901baa3d2 100644 (file)
@@ -35,8 +35,7 @@ static ngx_inline ngx_int_t ngx_http_spdy_filter_send(
     ngx_connection_t *fc, ngx_http_spdy_stream_t *stream);
 
 static ngx_chain_t *ngx_http_spdy_filter_get_shadow(
-    ngx_http_spdy_stream_t *stream, ngx_buf_t *buf, size_t offset,
-    size_t size);
+    ngx_http_spdy_stream_t *stream, ngx_buf_t *buf, off_t offset, off_t size);
 static ngx_http_spdy_out_frame_t *ngx_http_spdy_filter_get_data_frame(
     ngx_http_spdy_stream_t *stream, size_t len, ngx_chain_t *first,
     ngx_chain_t *last);
@@ -702,7 +701,7 @@ ngx_http_spdy_send_chain(ngx_connection_t *fc, ngx_chain_t *in, off_t limit)
             *ln = cl;
             ln = &cl->next;
 
-            rest -= size;
+            rest -= (size_t) size;
             in = in->next;
 
             if (in == NULL) {
@@ -752,7 +751,7 @@ ngx_http_spdy_send_chain(ngx_connection_t *fc, ngx_chain_t *in, off_t limit)
             }
 
             if (limit < (off_t) slcf->chunk_size) {
-                frame_size = limit;
+                frame_size = (size_t) limit;
             }
         }
     }
@@ -777,7 +776,7 @@ ngx_http_spdy_send_chain(ngx_connection_t *fc, ngx_chain_t *in, off_t limit)
 
 static ngx_chain_t *
 ngx_http_spdy_filter_get_shadow(ngx_http_spdy_stream_t *stream, ngx_buf_t *buf,
-    size_t offset, size_t size)
+    off_t offset, off_t size)
 {
     ngx_buf_t    *chunk;
     ngx_chain_t  *cl;