Skip to content

Commit 36cfce7

Browse files
committed
Add filesize limits to submission diff
1 parent b6168e1 commit 36cfce7

1 file changed

Lines changed: 17 additions & 9 deletions

File tree

cms/server/admin/handlers/submission.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -136,20 +136,28 @@ def get(self, old_id, new_id):
136136
real_fname = fname.replace(".%l", ext)
137137
else:
138138
real_fname = fname
139-
def get_file(x):
139+
140+
def get_file(x, which):
141+
if fname not in x:
142+
return None, f"File not present in {which} submission"
140143
digest = x[fname].digest
141144
file_bin = self.service.file_cacher.get_file_content(digest)
142-
return file_bin.decode(errors='replace').splitlines()
143-
144-
if fname not in old_files:
145-
result_files.append({"fname": real_fname, "status": "Not present in old submission"})
145+
if len(file_bin) > 1000000:
146+
return None, f"{which} file is too big to diff".capitalize()
147+
file_lines = file_bin.decode(errors='replace').splitlines()
148+
if len(file_lines) > 5000:
149+
return None, f"{which} file has too many lines to diff".capitalize()
150+
return file_lines, None
151+
152+
old_content, old_status = get_file(old_files, "old")
153+
if old_status:
154+
result_files.append({"fname": real_fname, "status": old_status})
146155
continue
147-
if fname not in new_files:
148-
result_files.append({"fname": real_fname, "status": "Not present in new submission"})
156+
new_content, new_status = get_file(new_files, "new")
157+
if new_status:
158+
result_files.append({"fname": real_fname, "status": new_status})
149159
continue
150160

151-
old_content = get_file(old_files)
152-
new_content = get_file(new_files)
153161
if old_content == new_content:
154162
result_files.append({"fname": real_fname, "status": "No changes"})
155163
else:

0 commit comments

Comments
 (0)