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

Unified Diff: mojo/public/cpp/bindings/lib/array_serialization.h

Issue 1509703002: Mojo C++ bindings: Fix bug: array<>, map<> should only initialize elements if they're not null when… (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years 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 side-by-side diff with in-line comments
Download patch
Index: mojo/public/cpp/bindings/lib/array_serialization.h
diff --git a/mojo/public/cpp/bindings/lib/array_serialization.h b/mojo/public/cpp/bindings/lib/array_serialization.h
index db5fb099f0b93a346f8c100287c78878399dae75..fd2ebb3efe24843d70a0c6c2ba2e02e4b6984f6a 100644
--- a/mojo/public/cpp/bindings/lib/array_serialization.h
+++ b/mojo/public/cpp/bindings/lib/array_serialization.h
@@ -300,8 +300,10 @@ struct ArraySerializer<
static size_t GetSerializedSize(const Array<S>& input) {
size_t size = sizeof(Array_Data<S_Data*>) +
input.size() * sizeof(StructPointer<S_Data>);
- for (size_t i = 0; i < input.size(); ++i)
- size += GetSerializedSize_(*(UnwrapConstStructPtr<S>::value(input[i])));
+ for (size_t i = 0; i < input.size(); ++i) {
+ if (!input[i].is_null())
+ size += GetSerializedSize_(*(UnwrapConstStructPtr<S>::value(input[i])));
+ }
return size;
}
@@ -406,15 +408,19 @@ struct ArraySerializer<
template <typename T>
static void Run(typename WrapperTraits<StructPtr<T>>::DataType input,
StructPtr<T>* output) {
- *output = T::New();
- Deserialize_(input, output->get());
+ if (input != nullptr) {
viettrungluu 2015/12/07 22:03:51 nit: probably "if (input)" should be fine and more
vardhan 2015/12/07 22:48:31 Done. I was trying to be more explicit about what
+ *output = T::New();
+ Deserialize_(input, output->get());
+ }
}
template <typename T>
static void Run(typename WrapperTraits<InlinedStructPtr<T>>::DataType input,
InlinedStructPtr<T>* output) {
- *output = T::New();
- Deserialize_(input, output->get());
+ if (input != nullptr) {
viettrungluu 2015/12/07 22:03:51 "
vardhan 2015/12/07 22:48:31 Done.
+ *output = T::New();
+ Deserialize_(input, output->get());
+ }
}
};
};
@@ -477,7 +483,7 @@ template <typename E>
inline size_t GetSerializedSize_(const Array<E>& input) {
if (!input)
return 0;
- typedef typename internal::WrapperTraits<E>::DataType F;
+ using F = typename internal::WrapperTraits<E>::DataType;
return internal::ArraySerializer<E, F>::GetSerializedSize(input);
}
« no previous file with comments | « no previous file | mojo/public/cpp/bindings/lib/bindings_internal.h » ('j') | mojo/public/cpp/bindings/lib/map_serialization.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698