Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 502556b0 authored by Wu Ahan's avatar Wu Ahan Committed by Automerger Merge Worker
Browse files

DO NOT MERGE: Decode the input of both setStream and setResource calls first am: 51b874f6

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16375906

Change-Id: Ie9b52cbfb80ccc0ecb1a814ac0f00fce6de089d7
parents 13e996b4 51b874f6
Loading
Loading
Loading
Loading
+29 −11
Original line number Original line Diff line number Diff line
@@ -1394,18 +1394,27 @@ public class WallpaperManager {
                    mContext.getUserId());
                    mContext.getUserId());
            if (fd != null) {
            if (fd != null) {
                FileOutputStream fos = null;
                FileOutputStream fos = null;
                boolean ok = false;
                final Bitmap tmp = BitmapFactory.decodeStream(resources.openRawResource(resid));
                try {
                try {
                    // If the stream can't be decoded, treat it as an invalid input.
                    if (tmp != null) {
                        fos = new ParcelFileDescriptor.AutoCloseOutputStream(fd);
                        fos = new ParcelFileDescriptor.AutoCloseOutputStream(fd);
                    copyStreamToWallpaperFile(resources.openRawResource(resid), fos);
                        tmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
                        // The 'close()' is the trigger for any server-side image manipulation,
                        // The 'close()' is the trigger for any server-side image manipulation,
                        // so we must do that before waiting for completion.
                        // so we must do that before waiting for completion.
                        fos.close();
                        fos.close();
                        completion.waitForCompletion();
                        completion.waitForCompletion();
                    } else {
                        throw new IllegalArgumentException(
                                "Resource 0x" + Integer.toHexString(resid) + " is invalid");
                    }
                } finally {
                } finally {
                    // Might be redundant but completion shouldn't wait unless the write
                    // Might be redundant but completion shouldn't wait unless the write
                    // succeeded; this is a fallback if it threw past the close+wait.
                    // succeeded; this is a fallback if it threw past the close+wait.
                    IoUtils.closeQuietly(fos);
                    IoUtils.closeQuietly(fos);
                    if (tmp != null) {
                        tmp.recycle();
                    }
                }
                }
            }
            }
        } catch (RemoteException e) {
        } catch (RemoteException e) {
@@ -1647,13 +1656,22 @@ public class WallpaperManager {
                    result, which, completion, mContext.getUserId());
                    result, which, completion, mContext.getUserId());
            if (fd != null) {
            if (fd != null) {
                FileOutputStream fos = null;
                FileOutputStream fos = null;
                final Bitmap tmp = BitmapFactory.decodeStream(bitmapData);
                try {
                try {
                    // If the stream can't be decoded, treat it as an invalid input.
                    if (tmp != null) {
                        fos = new ParcelFileDescriptor.AutoCloseOutputStream(fd);
                        fos = new ParcelFileDescriptor.AutoCloseOutputStream(fd);
                    copyStreamToWallpaperFile(bitmapData, fos);
                        tmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
                        fos.close();
                        fos.close();
                        completion.waitForCompletion();
                        completion.waitForCompletion();
                    } else {
                        throw new IllegalArgumentException("InputStream is invalid");
                    }
                } finally {
                } finally {
                    IoUtils.closeQuietly(fos);
                    IoUtils.closeQuietly(fos);
                    if (tmp != null) {
                        tmp.recycle();
                    }
                }
                }
            }
            }
        } catch (RemoteException e) {
        } catch (RemoteException e) {