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

Side by Side Diff: base/pickle.h

Issue 1619363002: Add compile time checks against longs being used in IPC structs on 32 bit Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update Created 4 years, 10 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
« no previous file with comments | « no previous file | base/pickle.cc » ('j') | ipc/ipc_message_utils.h » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #ifndef BASE_PICKLE_H_ 5 #ifndef BASE_PICKLE_H_
6 #define BASE_PICKLE_H_ 6 #define BASE_PICKLE_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
(...skipping 27 matching lines...) Expand all
38 // methods return true. Otherwise, false is returned to indicate that the 38 // methods return true. Otherwise, false is returned to indicate that the
39 // result could not be extracted. It is not possible to read from the iterator 39 // result could not be extracted. It is not possible to read from the iterator
40 // after that. 40 // after that.
41 bool ReadBool(bool* result) WARN_UNUSED_RESULT; 41 bool ReadBool(bool* result) WARN_UNUSED_RESULT;
42 bool ReadInt(int* result) WARN_UNUSED_RESULT; 42 bool ReadInt(int* result) WARN_UNUSED_RESULT;
43 bool ReadLong(long* result) WARN_UNUSED_RESULT; 43 bool ReadLong(long* result) WARN_UNUSED_RESULT;
44 bool ReadUInt16(uint16_t* result) WARN_UNUSED_RESULT; 44 bool ReadUInt16(uint16_t* result) WARN_UNUSED_RESULT;
45 bool ReadUInt32(uint32_t* result) WARN_UNUSED_RESULT; 45 bool ReadUInt32(uint32_t* result) WARN_UNUSED_RESULT;
46 bool ReadInt64(int64_t* result) WARN_UNUSED_RESULT; 46 bool ReadInt64(int64_t* result) WARN_UNUSED_RESULT;
47 bool ReadUInt64(uint64_t* result) WARN_UNUSED_RESULT; 47 bool ReadUInt64(uint64_t* result) WARN_UNUSED_RESULT;
48 bool ReadSizeT(size_t* result) WARN_UNUSED_RESULT;
49 bool ReadFloat(float* result) WARN_UNUSED_RESULT; 48 bool ReadFloat(float* result) WARN_UNUSED_RESULT;
50 bool ReadDouble(double* result) WARN_UNUSED_RESULT; 49 bool ReadDouble(double* result) WARN_UNUSED_RESULT;
51 bool ReadString(std::string* result) WARN_UNUSED_RESULT; 50 bool ReadString(std::string* result) WARN_UNUSED_RESULT;
52 // The StringPiece data will only be valid for the lifetime of the message. 51 // The StringPiece data will only be valid for the lifetime of the message.
53 bool ReadStringPiece(StringPiece* result) WARN_UNUSED_RESULT; 52 bool ReadStringPiece(StringPiece* result) WARN_UNUSED_RESULT;
54 bool ReadString16(string16* result) WARN_UNUSED_RESULT; 53 bool ReadString16(string16* result) WARN_UNUSED_RESULT;
55 // The StringPiece16 data will only be valid for the lifetime of the message. 54 // The StringPiece16 data will only be valid for the lifetime of the message.
56 bool ReadStringPiece16(StringPiece16* result) WARN_UNUSED_RESULT; 55 bool ReadStringPiece16(StringPiece16* result) WARN_UNUSED_RESULT;
57 56
58 // A pointer to the data will be placed in |*data|, and the length will be 57 // A pointer to the data will be placed in |*data|, and the length will be
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 class BASE_EXPORT PickleSizer { 114 class BASE_EXPORT PickleSizer {
116 public: 115 public:
117 PickleSizer(); 116 PickleSizer();
118 ~PickleSizer(); 117 ~PickleSizer();
119 118
120 // Returns the computed size of the payload. 119 // Returns the computed size of the payload.
121 size_t payload_size() const { return payload_size_; } 120 size_t payload_size() const { return payload_size_; }
122 121
123 void AddBool() { return AddInt(); } 122 void AddBool() { return AddInt(); }
124 void AddInt() { AddPOD<int>(); } 123 void AddInt() { AddPOD<int>(); }
125 void AddLongUsingDangerousNonPortableLessPersistableForm() { AddPOD<long>(); } 124 void AddLong() { AddPOD<uint64_t>(); }
126 void AddUInt16() { return AddPOD<uint16_t>(); } 125 void AddUInt16() { return AddPOD<uint16_t>(); }
127 void AddUInt32() { return AddPOD<uint32_t>(); } 126 void AddUInt32() { return AddPOD<uint32_t>(); }
128 void AddInt64() { return AddPOD<int64_t>(); } 127 void AddInt64() { return AddPOD<int64_t>(); }
129 void AddUInt64() { return AddPOD<uint64_t>(); } 128 void AddUInt64() { return AddPOD<uint64_t>(); }
130 void AddSizeT() { return AddPOD<uint64_t>(); }
131 void AddFloat() { return AddPOD<float>(); } 129 void AddFloat() { return AddPOD<float>(); }
132 void AddDouble() { return AddPOD<double>(); } 130 void AddDouble() { return AddPOD<double>(); }
133 void AddString(const StringPiece& value); 131 void AddString(const StringPiece& value);
134 void AddString16(const StringPiece16& value); 132 void AddString16(const StringPiece16& value);
135 void AddData(int length); 133 void AddData(int length);
136 void AddBytes(int length); 134 void AddBytes(int length);
137 135
138 private: 136 private:
139 // Just like AddBytes() but with a compile-time size for performance. 137 // Just like AddBytes() but with a compile-time size for performance.
140 template<size_t length> void BASE_EXPORT AddBytesStatic(); 138 template<size_t length> void BASE_EXPORT AddBytesStatic();
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 // appended to the end of the Pickle's payload. When reading values from a 220 // appended to the end of the Pickle's payload. When reading values from a
223 // Pickle, it is important to read them in the order in which they were added 221 // Pickle, it is important to read them in the order in which they were added
224 // to the Pickle. 222 // to the Pickle.
225 223
226 bool WriteBool(bool value) { 224 bool WriteBool(bool value) {
227 return WriteInt(value ? 1 : 0); 225 return WriteInt(value ? 1 : 0);
228 } 226 }
229 bool WriteInt(int value) { 227 bool WriteInt(int value) {
230 return WritePOD(value); 228 return WritePOD(value);
231 } 229 }
232 // WARNING: DO NOT USE THIS METHOD IF PICKLES ARE PERSISTED IN ANY WAY. 230 bool WriteLong(long value) {
233 // It will write whatever a "long" is on this architecture. On 32-bit 231 // Always write long as a 64-bit value to ensure compatibility between
234 // platforms, it is 32 bits. On 64-bit platforms, it is 64 bits. If persisted 232 // 32-bit and 64-bit processes.
235 // pickles are still around after upgrading to 64-bit, or if they are copied 233 return WritePOD(static_cast<int64_t>(value));
236 // between dissimilar systems, YOUR PICKLES WILL HAVE GONE BAD.
237 bool WriteLongUsingDangerousNonPortableLessPersistableForm(long value) {
238 return WritePOD(value);
239 } 234 }
240 bool WriteUInt16(uint16_t value) { return WritePOD(value); } 235 bool WriteUInt16(uint16_t value) { return WritePOD(value); }
241 bool WriteUInt32(uint32_t value) { return WritePOD(value); } 236 bool WriteUInt32(uint32_t value) { return WritePOD(value); }
242 bool WriteInt64(int64_t value) { return WritePOD(value); } 237 bool WriteInt64(int64_t value) { return WritePOD(value); }
243 bool WriteUInt64(uint64_t value) { return WritePOD(value); } 238 bool WriteUInt64(uint64_t value) { return WritePOD(value); }
244 bool WriteSizeT(size_t value) {
245 // Always write size_t as a 64-bit value to ensure compatibility between
246 // 32-bit and 64-bit processes.
247 return WritePOD(static_cast<uint64_t>(value));
248 }
249 bool WriteFloat(float value) { 239 bool WriteFloat(float value) {
250 return WritePOD(value); 240 return WritePOD(value);
251 } 241 }
252 bool WriteDouble(double value) { 242 bool WriteDouble(double value) {
253 return WritePOD(value); 243 return WritePOD(value);
254 } 244 }
255 bool WriteString(const StringPiece& value); 245 bool WriteString(const StringPiece& value);
256 bool WriteString16(const StringPiece16& value); 246 bool WriteString16(const StringPiece16& value);
257 // "Data" is a blob with a length. When you read it out you will be given the 247 // "Data" is a blob with a length. When you read it out you will be given the
258 // length. See also WriteBytes. 248 // length. See also WriteBytes.
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 FRIEND_TEST_ALL_PREFIXES(PickleTest, PeekNext); 375 FRIEND_TEST_ALL_PREFIXES(PickleTest, PeekNext);
386 FRIEND_TEST_ALL_PREFIXES(PickleTest, PeekNextOverflow); 376 FRIEND_TEST_ALL_PREFIXES(PickleTest, PeekNextOverflow);
387 FRIEND_TEST_ALL_PREFIXES(PickleTest, FindNext); 377 FRIEND_TEST_ALL_PREFIXES(PickleTest, FindNext);
388 FRIEND_TEST_ALL_PREFIXES(PickleTest, FindNextWithIncompleteHeader); 378 FRIEND_TEST_ALL_PREFIXES(PickleTest, FindNextWithIncompleteHeader);
389 FRIEND_TEST_ALL_PREFIXES(PickleTest, FindNextOverflow); 379 FRIEND_TEST_ALL_PREFIXES(PickleTest, FindNextOverflow);
390 }; 380 };
391 381
392 } // namespace base 382 } // namespace base
393 383
394 #endif // BASE_PICKLE_H_ 384 #endif // BASE_PICKLE_H_
OLDNEW
« no previous file with comments | « no previous file | base/pickle.cc » ('j') | ipc/ipc_message_utils.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698