Open
Bug 527007
Opened 15 years ago
Updated 2 years ago
imgITools::DecodeImageData(...) doesn't support unbuffered streams (such as nsIFileInputStream), must use nsIBufferedInputStream (in nsIBufferedStreams.h)
Categories
(Core :: Graphics: ImageLib, defect)
Tracking
()
UNCONFIRMED
People
(Reporter: meunierrom1, Unassigned)
Details
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.14) Gecko/2009090216 Ubuntu/9.04 (jaunty) Firefox/3.0.13 XPCOMViewer/0.9a
Build Identifier: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.14) Gecko/2009090216 Ubuntu/9.04 (jaunty) Firefox/3.0.13 XPCOMViewer/0.9a
The DecodeImageData(nsIInputStream* aInStr,const nsACString& aMimeType,imgIContainer **aContainer) function in the imgITools interface (located in imglib2 in the xulrunner-sdk) returns NS_NOT_IMPLEMENTED (error code 80004001) when the nsIInputStream is NOT a buffered stream. That's why you cannot use nsIFileInputStream.
Reproducible: Always
Steps to Reproduce:
Inside an XPCOM component try this:
1.Create an instance of nsILocalFile which points to an image file (e.g. /home/user/image.png)
nsCOMPtr<nsILocalFile> localImgFile;
do_CreateInstance("@mozilla.org/file/local;1",NS_GET_IID(nsILocalFile),getter_AddRefs(localImgFile));
localImgFile->InitWithNativePath(NS_LITERAL_CSTRING(/home/user/image.png));
2. Create an instance of nsIFileInputStream
nsCOMPtr<nsIFileInputStream> imgFileInputStream;
do_CreateInstance("@@mozilla.org/network/file-input-stream;1",NS_GET_IID(nsIFileInputStream),getter_AddRefs(imgFileInputStream));
3. Initialize this nsIFileInputStream whith the file
imgFileInputStream->Init(localImgFile, PR_RDWR,PR_IRWXO,nsIFileInputStream::REOPEN_ON_REWIND);
5. Get the mime type of the stream by using the nsIIOService and the nsIURI created with the image path, and finally the nsIMIMEService
nsCOMPtr<nsIURI> imageURL;
ioService->NewURI(path, NULL, NULL, getter_AddRefs(imageURL));
nsCOMPtr<nsIMIMEService> mimeService;
do_CreateInstance("@mozilla.org/mime;1",NS_GET_IID(nsIMIMEService),getter_AddRefs(mimeService));
nsCAutoString mimetype; mimeService->GetTypeFromURI(imageURL,mimetype);
4. Create an imgITools instance
nsCOMPtr<imgITools> imgTool;
do_CreateInstance("@mozilla.org/image/tools;1",NS_GET_IID(imgITools),getter_AddRefs(imgTool));
5. Last step, decode the data from the stream
nsCOMPtr<imgIContainer> imgContainer;
nsresult rv;
rv=imgTool->DecodeImageData(imgStream,mimetype, getter_AddRefs(imgContainer)) ;
printf("failed decoding data: %x\n", rv);
Actual Results:
printf returns 80004001 (i.e. NS_NOT_IMPLEMENTED) and the imgIContainer instance is still empty
Expected Results:
DecodeImageData() should have returned an imgIContainer containing the image data
Comment 1•15 years ago
|
||
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3
On ubuntu 9.04
I'm seeing similar behaviour calling from js in my extension.
But I'm using a nsIBufferedInputStream, and though instead of returning NS_NOT_IMPLEMENTED, it is causing firefox to either freeze or crash. It only seems to be a problem for images of a large file size (>1MB), though does occasionally happen for smaller images.
You can see the problem in action in my extension here: http://picniche.com/toolbar/imagedeck/
Relevant file is content/utilities/backgroundapi.js
Bob: if you're crashing, please file your own bug w/ a stack report or bp- id
https://developer.mozilla.org/En/How_to_get_a_stacktrace_for_a_bug_report
Updated•2 years ago
|
Severity: minor → S4
You need to log in
before you can comment on or make changes to this bug.
Description
•