From bca5b65b1ad0b9f47ac0ca6f97d100807a7e36f2 Mon Sep 17 00:00:00 2001 From: zzz <zzz@i2pmail.org> Date: Fri, 20 Sep 2024 09:47:58 -0400 Subject: [PATCH] i2psnark: Prevent changing infohash in metainfo edit CLI Tweaks to previous MR: _ Use new constructor for edit CLI - Javadocs for new constructor - Add new_url_list param to new constructor - Set creation date if unset --- .../java/src/org/klomp/snark/MetaInfo.java | 23 +++++++++++++------ .../org/klomp/snark/web/I2PSnarkServlet.java | 2 +- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java b/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java index 2eda795875..21647cfb41 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java +++ b/apps/i2psnark/java/src/org/klomp/snark/MetaInfo.java @@ -145,7 +145,19 @@ public class MetaInfo this.info_hash = calculateInfoHash(); } - public MetaInfo(MetaInfo old, String new_announce, List<List<String>> new_announce_list, String new_comment, String new_created_by) + /** + * Will not change infohash. + * Retains creation date of old MetaInfo if nonzero. + * + * @parm new_announce may be null + * @parm new_announce_list may be null + * @parm new_comment may be null + * @parm new_created_by may be null + * @parm new_url_list may be null + * @since 0.9.64 + */ + public MetaInfo(MetaInfo old, String new_announce, List<List<String>> new_announce_list, String new_comment, + String new_created_by, List<String> new_url_list) { this.announce = new_announce; this.info_hash = old.info_hash; @@ -162,8 +174,8 @@ public class MetaInfo this.announce_list = new_announce_list; this.comment = new_comment; this.created_by = new_created_by; - this.creation_date = old.creation_date; - this.url_list = old.url_list; + this.creation_date = old.creation_date > 0 ? old.creation_date : I2PAppContext.getGlobalContext().clock().now(); + this.url_list = new_url_list; this.infoMap = old.infoMap; this.infoBytesLength = old.infoBytesLength; } @@ -934,10 +946,7 @@ public class MetaInfo String an = announce != null ? announce : meta.getAnnounce(); String cm = comment != null ? comment : meta.getComment(); List<String> urls = url_list != null ? url_list : meta.getWebSeedURLs(); - // changes/adds creation date - MetaInfo meta2 = new MetaInfo(an, meta.getName(), null, meta.getFiles(), meta.getLengths(), - meta.getPieceLength(0), meta.getPieceHashes(), meta.getTotalLength(), meta.getPrivateTrackerStatus(), - meta.getAnnounceList(), cb, urls, cm); + MetaInfo meta2 = new MetaInfo(meta, an, meta.getAnnounceList(), cm, cb, urls); java.io.File from = new java.io.File(args[i]); java.io.File to = new java.io.File(args[i] + ".bak"); if (net.i2p.util.FileUtil.copy(from, to, true, false)) { diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index f8fc6e253c..3492d9d42e 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -4886,7 +4886,7 @@ public class I2PSnarkServlet extends BasicServlet { newComment = null; if (newCreatedBy.equals("")) newCreatedBy = null; - MetaInfo newMeta = new MetaInfo(meta, thePrimary, newAnnList, newComment, newCreatedBy); + MetaInfo newMeta = new MetaInfo(meta, thePrimary, newAnnList, newComment, newCreatedBy, meta.getWebSeedURLs()); File f = new File(_manager.util().getTempDir(), "edit-" + _manager.util().getContext().random().nextLong() + ".torrent"); OutputStream out = null; try { -- GitLab