Bugzilla – Attachment 68583 Details for
Bug 56007
Explorer shell extension: Thumbnail generation slow on network drives
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch v1
0001-Read-more-byte-on-Zip-read-for-thumbnails.patch (text/plain), 4.28 KB, created by
Mathieu Parent
on 2012-10-15 15:47:31 UTC
(
hide
)
Description:
Patch v1
Filename:
MIME Type:
Creator:
Mathieu Parent
Created:
2012-10-15 15:47:31 UTC
Size:
4.28 KB
patch
obsolete
>From 9740d308328ab83a3213ee86aa2db37d509a581d Mon Sep 17 00:00:00 2001 >From: Mathieu Parent <mathieu.parent@nantesmetropole.fr> >Date: Mon, 15 Oct 2012 17:46:15 +0200 >Subject: [PATCH] Read more byte on Zip read (for thumbnails) > >See https://bugs.freedesktop.org/show_bug.cgi?id=56007 > >Change-Id: I26159732cfbf2a539ee491a5129cde0d12abefc4 >--- > shell/source/win32/zipfile/zipfile.cxx | 55 ++++++++++++++++++-------------- > 1 files changed, 31 insertions(+), 24 deletions(-) > >diff --git a/shell/source/win32/zipfile/zipfile.cxx b/shell/source/win32/zipfile/zipfile.cxx >index fb7dc88..b1baa0c 100644 >--- a/shell/source/win32/zipfile/zipfile.cxx >+++ b/shell/source/win32/zipfile/zipfile.cxx >@@ -115,18 +115,35 @@ static unsigned char readByte(StreamInterface *stream) > > static unsigned short readShort(StreamInterface *stream) > { >- unsigned short p0 = (unsigned short)readByte(stream); >- unsigned short p1 = (unsigned short)readByte(stream); >- return (unsigned short)(p0|(p1<<8)); >+ if (!stream || stream->stell() == -1) >+ throw IOException(-1); >+ unsigned short tmpBuf; >+ unsigned long numBytesRead = stream->sread(&tmpBuf, 2); >+ if (numBytesRead != 2) >+ throw IOException(-1); >+ return tmpBuf; > } > > static unsigned readInt(StreamInterface *stream) > { >- unsigned p0 = (unsigned)readByte(stream); >- unsigned p1 = (unsigned)readByte(stream); >- unsigned p2 = (unsigned)readByte(stream); >- unsigned p3 = (unsigned)readByte(stream); >- return (unsigned)(p0|(p1<<8)|(p2<<16)|(p3<<24)); >+ if (!stream || stream->stell() == -1) >+ throw IOException(-1); >+ unsigned tmpBuf; >+ unsigned long numBytesRead = stream->sread(&tmpBuf, 4); >+ if (numBytesRead != 2) >+ throw IOException(-1); >+ return tmpBuf; >+} >+ >+static std::string readString(StreamInterface *stream, unsigned long size) >+{ >+ if (!stream || stream->stell() == -1) >+ throw IOException(-1); >+ unsigned char *tmpBuf(size); >+ unsigned long numBytesRead = stream->sread(&tmpBuf[0], size); >+ if (numBytesRead != size) >+ throw IOException(-1); >+ return string(tmpBuf, size); > } > > static bool readCentralDirectoryEnd(StreamInterface *stream, CentralDirectoryEnd &end) >@@ -144,9 +161,7 @@ static bool readCentralDirectoryEnd(StreamInterface *stream, CentralDirectoryEnd > end.cdir_size = readInt(stream); > end.cdir_offset = readInt(stream); > end.comment_size = readShort(stream); >- end.comment.clear(); >- for (unsigned short i = 0; i < end.comment_size; i++) >- end.comment.append(1,(char)readByte(stream)); >+ end.comment.assign(readString(stream, end.comment_size)) > } > catch (...) > { >@@ -180,15 +195,9 @@ static bool readCentralDirectoryEntry(StreamInterface *stream, CentralDirectoryE > entry.external_attr = readInt(stream); > entry.offset = readInt(stream); > unsigned short i = 0; >- entry.filename.clear(); >- for (i=0; i < entry.filename_size; i++) >- entry.filename.append(1,(char)readByte(stream)); >- entry.extra_field.clear(); >- for (i=0; i < entry.extra_field_size; i++) >- entry.extra_field.append(1,(char)readByte(stream)); >- entry.file_comment.clear(); >- for (i=0; i < entry.file_comment_size; i++) >- entry.file_comment.append(1,(char)readByte(stream)); >+ entry.filename.assign(readString(stream, entry.filename_size)) >+ entry.extra_field.assign(readString(stream, entry.extra_field_size)) >+ entry.file_comment.assign(readString(stream, entry.file_comment_size)) > } > catch (...) > { >@@ -216,12 +225,10 @@ static bool readLocalFileHeader(StreamInterface *stream, LocalFileHeader &header > header.filename_size = readShort(stream); > header.extra_field_size = readShort(stream); > unsigned short i = 0; >+ header.filename.assign(readString(stream, header.filename_size)) > header.filename.clear(); >- for (i=0; i < header.filename_size; i++) >- header.filename.append(1,(char)readByte(stream)); > header.extra_field.clear(); >- for (i=0; i < header.extra_field_size; i++) >- header.extra_field.append(1,(char)readByte(stream)); >+ header.extra_field.assign(readString(stream, header.extra_field_size)) > } > catch (...) > { >-- >1.7.2.5 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 56007
:
68583
|
68605
|
68607