@@ -679,11 +679,15 @@ pmix_status_t pmix_value_xfer(pmix_value_t *p, pmix_value_t *src)
679679 memcpy (p -> data .darray .array , src -> data .darray .array , src -> data .darray .size * sizeof (pmix_persistence_t ));
680680 break ;
681681 case PMIX_POINTER :
682- p -> data .darray .array = (void * * )malloc (src -> data .darray .size * sizeof (void * ));
682+ p -> data .darray .array = (char * * )malloc (src -> data .darray .size * sizeof (char * ));
683683 if (NULL == p -> data .darray .array ) {
684684 return PMIX_ERR_NOMEM ;
685685 }
686- memcpy (p -> data .darray .array , src -> data .darray .array , src -> data .darray .size * sizeof (void * ));
686+ prarray = (char * * )p -> data .darray .array ;
687+ strarray = (char * * )src -> data .darray .array ;
688+ for (n = 0 ; n < src -> data .darray .size ; n ++ ) {
689+ prarray [n ] = strarray [n ];
690+ }
687691 break ;
688692 case PMIX_SCOPE :
689693 p -> data .darray .array = (pmix_scope_t * )malloc (src -> data .darray .size * sizeof (pmix_scope_t ));
@@ -1135,6 +1139,8 @@ pmix_status_t pmix_bfrop_copy_darray(pmix_data_array_t **dest,
11351139 sv = (pmix_value_t * )src -> array ;
11361140 for (n = 0 ; n < src -> size ; n ++ ) {
11371141 if (PMIX_SUCCESS != (rc = pmix_value_xfer (& pv [n ], & sv [n ]))) {
1142+ PMIX_VALUE_FREE (pv , src -> size );
1143+ free (p );
11381144 return rc ;
11391145 }
11401146 }
@@ -1265,6 +1271,8 @@ pmix_status_t pmix_bfrop_copy_darray(pmix_data_array_t **dest,
12651271 return PMIX_ERR_NOMEM ;
12661272 }
12671273 if (PMIX_SUCCESS != (rc = pmix_value_xfer (pk [n ].value , sk [n ].value ))) {
1274+ PMIX_VALUE_FREE (pk [n ].value , 1 );
1275+ free (p );
12681276 return rc ;
12691277 }
12701278 }
@@ -1283,6 +1291,7 @@ pmix_status_t pmix_bfrop_copy_darray(pmix_data_array_t **dest,
12831291 if (NULL != sm [n ].blob && 0 < sm [n ].size ) {
12841292 pm [n ].blob = (uint8_t * )malloc (sm [n ].size );
12851293 if (NULL == pm [n ].blob ) {
1294+ PMIX_MODEX_FREE (pm , src -> size );
12861295 free (p );
12871296 return PMIX_ERR_NOMEM ;
12881297 }
@@ -1303,12 +1312,12 @@ pmix_status_t pmix_bfrop_copy_darray(pmix_data_array_t **dest,
13031312 memcpy (p -> array , src -> array , src -> size * sizeof (pmix_persistence_t ));
13041313 break ;
13051314 case PMIX_POINTER :
1306- p -> array = (void * * )malloc (src -> size * sizeof (void * ));
1307- if (NULL == p -> array ) {
1308- free (p );
1309- return PMIX_ERR_NOMEM ;
1315+ p -> array = (char * * )malloc (src -> size * sizeof (char * ));
1316+ prarray = (char * * )p -> array ;
1317+ strarray = (char * * )src -> array ;
1318+ for (n = 0 ; n < src -> size ; n ++ ) {
1319+ prarray [n ] = strarray [n ];
13101320 }
1311- memcpy (p -> array , src -> array , src -> size * sizeof (void * ));
13121321 break ;
13131322 case PMIX_SCOPE :
13141323 p -> array = (pmix_scope_t * )malloc (src -> size * sizeof (pmix_scope_t ));
0 commit comments