Procházet zdrojové kódy

fixed hack/spoof
STORAGE+TRADE windows duper (with packets snpooffing)

git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@1239 54d463be-8e91-2dee-dedb-b68131a5f0ec

Lupus před 20 roky
rodič
revize
46fb35ffcb
2 změnil soubory, kde provedl 15 přidání a 1 odebrání
  1. 4 0
      Changelog-SVN.txt
  2. 11 1
      src/map/trade.c

+ 4 - 0
Changelog-SVN.txt

@@ -1,5 +1,9 @@
 Date	Added
 
+03/17
+        * trade.c fixed possibility of STORAGE+TRADE spooffing dupe [Lupus]
+	  Now, on accepting trade your active Storage window closes. (Either Common or Guils Storage)
+		thanx to Sergey for the exploit test and report
 03/16
         * map.c fixed compilation error [Lupus]
         * Updated jA's dummy socket to mod1137 [celest]

+ 11 - 1
src/map/trade.c

@@ -12,6 +12,7 @@
 #include "npc.h"
 #include "battle.h"
 #include "chrif.h"
+#include "storage.h"
 #include "intif.h"
 #include "atcommand.h"
 
@@ -57,7 +58,7 @@ void trade_traderequest(struct map_session_data *sd, int target_id) {
  */
 void trade_tradeack(struct map_session_data *sd, int type) {
 	struct map_session_data *target_sd;
-
+	struct storage *stor;
 	nullpo_retv(sd);
 
 	if ((target_sd = map_id2sd(sd->trade_partner)) != NULL) {
@@ -73,6 +74,15 @@ void trade_tradeack(struct map_session_data *sd, int type) {
 			npc_event_dequeue(sd);
 		if (target_sd->npc_id != 0)
 			npc_event_dequeue(target_sd);
+
+		//close STORAGE window if it's open. It protects from spooffing packets [Lupus]
+		nullpo_retv(stor=account2storage2(sd->status.account_id));
+		if(stor->storage_status == 1) {
+			if (sd->state.storage_flag) //is it Guild Storage or Common
+				storage_guild_storageclose(sd);
+			else
+				storage_storageclose(sd);
+		}//END OF STORAGE CLOSE
 	}
 }