Thread: [Htmlparser-cvs] htmlparser/src/org/htmlparser/lexer InputStreamSource.java,1.4,1.5
Brought to you by:
derrickoswald
From: Derrick O. <der...@us...> - 2005-03-06 21:46:45
|
Update of /cvsroot/htmlparser/htmlparser/src/org/htmlparser/lexer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29765/lexer Modified Files: InputStreamSource.java Log Message: Bug #1044707 mark()/reset() issues Added wrapping with a org.htmlparser.lexer.Stream if markSupported returns false on the InputStream passed to InputStreamSource constructor. Added better error message when reset fails in setEncoding(). Index: InputStreamSource.java =================================================================== RCS file: /cvsroot/htmlparser/htmlparser/src/org/htmlparser/lexer/InputStreamSource.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** InputStreamSource.java 15 Feb 2005 00:41:20 -0000 1.4 --- InputStreamSource.java 6 Mar 2005 21:46:31 -0000 1.5 *************** *** 125,128 **** --- 125,143 ---- if (null == stream) stream = new Stream (null); + else + // bug #1044707 mark()/reset() issues + if (!stream.markSupported ()) + // wrap the stream so we can reset + stream = new Stream (stream); + // else + // just because mark is supported doesn't guarantee + // proper reset operation; there is no call to mark + // in this code, so if reset misbehaves there is an + // appropriate message in setEncoding() to suggest + // wraping it in a Stream. + // This was deemed better than an attempt to call + // reset at this point just to check if we would + // succeed later, or to call mark with an arbitrary + // lookahead size mStream = stream; if (null == charset) *************** *** 235,270 **** offset = mOffset; stream.reset (); ! mEncoding = character_set; ! mReader = new InputStreamReader (stream, character_set); ! mBuffer = new char[mBuffer.length]; ! mLevel = 0; ! mOffset = 0; ! mMark = -1; ! if (0 != offset) { ! new_chars = new char[offset]; ! if (offset != read (new_chars)) ! throw new ParserException ("reset stream failed"); ! for (int i = 0; i < offset; i++) ! if (new_chars[i] != buffer[i]) ! throw new EncodingChangeException ("character mismatch (new: " ! + new_chars[i] ! + " [0x" ! + Integer.toString (new_chars[i], 16) ! + "] != old: " ! + " [0x" ! + Integer.toString (buffer[i], 16) ! + buffer[i] ! + "]) for encoding change from " ! + encoding ! + " to " ! + character_set ! + " at character offset " ! + i); } } catch (IOException ioe) ! { ! throw new ParserException (ioe.getMessage (), ioe); } } --- 250,295 ---- offset = mOffset; stream.reset (); ! try { ! mEncoding = character_set; ! mReader = new InputStreamReader (stream, character_set); ! mBuffer = new char[mBuffer.length]; ! mLevel = 0; ! mOffset = 0; ! mMark = -1; ! if (0 != offset) ! { ! new_chars = new char[offset]; ! if (offset != read (new_chars)) ! throw new ParserException ("reset stream failed"); ! for (int i = 0; i < offset; i++) ! if (new_chars[i] != buffer[i]) ! throw new EncodingChangeException ("character mismatch (new: " ! + new_chars[i] ! + " [0x" ! + Integer.toString (new_chars[i], 16) ! + "] != old: " ! + " [0x" ! + Integer.toString (buffer[i], 16) ! + buffer[i] ! + "]) for encoding change from " ! + encoding ! + " to " ! + character_set ! + " at character offset " ! + i); ! } ! } ! catch (IOException ioe) ! { ! throw new ParserException (ioe.getMessage (), ioe); } } catch (IOException ioe) ! { // bug #1044707 mark()/reset() issues ! throw new ParserException ("Stream reset failed (" ! + ioe.getMessage () ! + "), try wrapping it with a org.htmlparser.lexer.Stream", ! ioe); } } |