anggrayudi / anggrayudi/SimpleStorage
CreateMode.REPLACE not respected on malformed input
- 主要言語
- Kotlin
- スター
- 867
- フォーク
- 104
- 平均マージ
- 22日 6時間
- マージ済み PR(30日)
- 1
説明
CreateMode.REPLACE not respected on malformed input
When testing MediaStoreCompat.createDownload I found a bug caused by the OS renaming the name when it has invalid input.
Assume you have some regular function to create a file.
```kotlin
fun testDuplicate(context : Context) {
val file = MediaStoreCompat.createDownload(
context = context,
file = FileDescription(
name = "hello",
"test",
mimeType = "text/plain"
),
mode = CreateMode.REPLACE
)?.toStorageFile(context)
file?.openOutputStream()?.writer()?.use { writer ->
writer.write("Hello World!")
writer.flush()
}
}
```
This just creates a file named "hello.txt" with the content "Hello World!". And if called twice it replaces the file.
```
testDuplicate(context)
testDuplicate(context)
```
-> only 1 file
This is expected behavior, and everything is fine.
However if I now choose the name = "hello?" it creates the file fine, but the OS renames it to hello_, therefore the subsequent call to testDuplicate does not replace "hello_" because it is searching for "hello?" and therefore creates a new file called "hello_(1)".
The expected behavior is to either fail or replace the file named "hello_". However the current implementation creates another file even with the mode CreateMode.REPLACE.
This issue is fixed if the createDownload function also sanitized the file name like the os with e.g. `.replace("?","_")`, however I get that this is a wonky solution. I think it is sane to either document this as an issue, sanitize the filename, or even detect the creation of the wrong file name.
コントリビューションガイド
評価
この issue はまだ評価されていません。