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

Bug fix: Command syntax suggestion, when using saved site in batch script, included RTF code

Broken by 54c030d Clickable command-line and open command switches and SessionOptions properties +

Source commit: eeca8b4cd6257bdac54aabd4eaf7a74ea880652d
Martin Prikryl 9 жил өмнө
parent
commit
4389a0ec3c

+ 41 - 29
source/core/Common.cpp

@@ -2964,32 +2964,35 @@ UnicodeString __fastcall RtfColor(int Index)
   return FORMAT(L"\\cf%d", (Index));
 }
 //---------------------------------------------------------------------
-UnicodeString __fastcall RtfText(const UnicodeString & Text)
+UnicodeString __fastcall RtfText(const UnicodeString & Text, bool Rtf)
 {
   UnicodeString Result = Text;
-  int Index = 1;
-  while (Index <= Result.Length())
+  if (Rtf)
   {
-    UnicodeString Replacement;
-    wchar_t Ch = Result[Index];
-    if ((Ch == L'\\') || (Ch == L'{') || (Ch == L'}'))
-    {
-      Replacement = FORMAT(L"\\%s", (Ch));
-    }
-    else if (Ch >= 0x0080)
+    int Index = 1;
+    while (Index <= Result.Length())
     {
-      Replacement = FORMAT(L"\\u%d?", (int(Ch)));
-    }
+      UnicodeString Replacement;
+      wchar_t Ch = Result[Index];
+      if ((Ch == L'\\') || (Ch == L'{') || (Ch == L'}'))
+      {
+        Replacement = FORMAT(L"\\%s", (Ch));
+      }
+      else if (Ch >= 0x0080)
+      {
+        Replacement = FORMAT(L"\\u%d?", (int(Ch)));
+      }
 
-    if (!Replacement.IsEmpty())
-    {
-      Result.Delete(Index, 1);
-      Result.Insert(Replacement, Index);
-      Index += Replacement.Length();
-    }
-    else
-    {
-      Index++;
+      if (!Replacement.IsEmpty())
+      {
+        Result.Delete(Index, 1);
+        Result.Insert(Replacement, Index);
+        Index += Replacement.Length();
+      }
+      else
+      {
+        Index++;
+      }
     }
   }
   return Result;
@@ -3037,24 +3040,33 @@ UnicodeString __fastcall ScriptCommandLink(const UnicodeString & Command)
   return L"scriptcommand_" + Command;
 }
 //---------------------------------------------------------------------
-UnicodeString __fastcall RtfSwitch(const UnicodeString & Switch, const UnicodeString & Link)
+UnicodeString __fastcall RtfSwitch(
+  const UnicodeString & Switch, const UnicodeString & Link, bool Rtf)
 {
-  return RtfText(L" ") + RtfLink(Link + L"#" + Switch.LowerCase(), RtfParameter(FORMAT(L"-%s", (Switch))));
+  UnicodeString Result = FORMAT(L"-%s", (Switch));
+  if (Rtf)
+  {
+    Result = RtfLink(Link + L"#" + Switch.LowerCase(), RtfParameter(Result));
+  }
+  return L" " + Result;
 }
 //---------------------------------------------------------------------
-UnicodeString __fastcall RtfSwitchValue(const UnicodeString & Name, const UnicodeString & Link, const UnicodeString & Value)
+UnicodeString __fastcall RtfSwitchValue(
+  const UnicodeString & Name, const UnicodeString & Link, const UnicodeString & Value, bool Rtf)
 {
-  return RtfSwitch(Name, Link) + L"=" + Value;
+  return RtfSwitch(Name, Link, Rtf) + L"=" + Value;
 }
 //---------------------------------------------------------------------
-UnicodeString __fastcall RtfSwitch(const UnicodeString & Name, const UnicodeString & Link, const UnicodeString & Value)
+UnicodeString __fastcall RtfSwitch(
+  const UnicodeString & Name, const UnicodeString & Link, const UnicodeString & Value, bool Rtf)
 {
-  return RtfSwitchValue(Name, Link, RtfText(FORMAT("\"%s\"", (EscapeParam(Value)))));
+  return RtfSwitchValue(Name, Link, RtfText(FORMAT("\"%s\"", (EscapeParam(Value))), Rtf), Rtf);
 }
 //---------------------------------------------------------------------
-UnicodeString __fastcall RtfSwitch(const UnicodeString & Name, const UnicodeString & Link, int Value)
+UnicodeString __fastcall RtfSwitch(
+  const UnicodeString & Name, const UnicodeString & Link, int Value, bool Rtf)
 {
-  return RtfSwitchValue(Name, Link, RtfText(IntToStr(Value)));
+  return RtfSwitchValue(Name, Link, RtfText(IntToStr(Value), Rtf), Rtf);
 }
 //---------------------------------------------------------------------
 UnicodeString __fastcall RtfRemoveHyperlinks(UnicodeString Text)

+ 13 - 5
source/core/Common.h

@@ -2,6 +2,8 @@
 #ifndef CommonH
 #define CommonH
 //---------------------------------------------------------------------------
+#include <vector>
+//---------------------------------------------------------------------------
 #define EXCEPTION throw ExtException(NULL, L"")
 #define THROWOSIFFALSE(C) { if (!(C)) RaiseLastOSError(); }
 #define SAFE_DESTROY_EX(CLASS, OBJ) { CLASS * PObj = OBJ; OBJ = NULL; delete PObj; }
@@ -215,7 +217,7 @@ extern const UnicodeString AssemblyNamespace;
 extern const UnicodeString SessionClassName;
 extern const UnicodeString TransferOptionsClassName;
 //---------------------------------------------------------------------
-UnicodeString __fastcall RtfText(const UnicodeString & Text);
+UnicodeString __fastcall RtfText(const UnicodeString & Text, bool Rtf = true);
 UnicodeString __fastcall RtfColor(int Index);
 UnicodeString __fastcall RtfOverrideColorText(const UnicodeString & Text);
 UnicodeString __fastcall RtfColorItalicText(int Color, const UnicodeString & Text);
@@ -224,10 +226,14 @@ UnicodeString __fastcall RtfKeyword(const UnicodeString & Text);
 UnicodeString __fastcall RtfParameter(const UnicodeString & Text);
 UnicodeString __fastcall RtfString(const UnicodeString & Text);
 UnicodeString __fastcall RtfLink(const UnicodeString & Link, const UnicodeString & RtfText);
-UnicodeString __fastcall RtfSwitch(const UnicodeString & Name, const UnicodeString & Link);
-UnicodeString __fastcall RtfSwitchValue(const UnicodeString & Name, const UnicodeString & Link, const UnicodeString & Value);
-UnicodeString __fastcall RtfSwitch(const UnicodeString & Name, const UnicodeString & Link, const UnicodeString & Value);
-UnicodeString __fastcall RtfSwitch(const UnicodeString & Name, const UnicodeString & Link, int Value);
+UnicodeString __fastcall RtfSwitch(
+  const UnicodeString & Name, const UnicodeString & Link, bool Rtf = true);
+UnicodeString __fastcall RtfSwitchValue(
+  const UnicodeString & Name, const UnicodeString & Link, const UnicodeString & Value, bool Rtf = true);
+UnicodeString __fastcall RtfSwitch(
+  const UnicodeString & Name, const UnicodeString & Link, const UnicodeString & Value, bool Rtf = true);
+UnicodeString __fastcall RtfSwitch(
+  const UnicodeString & Name, const UnicodeString & Link, int Value, bool Rtf = true);
 UnicodeString __fastcall RtfEscapeParam(UnicodeString Param);
 UnicodeString __fastcall RtfRemoveHyperlinks(UnicodeString Text);
 UnicodeString __fastcall ScriptCommandLink(const UnicodeString & Command);
@@ -374,4 +380,6 @@ private:
   TSecondToFirst FSecondToFirst;
 };
 //---------------------------------------------------------------------------
+typedef std::vector<UnicodeString> TUnicodeStringVector;
+//---------------------------------------------------------------------------
 #endif

+ 1 - 1
source/core/Script.cpp

@@ -2578,7 +2578,7 @@ void __fastcall TManagementScript::Connect(const UnicodeString Session,
         DataWithFingerprint->LookupLastFingerprint();
 
         PrintLine(LoadStr(SCRIPT_SITE_WARNING));
-        PrintLine(L"open " + DataWithFingerprint->GenerateOpenCommandArgs());
+        PrintLine(L"open " + DataWithFingerprint->GenerateOpenCommandArgs(false));
       }
 
       DebugAssert(Data != NULL);

+ 17 - 14
source/core/SessionData.cpp

@@ -2543,19 +2543,22 @@ UnicodeString __fastcall TSessionData::GenerateSessionUrl(unsigned int Flags)
 //---------------------------------------------------------------------
 UnicodeString ScriptCommandOpenLink = ScriptCommandLink(L"open");
 //---------------------------------------------------------------------
-void __fastcall TSessionData::AddSwitch(UnicodeString & Result, const UnicodeString & Name)
+void __fastcall TSessionData::AddSwitch(
+  UnicodeString & Result, const UnicodeString & Name, bool Rtf)
 {
-  Result += RtfSwitch(Name, ScriptCommandOpenLink);
+  Result += RtfSwitch(Name, ScriptCommandOpenLink, Rtf);
 }
 //---------------------------------------------------------------------
-void __fastcall TSessionData::AddSwitch(UnicodeString & Result, const UnicodeString & Name, const UnicodeString & Value)
+void __fastcall TSessionData::AddSwitch(
+  UnicodeString & Result, const UnicodeString & Name, const UnicodeString & Value, bool Rtf)
 {
-  Result += RtfSwitch(Name, ScriptCommandOpenLink, Value);
+  Result += RtfSwitch(Name, ScriptCommandOpenLink, Value, Rtf);
 }
 //---------------------------------------------------------------------
-void __fastcall TSessionData::AddSwitch(UnicodeString & Result, const UnicodeString & Name, int Value)
+void __fastcall TSessionData::AddSwitch(
+  UnicodeString & Result, const UnicodeString & Name, int Value, bool Rtf)
 {
-  Result += RtfSwitch(Name, ScriptCommandOpenLink, Value);
+  Result += RtfSwitch(Name, ScriptCommandOpenLink, Value, Rtf);
 }
 //---------------------------------------------------------------------
 void __fastcall TSessionData::LookupLastFingerprint()
@@ -2576,7 +2579,7 @@ void __fastcall TSessionData::LookupLastFingerprint()
   }
 }
 //---------------------------------------------------------------------
-UnicodeString __fastcall TSessionData::GenerateOpenCommandArgs()
+UnicodeString __fastcall TSessionData::GenerateOpenCommandArgs(bool Rtf)
 {
   std::unique_ptr<TSessionData> FactoryDefaults(new TSessionData(L""));
   std::unique_ptr<TSessionData> SessionData(new TSessionData(L""));
@@ -2602,32 +2605,32 @@ UnicodeString __fastcall TSessionData::GenerateOpenCommandArgs()
   if (SessionData->HostKey != FactoryDefaults->HostKey)
   {
     UnicodeString SwitchName = AUsesSsh ? L"hostkey" : L"certificate";
-    AddSwitch(Result, SwitchName, SessionData->HostKey);
+    AddSwitch(Result, SwitchName, SessionData->HostKey, Rtf);
     SessionData->HostKey = FactoryDefaults->HostKey;
   }
   if (SessionData->PublicKeyFile != FactoryDefaults->PublicKeyFile)
   {
-    AddSwitch(Result, L"privatekey", SessionData->PublicKeyFile);
+    AddSwitch(Result, L"privatekey", SessionData->PublicKeyFile, Rtf);
     SessionData->PublicKeyFile = FactoryDefaults->PublicKeyFile;
   }
   if (SessionData->TlsCertificateFile != FactoryDefaults->TlsCertificateFile)
   {
-    AddSwitch(Result, L"clientcert", SessionData->TlsCertificateFile);
+    AddSwitch(Result, L"clientcert", SessionData->TlsCertificateFile, Rtf);
     SessionData->TlsCertificateFile = FactoryDefaults->TlsCertificateFile;
   }
   if (SessionData->Passphrase != FactoryDefaults->Passphrase)
   {
-    AddSwitch(Result, PassphraseOption, SessionData->Passphrase);
+    AddSwitch(Result, PassphraseOption, SessionData->Passphrase, Rtf);
     SessionData->Passphrase = FactoryDefaults->Passphrase;
   }
   if (SessionData->FtpPasvMode != FactoryDefaults->FtpPasvMode)
   {
-    AddSwitch(Result, L"passive", SessionData->FtpPasvMode ? 1 : 0);
+    AddSwitch(Result, L"passive", SessionData->FtpPasvMode ? 1 : 0, Rtf);
     SessionData->FtpPasvMode = FactoryDefaults->FtpPasvMode;
   }
   if (SessionData->Timeout != FactoryDefaults->Timeout)
   {
-    AddSwitch(Result, L"timeout", SessionData->Timeout);
+    AddSwitch(Result, L"timeout", SessionData->Timeout, Rtf);
     SessionData->Timeout = FactoryDefaults->Timeout;
   }
 
@@ -2635,7 +2638,7 @@ UnicodeString __fastcall TSessionData::GenerateOpenCommandArgs()
 
   if (RawSettings->Count > 0)
   {
-    AddSwitch(Result, L"rawsettings");
+    AddSwitch(Result, L"rawsettings", Rtf);
 
     for (int Index = 0; Index < RawSettings->Count; Index++)
     {

+ 5 - 4
source/core/SessionData.h

@@ -374,9 +374,10 @@ private:
   static RawByteString __fastcall StronglyRecryptPassword(const RawByteString & Password, UnicodeString Key);
   static bool __fastcall DoIsProtocolUrl(const UnicodeString & Url, const UnicodeString & Protocol, int & ProtocolLen);
   static bool __fastcall IsProtocolUrl(const UnicodeString & Url, const UnicodeString & Protocol, int & ProtocolLen);
-  static void __fastcall AddSwitch(UnicodeString & Result, const UnicodeString & Name);
-  static void __fastcall AddSwitch(UnicodeString & Result, const UnicodeString & Name, const UnicodeString & Value);
-  static void __fastcall AddSwitch(UnicodeString & Result, const UnicodeString & Name, int Value);
+  static void __fastcall AddSwitch(UnicodeString & Result, const UnicodeString & Name, bool Rtf);
+  static void __fastcall AddSwitch(
+    UnicodeString & Result, const UnicodeString & Name, const UnicodeString & Value, bool Rtf);
+  static void __fastcall AddSwitch(UnicodeString & Result, const UnicodeString & Name, int Value, bool Rtf);
   static void __fastcall AddAssemblyProperty(
     UnicodeString & Result, TAssemblyLanguage Language,
     const UnicodeString & Name, const UnicodeString & Value);
@@ -431,7 +432,7 @@ public:
   bool __fastcall IsSameSite(const TSessionData * Default);
   bool __fastcall IsInFolderOrWorkspace(UnicodeString Name);
   UnicodeString __fastcall GenerateSessionUrl(unsigned int Flags);
-  UnicodeString __fastcall GenerateOpenCommandArgs();
+  UnicodeString __fastcall GenerateOpenCommandArgs(bool Rtf);
   void __fastcall GenerateAssemblyCode(TAssemblyLanguage Language, UnicodeString & Head, UnicodeString & Tail, int & Indent);
   void __fastcall LookupLastFingerprint();
   bool __fastcall IsSecure();

+ 1 - 1
source/forms/GenerateUrl.cpp

@@ -313,7 +313,7 @@ UnicodeString __fastcall TGenerateUrlDialog::GenerateScript(UnicodeString & Scri
 
   UnicodeString ExeName = Application->ExeName;
   UnicodeString BaseExeName = ExtractFileBaseName(ExeName);
-  UnicodeString OpenCommand = FData->GenerateOpenCommandArgs();
+  UnicodeString OpenCommand = FData->GenerateOpenCommandArgs(true);
   UnicodeString CommandPlaceholder1 = FMTLOAD(GENERATE_URL_COMMAND, (1));
   UnicodeString CommandPlaceholder2 = FMTLOAD(GENERATE_URL_COMMAND, (2));
   UnicodeString LogPath = LoadStr(GENERATE_URL_WRITABLE_PATH_TO_LOG) + RtfText(BaseExeName + L".log");