Le Sun, May 28, 2023 at 06:26:44AM +0000, David Holland a écrit : > > Also, I'm not sure everyone agrees with you on that distinction of > "size" and "length" (even though it makes a certain amount of sense) > so be careful about drawing too many conclusions. >
For this, it's simply, for me, C: char string[]; the difference between strlen(string) and sizeof string. And for the ones who could think that I'm beating around the bush, stumbling now and then on something at random, no: like in the Dupin Poe's first novel, once you have the... path, it's clear why you ended there: I wanted to use the jemalloc debugging features. But it is not on by default in libc, while jemalloc is the alloc engine now. I then wanted to LD_PRELOAD an ad hoc compiled version: the program crashed in ld.elf_so. So I started to look at the code of the rtld and saw that LD_PRELOAD was taking a list of libraries using strsep(3) to tokenize (on both column and space). Well, I use strtok(3) or an hand made variant, so I looked what strsep(3) was doing differently from strtok(3). About its features is the ability to detect "empty fields". Uh? But what will give an empty string library name? My first reaction was: "obviously" an empty string will fail. But I'm always suspicious when I answer: "obviously". It's generally because I never thought of any reason. So I take K&R and look for fopen(3): the empty string is not mentionned. Uh... So I take POSIX for open(2): the empty string is not mentionned clearly either but, distilling the mandatory errors, it seems that an empty string could be used for a directory (but converted to CWD) but could not be used for a filename. But I'm unsure of my interpretation. So I look in the NetBSD implementation and look at realpath(), then stumble on the faulty pathadj(). Having found one bug, the---normal---process is to search if this fault was not done elsewhere (when I find a fault in my code, I review all my code to see if I have not done the same fault---or another one...---for the same thing elsewhere). Then I find what I think is a nest of bugs in inetd. Going back to realpath(), I see that it uses MAXPATHLEN while PATH_MAX is defined by NetBSD and is used in the 2018 version of POSIX. So I look the definition of MAXPATHLEN to see if there can be a hiatus... -- Thierry Laronde <tlaronde +AT+ polynum +dot+ com> http://www.kergis.com/ http://kertex.kergis.com/ Key fingerprint = 0FF7 E906 FBAF FE95 FD89 250D 52B1 AE95 6006 F40C