From e9c450bf17e1ec6cc9f0964c53fd8fdb334c0e44 Mon Sep 17 00:00:00 2001 From: Carlen White Date: Tue, 21 May 2019 22:04:14 -0400 Subject: [PATCH 1/3] Flavor text with special characters don't get partially unescaped Copying the text that was escaped would occasionally trim an escaping character. Now it's decoded, copied, then encoded to prevent it. --- code/modules/mob/say_vr.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index 39a0bba701..3bd23c1b80 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -23,11 +23,11 @@ /mob/proc/print_flavor_text() if(flavor_text && flavor_text != "") - var/msg = replacetext(flavor_text, "\n", " ") + var/msg = html_decode(replacetext(flavor_text, "\n", " ")) if(lentext(msg) <= 40) - return "[msg]" + return "[html_encode(msg)]" else - return "[copytext(msg, 1, 37)]... More..." + return "[html_encode(copytext(msg, 1, 37))]... More..." /mob/proc/get_top_level_mob() if(istype(src.loc,/mob)&&src.loc!=src) From bb2a8bdd5970c3989025242b2903d432c1f96cfe Mon Sep 17 00:00:00 2001 From: Carlen White Date: Wed, 22 May 2019 00:27:19 -0400 Subject: [PATCH 2/3] Fixes flavor text from being removed when canceled. This was because canceling really just sent a empty string and not null which caused it to set the flavor text to an empty string. --- code/__HELPERS/text.dm | 2 ++ code/modules/client/preferences.dm | 2 +- code/modules/mob/say_vr.dm | 6 +++--- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 7d6c017b77..7d8eb108f3 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -94,6 +94,8 @@ // Used to get a properly sanitized multiline input, of max_length /proc/stripped_multiline_input(mob/user, message = "", title = "", default = "", max_length=MAX_MESSAGE_LEN, no_trim=FALSE) var/name = input(user, message, title, default) as message|null + if(isnull(name)) // Return null if canceled. + return null if(no_trim) return copytext(html_encode(name), 1, max_length) else diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 8e4891fb70..d80f56c8c8 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1458,7 +1458,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN) if("flavor_text") - var/msg = stripped_multiline_input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(features["flavor_text"]), MAX_MESSAGE_LEN*2, TRUE) as null|message + var/msg = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", html_decode(features["flavor_text"]), MAX_MESSAGE_LEN*2, TRUE) if(!isnull(msg)) msg = copytext(msg, 1, MAX_MESSAGE_LEN*2) features["flavor_text"] = msg diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index 3bd23c1b80..158aabc80a 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -8,9 +8,9 @@ set src in usr if(usr != src) usr << "No." - var/msg = input(usr,"Set the flavor text in your 'examine' verb. Can also be used for OOC notes about your character.","Flavor Text",html_decode(flavor_text)) as message|null - - if(msg != null) + var/msg = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", html_decode(flavor_text), MAX_MESSAGE_LEN*2, TRUE) + + if(!isnull(msg)) msg = copytext(msg, 1, MAX_MESSAGE_LEN) msg = html_encode(msg) From 1bddf2d5ae677a83845871be0c556bf6340a366f Mon Sep 17 00:00:00 2001 From: Carlen White Date: Wed, 22 May 2019 09:32:25 -0400 Subject: [PATCH 3/3] Added comment For whoever comes across this code and wonders what am I doing. --- code/modules/mob/say_vr.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index 158aabc80a..6cc0ca185f 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -23,6 +23,7 @@ /mob/proc/print_flavor_text() if(flavor_text && flavor_text != "") + // We are decoding and then encoding to not only get correct amount of characters, but also to prevent partial escaping characters being shown. var/msg = html_decode(replacetext(flavor_text, "\n", " ")) if(lentext(msg) <= 40) return "[html_encode(msg)]"