I don't use this but the diff looks sane.

It would be good to add a comment to the head of
patch-src_utils_json_writer_c with a reference to the upstream
commit, it's usual to just include the git patch header e.g.

>From 14c94473b5b59429186d8c65407bcce17a20cf99 Mon Sep 17 00:00:00 2001
From: Bo Peng <pen...@sraoss.co.jp>
Date: Thu, 1 May 2025 11:36:55 +0900
Subject: [PATCH] Fix json_writer did not properly encode special characters.

Don't hold your breath waiting for a reply from the maintainer ;)


On 2025/05/29 17:56, Martijn van Duren wrote:
> ping
> 
> On Fri, 2025-05-02 at 15:28 +0200, Martijn van Duren wrote:
> > Hello ports@,
> > 
> > I'm currently experimenting with a setup where I expect to be using
> > pgpool-II. It appears that everything works as expected with the
> > update below. The only thing that doesn't seem to work is the new
> > wd_monitoring_interfaces_list functionality, for which I don't see
> > a direct need for my own setup and which probably needs some
> > OpenBSD specific code.
> > 
> > The json_writer.c bit is a bug I hit and got accepted upstream[0]
> > 
> > OK?
> > 
> > martijn@
> > 
> > [0] 
> > https://git.postgresql.org/gitweb/?p=pgpool2.git;a=commit;h=14c94473b5b59429186d8c65407bcce17a20cf99
> > 
> > diff /usr/ports
> > path + /usr/ports
> > commit - 0fbcf24b3e32197a3a763c2c08e4480204b0b998
> > blob - 7b727f2f1bf26c69a4dc850af2467de70dc34498
> > file + databases/pgpool/Makefile
> > --- databases/pgpool/Makefile
> > +++ databases/pgpool/Makefile
> > @@ -1,7 +1,6 @@
> >  COMMENT=   connection pool server for PostgreSQL
> >  
> > -DISTNAME=  pgpool-II-3.7.18
> > -REVISION=  1
> > +DISTNAME=  pgpool-II-4.6.0
> >  
> >  CATEGORIES=        databases
> >  
> > commit - 0fbcf24b3e32197a3a763c2c08e4480204b0b998
> > blob - 20e05c1a006ebc4e5571c61db88536c1b0fbd841
> > file + databases/pgpool/distinfo
> > --- databases/pgpool/distinfo
> > +++ databases/pgpool/distinfo
> > @@ -1,2 +1,2 @@
> > -SHA256 (pgpool-II-3.7.18.tar.gz) = 
> > 0I4zuZYUjHukHw5PWjMLU5Ec1srJTHh3gIewaMjaCX4=
> > -SIZE (pgpool-II-3.7.18.tar.gz) = 3447131
> > +SHA256 (pgpool-II-4.6.0.tar.gz) = 
> > 9oplcUQtfqU7afOddJrUV3kLABgOGbAZ/ILiNbqwcyE=
> > +SIZE (pgpool-II-4.6.0.tar.gz) = 5396128
> > commit - 0fbcf24b3e32197a3a763c2c08e4480204b0b998
> > blob - /dev/null
> > file + databases/pgpool/patches/patch-src_include_utils_fe_ports_h (mode 
> > 644)
> > --- /dev/null
> > +++ databases/pgpool/patches/patch-src_include_utils_fe_ports_h
> > @@ -0,0 +1,11 @@
> > +Index: src/include/utils/fe_ports.h
> > +--- src/include/utils/fe_ports.h.orig
> > ++++ src/include/utils/fe_ports.h
> > +@@ -28,6 +28,7 @@
> > + #error "This file is not expected to be compiled for pgpool utilities 
> > only"
> > + #endif
> > + 
> > ++#include <stdarg.h>
> > + #include <stdlib.h>
> > + #ifndef FE_PORTS
> > + #define FE_PORTS
> > commit - 0fbcf24b3e32197a3a763c2c08e4480204b0b998
> > blob - f557cc3cf3fd3092e985cbfd30ed054e91427d8c
> > file + /dev/null
> > --- databases/pgpool/patches/patch-src_query_cache_pool_memqcache_c
> > +++ /dev/null
> > @@ -1,36 +0,0 @@
> > -Fix 64-bit time_t issues
> > -
> > -Index: src/query_cache/pool_memqcache.c
> > ---- src/query_cache/pool_memqcache.c.orig
> > -+++ src/query_cache/pool_memqcache.c
> > -@@ -265,7 +265,7 @@ static int pool_commit_cache(POOL_CONNECTION_POOL *bac
> > -   memqcache_expire = pool_config->memqcache_expire;
> > -   ereport(DEBUG1,
> > -           (errmsg("commiting SELECT results to cache storage"),
> > --                   errdetail("memqcache_expire = %ld", 
> > memqcache_expire)));
> > -+                   errdetail("memqcache_expire = %lld", (long 
> > long)memqcache_expire)));
> > - 
> > -   if (pool_is_shmem_cache())
> > -   {
> > -@@ -2536,8 +2536,8 @@ static POOL_CACHEID 
> > *pool_find_item_on_shmem_cache(POO
> > -           {
> > -                   ereport(DEBUG1,
> > -                           (errmsg("memcache finding item"),
> > --                                  errdetail("cache expired: now: %ld 
> > timestamp: %ld",
> > --                                             now, cih->timestamp + 
> > pool_config->memqcache_expire)));
> > -+                                  errdetail("cache expired: now: %lld 
> > timestamp: %lld",
> > -+                                             (long long)now, (long 
> > long)cih->timestamp + pool_config->memqcache_expire)));
> > -                   pool_delete_item_shmem_cache(c);
> > -                   return NULL;
> > -           }
> > -@@ -2826,8 +2826,8 @@ static void dump_shmem_cache(POOL_CACHE_BLOCKID 
> > blocki
> > -           fprintf(stderr, "shmem: block: %d %d th item pointer(%lu 
> > bytes): offset:%d flags:%x\n",
> > -                           blockid, i, sizeof(*cip), cip->offset, 
> > cip->flags);
> > -           cih = item_header((char *)bh, i);
> > --          fprintf(stderr, "shmem: block: %d %d th item header(%lu bytes): 
> > timestamp:%ld length:%d\n",
> > --                          blockid, i, sizeof(*cih), cih->timestamp, 
> > cih->total_length);
> > -+          fprintf(stderr, "shmem: block: %d %d th item header(%lu bytes): 
> > timestamp:%lld length:%d\n",
> > -+                          blockid, i, sizeof(*cih), (long 
> > long)cih->timestamp, cih->total_length);
> > -   }
> > - }
> > - #endif
> > commit - 0fbcf24b3e32197a3a763c2c08e4480204b0b998
> > blob - /dev/null
> > file + databases/pgpool/patches/patch-src_utils_json_writer_c (mode 644)
> > --- /dev/null
> > +++ databases/pgpool/patches/patch-src_utils_json_writer_c
> > @@ -0,0 +1,63 @@
> > +Index: src/utils/json_writer.c
> > +--- src/utils/json_writer.c.orig
> > ++++ src/utils/json_writer.c
> > +@@ -26,6 +26,7 @@
> > + #include "utils/palloc.h"
> > + #include "utils/json_writer.h"
> > + 
> > ++static void jw_put_string_escape(JsonNode * jNode, char *string);
> > + static inline int jw_get_current_element_count(JsonNode * jNode);
> > + static inline void jw_inc_current_element_count(JsonNode * jNode);
> > + static inline JWElementType jw_get_current_element_type(JsonNode * jNode);
> > +@@ -67,9 +68,50 @@ jw_put_string(JsonNode * jNode, char *key, char *value
> > + 
> > +   if (jw_get_current_element_count(jNode) > 0)
> > +           appendStringInfoChar(jNode->buf, ',');
> > +-  appendStringInfo(jNode->buf, "\"%s\":\"%s\"", key, value);
> > ++  jw_put_string_escape(jNode, key);
> > ++  appendStringInfoChar(jNode->buf, ':');
> > ++  jw_put_string_escape(jNode, value);
> > +   jw_inc_current_element_count(jNode);
> > +   return true;
> > ++}
> > ++
> > ++static void
> > ++jw_put_string_escape(JsonNode * jNode, char *string)
> > ++{
> > ++  int i;
> > ++
> > ++  appendStringInfoChar(jNode->buf, '"');
> > ++  for (i = 0; string[i] != '\0'; i++)
> > ++  {
> > ++          switch (string[i])
> > ++          {
> > ++                  case '\"':
> > ++                          appendStringInfo(jNode->buf, "\\\"");
> > ++                          break;
> > ++                  case '\\':
> > ++                          appendStringInfo(jNode->buf, "\\\\");
> > ++                          break;
> > ++                  case '\b':
> > ++                          appendStringInfo(jNode->buf, "\\b");
> > ++                          break;
> > ++                  case '\f':
> > ++                          appendStringInfo(jNode->buf, "\\f");
> > ++                          break;
> > ++                  case '\n':
> > ++                          appendStringInfo(jNode->buf, "\\n");
> > ++                          break;
> > ++                  case '\r':
> > ++                          appendStringInfo(jNode->buf, "\\r");
> > ++                          break;
> > ++                  case '\t':
> > ++                          appendStringInfo(jNode->buf, "\\t");
> > ++                          break;
> > ++                  default:
> > ++                          appendStringInfoChar(jNode->buf, string[i]);
> > ++                          break;
> > ++          }
> > ++  }
> > ++  appendStringInfoChar(jNode->buf, '"');
> > + }
> > + 
> > + /* for compatibility reasons we pack bool in int*/
> > commit - 0fbcf24b3e32197a3a763c2c08e4480204b0b998
> > blob - 76606da9c6c164fc036ca5bbbc4e24bb2ddb3235
> > file + /dev/null
> > --- databases/pgpool/patches/patch-src_utils_pool_relcache_c
> > +++ /dev/null
> > @@ -1,14 +0,0 @@
> > -Fix 64-bit time_t issue
> > -
> > -Index: src/utils/pool_relcache.c
> > ---- src/utils/pool_relcache.c.orig
> > -+++ src/utils/pool_relcache.c
> > -@@ -148,7 +148,7 @@ void *pool_search_relcache(POOL_RELCACHE *relcache, PO
> > -                           {
> > -                                   ereport(DEBUG1,
> > -                                           (errmsg("searching relcache"),
> > --                                                   errdetail("relcache 
> > for database:%s table:%s expired. now:%ld expiration time:%ld", dbname, 
> > table, now, relcache->cache[i].expire)));
> > -+                                                   errdetail("relcache 
> > for database:%s table:%s expired. now:%lld expiration time:%lld", dbname, 
> > table, (long long)now, (long long)relcache->cache[i].expire)));
> > - 
> > -                                   relcache->cache[i].refcnt = 0;
> > -                                   break;
> > commit - 0fbcf24b3e32197a3a763c2c08e4480204b0b998
> > blob - /dev/null
> > file + databases/pgpool/patches/patch-src_utils_ssl_utils_c (mode 644)
> > --- /dev/null
> > +++ databases/pgpool/patches/patch-src_utils_ssl_utils_c
> > @@ -0,0 +1,21 @@
> > +Index: src/utils/ssl_utils.c
> > +--- src/utils/ssl_utils.c.orig
> > ++++ src/utils/ssl_utils.c
> > +@@ -221,7 +221,7 @@ calculate_hmac_sha256(const char *data, int len, char 
> > +   unsigned int res_len = WD_AUTH_HASH_LEN;
> > +   HMAC_CTX   *ctx = NULL;
> > + 
> > +-#if (OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined 
> > (LIBRESSL_VERSION_NUMBER))
> > ++#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
> > +   ctx = HMAC_CTX_new();
> > +   HMAC_CTX_reset(ctx);
> > + #else
> > +@@ -233,7 +233,7 @@ calculate_hmac_sha256(const char *data, int len, char 
> > +   HMAC_Init_ex(ctx, key, strlen(key), EVP_sha256(), NULL);
> > +   HMAC_Update(ctx, (unsigned char *) data, len);
> > +   HMAC_Final(ctx, (unsigned char *) str, &res_len);
> > +-#if (OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined 
> > (LIBRESSL_VERSION_NUMBER))
> > ++#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
> > +   HMAC_CTX_reset(ctx);
> > +   HMAC_CTX_free(ctx);
> > + #else
> > commit - 0fbcf24b3e32197a3a763c2c08e4480204b0b998
> > blob - e86dbdc672216d188f8c9693552977e9d558866f
> > file + databases/pgpool/patches/patch-src_watchdog_wd_escalation_c
> > --- databases/pgpool/patches/patch-src_watchdog_wd_escalation_c
> > +++ databases/pgpool/patches/patch-src_watchdog_wd_escalation_c
> > @@ -1,12 +1,13 @@
> >  Index: src/watchdog/wd_escalation.c
> >  --- src/watchdog/wd_escalation.c.orig
> >  +++ src/watchdog/wd_escalation.c
> > -@@ -27,7 +27,7 @@
> > +@@ -27,9 +27,7 @@
> >   #include <unistd.h>
> >   #include <errno.h>
> >   
> >  -#ifdef __FreeBSD__
> > -+#if defined(__FreeBSD__) || defined(__OpenBSD__)
> >   #include <sys/wait.h>
> > - #endif
> > +-#endif
> >   
> > + #include "utils/pool_signal.h"
> > + #include "utils/elog.h"
> > commit - 0fbcf24b3e32197a3a763c2c08e4480204b0b998
> > blob - a3e6cd33e21ff2261ca7a489f5b176dcb99c8ced
> > file + /dev/null
> > --- databases/pgpool/patches/patch-src_watchdog_wd_utils_c
> > +++ /dev/null
> > @@ -1,23 +0,0 @@
> > -Fix build with opaque HMAC_CTX in LibreSSL 3.5.
> > -
> > -Index: src/watchdog/wd_utils.c
> > ---- src/watchdog/wd_utils.c.orig
> > -+++ src/watchdog/wd_utils.c
> > -@@ -154,7 +154,7 @@ static void calculate_hmac_sha256(const char *data, in
> > -   unsigned int res_len = WD_AUTH_HASH_LEN;
> > -   HMAC_CTX *ctx = NULL;
> > - 
> > --#if (OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined 
> > (LIBRESSL_VERSION_NUMBER))
> > -+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
> > -   ctx = HMAC_CTX_new();
> > -   HMAC_CTX_reset(ctx);
> > - #else
> > -@@ -165,7 +165,7 @@ static void calculate_hmac_sha256(const char *data, in
> > -   HMAC_Init_ex(ctx, key, strlen(key), EVP_sha256(), NULL);
> > -   HMAC_Update(ctx, (unsigned char*)data, len);
> > -   HMAC_Final(ctx, (unsigned char*)str, &res_len);
> > --#if (OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined 
> > (LIBRESSL_VERSION_NUMBER))
> > -+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
> > -   HMAC_CTX_reset(ctx);
> > -   HMAC_CTX_free(ctx);
> > - #else
> > commit - 0fbcf24b3e32197a3a763c2c08e4480204b0b998
> > blob - f0b07253b47cf1f6356b8a1640750064b618f729
> > file + databases/pgpool/pkg/PLIST
> > --- databases/pgpool/pkg/PLIST
> > +++ databases/pgpool/pkg/PLIST
> > @@ -3,6 +3,9 @@
> >  @rcscript ${RCDIR}/pgpool
> >  @bin bin/pcp_attach_node
> >  @bin bin/pcp_detach_node
> > +@bin bin/pcp_health_check_stats
> > +@bin bin/pcp_invalidate_query_cache
> > +@bin bin/pcp_log_rotate
> >  @bin bin/pcp_node_count
> >  @bin bin/pcp_node_info
> >  @bin bin/pcp_pool_status
> > @@ -10,12 +13,16 @@
> >  @bin bin/pcp_proc_info
> >  @bin bin/pcp_promote_node
> >  @bin bin/pcp_recovery_node
> > +@bin bin/pcp_reload_config
> >  @bin bin/pcp_stop_pgpool
> >  @bin bin/pcp_watchdog_info
> > +@bin bin/pg_enc
> >  @bin bin/pg_md5
> >  @bin bin/pgpool
> >  bin/pgpool_setup
> > +@bin bin/pgproto
> >  bin/watchdog_setup
> > +@bin bin/wd_cli
> >  include/libpcp_ext.h
> >  include/pcp.h
> >  include/pool_process_reporting.h
> > @@ -26,16 +33,21 @@ lib/libpcp.la
> >  @so lib/postgresql/pgpool-regclass.so
> >  @man man/man8/pgpool.8
> >  share/examples/pgpool-II/
> > +share/examples/pgpool-II/aws_eip_if_cmd.sh.sample
> > +share/examples/pgpool-II/aws_rtb_if_cmd.sh.sample
> > +share/examples/pgpool-II/escalation.sh.sample
> > +share/examples/pgpool-II/failover.sh.sample
> > +share/examples/pgpool-II/follow_primary.sh.sample
> >  share/examples/pgpool-II/pcp.conf.sample
> >  @sample ${SYSCONFDIR}/pcp.conf
> >  share/examples/pgpool-II/pgpool.conf.sample
> >  @sample ${SYSCONFDIR}/pgpool.conf
> > -share/examples/pgpool-II/pgpool.conf.sample-logical
> > -share/examples/pgpool-II/pgpool.conf.sample-master-slave
> > -share/examples/pgpool-II/pgpool.conf.sample-replication
> > -share/examples/pgpool-II/pgpool.conf.sample-stream
> > +share/examples/pgpool-II/pgpool_remote_start.sample
> >  share/examples/pgpool-II/pool_hba.conf.sample
> >  @sample ${SYSCONFDIR}/pool_hba.conf
> > +share/examples/pgpool-II/recovery_1st_stage.sample
> > +share/examples/pgpool-II/replication_mode_recovery_1st_stage.sample
> > +share/examples/pgpool-II/replication_mode_recovery_2nd_stage.sample
> >  share/pgpool-II/
> >  share/pgpool-II/insert_lock.sql
> >  share/pgpool-II/pgpool.pam
> > 
> 

Reply via email to