do:

String new: -1

Yes, it doesn't really run out of memory, it's just a bug in ByteString>>basicNew:

(ec == #'insufficient object memory' or: [ec == #'bad argument']) ifTrue:
[^self handleFailingBasicNew: sizeRequested].

The VM gives us a nice error code telling us the arguement is bad, and then our code proceeds to assume it is out of memory instead.

Bug verified in latest Trunk (as of now), and raw 5.1 image.

A proposed fix is in the inbox:
http://source.squeak.org/inbox/Kernel-cbc.1054.mcz

This fix uses the old " self error: " pattern.  If you'd prefer a new error for invalid argument, I would be happy to post a variant for that.

Thanks,
-cbc