View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0001671 | Double Commander | Default | public | 2016-12-20 21:44 | 2023-01-21 16:07 |
| Reporter | cordylus | Assigned To | |||
| Priority | normal | Severity | major | Reproducibility | always |
| Status | closed | Resolution | fixed | ||
| Projection | none | ETA | none | ||
| OS | Windows | OS Version | XP | ||
| Product Version | 0.7.6 | ||||
| Fixed in Version | 1.0.0 | ||||
| Summary | 0001671: Can't drag-n-drop from Windows Explorer when a zip archive is opened in it | ||||
| Description | Just nothing happens. | ||||
| Tags | No tags attached. | ||||
| Attached Files | uOleDragDrop.pas.patch (1,464 bytes)
Index: src/platform/uOleDragDrop.pas
===================================================================
--- src/platform/uOleDragDrop.pas (revision 7570)
+++ src/platform/uOleDragDrop.pas (working copy)
@@ -998,12 +998,12 @@
tIID : PGuid;
hFile: THandle;
pvStrm: IStream;
+ pvStrmStatStg: TStatStg;
dwSize: LongInt;
AnyPointer: PAnsiChar;
InnerFilename: String;
StgDocFile: WideString;
msStream: TMemoryStream;
- i64Size, i64Move: {$IF FPC_FULLVERSION < 030002}Int64{$ELSE}QWord{$ENDIF};
begin
result:=FALSE;
InnerFilename:= ExtractFilepath(WantedFilename) + TEMPFILENAME;
@@ -1045,16 +1045,14 @@
begin
pvStrm:=IStream(Medium.pstm);
// Figure out how large the data is
- if (pvStrm.Seek(0, STREAM_SEEK_END, i64Size) = S_OK) then
+ if (pvStrm.Stat(pvStrmStatStg, STATFLAG_NONAME) = S_OK) then
begin
- // Seek back to start of stream
- pvStrm.Seek(0, STREAM_SEEK_SET, i64Move);
// Create memory stream to convert to
msStream:=TMemoryStream.Create;
// Allocate size
- msStream.Size:=i64Size;
+ msStream.Size:=pvStrmStatStg.cbSize;
// Read from the IStream into the memory for the TMemoryStream
- if pvStrm.Read(msStream.Memory, i64Size, @dwSize)=S_OK then
+ if pvStrm.Read(msStream.Memory, pvStrmStatStg.cbSize, @dwSize)=S_OK then
msStream.Size:=dwSize
else
msStream.Size:=0;
| ||||
| Fixed in Revision | |||||
| Operating system | Windows | ||||
| Widgetset | |||||
| Architecture | |||||
|
|
Found a workaround until this is fixed: files can be copy-pasted. |
|
|
I've tried to debug this. Strange thing happens with this bug: IStream.Seek returns -2147467263, this is not one of the documented return values. Searching the Internet shows that it is E_NOTIMPL. The function call is pvStrm.Seek(0, STREAM_SEEK_END, i64Size) at line 1048 of src/platform/uOleDragDrop.pas (DC 0.8.0 r7570) |
|
|
I've added a patch, but this is NOT a solution, just a small optimization. Stat should be a better way to get the size than two Seek calls. But in this case it returns the same E_NOTIMPL and I don't know how to enter this code path with working data, so the patch is not tested. |
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2016-12-20 21:44 | cordylus | New Issue | |
| 2017-05-07 01:38 | cordylus | Note Added: 0002192 | |
| 2017-05-20 08:07 | cordylus | Note Added: 0002245 | |
| 2017-05-20 10:00 | cordylus | File Added: uOleDragDrop.pas.patch | |
| 2017-05-20 10:00 | cordylus | Note Added: 0002246 | |
| 2023-01-21 16:07 | Alexx2000 | Status | new => closed |
| 2023-01-21 16:07 | Alexx2000 | Resolution | open => fixed |
| 2023-01-21 16:07 | Alexx2000 | Fixed in Version | => 1.0.0 |