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

Side by Side Diff: include/opentype-sanitiser.h

Issue 9117014: Use memcpy() instead of violating strict-aliasing rules. (Closed) Base URL: http://ots.googlecode.com/svn/trunk/
Patch Set: Created 8 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 OPENTYPE_SANITISER_H_ 5 #ifndef OPENTYPE_SANITISER_H_
6 #define OPENTYPE_SANITISER_H_ 6 #define OPENTYPE_SANITISER_H_
7 7
8 #if defined(_WIN32) 8 #if defined(_WIN32)
9 typedef signed char int8_t; 9 typedef signed char int8_t;
10 typedef unsigned char uint8_t; 10 typedef unsigned char uint8_t;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 if (chksum_buffer_offset_) { 50 if (chksum_buffer_offset_) {
51 const size_t l = 51 const size_t l =
52 std::min(length, static_cast<size_t>(4) - chksum_buffer_offset_); 52 std::min(length, static_cast<size_t>(4) - chksum_buffer_offset_);
53 std::memcpy(chksum_buffer_ + chksum_buffer_offset_, data, l); 53 std::memcpy(chksum_buffer_ + chksum_buffer_offset_, data, l);
54 chksum_buffer_offset_ += l; 54 chksum_buffer_offset_ += l;
55 offset += l; 55 offset += l;
56 length -= l; 56 length -= l;
57 } 57 }
58 58
59 if (chksum_buffer_offset_ == 4) { 59 if (chksum_buffer_offset_ == 4) {
60 // TODO(yusukes): This cast breaks the strict-aliasing rule. 60 uint32_t chksum;
61 chksum_ += ntohl(*reinterpret_cast<const uint32_t*>(chksum_buffer_)); 61 std::memcpy(&chksum, chksum_buffer_, 4);
62 chksum_ += ntohl(chksum);
62 chksum_buffer_offset_ = 0; 63 chksum_buffer_offset_ = 0;
63 } 64 }
64 65
65 while (length >= 4) { 66 while (length >= 4) {
66 chksum_ += ntohl(*reinterpret_cast<const uint32_t*>( 67 chksum_ += ntohl(*reinterpret_cast<const uint32_t*>(
67 reinterpret_cast<const uint8_t*>(data) + offset)); 68 reinterpret_cast<const uint8_t*>(data) + offset));
68 length -= 4; 69 length -= 4;
69 offset += 4; 70 offset += 4;
70 } 71 }
71 72
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 // ----------------------------------------------------------------------------- 183 // -----------------------------------------------------------------------------
183 bool Process(OTSStream *output, const uint8_t *input, size_t length); 184 bool Process(OTSStream *output, const uint8_t *input, size_t length);
184 185
185 // Force to disable debug output even when the library is compiled with 186 // Force to disable debug output even when the library is compiled with
186 // -DOTS_DEBUG. 187 // -DOTS_DEBUG.
187 void DisableDebugOutput(); 188 void DisableDebugOutput();
188 189
189 } // namespace ots 190 } // namespace ots
190 191
191 #endif // OPENTYPE_SANITISER_H_ 192 #endif // OPENTYPE_SANITISER_H_
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698