|
| 1 | +/* |
| 2 | + * contrib/pgpro_scheduler/src/scheduler_manager.c |
| 3 | + */ |
1 | 4 | #include <stdlib.h>
|
2 | 5 | #include "postgres.h"
|
3 | 6 |
|
@@ -946,8 +949,21 @@ int launch_executor_worker(scheduler_manager_ctx_t *ctx, scheduler_manager_slot_
|
946 | 949 | void init_executor_shared_data(schd_executor_share_t *data, scheduler_manager_ctx_t *ctx, job_t *job)
|
947 | 950 | {
|
948 | 951 | data->status = SchdExecutorInit;
|
949 |
| - memcpy(data->database, ctx->database, strlen(ctx->database)); |
950 |
| - memcpy(data->nodename, job->node, strlen(job->node)); |
| 952 | + |
| 953 | + if(strlen(ctx->database) < PGPRO_SCHEDULER_DBNAME_MAX) |
| 954 | + strcpy(data->database, ctx->database); |
| 955 | + else |
| 956 | + elog(ERROR, "String \"%s\"\n" |
| 957 | + "has %d symbols, while it should have less than %d symbols.", |
| 958 | + ctx->database, strlen(ctx->database), PGPRO_SCHEDULER_DBNAME_MAX); |
| 959 | + |
| 960 | + if(strlen(job->node) < PGPRO_SCHEDULER_NODENAME_MAX) |
| 961 | + strcpy(data->nodename, job->node); |
| 962 | + else |
| 963 | + elog(ERROR, "String \"%s\"\n" |
| 964 | + "has %d symbols, while it should have less than %d symbols.", |
| 965 | + job->node, strlen(job->node), PGPRO_SCHEDULER_NODENAME_MAX); |
| 966 | + |
951 | 967 | data->new_job = true;
|
952 | 968 |
|
953 | 969 | if(job)
|
@@ -1775,8 +1791,21 @@ int start_at_worker(scheduler_manager_ctx_t *ctx, int pos)
|
1775 | 1791 | item->res_owner = CurrentResourceOwner;
|
1776 | 1792 | shm_data = dsm_segment_address(item->shared);
|
1777 | 1793 |
|
1778 |
| - memcpy(shm_data->database, ctx->database, strlen(ctx->database)); |
1779 |
| - memcpy(shm_data->nodename, ctx->nodename, strlen(ctx->nodename)); |
| 1794 | + |
| 1795 | + if(strlen(ctx->database) < PGPRO_SCHEDULER_DBNAME_MAX) |
| 1796 | + strcpy(shm_data->database, ctx->database); |
| 1797 | + else |
| 1798 | + elog(ERROR, "String \"%s\"\n" |
| 1799 | + "has %d symbols, while it should have less than %d symbols.", |
| 1800 | + ctx->database, strlen(ctx->database), PGPRO_SCHEDULER_DBNAME_MAX); |
| 1801 | + |
| 1802 | + if(strlen(ctx->nodename) < PGPRO_SCHEDULER_NODENAME_MAX) |
| 1803 | + strcpy(shm_data->nodename, ctx->nodename); |
| 1804 | + else |
| 1805 | + elog(ERROR, "String \"%s\"\n" |
| 1806 | + "has %d symbols, while it should have less than %d symbols.", |
| 1807 | + ctx->nodename, strlen(ctx->nodename), PGPRO_SCHEDULER_NODENAME_MAX); |
| 1808 | + |
1780 | 1809 | shm_data->stop_worker = false;
|
1781 | 1810 | shm_data->status = SchdExecutorInit;
|
1782 | 1811 | shm_data->start_at = 0;
|
|
0 commit comments