Hi,
@Jason
Thanks for the pointer, I'm going to fix that
Andreas
Am 26.02.21 um 15:26 schrieb Jason Pyeron:
Ow. That patch also can have issues.
101 public RandomAccessReadBuffer(InputStream input) throws IOException
102 {
103 this();
104 int bytesRead = 0;
105 int remainingBytes = chunkSize;
106 int offset = 0;
107 byte[] eofCheck = new byte[1];
108 while (true)
109 {
110 while (remainingBytes > 0
111 && (bytesRead = input.read(currentBuffer.array(),
offset, remainingBytes)) > -1)
112 {
113 remainingBytes -= bytesRead;
114 offset += bytesRead;
115 }
116 size += offset;
117 if (remainingBytes == 0 && input.read(eofCheck) > 0)
118 {
119 expandBuffer();
120 currentBuffer.put(eofCheck);
121 offset = 1;
122 remainingBytes = chunkSize - 1;
123 }
124 else
125 {
126 currentBuffer.limit(offset);
127 break;
128 }
129 }
130 seek(0);
131 }
input.read(eofCheck) == 0 is not an EOF!
Your loop should be something like:
int bytesRead;
try
{
while ( (bytesRead=read(buf,ofs,len)) != -1 )
{
if (bytesRead == 0)
{
// do wait...
}
else
{
//analyze buffer management and make corrections
//copy bytes
//update buf, ofs, & len
}
}
}
catch (...) / finally
{
//clean up
}
-----Original Message-----
From: Jason Pyeron <[email protected]>
Sent: Friday, February 26, 2021 9:06 AM
To: [email protected]
Subject: RE: test failures
Available returns an estimate of the number of bytes that can be read. It is
free to say zero.
Typically this would be a trigger for a sleep.
When we get a 0 followed by a 0, we read anyways.
It is also worth noting the Javadocs give caution with regards to buffer
allocation based on its
value.
-----Original Message-----
From: Andreas Lehmkuehler <[email protected]>
Sent: Friday, February 26, 2021 2:28 AM
To: [email protected]
Subject: Re: test failures
@Tilman Thanks for the pointer
see https://issues.apache.org/jira/browse/PDFBOX-5111
Andreas
Am 26.02.21 um 08:05 schrieb Tilman Hausherr:
Am 26.02.2021 um 07:51 schrieb Andreas Lehmkuehler:
Hi,
I've the same effects here and I already suspected the refactored io-code.
@Tilamn: Good to hear that you already found the culprit. Do you already have
a fix or should I have a look as well?
I don't have a fix. Please have a look yourself too. I'm still kindof surprised
that this would happen overnight despite no code change. Maybe some change on
apache's own server. And the javadoc of available() reads like it's more about
astrology.
Tilman
Andreas
Am 26.02.21 um 07:30 schrieb Tilman Hausherr:
It happens in RandomAccessReadBuffer(InputStream input) .
input.available() returns 0 despite that more bytes are available. This can
be shown with this change:
if (remainingBytes == 0 && input.available() > 0)
{
expandBuffer();
}
else
{
////////////////////// new
int by = input.read();
if (by != -1)
{
throw new IOException("hey there was more");
}
///////////////////// end of new code
currentBuffer.limit(offset);
break;
}
also, this test code
@Test
void testBlah() throws IOException
{
System.out.println("start");
try (InputStream is = new
URL("https://issues.apache.org/jira/secure/attachment/13017227/stringwidth.pdf").openStream())
{
RandomAccessReadBuffer rarb = new RandomAccessReadBuffer(is);
System.out.println(rarb.length());
}
}
shows 8192 bytes. The real size of the file is 34KB.
Tilman
Am 25.02.2021 um 20:26 schrieb Tilman Hausherr:
Something is weird with the trunk build. It fails on my PC and on Jenkins
despite no changes.
An example is PDFontTest.testPDFox5048(). That one fails as it is, but
doesn't fail when using a local file.
Also, the URL
https://issues.apache.org/jira/secure/attachment/13017227/stringwidth.pdf
has a FontFile3 = null when loaded with CTRL-U in PDFDebugger, but not when
loaded locally.
Same test works fine when done in the 2.0 build
Tilman
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]