summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libopkg/opkg_message.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/libopkg/opkg_message.c b/libopkg/opkg_message.c
index e5324e6..7114e3a 100644
--- a/libopkg/opkg_message.c
+++ b/libopkg/opkg_message.c
@@ -94,13 +94,28 @@ opkg_message (message_level_t level, const char *fmt, ...)
if (level == ERROR) {
#define MSG_LEN 4096
char msg[MSG_LEN];
- if (vsnprintf(msg, MSG_LEN, fmt, ap) >= MSG_LEN) {
- fprintf(stderr, "%s: Message truncated!\n",
+ int ret;
+ ret = vsnprintf(msg, MSG_LEN, fmt, ap);
+ if (ret < 0) {
+ fprintf(stderr, "%s: encountered an output or encoding"
+ " error during vsnprintf.\n",
+ __FUNCTION__);
+ va_end (ap);
+ exit(EXIT_FAILURE);
+ }
+ if (ret >= MSG_LEN) {
+ fprintf(stderr, "%s: Message truncated.\n",
__FUNCTION__);
}
push_error_list(msg);
- } else
- vprintf(fmt, ap);
+ } else {
+ if (vprintf(fmt, ap) < 0) {
+ fprintf(stderr, "%s: encountered an output or encoding"
+ " error during vprintf.\n",
+ __FUNCTION__);
+ exit(EXIT_FAILURE);
+ }
+ }
va_end (ap);
}