Fixes unsafe memory access using cross server clipboards (#651)

Co-authored-by: wea_ondara <wea_ondara@alpenblock.net>
This commit is contained in:
Aurora 2020-09-24 19:10:43 +02:00 committed by GitHub
parent 5e67c1b658
commit 3f1e8fa4d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -25,6 +25,7 @@ import com.boydti.fawe.config.Caption;
import com.boydti.fawe.config.Settings;
import com.boydti.fawe.object.FaweLimit;
import com.boydti.fawe.object.RunnableVal;
import com.boydti.fawe.object.clipboard.DiskOptimizedClipboard;
import com.boydti.fawe.object.clipboard.MultiClipboardHolder;
import com.boydti.fawe.object.clipboard.ReadOnlyClipboard;
import com.boydti.fawe.object.clipboard.URIClipboardHolder;
@ -148,6 +149,7 @@ public class ClipboardCommands {
copy.setSourceMask(mask);
}
Operations.completeLegacy(copy);
saveDiskClipboard(clipboard);
session.setClipboard(new ClipboardHolder(clipboard));
copy.getStatusMessages().forEach(actor::print);
@ -259,6 +261,7 @@ public class ClipboardCommands {
copy.setSourceMask(mask);
}
Operations.completeLegacy(copy);
saveDiskClipboard(clipboard);
session.setClipboard(new ClipboardHolder(clipboard));
if (!actor.hasPermission("fawe.tips")) {
@ -539,4 +542,16 @@ public class ClipboardCommands {
session.setClipboard(null);
actor.printInfo(TranslatableComponent.of("worldedit.clearclipboard.cleared"));
}
private void saveDiskClipboard(Clipboard clipboard) {
DiskOptimizedClipboard c;
if (clipboard instanceof DiskOptimizedClipboard)
c = (DiskOptimizedClipboard) clipboard;
else if (clipboard instanceof BlockArrayClipboard
&& ((BlockArrayClipboard) clipboard).getParent() instanceof DiskOptimizedClipboard)
c = (DiskOptimizedClipboard) ((BlockArrayClipboard) clipboard).getParent();
else
return;
c.flush();
}
}