mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-10-01 01:35:54 -04:00
c45a1db5e2
Plus a bonus October patch from @flamefire https://github.com/Flamefire/android_device_sony_lilac/blob/lineage-17.1/patches/asb-2023-10/android_packages_providers_MediaProvider/0001-Fix-path-traversal-vulnerabilities-in-MediaProvider.patch Signed-off-by: Tad <tad@spotco.us>
215 lines
8.6 KiB
Diff
215 lines
8.6 KiB
Diff
From c5803c1b6a680ad1c30f9655508784e07c08be36 Mon Sep 17 00:00:00 2001
|
|
From: James Zern <jzern@google.com>
|
|
Date: Sat, 9 Sep 2023 14:02:18 -0700
|
|
Subject: [PATCH] update to v1.1.0-8-g50f60add
|
|
|
|
https://chromium.googlesource.com/webm/libwebp/+log/v1.1.0..v1.1.0-8-g50f60add
|
|
|
|
50f60add Fix OOB write in BuildHuffmanTable.
|
|
5df85e9c EncodeAlphaInternal: clear result->bw on error
|
|
89e226a3 GetBackwardReferences: fail on alloc error
|
|
4d0964cd BackwardReferencesHashChainDistanceOnly: fix segfault on OOM
|
|
5d805f72 VP8LEncodeStream: fix segfault on OOM
|
|
b14eba64 alpha_processing_neon.c: fix 0x01... typo
|
|
9183ff2e alpha_processing_neon.c: fix Dispatch/ExtractAlpha_NEON
|
|
68d52453 Fix lossless encoding for MIPS.
|
|
|
|
Bug: 299477569
|
|
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:c3f928a1d30e48a400ed434130da3609cbfd54ad)
|
|
Merged-In: Ia4290d2a5f16a61ae0729b7d55ba144251c2b988
|
|
Change-Id: Ia4290d2a5f16a61ae0729b7d55ba144251c2b988
|
|
---
|
|
README.android | 2 +-
|
|
README.version | 4 ++--
|
|
src/dsp/alpha_processing_neon.c | 6 ++++--
|
|
src/dsp/lossless_enc_mips32.c | 8 ++++----
|
|
src/enc/alpha_enc.c | 4 +++-
|
|
src/enc/backward_references_cost_enc.c | 2 +-
|
|
src/enc/backward_references_enc.c | 13 +++++++------
|
|
src/enc/vp8l_enc.c | 11 ++++++++---
|
|
8 files changed, 30 insertions(+), 20 deletions(-)
|
|
|
|
diff --git a/README.android b/README.android
|
|
index 94fd4d4a..93c20140 100644
|
|
--- a/README.android
|
|
+++ b/README.android
|
|
@@ -1,5 +1,5 @@
|
|
URL: https://chromium.googlesource.com/webm/libwebp
|
|
-Version: v1.1.0
|
|
+Version: v1.1.0-8-g50f60add
|
|
License: Google BSD like
|
|
|
|
Local modifications:
|
|
diff --git a/README.version b/README.version
|
|
index f94ac059..621b44fa 100644
|
|
--- a/README.version
|
|
+++ b/README.version
|
|
@@ -1,3 +1,3 @@
|
|
-URL: https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.1.0.tar.gz
|
|
-Version: 1.1.0
|
|
+URL: https://chromium.googlesource.com/webm/libwebp/+archive/v1.1.0-8-g50f60add.tar.gz
|
|
+Version: v1.1.0-8-g50f60add
|
|
BugComponent: 20174
|
|
diff --git a/src/dsp/alpha_processing_neon.c b/src/dsp/alpha_processing_neon.c
|
|
index 9d554217..27d71750 100644
|
|
--- a/src/dsp/alpha_processing_neon.c
|
|
+++ b/src/dsp/alpha_processing_neon.c
|
|
@@ -83,7 +83,7 @@ static void ApplyAlphaMultiply_NEON(uint8_t* rgba, int alpha_first,
|
|
static int DispatchAlpha_NEON(const uint8_t* alpha, int alpha_stride,
|
|
int width, int height,
|
|
uint8_t* dst, int dst_stride) {
|
|
- uint32_t alpha_mask = 0xffffffffu;
|
|
+ uint32_t alpha_mask = 0xffu;
|
|
uint8x8_t mask8 = vdup_n_u8(0xff);
|
|
uint32_t tmp[2];
|
|
int i, j;
|
|
@@ -107,6 +107,7 @@ static int DispatchAlpha_NEON(const uint8_t* alpha, int alpha_stride,
|
|
dst += dst_stride;
|
|
}
|
|
vst1_u8((uint8_t*)tmp, mask8);
|
|
+ alpha_mask *= 0x01010101;
|
|
alpha_mask &= tmp[0];
|
|
alpha_mask &= tmp[1];
|
|
return (alpha_mask != 0xffffffffu);
|
|
@@ -134,7 +135,7 @@ static void DispatchAlphaToGreen_NEON(const uint8_t* alpha, int alpha_stride,
|
|
static int ExtractAlpha_NEON(const uint8_t* argb, int argb_stride,
|
|
int width, int height,
|
|
uint8_t* alpha, int alpha_stride) {
|
|
- uint32_t alpha_mask = 0xffffffffu;
|
|
+ uint32_t alpha_mask = 0xffu;
|
|
uint8x8_t mask8 = vdup_n_u8(0xff);
|
|
uint32_t tmp[2];
|
|
int i, j;
|
|
@@ -156,6 +157,7 @@ static int ExtractAlpha_NEON(const uint8_t* argb, int argb_stride,
|
|
alpha += alpha_stride;
|
|
}
|
|
vst1_u8((uint8_t*)tmp, mask8);
|
|
+ alpha_mask *= 0x01010101;
|
|
alpha_mask &= tmp[0];
|
|
alpha_mask &= tmp[1];
|
|
return (alpha_mask == 0xffffffffu);
|
|
diff --git a/src/dsp/lossless_enc_mips32.c b/src/dsp/lossless_enc_mips32.c
|
|
index 0412a093..99630517 100644
|
|
--- a/src/dsp/lossless_enc_mips32.c
|
|
+++ b/src/dsp/lossless_enc_mips32.c
|
|
@@ -347,24 +347,24 @@ static void GetCombinedEntropyUnrefined_MIPS32(const uint32_t X[],
|
|
static void AddVector_MIPS32(const uint32_t* pa, const uint32_t* pb,
|
|
uint32_t* pout, int size) {
|
|
uint32_t temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;
|
|
- const uint32_t end = ((size) / 4) * 4;
|
|
+ const int end = ((size) / 4) * 4;
|
|
const uint32_t* const LoopEnd = pa + end;
|
|
int i;
|
|
ASM_START
|
|
ADD_TO_OUT(0, 4, 8, 12, 1, pa, pb, pout)
|
|
ASM_END_0
|
|
- for (i = end; i < size; ++i) pout[i] = pa[i] + pb[i];
|
|
+ for (i = 0; i < size - end; ++i) pout[i] = pa[i] + pb[i];
|
|
}
|
|
|
|
static void AddVectorEq_MIPS32(const uint32_t* pa, uint32_t* pout, int size) {
|
|
uint32_t temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7;
|
|
- const uint32_t end = ((size) / 4) * 4;
|
|
+ const int end = ((size) / 4) * 4;
|
|
const uint32_t* const LoopEnd = pa + end;
|
|
int i;
|
|
ASM_START
|
|
ADD_TO_OUT(0, 4, 8, 12, 0, pa, pout, pout)
|
|
ASM_END_1
|
|
- for (i = end; i < size; ++i) pout[i] += pa[i];
|
|
+ for (i = 0; i < size - end; ++i) pout[i] += pa[i];
|
|
}
|
|
|
|
#undef ASM_END_1
|
|
diff --git a/src/enc/alpha_enc.c b/src/enc/alpha_enc.c
|
|
index dce9ca95..c786ae59 100644
|
|
--- a/src/enc/alpha_enc.c
|
|
+++ b/src/enc/alpha_enc.c
|
|
@@ -13,6 +13,7 @@
|
|
|
|
#include <assert.h>
|
|
#include <stdlib.h>
|
|
+#include <string.h>
|
|
|
|
#include "src/enc/vp8i_enc.h"
|
|
#include "src/dsp/dsp.h"
|
|
@@ -148,6 +149,7 @@ static int EncodeAlphaInternal(const uint8_t* const data, int width, int height,
|
|
}
|
|
} else {
|
|
VP8LBitWriterWipeOut(&tmp_bw);
|
|
+ memset(&result->bw, 0, sizeof(result->bw));
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -162,7 +164,7 @@ static int EncodeAlphaInternal(const uint8_t* const data, int width, int height,
|
|
header = method | (filter << 2);
|
|
if (reduce_levels) header |= ALPHA_PREPROCESSED_LEVELS << 4;
|
|
|
|
- VP8BitWriterInit(&result->bw, ALPHA_HEADER_LEN + output_size);
|
|
+ if (!VP8BitWriterInit(&result->bw, ALPHA_HEADER_LEN + output_size)) ok = 0;
|
|
ok = ok && VP8BitWriterAppend(&result->bw, &header, ALPHA_HEADER_LEN);
|
|
ok = ok && VP8BitWriterAppend(&result->bw, output, output_size);
|
|
|
|
diff --git a/src/enc/backward_references_cost_enc.c b/src/enc/backward_references_cost_enc.c
|
|
index 516abd73..5eb24d44 100644
|
|
--- a/src/enc/backward_references_cost_enc.c
|
|
+++ b/src/enc/backward_references_cost_enc.c
|
|
@@ -577,7 +577,7 @@ static int BackwardReferencesHashChainDistanceOnly(
|
|
(CostModel*)WebPSafeCalloc(1ULL, cost_model_size);
|
|
VP8LColorCache hashers;
|
|
CostManager* cost_manager =
|
|
- (CostManager*)WebPSafeMalloc(1ULL, sizeof(*cost_manager));
|
|
+ (CostManager*)WebPSafeCalloc(1ULL, sizeof(*cost_manager));
|
|
int offset_prev = -1, len_prev = -1;
|
|
double offset_cost = -1;
|
|
int first_offset_is_constant = -1; // initialized with 'impossible' value
|
|
diff --git a/src/enc/backward_references_enc.c b/src/enc/backward_references_enc.c
|
|
index d445b40f..59809b16 100644
|
|
--- a/src/enc/backward_references_enc.c
|
|
+++ b/src/enc/backward_references_enc.c
|
|
@@ -912,13 +912,14 @@ static VP8LBackwardRefs* GetBackwardReferences(
|
|
quality >= 25) {
|
|
const VP8LHashChain* const hash_chain_tmp =
|
|
(lz77_type_best == kLZ77Standard) ? hash_chain : &hash_chain_box;
|
|
- if (VP8LBackwardReferencesTraceBackwards(width, height, argb, *cache_bits,
|
|
- hash_chain_tmp, best, worst)) {
|
|
- double bit_cost_trace;
|
|
- VP8LHistogramCreate(histo, worst, *cache_bits);
|
|
- bit_cost_trace = VP8LHistogramEstimateBits(histo);
|
|
- if (bit_cost_trace < bit_cost_best) best = worst;
|
|
+ double bit_cost_trace;
|
|
+ if (!VP8LBackwardReferencesTraceBackwards(width, height, argb, *cache_bits,
|
|
+ hash_chain_tmp, best, worst)) {
|
|
+ goto Error;
|
|
}
|
|
+ VP8LHistogramCreate(histo, worst, *cache_bits);
|
|
+ bit_cost_trace = VP8LHistogramEstimateBits(histo);
|
|
+ if (bit_cost_trace < bit_cost_best) best = worst;
|
|
}
|
|
|
|
BackwardReferences2DLocality(width, best);
|
|
diff --git a/src/enc/vp8l_enc.c b/src/enc/vp8l_enc.c
|
|
index 2efd403f..c9dea0bd 100644
|
|
--- a/src/enc/vp8l_enc.c
|
|
+++ b/src/enc/vp8l_enc.c
|
|
@@ -1693,11 +1693,16 @@ WebPEncodingError VP8LEncodeStream(const WebPConfig* const config,
|
|
const WebPWorkerInterface* const worker_interface = WebPGetWorkerInterface();
|
|
int ok_main;
|
|
|
|
+ if (enc_main == NULL || !VP8LBitWriterInit(&bw_side, 0)) {
|
|
+ WebPEncodingSetError(picture, VP8_ENC_ERROR_OUT_OF_MEMORY);
|
|
+ VP8LEncoderDelete(enc_main);
|
|
+ return 0;
|
|
+ }
|
|
+
|
|
// Analyze image (entropy, num_palettes etc)
|
|
- if (enc_main == NULL ||
|
|
- !EncoderAnalyze(enc_main, crunch_configs, &num_crunch_configs_main,
|
|
+ if (!EncoderAnalyze(enc_main, crunch_configs, &num_crunch_configs_main,
|
|
&red_and_blue_always_zero) ||
|
|
- !EncoderInit(enc_main) || !VP8LBitWriterInit(&bw_side, 0)) {
|
|
+ !EncoderInit(enc_main)) {
|
|
err = VP8_ENC_ERROR_OUT_OF_MEMORY;
|
|
goto Error;
|
|
}
|