protection against strange answers from remote peers during search

pull/1/head
Michael Peter Christen 13 years ago
parent 9c51db4243
commit c639248c23

@ -666,6 +666,8 @@ public final class FileUtils
}
public static Map<String, String> table(final byte[] a) {
if (a == null) return new ConcurrentHashMap<String, String>();
//System.out.println("***TABLE: a.size = " + a.length);
return table(strings(a));
}
@ -674,9 +676,7 @@ public final class FileUtils
return new ArrayList<String>().iterator();
}
try {
return new StringsIterator(new BufferedReader(new InputStreamReader(
new ByteArrayInputStream(a),
"UTF-8")));
return new StringsIterator(new BufferedReader(new InputStreamReader(new ByteArrayInputStream(a), "UTF-8")));
} catch ( final UnsupportedEncodingException e ) {
return null;
}
@ -887,7 +887,7 @@ public final class FileUtils
public static class StringsIterator implements Iterator<String>
{
private final BufferedReader reader;
private BufferedReader reader;
private String nextLine;
public StringsIterator(final BufferedReader reader) {
@ -904,7 +904,7 @@ public final class FileUtils
@Override
public String next() {
final String line = this.nextLine;
try {
if (this.reader != null) try {
while ( (this.nextLine = this.reader.readLine()) != null ) {
this.nextLine = this.nextLine.trim();
if ( this.nextLine.length() > 0 ) {
@ -917,6 +917,13 @@ public final class FileUtils
Log.logException(e);
this.nextLine = null;
}
if (this.nextLine == null && this.reader != null) {
try {
this.reader.close();
} catch (IOException e) {} finally {
this.reader = null;
}
}
return line;
}

@ -956,10 +956,12 @@ public final class Protocol
}
final HTTPClient httpClient = new HTTPClient(ClientIdentification.getUserAgent(), 8000);
resultMap =
FileUtils.table(httpClient.POSTbytes(new MultiProtocolURI("http://"
+ hostaddress
+ "/yacy/search.html"), hostname, parts, false));
byte[] a = httpClient.POSTbytes(new MultiProtocolURI("http://" + hostaddress + "/yacy/search.html"), hostname, parts, false);
if (a != null && a.length > 200000) {
// there is something wrong. This is too large, maybe a hack on the other side?
a = null;
}
resultMap = FileUtils.table(a);
// evaluate request result
if ( resultMap == null || resultMap.isEmpty() ) {

Loading…
Cancel
Save