froehlich 02/05/23 05:01:08 Modified: src/java/org/apache/cocoon/components/request/multipart MultipartParser.java FilePartFile.java FilePartArray.java FilePart.java Log: applied patch from Jeroen ter Voorde ([EMAIL PROTECTED]). getHeaders() in multipart.FilePartFile/Array always returns null! IE6 submits a file part with an empty filename for empty upload controls. This was not correctly handled. Revision Changes Path 1.3 +15 -3 xml-cocoon2/src/java/org/apache/cocoon/components/request/multipart/MultipartParser.java Index: MultipartParser.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/request/multipart/MultipartParser.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- MultipartParser.java 19 May 2002 23:13:59 -0000 1.2 +++ MultipartParser.java 23 May 2002 12:01:08 -0000 1.3 @@ -72,7 +72,7 @@ * FilePart: file part * * @author <a href="mailto:[EMAIL PROTECTED]">Jeroen ter Voorde</a> - * @version CVS $Id: MultipartParser.java,v 1.2 2002/05/19 23:13:59 stefano Exp $ + * @version CVS $Id: MultipartParser.java,v 1.3 2002/05/23 12:01:08 froehlich Exp $ */ public class MultipartParser extends Hashtable { @@ -184,7 +184,15 @@ try { if (headers.containsKey("filename")) { - parseFilePart(ts, headers); + if (!"".equals(headers.get("filename"))) { + parseFilePart(ts, headers); + } else { + // IE6 sends an empty part with filename="" for + // empty upload fields. Just parse away the part + byte[] buf = new byte[32]; + while(ts.getState() == TokenStream.STATE_READING) + ts.read(buf); + } } else if (((String) headers.get("content-disposition")) .toLowerCase().equals("form-data")) { parseInlinePart(ts, headers); @@ -226,6 +234,7 @@ out = new ByteArrayOutputStream(); } else { String filePath = uploadDirectory.getPath() + File.separator; + String fileName = new File((String) headers.get("filename")).getName(); @@ -322,9 +331,12 @@ headers.put(tokenizer.nextToken(" :").toLowerCase(), tokenizer.nextToken(" :;")); + // The extra tokenizer.hasMoreTokens() in headers.put + // handles the filename="" case IE6 submits for an empty + // upload field. while (tokenizer.hasMoreTokens()) { headers.put(tokenizer.nextToken(" ;=\""), - tokenizer.nextToken("=\"")); + tokenizer.hasMoreTokens()?tokenizer.nextToken("=\""):""); } hdrline = readln(in); 1.3 +2 -5 xml-cocoon2/src/java/org/apache/cocoon/components/request/multipart/FilePartFile.java Index: FilePartFile.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/request/multipart/FilePartFile.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- FilePartFile.java 21 May 2002 12:24:57 -0000 1.2 +++ FilePartFile.java 23 May 2002 12:01:08 -0000 1.3 @@ -59,16 +59,13 @@ * This class represents a file part parsed from a http post stream. * * @author <a href="mailto:[EMAIL PROTECTED]">Jeroen ter Voorde</a> - * @version CVS $Id: FilePartFile.java,v 1.2 2002/05/21 12:24:57 cziegeler Exp $ + * @version CVS $Id: FilePartFile.java,v 1.3 2002/05/23 12:01:08 froehlich Exp $ */ public class FilePartFile extends FilePart { /** Field file */ private File file = null; - /** Field headers */ - private Map headers; - /** * Constructor FilePartFile * @@ -76,7 +73,7 @@ * @param file */ protected FilePartFile(Map headers, File file) { - this.headers = headers; + super(headers); this.file = file; } 1.3 +2 -5 xml-cocoon2/src/java/org/apache/cocoon/components/request/multipart/FilePartArray.java Index: FilePartArray.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/request/multipart/FilePartArray.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- FilePartArray.java 21 May 2002 12:24:57 -0000 1.2 +++ FilePartArray.java 23 May 2002 12:01:08 -0000 1.3 @@ -58,16 +58,13 @@ * This class represents a file part parsed from a http post stream. * * @author <a href="mailto:[EMAIL PROTECTED]">Jeroen ter Voorde</a> - * @version CVS $Id: FilePartArray.java,v 1.2 2002/05/21 12:24:57 cziegeler Exp $ + * @version CVS $Id: FilePartArray.java,v 1.3 2002/05/23 12:01:08 froehlich Exp $ */ public class FilePartArray extends FilePart { /** Field in */ private InputStream in = null; - /** Field headers */ - private Map headers; - /** * Constructor FilePartArray * @@ -75,7 +72,7 @@ * @param in */ protected FilePartArray(Map headers, InputStream in) { - this.headers = headers; + super(headers); this.in = in; } 1.3 +7 -3 xml-cocoon2/src/java/org/apache/cocoon/components/request/multipart/FilePart.java Index: FilePart.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/request/multipart/FilePart.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- FilePart.java 21 May 2002 12:24:57 -0000 1.2 +++ FilePart.java 23 May 2002 12:01:08 -0000 1.3 @@ -59,12 +59,16 @@ * FilePartArray (which is a file in memory) * * @author <a href="mailto:[EMAIL PROTECTED]">Jeroen ter Voorde</a> - * @version CVS $Id: FilePart.java,v 1.2 2002/05/21 12:24:57 cziegeler Exp $ + * @version CVS $Id: FilePart.java,v 1.3 2002/05/23 12:01:08 froehlich Exp $ */ public abstract class FilePart { - /** Field headers */ - private Map headers; + /** Field headers */ + protected Map headers; + + protected FilePart(Map headers) { + this.headers = headers; + } /** * Returns the part headers
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]