[Samba] Printing eats my CPU

Gerald Carter jerry at samba.org
Mon Jul 29 10:18:02 GMT 2002


On Mon, 29 Jul 2002, Franz Sirl wrote:

> Franz.
> 
>          * rpc_server/srv_spoolss_nt.c (_spoolss_enumprinterdataex): Don't 
> try to allocate 0 bytes.

Actulayy...try this patch (modified your original one a little
to make sure the pointer was NULL if no memory was allocated).

I'm not sure, but I have a gut feeling the marshalling routine 
may need to be modified to deal with data of length 0.   But I 
really need to see a trace from 2k -> 2k for this.  I'll leave it 
alone for now.









cheers, jerry
 ---------------------------------------------------------------------
 Hewlett-Packard                                     http://www.hp.com
 SAMBA Team                                       http://www.samba.org
 --                                            http://www.plainjoe.org
 "Sam's Teach Yourself Samba in 24 Hours" 2ed.      ISBN 0-672-32269-2
 --"I never saved anything for the swim back." Ethan Hawk in Gattaca--
-------------- next part --------------
Index: rpc_server/srv_spoolss_nt.c
===================================================================
RCS file: /data/cvs/samba/source/rpc_server/srv_spoolss_nt.c,v
retrieving revision 1.115.2.210
diff -u -r1.115.2.210 srv_spoolss_nt.c
--- rpc_server/srv_spoolss_nt.c	2002/07/04 21:08:37	1.115.2.210
+++ rpc_server/srv_spoolss_nt.c	2002/07/29 12:49:25
@@ -7914,7 +7914,6 @@
 	while (get_specific_param_by_index(*printer, 2, param_index, value, &data, &type, &data_len)) 
 	{
 		PRINTER_ENUM_VALUES	*ptr;
-		uint32			add_len = 0;
 
 		DEBUG(10,("retrieved value number [%d] [%s]\n", num_entries, value));
 
@@ -7925,19 +7924,26 @@
 			goto done;
 		}
 		enum_values = ptr;
+		
+		ZERO_STRUCTP( &enum_values[num_entries] );
 
 		/* copy the data */
+		
 		init_unistr(&enum_values[num_entries].valuename, value);
 		enum_values[num_entries].value_len = (strlen(value)+1) * 2;
 		enum_values[num_entries].type      = type;
 		
-		if (!(enum_values[num_entries].data=talloc_zero(p->mem_ctx, data_len+add_len))) {
-			DEBUG(0,("talloc_realloc failed to allocate more memory for data!\n"));
-			result = WERR_NOMEM;
-			goto done;
+		if ( data_len )
+		{
+			if ( !(enum_values[num_entries].data = talloc_zero(p->mem_ctx, data_len)) ) {
+				DEBUG(0,("talloc_realloc failed to allocate more memory [data_len=%d] for data!\n", data_len ));
+				result = WERR_NOMEM;
+				goto done;
+			}
+			memcpy(enum_values[num_entries].data, data, data_len);
 		}
-		memcpy(enum_values[num_entries].data, data, data_len);
-		enum_values[num_entries].data_len = data_len + add_len;
+
+		enum_values[num_entries].data_len = data_len;
 
 		/* keep track of the size of the array in bytes */
 		


More information about the samba mailing list