mirror of
https://github.com/revanced/revanced-integrations.git
synced 2024-11-14 07:59:27 +01:00
fix(YouTube - Litho Filter): Ignore null buffers (#565)
This commit is contained in:
parent
48b968f3be
commit
f72faa761c
@ -503,13 +503,19 @@ public final class LithoFilterPatch {
|
|||||||
* Injection point. Called off the main thread.
|
* Injection point. Called off the main thread.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public static void setProtoBuffer(@NonNull ByteBuffer protobufBuffer) {
|
public static void setProtoBuffer(@Nullable ByteBuffer protobufBuffer) {
|
||||||
// Set the buffer to a thread local. The buffer will remain in memory, even after the call to #filter completes.
|
// Set the buffer to a thread local. The buffer will remain in memory, even after the call to #filter completes.
|
||||||
// This is intentional, as it appears the buffer can be set once and then filtered multiple times.
|
// This is intentional, as it appears the buffer can be set once and then filtered multiple times.
|
||||||
// The buffer will be cleared from memory after a new buffer is set by the same thread,
|
// The buffer will be cleared from memory after a new buffer is set by the same thread,
|
||||||
// or when the calling thread eventually dies.
|
// or when the calling thread eventually dies.
|
||||||
|
if (protobufBuffer == null) {
|
||||||
|
// It appears the buffer can be cleared out just before the call to #filter()
|
||||||
|
// Ignore this null value and retain the last buffer that was set.
|
||||||
|
Logger.printDebug(() -> "Ignoring null protobuffer");
|
||||||
|
} else {
|
||||||
bufferThreadLocal.set(protobufBuffer);
|
bufferThreadLocal.set(protobufBuffer);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Injection point. Called off the main thread, and commonly called by multiple threads at the same time.
|
* Injection point. Called off the main thread, and commonly called by multiple threads at the same time.
|
||||||
@ -523,15 +529,13 @@ public final class LithoFilterPatch {
|
|||||||
|
|
||||||
ByteBuffer protobufBuffer = bufferThreadLocal.get();
|
ByteBuffer protobufBuffer = bufferThreadLocal.get();
|
||||||
final byte[] bufferArray;
|
final byte[] bufferArray;
|
||||||
// The buffer can be null or empty when using YT 19.x.
|
// Potentially the buffer may have been null or never set up until now.
|
||||||
// This is likely caused by different threads setting the buffer and calling this method.
|
// Use an empty buffer so the litho id/path filters still work correctly.
|
||||||
// 100% fixing this would require passing the buffer into this method (which may not be so simple).
|
|
||||||
// For now, still filter with an empty buffer so the non proto buffer filters work correctly.
|
|
||||||
if (protobufBuffer == null) {
|
if (protobufBuffer == null) {
|
||||||
Logger.printDebug(() -> "Proto buffer is null");
|
Logger.printDebug(() -> "Proto buffer is null, using an empty buffer array");
|
||||||
bufferArray = EMPTY_BYTE_ARRAY;
|
bufferArray = EMPTY_BYTE_ARRAY;
|
||||||
} else if (!protobufBuffer.hasArray()) {
|
} else if (!protobufBuffer.hasArray()) {
|
||||||
Logger.printDebug(() -> "Proto buffer does not have an array");
|
Logger.printDebug(() -> "Proto buffer does not have an array, using an empty buffer array");
|
||||||
bufferArray = EMPTY_BYTE_ARRAY;
|
bufferArray = EMPTY_BYTE_ARRAY;
|
||||||
} else {
|
} else {
|
||||||
bufferArray = protobufBuffer.array();
|
bufferArray = protobufBuffer.array();
|
||||||
|
Loading…
Reference in New Issue
Block a user