NetBSD-Bugs archive

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

Re: bin/47154: dd gives strange error on 4095m blocksize



The following reply was made to PR bin/47154; it has been noted by GNATS.

From: David Holland <dholland-bugs%netbsd.org@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: 
Subject: Re: bin/47154: dd gives strange error on 4095m blocksize
Date: Fri, 26 Dec 2014 23:33:05 +0000

 Not sent to gnats.
 (the procedure is: send mail to gnats-bugs; that goes into the bug
 database and it remails to ~everywhere)
 
    ------
 
 From: Miwa Susumu <miwarin%gmail.com@localhost>
 To: gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost, ben%hl9.net@localhost
 Subject: Re: bin/47154
 Date: Mon, 3 Nov 2014 01:11:38 +0900
 
 It would post many times, I'm sorry.
 
 2014-11-02 0:20 GMT+09:00 Miwa Susumu <miwarin%gmail.com@localhost>:
 > The following reply was made to PR bin/47154; it has been noted by GNATS.
 >
 > From: Miwa Susumu <miwarin%gmail.com@localhost>
 > To: gnats-bugs%netbsd.org@localhost, gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost,
 >         ben%hl9.neta@localhost
 >  >
 >  > I was modified to check the arguments before malloc().
 >  >
 >
 >  my source code looks like it was older.
 >  I should use the current....
 
 % uname -msr
 NetBSD 7.99.1 i386
 
 
 Again I will die here.
 
 dd.c setup()
 
   if (!(ddflags & (C_BLOCK|C_UNBLOCK))) {
     size_t dbsz = out.dbsz;
     if (!(ddflags & C_BS))
       dbsz += in.dbsz - 1;
     if ((in.db = malloc(dbsz)) == NULL) {   <====
       err(EXIT_FAILURE, NULL);
       /* NOTREACHED */
     }
     out.db = in.db;
 
 
 By the way Do you know behavior of malloc?
 
 example:
 4294967295u (SIZE_T_MAX) is an error. that's ok.
 4293918720u (4095m) segmetation fault. It is not an error.
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
 
 int main(int ac, char** av)
 {
   char* buf0;
   char* buf1;
 
   buf0 = malloc( 4294967295u );
   if(buf0 == NULL) printf("%s\n", strerror(errno));
   if(buf0 != NULL) free(buf0);
 
   buf1 = malloc( 4293918720u );
   if(buf1 == NULL) printf("%s\n", strerror(errno));
   if(buf1 != NULL) free(buf1);
   return 0;
 }
 
 
 4293918720u is 4294967295u smaller.
 However, why do you not in error?
 


Home | Main Index | Thread Index | Old Index