[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: RFS: rman (updated package)



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

On 2011-01-18 12:15, Anton Gladky wrote:
> Hi, Niels,
> 
> I have re-uploaded that.
> 
> Thanks.
> 
> Anton
> 
> 
> 
> 
> On Tue, Jan 18, 2011 at 10:44 AM, Niels Thykier <niels@thykier.net> wrote:
> On 2011-01-17 22:04, Anton Gladky wrote:
>>>> Hi, Niels,
>>>>
> 
> Hey
> 
>>>> I have uploaded a new version of rman. Could you not, please, have a look?
>>>> It seems, that I have fixed all issues, which were suggested by you.
>>>>
> 
> Sure; I have a question to the realloc replacement.  It seems like your
> replacement will be unable to handle if there was not enough memory in
> the first iteration.
> 
> @@ -4615,10 +4615,10 @@ char *
>  filesuck(FILE *in) {
>   const int inc=1024*100;      /* [...] */
>   int len=0,cnt;
> -  char *file = malloc(1);  /*[...] */
> +  char *file;
> 
>   do {
> -    file = realloc(file, len+inc+1);   /* w[...] */
> +    file = malloc(len+inc+1);  /* [...] */
>     cnt = fread(&file[len], 1, inc, in);
>     len+=cnt;
>   } while (cnt==inc);
> ----
> 
> I believe the following pattern can be used to solve the original problem.
> 
> char *tmp = realloc(file, len + inc + 1);
> if(!tmp) { free(file); <fail-in-a-sane-way>; }
> file = tmp;
> 
>>>> [...]

Better, but it is still lacking the "<fail-in-a-sane-way>" part :)

Right now it will free file and continue, leading to a null pointer
dereference when it calls fread().  You should be able to use

fprintf(stderr, "Out of memory\n");
exit(EXIT_FAILURE);

as a sane way to fail.

~Niels
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iQIcBAEBCAAGBQJNNbpYAAoJEAVLu599gGRCZuwP/1qlMa4A8+qEFPeVHh5kv057
NTZXxHyLqWcHDy/LHVa/1uDjYglo/dvIuQZgZonUS3rGxJMQhS6UaWzCd8eoKCm0
0Mm7g+Z0+xsy3Kr5ymhtiOYugCf/RKfQLB3iqzWEeOiVUEn2av5XMUvtqmUhfgKk
sgppTKLYLyMOhaHHzgIA9Hl9UYahOZRGOmb0uFYVr5pQQVY8RpfEHn9OZKQvIrJv
IexJI6rESTCXFitp3HidUQZPD2xZhKhLRlGBKxEw+qXtkP3/QAgowb54eXF3f9mE
LNmzbQkHfqQUCIwBplvNvGx9gm91DRgli135U4pJMdXhaWYxZt1SUgQQ6A3xyF4l
Dy3xWzjnasI+gnvlgwuytiBwCbAdFXU3/d1nR7wO59PtdKf8qN3W/1jue0tfBF0N
6hqNWejhsLsD0s6qnPd0cKgqV/KWS0wMqAp17Re0RqdieB7dDSoTMwIsd4QsTXVC
GlCPqZnAddIHwBtxQHsFhzfzmlIAY8vEup+MW3iysp4VJJWR2whwY2/LujNNCiWN
Z3YyEZW/chUnIlwN288e4XCh2MtkfUqtyKdEr2zCxtcmZJid5r3SyXHRsnsE0Mes
F1hFclFIVAqfr7IhYPh4FWOUZlRq7vFH06xTPAGXcFrD7NATFLKmWnFfxSrqhgzB
IvaVsw4oyA7TxiKag89R
=50Rw
-----END PGP SIGNATURE-----


Reply to: