1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-06-20 01:02:44 +02:00

common: Avoid undefined behavior of left shift operator.

* common/iobuf.c (block_filter): Handle an error earlier.
Make sure it's unsigned.

--

GnuPG-bug-id: 4975
Suggested-by: lutianxiong <lutianxiong@huawei.com>
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
NIIBE Yutaka 2020-07-16 11:00:45 +09:00
parent 91cb46d948
commit 8abf065307

View File

@ -909,16 +909,22 @@ block_filter (void *opaque, int control, iobuf_t chain, byte * buffer,
} }
else if (c == 255) else if (c == 255)
{ {
a->size = iobuf_get_noeof (chain) << 24; size_t len = 0;
a->size |= iobuf_get_noeof (chain) << 16; int i;
a->size |= iobuf_get_noeof (chain) << 8;
if ((c = iobuf_get (chain)) == -1) for (i = 0; i < 4; i++)
if ((c = iobuf_get (chain)) == -1)
break;
else
len = ((len << 8) | c);
if (i < 4)
{ {
log_error ("block_filter: invalid 4 byte length\n"); log_error ("block_filter: invalid 4 byte length\n");
rc = GPG_ERR_BAD_DATA; rc = GPG_ERR_BAD_DATA;
break; break;
} }
a->size |= c; a->size = len;
a->partial = 2; a->partial = 2;
if (!a->size) if (!a->size)
{ {