[TUHS] reviving a bit of WWB

Dan Cross crossd at gmail.com
Tue Sep 22 05:56:19 AEST 2020


On Mon, Sep 21, 2020 at 2:40 PM Paul Winalski <paul.winalski at gmail.com>
wrote:

> VAX/VMS was the first operating system I encountered where 0 was not a
> valid program address.  As was mentioned previously, address space on
> early machines was too precious to throw away a whole page of it just
> to catch bad null pointer references.
>
> I once saw a C program that depended on 0 being a valid pointer
> address, and on a 0x00 byte being at memory address 0.  The program
> had a bunch of char* pointers that were used in a printf() call,
> something like:
>
> printf("%s%s%s%s\n", a, b, c, d);
>
> If you didn't want, say, the third string printed, you assigned NULL
> to variable c.  That caused c to point to location 0, and printf()
> interpreted the 0 byte as the empty string "".
>
> It was hell getting this program to work on the VAX.


That sounds annoying, but not necessarily insurmountable? I imagine you
could wrap it in something like:

void
print4(char *a, char *b, char *c, char *d)
{
        if (a == NULL) a = "";
        if (b == NULL) b = "";
        if (c == NULL) c = "";
        if (d == NULL) d = "";
        printf("%s%s%s%s\n", a, b, c, d);
}

?

I guess if it was more complex than that, like say being variadic, it'd be
really annoying because you'd have to walk the arguments and accumulate
them and assign pointers to empty strings as appropriate, or just wrap
printf and interpret the format string.

        - Dan C.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://minnie.tuhs.org/pipermail/tuhs/attachments/20200921/b91ee73d/attachment.htm>


More information about the TUHS mailing list