@@ -164,15 +164,20 @@ main(int argc, char **argv)
164164 args = 0 ;
165165
166166 // Read environment variables
167- envs = (char * * )malloc (++ hdr .env_sz * sizeof (char * ));
168- for (int i = 0 ; i < hdr .env_sz - 1 ; i ++ )
167+ if (hdr .env_sz )
169168 {
170- size_t env_sz ;
171- ret = read (data_sockfd , (void * )& env_sz , sizeof (size_t ));
172- envs [i ] = (char * )malloc (env_sz );
173- ret = read (data_sockfd , (void * )envs [i ], env_sz );
169+ envs = (char * * )malloc (++ hdr .env_sz * sizeof (char * ));
170+ for (int i = 0 ; i < hdr .env_sz - 1 ; i ++ )
171+ {
172+ size_t env_sz ;
173+ ret = read (data_sockfd , (void * )& env_sz , sizeof (size_t ));
174+ envs [i ] = (char * )malloc (env_sz );
175+ ret = read (data_sockfd , (void * )envs [i ], env_sz );
176+ }
177+ envs [hdr .env_sz - 1 ] = 0 ;
174178 }
175- envs [hdr .env_sz - 1 ] = 0 ;
179+ else
180+ envs = 0 ;
176181
177182 close (data_sockfd );
178183
@@ -281,8 +286,10 @@ free_tvars()
281286{
282287 free (program );
283288 free (netns );
284- for (size_t i = 1 ; i < hdr .args_sz - 3 ; free (args [i ++ ]));
285- for (size_t i = 0 ; i < hdr .env_sz - 2 ; free (envs [i ++ ]));
289+ if (args )
290+ for (size_t i = 1 ; i < hdr .args_sz - 3 ; free (args [i ++ ]));
291+ if (envs )
292+ for (size_t i = 0 ; i < hdr .env_sz - 2 ; free (envs [i ++ ]));
286293 free (envs );
287294 free (args );
288295 memset ((void * )& hdr , 1 , sizeof (hdr ));
0 commit comments