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

Side by Side Diff: third_party/WebKit/Source/wtf/Uint8ClampedArray.h

Issue 1414553002: Fix out-of-memory crashes related to ArrayBuffer allocation Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase+more tweaks Created 5 years, 1 month 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 | « third_party/WebKit/Source/wtf/Uint8Array.h ('k') | 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 /* 1 /*
2 * Copyright (C) 2009 Apple Inc. All rights reserved. 2 * Copyright (C) 2009 Apple Inc. All rights reserved.
3 * Copyright (C) 2009 Google Inc. All rights reserved. 3 * Copyright (C) 2009 Google Inc. All rights reserved.
4 * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). 4 * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 17 matching lines...) Expand all
28 #ifndef Uint8ClampedArray_h 28 #ifndef Uint8ClampedArray_h
29 #define Uint8ClampedArray_h 29 #define Uint8ClampedArray_h
30 30
31 #include "wtf/Uint8Array.h" 31 #include "wtf/Uint8Array.h"
32 #include "wtf/MathExtras.h" 32 #include "wtf/MathExtras.h"
33 33
34 namespace WTF { 34 namespace WTF {
35 35
36 class Uint8ClampedArray final : public Uint8Array { 36 class Uint8ClampedArray final : public Uint8Array {
37 public: 37 public:
38 static inline PassRefPtr<Uint8ClampedArray> create(unsigned length); 38 static inline PassRefPtr<Uint8ClampedArray> createOrNull(unsigned length);
39 static inline PassRefPtr<Uint8ClampedArray> create(const unsigned char* arra y, unsigned length); 39 static inline PassRefPtr<Uint8ClampedArray> createOrNull(const unsigned char * array, unsigned length);
40 static inline PassRefPtr<Uint8ClampedArray> deprecatedCreateOrCrash(const un signed char* array, unsigned length);
40 static inline PassRefPtr<Uint8ClampedArray> create(PassRefPtr<ArrayBuffer>, unsigned byteOffset, unsigned length); 41 static inline PassRefPtr<Uint8ClampedArray> create(PassRefPtr<ArrayBuffer>, unsigned byteOffset, unsigned length);
41 42
42 using TypedArrayBase<unsigned char>::set; 43 using TypedArrayBase<unsigned char>::set;
43 inline void set(unsigned index, double value); 44 inline void set(unsigned index, double value);
44 45
45 ViewType type() const override 46 ViewType type() const override
46 { 47 {
47 return TypeUint8Clamped; 48 return TypeUint8Clamped;
48 } 49 }
49 50
50 private: 51 private:
51 inline Uint8ClampedArray(PassRefPtr<ArrayBuffer>, unsigned byteOffset, unsig ned length); 52 inline Uint8ClampedArray(PassRefPtr<ArrayBuffer>, unsigned byteOffset, unsig ned length);
52 // Make constructor visible to superclass. 53 // Make constructor visible to superclass.
53 friend class TypedArrayBase<unsigned char>; 54 friend class TypedArrayBase<unsigned char>;
54 }; 55 };
55 56
56 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::create(unsigned length) 57 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::createOrNull(unsigned length)
57 { 58 {
58 return TypedArrayBase<unsigned char>::create<Uint8ClampedArray>(length); 59 return TypedArrayBase<unsigned char>::createOrNull<Uint8ClampedArray>(length );
59 } 60 }
60 61
61 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::create(const unsigned char* arr ay, unsigned length) 62 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::createOrNull(const unsigned cha r* array, unsigned length)
62 { 63 {
63 return TypedArrayBase<unsigned char>::create<Uint8ClampedArray>(array, lengt h); 64 return TypedArrayBase<unsigned char>::createOrNull<Uint8ClampedArray>(array, length);
65 }
66
67 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::deprecatedCreateOrCrash(const u nsigned char* array, unsigned length)
68 {
69 return TypedArrayBase<unsigned char>::deprecatedCreateOrCrash<Uint8ClampedAr ray>(array, length);
64 } 70 }
65 71
66 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::create(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned length) 72 PassRefPtr<Uint8ClampedArray> Uint8ClampedArray::create(PassRefPtr<ArrayBuffer> buffer, unsigned byteOffset, unsigned length)
67 { 73 {
68 return TypedArrayBase<unsigned char>::create<Uint8ClampedArray>(buffer, byte Offset, length); 74 return TypedArrayBase<unsigned char>::create<Uint8ClampedArray>(buffer, byte Offset, length);
69 } 75 }
70 76
71 void Uint8ClampedArray::set(unsigned index, double value) 77 void Uint8ClampedArray::set(unsigned index, double value)
72 { 78 {
73 if (index >= m_length) 79 if (index >= m_length)
74 return; 80 return;
75 if (std::isnan(value) || value < 0) 81 if (std::isnan(value) || value < 0)
76 value = 0; 82 value = 0;
77 else if (value > 255) 83 else if (value > 255)
78 value = 255; 84 value = 255;
79 data()[index] = static_cast<unsigned char>(lrint(value)); 85 data()[index] = static_cast<unsigned char>(lrint(value));
80 } 86 }
81 87
82 Uint8ClampedArray::Uint8ClampedArray(PassRefPtr<ArrayBuffer> buffer, unsigned by teOffset, unsigned length) 88 Uint8ClampedArray::Uint8ClampedArray(PassRefPtr<ArrayBuffer> buffer, unsigned by teOffset, unsigned length)
83 : Uint8Array(buffer, byteOffset, length) 89 : Uint8Array(buffer, byteOffset, length)
84 { 90 {
85 } 91 }
86 92
87 } // namespace WTF 93 } // namespace WTF
88 94
89 using WTF::Uint8ClampedArray; 95 using WTF::Uint8ClampedArray;
90 96
91 #endif // Uint8ClampedArray_h 97 #endif // Uint8ClampedArray_h
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/wtf/Uint8Array.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698