Bug 694894: Avoid throwing away an object while in use.
Bug 694894: Avoid throwing away an object while in use.

When we call to execute a pattern, we clear out the pdf_csi (the
interpreter state). This involves clearing the stack and throwing
away the record of the object we have just parsed.

Unfortunately, when filling glyphs with a pattern, that object is
still in use. We therefore amend the pdf_run_contents_stream to
safely stash the object away and restore it afterwards.

This solves this problem, and protects us against any other similar
problems that might also arise.

This solves:

  b8e2b57991896bf8120215cfbf7b54bb_asan_heap-uaf_86064f_2362_2587.pdf

Thanks to Mateusz Jurczyk and Gynvael Coldwind of the Google Security
Team for providing the example files.

seagullua/MuPDF,PuzzleFlow/mupdf,lolo32/mupdf-mirror,loungeup/mupdf,ylixir/mupdf,github201407/MuPDF,xiangxw/mupdf,kobolabs/mupdf,muennich/mupdf,lamemate/mupdf,xiangxw/mupdf,hxx0215/MuPDFMirror,wild0/opened_mupdf,lamemate/mupdf,hjiayz/forkmupdf,ArtifexSoftware/mupdf,FabriceSalvaire/mupdf-cmake,wild0/opened_mupdf,TamirEvan/mupdf,ccxvii/mupdf,nqv/mupdf,benoit-pierre/mupdf,zeniko/mupdf,fluks/mupdf-x11-bookmarks,TamirEvan/mupdf,samturneruk/mupdf_secure_android,loungeup/mupdf,Kalp695/mupdf,zeniko/mupdf,nqv/mupdf,tribals/mupdf,ylixir/mupdf,ccxvii/mupdf,lolo32/mupdf-mirror,tribals/mupdf,fluks/mupdf-x11-bookmarks,ArtifexSoftware/mupdf,ccxvii/mupdf,TamirEvan/mupdf,knielsen/mupdf,kobolabs/mupdf,github201407/MuPDF,FabriceSalvaire/mupdf-cmake,FabriceSalvaire/mupdf-cmake,muennich/mupdf,knielsen/mupdf,kobolabs/mupdf,xiangxw/mupdf,lustersir/MuPDF,robamler/mupdf-nacl,seagullua/MuPDF,nqv/mupdf,asbloomf/mupdf,hackqiang/mupdf,TamirEvan/mupdf,PuzzleFlow/mupdf,Kalp695/mupdf,xiangxw/mupdf,hackqiang/mupdf,muennich/mupdf,ArtifexSoftware/mupdf,asbloomf/mupdf,derek-watson/mupdf,robamler/mupdf-nacl,PuzzleFlow/mupdf,ziel/mupdf,lolo32/mupdf-mirror,github201407/MuPDF,geetakaur/NewApps,samturneruk/mupdf_secure_android,lamemate/mupdf,seagullua/MuPDF,fluks/mupdf-x11-bookmarks,loungeup/mupdf,isavin/humblepdf,Kalp695/mupdf,geetakaur/NewApps,ccxvii/mupdf,isavin/humblepdf,knielsen/mupdf,robamler/mupdf-nacl,samturneruk/mupdf_secure_android,wild0/opened_mupdf,TamirEvan/mupdf,seagullua/MuPDF,fluks/mupdf-x11-bookmarks,ccxvii/mupdf,flipstudio/MuPDF,poor-grad-student/mupdf,ylixir/mupdf,hxx0215/MuPDFMirror,sebras/mupdf,benoit-pierre/mupdf,asbloomf/mupdf,hxx0215/MuPDFMirror,loungeup/mupdf,lolo32/mupdf-mirror,MokiMobility/muPDF,hxx0215/MuPDFMirror,kobolabs/mupdf,PuzzleFlow/mupdf,FabriceSalvaire/mupdf-cmake,nqv/mupdf,wild0/opened_mupdf,MokiMobility/muPDF,isavin/humblepdf,MokiMobility/muPDF,Kalp695/mupdf,ylixir/mupdf,tribals/mupdf,xiangxw/mupdf,fluks/mupdf-x11-bookmarks,asbloomf/mupdf,lamemate/mupdf,robamler/mupdf-nacl,benoit-pierre/mupdf,Kalp695/mupdf,TamirEvan/mupdf,geetakaur/NewApps,wild0/opened_mupdf,knielsen/mupdf,loungeup/mupdf,knielsen/mupdf,hjiayz/forkmupdf,geetakaur/NewApps,MokiMobility/muPDF,benoit-pierre/mupdf,benoit-pierre/mupdf,ziel/mupdf,lolo32/mupdf-mirror,ccxvii/mupdf,kobolabs/mupdf,PuzzleFlow/mupdf,PuzzleFlow/mupdf,samturneruk/mupdf_secure_android,tribals/mupdf,benoit-pierre/mupdf,wild0/opened_mupdf,hjiayz/forkmupdf,seagullua/MuPDF,lamemate/mupdf,ylixir/mupdf,MokiMobility/muPDF,hxx0215/MuPDFMirror,hxx0215/MuPDFMirror,derek-watson/mupdf,ArtifexSoftware/mupdf,fluks/mupdf-x11-bookmarks,isavin/humblepdf,derek-watson/mupdf,hackqiang/mupdf,Kalp695/mupdf,github201407/MuPDF,zeniko/mupdf,isavin/humblepdf,sebras/mupdf,ArtifexSoftware/mupdf,lolo32/mupdf-mirror,hjiayz/forkmupdf,hackqiang/mupdf,xiangxw/mupdf,poor-grad-student/mupdf,flipstudio/MuPDF,github201407/MuPDF,lamemate/mupdf,muennich/mupdf,ziel/mupdf,sebras/mupdf,zeniko/mupdf,samturneruk/mupdf_secure_android,ziel/mupdf,derek-watson/mupdf,ArtifexSoftware/mupdf,loungeup/mupdf,kobolabs/mupdf,ArtifexSoftware/mupdf,muennich/mupdf,TamirEvan/mupdf,samturneruk/mupdf_secure_android,robamler/mupdf-nacl,nqv/mupdf,hackqiang/mupdf,ziel/mupdf,nqv/mupdf,poor-grad-student/mupdf,Kalp695/mupdf,wild0/opened_mupdf,lustersir/MuPDF,flipstudio/MuPDF,FabriceSalvaire/mupdf-cmake,muennich/mupdf,lolo32/mupdf-mirror,sebras/mupdf,ylixir/mupdf,lustersir/MuPDF,tribals/mupdf,lustersir/MuPDF,sebras/mupdf,tribals/mupdf,poor-grad-student/mupdf,seagullua/MuPDF,muennich/mupdf,hackqiang/mupdf,asbloomf/mupdf,xiangxw/mupdf,flipstudio/MuPDF,poor-grad-student/mupdf,asbloomf/mupdf,sebras/mupdf,TamirEvan/mupdf,zeniko/mupdf,robamler/mupdf-nacl,geetakaur/NewApps,kobolabs/mupdf,ziel/mupdf,MokiMobility/muPDF,FabriceSalvaire/mupdf-cmake,hjiayz/forkmupdf,flipstudio/MuPDF,flipstudio/MuPDF,geetakaur/NewApps,github201407/MuPDF,isavin/humblepdf,isavin/humblepdf,ArtifexSoftware/mupdf,derek-watson/mupdf,fluks/mupdf-x11-bookmarks,zeniko/mupdf,knielsen/mupdf,derek-watson/mupdf,poor-grad-student/mupdf,hjiayz/forkmupdf,lustersir/MuPDF,PuzzleFlow/mupdf,lustersir/MuPDF