branch: elpa/pg
commit 1fc717bb97384bed12cbadb7fda7f74ae42062dc
Author: Eric Marsden <eric.mars...@risk-engineering.org>
Commit: Eric Marsden <eric.mars...@risk-engineering.org>

    Make sure binary strings sent to PostgreSQL are unibyte
---
 pg.el | 28 +++++++++++++++-------------
 1 file changed, 15 insertions(+), 13 deletions(-)

diff --git a/pg.el b/pg.el
index 9a60f61c9bf..1cc799495b8 100644
--- a/pg.el
+++ b/pg.el
@@ -765,7 +765,7 @@ Uses database DBNAME, user USER and password PASSWORD."
      (?S
       (let* ((msglen (pg-read-net-int con 4))
              (msg (pg-read-chars con (- msglen 4)))
-             (items (split-string msg (string 0)))
+             (items (split-string msg (unibyte-string 0)))
              (key (cl-first items))
              (val (cl-second items)))
         ;; ParameterStatus items sent by the backend include application_name,
@@ -1337,7 +1337,7 @@ Return a result structure which can be decoded using 
`pg-result'."
             (?S
              (let* ((msglen (pg-read-net-int con 4))
                     (msg (pg-read-chars con (- msglen 4)))
-                    (items (split-string msg (string 0))))
+                    (items (split-string msg (unibyte-string 0))))
                ;; ParameterStatus items sent by the backend include 
application_name,
                ;; DateStyle, TimeZone, in_hot_standby, integer_datetimes
                (when (> (length (cl-first items)) 0)
@@ -1686,7 +1686,7 @@ Returns a pgresult structure (see function `pg-result')."
        (?S
         (let* ((msglen (pg-read-net-int con 4))
                (msg (pg-read-chars con (- msglen 4)))
-               (items (split-string msg (string 0)))
+               (items (split-string msg (unibyte-string 0)))
                (key (cl-first items))
                (val (cl-second items)))
           ;; ParameterStatus items sent by the backend include 
application_name,
@@ -1949,7 +1949,7 @@ can be decoded using `pg-result'."
             (?S
              (let* ((msglen (pg-read-net-int con 4))
                     (msg (pg-read-chars con (- msglen 4)))
-                    (items (split-string msg (string 0))))
+                    (items (split-string msg (unibyte-string string 0))))
                (when (> (length (cl-first items)) 0)
                  (dolist (handler pg-parameter-change-functions)
                    (funcall handler con (cl-first items) (cl-second items))))))
@@ -2084,7 +2084,7 @@ can be decoded using `pg-result', but with data in BUF."
             (?S
              (let* ((msglen (pg-read-net-int con 4))
                     (msg (pg-read-chars con (- msglen 4)))
-                    (items (split-string msg (string 0))))
+                    (items (split-string msg (unibyte-string 0))))
                (when (> (length (cl-first items)) 0)
                  (dolist (handler pg-parameter-change-functions)
                    (funcall handler con (cl-first items) (cl-second items))))))
@@ -2988,7 +2988,7 @@ Return nil if the extension could not be set up."
 
 (pg-register-serializer "uuid" #'pg--serialize-uuid)
 
-(pg-register-serializer "bool" (lambda (v _encoding) (if v (string 1) (string 
0))))
+(pg-register-serializer "bool" (lambda (v _encoding) (if v (unibyte-string 1) 
(unibyte-string 0))))
 
 (defun pg--serialize-boolvec (bv _encoding)
   (unless (bool-vector-p bv)
@@ -3011,7 +3011,7 @@ Return nil if the extension could not be set up."
       (pg-signal-type-error "Expecting a character, got %s" v))
     (unless (<= 0 v 255)
       (pg-signal-type-error "Value %s out of range for CHAR type" v))
-    (string v)))
+    (unibyte-string v)))
 
 (pg-register-serializer "bpchar"
   (lambda (v encoding)
@@ -3019,7 +3019,7 @@ Return nil if the extension could not be set up."
       (pg-signal-type-error "Expecting a character, got %s" v))
     (unless (<= 0 v 255)
       (pg-signal-type-error "Value %s out of range for BPCHAR type" v))
-    (pg--serialize-text (string v) encoding)))
+    (pg--serialize-text (unibyte-string v) encoding)))
 
 ;; see https://www.postgresql.org/docs/current/datatype-numeric.html
 (pg-register-serializer "int2"
@@ -3238,7 +3238,7 @@ Authenticate as USER with PASSWORD."
 (defun pg-pbkdf2-hash-sha256 (password salt iterations)
   "Return the PBKDF2 hash of PASSWORD using SALT and ITERATIONS."
   (declare (speed 3))
-  (let* ((hash (gnutls-hash-mac 'SHA256 (cl-copy-seq password) (concat salt 
(string 0 0 0 1))))
+  (let* ((hash (gnutls-hash-mac 'SHA256 (cl-copy-seq password) (concat salt 
(unibyte-string 0 0 0 1))))
          (result hash))
     (dotimes (_i (1- iterations))
       (setf hash (gnutls-hash-mac 'SHA256 (cl-copy-seq password) hash))
@@ -4094,10 +4094,12 @@ that will be read."
     (setf extra (butlast extra))
     (when extra
       (setf extra (append (list " (") extra (list ")"))))
-    (message "PostgreSQL %s %s %s"
+    (message "%sPostgreSQL %s %s %s%s"
+             (if noninteractive "\033[38;5;248m" "")
              (pgerror-severity notice)
              (pgerror-message notice)
-             (apply #'concat extra))))
+             (apply #'concat extra)
+             (if noninteractive "\033[0m" ""))))
 
 ;; higher order bits first / little endian
 (defun pg-send-uint (con num bytes)
@@ -4129,7 +4131,7 @@ that will be read."
   (let ((process (pgcon-process con)))
     (process-send-string process string)
     ;; the null-terminator octet
-    (process-send-string process (string 0))))
+    (process-send-string process (unibyte-string 0))))
 
 (defun pg-send-octets (con octets)
   (let ((process (pgcon-process con)))
@@ -4140,7 +4142,7 @@ that will be read."
   (let ((process (pgcon-process con))
         (padding (if (and (numberp bytes) (> bytes (length str)))
                      (make-string (- bytes (length str)) 0)
-                   (make-string 0 0))))
+                   (make-string 0 0 nil))))
     (process-send-string process (concat str padding))))
 
 

Reply via email to