Huw Davies (@huw) commented about server/registry.c:
if ((key = create_key( parent, &name, 0, KEY_WOW64_64KEY, 0, sd ))) {
load_registry( key, req->file );
filename = malloc( req_data_len + 1 );
if (!filename) {
set_error( STATUS_NO_MEMORY );
return;
}
memcpy( filename, req_data, req_data_len );
filename[req_data_len] = 0;
load_registry( key, filename ); release_object( key );
free( filename );
You're leaking `key` and potentially `parent` in the `malloc()` failure path. It would also be conventional to free `filename` before releasing `key` (i.e. in the opposite order to which they were acquired. Something like:
```suggestion:-11+0 filename = malloc( req_data_len + 1 ); if (filename) { memcpy( filename, req_data, req_data_len ); filename[req_data_len] = 0; load_registry( key, filename ); free( filename ); } else set_error( STATUS_NO_MEMORY ); release_object( key ); ```