r8916: should fix the valgrind invalid read of size 1 onthe
authorGerald Carter <jerry@samba.org>
Tue, 2 Aug 2005 07:26:29 +0000 (07:26 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:00:20 +0000 (11:00 -0500)
GetPrinterData("OSVersion") abartlet saw when browsing from
Vista client.

source/rpc_server/srv_spoolss_nt.c

index 7498a449c3ba062361e8023bdb8674d4c8cf790f..bec67daa3ef40edc19dc15d0517ada1c181a3a13 100644 (file)
@@ -2283,7 +2283,7 @@ static WERROR getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint
                
        if (!StrCaseCmp(value, "W3SvcInstalled")) {
                *type = REG_DWORD;
-               if((*data = (uint8 *)TALLOC_ZERO(ctx, 4*sizeof(uint8) )) == NULL)
+               if ( !(*data = TALLOC_ARRAY(ctx, uint8, sizeof(uint32) )) )
                        return WERR_NOMEM;
                *needed = 0x4;
                return WERR_OK;
@@ -2291,7 +2291,7 @@ static WERROR getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint
 
        if (!StrCaseCmp(value, "BeepEnabled")) {
                *type = REG_DWORD;
-               if((*data = (uint8 *)TALLOC(ctx, 4*sizeof(uint8) )) == NULL)
+               if ( !(*data = TALLOC_ARRAY(ctx, uint8, sizeof(uint32) )) )
                        return WERR_NOMEM;
                SIVAL(*data, 0, 0x00);
                *needed = 0x4;                  
@@ -2300,7 +2300,7 @@ static WERROR getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint
 
        if (!StrCaseCmp(value, "EventLog")) {
                *type = REG_DWORD;
-               if((*data = (uint8 *)TALLOC(ctx, 4 )) == NULL)
+               if ( !(*data = TALLOC_ARRAY(ctx, uint8, sizeof(uint32) )) )
                        return WERR_NOMEM;
                /* formally was 0x1b */
                SIVAL(*data, 0, 0x0);
@@ -2310,7 +2310,7 @@ static WERROR getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint
 
        if (!StrCaseCmp(value, "NetPopup")) {
                *type = REG_DWORD;
-               if((*data = (uint8 *)TALLOC(ctx, 4 )) == NULL)
+               if ( !(*data = TALLOC_ARRAY(ctx, uint8, sizeof(uint32) )) )
                        return WERR_NOMEM;
                SIVAL(*data, 0, 0x00);
                *needed = 0x4;
@@ -2319,7 +2319,7 @@ static WERROR getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint
 
        if (!StrCaseCmp(value, "MajorVersion")) {
                *type = REG_DWORD;
-               if((*data = (uint8 *)TALLOC(ctx, 4 )) == NULL)
+               if ( !(*data = TALLOC_ARRAY(ctx, uint8, sizeof(uint32) )) )
                        return WERR_NOMEM;
 
                /* Windows NT 4.0 seems to not allow uploading of drivers
@@ -2338,7 +2338,7 @@ static WERROR getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint
 
        if (!StrCaseCmp(value, "MinorVersion")) {
                *type = REG_DWORD;
-               if((*data = (uint8 *)TALLOC(ctx, 4 )) == NULL)
+               if ( !(*data = TALLOC_ARRAY(ctx, uint8, sizeof(uint32) )) )
                        return WERR_NOMEM;
                SIVAL(*data, 0, 0);
                *needed = 0x4;
@@ -2356,7 +2356,7 @@ static WERROR getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint
                *type = REG_BINARY;
                *needed = 0x114;
 
-               if ( !(*data = TALLOC_ZERO_ARRAY(ctx, uint8, *needed)) )
+               if ( !(*data = TALLOC_ZERO_ARRAY(ctx, uint8, (*needed > in_size) ? *needed:in_size )) )
                        return WERR_NOMEM;
 
                SIVAL(*data, 0, *needed);       /* size */
@@ -2402,7 +2402,7 @@ static WERROR getprinterdata_printer_server(TALLOC_CTX *ctx, fstring value, uint
 
        if (!StrCaseCmp(value, "DsPresent")) {
                *type = REG_DWORD;
-               if((*data = (uint8 *)TALLOC(ctx, 4 )) == NULL)
+               if ( !(*data = TALLOC_ARRAY(ctx, uint8, sizeof(uint32) )) )
                        return WERR_NOMEM;
 
                /* only show the publish check box if we are a