blob: ccfd1c4529a8dc343a031ad5315197ba60e89ac2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
--- src/kernel/qmngio.cpp.sav 2007-02-23 14:01:19.000000000 +0100
+++ src/kernel/qmngio.cpp 2007-08-28 15:27:28.000000000 +0200
@@ -414,8 +414,11 @@ int QMNGFormat::decode( QImage& img, QIm
}
losttime += losingtimer.elapsed();
- if ( ndata || !length )
- mng_display_resume(handle);
+ bool needmore = false;
+ if ( ndata ) {
+ mng_retcode r = mng_display_resume(handle);
+ needmore = ( r == MNG_NEEDMOREDATA );
+ }
losingtimer.start();
image = 0;
@@ -425,6 +428,13 @@ int QMNGFormat::decode( QImage& img, QIm
// Move back unused tail
memcpy(buffer,buffer+ubuffer,nbuffer);
}
+ // "The function should return without processing all the data if it reaches the end of a frame in the input."
+ if( ndata && !needmore ) {
+ length -= ndata;
+ ndata = 0;
+ if( length == 0 ) // 0 means done, process at least one byte
+ length = ndata = 1;
+ }
if ( ndata ) {
// Not all used.
enlargeBuffer(nbuffer+ndata);
|