return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
}
+ /* The output header is 8 bytes. */
+ if (in_output_buffer_length <= 8) {
+ return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
+ }
+
+ DEBUG(10,("smbd_smb2_request_find_done: in_output_buffer_length = %u\n",
+ (unsigned int)in_output_buffer_length ));
+
+ /* Take into account the output header. */
+ in_output_buffer_length -= 8;
+
in_file_name_buffer.data = (uint8_t *)req->in.vector[i+2].iov_base;
in_file_name_buffer.length = in_file_name_length;
SIVAL(outbody.data, 0x04,
out_output_buffer.length); /* output buffer length */
+ DEBUG(10,("smbd_smb2_request_find_done: out_output_buffer.length = %u\n",
+ (unsigned int)out_output_buffer.length ));
+
outdyn = out_output_buffer;
error = smbd_smb2_request_done(req, outbody, &outdyn);
char *base_data;
char *end_data;
int last_entry_off = 0;
- uint64_t off = 0;
+ int off = 0;
uint32_t num = 0;
uint32_t dirtype = aHIDDEN | aSYSTEM | aDIR;
const char *directory;
off = 0;
num = 0;
- DEBUG(8,("smbd_smb2_find_send: dirpath=<%s> dontdescend=<%s>\n",
- directory, lp_dontdescend(SNUM(conn))));
+ DEBUG(8,("smbd_smb2_find_send: dirpath=<%s> dontdescend=<%s>, "
+ "in_output_buffer_length = %u\n",
+ directory, lp_dontdescend(SNUM(conn)),
+ (unsigned int)in_output_buffer_length ));
if (in_list(directory,lp_dontdescend(SNUM(conn)),conn->case_sensitive)) {
dont_descend = true;
}
bool out_of_space = false;
int space_remaining = in_output_buffer_length - off;
+ SMB_ASSERT(space_remaining >= 0);
+
ok = smbd_dirptr_lanman2_entry(state,
conn,
fsp->dptr,
&last_entry_off,
NULL);
- off = PTR_DIFF(pdata, base_data);
+ off = (int)PTR_DIFF(pdata, base_data);
if (!ok) {
if (num > 0) {
uint32_t mode,
const char *fname,
const struct smb_filename *smb_fname,
- uint64_t space_remaining,
+ int space_remaining,
uint8_t align,
bool do_pad,
char *base_data,
char *nameptr;
char *last_entry_ptr;
bool was_8_3;
- off_t off;
- off_t pad = 0;
+ int off;
+ int pad = 0;
*out_of_space = false;
c_date = convert_timespec_to_time_t(cdate_ts);
/* align the record */
- off = PTR_DIFF(pdata, base_data);
+ SMB_ASSERT(align >= 1);
+
+ off = (int)PTR_DIFF(pdata, base_data);
pad = (off + (align-1)) & ~(align-1);
pad -= off;
off += pad;
}
space_remaining -= pad;
+ DEBUG(10,("smbd_marshall_dir_entry: space_remaining = %d\n",
+ space_remaining ));
+
pdata += pad;
p = pdata;
last_entry_ptr = p;
/* Max string size is 255 bytes. */
if (PTR_DIFF(p + 255 + ea_len,pdata) > space_remaining) {
*out_of_space = true;
- DEBUG(9,("smbd_marshall_dir_entry: out of space\n"));
+ DEBUG(9,("smbd_marshall_dir_entry: out of space "
+ "(wanted %u, had %d)\n",
+ (unsigned int)PTR_DIFF(p + 255 + ea_len,pdata),
+ space_remaining ));
return False; /* Not finished - just out of space */
}
if (PTR_DIFF(p,pdata) > space_remaining) {
*out_of_space = true;
- DEBUG(9,("smbd_marshall_dir_entry: out of space\n"));
+ DEBUG(9,("smbd_marshall_dir_entry: out of space "
+ "(wanted %u, had %d)\n",
+ (unsigned int)PTR_DIFF(p,pdata),
+ space_remaining ));
return false; /* Not finished - just out of space */
}