diff --git a/htroot/yacy/transfer.java b/htroot/yacy/transfer.java index e1a357a42..ca16dfeb4 100644 --- a/htroot/yacy/transfer.java +++ b/htroot/yacy/transfer.java @@ -128,14 +128,20 @@ public final class transfer { path.mkdirs(); File file = new File(path, filename); try { - serverFileUtils.write(filebytes, file); - String md5t = serverCodings.encodeMD5Hex(file); - if (md5t.equals(md5)) { - prop.put("response", "ok"); - sb.getLog().logFine("RankingTransmission: received from peer " + otherpeerName + " CR file " + filename); - } else { - prop.put("response", "transfer failure"); - sb.getLog().logFine("RankingTransmission: transfer failunre from peer " + otherpeerName + " for CR file " + filename); + if (file.getCanonicalPath().toString().startsWith(path.getCanonicalPath().toString())){ + serverFileUtils.write(filebytes, file); + String md5t = serverCodings.encodeMD5Hex(file); + if (md5t.equals(md5)) { + prop.put("response", "ok"); + sb.getLog().logFine("RankingTransmission: received from peer " + otherpeerName + " CR file " + filename); + } else { + prop.put("response", "transfer failure"); + sb.getLog().logFine("RankingTransmission: transfer failunre from peer " + otherpeerName + " for CR file " + filename); + } + }else{ + //exploit? + prop.put("response", "io error"); + return prop; } } catch (IOException e) { prop.put("response", "io error");