mirror of
https://github.com/reactos/syzkaller.git
synced 2025-02-21 20:22:28 +00:00
syz-dash: fix group creation with seq>0
datastore.Get does not set fields with zero values, so these fields preserve values from previous datastore.Put calls. Always pass a new group object to datastore.Get in loops.
This commit is contained in:
parent
55ef0dc17c
commit
dd355ef24a
@ -202,7 +202,7 @@ func handleAddCrash(c appengine.Context, r *http.Request) (interface{}, error) {
|
||||
return nil, fmt.Errorf("failed to unmarshal crash: %v", err)
|
||||
}
|
||||
addedBug := false
|
||||
var group *Group
|
||||
var group0 *Group
|
||||
if err := ds.RunInTransaction(c, func(c appengine.Context) error {
|
||||
now := time.Now()
|
||||
addedBug = false
|
||||
@ -220,8 +220,8 @@ func handleAddCrash(c appengine.Context, r *http.Request) (interface{}, error) {
|
||||
return err
|
||||
}
|
||||
|
||||
group = &Group{Title: limitLength(req.Desc, maxTitleLen), Seq: 0}
|
||||
for {
|
||||
for seq := int64(0); ; seq++ {
|
||||
group := &Group{Title: limitLength(req.Desc, maxTitleLen), Seq: seq}
|
||||
if err := ds.Get(c, group.Key(c), group); err != nil {
|
||||
if err != ds.ErrNoSuchEntity {
|
||||
return err
|
||||
@ -244,6 +244,7 @@ func handleAddCrash(c appengine.Context, r *http.Request) (interface{}, error) {
|
||||
return err
|
||||
}
|
||||
addedBug = true
|
||||
group0 = group
|
||||
break
|
||||
}
|
||||
bug := new(Bug)
|
||||
@ -266,12 +267,12 @@ func handleAddCrash(c appengine.Context, r *http.Request) (interface{}, error) {
|
||||
if _, err := ds.Put(c, group.Key(c), group); err != nil {
|
||||
return err
|
||||
}
|
||||
group0 = group
|
||||
break
|
||||
}
|
||||
group.Seq++
|
||||
}
|
||||
|
||||
if _, err := ds.Put(c, ds.NewIncompleteKey(c, "Crash", group.Key(c)), crash); err != nil {
|
||||
if _, err := ds.Put(c, ds.NewIncompleteKey(c, "Crash", group0.Key(c)), crash); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
@ -281,7 +282,7 @@ func handleAddCrash(c appengine.Context, r *http.Request) (interface{}, error) {
|
||||
if addedBug {
|
||||
dropCached(c)
|
||||
}
|
||||
purgeOldCrashes(c, group)
|
||||
purgeOldCrashes(c, group0)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
@ -340,19 +341,20 @@ func handleAddRepro(c appengine.Context, r *http.Request) (interface{}, error) {
|
||||
}
|
||||
if err := ds.RunInTransaction(c, func(c appengine.Context) error {
|
||||
now := time.Now()
|
||||
group := &Group{Title: limitLength(req.Crash.Desc, maxTitleLen), Seq: 0}
|
||||
for {
|
||||
if err := ds.Get(c, group.Key(c), group); err != nil {
|
||||
var group *Group
|
||||
for seq := int64(0); ; seq++ {
|
||||
group1 := &Group{Title: limitLength(req.Crash.Desc, maxTitleLen), Seq: seq}
|
||||
if err := ds.Get(c, group1.Key(c), group1); err != nil {
|
||||
return err
|
||||
}
|
||||
bug := new(Bug)
|
||||
if err := ds.Get(c, ds.NewKey(c, "Bug", "", group.Bug, nil), bug); err != nil {
|
||||
if err := ds.Get(c, ds.NewKey(c, "Bug", "", group1.Bug, nil), bug); err != nil {
|
||||
return err
|
||||
}
|
||||
if bug.Status < BugStatusClosed {
|
||||
group = group1
|
||||
break
|
||||
}
|
||||
group.Seq++
|
||||
}
|
||||
group.NumRepro++
|
||||
group.LastTime = now
|
||||
|
@ -27,10 +27,6 @@
|
||||
</select></td>
|
||||
{{end}}
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Crashes:</td>
|
||||
<td>{{.NumCrashes}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Time:</td>
|
||||
<td>{{formatTime .LastTime}} - {{formatTime .FirstTime}}</td>
|
||||
|
@ -554,6 +554,7 @@ func handleBug(c appengine.Context, w http.ResponseWriter, r *http.Request) erro
|
||||
})
|
||||
}
|
||||
}
|
||||
data.Crashes.Title = fmt.Sprintf("crashes (%v total)", data.NumCrashes)
|
||||
|
||||
sort.Sort(uiCrashArray(data.Crashes.List))
|
||||
sort.Sort(uiReproArray(data.Repros))
|
||||
|
Loading…
x
Reference in New Issue
Block a user