|
|
@ -216,12 +216,19 @@ public class ParameterList {
|
|
|
|
public ParameterList(String s) throws ParseException {
|
|
|
|
public ParameterList(String s) throws ParseException {
|
|
|
|
this();
|
|
|
|
this();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
boolean recover = false;
|
|
|
|
HeaderTokenizer h = new HeaderTokenizer(s, HeaderTokenizer.MIME);
|
|
|
|
HeaderTokenizer h = new HeaderTokenizer(s, HeaderTokenizer.MIME);
|
|
|
|
for (;;) {
|
|
|
|
for (;;) {
|
|
|
|
HeaderTokenizer.Token tk = h.next();
|
|
|
|
HeaderTokenizer.Token tk = h.next();
|
|
|
|
int type = tk.getType();
|
|
|
|
int type = tk.getType();
|
|
|
|
String name, value;
|
|
|
|
String name, value;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (recover) {
|
|
|
|
|
|
|
|
recover = false;
|
|
|
|
|
|
|
|
while (tk.getType() != HeaderTokenizer.Token.EOF && (char) tk.getType() != ';')
|
|
|
|
|
|
|
|
tk = h.next();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (type == HeaderTokenizer.Token.EOF) // done
|
|
|
|
if (type == HeaderTokenizer.Token.EOF) // done
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
@ -232,18 +239,32 @@ public class ParameterList {
|
|
|
|
if (tk.getType() == HeaderTokenizer.Token.EOF)
|
|
|
|
if (tk.getType() == HeaderTokenizer.Token.EOF)
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
// parameter name must be a MIME Atom
|
|
|
|
// parameter name must be a MIME Atom
|
|
|
|
if (tk.getType() != HeaderTokenizer.Token.ATOM)
|
|
|
|
if (tk.getType() != HeaderTokenizer.Token.ATOM) {
|
|
|
|
throw new ParseException("In parameter list <" + s + ">" +
|
|
|
|
StringBuilder sb = new StringBuilder(s);
|
|
|
|
", expected parameter name, " +
|
|
|
|
int pos = h.getNextPos() - 1;
|
|
|
|
"got \"" + tk.getValue() + "\"");
|
|
|
|
if (pos < sb.length())
|
|
|
|
|
|
|
|
sb.insert(pos, "^^^");
|
|
|
|
|
|
|
|
eu.faircode.email.Log.w("In parameter list <" + sb + ">" +
|
|
|
|
|
|
|
|
", expected parameter name, " +
|
|
|
|
|
|
|
|
"got \"" + tk.getValue() + "\"");
|
|
|
|
|
|
|
|
recover = true;
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
name = tk.getValue().toLowerCase(Locale.ENGLISH);
|
|
|
|
name = tk.getValue().toLowerCase(Locale.ENGLISH);
|
|
|
|
|
|
|
|
|
|
|
|
// expect '='
|
|
|
|
// expect '='
|
|
|
|
tk = h.next();
|
|
|
|
tk = h.next();
|
|
|
|
if ((char)tk.getType() != '=')
|
|
|
|
if ((char)tk.getType() != '=') {
|
|
|
|
throw new ParseException("In parameter list <" + s + ">" +
|
|
|
|
StringBuilder sb = new StringBuilder(s);
|
|
|
|
", expected '=', " +
|
|
|
|
int pos = h.getNextPos() - 1;
|
|
|
|
"got \"" + tk.getValue() + "\"");
|
|
|
|
if (pos < sb.length())
|
|
|
|
|
|
|
|
sb.insert(pos, "^^^");
|
|
|
|
|
|
|
|
eu.faircode.email.Log.w("In parameter list <" + sb + ">" +
|
|
|
|
|
|
|
|
", expected '=', " +
|
|
|
|
|
|
|
|
"got \"" + tk.getValue() + "\"");
|
|
|
|
|
|
|
|
recover = true;
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// expect parameter value
|
|
|
|
// expect parameter value
|
|
|
|
if (windowshack &&
|
|
|
|
if (windowshack &&
|
|
|
@ -256,10 +277,17 @@ public class ParameterList {
|
|
|
|
type = tk.getType();
|
|
|
|
type = tk.getType();
|
|
|
|
// parameter value must be a MIME Atom or Quoted String
|
|
|
|
// parameter value must be a MIME Atom or Quoted String
|
|
|
|
if (type != HeaderTokenizer.Token.ATOM &&
|
|
|
|
if (type != HeaderTokenizer.Token.ATOM &&
|
|
|
|
type != HeaderTokenizer.Token.QUOTEDSTRING)
|
|
|
|
type != HeaderTokenizer.Token.QUOTEDSTRING) {
|
|
|
|
throw new ParseException("In parameter list <" + s + ">" +
|
|
|
|
StringBuilder sb = new StringBuilder(s);
|
|
|
|
", expected parameter value, " +
|
|
|
|
int pos = h.getNextPos() - 1;
|
|
|
|
"got \"" + tk.getValue() + "\"");
|
|
|
|
if (pos < sb.length())
|
|
|
|
|
|
|
|
sb.insert(pos, "^^^");
|
|
|
|
|
|
|
|
eu.faircode.email.Log.w("In parameter list <" + sb + ">" +
|
|
|
|
|
|
|
|
", expected parameter value, " +
|
|
|
|
|
|
|
|
"got \"" + tk.getValue() + "\"");
|
|
|
|
|
|
|
|
recover = true;
|
|
|
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
value = tk.getValue();
|
|
|
|
value = tk.getValue();
|
|
|
|
lastName = name;
|
|
|
|
lastName = name;
|
|
|
@ -285,9 +313,15 @@ public class ParameterList {
|
|
|
|
value = lastValue + " " + tk.getValue();
|
|
|
|
value = lastValue + " " + tk.getValue();
|
|
|
|
list.put(lastName, value);
|
|
|
|
list.put(lastName, value);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
throw new ParseException("In parameter list <" + s + ">" +
|
|
|
|
StringBuilder sb = new StringBuilder(s);
|
|
|
|
|
|
|
|
int pos = h.getNextPos() - 1;
|
|
|
|
|
|
|
|
if (pos < sb.length())
|
|
|
|
|
|
|
|
sb.insert(pos, "^^^");
|
|
|
|
|
|
|
|
eu.faircode.email.Log.w("In parameter list <" + sb + ">" +
|
|
|
|
", expected ';', got \"" +
|
|
|
|
", expected ';', got \"" +
|
|
|
|
tk.getValue() + "\"");
|
|
|
|
tk.getValue() + "\"");
|
|
|
|
|
|
|
|
recover = true;
|
|
|
|
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|