]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 285740: DBD::Pg must have the PG_BYTEA type specified for inserting BLOBs
authormkanat%kerio.com <>
Fri, 18 Mar 2005 11:23:54 +0000 (11:23 +0000)
committermkanat%kerio.com <>
Fri, 18 Mar 2005 11:23:54 +0000 (11:23 +0000)
Patch By Max Kanat-Alexander <mkanat@kerio.com> r=Tomas.Kopal, a=justdave

Bugzilla/DB.pm
Bugzilla/DB/Pg.pm
attachment.cgi

index 07e23f0e7961d9e2fff815e3c8ff7463df8849b7..5256a5434650a2ff68b32bc80aa7024ce4f827c1 100644 (file)
@@ -51,6 +51,16 @@ use Bugzilla::Error;
 use Bugzilla::DB::Schema;
 use Bugzilla::User;
 
+#####################################################################
+# Constants
+#####################################################################
+
+use constant BLOB_TYPE => DBI::SQL_BLOB;
+
+#####################################################################
+# Deprecated Functions
+#####################################################################
+
 # All this code is backwards compat fu. As such, its a bit ugly. Note the
 # circular dependencies on Bugzilla.pm
 # This is old cruft which will be removed, so theres not much use in
@@ -787,6 +797,11 @@ constants are required to be subroutines or "use constant" variables.
 
 =over 4
 
+=item C<BLOB_TYPE>
+
+The C<\%attr> argument that must be passed to bind_param in order to 
+correctly escape a C<LONGBLOB> type.
+
 =item C<REQUIRED_VERSION>
 
 This is the minimum required version of the database server that the
index be921f4d17eeb66c2d07c5530ef31795c9f0cc64..e635096f22ca10cc461449c756e3eb0cd70de5f9 100644 (file)
@@ -42,10 +42,12 @@ package Bugzilla::DB::Pg;
 use strict;
 
 use Bugzilla::Error;
+use DBD::Pg;
 
 # This module extends the DB interface via inheritance
 use base qw(Bugzilla::DB);
 
+use constant BLOB_TYPE => { pg_type => DBD::Pg::PG_BYTEA };
 use constant REQUIRED_VERSION => '7.03.0000';
 use constant PROGRAM_NAME => 'PostgreSQL';
 use constant MODULE_NAME  => 'Pg';
index bffba5bc46b5c09dbf48a3004d85df0c17d33dc0..054c8e62a73f913930fb1bd42cda98a43e3cdcc2 100755 (executable)
@@ -913,7 +913,6 @@ sub insert
   $filename = SqlQuote($filename);
   my $description = SqlQuote($::FORM{'description'});
   my $contenttype = SqlQuote($::FORM{'contenttype'});
-  my $thedata = SqlQuote($data);
   my $isprivate = $::FORM{'isprivate'} ? 1 : 0;
 
   # Figure out when the changes were made.
@@ -921,8 +920,17 @@ sub insert
   my $sql_timestamp = SqlQuote($timestamp); 
 
   # Insert the attachment into the database.
-  SendSQL("INSERT INTO attachments (bug_id, creation_ts, filename, description, mimetype, ispatch, isprivate, submitter_id, thedata) 
-           VALUES ($::FORM{'bugid'}, $sql_timestamp, $filename, $description, $contenttype, $::FORM{'ispatch'}, $isprivate, $::userid, $thedata)");
+  my $sth = $dbh->prepare("INSERT INTO attachments
+      (thedata, bug_id, creation_ts, filename, description,
+       mimetype, ispatch, isprivate, submitter_id) 
+      VALUES (?, $::FORM{'bugid'}, $sql_timestamp, $filename, 
+              $description, $contenttype, $::FORM{'ispatch'},
+              $isprivate, $::userid)");
+  # We only use $data here in this INSERT with a placeholder,
+  # so it's safe.
+  trick_taint($data);
+  $sth->bind_param(1, $data, $dbh->BLOB_TYPE);
+  $sth->execute();
 
   # Retrieve the ID of the newly created attachment record.
   my $attachid = $dbh->bz_last_key('attachments', 'attach_id');