Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(101)

Side by Side Diff: service/datastore/datastore.go

Issue 1523943002: Fix nil-deref panic from Put. (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | service/datastore/datastore_test.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package datastore 5 package datastore
6 6
7 import ( 7 import (
8 "fmt" 8 "fmt"
9 "reflect" 9 "reflect"
10 10
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 mat := parseMultiArg(slice.Type()) 301 mat := parseMultiArg(slice.Type())
302 302
303 keys, vals, err := mat.GetKeysPMs(d.aid, d.ns, slice, false) 303 keys, vals, err := mat.GetKeysPMs(d.aid, d.ns, slice, false)
304 if err != nil { 304 if err != nil {
305 return err 305 return err
306 } 306 }
307 307
308 lme := errors.NewLazyMultiError(len(keys)) 308 lme := errors.NewLazyMultiError(len(keys))
309 i := 0 309 i := 0
310 err = d.RawInterface.PutMulti(keys, vals, func(key *Key, err error) erro r { 310 err = d.RawInterface.PutMulti(keys, vals, func(key *Key, err error) erro r {
311 » » if key != keys[i] { 311 » » if !lme.Assign(i, err) && key != keys[i] {
312 mat.setKey(slice.Index(i), key) 312 mat.setKey(slice.Index(i), key)
313 } 313 }
314 lme.Assign(i, err)
315 i++ 314 i++
316 return nil 315 return nil
317 }) 316 })
318 317
319 if err == nil { 318 if err == nil {
320 err = lme.Get() 319 err = lme.Get()
321 } 320 }
322 return err 321 return err
323 } 322 }
324 323
325 func (d *datastoreImpl) DeleteMulti(keys []*Key) (err error) { 324 func (d *datastoreImpl) DeleteMulti(keys []*Key) (err error) {
326 lme := errors.NewLazyMultiError(len(keys)) 325 lme := errors.NewLazyMultiError(len(keys))
327 i := 0 326 i := 0
328 extErr := d.RawInterface.DeleteMulti(keys, func(internalErr error) error { 327 extErr := d.RawInterface.DeleteMulti(keys, func(internalErr error) error {
329 lme.Assign(i, internalErr) 328 lme.Assign(i, internalErr)
330 i++ 329 i++
331 return nil 330 return nil
332 }) 331 })
333 err = lme.Get() 332 err = lme.Get()
334 if err == nil { 333 if err == nil {
335 err = extErr 334 err = extErr
336 } 335 }
337 return 336 return
338 } 337 }
339 338
340 func (d *datastoreImpl) Raw() RawInterface { 339 func (d *datastoreImpl) Raw() RawInterface {
341 return d.RawInterface 340 return d.RawInterface
342 } 341 }
OLDNEW
« no previous file with comments | « no previous file | service/datastore/datastore_test.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698