| Index: runtime/bin/process_win.cc
 | 
| diff --git a/runtime/bin/process_win.cc b/runtime/bin/process_win.cc
 | 
| index ebf4ce3982c118d5403ffa8598c7fe2a4afcd7c8..1c0a03df1dfd01f207c43b7a95ceee33ae8fcff8 100644
 | 
| --- a/runtime/bin/process_win.cc
 | 
| +++ b/runtime/bin/process_win.cc
 | 
| @@ -8,6 +8,7 @@
 | 
|  #include <process.h>  // NOLINT
 | 
|  
 | 
|  #include "bin/builtin.h"
 | 
| +#include "bin/dartutils.h"
 | 
|  #include "bin/process.h"
 | 
|  #include "bin/eventhandler.h"
 | 
|  #include "bin/lockers.h"
 | 
| @@ -434,7 +435,9 @@ class ProcessStarter {
 | 
|  
 | 
|      // Transform input strings to system format.
 | 
|      const wchar_t* system_path = StringUtilsWin::Utf8ToWide(path_);
 | 
| -    wchar_t** system_arguments = new wchar_t*[arguments_length];
 | 
| +    wchar_t** system_arguments;
 | 
| +    system_arguments = reinterpret_cast<wchar_t**>(
 | 
| +        Dart_ScopeAllocate(arguments_length * sizeof(*system_arguments)));
 | 
|      for (int i = 0; i < arguments_length; i++) {
 | 
|         system_arguments[i] = StringUtilsWin::Utf8ToWide(arguments[i]);
 | 
|      }
 | 
| @@ -464,14 +467,13 @@ class ProcessStarter {
 | 
|        remaining -= written;
 | 
|        ASSERT(remaining >= 0);
 | 
|      }
 | 
| -    free(const_cast<wchar_t*>(system_path));
 | 
| -    for (int i = 0; i < arguments_length; i++) free(system_arguments[i]);
 | 
| -    delete[] system_arguments;
 | 
|  
 | 
|      // Create environment block if an environment is supplied.
 | 
|      environment_block_ = NULL;
 | 
|      if (environment != NULL) {
 | 
| -      wchar_t** system_environment = new wchar_t*[environment_length];
 | 
| +      wchar_t** system_environment;
 | 
| +      system_environment = reinterpret_cast<wchar_t**>(
 | 
| +          Dart_ScopeAllocate(environment_length * sizeof(*system_environment)));
 | 
|        // Convert environment strings to system strings.
 | 
|        for (intptr_t i = 0; i < environment_length; i++) {
 | 
|          system_environment[i] = StringUtilsWin::Utf8ToWide(environment[i]);
 | 
| @@ -498,10 +500,6 @@ class ProcessStarter {
 | 
|        // Block-terminating zero char.
 | 
|        environment_block_[block_index++] = '\0';
 | 
|        ASSERT(block_index == block_size);
 | 
| -      for (intptr_t i = 0; i < environment_length; i++) {
 | 
| -        free(system_environment[i]);
 | 
| -      }
 | 
| -      delete[] system_environment;
 | 
|      }
 | 
|  
 | 
|      system_working_directory_ = NULL;
 | 
| @@ -518,9 +516,6 @@ class ProcessStarter {
 | 
|      // Deallocate command-line and environment block strings.
 | 
|      delete[] command_line_;
 | 
|      delete[] environment_block_;
 | 
| -    if (system_working_directory_ != NULL) {
 | 
| -      free(const_cast<wchar_t*>(system_working_directory_));
 | 
| -    }
 | 
|      if (attribute_list_ != NULL) {
 | 
|        delete_proc_thread_attr_list(attribute_list_);
 | 
|        free(attribute_list_);
 | 
| 
 |