Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Side by Side Diff: net/websockets/websocket_frame_parser.cc

Issue 1404673003: net/websockets: Use the (U)INTx_{MIN,MAX} macros from stdint.h (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/websockets/websocket_frame_parser.h" 5 #include "net/websockets/websocket_frame_parser.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/basictypes.h"
11 #include "base/big_endian.h" 10 #include "base/big_endian.h"
12 #include "base/logging.h" 11 #include "base/logging.h"
13 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
14 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
15 #include "base/memory/scoped_vector.h" 14 #include "base/memory/scoped_vector.h"
16 #include "net/base/io_buffer.h" 15 #include "net/base/io_buffer.h"
17 #include "net/websockets/websocket_frame.h" 16 #include "net/websockets/websocket_frame.h"
18 17
19 namespace { 18 namespace {
20 19
21 const uint8_t kFinalBit = 0x80; 20 const uint8_t kFinalBit = 0x80;
22 const uint8_t kReserved1Bit = 0x40; 21 const uint8_t kReserved1Bit = 0x40;
23 const uint8_t kReserved2Bit = 0x20; 22 const uint8_t kReserved2Bit = 0x20;
24 const uint8_t kReserved3Bit = 0x10; 23 const uint8_t kReserved3Bit = 0x10;
25 const uint8_t kOpCodeMask = 0xF; 24 const uint8_t kOpCodeMask = 0xF;
26 const uint8_t kMaskBit = 0x80; 25 const uint8_t kMaskBit = 0x80;
27 const uint8_t kPayloadLengthMask = 0x7F; 26 const uint8_t kPayloadLengthMask = 0x7F;
28 const uint64_t kMaxPayloadLengthWithoutExtendedLengthField = 125; 27 const uint64_t kMaxPayloadLengthWithoutExtendedLengthField = 125;
29 const uint64_t kPayloadLengthWithTwoByteExtendedLengthField = 126; 28 const uint64_t kPayloadLengthWithTwoByteExtendedLengthField = 126;
30 const uint64_t kPayloadLengthWithEightByteExtendedLengthField = 127; 29 const uint64_t kPayloadLengthWithEightByteExtendedLengthField = 127;
31 30
32 } // Unnamed namespace. 31 } // namespace.
33 32
34 namespace net { 33 namespace net {
35 34
36 WebSocketFrameParser::WebSocketFrameParser() 35 WebSocketFrameParser::WebSocketFrameParser()
37 : current_read_pos_(0), 36 : current_read_pos_(0),
38 frame_offset_(0), 37 frame_offset_(0),
39 websocket_error_(kWebSocketNormalClosure) { 38 websocket_error_(kWebSocketNormalClosure) {
40 std::fill(masking_key_.key, 39 std::fill(masking_key_.key,
41 masking_key_.key + WebSocketFrameHeader::kMaskingKeyLength, 40 masking_key_.key + WebSocketFrameHeader::kMaskingKeyLength,
42 '\0'); 41 '\0');
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 base::ReadBigEndian(current, &payload_length_16); 126 base::ReadBigEndian(current, &payload_length_16);
128 current += 2; 127 current += 2;
129 payload_length = payload_length_16; 128 payload_length = payload_length_16;
130 if (payload_length <= kMaxPayloadLengthWithoutExtendedLengthField) 129 if (payload_length <= kMaxPayloadLengthWithoutExtendedLengthField)
131 websocket_error_ = kWebSocketErrorProtocolError; 130 websocket_error_ = kWebSocketErrorProtocolError;
132 } else if (payload_length == kPayloadLengthWithEightByteExtendedLengthField) { 131 } else if (payload_length == kPayloadLengthWithEightByteExtendedLengthField) {
133 if (end - current < 8) 132 if (end - current < 8)
134 return; 133 return;
135 base::ReadBigEndian(current, &payload_length); 134 base::ReadBigEndian(current, &payload_length);
136 current += 8; 135 current += 8;
137 if (payload_length <= kuint16max || 136 if (payload_length <= UINT16_MAX ||
138 payload_length > static_cast<uint64_t>(kint64max)) { 137 payload_length > static_cast<uint64_t>(INT64_MAX)) {
139 websocket_error_ = kWebSocketErrorProtocolError; 138 websocket_error_ = kWebSocketErrorProtocolError;
140 } else if (payload_length > static_cast<uint64_t>(kint32max)) { 139 } else if (payload_length > static_cast<uint64_t>(INT32_MAX)) {
141 websocket_error_ = kWebSocketErrorMessageTooBig; 140 websocket_error_ = kWebSocketErrorMessageTooBig;
142 } 141 }
143 } 142 }
144 if (websocket_error_ != kWebSocketNormalClosure) { 143 if (websocket_error_ != kWebSocketNormalClosure) {
145 buffer_.clear(); 144 buffer_.clear();
146 current_read_pos_ = 0; 145 current_read_pos_ = 0;
147 current_frame_header_.reset(); 146 current_frame_header_.reset();
148 frame_offset_ = 0; 147 frame_offset_ = 0;
149 return; 148 return;
150 } 149 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 if (frame_offset_ == current_frame_header_->payload_length) { 200 if (frame_offset_ == current_frame_header_->payload_length) {
202 frame_chunk->final_chunk = true; 201 frame_chunk->final_chunk = true;
203 current_frame_header_.reset(); 202 current_frame_header_.reset();
204 frame_offset_ = 0; 203 frame_offset_ = 0;
205 } 204 }
206 205
207 return frame_chunk.Pass(); 206 return frame_chunk.Pass();
208 } 207 }
209 208
210 } // namespace net 209 } // namespace net
OLDNEW
« net/websockets/websocket_frame.cc ('K') | « net/websockets/websocket_frame.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698