Path: nntp.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail From: candycanearter07 Newsgroups: comp.os.linux.misc Subject: Re: VMS Date: Fri, 27 Jun 2025 06:00:03 -0000 (UTC) Organization: the-candyden-of-code Lines: 68 Message-ID: References: <87tt4i9nw5.fsf@eder.anydns.info> <102l0h9$fjtb$5@dont-email.me> <4_GdncCsf-Nqe8n1nZ2dnZfqnPSdnZ2d@giganews.com> <103392c$lpbg$5@dont-email.me> <1033o4a$1qj6$3@dont-email.me> <1033tv1$3aqu$3@dont-email.me> <1034pj8$a74s$1@dont-email.me> Injection-Date: Fri, 27 Jun 2025 08:00:03 +0200 (CEST) Injection-Info: dont-email.me; posting-host="e6abfc5fd2284da38de1ded8e9eabd2d"; logging-data="4186620"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/1INw+puGtpAGj8uuv/6nnD7XCue3O8hYY2EBQ/zgR4w==" User-Agent: slrn/1.0.3 (Linux) Cancel-Lock: sha1:E0hLC5zMrE67ObHX9rP7JpRgx1c= X-Face: b{dPmN&%4|lEo,wUO\"KLEOu5N_br(N2Yuc5/qcR5i>9-!^e\.Tw9?/m0}/~:UOM:Zf]% b+ V4R8q|QiU/R8\|G\WpC`-s?=)\fbtNc&=/a3a)r7xbRI]Vl)r<%PTriJ3pGpl_/B6!8pe\btzx `~R! r3.0#lHRE+^Gro0[cjsban'vZ#j7,?I/tHk{s=TFJ:H?~=]`O*~3ZX`qik`b:.gVIc-[$t/e ZrQsWJ >|l^I_[pbsIqwoz.WGA] wrote at 03:34 this Tuesday (GMT): > On 2025-06-22, candycanearter07 wrote: >> Robert Riches wrote at 03:43 this Saturday (GMT): >>> On 2025-06-21, rbowman wrote: >>>> On Fri, 20 Jun 2025 23:07:20 -0000 (UTC), Rich wrote: >>>> >>>>> Very likely, but the idea was to protect the typical programmer from >>>>> their own common mistakes (of not carefully checking error return codes >>>>> or buffer lengths, etc.). I.e. the typical 9-5 contract programmer, not >>>>> the Dennis Ritchie's of the world. >>>> >>>> I'm paranoid enough that I check the return of malloc and try to log the >>>> problem even though I'm probably screwed at that point. It has pointed out >>>> errors for calloc if you've manged to come up with a negative size. >>>> >>>> I have worked with programmers that assumed nothing bad would ever happen. >>>> Sadly, some had years of experience. >>> >>> Some years ago, I heard of a bug related to use of malloc. The >>> code had _intended_ to dynamically allocate storage for a string >>> and the terminating null byte. It was _intended_ to do this: >>> >>> dest = malloc(strlen(src)+1); >>> >>> Instead, a paren was misplaced: >>> >>> dest = malloc(strlen(src))+1; >>> >>> IIUC, the next line copied the src string into the newly- >>> allocated destination. >> >> Aren't you supposed to multiply by sizeof as well? > > Multiply by sizeof what? sizeof(char)? This was in the > pre-Unicode days. Even now with Unicode, IIUC sizeof(char) is > still always 1. I still multiply by sizeof(char), half because of habit and half to make it clear to myself I'm making a char array, even if its "redundant". I kinda thought that was the "cannonical" way to do that, since you could have a weird edge case with a system defining char as something else? >>> Those who had worked on that project longer said the bug had been >>> latent in the code for several years, most likely with alignment >>> padding masking the bug from being discovered. Curiously, the >>> bug made itself manifest immediately upon changing from a 32-bit >>> build environment to a 64-bit build environment. >> >> >> I'm more surprised it didn't segfault. Any idea what caused it to not? >> I know strlen doesn't account for the terminating character, but it >> seems like it should've been TWO bytes shorter... > > IIUC, heap-based malloc _usually_ returns a larger allocation > block than you really asked for. As long as malloc gave you at > least 2 extra bytes, you'd never see any misbehavior. Even if it > didn't give you 2 or more extra bytes, it's fairly likely you'd > just get lucky and never see the program crash or otherwise > misbehavior in a significant way. For example, if you stomped on > the header of the next allocation block, as long as nothing ever > read and acted upon the data in said header, you'd never see it. Oh, so it was some poorly written code being covered up by a weird quirk in the 32b version of the compiler? Always interesting hearing about "accidentilly working" programs. -- user is generated from /dev/urandom