From 70f8e99c40a67eab1d65763d2efc427652a7c236 Mon Sep 17 00:00:00 2001 From: Kweku Adams Date: Tue, 22 Jun 2021 13:28:23 -0700 Subject: [PATCH] Reject invalid input. Ensure that apps don't provide negative estimated byte usage. Bug: 141645789 Test: atest android.jobscheduler.cts.JobInfoTest Test: atest android.jobscheduler.cts.JobWorkItemTest Change-Id: I66485040de0cc105056349e308561f9ddd6ab91a --- .../framework/java/android/app/job/JobInfo.java | 11 ++++++++++- .../framework/java/android/app/job/JobWorkItem.java | 4 ++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/apex/jobscheduler/framework/java/android/app/job/JobInfo.java b/apex/jobscheduler/framework/java/android/app/job/JobInfo.java index 144536ec2644d..9ab0ad5e5d5eb 100644 --- a/apex/jobscheduler/framework/java/android/app/job/JobInfo.java +++ b/apex/jobscheduler/framework/java/android/app/job/JobInfo.java @@ -1250,6 +1250,11 @@ public class JobInfo implements Parcelable { */ public Builder setEstimatedNetworkBytes(@BytesLong long downloadBytes, @BytesLong long uploadBytes) { + if ((downloadBytes != NETWORK_BYTES_UNKNOWN && downloadBytes < 0) + || (uploadBytes != NETWORK_BYTES_UNKNOWN && uploadBytes < 0)) { + throw new IllegalArgumentException( + "Can't provide negative estimated network usage"); + } mNetworkDownloadBytes = downloadBytes; mNetworkUploadBytes = uploadBytes; return this; @@ -1647,12 +1652,16 @@ public class JobInfo implements Parcelable { /** * @hide */ - public void enforceValidity() { + public final void enforceValidity() { // Check that network estimates require network type if ((networkDownloadBytes > 0 || networkUploadBytes > 0) && networkRequest == null) { throw new IllegalArgumentException( "Can't provide estimated network usage without requiring a network"); } + if ((networkDownloadBytes != NETWORK_BYTES_UNKNOWN && networkDownloadBytes < 0) + || (networkUploadBytes != NETWORK_BYTES_UNKNOWN && networkUploadBytes < 0)) { + throw new IllegalArgumentException("Can't provide negative estimated network usage"); + } // Check that a deadline was not set on a periodic job. if (isPeriodic) { diff --git a/apex/jobscheduler/framework/java/android/app/job/JobWorkItem.java b/apex/jobscheduler/framework/java/android/app/job/JobWorkItem.java index 0c45cbf6dc114..c6d366f675a50 100644 --- a/apex/jobscheduler/framework/java/android/app/job/JobWorkItem.java +++ b/apex/jobscheduler/framework/java/android/app/job/JobWorkItem.java @@ -68,6 +68,10 @@ final public class JobWorkItem implements Parcelable { * uploaded by this job work item, in bytes. */ public JobWorkItem(Intent intent, @BytesLong long downloadBytes, @BytesLong long uploadBytes) { + if ((downloadBytes != NETWORK_BYTES_UNKNOWN && downloadBytes < 0) + || (uploadBytes != NETWORK_BYTES_UNKNOWN && uploadBytes < 0)) { + throw new IllegalArgumentException("Can't provide negative estimated network usage"); + } mIntent = intent; mNetworkDownloadBytes = downloadBytes; mNetworkUploadBytes = uploadBytes;