emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/pq d738d21b6a 52/63: Add checks for non-local exit.


From: ELPA Syncer
Subject: [elpa] externals/pq d738d21b6a 52/63: Add checks for non-local exit.
Date: Mon, 14 Feb 2022 23:24:27 -0500 (EST)

branch: externals/pq
commit d738d21b6aba4b447d2dada4999fe8031a377295
Author: Andreas Seltenreich <seltenreich@gmx.de>
Commit: Andreas Seltenreich <seltenreich@gmx.de>

    Add checks for non-local exit.
    
    Check for non-local-exit after every env->get_user_ptr().  Most
    functions happened to DTRT without this check by accident because they
    used connection_ok on the NULL pointer returned and bailed out.
    
    Fpq_escape was not that lucky when invoked with bogus arguments and
    crashed.  Per report from @717g301github.
---
 pq.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/pq.c b/pq.c
index af967812f5..a7faf37845 100644
--- a/pq.c
+++ b/pq.c
@@ -161,6 +161,9 @@ Fpq_query (emacs_env *env, ptrdiff_t nargs, emacs_value 
args[], void *data)
     return Qnil;
   PGconn *conn = env->get_user_ptr(env, args[0]);
 
+  if (env->non_local_exit_check (env) != emacs_funcall_exit_return)
+       return NULL;
+
   if (!connection_ok(env, conn)) {
        return Qnil;
   }
@@ -237,6 +240,9 @@ Fpq_escape (emacs_env *env, ptrdiff_t nargs, emacs_value 
args[], void *data)
     return Qnil;
   PGconn *conn = env->get_user_ptr(env, args[0]);
 
+  if (env->non_local_exit_check (env) != emacs_funcall_exit_return)
+    return NULL;
+
   char *value = my_string_to_c(env, args[1]);
   char *(*escaper)(PGconn *, const char *, size_t) = data;
   char *quoted = escaper(conn, value, strlen(value));
@@ -252,6 +258,9 @@ Fpq_reset (emacs_env *env, ptrdiff_t nargs, emacs_value 
args[], void *data)
     return Qnil;
   PGconn *conn = env->get_user_ptr(env, args[0]);
 
+  if (env->non_local_exit_check (env) != emacs_funcall_exit_return)
+    return NULL;
+
   PQreset(conn);
 
   if (!connection_ok(env, conn)) {



reply via email to

[Prev in Thread] Current Thread [Next in Thread]