Set stability for unset interfaces.
This specifically has handwritten interfaces in mind. This CL ensures
that if there is a handwritten interface, it'll be marked with 'local'
stability before it is sent out. This means that a handwritten interface
won't accidentally be interpretted as a stable interface.
Bug: 136027762
Test: boot
Change-Id: I97e3e7c72f99e12dbf00996ff0c68fb683f3c494
diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp
index ba44c66..82053ad 100644
--- a/libs/binder/Parcel.cpp
+++ b/libs/binder/Parcel.cpp
@@ -170,6 +170,8 @@
status_t Parcel::finishFlattenBinder(
const sp<IBinder>& binder, const flat_binder_object& flat)
{
+ internal::Stability::tryMarkCompilationUnit(binder.get());
+
status_t status = writeObject(flat, false);
if (status != OK) return status;
@@ -183,11 +185,11 @@
status_t status = readInt32(&stability);
if (status != OK) return status;
- if (!internal::Stability::check(stability, mRequiredStability)) {
+ if (binder != nullptr && !internal::Stability::check(stability, mRequiredStability)) {
return BAD_TYPE;
}
- status = internal::Stability::set(binder.get(), stability);
+ status = internal::Stability::set(binder.get(), stability, true /*log*/);
if (status != OK) return status;
*out = binder;