1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-02 09:47:23 +03:00

Fix from Andrew Esh to ensure tdb_pack can't segfault.

Jeremy.
(This used to be commit 9783929d4ed51e63bddde4b890caa01b737abe85)
This commit is contained in:
Jeremy Allison 2003-04-10 19:08:45 +00:00
parent 7c735eabc9
commit 2962bec1ab

View File

@ -405,41 +405,41 @@ size_t tdb_pack(char *buf, int bufsize, const char *fmt, ...)
case 'w':
len = 2;
w = (uint16)va_arg(ap, int);
if (bufsize >= len)
if (bufsize && bufsize >= len)
SSVAL(buf, 0, w);
break;
case 'd':
len = 4;
d = va_arg(ap, uint32);
if (bufsize >= len)
if (bufsize && bufsize >= len)
SIVAL(buf, 0, d);
break;
case 'p':
len = 4;
p = va_arg(ap, void *);
d = p?1:0;
if (bufsize >= len)
if (bufsize && bufsize >= len)
SIVAL(buf, 0, d);
break;
case 'P':
s = va_arg(ap,char *);
w = strlen(s);
len = w + 1;
if (bufsize >= len)
if (bufsize && bufsize >= len)
memcpy(buf, s, len);
break;
case 'f':
s = va_arg(ap,char *);
w = strlen(s);
len = w + 1;
if (bufsize >= len)
if (bufsize && bufsize >= len)
memcpy(buf, s, len);
break;
case 'B':
i = va_arg(ap, int);
s = va_arg(ap, char *);
len = 4+i;
if (bufsize >= len) {
if (bufsize && bufsize >= len) {
SIVAL(buf, 0, i);
memcpy(buf+4, s, i);
}
@ -452,7 +452,10 @@ size_t tdb_pack(char *buf, int bufsize, const char *fmt, ...)
}
buf += len;
bufsize -= len;
if (bufsize)
bufsize -= len;
if (bufsize < 0)
bufsize = 0;
}
va_end(ap);