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

Side by Side Diff: third_party/jsoncpp/overrides/src/lib_json/json_value.cpp

Issue 24984004: jsoncpp: force alignment of Json::Value::null to avoid crashes on ARM. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 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 | 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 2011 Baptiste Lepilleur 1 // Copyright 2011 Baptiste Lepilleur
2 // Distributed under MIT license, or public domain if desired and 2 // Distributed under MIT license, or public domain if desired and
3 // recognized in your jurisdiction. 3 // recognized in your jurisdiction.
4 // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE 4 // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
5 5
6 #if !defined(JSON_IS_AMALGAMATION) 6 #if !defined(JSON_IS_AMALGAMATION)
7 # include <json/assertions.h> 7 # include <json/assertions.h>
8 # include <json/value.h> 8 # include <json/value.h>
9 # include <json/writer.h> 9 # include <json/writer.h>
10 # ifndef JSON_USE_SIMPLE_INTERNAL_ALLOCATOR 10 # ifndef JSON_USE_SIMPLE_INTERNAL_ALLOCATOR
11 # include "json_batchallocator.h" 11 # include "json_batchallocator.h"
12 # endif // #ifndef JSON_USE_SIMPLE_INTERNAL_ALLOCATOR 12 # endif // #ifndef JSON_USE_SIMPLE_INTERNAL_ALLOCATOR
13 #endif // if !defined(JSON_IS_AMALGAMATION) 13 #endif // if !defined(JSON_IS_AMALGAMATION)
14 #include <math.h> 14 #include <math.h>
15 #include <sstream> 15 #include <sstream>
16 #include <utility> 16 #include <utility>
17 #include <stdexcept> 17 #include <stdexcept>
18 #include <cstring> 18 #include <cstring>
19 #include <cassert> 19 #include <cassert>
20 #ifdef JSON_USE_CPPTL 20 #ifdef JSON_USE_CPPTL
21 # include <cpptl/conststring.h> 21 # include <cpptl/conststring.h>
22 #endif 22 #endif
23 #include <cstddef> // size_t 23 #include <cstddef> // size_t
24 24
25 #define JSON_ASSERT_UNREACHABLE assert( false ) 25 #define JSON_ASSERT_UNREACHABLE assert( false )
26 26
27 namespace Json { 27 namespace Json {
28 28
29 // This is a walkaround to avoid the static initialization of Value::null. 29 // This is a walkaround to avoid the static initialization of Value::null.
30 // const Value Value::null; 30 // kNull must be word-aligned to avoid crashing on ARM. We use an alignment of
31 static const unsigned char kNull[sizeof(Value)] = { 0 }; 31 // 8 (instead of 4) as a bit of future-proofing.
32 #if defined(__ARMEL__)
33 #define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment)))
34 #else
35 #define ALIGNAS(byte_alignment)
36 #endif
37 static const unsigned char ALIGNAS(8) kNull[sizeof(Value)] = {0};
32 const Value& Value::null = reinterpret_cast<const Value&>(kNull); 38 const Value& Value::null = reinterpret_cast<const Value&>(kNull);
33 39
34 const Int Value::minInt = Int( ~(UInt(-1)/2) ); 40 const Int Value::minInt = Int( ~(UInt(-1)/2) );
35 const Int Value::maxInt = Int( UInt(-1)/2 ); 41 const Int Value::maxInt = Int( UInt(-1)/2 );
36 const UInt Value::maxUInt = UInt(-1); 42 const UInt Value::maxUInt = UInt(-1);
37 # if defined(JSON_HAS_INT64) 43 # if defined(JSON_HAS_INT64)
38 const Int64 Value::minInt64 = Int64( ~(UInt64(-1)/2) ); 44 const Int64 Value::minInt64 = Int64( ~(UInt64(-1)/2) );
39 const Int64 Value::maxInt64 = Int64( UInt64(-1)/2 ); 45 const Int64 Value::maxInt64 = Int64( UInt64(-1)/2 );
40 const UInt64 Value::maxUInt64 = UInt64(-1); 46 const UInt64 Value::maxUInt64 = UInt64(-1);
41 // The constant is hard-coded because some compiler have trouble 47 // The constant is hard-coded because some compiler have trouble
(...skipping 1873 matching lines...) Expand 10 before | Expand all | Expand 10 after
1915 // Error: node is not an object at position... 1921 // Error: node is not an object at position...
1916 } 1922 }
1917 node = &((*node)[arg.key_]); 1923 node = &((*node)[arg.key_]);
1918 } 1924 }
1919 } 1925 }
1920 return *node; 1926 return *node;
1921 } 1927 }
1922 1928
1923 1929
1924 } // namespace Json 1930 } // namespace Json
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