1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-27 22:50:26 +03:00

r25238: Make the error returns from the string functions

always consistent. Return -1 on error, and ensure
we check for this. In cases where the dest is already
specified and we've been asked to terminate with a
null, ensure we always do so even on error.
Jeremy.
(This used to be commit abedd967869ade9a43c3a8e1b889c60d4aca81cf)
This commit is contained in:
Jeremy Allison 2007-09-19 17:52:06 +00:00 committed by Gerald (Jerry) Carter
parent 0805a4bc71
commit 934b92f5d0
2 changed files with 47 additions and 23 deletions

View File

@ -745,7 +745,7 @@ size_t unix_strupper(const char *src, size_t srclen, char *dest, size_t destlen)
size = push_ucs2_allocate(&buffer, src);
if (size == (size_t)-1) {
return 0;
return (size_t)-1;
}
if (!strupper_w(buffer) && (dest == src)) {
free(buffer);
@ -963,14 +963,12 @@ size_t push_ascii(void *dest, const char *src, size_t dest_len, int flags)
/* No longer allow a length of -1. */
if (dest_len == (size_t)-1) {
smb_panic("push_ascii - dest_len == -1");
return (size_t)0;
}
if (flags & STR_UPPER) {
tmpbuf = SMB_STRDUP(src);
if (!tmpbuf) {
smb_panic("malloc fail");
return (size_t)0;
}
strupper_m(tmpbuf);
src = tmpbuf;
@ -981,10 +979,12 @@ size_t push_ascii(void *dest, const char *src, size_t dest_len, int flags)
}
ret = convert_string(CH_UNIX, CH_DOS, src, src_len, dest, dest_len, True);
SAFE_FREE(tmpbuf);
if (ret == (size_t)-1) {
return 0;
if (ret == (size_t)-1 &&
(flags & (STR_TERMINATE | STR_TERMINATE_ASCII))
&& dest_len > 0) {
((char *)dest)[0] = '\0';
}
SAFE_FREE(tmpbuf);
return ret;
}
@ -1071,7 +1071,6 @@ size_t pull_ascii(char *dest, const void *src, size_t dest_len, size_t src_len,
if (dest_len == (size_t)-1) {
/* No longer allow dest_len of -1. */
smb_panic("pull_ascii - invalid dest_len of -1");
return 0;
}
if (flags & STR_TERMINATE) {
@ -1168,7 +1167,7 @@ static size_t pull_ascii_base_talloc(TALLOC_CTX *ctx,
True);
if (dest_len == (size_t)-1) {
return 0;
dest_len = 0;
}
if (dest_len && dest) {
@ -1228,7 +1227,6 @@ size_t push_ucs2(const void *base_ptr, void *dest, const char *src, size_t dest_
if (dest_len == (size_t)-1) {
/* No longer allow dest_len of -1. */
smb_panic("push_ucs2 - invalid dest_len of -1");
return 0;
}
if (flags & STR_TERMINATE)
@ -1249,7 +1247,12 @@ size_t push_ucs2(const void *base_ptr, void *dest, const char *src, size_t dest_
ret = convert_string(CH_UNIX, CH_UTF16LE, src, src_len, dest, dest_len, True);
if (ret == (size_t)-1) {
return 0;
if ((flags & STR_TERMINATE) &&
dest &&
dest_len) {
*(char *)dest = 0;
}
return len;
}
len += ret;
@ -1327,13 +1330,12 @@ static size_t push_utf8(void *dest, const char *src, size_t dest_len, int flags)
if (dest_len == (size_t)-1) {
/* No longer allow dest_len of -1. */
smb_panic("push_utf8 - invalid dest_len of -1");
return 0;
}
if (flags & STR_UPPER) {
tmpbuf = strdup_upper(src);
if (!tmpbuf) {
return 0;
return (size_t)-1;
}
src = tmpbuf;
src_len = strlen(src);
@ -1434,7 +1436,8 @@ size_t pull_ucs2(const void *base_ptr, char *dest, const void *src, size_t dest_
ret = convert_string(CH_UTF16LE, CH_UNIX, src, src_len, dest, dest_len, True);
if (ret == (size_t)-1) {
return 0;
ret = 0;
dest_len = 0;
}
if (src_len == (size_t)-1)
@ -1523,7 +1526,7 @@ static size_t pull_ucs2_base_talloc(TALLOC_CTX *ctx,
(void *)&dest,
True);
if (dest_len == (size_t)-1) {
return 0;
dest_len = 0;
}
if (src_len == (size_t)-1)
@ -1668,11 +1671,9 @@ size_t push_string_fn(const char *function, unsigned int line,
* JRA.
*/
#if 0
if (dest_len != (size_t)-1)
clobber_region(function, line, dest, dest_len);
clobber_region(function, line, dest, dest_len);
#else
if (dest_len != (size_t)-1)
memset(dest, '\0', dest_len);
memset(dest, '\0', dest_len);
#endif
#endif
@ -1705,8 +1706,7 @@ size_t pull_string_fn(const char *function, unsigned int line,
int flags)
{
#ifdef DEVELOPER
if (dest_len != (size_t)-1)
clobber_region(function, line, dest, dest_len);
clobber_region(function, line, dest, dest_len);
#endif
if ((base_ptr == NULL) && ((flags & (STR_ASCII|STR_UNICODE)) == 0)) {

View File

@ -53,6 +53,7 @@ void process_logon_packet(struct packet_struct *p, char *buf,int len,
char *uniuser; /* Unicode user name. */
pstring ascuser;
char *unicomp; /* Unicode computer name. */
size_t size;
memset(outbuf, 0, sizeof(outbuf));
@ -108,9 +109,12 @@ logons are not enabled.\n", inet_ntoa(p->ip) ));
fstrcpy(reply_name, "\\\\");
fstrcat(reply_name, my_name);
push_ascii(q,reply_name,
size = push_ascii(q,reply_name,
sizeof(outbuf)-PTR_DIFF(q, outbuf),
STR_TERMINATE);
if (size == (size_t)-1) {
return;
}
q = skip_string(outbuf,sizeof(outbuf),q); /* PDC name */
SSVAL(q, 0, token);
@ -206,9 +210,12 @@ logons are not enabled.\n", inet_ntoa(p->ip) ));
q += 2;
fstrcpy(reply_name,my_name);
push_ascii(q, reply_name,
size = push_ascii(q, reply_name,
sizeof(outbuf)-PTR_DIFF(q, outbuf),
STR_TERMINATE);
if (size == (size_t)-1) {
return;
}
q = skip_string(outbuf,sizeof(outbuf),q); /* PDC name */
/* PDC and domain name */
@ -377,7 +384,6 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n",
pstring domain;
pstring hostname;
char *component, *dc, *q1;
uint8 size;
char *q_orig = q;
int str_offset;
@ -423,6 +429,9 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n",
size = push_ascii(&q[1], component,
sizeof(outbuf) - PTR_DIFF(q+1, outbuf),
0);
if (size == (size_t)-1 || size > 0xff) {
return;
}
SCVAL(q, 0, size);
q += (size + 1);
}
@ -443,6 +452,9 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n",
size = push_ascii(&q[1], hostname,
sizeof(outbuf) - PTR_DIFF(q+1, outbuf),
0);
if (size == (size_t)-1 || size > 0xff) {
return;
}
SCVAL(q, 0, size);
q += (size + 1);
@ -458,6 +470,9 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n",
size = push_ascii(&q[1], lp_workgroup(),
sizeof(outbuf) - PTR_DIFF(q+1, outbuf),
STR_UPPER);
if (size == (size_t)-1 || size > 0xff) {
return;
}
SCVAL(q, 0, size);
q += (size + 1);
@ -473,6 +488,9 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n",
size = push_ascii(&q[1], my_name,
sizeof(outbuf) - PTR_DIFF(q+1, outbuf),
0);
if (size == (size_t)-1 || size > 0xff) {
return;
}
SCVAL(q, 0, size);
q += (size + 1);
@ -489,6 +507,9 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n",
size = push_ascii(&q[1], ascuser,
sizeof(outbuf) - PTR_DIFF(q+1, outbuf),
0);
if (size == (size_t)-1 || size > 0xff) {
return;
}
SCVAL(q, 0, size);
q += (size + 1);
}
@ -501,6 +522,9 @@ reporting %s domain %s 0x%x ntversion=%x lm_nt token=%x lm_20 token=%x\n",
size = push_ascii(&q[1], "Default-First-Site-Name",
sizeof(outbuf) - PTR_DIFF(q+1, outbuf),
0);
if (size == (size_t)-1 || size > 0xff) {
return;
}
SCVAL(q, 0, size);
q += (size + 1);