From 6c4be0349c31fc8f05fa8f354dfd5438a18c7069 Mon Sep 17 00:00:00 2001 From: "rosenfield.albert" Date: Thu, 12 Feb 2009 15:40:25 +0000 Subject: [PATCH] Bugfix: when 'view as html' was clicked and non-image binary data was encountered, an unchartered code path would be taken and a preview without a usable file extension would be generated. Now, unrecognizable binary content is stuffed in a text file. Fixes issue #938. Also, the GUI action should probably be called "image view" rather than "HTML view"? --- source/main.pas | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/source/main.pas b/source/main.pas index d728dc59..91fe914a 100644 --- a/source/main.pas +++ b/source/main.pas @@ -2247,6 +2247,7 @@ var f : Textfile; Content : WideString; IsBinary : Boolean; + SaveBinary : Boolean; begin g := ActiveGrid; if g = nil then begin messagebeep(MB_ICONASTERISK); exit; end; @@ -2257,20 +2258,26 @@ begin IsBinary := ActiveData.Columns[g.FocusedColumn].IsBinary; Content := g.Text[g.FocusedNode, g.FocusedColumn]; + SaveBinary := false; filename := GetTempDir+'\'+APPNAME+'-preview.'; - if IsBinary then begin - if pos('JFIF', copy(Content, 0, 20)) <> 0 then - filename := filename + 'jpeg' - else if StrCmpBegin('GIF', Content) then - filename := filename + 'gif' - else if StrCmpBegin('BM', Content) then - filename := filename + 'bmp'; + if IsBinary and (pos('JFIF', copy(Content, 0, 20)) <> 0) then begin + SaveBinary := true; + filename := filename + 'jpeg'; + end else if IsBinary and StrCmpBegin('GIF', Content) then begin + SaveBinary := true; + filename := filename + 'gif'; + end else if IsBinary and StrCmpBegin('BM', Content) then begin + SaveBinary := true; + filename := filename + 'bmp'; + end else if Isbinary then filename := filename + 'txt' + else filename := filename + 'html'; + + if SaveBinary then begin AssignFile(f, filename); Rewrite(f); Write(f, Content); CloseFile(f); end else begin - filename := filename + 'html'; SaveUnicodeFile(filename, Content); end; ShowStatus( STATUS_MSG_READY );