mirror of
https://github.com/chromium/crashpad.git
synced 2024-12-28 15:50:26 +08:00
af28b83eb7
In Chromium, the AnnotationList is registered in the main executable module. However, when using the component build, the individual shared libraries do not explicitly initialize the CrashpadInfo nor AnnotationList. This causes annotations to NULL-dereference the uninitialized AnnotationList when using the component build. By using the Register method instead, the AnnotationList will be lazily created. In Chromium's static/release build, the AnnotationList will still be initialized deterministically during startup. Bug: crashpad:192 Change-Id: I8599b52630f4d7608e5028b14264a8eed49a9176 Reviewed-on: https://chromium-review.googlesource.com/793981 Commit-Queue: Robert Sesek <rsesek@chromium.org> Reviewed-by: Mark Mentovai <mark@chromium.org>
43 lines
1.3 KiB
C++
43 lines
1.3 KiB
C++
// Copyright 2017 The Crashpad Authors. All rights reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include "client/annotation.h"
|
|
|
|
#include <type_traits>
|
|
|
|
#include "client/annotation_list.h"
|
|
|
|
namespace crashpad {
|
|
|
|
static_assert(std::is_standard_layout<Annotation>::value,
|
|
"Annotation must be POD");
|
|
|
|
// static
|
|
constexpr size_t Annotation::kNameMaxLength;
|
|
constexpr size_t Annotation::kValueMaxSize;
|
|
|
|
void Annotation::SetSize(ValueSizeType size) {
|
|
DCHECK_LT(size, kValueMaxSize);
|
|
size_ = size;
|
|
// Use Register() instead of Get() in case the calling module has not
|
|
// explicitly initialized the annotation list, to avoid crashing.
|
|
AnnotationList::Register()->Add(this);
|
|
}
|
|
|
|
void Annotation::Clear() {
|
|
size_ = 0;
|
|
}
|
|
|
|
} // namespace crashpad
|