]> Repos - portaudio/commitdiff
Improve JACK regex pattern escape code (see ticket #534). Improves previously merged... v19.7.0 v19.7.0-RC2
authorRoss Bencina <rossb@audiomulch.com>
Thu, 1 Apr 2021 00:17:30 +0000 (11:17 +1100)
committerGitHub <noreply@github.com>
Thu, 1 Apr 2021 00:17:30 +0000 (17:17 -0700)
src/hostapi/jack/pa_jack.c

index 88926f47017ada389c5b57358ddcc95fd8682ad6..124c0f8b2e239f9d19c53daf67bb591a84dcd1b0 100644 (file)
@@ -506,7 +506,6 @@ static PaError BuildDeviceList( PaJackHostApiRepresentation *jackApi )
     const char **jack_ports = NULL;
     char **client_names = NULL;
     char *port_regex_string = NULL;
-    char *device_name_regex_escaped = NULL;
     // In the worst case scenario, every character would be escaped, doubling the string size.
     // Add 1 for null terminator.
     size_t device_name_regex_escaped_size = jack_client_name_size() * 2 + 1;
@@ -529,8 +528,6 @@ static PaError BuildDeviceList( PaJackHostApiRepresentation *jackApi )
     PaUtil_FreeAllAllocations( jackApi->deviceInfoMemory );
 
     port_regex_string = PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, port_regex_size );
-    device_name_regex_escaped = PaUtil_GroupAllocateMemory(
-        jackApi->deviceInfoMemory, device_name_regex_escaped_size );
     tmp_client_name = PaUtil_GroupAllocateMemory( jackApi->deviceInfoMemory, jack_client_name_size() );
 
     /* We can only retrieve the list of clients indirectly, by first
@@ -625,10 +622,9 @@ static PaError BuildDeviceList( PaJackHostApiRepresentation *jackApi )
 
         /* To determine how many input and output channels are available,
          * we re-query jackd with more specific parameters. */
-        copy_string_and_escape_regex_chars( device_name_regex_escaped,
+        copy_string_and_escape_regex_chars( port_regex_string,
                             client_names[client_index],
                             device_name_regex_escaped_size );
-        strncpy( port_regex_string, device_name_regex_escaped, port_regex_size );
         strncat( port_regex_string, port_regex_suffix, port_regex_size );
 
         /* ... what are your output ports (that we could input from)? */
@@ -1131,10 +1127,8 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
     char *port_string = PaUtil_GroupAllocateMemory( jackHostApi->deviceInfoMemory, jack_port_name_size() );
     // In the worst case every character would be escaped which would double the string length.
     // Add 1 for null terminator
-    size_t regex_escaped_client_name_length = jack_client_name_size() * 2 + 1;
-    char *regex_escaped_client_name = PaUtil_GroupAllocateMemory(
-        jackHostApi->deviceInfoMemory, regex_escaped_client_name_length );
-    unsigned long regex_size = jack_client_name_size() * 2 + 1 + strlen(port_regex_suffix);
+    size_t regex_escaped_client_name_size = jack_client_name_size() * 2 + 1;
+    unsigned long regex_size = regex_escaped_client_name_size + strlen(port_regex_suffix);
     char *regex_pattern = PaUtil_GroupAllocateMemory( jackHostApi->deviceInfoMemory, regex_size );
     const char **jack_ports = NULL;
     /* int jack_max_buffer_size = jack_get_buffer_size( jackHostApi->jack_client ); */
@@ -1293,10 +1287,9 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
         int err = 0;
 
         /* Get output ports of our capture device */
-        copy_string_and_escape_regex_chars( regex_escaped_client_name,
+        copy_string_and_escape_regex_chars( regex_pattern,
                  hostApi->deviceInfos[ inputParameters->device ]->name,
-                 regex_escaped_client_name_length );
-        strncpy( regex_pattern, regex_escaped_client_name, regex_size );
+                 regex_escaped_client_name_size );
         strncat( regex_pattern, port_regex_suffix, regex_size );
         UNLESS( jack_ports = jack_get_ports( jackHostApi->jack_client, regex_pattern,
                                      JACK_PORT_TYPE_FILTER, JackPortIsOutput ), paUnanticipatedHostError );
@@ -1321,10 +1314,9 @@ static PaError OpenStream( struct PaUtilHostApiRepresentation *hostApi,
         int err = 0;
 
         /* Get input ports of our playback device */
-        copy_string_and_escape_regex_chars( regex_escaped_client_name,
+        copy_string_and_escape_regex_chars( regex_pattern,
                  hostApi->deviceInfos[ outputParameters->device ]->name,
-                 regex_escaped_client_name_length );
-        strncpy( regex_pattern, regex_escaped_client_name, regex_size );
+                 regex_escaped_client_name_size );
         strncat( regex_pattern, port_regex_suffix, regex_size );
         UNLESS( jack_ports = jack_get_ports( jackHostApi->jack_client, regex_pattern,
                                      JACK_PORT_TYPE_FILTER, JackPortIsInput ), paUnanticipatedHostError );