common: Use iobuf_get_noeof to avoid undefined behaviors.
authorNIIBE Yutaka <gniibe@fsij.org>
Mon, 10 Sep 2018 04:44:47 +0000 (13:44 +0900)
committerDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Mon, 8 Oct 2018 15:36:01 +0000 (16:36 +0100)
* common/iobuf.c (block_filter): Use iobuf_get_noeof.

--

Cherry-pick from master commit of:
f80346f42df4bdc7d0a9741c3922129aceae4f81

When signed integer has negative value, left shift computation is
undefined in C.

GnuPG-bug-id: 4093
Reported-by: Philippe Antoine
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
(cherry picked from commit 0383e7fed7b2a45c7f0ae4c11415c6a9a3a3ddb7)

Gbp-Pq: Name common-Use-iobuf_get_noeof-to-avoid-undefined-behaviors.patch

common/iobuf.c

index 5a9fd7caf9cea213607c04fe6917948ab33ba7f9..8de46f4c334a90a73d57558bc0496309bd13affd 100644 (file)
@@ -856,9 +856,9 @@ block_filter (void *opaque, int control, iobuf_t chain, byte * buffer,
                    }
                  else if (c == 255)
                    {
-                     a->size = (size_t)iobuf_get (chain) << 24;
-                     a->size |= iobuf_get (chain) << 16;
-                     a->size |= iobuf_get (chain) << 8;
+                     a->size = iobuf_get_noeof (chain) << 24;
+                     a->size |= iobuf_get_noeof (chain) << 16;
+                     a->size |= iobuf_get_noeof (chain) << 8;
                      if ((c = iobuf_get (chain)) == -1)
                        {
                          log_error ("block_filter: invalid 4 byte length\n");