Skip to content

Commit 5cfcb31

Browse files
donaldchaifalhassen
authored andcommitted
Avoid NaN when Constraints are zero (but non-fixed size).
If e.g. constraints.width=0 the logic ends up computing: ``` intrinsicWidth = constraints.width (i.e. 0) constrainedWidth = 0 srcSize.width = 0 scaleFactor.width = computeFillWidth(0,0) --> NaN ``` #5356 #5256
1 parent 0d8daa1 commit 5cfcb31

File tree

3 files changed

+47
-5
lines changed

3 files changed

+47
-5
lines changed

integration/compose/build.gradle

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ android {
3636
kotlinOptions {
3737
jvmTarget = '1.8'
3838
}
39+
40+
testOptions {
41+
unitTests {
42+
includeAndroidResources = true
43+
}
44+
}
3945
}
4046

4147
// Enable strict mode, but exclude tests.
@@ -55,6 +61,12 @@ dependencies {
5561
implementation libs.compose.ui
5662
implementation libs.androidx.core.ktx
5763
debugImplementation libs.compose.ui.testmanifest
64+
testImplementation libs.compose.ui.testmanifest
65+
testImplementation libs.compose.ui.testjunit4
66+
testImplementation libs.junit
67+
testImplementation libs.robolectric
68+
testImplementation libs.androidx.junit
69+
testImplementation libs.androidx.test.runner
5870
androidTestImplementation libs.junit
5971
androidTestImplementation libs.compose.ui.testjunit4
6072
androidTestImplementation libs.androidx.espresso

integration/compose/src/main/java/com/bumptech/glide/integration/compose/GlideModifier.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -540,11 +540,8 @@ internal class GlideNode : DrawModifierNode, LayoutModifierNode, SemanticsModifi
540540
private fun Constraints.hasFixedSize() = hasFixedWidth && hasFixedHeight
541541

542542
private fun modifyConstraints(constraints: Constraints): Constraints {
543-
if (constraints.hasFixedSize()) {
544-
return constraints.copy(
545-
minWidth = constraints.maxWidth,
546-
minHeight = constraints.maxHeight
547-
)
543+
if (constraints.hasFixedSize() || constraints.isZero) {
544+
return constraints
548545
}
549546

550547
val intrinsicSize = primary?.painter?.intrinsicSize ?: return constraints
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.bumptech.glide.integration.compose
2+
3+
import androidx.compose.foundation.layout.height
4+
import androidx.compose.foundation.layout.heightIn
5+
import androidx.compose.foundation.layout.width
6+
import androidx.compose.ui.Modifier
7+
import androidx.compose.ui.layout.ContentScale
8+
import androidx.compose.ui.test.junit4.createComposeRule
9+
import androidx.compose.ui.unit.dp
10+
import androidx.test.ext.junit.runners.AndroidJUnit4
11+
import org.junit.Rule
12+
import org.junit.Test
13+
import org.junit.runner.RunWith
14+
15+
@OptIn(ExperimentalGlideComposeApi::class)
16+
@RunWith(AndroidJUnit4::class)
17+
class GlideImageTest {
18+
19+
@get:Rule(order = 1) val composeRule = createComposeRule()
20+
21+
@Test
22+
fun glideImage_zeroWidthFillBounds_doesNotCrash() {
23+
composeRule.setContent {
24+
GlideImage(
25+
model = null,
26+
contentDescription = null,
27+
modifier = Modifier.width(0.dp).heightIn(0.dp, 100.dp),
28+
contentScale = ContentScale.FillBounds,
29+
loading = placeholder(android.R.drawable.star_on),
30+
)
31+
}
32+
}
33+
}

0 commit comments

Comments
 (0)