summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog.txt1
-rw-r--r--src/map/intif.c7
-rw-r--r--src/map/storage.c14
3 files changed, 16 insertions, 6 deletions
diff --git a/Changelog.txt b/Changelog.txt
index 0b77a3a4b..67d535683 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -1,5 +1,6 @@
Date Added
12/29
+ * Double storage/lag exploit fixed (SVN 867) [MouseJstr]
* Another -1 alive_timer fix (SVN 866) [MouseJstr]
* Added @dmstart and @dmtick for debugging malloc tests [MouseJstr]
* Fix some more compile errors on different platforms [MouseJstr]
diff --git a/src/map/intif.c b/src/map/intif.c
index 379589556..8e0267781 100644
--- a/src/map/intif.c
+++ b/src/map/intif.c
@@ -734,6 +734,13 @@ int intif_parse_LoadStorage(int fd) {
struct map_session_data *sd;
stor = account2storage( RFIFOL(fd,4));
+
+ if (stor->storage_status == 1) { // Already open.. lets ignore this update
+ if (battle_config.error_log)
+ printf("intif_parse_LoadStorage: storage received for a client already open\n");
+ return 0;
+ }
+
if (RFIFOW(fd,2)-8 != sizeof(struct storage)) {
if (battle_config.error_log)
printf("intif_parse_LoadStorage: data size error %d %d\n", RFIFOW(fd,2)-8, sizeof(struct storage));
diff --git a/src/map/storage.c b/src/map/storage.c
index 501a16709..3944f1ac1 100644
--- a/src/map/storage.c
+++ b/src/map/storage.c
@@ -110,12 +110,14 @@ int storage_storageopen(struct map_session_data *sd)
nullpo_retr(0, sd);
if((stor = numdb_search(storage_db,sd->status.account_id)) != NULL) {
- stor->storage_status = 1;
- sd->state.storage_flag = 0;
- clif_storageitemlist(sd,stor);
- clif_storageequiplist(sd,stor);
- clif_updatestorageamount(sd,stor);
- return 0;
+ if (stor->storage_status == 0) {
+ stor->storage_status = 1;
+ sd->state.storage_flag = 0;
+ clif_storageitemlist(sd,stor);
+ clif_storageequiplist(sd,stor);
+ clif_updatestorageamount(sd,stor);
+ return 0;
+ }
} else
intif_request_storage(sd->status.account_id);