CreateOptionPortMapping to store a copy of the passed bindings

- Given this will be internal data, make a defensive copy to
  protect from client inadvertently modifications.

Signed-off-by: Alessandro Boch <aboch@docker.com>
This commit is contained in:
Alessandro Boch 2015-05-04 23:45:07 -07:00
parent 288a6b8c49
commit 706c01073d

View file

@ -486,13 +486,18 @@ func JoinOptionUseDefaultSandbox() EndpointOption {
// ports option to be passed to network.CreateEndpoint() method.
func CreateOptionPortMapping(portBindings []netutils.PortBinding) EndpointOption {
return func(ep *endpoint) {
// Store endpoint label
ep.generic[options.PortMap] = portBindings
// Extract exposed ports as this is the only concern of libnetwork endpoint
ep.exposedPorts = make([]netutils.TransportPort, 0, len(portBindings))
// Extract and store exposed ports as this is the only concern of libnetwork endpoint
// Store a copy of the bindings as generic data to pass to the driver
pbs := make([]netutils.PortBinding, 0, len(portBindings))
exp := make([]netutils.TransportPort, 0, len(portBindings))
for _, b := range portBindings {
ep.exposedPorts = append(ep.exposedPorts, netutils.TransportPort{Proto: b.Proto, Port: b.Port})
pbs = append(pbs, b.GetCopy())
exp = append(exp, netutils.TransportPort{Proto: b.Proto, Port: b.Port})
}
ep.generic[options.PortMap] = pbs
ep.exposedPorts = exp
}
}