[Cuis-dev] BMP Reader broken

lewis at mail.msen.com lewis at mail.msen.com
Mon Mar 18 13:02:42 PDT 2024

Thanks Juan, I made the updates to the Smalltalk source (VMMaker and 
VMMaker.oscog packages) and pushed the generated C code to the github 
and SVN repositories.

CC to the vm-dev list for info.


On 2024-03-18 18:16, Juan Vuletich via Cuis-dev wrote:

> Hi Dave,
> On 3/18/2024 12:35 PM, lewis--- via Cuis-dev wrote:
> Hi Juan,
> On 2024-03-17 18:17, Juan Vuletich via Cuis-dev wrote:
> Hi Dave,
> On 3/16/2024 6:22 PM, lewis--- via Cuis-dev wrote:As I said in a 
> separate email, Vanessa found the origin of the problem, and the fix is 
> now at GitHub.
> Still, as you say, the primitive fails, both in Cuis and Squeak, but 
> only the first time it is called. The lines are read in reverse order, 
> so the line that is first copied is actually the last one.
> In #read24BmpLine:into:startingAt:width:, at the start of the fallback 
> code, I added this line: `{formBitsIndex+width. formBits size} print.`. 
> Then tried to load Hilaire's BMP. In the Transcript I got #(63601 
> 63600). So, in BMPReadWriterPlugin.c, the lines that read:
> if (!(((formBitsIndex + width) <= formBitsSize)
> && ((width * 3) <= pixelLineSize))) {
> return primitiveFail();
> should actually read
> if (!(((formBitsIndex + width - 1) <= formBitsSize)
> && ((width * 3) <= pixelLineSize))) {
> return primitiveFail();
> and the primitive will not fail.
> It is a minor bug, with no practical consequences, so this is not 
> really important. But I found this while investigating the BMP read 
> failure, and I thought it was worth commenting.
> Thanks,
> The expression appears in both 
> BMPReadWriterPlugin>>primitiveRead24BmpLine and 
> BMPReadWriterPlugin>>primitiveWrite24BmpLine. Can you please confirm my 
> assumption that the same fix should be applied to both methods? Sorry 
> if this is obvious but I just want to be sure.
> Thanks!
> Dave

Yep. Checking the code in both methods it is pretty clear that they are 
analogous. In any case, I did some quick testing, and in both cases the 
primitive fails exactly once and for the same value of the parameters. 
The tweak should be same in both cases.


Juan Vuletich
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20240318/6e1bc1bd/attachment.htm>

More information about the Cuis-dev mailing list