MozillaSecurity / FuzzManager

A fuzzing management tools collection
Mozilla Public License 2.0
185 stars 47 forks source link

BucketHit integrity error #923

Open jschwartzentruber opened 1 year ago

jschwartzentruber commented 1 year ago
>>> b.reassign(True)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/src/server/crashmanager/models.py", line 232, in reassign
    BucketHit.increment_count(
  File "/src/server/crashmanager/models.py", line 370, in increment_count
    counter, _ = cls.objects.get_or_create(
  File "/home/worker/.local/lib/python3.10/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/worker/.local/lib/python3.10/site-packages/django/db/models/query.py", line 929, in get_or_create
    return self.get(**kwargs), False
  File "/home/worker/.local/lib/python3.10/site-packages/django/db/models/query.py", line 653, in get
    raise self.model.MultipleObjectsReturned(
crashmanager.models.BucketHit.MultipleObjectsReturned: get() returned more than one BucketHit -- it returned 2!
jschwartzentruber commented 1 year ago

to manually fix

counts={}
for key in BucketHit.objects.values_list("bucket_id", "tool_id", "begin"):
  counts.setdefault(key, 0)
  counts[key] += 1
bad={k:v for k,v in counts.items() if v > 1}
for bid,tid,ts in bad:
  a,b=BucketHit.objects.filter(bucket_id=bid,tool_id=tid,begin=ts)
  a.count+=b.count
  a.save()
  b.delete()