]> granicus.if.org Git - postgresql/commitdiff
When passing query strings to workers, pass the terminating \0.
authorRobert Haas <rhaas@postgresql.org>
Wed, 20 Dec 2017 22:21:55 +0000 (17:21 -0500)
committerRobert Haas <rhaas@postgresql.org>
Wed, 20 Dec 2017 22:26:50 +0000 (17:26 -0500)
Otherwise, when the query string is read, we might trailing garbage
beyond the end, unless there happens to be a \0 there by good luck.

Report and patch by Thomas Munro. Reviewed by Rafia Sabih.

Discussion: http://postgr.es/m/CAEepm=2SJs7X+_vx8QoDu8d1SMEOxtLhxxLNzZun_BvNkuNhrw@mail.gmail.com

src/backend/executor/execParallel.c

index 02b5aa517b5f0c8a6bdbb1e5ab19bfb055396ec9..604f4f5b613b9c4360eded752fbb1d0c882f35bb 100644 (file)
@@ -597,7 +597,7 @@ ExecInitParallelPlan(PlanState *planstate, EState *estate,
 
        /* Estimate space for query text. */
        query_len = strlen(estate->es_sourceText);
-       shm_toc_estimate_chunk(&pcxt->estimator, query_len);
+       shm_toc_estimate_chunk(&pcxt->estimator, query_len + 1);
        shm_toc_estimate_keys(&pcxt->estimator, 1);
 
        /* Estimate space for serialized PlannedStmt. */
@@ -672,8 +672,8 @@ ExecInitParallelPlan(PlanState *planstate, EState *estate,
        shm_toc_insert(pcxt->toc, PARALLEL_KEY_EXECUTOR_FIXED, fpes);
 
        /* Store query string */
-       query_string = shm_toc_allocate(pcxt->toc, query_len);
-       memcpy(query_string, estate->es_sourceText, query_len);
+       query_string = shm_toc_allocate(pcxt->toc, query_len + 1);
+       memcpy(query_string, estate->es_sourceText, query_len + 1);
        shm_toc_insert(pcxt->toc, PARALLEL_KEY_QUERY_TEXT, query_string);
 
        /* Store serialized PlannedStmt. */