[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