Fix incorrect Uri resolving when ".." is used instead of "../"

Happens on sites like gemini://gemini.ctrl-c.club/~stack/gemlog/index.gmi
This commit is contained in:
qespr 2023-07-07 05:22:21 +02:00
parent 326c20f5ff
commit dbd00f9866
1 changed files with 9 additions and 4 deletions

View File

@ -3,6 +3,7 @@ package corewala.buran
import corewala.toURI import corewala.toURI
const val GEMSCHEME = "gemini://" const val GEMSCHEME = "gemini://"
const val PART_TRAVERSE = ".."
const val TRAVERSE = "../" const val TRAVERSE = "../"
const val SOLIDUS = "/" const val SOLIDUS = "/"
const val DIREND = "/" const val DIREND = "/"
@ -41,10 +42,14 @@ class OppenURI constructor(private var ouri: String) {
when { when {
reference.startsWith(GEMSCHEME) -> set(reference) reference.startsWith(GEMSCHEME) -> set(reference)
reference.startsWith(SOLIDUS) -> resolvedUri = "$scheme://$host$reference" reference.startsWith(SOLIDUS) -> resolvedUri = "$scheme://$host$reference"
reference.startsWith(TRAVERSE) -> { reference.startsWith(PART_TRAVERSE) -> {
if(!ouri.endsWith(DIREND)) resolvedUri = ouri.removeFile() val fixedReference = if (reference == PART_TRAVERSE) "$reference/" else reference
val traversalCount = reference.split(TRAVERSE).size - 1 if (!ouri.endsWith(DIREND)) {
resolvedUri = traverse(traversalCount) + reference.replace(TRAVERSE, "") resolvedUri = ouri.removeFile()
} else {
val traversalCount = fixedReference.split(TRAVERSE).size - 1
resolvedUri = traverse(traversalCount) + fixedReference.replace(TRAVERSE, "")
}
} }
reference.startsWith(QUERY) -> { reference.startsWith(QUERY) -> {
resolvedUri = if(reference.contains(QUERY)){ resolvedUri = if(reference.contains(QUERY)){