[Cuis-dev] ReferenceStream cannot read Dictionary object written with Squeak (was Re: ReferenceStream restoreFromFile: aFileEntry goes into infinite loop)

Juan Vuletich juan at cuis.st
Mon Sep 22 06:45:30 PDT 2025


Hi,

On 22/09/2025 10:10 AM, H. Hirzel via Cuis-dev wrote:
> I could identify the change set which causes the problem, it is from 
> last Wednesday
>
> CoreUpdates\7580-ReferenceStream-61BitSmallIntegers-fix-JuanVuletich-2025Sep17-08h16m-jmv.001.cs.st 
> <http://7580-ReferenceStream-61BitSmallIntegers-fix-JuanVuletich-2025Sep17-08h16m-jmv.001.cs.st>
>
> It introduces a new version of #readInteger and writeInteger: in the 
> class DataStream.
> If I undo the change of this change set it works.
>
> --Hannes


As you saw in that changeset (file name, comments in code, commit 
message), and as exemplified in the test added to BaseImageTests shortly 
after, what that code does is not to cause a problem, but to fix a 
serious bug that has been around for a long time and that is still 
present in Squeak. Just try to serialize an object with a largish 
SmallInteger and see what you get back.

Anyway. I just pushed a better implementation that uses a different 
format for 32bit SmallIntegers than from larger ones. This brings back 
compatibility with the badly broken Squeak format, although it obviously 
can't bring back the bits that Squeak discarded when saving the file, 
and results will be wrong unless you're lucky enough to only use small 
SmallIntegers.


>
>
>
>
>
>
> On Mon, Sep 22, 2025 at 2:36 PM H. Hirzel <hannes.hirzel at gmail.com> wrote:
>
>     I am currently identifying which change set causes the problem.
>     So far Cuis update 7523 still works.
>
>     This means if I produce a file ' aDictWithByteArraysFromSq.obj' in
>     Squeak I can read it in Cuis 7523
>
>     So the problem has been introduced in one of the last 60 updates.
>
>
>         "Squeak"
>         dict := Dictionary new.
>         dict at: 1 put: #[1 2 3 4].
>         dict at: 2 put: #[5 6 7 8].
>         dict at: 3 put: #[10 20 30 40].
>
>         fileStream := ReferenceStream fileNamed:
>         'aDictWithByteArraysFromSq.obj'.
>         objectToSave := dict.
>         fileStream nextPut: objectToSave.
>         fileStream close
>
>         "-----------------------------------------------"
>         "Restore in Cuis"
>         ReferenceStream restoreFromFile:
>         ('aDictWithByteArraysFromSq.obj' asFileEntry).
>
>         "Result
>         OK in Cuis 7523
>         NOT OK in Cuis 7584"
>
>
-- 
Juan Vuletich
www.cuis.st
github.com/jvuletich
researchgate.net/profile/Juan-Vuletich
independent.academia.edu/JuanVuletich
patents.justia.com/inventor/juan-manuel-vuletich
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cuis.st/mailman/archives/cuis-dev/attachments/20250922/84a17d74/attachment.htm>


More information about the Cuis-dev mailing list