Anonymous | Login | 01-20-2021 09:28 UTC |
Main | My View | View Issues | Change Log | Docs |
Viewing Issue Simple Details [ Jump to Notes ] | [ View Advanced ] [ Issue History ] [ Print ] | |||||||||||
ID | Category | Severity | Reproducibility | Date Submitted | Last Update | |||||||
0005236 | [Squeak] VM | crash | always | 10-14-06 09:42 | 01-09-11 22:48 | |||||||
Reporter | johnmci | View Status | public | |||||||||
Assigned To | lewis | |||||||||||
Priority | normal | Resolution | open | |||||||||
Status | assigned | Product Version | 3.9 | |||||||||
Summary | 0005236: Vm crashs in BitBltPlugin.c trying to access word in tail end of copyLoop() due to memory read failure | |||||||||||
Description |
If you have a surface, then data for the surface if nicely divisibile by the host os page size can end on a page boundary, and the next page may not be readable by you. copyLoop() when preload is true preloads the nextWord of the nextscanline, however say for example your image is 384*512, after you copy over the last word this code runs {Say you do fooform displayOn: Display} if (nWords > 1 ) { destMask = mask2; /* begin srcLongAt: */ idx9 = sourceIndex; thisWord = long32At(idx9); The long32At(idx9) actually is trying to get the word after the last word on the surface, this causes a vm read protection page fault, and we die. The solution??? Is to write some slang that alters the C code to match something like if (nWords > 1 && (!(preload && i == bbH))) { Thus on preload we don't do it if i == bbh so we don't trigger the issue with reading over the page frame boundary |
|||||||||||
Additional Information | ||||||||||||
Attached Files | ||||||||||||
|
Mantis 1.0.8[^]
Copyright © 2000 - 2007 Mantis Group
54 total queries executed. 37 unique queries executed. |