Commit f78161a
committed
parser: close a TOCTTOU bug on Person creation
find_author looks up a person by email, and if they do not exist,
creates a Person model, which may be saved later if the message
contains something valuable.
Multiple simultaneous processes can race here: both can do the SELECT,
find there is no Person, and create the model. One will succeed in
saving, the other will get an IntegrityError.
Reduce the window by making find_author into get_or_create_author, and
plumb that through. (Remove a test that specifically required find_author
to *not* create).
More importantly, cover the case where we lose the race, by using
get_or_create which handles the race case, catching the IntegrityError
internally and fetching the winning Person model.
Reviewed-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
[dja: post review cleanup of now-unused import]
Signed-off-by: Daniel Axtens <dja@axtens.net>1 parent f66261e commit f78161a
2 files changed
+34
-38
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
238 | 238 | | |
239 | 239 | | |
240 | 240 | | |
241 | | - | |
| 241 | + | |
242 | 242 | | |
243 | 243 | | |
244 | 244 | | |
| |||
259 | 259 | | |
260 | 260 | | |
261 | 261 | | |
262 | | - | |
263 | 262 | | |
264 | 263 | | |
265 | 264 | | |
| |||
279 | 278 | | |
280 | 279 | | |
281 | 280 | | |
282 | | - | |
| 281 | + | |
283 | 282 | | |
284 | 283 | | |
285 | 284 | | |
| |||
294 | 293 | | |
295 | 294 | | |
296 | 295 | | |
297 | | - | |
| 296 | + | |
298 | 297 | | |
299 | 298 | | |
300 | | - | |
| 299 | + | |
301 | 300 | | |
302 | 301 | | |
303 | 302 | | |
| |||
338 | 337 | | |
339 | 338 | | |
340 | 339 | | |
341 | | - | |
342 | | - | |
343 | | - | |
344 | | - | |
345 | | - | |
346 | | - | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
347 | 351 | | |
348 | 352 | | |
349 | 353 | | |
| |||
944 | 948 | | |
945 | 949 | | |
946 | 950 | | |
947 | | - | |
948 | 951 | | |
949 | 952 | | |
950 | 953 | | |
| |||
970 | 973 | | |
971 | 974 | | |
972 | 975 | | |
973 | | - | |
| 976 | + | |
974 | 977 | | |
975 | 978 | | |
976 | 979 | | |
| |||
981 | 984 | | |
982 | 985 | | |
983 | 986 | | |
984 | | - | |
| 987 | + | |
985 | 988 | | |
986 | 989 | | |
987 | 990 | | |
| |||
1058 | 1061 | | |
1059 | 1062 | | |
1060 | 1063 | | |
1061 | | - | |
| 1064 | + | |
1062 | 1065 | | |
1063 | 1066 | | |
1064 | 1067 | | |
| |||
1106 | 1109 | | |
1107 | 1110 | | |
1108 | 1111 | | |
1109 | | - | |
| 1112 | + | |
1110 | 1113 | | |
1111 | 1114 | | |
1112 | 1115 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
37 | | - | |
| 37 | + | |
38 | 38 | | |
39 | 39 | | |
40 | 40 | | |
| |||
225 | 225 | | |
226 | 226 | | |
227 | 227 | | |
228 | | - | |
| 228 | + | |
229 | 229 | | |
230 | 230 | | |
231 | 231 | | |
| |||
241 | 241 | | |
242 | 242 | | |
243 | 243 | | |
244 | | - | |
| 244 | + | |
245 | 245 | | |
246 | 246 | | |
247 | 247 | | |
| |||
269 | 269 | | |
270 | 270 | | |
271 | 271 | | |
272 | | - | |
| 272 | + | |
273 | 273 | | |
274 | 274 | | |
275 | 275 | | |
| |||
284 | 284 | | |
285 | 285 | | |
286 | 286 | | |
287 | | - | |
288 | | - | |
289 | | - | |
290 | | - | |
291 | | - | |
292 | | - | |
293 | | - | |
294 | | - | |
295 | | - | |
296 | 287 | | |
297 | 288 | | |
298 | 289 | | |
299 | 290 | | |
300 | 291 | | |
301 | | - | |
| 292 | + | |
302 | 293 | | |
303 | 294 | | |
304 | 295 | | |
305 | | - | |
| 296 | + | |
306 | 297 | | |
307 | 298 | | |
308 | 299 | | |
| |||
311 | 302 | | |
312 | 303 | | |
313 | 304 | | |
314 | | - | |
| 305 | + | |
315 | 306 | | |
316 | 307 | | |
317 | 308 | | |
318 | 309 | | |
319 | | - | |
| 310 | + | |
320 | 311 | | |
321 | 312 | | |
322 | 313 | | |
323 | 314 | | |
324 | 315 | | |
325 | 316 | | |
326 | 317 | | |
327 | | - | |
| 318 | + | |
328 | 319 | | |
329 | 320 | | |
330 | 321 | | |
331 | | - | |
| 322 | + | |
332 | 323 | | |
333 | 324 | | |
334 | 325 | | |
| |||
361 | 352 | | |
362 | 353 | | |
363 | 354 | | |
364 | | - | |
| 355 | + | |
| 356 | + | |
365 | 357 | | |
366 | 358 | | |
367 | 359 | | |
| |||
371 | 363 | | |
372 | 364 | | |
373 | 365 | | |
374 | | - | |
| 366 | + | |
| 367 | + | |
375 | 368 | | |
376 | 369 | | |
377 | 370 | | |
| |||
395 | 388 | | |
396 | 389 | | |
397 | 390 | | |
398 | | - | |
| 391 | + | |
399 | 392 | | |
400 | 393 | | |
401 | 394 | | |
| |||
0 commit comments