]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
runtime(termdebug): quote filename arguments using double quotes
authorUbaldo Tiberi <ubaldo.tiberi@google.com>
Wed, 17 Jul 2024 18:12:29 +0000 (20:12 +0200)
committerChristian Brabandt <cb@256bit.org>
Wed, 17 Jul 2024 18:15:07 +0000 (20:15 +0200)
closes: #15270

Signed-off-by: Ubaldo Tiberi <ubaldo.tiberi@google.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
runtime/pack/dist/opt/termdebug/plugin/termdebug.vim

index 58d526d6a64371543fe5e399d961091380725e03..c6db92cef64b91d8caf1044e8dca5802536b81c1 100644 (file)
@@ -1325,6 +1325,11 @@ def DeleteCommands()
   sign_undefine(BreakpointSigns->map("'debugBreakpoint' .. v:val"))
 enddef
 
+def QuoteArg(x: string): string
+  # Find all the occurrences of " and \ and escape them and double quote
+  # the resulting string.
+  return printf('"%s"', x ->substitute('[\\"]', '\\&', 'g'))
+enddef
 
 # :Until - Execute until past a specified position or current line
 def Until(at: string)
@@ -1335,7 +1340,7 @@ def Until(at: string)
     ch_log('assume that program is running after this command')
 
     # Use the fname:lnum format
-    var AT = empty(at) ? $"\"{expand('%:p')}:{line('.')}\"" : at
+    var AT = empty(at) ? QuoteArg($"{expand('%:p')}:{line('.')}") : at
     SendCommand($'-exec-until {AT}')
   else
     ch_log('dropping command, program is running: exec-until')
@@ -1354,7 +1359,7 @@ def SetBreakpoint(at: string, tbreak=false)
   endif
 
   # Use the fname:lnum format, older gdb can't handle --source.
-  var AT = empty(at) ? $"\"{expand('%:p')}:{line('.')}\"" : at
+  var AT = empty(at) ? QuoteArg($"{expand('%:p')}:{line('.')}") : at
   var cmd = ''
   if tbreak
     cmd = $'-break-insert -t {AT}'