From 404a89aed63c439267efce99a54e35816bbc542b Mon Sep 17 00:00:00 2001 From: Walter0o Date: Thu, 31 Jul 2014 04:01:14 +0200 Subject: [PATCH] clipboard exploit fixes --- code/modules/paperwork/clipboard.dm | 52 ++++++++++++++++++----------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm index ea49067e13..4f73f0a6a0 100644 --- a/code/modules/paperwork/clipboard.dm +++ b/code/modules/paperwork/clipboard.dm @@ -44,6 +44,7 @@ return /obj/item/weapon/clipboard/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/photo)) user.drop_item() W.loc = src @@ -51,9 +52,11 @@ toppaper = W user << "You clip the [W] onto \the [src]." update_icon() - else if(toppaper) - toppaper.attackby(usr.get_active_hand(), usr) + + else if(istype(toppaper) && istype(W, /obj/item/weapon/pen)) + toppaper.attackby(W, usr) update_icon() + return /obj/item/weapon/clipboard/attack_self(mob/user as mob) @@ -85,7 +88,7 @@ if((usr.stat || usr.restrained())) return - if(usr.contents.Find(src)) + if(src.loc == usr) if(href_list["pen"]) if(haspen) @@ -93,24 +96,31 @@ usr.put_in_hands(haspen) haspen = null - if(href_list["addpen"]) + else if(href_list["addpen"]) if(!haspen) - if(istype(usr.get_active_hand(), /obj/item/weapon/pen)) - var/obj/item/weapon/pen/W = usr.get_active_hand() + var/obj/item/weapon/pen/W = usr.get_active_hand() + if(istype(W, /obj/item/weapon/pen)) usr.drop_item() W.loc = src haspen = W usr << "You slot the pen into \the [src]." - if(href_list["write"]) - var/obj/item/P = locate(href_list["write"]) - if(P) - if(usr.get_active_hand()) - P.attackby(usr.get_active_hand(), usr) + else if(href_list["write"]) + var/obj/item/weapon/P = locate(href_list["write"]) + + if(P && (P.loc == src) && (istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/photo)) ) + + var/obj/item/I = usr.get_active_hand() + + if(istype(I, /obj/item/weapon/pen)) + + P.attackby(I, usr) - if(href_list["remove"]) + else if(href_list["remove"]) var/obj/item/P = locate(href_list["remove"]) - if(P) + + if(P && (P.loc == src) && (istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/photo)) ) + P.loc = usr.loc usr.put_in_hands(P) if(P == toppaper) @@ -121,9 +131,11 @@ else toppaper = null - if(href_list["read"]) + else if(href_list["read"]) var/obj/item/weapon/paper/P = locate(href_list["read"]) - if(P) + + if(P && (P.loc == src) && (istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/photo)) ) + if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon))) usr << browse("[P.name][stars(P.info)][P.stamps]", "window=[P.name]") onclose(usr, "[P.name]") @@ -131,18 +143,18 @@ usr << browse("[P.name][P.info][P.stamps]", "window=[P.name]") onclose(usr, "[P.name]") - if(href_list["look"]) + else if(href_list["look"]) var/obj/item/weapon/photo/P = locate(href_list["look"]) - if(P) + if(P && (P.loc == src) && (istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/photo)) ) P.show(usr) - if(href_list["top"]) + else if(href_list["top"]) var/obj/item/P = locate(href_list["top"]) - if(P) + if(P && (P.loc == src) && (istype(P, /obj/item/weapon/paper) || istype(P, /obj/item/weapon/photo)) ) toppaper = P usr << "You move [P.name] to the top." //Update everything attack_self(usr) update_icon() - return \ No newline at end of file + return