Skip to content

Commit 759bfc0

Browse files
committed
fix(Strava): Fix Overwrite media upload parameters patch
1 parent 8724759 commit 759bfc0

File tree

2 files changed

+44
-3
lines changed

2 files changed

+44
-3
lines changed

patches/src/main/kotlin/app/revanced/patches/strava/media/upload/OverwriteMediaUploadParametersPatch.kt

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package app.revanced.patches.strava.media.upload
22

3+
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
34
import app.revanced.patcher.patch.bytecodePatch
45
import app.revanced.patcher.patch.intOption
56
import app.revanced.patcher.patch.longOption
7+
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
68
import app.revanced.util.returnEarly
9+
import com.android.tools.smali.dexlib2.AccessFlags
10+
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
11+
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
712

813
@Suppress("unused")
914
val overwriteMediaUploadParametersPatch = bytecodePatch(
@@ -38,7 +43,41 @@ val overwriteMediaUploadParametersPatch = bytecodePatch(
3843
}
3944

4045
maxDuration?.let { maxDuration ->
41-
getMaxDurationFingerprint.match(mediaUploadParametersClass).method.returnEarly(maxDuration)
46+
val getMaxDurationMethod = getMaxDurationFingerprint.match(mediaUploadParametersClass).method
47+
48+
if (getMaxDurationMethod.returnType == "J") {
49+
getMaxDurationMethod.returnEarly(maxDuration)
50+
return@let
51+
}
52+
53+
val helperMethod = ImmutableMethod(
54+
getMaxDurationMethod.definingClass,
55+
"${getMaxDurationMethod.name}\$helper",
56+
listOf(),
57+
getMaxDurationMethod.returnType,
58+
AccessFlags.PRIVATE.value or AccessFlags.STATIC.value,
59+
setOf(),
60+
setOf(),
61+
MutableMethodImplementation(2)
62+
).toMutable().apply {
63+
addInstructions(
64+
"""
65+
const-wide v0, ${maxDuration}L
66+
invoke-static { v0, v1 }, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
67+
move-result-object v0
68+
return-object v0
69+
"""
70+
)
71+
}
72+
73+
getMaxDurationMethod.addInstructions(
74+
0,
75+
"""
76+
invoke-static { }, $helperMethod
77+
move-result-object v0
78+
return-object v0
79+
"""
80+
)
4281
}
4382

4483
maxSize?.let {

patches/src/main/kotlin/app/revanced/util/BytecodeUtils.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1182,9 +1182,10 @@ private fun MutableMethod.overrideReturnValue(value: EncodedValue?, returnLate:
11821182
return-wide v0
11831183
"""
11841184
} else {
1185+
check(implementation!!.registerCount >= 2) { "`long` literal doesn't fit into method $this (${implementation!!.registerCount} < 2)." }
11851186
"""
11861187
const-wide v0, $encodedValue
1187-
invoke-static { v0 }, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
1188+
invoke-static { v0, v1 }, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;
11881189
move-result-object v0
11891190
return-object v0
11901191
"""
@@ -1198,9 +1199,10 @@ private fun MutableMethod.overrideReturnValue(value: EncodedValue?, returnLate:
11981199
return-wide v0
11991200
"""
12001201
} else {
1202+
check(implementation!!.registerCount >= 2) { "`double` literal doesn't fit into method $this (${implementation!!.registerCount} < 2)." }
12011203
"""
12021204
const-wide v0, $encodedValue
1203-
invoke-static { v0 }, Ljava/lang/Double;->valueOf(D)Ljava/lang/Double;
1205+
invoke-static { v0, v1 }, Ljava/lang/Double;->valueOf(D)Ljava/lang/Double;
12041206
move-result-object v0
12051207
return-object v0
12061208
"""

0 commit comments

Comments
 (0)