2
0
Эх сурвалжийг харах

Merge branch 'main' into darkstatusbar

Martijn Laan 2 сар өмнө
parent
commit
a15e837f83

+ 44 - 14
Components/ISSigFunc.pas

@@ -96,17 +96,24 @@ begin
   TSHA256Digest(Result) := SHA256DigestFromString(S);
   TSHA256Digest(Result) := SHA256DigestFromString(S);
 end;
 end;
 
 
-function CalcHashToSign(const AIncludeFileName: Boolean; const AFileName: String; const AFileSize: Int64;
-  const AFileHash: TSHA256Digest): TSHA256Digest;
+function CalcHashToSign(const AIncludeFileNameAndTag: Boolean; const AFileName: String; const AFileSize: Int64;
+  const AFileHash: TSHA256Digest; const AFileTag: String): TSHA256Digest;
+
+  procedure SHA256UpdateWithString(var Context: TSHA256Context; const S: String);
+  begin
+    const U = UTF8String(S);
+    const N: Cardinal = Length(U);
+    SHA256Update(Context, N, SizeOf(N));
+    if N > 0 then
+      SHA256Update(Context, Pointer(U)^, N*SizeOf(U[1]));
+  end;
+
 begin
 begin
   var Context: TSHA256Context;
   var Context: TSHA256Context;
   SHA256Init(Context);
   SHA256Init(Context);
-  if AIncludeFileName then begin
-    const UTF8FileName = UTF8String(AFileName);
-    const UTF8FileNameLength: Cardinal = Length(UTF8FileName);
-    SHA256Update(Context, UTF8FileNameLength, SizeOf(UTF8FileNameLength));
-    if UTF8FileNameLength > 0 then
-      SHA256Update(Context, Pointer(UTF8FileName)^, UTF8FileNameLength*SizeOf(UTF8FileName[1]));
+  if AIncludeFileNameAndTag then begin
+    SHA256UpdateWithString(Context, AFileName);
+    SHA256UpdateWithString(Context, AFileTag);
   end;
   end;
   SHA256Update(Context, AFileSize, SizeOf(AFileSize));
   SHA256Update(Context, AFileSize, SizeOf(AFileSize));
   SHA256Update(Context, AFileHash, SizeOf(AFileHash));
   SHA256Update(Context, AFileHash, SizeOf(AFileHash));
@@ -185,6 +192,8 @@ end;
 function ISSigCreateSignatureText(const AKey: TECDSAKey;
 function ISSigCreateSignatureText(const AKey: TECDSAKey;
   const AFileName: String; const AFileSize: Int64; const AFileHash: TSHA256Digest): String;
   const AFileName: String; const AFileSize: Int64; const AFileHash: TSHA256Digest): String;
 begin
 begin
+  const AFileTag = ''; { Should be a parameter in the future }
+
   { Ensure unverifiable signature files can't be created accidentally }
   { Ensure unverifiable signature files can't be created accidentally }
   const UTF8FileName = UTF8String(AFileName);
   const UTF8FileName = UTF8String(AFileName);
   if Length(UTF8FileName) > 1000 then
   if Length(UTF8FileName) > 1000 then
@@ -202,7 +211,7 @@ begin
   var PublicKey: TECDSAPublicKey;
   var PublicKey: TECDSAPublicKey;
   AKey.ExportPublicKey(PublicKey);
   AKey.ExportPublicKey(PublicKey);
 
 
-  const HashToSign = CalcHashToSign(True, AFileName, AFileSize, AFileHash);
+  const HashToSign = CalcHashToSign(True, AFileName, AFileSize, AFileHash, AFileTag);
   var Sig: TECDSASignature;
   var Sig: TECDSASignature;
   AKey.SignHash(HashToSign, Sig);
   AKey.SignHash(HashToSign, Sig);
 
 
@@ -211,12 +220,14 @@ begin
     'file-name "%s"'#13#10 +
     'file-name "%s"'#13#10 +
     'file-size %d'#13#10 +
     'file-size %d'#13#10 +
     'file-hash %s'#13#10 +
     'file-hash %s'#13#10 +
+    'file-tag "%s"'#13#10 +
     'key-id %s'#13#10 +
     'key-id %s'#13#10 +
     'sig-r %s'#13#10 +
     'sig-r %s'#13#10 +
     'sig-s %s'#13#10,
     'sig-s %s'#13#10,
     [AFileName,
     [AFileName,
      AFileSize,
      AFileSize,
      SHA256DigestToString(AFileHash),
      SHA256DigestToString(AFileHash),
+     AFileTag,
      SHA256DigestToString(CalcKeyID(PublicKey)),
      SHA256DigestToString(CalcKeyID(PublicKey)),
      ECDSAInt256ToString(Sig.Sig_r),
      ECDSAInt256ToString(Sig.Sig_r),
      ECDSAInt256ToString(Sig.Sig_s)]);
      ECDSAInt256ToString(Sig.Sig_s)]);
@@ -225,9 +236,23 @@ end;
 function ISSigVerifySignatureText(const AAllowedKeys: array of TECDSAKey;
 function ISSigVerifySignatureText(const AAllowedKeys: array of TECDSAKey;
   const AText: String; out AFileName: String; out AFileSize: Int64;
   const AText: String; out AFileName: String; out AFileSize: Int64;
   out AFileHash: TSHA256Digest; out AKeyUsedID: String): TISSigVerifySignatureResult;
   out AFileHash: TSHA256Digest; out AKeyUsedID: String): TISSigVerifySignatureResult;
+
+  function FormatToVersion(const Format: String; out Version: Integer): Boolean;
+  begin
+    if Format = 'issig-v1' then begin
+      Version := 1;
+      Exit(True);
+    end else if Format = 'issig-v2' then begin
+      Version := 2;
+      Exit(True);
+    end else
+      Exit(False);
+  end;
+
 var
 var
   TextValues: record
   TextValues: record
-    Format, FileName, FileSize, FileHash, KeyID, Sig_r, Sig_s: String;
+    Format, FileName, FileSize, FileHash, FileTag, KeyID, Sig_r, Sig_s: String;
+    Version: Integer;
   end;
   end;
 begin
 begin
   { To be extra safe, clear the "out" parameters just in case the caller isn't
   { To be extra safe, clear the "out" parameters just in case the caller isn't
@@ -235,6 +260,7 @@ begin
   AFileName := '';
   AFileName := '';
   AFileSize := -1;
   AFileSize := -1;
   FillChar(AFileHash, SizeOf(AFileHash), 0);
   FillChar(AFileHash, SizeOf(AFileHash), 0);
+  var AFileTag := ''; { Should be a parameter in the future }
   AKeyUsedID := '';
   AKeyUsedID := '';
 
 
   if Length(AText) > ISSigTextFileLengthLimit then
   if Length(AText) > ISSigTextFileLengthLimit then
@@ -244,11 +270,13 @@ begin
 
 
   var SS := TStringScanner.Create(AText);
   var SS := TStringScanner.Create(AText);
   if not ConsumeLineValue(SS, 'format', TextValues.Format, 8, 8, NonControlASCIICharsSet) or
   if not ConsumeLineValue(SS, 'format', TextValues.Format, 8, 8, NonControlASCIICharsSet) or
-     ((TextValues.Format <> 'issig-v1') and ((TextValues.Format <> 'issig-v2'))) or
-     ((TextValues.Format = 'issig-v2') and not ConsumeLineValue(SS, 'file-name', TextValues.FileName, 0, MaxInt,
+     not FormatToVersion(TextValues.Format, TextValues.Version) or
+     ((TextValues.Version >= 2) and not ConsumeLineValue(SS, 'file-name', TextValues.FileName, 0, MaxInt,
        (NonControlASCIICharsSet - ['"']) + AllHighCharsSet, True, True)) or
        (NonControlASCIICharsSet - ['"']) + AllHighCharsSet, True, True)) or
      not ConsumeLineValue(SS, 'file-size', TextValues.FileSize, 1, 16, DigitsSet) or
      not ConsumeLineValue(SS, 'file-size', TextValues.FileSize, 1, 16, DigitsSet) or
      not ConsumeLineValue(SS, 'file-hash', TextValues.FileHash, 64, 64, HexDigitsSet) or
      not ConsumeLineValue(SS, 'file-hash', TextValues.FileHash, 64, 64, HexDigitsSet) or
+     ((TextValues.Version >= 2) and not ConsumeLineValue(SS, 'file-tag', TextValues.FileTag, 0, MaxInt,
+       (NonControlASCIICharsSet - ['"']) + AllHighCharsSet, True, True)) or
      not ConsumeLineValue(SS, 'key-id', TextValues.KeyID, 64, 64, HexDigitsSet) or
      not ConsumeLineValue(SS, 'key-id', TextValues.KeyID, 64, 64, HexDigitsSet) or
      not ConsumeLineValue(SS, 'sig-r', TextValues.Sig_r, 64, 64, HexDigitsSet) or
      not ConsumeLineValue(SS, 'sig-r', TextValues.Sig_r, 64, 64, HexDigitsSet) or
      not ConsumeLineValue(SS, 'sig-s', TextValues.Sig_s, 64, 64, HexDigitsSet) or
      not ConsumeLineValue(SS, 'sig-s', TextValues.Sig_s, 64, 64, HexDigitsSet) or
@@ -278,8 +306,9 @@ begin
   const UnverifiedFileName = TextValues.FileName;
   const UnverifiedFileName = TextValues.FileName;
   const UnverifiedFileSize = StrToInt64(TextValues.FileSize);
   const UnverifiedFileSize = StrToInt64(TextValues.FileSize);
   const UnverifiedFileHash = SHA256DigestFromString(TextValues.FileHash);
   const UnverifiedFileHash = SHA256DigestFromString(TextValues.FileHash);
-  const HashToSign = CalcHashToSign(TextValues.Format <> 'issig-v1', UnverifiedFileName,
-    UnverifiedFileSize, UnverifiedFileHash);
+  const UnverifiedFileTag = TextValues.FileTag;
+  const HashToSign = CalcHashToSign(TextValues.Version >= 2, UnverifiedFileName,
+    UnverifiedFileSize, UnverifiedFileHash, UnverifiedFileTag);
   var Sig: TECDSASignature;
   var Sig: TECDSASignature;
   Sig.Sig_r := ECDSAInt256FromString(TextValues.Sig_r);
   Sig.Sig_r := ECDSAInt256FromString(TextValues.Sig_r);
   Sig.Sig_s := ECDSAInt256FromString(TextValues.Sig_s);
   Sig.Sig_s := ECDSAInt256FromString(TextValues.Sig_s);
@@ -287,6 +316,7 @@ begin
     AFileName := UnverifiedFileName;
     AFileName := UnverifiedFileName;
     AFileSize := UnverifiedFileSize;
     AFileSize := UnverifiedFileSize;
     AFileHash := UnverifiedFileHash;
     AFileHash := UnverifiedFileHash;
+    AFileTag := UnverifiedFileTag;
     Result := vsrSuccess;
     Result := vsrSuccess;
   end else
   end else
     Result := vsrBad;
     Result := vsrBad;

+ 3 - 2
Examples/MyDll.dll.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "MyDll.dll"
 file-name "MyDll.dll"
 file-size 21280
 file-size 21280
 file-hash f4e549ef947c33a61520a38c855583e48cfd1702303815123662f7e2e4e73e09
 file-hash f4e549ef947c33a61520a38c855583e48cfd1702303815123662f7e2e4e73e09
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r 0ba33df66764201f643189531b10d687767275d5b42f61da16568854b2196577
-sig-s c19753f32422be3d924ca4ecca7529bcc098441d6b9055940fcbcf1c0e3fc4bc
+sig-r 924bb961758ede8e7a6b06e798bb45e0def30c3b56f10e8e2e9717a6e74cc573
+sig-s 3ac3b134b5a2167b41221f73cf854084dd67ffa845a7475cd7e4158ae71b0786

+ 3 - 2
Examples/MyProg-Arm64.exe.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "MyProg-Arm64.exe"
 file-name "MyProg-Arm64.exe"
 file-size 77960
 file-size 77960
 file-hash ca7812155ff5935264177277b7c351ef35deacfda114fe8418d65cbcf105883a
 file-hash ca7812155ff5935264177277b7c351ef35deacfda114fe8418d65cbcf105883a
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r f3bdb92812f621a6de7ef9828368f7edf2576f96b984d50bbcefb2eba8cd9240
-sig-s b64a5109feb59393f3237df84c5b21965b46b4b76117316557d8e07d4dea86a0
+sig-r 6609533c534e5c40276dd4d8d0e9895caa2da1ac468f81da1076f5b4f422188c
+sig-s 7c726c104127fb6361e7b7000745534923d9b34a10552d70443cb25d77ceb82b

+ 3 - 2
Examples/MyProg-x64.exe.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "MyProg-x64.exe"
 file-name "MyProg-x64.exe"
 file-size 77960
 file-size 77960
 file-hash b50952f9af310be586746356508b9fd430dcbbaa155a04e6f9563632de0a023b
 file-hash b50952f9af310be586746356508b9fd430dcbbaa155a04e6f9563632de0a023b
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r 0d70aa66576f8cb97ace74dc1d0348c7dfbd6d7d23ed1122185ecca3f79a8e76
-sig-s 6f04303418f230cf52e26285362e0214875f2bf40e9be1c5f9a1dad15649ef24
+sig-r 190988b37803d9ae3c75050c43496225a1e7beaef0abfd0e4806482797707449
+sig-s 0b367bb7e4236ae366eea37ddff343f440b880c2e478df7b08fbade1758cd3b5

+ 3 - 2
Examples/MyProg.exe.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "MyProg.exe"
 file-name "MyProg.exe"
 file-size 78984
 file-size 78984
 file-hash be272491050410c39db97101f05e80ed5d30a10caca6bc9f02228aa9499e19c9
 file-hash be272491050410c39db97101f05e80ed5d30a10caca6bc9f02228aa9499e19c9
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r a2475468aafe1b1841d57e2f863b3d4b30a9956bda1985b8937d0a75bddf13df
-sig-s 3d4a6eb8f93db576e61adf5a2f63e5c6db2cc5bfbd0cf5da8cbada673d458ca6
+sig-r 8484d44b5904d6b4d01c76ccd9ef0367a7cdd1667ba09e3bfb04af5743de3ca4
+sig-s ed6bd58c7e3a126ddf78f5f9b5745ac7e9f29030350e452c9611837c4bf79c82

+ 2 - 2
Files/Languages/Arabic.isl

@@ -213,7 +213,7 @@ ReadyMemoGroup=مجلد قائمة ابدأ:
 ReadyMemoTasks=مهام إضافية:
 ReadyMemoTasks=مهام إضافية:
 
 
 ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
 ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
-DownloadingLabel=تحميل الملفات الإضافية...
+DownloadingLabel2=تحميل الملفات الإضافية...
 ButtonStopDownload=إي&قاف التحميل
 ButtonStopDownload=إي&قاف التحميل
 StopDownload=هل أنت متأكد من أنك ترغب في إيقاف التحميل؟
 StopDownload=هل أنت متأكد من أنك ترغب في إيقاف التحميل؟
 ErrorDownloadAborted=تم إلغاء التحميل
 ErrorDownloadAborted=تم إلغاء التحميل
@@ -223,7 +223,7 @@ ErrorProgress=تقدم غير صالح: %1 من %2
 ErrorFileSize=حجم الملف غير صالح: المتوقع %1، الموجود %2
 ErrorFileSize=حجم الملف غير صالح: المتوقع %1، الموجود %2
 
 
 ; *** TExtractionWizardPage wizard page and Extract7ZipArchive
 ; *** TExtractionWizardPage wizard page and Extract7ZipArchive
-ExtractionLabel=جاري فك ضغط الملفات الإضافية...
+ExtractingLabel=جاري فك ضغط الملفات الإضافية...
 ButtonStopExtraction=إي&قاف فك الضغط
 ButtonStopExtraction=إي&قاف فك الضغط
 StopExtraction=هل حقا ترغب في إيقاف فك الضغط?
 StopExtraction=هل حقا ترغب في إيقاف فك الضغط?
 ErrorExtractionAborted=تم إيقاف عملية فك الضغط
 ErrorExtractionAborted=تم إيقاف عملية فك الضغط

+ 22 - 5
Files/Languages/German.isl

@@ -1,6 +1,6 @@
 ; ******************************************************
 ; ******************************************************
 ; ***                                                ***
 ; ***                                                ***
-; *** Inno Setup version 6.4.0+ German messages      ***
+; *** Inno Setup version 6.5.0+ German messages      ***
 ; ***                                                ***
 ; ***                                                ***
 ; *** Changes 6.0.0+ Author:                         ***
 ; *** Changes 6.0.0+ Author:                         ***
 ; ***                                                ***
 ; ***                                                ***
@@ -232,24 +232,27 @@ ReadyMemoGroup=Startmenü-Ordner:
 ReadyMemoTasks=Zusätzliche Aufgaben:
 ReadyMemoTasks=Zusätzliche Aufgaben:
 
 
 ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
 ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
-DownloadingLabel=Lade zusätzliche Dateien herunter...
+DownloadingLabel2=Lade Dateien herunter...
 ButtonStopDownload=Download &abbrechen
 ButtonStopDownload=Download &abbrechen
 StopDownload=Sind Sie sicher, dass Sie den Download abbrechen wollen?
 StopDownload=Sind Sie sicher, dass Sie den Download abbrechen wollen?
 ErrorDownloadAborted=Download abgebrochen
 ErrorDownloadAborted=Download abgebrochen
 ErrorDownloadFailed=Download fehlgeschlagen: %1 %2
 ErrorDownloadFailed=Download fehlgeschlagen: %1 %2
 ErrorDownloadSizeFailed=Fehler beim Ermitteln der Größe: %1 %2
 ErrorDownloadSizeFailed=Fehler beim Ermitteln der Größe: %1 %2
-ErrorFileHash1=Fehler beim Ermitteln der Datei-Prüfsumme: %1
-ErrorFileHash2=Ungültige Datei-Prüfsumme: erwartet %1, gefunden %2
 ErrorProgress=Ungültiger Fortschritt: %1 von %2
 ErrorProgress=Ungültiger Fortschritt: %1 von %2
 ErrorFileSize=Ungültige Dateigröße: erwartet %1, gefunden %2
 ErrorFileSize=Ungültige Dateigröße: erwartet %1, gefunden %2
 
 
 ; *** TExtractionWizardPage wizard page and Extract7ZipArchive
 ; *** TExtractionWizardPage wizard page and Extract7ZipArchive
-ExtractionLabel=Entpacke zusätzliche Dateien...
+ExtractingLabel=Entpacke Dateien...
 ButtonStopExtraction=Entpacken &abbrechen
 ButtonStopExtraction=Entpacken &abbrechen
 StopExtraction=Sind Sie sicher, dass Sie das Entpacken abbrechen wollen?
 StopExtraction=Sind Sie sicher, dass Sie das Entpacken abbrechen wollen?
 ErrorExtractionAborted=Entpacken abgebrochen
 ErrorExtractionAborted=Entpacken abgebrochen
 ErrorExtractionFailed=Entpacken fehlgeschlagen: %1
 ErrorExtractionFailed=Entpacken fehlgeschlagen: %1
 
 
+; *** Archive extraction failure details
+ArchiveIncorrectPassword=Ungültiges Passwort
+ArchiveIsCorrupted=Das Archiv ist defekt
+ArchiveUnsupportedFormat=Das Archivformat wird nicht unterstützt
+
 ; *** "Preparing to Install" wizard page
 ; *** "Preparing to Install" wizard page
 WizardPreparing=Vorbereitung der Installation
 WizardPreparing=Vorbereitung der Installation
 PreparingDesc=Das Setup bereitet die Installation von [name] auf diesem Computer vor.
 PreparingDesc=Das Setup bereitet die Installation von [name] auf diesem Computer vor.
@@ -294,11 +297,15 @@ AbortRetryIgnoreSelectAction=Bitte auswählen
 AbortRetryIgnoreRetry=&Nochmals versuchen
 AbortRetryIgnoreRetry=&Nochmals versuchen
 AbortRetryIgnoreIgnore=&Den Fehler ignorieren und fortfahren
 AbortRetryIgnoreIgnore=&Den Fehler ignorieren und fortfahren
 AbortRetryIgnoreCancel=Installation abbrechen
 AbortRetryIgnoreCancel=Installation abbrechen
+RetryCancelSelectAction=Bitte auswählen
+RetryCancelRetry=&Wiederholen
+RetryCancelCancel=&Abbrechen
 
 
 ; *** Installation status messages
 ; *** Installation status messages
 StatusClosingApplications=Anwendungen werden geschlossen ...
 StatusClosingApplications=Anwendungen werden geschlossen ...
 StatusCreateDirs=Ordner werden erstellt ...
 StatusCreateDirs=Ordner werden erstellt ...
 StatusExtractFiles=Dateien werden entpackt ...
 StatusExtractFiles=Dateien werden entpackt ...
+StatusDownloadFiles=Dateien werden herunter geladen...
 StatusCreateIcons=Verknüpfungen werden erstellt ...
 StatusCreateIcons=Verknüpfungen werden erstellt ...
 StatusCreateIniEntries=INI-Einträge werden erstellt ...
 StatusCreateIniEntries=INI-Einträge werden erstellt ...
 StatusCreateRegistryEntries=Registry-Einträge werden erstellt ...
 StatusCreateRegistryEntries=Registry-Einträge werden erstellt ...
@@ -328,6 +335,14 @@ FileAbortRetryIgnoreSkipNotRecommended=Diese Datei &überspringen (nicht empfohl
 FileAbortRetryIgnoreIgnoreNotRecommended=Den Fehler &ignorieren und fortfahren (nicht empfohlen)
 FileAbortRetryIgnoreIgnoreNotRecommended=Den Fehler &ignorieren und fortfahren (nicht empfohlen)
 SourceIsCorrupted=Die Quelldatei ist beschädigt
 SourceIsCorrupted=Die Quelldatei ist beschädigt
 SourceDoesntExist=Die Quelldatei "%1" existiert nicht
 SourceDoesntExist=Die Quelldatei "%1" existiert nicht
+SourceVerificationFailed=Überprüfung der Quelldatei fehlgeschlagen: %1
+VerificationSignatureDoesntExist=Die Signaturdatei "%1" existiert nicht
+VerificationSignatureInvalid=Die Signaturdatei "%1" ist ungültig
+VerificationKeyNotFound=Die Signaturdatei "%1" verwendet einen unbekannten Schlüssel
+VerificationFileNameIncorrect=Der Name der Datei ist ungültig
+VerificationFileTagIncorrect=Der Tag der Datei ist ungültig
+VerificationFileSizeIncorrect=Die Größe der Datei ist ungültig
+VerificationFileHashIncorrect=Der Hashwert der Datei ist ungültig
 ExistingFileReadOnly2=Die vorhandene Datei kann nicht ersetzt werden, da sie schreibgeschützt ist.
 ExistingFileReadOnly2=Die vorhandene Datei kann nicht ersetzt werden, da sie schreibgeschützt ist.
 ExistingFileReadOnlyRetry=&Den Schreibschutz entfernen und noch einmal versuchen
 ExistingFileReadOnlyRetry=&Den Schreibschutz entfernen und noch einmal versuchen
 ExistingFileReadOnlyKeepExisting=Die &vorhandene Datei behalten
 ExistingFileReadOnlyKeepExisting=Die &vorhandene Datei behalten
@@ -346,6 +361,8 @@ ErrorChangingAttr=Fehler beim Ändern der Datei-Attribute:
 ErrorCreatingTemp=Fehler beim Erstellen einer Datei im Ziel-Ordner:
 ErrorCreatingTemp=Fehler beim Erstellen einer Datei im Ziel-Ordner:
 ErrorReadingSource=Fehler beim Lesen der Quelldatei:
 ErrorReadingSource=Fehler beim Lesen der Quelldatei:
 ErrorCopying=Fehler beim Kopieren einer Datei:
 ErrorCopying=Fehler beim Kopieren einer Datei:
+ErrorDownloading=Beim Download der Datei ist ein Fehler aufgetreten:
+ErrorExtracting=Beim Entpacken eines Archivs ist ein Fehler aufgetreten:
 ErrorReplacingExistingFile=Fehler beim Ersetzen einer vorhandenen Datei:
 ErrorReplacingExistingFile=Fehler beim Ersetzen einer vorhandenen Datei:
 ErrorRestartReplace="Ersetzen nach Neustart" fehlgeschlagen:
 ErrorRestartReplace="Ersetzen nach Neustart" fehlgeschlagen:
 ErrorRenamingTemp=Fehler beim Umbenennen einer Datei im Ziel-Ordner:
 ErrorRenamingTemp=Fehler beim Umbenennen einer Datei im Ziel-Ordner:

+ 28 - 13
Files/Languages/Polish.isl

@@ -1,8 +1,8 @@
-; *** Inno Setup version 6.4.0+ Polish messages ***
+; *** Inno Setup version 6.5.0+ Polish messages ***
+; Proofreading, corrections and 5.5.7-6.5.0+ updates:
+; Łukasz Abramczuk <lukasz.abramczuk at gmail.com>
 ; Original translations up to 5.5.7:
 ; Original translations up to 5.5.7:
 ; Krzysztof Cynarski <krzysztof at cynarski.net>
 ; Krzysztof Cynarski <krzysztof at cynarski.net>
-; Proofreading, corrections and 5.5.7-6.4.0+ updates:
-; Łukasz Abramczuk <lukasz.abramczuk at gmail.com>
 ; To download user-contributed translations of this file, go to:
 ; To download user-contributed translations of this file, go to:
 ;   https://jrsoftware.org/files/istrans/
 ;   https://jrsoftware.org/files/istrans/
 ;
 ;
@@ -10,11 +10,9 @@
 ; messages that didn't have them already, because on those messages Inno
 ; messages that didn't have them already, because on those messages Inno
 ; Setup adds the periods automatically (appending a period would result in
 ; Setup adds the periods automatically (appending a period would result in
 ; two periods being displayed).
 ; two periods being displayed).
-; last update: 2020/07/26 
+; last update: 2025/06/23 
 
 
 [LangOptions]
 [LangOptions]
-; The following three entries are very important. Be sure to read and 
-; understand the '[LangOptions] section' topic in the help file.
 LanguageName=Polski
 LanguageName=Polski
 LanguageID=$0415
 LanguageID=$0415
 LanguageCodePage=1250
 LanguageCodePage=1250
@@ -57,7 +55,7 @@ PowerUserPrivilegesRequired=Aby przeprowadzić instalację tej aplikacji, konto
 SetupAppRunningError=Instalator wykrył, iż aplikacja %1 jest aktualnie uruchomiona.%n%nPrzed wciśnięciem przycisku OK zamknij wszystkie procesy aplikacji. Kliknij przycisk Anuluj, aby przerwać instalację.
 SetupAppRunningError=Instalator wykrył, iż aplikacja %1 jest aktualnie uruchomiona.%n%nPrzed wciśnięciem przycisku OK zamknij wszystkie procesy aplikacji. Kliknij przycisk Anuluj, aby przerwać instalację.
 UninstallAppRunningError=Dezinstalator wykrył, iż aplikacja %1 jest aktualnie uruchomiona.%n%nPrzed wciśnięciem przycisku OK zamknij wszystkie procesy aplikacji. Kliknij przycisk Anuluj, aby przerwać dezinstalację.
 UninstallAppRunningError=Dezinstalator wykrył, iż aplikacja %1 jest aktualnie uruchomiona.%n%nPrzed wciśnięciem przycisku OK zamknij wszystkie procesy aplikacji. Kliknij przycisk Anuluj, aby przerwać dezinstalację.
 
 
-; *** Startup questions	 ---
+; *** Startup questions
 PrivilegesRequiredOverrideTitle=Wybierz typ instalacji aplikacji
 PrivilegesRequiredOverrideTitle=Wybierz typ instalacji aplikacji
 PrivilegesRequiredOverrideInstruction=Wybierz typ instalacji
 PrivilegesRequiredOverrideInstruction=Wybierz typ instalacji
 PrivilegesRequiredOverrideText1=Aplikacja %1 może zostać zainstalowana dla wszystkich użytkowników (wymagane są uprawnienia administratora) lub tylko dla bieżącego użytkownika.
 PrivilegesRequiredOverrideText1=Aplikacja %1 może zostać zainstalowana dla wszystkich użytkowników (wymagane są uprawnienia administratora) lub tylko dla bieżącego użytkownika.
@@ -78,7 +76,7 @@ AboutSetupMenuItem=&O instalatorze...
 AboutSetupTitle=O instalatorze
 AboutSetupTitle=O instalatorze
 AboutSetupMessage=%1 wersja %2%n%3%n%n Strona domowa %1:%n%4
 AboutSetupMessage=%1 wersja %2%n%3%n%n Strona domowa %1:%n%4
 AboutSetupNote=
 AboutSetupNote=
-TranslatorNote=Wersja polska: Krzysztof Cynarski%n<krzysztof at cynarski.net>%nOd wersji 5.5.7: Łukasz Abramczuk%n<lukasz.abramczuk at gmail.com>
+TranslatorNote=Wersja polska: %nŁukasz Abramczuk <lukasz.abramczuk at gmail.com>%nKrzysztof Cynarski <krzysztof at cynarski.net>
 
 
 ; *** Buttons
 ; *** Buttons
 ButtonBack=< &Wstecz
 ButtonBack=< &Wstecz
@@ -205,24 +203,27 @@ ReadyMemoGroup=Folder w Menu Start:
 ReadyMemoTasks=Dodatkowe zadania:
 ReadyMemoTasks=Dodatkowe zadania:
 
 
 ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
 ; *** TDownloadWizardPage wizard page and DownloadTemporaryFile
-DownloadingLabel=Pobieranie dodatkowych plików...
+DownloadingLabel2=Pobieranie plików...
 ButtonStopDownload=&Zatrzymaj pobieranie
 ButtonStopDownload=&Zatrzymaj pobieranie
 StopDownload=Czy na pewno chcesz zatrzymać pobieranie?
 StopDownload=Czy na pewno chcesz zatrzymać pobieranie?
 ErrorDownloadAborted=Pobieranie przerwane
 ErrorDownloadAborted=Pobieranie przerwane
 ErrorDownloadFailed=Błąd pobierania: %1 %2
 ErrorDownloadFailed=Błąd pobierania: %1 %2
 ErrorDownloadSizeFailed=Pobieranie informacji o rozmiarze nie powiodło się: %1 %2
 ErrorDownloadSizeFailed=Pobieranie informacji o rozmiarze nie powiodło się: %1 %2
-ErrorFileHash1=Błąd sumy kontrolnej pliku: %1
-ErrorFileHash2=Nieprawidłowa suma kontrolna pliku: oczekiwano %1, otrzymano %2
 ErrorProgress=Nieprawidłowy postęp: %1 z %2
 ErrorProgress=Nieprawidłowy postęp: %1 z %2
 ErrorFileSize=Nieprawidłowy rozmiar pliku: oczekiwano %1, otrzymano %2
 ErrorFileSize=Nieprawidłowy rozmiar pliku: oczekiwano %1, otrzymano %2
 
 
-; *** TExtractionWizardPage wizard page and Extract7ZipArchive
-ExtractionLabel=Wypakowywanie dodatkowych plików...
+; *** TExtractionWizardPage wizard page and ExtractArchive
+ExtractingLabel=Wypakowywanie plików...
 ButtonStopExtraction=&Zatrzymaj wypakowywanie
 ButtonStopExtraction=&Zatrzymaj wypakowywanie
 StopExtraction=Azy na pewno chcesz zatrzymać wypakowywanie?
 StopExtraction=Azy na pewno chcesz zatrzymać wypakowywanie?
 ErrorExtractionAborted=Wypakowywanie przerwane
 ErrorExtractionAborted=Wypakowywanie przerwane
 ErrorExtractionFailed=Błąd wypakowywania: %1
 ErrorExtractionFailed=Błąd wypakowywania: %1
 
 
+; *** Archive extraction failure details
+ArchiveIncorrectPassword=Nieprawidłowe hasło
+ArchiveIsCorrupted=Archiwum jest uszkodzone
+ArchiveUnsupportedFormat=Format archiwum nie jest wspierany
+
 ; *** "Preparing to Install" wizard page
 ; *** "Preparing to Install" wizard page
 WizardPreparing=Przygotowanie do instalacji
 WizardPreparing=Przygotowanie do instalacji
 PreparingDesc=Instalator przygotowuje instalację aplikacji [name] na komputerze.
 PreparingDesc=Instalator przygotowuje instalację aplikacji [name] na komputerze.
@@ -267,11 +268,15 @@ AbortRetryIgnoreSelectAction=Wybierz operację
 AbortRetryIgnoreRetry=Spróbuj &ponownie
 AbortRetryIgnoreRetry=Spróbuj &ponownie
 AbortRetryIgnoreIgnore=Z&ignoruj błąd i kontynuuj
 AbortRetryIgnoreIgnore=Z&ignoruj błąd i kontynuuj
 AbortRetryIgnoreCancel=Przerwij instalację
 AbortRetryIgnoreCancel=Przerwij instalację
+RetryCancelSelectAction=Wybierz operację
+RetryCancelRetry=Spróbuj &ponownie
+RetryCancelCancel=Anuluj
 
 
 ; *** Installation status messages
 ; *** Installation status messages
 StatusClosingApplications=Zamykanie aplikacji...
 StatusClosingApplications=Zamykanie aplikacji...
 StatusCreateDirs=Tworzenie folderów...
 StatusCreateDirs=Tworzenie folderów...
 StatusExtractFiles=Dekompresja plików...
 StatusExtractFiles=Dekompresja plików...
+StatusDownloadFiles=Pobieranie plików...
 StatusCreateIcons=Tworzenie skrótów aplikacji...
 StatusCreateIcons=Tworzenie skrótów aplikacji...
 StatusCreateIniEntries=Tworzenie zapisów w plikach INI...
 StatusCreateIniEntries=Tworzenie zapisów w plikach INI...
 StatusCreateRegistryEntries=Tworzenie zapisów w rejestrze...
 StatusCreateRegistryEntries=Tworzenie zapisów w rejestrze...
@@ -301,6 +306,14 @@ FileAbortRetryIgnoreSkipNotRecommended=&Pomiń plik (niezalecane)
 FileAbortRetryIgnoreIgnoreNotRecommended=Z&ignoruj błąd i kontynuuj (niezalecane)
 FileAbortRetryIgnoreIgnoreNotRecommended=Z&ignoruj błąd i kontynuuj (niezalecane)
 SourceIsCorrupted=Plik źródłowy jest uszkodzony
 SourceIsCorrupted=Plik źródłowy jest uszkodzony
 SourceDoesntExist=Plik źródłowy "%1" nie istnieje
 SourceDoesntExist=Plik źródłowy "%1" nie istnieje
+SourceVerificationFailed=Weryfikacja pliku źródłowego nie powiodła się: %1
+VerificationSignatureDoesntExist=Plik podpisu "%1" nie istnieje
+VerificationSignatureInvalid=Plik podpisu "%1" jest nieprawidłowy
+VerificationKeyNotFound=Plik podpisu "%1" wykorzystuje nieznany klucz
+VerificationFileNameIncorrect=Nazwa pliku jest nieprawidłowa
+VerificationFileTagIncorrect=Etykieta pliku jest nieprawidłowa
+VerificationFileSizeIncorrect=Rozmiar pliku jest nieprawidłowy
+VerificationFileHashIncorrect=Suma kontrolna pliku jest nieprawidłowa
 ExistingFileReadOnly2=Istniejący plik nie może zostać zastąpiony, gdyż jest oznaczony jako "Tylko do odczytu".
 ExistingFileReadOnly2=Istniejący plik nie może zostać zastąpiony, gdyż jest oznaczony jako "Tylko do odczytu".
 ExistingFileReadOnlyRetry=&Usuń atrybut "Tylko do odczytu" i spróbuj ponownie
 ExistingFileReadOnlyRetry=&Usuń atrybut "Tylko do odczytu" i spróbuj ponownie
 ExistingFileReadOnlyKeepExisting=&Zachowaj istniejący plik
 ExistingFileReadOnlyKeepExisting=&Zachowaj istniejący plik
@@ -319,6 +332,8 @@ ErrorChangingAttr=Wystąpił błąd podczas próby zmiany atrybutów pliku docel
 ErrorCreatingTemp=Wystąpił błąd podczas próby utworzenia pliku w folderze docelowym:
 ErrorCreatingTemp=Wystąpił błąd podczas próby utworzenia pliku w folderze docelowym:
 ErrorReadingSource=Wystąpił błąd podczas próby odczytu pliku źródłowego:
 ErrorReadingSource=Wystąpił błąd podczas próby odczytu pliku źródłowego:
 ErrorCopying=Wystąpił błąd podczas próby kopiowania pliku:
 ErrorCopying=Wystąpił błąd podczas próby kopiowania pliku:
+ErrorDownloading=Wystąpił błąd podczas próby pobrania pliku:
+ErrorExtracting=Wystąpił błąd podczas próby wypakowywania archiwum:
 ErrorReplacingExistingFile=Wystąpił błąd podczas próby zamiany istniejącego pliku:
 ErrorReplacingExistingFile=Wystąpił błąd podczas próby zamiany istniejącego pliku:
 ErrorRestartReplace=Próba zastąpienia plików przy ponownym uruchomieniu komputera nie powiodła się.
 ErrorRestartReplace=Próba zastąpienia plików przy ponownym uruchomieniu komputera nie powiodła się.
 ErrorRenamingTemp=Wystąpił błąd podczas próby zmiany nazwy pliku w folderze docelowym:
 ErrorRenamingTemp=Wystąpił błąd podczas próby zmiany nazwy pliku w folderze docelowym:

+ 1 - 1
Files/Languages/Slovenian.isl

@@ -1,4 +1,4 @@
-; *** Inno Setup version 6.4.0+ Slovenian messages ***
+; *** Inno Setup version 6.5.0+ Slovenian messages ***
 ;
 ;
 ; To download user-contributed translations of this file, go to:
 ; To download user-contributed translations of this file, go to:
 ;   http://www.jrsoftware.org/is3rdparty.php
 ;   http://www.jrsoftware.org/is3rdparty.php

+ 3 - 2
Files/is7z.dll.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "is7z.dll"
 file-name "is7z.dll"
 file-size 992912
 file-size 992912
 file-hash 74081e3749ab6f833618c4a9efbb75537a4e68e6e0579a7b43270a38224dcb66
 file-hash 74081e3749ab6f833618c4a9efbb75537a4e68e6e0579a7b43270a38224dcb66
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r 8a2fc6735ee531c609e8a42a6066082964146303014e2fb531f9ef7be4cbc7cd
-sig-s 18d2b1a76ac430bda8b45d3430084df49776ad572cc884ca041e0d8cf26276c6
+sig-r 40054b783763d5bbb8d7534e5003d7bf5b48614b4898434d6d47746ed0df331e
+sig-s 721deb874c67378e0d700f81e4a35bdb2d179c706965ca132c6647235c0ccb94

+ 3 - 2
Files/is7zxa.dll.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "is7zxa.dll"
 file-name "is7zxa.dll"
 file-size 256656
 file-size 256656
 file-hash 930152b344518fe0a15592269d432c4433b675bbb898213b6c13d8e526d51edd
 file-hash 930152b344518fe0a15592269d432c4433b675bbb898213b6c13d8e526d51edd
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r bbfca4a72f28d37760e75e270e6f3019dc2702e665d97584b0afcd0b76b8ad60
-sig-s a7b5be3e031dd78e3ce7f90630ebf51fb6e27e4b47ac564db9dc818827f3023d
+sig-r 206682fe23fb5427d450483a36e8c805af1f6d1cfee7cb97986613b4eddb8ad3
+sig-s 801ddcfcd1899d5be2cf1a5363a4c0e9a6eb013cec9de98721050baf671f9fe8

+ 3 - 2
Files/is7zxr.dll.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "is7zxr.dll"
 file-name "is7zxr.dll"
 file-size 208016
 file-size 208016
 file-hash a73acb58b85cce5cb686df5409eb18643797c44ed1820a32d092b20146ad1f6c
 file-hash a73acb58b85cce5cb686df5409eb18643797c44ed1820a32d092b20146ad1f6c
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r 1d0a3c4b863b4290c60b4af709909e0f4c8a109096c315ce5062d050e0c254fc
-sig-s 672acfb5b9a826c50e39a1607dc0c04647aaef75e9ee93113839fd179f64d009
+sig-r f26fdaace9ccda59ab06fa4487889e495704781b82f164d80ed435d64568366d
+sig-s cd1bc85cd709c8887c3c4e537da80895b982dca2bf8ede3e30c2a4f8fc7b49c3

+ 3 - 2
Files/isbunzip.dll.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "isbunzip.dll"
 file-name "isbunzip.dll"
 file-size 35616
 file-size 35616
 file-hash 31d04c1e4bfdfa34704c142fa98f80c0a3076e4b312d6ada57c4be9d9c7dcf26
 file-hash 31d04c1e4bfdfa34704c142fa98f80c0a3076e4b312d6ada57c4be9d9c7dcf26
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r 6c4817d6d038737484fb61c62f8b7c7d6aa6beeb5670c11b5f8d6ae42dd6b4cf
-sig-s c62ef533b240cdba85350f01f9369e7cebfc8b30e2d83e15d2fef9302ba4861b
+sig-r c8484eb8243dbe175bbdc8cdc24b4db1fc57d5a773447d615b715860825fd07a
+sig-s 22fb16e9f29f6060ddfe0c6356dbc0656b78c81d7f92eac943a50a09262d95aa

+ 3 - 2
Files/isbzip.dll.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "isbzip.dll"
 file-name "isbzip.dll"
 file-size 39200
 file-size 39200
 file-hash 8072e83385afc4a84006271a87a11fc0a22b149cbd77322669ca56c470d28ced
 file-hash 8072e83385afc4a84006271a87a11fc0a22b149cbd77322669ca56c470d28ced
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r 7d093d4fce5875c77a9ce077596c26bd1a06ff15f2795c59c0ccb2403f1081f9
-sig-s b1f7738c3e21f627748185d59132e926bb1519940249bb579c316449aefbcb89
+sig-r de7a5822a1a55de4f573805afd57b1993ac58c5058c63a69ed4ab70c2c199c70
+sig-s 93655f90f7435ec0ec772cea9ac73a0dbf7e842107bb610e6107086578fc3f4c

+ 3 - 2
Files/islzma.dll.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "islzma.dll"
 file-name "islzma.dll"
 file-size 135816
 file-size 135816
 file-hash b252471e95f0853902b15ae71a90574f9b168f8d4a0c474b20537511f90220a5
 file-hash b252471e95f0853902b15ae71a90574f9b168f8d4a0c474b20537511f90220a5
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r e9202d1a1e43b43b44bf6187c0709b8ca461934499941e147f24f6b123ac9b62
-sig-s baa08eede390e0c152dd1b238b74aa91e057cad50be7a2eab76721d0c658c9b0
+sig-r fb93b45c8a032554fc65903776ab7783f95fe3c3603524c61163bae253958de4
+sig-s fdf1ed2c94a64b415896d28ac6e8b41a9a0cb16cc8d372e1d7be76445b5bc600

+ 3 - 2
Files/islzma32.exe.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "islzma32.exe"
 file-name "islzma32.exe"
 file-size 199304
 file-size 199304
 file-hash 5665e03297af04d4f90423b56e8b016b2924d91ba781573036b710044e843f0a
 file-hash 5665e03297af04d4f90423b56e8b016b2924d91ba781573036b710044e843f0a
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r 6c4aec258115243eacd7db49103ce1772c489cf7bc4c9931f095745203387f61
-sig-s 37e3f126dece0547de4f0cc810b5a84984fbd325a6a030e911d1c1eff6c6ed03
+sig-r a47b07dfa78c7845821a5c4122cb177d7c0e4e4ace9fe8d53564b7756ecbc598
+sig-s 0674b22927c82a6386d2eef2da7d20df12bed627dce36021ff5e6cf2933566da

+ 3 - 2
Files/islzma64.exe.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "islzma64.exe"
 file-name "islzma64.exe"
 file-size 230536
 file-size 230536
 file-hash b0ad1857da7fb94b54988c7633578dc057b51cf921b94f6f2f7b57a113310712
 file-hash b0ad1857da7fb94b54988c7633578dc057b51cf921b94f6f2f7b57a113310712
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r 6ffd0494e423b05ca1358fa9717591ce43ce4d43467d6ca0cc581fde426cef15
-sig-s 26e70aaa5db22b8d7261a837405dc61083593dfb864ccef0bd0eac3223abeb60
+sig-r 299c59b267ab06a38beb9ab28e0cfc001914bcf68495611fae73b06259981192
+sig-s 8cecbd5dcc971b603c56b937cf35859c0669883a417776c8bf5cbeacb4f70e3a

+ 3 - 2
Files/isscint.dll.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "isscint.dll"
 file-name "isscint.dll"
 file-size 809616
 file-size 809616
 file-hash 1a837b73d60a4d98060e8129a8da0b27e25445a2ee8f03b0118b0ec6213172b5
 file-hash 1a837b73d60a4d98060e8129a8da0b27e25445a2ee8f03b0118b0ec6213172b5
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r 4f4093af223ba477bd768ba65b61017f009f1f20bf9fceccae358d5e5675ced0
-sig-s 0d5b283181342e44d49c0363706355432526400211585d69ea3b14d743b26efd
+sig-r 30a54774e3d7773970349a0e9b54a124268b07780881a6f03274017c04c32e17
+sig-s f81d47fbc2472ee2e4e70cafba078093430e7c7226d357a335ccce002cb1d6bf

+ 3 - 2
Files/isunzlib.dll.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "isunzlib.dll"
 file-name "isunzlib.dll"
 file-size 29472
 file-size 29472
 file-hash 8287d0e287a66ee78537c8d1d98e426562b95c50f569b92cea9ce36a9fa57e64
 file-hash 8287d0e287a66ee78537c8d1d98e426562b95c50f569b92cea9ce36a9fa57e64
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r bef7420079e4b440739822dcc03031489e90e017ca17763627b75a3639910610
-sig-s e835d7ea5bc6fa9b0ef55377f01d276040b78708206bf875c6f7ed69f5ca2139
+sig-r 38b503247b387939c50c45e4a84f9abcc6e1486b48a9166edd28652faced77fd
+sig-s 0eeee06d93c4bc69ecd88f9a058630007703ea285a36444a57056f3f532cb872

+ 3 - 2
Files/iszlib.dll.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "iszlib.dll"
 file-name "iszlib.dll"
 file-size 34592
 file-size 34592
 file-hash 14c0d4a2a41572384f8309cdf03de5c6e7ed46bef64cce70d989b2665eff1a47
 file-hash 14c0d4a2a41572384f8309cdf03de5c6e7ed46bef64cce70d989b2665eff1a47
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r 590d17da6ab0782ce599550c483446fdd5bae5eb16dd8bd912d4ce61ef8b4a3e
-sig-s c745f5d6cb756f02ecac092cd48bff47a79b37c2bd05de292dd592642ac76a7e
+sig-r d31c63bffb15dc179f8c589cf956a08967e312f58f268dea451ff8dcc609c108
+sig-s 63aff5169ca160ac3af6fe4b1ab6b03897cc3072dc9ab4f460592c92c106ddfa

+ 4 - 0
ISHelp/isetup.xml

@@ -3836,6 +3836,10 @@ issigtool verify "MyFile.txt"
 <td>Specifies the private key filename required for signing. This option overrides the <tt>ISSIGTOOL_KEY_FILE</tt> environment variable which can also be used.</td>
 <td>Specifies the private key filename required for signing. This option overrides the <tt>ISSIGTOOL_KEY_FILE</tt> environment variable which can also be used.</td>
 </tr>
 </tr>
 <tr>
 <tr>
+<td>--allow-overwrite, -o</td>
+<td>Allow to overwrite existing files.</td>
+</tr>
+<tr>
 <td>--quiet, -q</td>
 <td>--quiet, -q</td>
 <td>Suppresses status messages that are normally printed to standard output.</td>
 <td>Suppresses status messages that are normally printed to standard output.</td>
 </tr>
 </tr>

+ 1 - 3
Projects/Bin/Debug.iss

@@ -15,9 +15,7 @@ AppName=ɯɐɹƃoɹd ʎɯ
 AppVerName=My Program version 1.5
 AppVerName=My Program version 1.5
 DefaultDirName={autopf}\My Program
 DefaultDirName={autopf}\My Program
 AppVersion=1.2.3
 AppVersion=1.2.3
-; The following four lines make the output debuggable from the Setup project
-; If you put them in any example script you can debug that example as well
-UseSetupLdr=0
+UseSetupLdr=no
 OutputDir={#CompilerPath}
 OutputDir={#CompilerPath}
 OutputBaseFilename=Setup
 OutputBaseFilename=Setup
 PrivilegesRequired=lowest
 PrivilegesRequired=lowest

+ 1 - 1
Projects/Bin/LzmaSpeedTest.iss

@@ -5,7 +5,7 @@ AppName=My Program
 AppVerName=My Program version 1.5
 AppVerName=My Program version 1.5
 #define DefaultDirName "{autopf}\My Program"
 #define DefaultDirName "{autopf}\My Program"
 DefaultDirName={#DefaultDirName}
 DefaultDirName={#DefaultDirName}
-UseSetupLdr=0
+UseSetupLdr=no
 OutputDir=.
 OutputDir=.
 AppVersion=1.2.3
 AppVersion=1.2.3
 OutputBaseFilename=Setup
 OutputBaseFilename=Setup

+ 12 - 8
Projects/ISSigTool.dpr

@@ -34,7 +34,7 @@ uses
 var
 var
   Options: record
   Options: record
     KeyFile: String;
     KeyFile: String;
-    Quiet: Boolean;
+    AllowOverwrite, Quiet: Boolean;
   end;
   end;
 
 
   StdOutHandle, StdErrHandle: THandle;
   StdOutHandle, StdErrHandle: THandle;
@@ -122,8 +122,6 @@ end;
 
 
 procedure CommandExportPublicKey(const AFilename: String);
 procedure CommandExportPublicKey(const AFilename: String);
 begin
 begin
-  PrintFmtUnlessQuiet('%s: ', [AFilename], False);
-
   const Key = TECDSAKey.Create;
   const Key = TECDSAKey.Create;
   try
   try
     ImportKey(Key, False);
     ImportKey(Key, False);
@@ -132,14 +130,17 @@ begin
     ISSigExportPublicKeyText(Key, PublicKeyText);
     ISSigExportPublicKeyText(Key, PublicKeyText);
 
 
     if NewFileExists(AFilename) then begin
     if NewFileExists(AFilename) then begin
-      const ExistingPublicKeyText = ISSigLoadTextFromFile(AFilename);
-      if ExistingPublicKeyText = PublicKeyText then begin
+      const ExistingText = ISSigLoadTextFromFile(AFilename);
+      if ExistingText = PublicKeyText then begin
+        PrintFmtUnlessQuiet('%s: ', [AFilename], False);
         PrintUnlessQuiet('public key unchanged');
         PrintUnlessQuiet('public key unchanged');
         Exit;
         Exit;
-      end;
+      end else if not Options.AllowOverwrite then
+        RaiseFatalError('File already exists');
     end;
     end;
 
 
     ISSigSaveTextToFile(AFilename, PublicKeyText);
     ISSigSaveTextToFile(AFilename, PublicKeyText);
+    PrintFmtUnlessQuiet('%s: ', [AFilename], False);
     PrintUnlessQuiet('public key written');
     PrintUnlessQuiet('public key written');
   finally
   finally
     Key.Free;
     Key.Free;
@@ -148,8 +149,8 @@ end;
 
 
 procedure CommandGeneratePrivateKey;
 procedure CommandGeneratePrivateKey;
 begin
 begin
-  if NewFileExists(Options.KeyFile) then
-    RaiseFatalError('Key file already exists');
+  if not Options.AllowOverwrite and NewFileExists(Options.KeyFile) then
+    RaiseFatalError('File already exists');
 
 
   PrintFmtUnlessQuiet('%s: ', [Options.KeyFile], False);
   PrintFmtUnlessQuiet('%s: ', [Options.KeyFile], False);
 
 
@@ -302,6 +303,7 @@ begin
   PrintErrOutput('or to generate a new private key:  issigtool [options] generate-private-key');
   PrintErrOutput('or to generate a new private key:  issigtool [options] generate-private-key');
   PrintErrOutput('Options:');
   PrintErrOutput('Options:');
   PrintErrOutput('  --key-file=<filename> Specifies the private key filename (overrides ISSIGTOOL_KEY_FILE environment variable)');
   PrintErrOutput('  --key-file=<filename> Specifies the private key filename (overrides ISSIGTOOL_KEY_FILE environment variable)');
+  PrintErrOutput('  --allow-overwrite, -o Allow to overwrite existing files');
   PrintErrOutput('  --quiet, -q           Suppresses status messages that are normally printed to standard output');
   PrintErrOutput('  --quiet, -q           Suppresses status messages that are normally printed to standard output');
   PrintErrOutput('  --help, -?            Prints this information');
   PrintErrOutput('  --help, -?            Prints this information');
   PrintErrOutput('');
   PrintErrOutput('');
@@ -324,6 +326,8 @@ begin
           if InitialArgListCount <> 1 then
           if InitialArgListCount <> 1 then
             RaiseFatalErrorFmt('"%s" option cannot be combined with other arguments', [S]);
             RaiseFatalErrorFmt('"%s" option cannot be combined with other arguments', [S]);
           Exit;
           Exit;
+        end else if (S = '--allow-overwrite') or (S = '-o') then begin
+          Options.AllowOverwrite := True;
         end else if (S = '--quiet') or (S = '-q') then begin
         end else if (S = '--quiet') or (S = '-q') then begin
           Options.Quiet := True;
           Options.Quiet := True;
         end else if S.StartsWith('--key-file=') then begin
         end else if S.StartsWith('--key-file=') then begin

+ 3 - 2
Projects/Src/Compression.LZMA1SmallDecompressor/LzmaDecode/LzmaDecodeInno.obj.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "LzmaDecodeInno.obj"
 file-name "LzmaDecodeInno.obj"
 file-size 8111
 file-size 8111
 file-hash 25a946de5cd685e1b010293665ee04eaa24ac9a345a31afaa82217e273459b2c
 file-hash 25a946de5cd685e1b010293665ee04eaa24ac9a345a31afaa82217e273459b2c
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r f6485228a0d808247279e2a353749a009fe9fb8db1bb317d4fee446fb8c59528
-sig-s 360700779e90850e42d67d0962cc8ff6debbd532f7eec8003cb20fcf0c823b51
+sig-r 1a77103c322f9f685e91939ae2ca044dd8bff48c03d21fb5c31168f21690717b
+sig-s e31ebb23dc8ede2802fa649f634f9fe625bae2a4fb5a741b5375ed13f7cda3ca

+ 3 - 2
Projects/Src/Compression.LZMADecompressor/Lzma2Decode/ISLzmaDec.obj.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "ISLzmaDec.obj"
 file-name "ISLzmaDec.obj"
 file-size 21751
 file-size 21751
 file-hash 79bb11fbe0b862b6a42af2db4664748daa54347d56b3c40998dcb860111195ac
 file-hash 79bb11fbe0b862b6a42af2db4664748daa54347d56b3c40998dcb860111195ac
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r d183a61aaf8de0b72176e9dd613cc568371866be46683d0b47953794879c6db2
-sig-s ae48b841c532c852fc985d9fe95ae030fe4220735c53eb8d7d9374922a364636
+sig-r 5653a50fed00f5783a88a9b6bc9ada2bd9a74f0dd7ee1ccd61e58724d8d61ec8
+sig-s 8a4c67e578e990061a56abbaf03e39464c44494a136eb2899f430d944eeeb0ee

+ 7 - 7
Projects/Src/Compression.SevenZipDecoder/7zDecode/IS7zDec.c

@@ -7,7 +7,7 @@
 
 
 #include "../../../../Components/Lzma2/Util/7z/Precomp.h" /* Says it must be included first */
 #include "../../../../Components/Lzma2/Util/7z/Precomp.h" /* Says it must be included first */
 
 
-/* Stop 7-Zip from directly creating files and directories. This will enable us to perform
+/* Stop 7-Zip from directly opening files and directories. This will enable us to perform
    extra checks from a cdecl implementation in Delphi. */
    extra checks from a cdecl implementation in Delphi. */
 
 
 #include "../../../../Components/Lzma2/7zWindows.h"
 #include "../../../../Components/Lzma2/7zWindows.h"
@@ -21,6 +21,12 @@ HANDLE _CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode,
 HANDLE _CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
 HANDLE _CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);
 #define CreateFileW _CreateFileW
 #define CreateFileW _CreateFileW
 
 
+DWORD _GetFileAttributesW(LPCWSTR lpFileName);
+#define GetFileAttributesW _GetFileAttributesW
+
+BOOL _SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes);
+#define SetFileAttributesW _SetFileAttributesW
+
 #ifdef _MSC_VER
 #ifdef _MSC_VER
 
 
 /* MSVC only:
 /* MSVC only:
@@ -39,12 +45,6 @@ DWORD _GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh);
 BOOL _ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);
 BOOL _ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped);
 #define ReadFile _ReadFile
 #define ReadFile _ReadFile
 
 
-DWORD _GetFileAttributesW(LPCWSTR lpFileName);
-#define GetFileAttributesW _GetFileAttributesW
-
-BOOL _SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes);
-#define SetFileAttributesW _SetFileAttributesW
-
 DWORD _SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod);
 DWORD _SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod);
 #define SetFilePointer _SetFilePointer
 #define SetFilePointer _SetFilePointer
 
 

+ 3 - 2
Projects/Src/Compression.SevenZipDecoder/7zDecode/IS7zDec.obj.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "IS7zDec.obj"
 file-name "IS7zDec.obj"
 file-size 93886
 file-size 93886
 file-hash 43ef412680232ecf42556737b7ea1c341f8134e64bf0b36932458e97d569d7c5
 file-hash 43ef412680232ecf42556737b7ea1c341f8134e64bf0b36932458e97d569d7c5
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r b3ecb3cf5bbf3c5feded032817f2821df7d845b690f67572584342f9c4f7ab95
-sig-s bd4b2d56fe4133866bc3466acd533eb6972cee09553963a0a35f2e630d389704
+sig-r 46004c60d2d7e59202b263a1798b429523898152c2b0543513efc98cb82539c7
+sig-s 41cee9e379f13152982b0d0c4a6e70751db45953c0065bca97d11c092e50c6dd

+ 3 - 2
Projects/Src/Setup.HelperEXEs.res.issig

@@ -2,6 +2,7 @@ format issig-v2
 file-name "Setup.HelperEXEs.res"
 file-name "Setup.HelperEXEs.res"
 file-size 6240
 file-size 6240
 file-hash 0c384c152e4686c6a6a1dbdb1376f9076baa13ad7d6db9891745187f8212f393
 file-hash 0c384c152e4686c6a6a1dbdb1376f9076baa13ad7d6db9891745187f8212f393
+file-tag ""
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
 key-id def0147c3bbc17ab99bf7b7a9c2de1390283f38972152418d7c2a4a7d7131a38
-sig-r 0c69711682123f852b3690a952743f283386d3f79f8a8131193acddb054eff14
-sig-s 425cbce2b075dc68d91b51b180fe3dfdce5d8e42d803968005b9be57cecdaa11
+sig-r 93be1ec6ebd074680006fee978f498e4f13c566b647dbbef423dbda8827b3693
+sig-s 76afb50649b52ed5ce3200c56909b3f2f905473d781fc3f3f461775f43700cad

+ 17 - 21
Projects/Src/Setup.WizardForm.pas

@@ -1823,6 +1823,17 @@ end;
 
 
 function TWizardForm.PrepareToInstall(const WizardComponents, WizardTasks: TStringList): String;
 function TWizardForm.PrepareToInstall(const WizardComponents, WizardTasks: TStringList): String;
 
 
+  procedure ShowPreparing;
+  begin
+    SetCurPage(wpPreparing);
+    BackButton.Visible := False;
+    NextButton.Visible := False;
+    CancelButton.Enabled := False;
+    if InstallMode = imSilent then
+      WizardForm.Visible := True;
+    WizardForm.Update;
+  end;
+
   function GetClearedDownloadArchivesPage: TDownloadWizardPage;
   function GetClearedDownloadArchivesPage: TDownloadWizardPage;
   begin
   begin
     if FDownloadArchivesPage = nil then begin
     if FDownloadArchivesPage = nil then begin
@@ -1894,6 +1905,7 @@ function TWizardForm.PrepareToInstall(const WizardComponents, WizardTasks: TStri
     end;
     end;
 
 
     if DownloadPage <> nil then begin
     if DownloadPage <> nil then begin
+      ShowPreparing;
       DownloadPage.Show;
       DownloadPage.Show;
       try
       try
         var Failed, LastBaseNameOrUrl: String;
         var Failed, LastBaseNameOrUrl: String;
@@ -1928,21 +1940,11 @@ function TWizardForm.PrepareToInstall(const WizardComponents, WizardTasks: TStri
           raise Exception.Create(Failed);
           raise Exception.Create(Failed);
       finally
       finally
         DownloadPage.Hide;
         DownloadPage.Hide;
+        UpdateCurPageButtonState;
       end;
       end;
     end;
     end;
   end;
   end;
 
 
-  procedure ShowPreparing;
-  begin
-    SetCurPage(wpPreparing);
-    BackButton.Visible := False;
-    NextButton.Visible := False;
-    CancelButton.Enabled := False;
-    if InstallMode = imSilent then
-      WizardForm.Visible := True;
-    WizardForm.Update;
-  end;
-
 var
 var
   CodeNeedsRestart: Boolean;
   CodeNeedsRestart: Boolean;
   Y: Integer;
   Y: Integer;
@@ -1956,12 +1958,7 @@ begin
   PreparingMemo.Visible := False;
   PreparingMemo.Visible := False;
 
 
   try
   try
-    ShowPreparing;
-    try
-      DownloadArchivesToExtract(WizardComponents, WizardTasks);
-    finally
-      UpdateCurPageButtonState;
-    end;
+    DownloadArchivesToExtract(WizardComponents, WizardTasks);
   except
   except
     Result := GetExceptMessage;
     Result := GetExceptMessage;
   end;
   end;
@@ -2319,10 +2316,9 @@ end;
 
 
 procedure TWizardForm.SetCurPage(const NewPageID: Integer);
 procedure TWizardForm.SetCurPage(const NewPageID: Integer);
 { Changes which page is currently visible }
 { Changes which page is currently visible }
-var
-  Page: TWizardPage;
 begin
 begin
-  Page := PageFromID(NewPageID);
+  const OldCurPageID = CurPageID;
+  const Page = PageFromID(NewPageID);
   FCurPageID := NewPageID;
   FCurPageID := NewPageID;
 
 
   { Select the page in the notebooks }
   { Select the page in the notebooks }
@@ -2373,7 +2369,7 @@ begin
   end;
   end;
 
 
   try
   try
-    if CodeRunner <> nil then
+    if (CodeRunner <> nil) and (CurPageID <> OldCurPageID) then
       CodeRunner.RunProcedures('CurPageChanged', [CurPageID], False);
       CodeRunner.RunProcedures('CurPageChanged', [CurPageID], False);
   except
   except
     Application.HandleException(Self);
     Application.HandleException(Self);

+ 5 - 5
issig.bat

@@ -6,12 +6,12 @@ rem  Portions by Martijn Laan
 rem  For conditions of distribution and use, see LICENSE.TXT.
 rem  For conditions of distribution and use, see LICENSE.TXT.
 rem
 rem
 rem  Batch file to embed the user's public key from compilesettings.bat in
 rem  Batch file to embed the user's public key from compilesettings.bat in
-rem  TrustFunc.AllowedPublicKeys.inc and setup.allowedpublickeys.iss (before
-rem  compilation) or to sign files using it (after compilation)
-rem
-rem  If the key is missing it will be generated
+rem  TrustFunc.AllowedPublicKeys.inc and to export it as def02.ispublickey
+rem  (before compilation) or to sign files using it (after compilation)
 rem
 rem
 rem  Also used by build(-ce).bat to verify some precompiled files
 rem  Also used by build(-ce).bat to verify some precompiled files
+rem
+rem  If the user's private key is missing it will be generated
 
 
 setlocal
 setlocal
 
 
@@ -49,7 +49,7 @@ if not "%1"=="" goto failed
 
 
 :embed
 :embed
 set publickeyfile=def02.ispublickey
 set publickeyfile=def02.ispublickey
-Files\ISSigTool.exe export-public-key "%publickeyfile%"
+Files\ISSigTool.exe --allow-overwrite export-public-key "%publickeyfile%"
 if errorlevel 1 goto failed
 if errorlevel 1 goto failed
 if not exist "%publickeyfile%" goto failed
 if not exist "%publickeyfile%" goto failed
 set targetfile=Components\TrustFunc.AllowedPublicKeys.inc
 set targetfile=Components\TrustFunc.AllowedPublicKeys.inc

+ 2 - 1
whatsnew.htm

@@ -217,10 +217,11 @@ Source: "https://jrsoftware.org/download.php/iscrypt.dll?dontcount=1"; DestName:
     <ul>
     <ul>
       <li>Added new <tt>LastBaseNameOrUrl</tt> property to support class <tt>TDownloadWizardPage</tt>. See updated example script <i>CodeDownloadFiles.iss</i> for an example.</li>
       <li>Added new <tt>LastBaseNameOrUrl</tt> property to support class <tt>TDownloadWizardPage</tt>. See updated example script <i>CodeDownloadFiles.iss</i> for an example.</li>
       <li>Added new <tt>GetSHA256OfStream</tt> support function.</li>
       <li>Added new <tt>GetSHA256OfStream</tt> support function.</li>
+      <li><i>Fix:</i> Event function <tt>CurPageChanged</tt> is now always only triggered when the current page actually changes. Before it was called twice in a row for <tt>wpPreparing</tt> when the script had a <tt>PrepareToInstall</tt> event function which returned a non empty string to instruct Setup to stop.</li>
     </ul>
     </ul>
   </li>
   </li>
   <li>Inno Setup 6.4.3 increased the maximum width of all task dialogs by about 50%, which helps to keep long paths from being truncated with ellipses. It now only does this if the task dialog's content actually contains a path.</li>
   <li>Inno Setup 6.4.3 increased the maximum width of all task dialogs by about 50%, which helps to keep long paths from being truncated with ellipses. It now only does this if the task dialog's content actually contains a path.</li>
-  <li>All translations which still had an UTF-8 BOM had their BOM removed. Using a BOM in UTF-8 encoded files is not needed and not recommended since Inno Setup 6.3.0.</li>
+  <li>All official translations which still had an UTF-8 BOM had their BOM removed. Using a BOM in UTF-8 encoded files is not needed and not recommended since Inno Setup 6.3.0.</li>
   <li>Inno Setup is now built using Delphi 12.3 Athens instead of Delphi 12.1 Athens. Thanks to Ian Barker from Embarcadero for providing us with a license!</li>
   <li>Inno Setup is now built using Delphi 12.3 Athens instead of Delphi 12.1 Athens. Thanks to Ian Barker from Embarcadero for providing us with a license!</li>
   <li>Documentation improvements.</li>
   <li>Documentation improvements.</li>
   <li>Minor tweaks.</li>
   <li>Minor tweaks.</li>