summaryrefslogtreecommitdiffstats
path: root/source/rpc_parse
diff options
context:
space:
mode:
authorJean-François Micouleau <jfm@samba.org>1999-09-24 14:45:21 +0000
committerJean-François Micouleau <jfm@samba.org>1999-09-24 14:45:21 +0000
commita893df5c00189d7e81efd619a4a4ee2bd8ead61f (patch)
tree10d928d5287d47ac7f01d20e24fcb649c76bf1cb /source/rpc_parse
parent7dc7801c20d53caef09519231a65403e007344e6 (diff)
downloadsamba-a893df5c00189d7e81efd619a4a4ee2bd8ead61f.tar.gz
samba-a893df5c00189d7e81efd619a4a4ee2bd8ead61f.tar.xz
samba-a893df5c00189d7e81efd619a4a4ee2bd8ead61f.zip
Correctly handle the dependent files in the printer_driver_info_3 struct
It means complex printer drivers should now download fine. J.F.
Diffstat (limited to 'source/rpc_parse')
-rw-r--r--source/rpc_parse/parse_spoolss.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/source/rpc_parse/parse_spoolss.c b/source/rpc_parse/parse_spoolss.c
index 7b15ba2a427..c66d176c78b 100644
--- a/source/rpc_parse/parse_spoolss.c
+++ b/source/rpc_parse/parse_spoolss.c
@@ -828,15 +828,25 @@ static void smb_io_relarraystr(char *desc, prs_struct *ps, int depth, UNISTR ***
uint32 relative_offset;
struct_offset=ps->offset;
-
while ( (*buffer)[i]!=0x0000 )
{
+ i++;
+ }
+
+ i--;
+
+ /* that's for the ending NULL */
+ *end_offset-=2;
+
+ do
+ {
*end_offset-= 2*(str_len_uni((*buffer)[i])+1);
ps->offset=*end_offset;
spoolss_smb_io_unistr(desc, (*buffer)[i], ps, depth);
- i++;
+ i--;
}
+ while (i>=0);
ps->offset=struct_offset;
relative_offset=*end_offset-*start_offset;
@@ -1328,7 +1338,7 @@ static uint32 spoolss_size_printer_driver_info_3(DRIVER_INFO_3 *info)
size+=2*(1+ str_len_uni( string[i] ) );
i++;
}
- size+=4;
+ size+=6;
DEBUGADD(9,("size: [%d]\n", size));
return (size);