Skip to content
This repository was archived by the owner on Nov 14, 2018. It is now read-only.

Commit fd5e104

Browse files
committed
ClipData: verify that list is not empty in clipDataOf (#497)
ClipData.Item cannot be empty when creating a ClipData instance.
1 parent 7158a52 commit fd5e104

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

src/androidTest/java/androidx/core/content/ClipDataTest.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,10 @@ class ClipDataTest {
152152
}
153153

154154
@Test fun clipDataOfInvalid() {
155+
assertThrows<IllegalArgumentException> {
156+
clipDataOf(listOf<String>(), "empty")
157+
}.hasMessageThat().isEqualTo("Illegal argument, list cannot be empty.")
158+
155159
assertThrows<IllegalArgumentException> {
156160
clipDataOf(listOf(1, 2, 3), "ints")
157161
}.hasMessageThat().isEqualTo("Illegal type: java.lang.Integer")

src/main/java/androidx/core/content/ClipData.kt

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,10 @@ inline fun <reified T> clipDataOf(
9494
l: List<T>,
9595
label: String = "",
9696
cr: ContentResolver? = null
97-
): ClipData = when {
98-
Uri::class.java.isAssignableFrom(T::class.java) ->
97+
): ClipData = if (l.isEmpty()) {
98+
throw IllegalArgumentException("Illegal argument, list cannot be empty.")
99+
} else when {
100+
Uri::class.java.isAssignableFrom(T::class.java) ->
99101
if (cr == null) {
100102
ClipData.newRawUri(label, l[0] as Uri).apply {
101103
l.forEachIndexed { index, item ->
@@ -109,19 +111,17 @@ inline fun <reified T> clipDataOf(
109111
}
110112
}
111113
}
112-
CharSequence::class.java.isAssignableFrom(T::class.java) ->
114+
CharSequence::class.java.isAssignableFrom(T::class.java) ->
113115
ClipData.newPlainText(label, l[0] as CharSequence).apply {
114116
l.forEachIndexed { index, item ->
115117
if (index > 0) addItem(ClipData.Item(item as CharSequence))
116118
}
117119
}
118-
Intent::class.java.isAssignableFrom(T::class.java) ->
120+
Intent::class.java.isAssignableFrom(T::class.java) ->
119121
ClipData.newIntent(label, l[0] as Intent).apply {
120122
l.forEachIndexed { index, item ->
121123
if (index > 0) addItem(ClipData.Item(item as Intent))
122124
}
123125
}
124-
else ->
125-
throw IllegalArgumentException("Illegal type for $label and " +
126-
"items: ${T::class.java.canonicalName}")
127-
}
126+
else -> throw IllegalArgumentException("Illegal type: ${T::class.java.canonicalName}")
127+
}

0 commit comments

Comments
 (0)