From ac531cd3e80ef71207d0dc1fb7acba5870003977 Mon Sep 17 00:00:00 2001 From: rebelonion <87634197+rebelonion@users.noreply.github.com> Date: Thu, 16 May 2024 10:05:47 -0500 Subject: [PATCH] fix: string sanitizer --- .../connections/anilist/AnilistMutations.kt | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistMutations.kt b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistMutations.kt index 96d50dcf..a8bd8904 100644 --- a/app/src/main/java/ani/dantotsu/connections/anilist/AnilistMutations.kt +++ b/app/src/main/java/ani/dantotsu/connections/anilist/AnilistMutations.kt @@ -81,7 +81,7 @@ class AnilistMutations { } suspend fun postActivity(text:String): String { - val encodedText = Gson().toJson(text) + val encodedText = text.stringSanitizer() val query = "mutation{SaveTextActivity(text:$encodedText){siteUrl}}" val result = executeQuery(query) val errors = result?.get("errors") @@ -90,8 +90,8 @@ class AnilistMutations { } suspend fun postReview(summary: String, body: String, mediaId: Int, score: Int): String { - val encodedSummary = Gson().toJson(summary) - val encodedBody = Gson().toJson(body) + val encodedSummary = summary.stringSanitizer() + val encodedBody = body.stringSanitizer() val query = "mutation{SaveReview(mediaId:$mediaId,summary:$encodedSummary,body:$encodedBody,score:$score){siteUrl}}" val result = executeQuery(query) val errors = result?.get("errors") @@ -100,11 +100,27 @@ class AnilistMutations { } suspend fun postReply(activityId: Int, text: String): String { - val encodedText = Gson().toJson(text) + val encodedText = text.stringSanitizer() val query = "mutation{SaveActivityReply(activityId:$activityId,text:$encodedText){id}}" val result = executeQuery(query) val errors = result?.get("errors") return errors?.toString() ?: (currContext()?.getString(ani.dantotsu.R.string.success) ?: "Success") } + + private fun String.stringSanitizer(): String { + val sb = StringBuilder() + var i = 0 + while (i < this.length) { + val codePoint = this.codePointAt(i) + if (codePoint > 0xFFFF) { + sb.append("&#").append(codePoint).append(";") + i += 2 + } else { + sb.append(this[i]) + i++ + } + } + return Gson().toJson(sb.toString()) + } } \ No newline at end of file