<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>15097</bug_id>
          
          <creation_ts>2007-08-27 17:38:46 -0700</creation_ts>
          <short_desc>PNGImageDecoder.cpp throws away data in some cases</short_desc>
          <delta_ts>2007-08-29 10:37:38 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Peter Kasting">pkasting</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1365</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2007-08-27 17:38:46 -0700</bug_when>
    <thetext>The code in PNGImageDecoder.cpp (not used for Safari Mac/Win, but used by Cairo/QT) can throw away data when consumers call any decoding-related functions on it before frameBufferAtIndex().

This is because the libpng code will only decode incoming data once (it remembers it&apos;s already decoded the existing data when asked to decode it again), and if no frame buffer is set up when it makes its callbacks, the relevant data is simply discarded.  And the frame buffer vector isn&apos;t resized to 1 frame (from 0) until frameBufferAtIndex() is called.

I don&apos;t see a good reason for this.  A single frame buffer entry takes up almost no memory before the underlying RGBA32Buffer is set up, so there really isn&apos;t a penalty for just sizing m_frameBufferCache to 1 in the constructor.  This also saves some conditionals in various places that no longer need to worry about whether this vector is empty.

Patch to fix coming shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1366</commentid>
    <comment_count>1</comment_count>
      <attachid>16138</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2007-08-27 17:41:19 -0700</bug_when>
    <thetext>Created attachment 16138
patch v1

With this patch, consumers can call any function on the PNGImageDecoder and trust that the image data won&apos;t be discarded.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1299</commentid>
    <comment_count>2</comment_count>
      <attachid>16138</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-08-28 21:20:29 -0700</bug_when>
    <thetext>Comment on attachment 16138
patch v1

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1250</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-08-29 10:37:38 -0700</bug_when>
    <thetext>Landed in r25294.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16138</attachid>
            <date>2007-08-27 17:41:19 -0700</date>
            <delta_ts>2007-08-28 21:20:29 -0700</delta_ts>
            <desc>patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>2798</size>
            <attacher name="Peter Kasting">pkasting</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTI2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDctMDgtMjcgIFBldGVyIEthc3RpbmcgIDx6ZXJvZHB4QGdtYWls
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAt
IGZpeCBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA5NworCU1ha2Ug
UE5HSW1hZ2VEZWNvZGVyLmNwcCBzaXplIGl0cyBmcmFtZSBidWZmZXIgdmVjdG9yIGluIGl0cwor
CWNvbnN0cnVjdG9yLCBzbyBpdCBuZXZlciB0aHJvd3MgZGVjb2RlZCBpbWFnZSBkYXRhIGF3YXkg
bm8gbWF0dGVyCisJd2hhdCBvcmRlciBpdHMgZnVuY3Rpb25zIGFyZSBjYWxsZWQgaW4uCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6UE5HSW1hZ2VEZWNvZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBO
R0ltYWdlRGVjb2Rlcjo6cG5nQ29tcGxldGUpOgorCiAyMDA3LTA4LTI3ICBBbnR0aSBLb2l2aXN0
byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWouCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0lt
YWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDI1MjY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0
LDcgKzEzNCw5IEBAIHByaXZhdGU6CiAKIFBOR0ltYWdlRGVjb2Rlcjo6UE5HSW1hZ2VEZWNvZGVy
KCkKIDogbV9yZWFkZXIoMCkKLXt9Cit7CisgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZSgx
KTsKK30KIAogUE5HSW1hZ2VEZWNvZGVyOjp+UE5HSW1hZ2VEZWNvZGVyKCkKIHsKQEAgLTE3Niw5
ICsxNzgsNiBAQCBSR0JBMzJCdWZmZXIqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmCiAgICAg
aWYgKGluZGV4KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2Fj
aGUuaXNFbXB0eSgpKQotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKDEpOwotCiAg
ICAgUkdCQTMyQnVmZmVyJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAgICBpZiAo
ZnJhbWUuc3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlICYmIG1fcmVhZGVy
KQogICAgICAgICAvLyBEZWNvZGUgdGhpcyBmcmFtZS4KQEAgLTE5NCw3ICsxOTMsNyBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgc2l6ZU9uCiAKICAgICBtX3JlYWRlci0+ZGVj
b2RlKG1fZGF0YSwgc2l6ZU9ubHkpOwogICAgIAotICAgIGlmIChtX2ZhaWxlZCB8fCAoIW1fZnJh
bWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkgJiYgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygp
ID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpIHsKKyAgICBpZiAobV9mYWlsZWQgfHwg
KG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29t
cGxldGUpKSB7CiAgICAgICAgIGRlbGV0ZSBtX3JlYWRlcjsKICAgICAgICAgbV9yZWFkZXIgPSAw
OwogICAgIH0KQEAgLTMwMiw5ICszMDEsNiBAQCB2b2lkIHJvd0F2YWlsYWJsZShwbmdfc3RydWN0
cCBwbmcsIHBuZ19iCiAKIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWdu
ZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwgaW50IGludGVybGFjZVBhc3Mp
CiB7Ci0gICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
bjsKLQogICAgIC8vIFJlc2l6ZSB0byB0aGUgd2lkdGggYW5kIGhlaWdodCBvZiB0aGUgaW1hZ2Uu
CiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CiAgICAg
aWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKQEAgLTM5
MSw5ICszODcsNiBAQCB2b2lkIHBuZ0NvbXBsZXRlKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2luCiAK
IHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpwbmdDb21wbGV0ZSgpCiB7Ci0gICAgaWYgKG1fZnJhbWVC
dWZmZXJDYWNoZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8vIEhhbmQgYmFj
ayBhbiBhcHByb3ByaWF0ZWx5IHNpemVkIGJ1ZmZlciwgZXZlbiBpZiB0aGUgaW1hZ2UgZW5kZWQg
dXAgYmVpbmcgZW1wdHkuCiAgICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVy
Q2FjaGVbMF07CiAgICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxl
dGUpOwo=
</data>
<flag name="review"
          id="6782"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>