You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
1.3 KiB

From 9d74090cea256021e68b204c4770a5df28398cbd Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Mon, 1 May 2017 15:59:09 -0400
Subject: [PATCH 20/22] dp.h: Try to make covscan believe format() is checking
its bounds.
covscan doesn't grok that size and off wind up being proxies for buf's
NULL check. Hilarity ensues.
Signed-off-by: Peter Jones <pjones@redhat.com>
---
src/dp.h | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/src/dp.h b/src/dp.h
index d6775a6..c14a9ec 100644
--- a/src/dp.h
+++ b/src/dp.h
@@ -28,11 +28,17 @@
#include "ucs2.h"
#define format(buf, size, off, dp_type, fmt, args...) ({ \
- ssize_t _x = 0; \
- if ((off) >= 0) { \
- _x = snprintf(((buf)+(off)), \
- ((size)?((size)-(off)):0), \
- fmt, ## args); \
+ ssize_t _insize = 0; \
+ void *_inbuf = NULL; \
+ if ((buf) != NULL && (size) > 0) { \
+ _inbuf = (buf) + (off); \
+ _insize = (size) - (off); \
+ } \
+ if ((off) >= 0 && \
+ ((buf == NULL && _insize == 0) || \
+ (buf != NULL && _insize >= 0))) { \
+ ssize_t _x = 0; \
+ _x = snprintf(_inbuf, _insize, fmt, ## args); \
if (_x < 0) { \
efi_error( \
"could not build %s DP string", \
--
2.12.2