anggrayudi / anggrayudi/SimpleStorage

CreateMode.REPLACE not respected on malformed input

Aperta
#159 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Kotlin
Stelle
867
Fork
104
Merge medio
22g 6h
PR unite (30g)
1

Descrizione

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.

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.