From d996145f50bcc6881944ed569cfe7fd7a8b2f0c4 Mon Sep 17 00:00:00 2001 From: professorBobo <44436034+ProfessorBobo@users.noreply.github.com> Date: Wed, 23 Jun 2021 09:16:35 +0100 Subject: [PATCH 1/2] changed _OdbcParse so that arbitrary whitespace can be in the key = val; list without it breaking. --- lib/DBD/mysql.pm | 45 +++++++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/lib/DBD/mysql.pm b/lib/DBD/mysql.pm index 2277fbeb..d2967cc0 100644 --- a/lib/DBD/mysql.pm +++ b/lib/DBD/mysql.pm @@ -62,34 +62,27 @@ sub _OdbcParse($$$) { if (!defined($dsn)) { return; } - while (length($dsn)) { - if ($dsn =~ /([^:;]*\[.*]|[^:;]*)[:;](.*)/) { - $val = $1; - $dsn = $2; - $val =~ s/\[|]//g; # Remove [] if present, the rest of the code prefers plain IPv6 addresses - } else { - $val = $dsn; - $dsn = ''; - } - if ($val =~ /([^=]*)=(.*)/) { - $var = $1; - $val = $2; - if ($var eq 'hostname' || $var eq 'host') { - $hash->{'host'} = $val; - } elsif ($var eq 'db' || $var eq 'dbname') { - $hash->{'database'} = $val; - } else { - $hash->{$var} = $val; - } - } else { - foreach $var (@$args) { - if (!defined($hash->{$var})) { - $hash->{$var} = $val; - last; + + for my $keyval (split/[:;]/, $dsn) { + $keyval =~ s/\[|]//g; # Remove [] if present, the rest of the code prefers plain IPv6 addresses + my ($var, $val) = map {s/^\s*([^\s]*)\s*$/$1/r} split /=/, $keyval; + if (defined $val) { + if ($var eq 'hostname' || $var eq 'host') { + $hash->{'host'} = $val; + } elsif ($var eq 'db' || $var eq 'dbname') { + $hash->{'database'} = $val; + } else { + $hash->{$var} = $val; + } + } else { + foreach $var (@$args) { + if (!defined($hash->{$var})) { + $hash->{$var} = $val; + last; + } + } } - } } - } } sub _OdbcParseHost ($$) { From 5ee19eea1535e05f5bf26336de730c88b0f3b5fe Mon Sep 17 00:00:00 2001 From: professorBobo <44436034+ProfessorBobo@users.noreply.github.com> Date: Wed, 23 Jun 2021 10:14:15 +0100 Subject: [PATCH 2/2] Removed now unecessary variable definition. --- lib/DBD/mysql.pm | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/DBD/mysql.pm b/lib/DBD/mysql.pm index d2967cc0..f6391b60 100644 --- a/lib/DBD/mysql.pm +++ b/lib/DBD/mysql.pm @@ -58,7 +58,6 @@ sub CLONE { sub _OdbcParse($$$) { my($class, $dsn, $hash, $args) = @_; - my($var, $val); if (!defined($dsn)) { return; }